build-ts 17.1.4 → 17.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"node:fs";import o from"node:path";import{readAndApplyEnvironmentVariables as n,yargsOptionsBuilderForEnv as s,removeNpmAndYarnEnvironmentVariables as t}from"@willbooster/shared-lib-node";import i from"yargs";import{hideBin as r}from"yargs/helpers";import a from"chalk";import c from"date-time";import p from"pretty-ms";import{rollup as l,watch as d}from"rollup";import{onExit as u}from"signal-exit";import m from"node:url";import{babel as f}from"@rollup/plugin-babel";import*as y from"@rollup/plugin-commonjs";import*as h from"@rollup/plugin-json";import*as b from"@rollup/plugin-node-resolve";import*as j from"@rollup/plugin-replace";import*as g from"@rollup/plugin-terser";import*as v from"rollup-plugin-analyzer";import{keepImport as w}from"rollup-plugin-keep-import";import{nodeExternals as x}from"rollup-plugin-node-externals";import S from"rollup-plugin-preserve-directives";import{string as k}from"rollup-plugin-string";import $ from"node:process";import*as T from"node:child_process";import{createRequire as O}from"node:module";let D;function E(e,o){return D||(D=n(e,o),e.verbose&&console.info("Loaded env vars:",Object.keys(D))),D}function _(e,o){const n={},s=new Set([...(e.inline??[]).flatMap(e=>e.toString().split(",")),...e.autoInline?Object.keys(E(e,o)):[]]);for(const e of s)void 0!==process.env[e]&&(n[`process.env.${e}`]=JSON.stringify(process.env[e]));return e.verbose&&console.info("Inline env vars:",Object.keys(n)),n}const N=["app","functions","lib"];async function F(n){const s=o.join(n,"package.json");try{const o=await e.promises.readFile(s,"utf8");return[JSON.parse(o),s]}catch{}return[void 0,s]}const R={...s,silent:{description:"Whether watch mode is enabled or not",type:"boolean",alias:"s"}},B={...R,input:{description:'Paths of source code files to be built. The first file is main. If no option is given, "src/index.{ts,tsx}" from package directory is targeted.',type:"array",alias:"i"},"core-js":{description:"Whether or not core-js is employed.",type:"boolean",default:!1},"core-js-proposals":{description:"Whether or not core-js with proposals support is employed.",type:"boolean",default:!1},minify:{description:"Whether or not minification is enabled.",type:"boolean",default:!0},sourcemap:{description:"Whether or not sourcemap is enabled.",type:"boolean",default:!0},external:{description:"Additional external dependencies.",type:"array"},inline:{description:"Environment variables to be inlined.",type:"array"},"auto-inline":{description:"Inline environment variables defined at env files.",type:"boolean",default:!1},watch:{description:"Whether watch mode is enabled or not",type:"boolean",alias:"w"},keepImport:{description:"Identifiers to be kept as import statements.",type:"array"},bundleBuiltins:{description:"Module names same with builtins (e.g., undici) to be bundled.",type:"array"}},I={...B,moduleType:{description:"esm, cjs, or either (default).",type:"string",alias:"m"}},L={...I,onlyPackageJson:{description:"Whether to generate only package.json.",type:"boolean"}},A={...B,moduleType:{description:"esm, cjs, either, or both (default).",type:"string",alias:"m"},jsExtension:{description:"Whether to use .js in cjs and/or esm: either (default), both, or none.",type:"string",alias:"j"}};function U(n,s,t,i,r,a){const c=[...n.external??[]].map(e=>e.toString());if(t.dependencies?.["@prisma/client"]&&c.push("prisma-client"),c.push(...Object.keys(t.dependencies??{}),...Object.keys(t.peerDependencies??{}),...Object.keys(t.optionalDependencies??{})),e.existsSync(o.join("..","..","package.json"))){const n=e.readdirSync(o.join(".."),{withFileTypes:!0});for(const s of n){if(!s.isDirectory())continue;const n=o.join("..",s.name,"package.json");if(!e.existsSync(n))continue;const i=JSON.parse(e.readFileSync(n,"utf8"));t.dependencies?.[i.name??""]&&c.push(...Object.keys(i.dependencies??{}),...Object.keys(i.peerDependencies??{}),...Object.keys(i.optionalDependencies??{}))}}const p=[".cjs",".mjs",".js",".jsx",".json",".cts",".mts",".ts",".tsx"],l=o.join(m.fileURLToPath(o.dirname(o.dirname(import.meta.url))),"babel.config.mjs"),d=W(j),u=W(h),$=W(b),T=W(y),O=W(g),D=W(v),E=[d({delimiters:["",""],preventAssignment:!0,values:_(n,r)}),u(),x({deps:!0,devDeps:!1,peerDeps:!0,optDeps:!0,include:c.map(e=>new RegExp(`^${e}(?:\\/.+)?`)),exclude:i&&new RegExp(`^@?${i}(?:\\/.+)?`)}),$({extensions:p,preferBuiltins:e=>!n.bundleBuiltins?.includes(e)}),T(),w({moduleNames:n.keepImport?.map(e=>e.toString())??[]})],N="app-node"===s||"functions"===s||!c.includes("@babel/runtime");return process.env.BUILDTS_USE_BABLE_RUNTIME=N?"":"1",E.push(f({configFile:l,extensions:p,babelHelpers:N?"bundled":"runtime",exclude:/^(.+\/)?node_modules\/.+$/}),...a.some(e=>e.preserveModules)?[S()]:[],k({include:["**/*.csv","**/*.txt"]})),n.minify&&E.push(O({compress:{directives:!1}})),E.push(D({summaryOnly:!0})),E}function W(e){return e.default}const J=O(import.meta.url);async function P(n,s){const t=M(s);if(!t)throw new Error(`Failed to find tsconfig.json in ${s}.`);n.verbose&&console.info("Found tsconfig.json:",t);const i=[];let r=o.join("dist",o.basename(s),"src");if(e.existsSync(r)){const n=o.dirname(s),t=await e.promises.readdir(n,{withFileTypes:!0});s=o.resolve(s);for(const r of t){if(!r.isDirectory())continue;const t=o.resolve(n,r.name);if(t===s)continue;const a=M(t),c=o.join("dist",r.name,"src");a&&e.existsSync(c)&&i.push([t,a,c])}}else r="dist";i.push([s,t,r]);let a=!0;for(const[e,t,r]of i)a&&=await C(n,e,t,o.join(s,r));return a}async function C(n,s,t,i){n.verbose&&console.info("runTypeScriptNative()",s,t,i);const r=o.dirname(t),a=o.join(r,`.build-ts-tsgo.${process.pid}.${Date.now()}.json`);try{await e.promises.writeFile(a,JSON.stringify(await async function(n,s,t){const i={declaration:!0,emitDeclarationOnly:!0,module:"NodeNext",moduleResolution:"NodeNext",noEmit:!1,noEmitOnError:!0,outDir:t,rootDir:"src"};if(await H(o.join(n,"src"))){const s=await async function(o){try{return(await e.promises.readdir(o,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return[]}}(o.join(n,"node_modules","@types"));s.includes("node")&&(i.types=s)}return{compilerOptions:i,extends:V(o.dirname(s),s),include:["src/**/*"]}}(s,t,i),void 0,2));const n=T.spawnSync(process.execPath,[G(),"-p",a],{cwd:s,stdio:"inherit"});if(n.error)throw n.error;return 0===n.status}finally{await e.promises.rm(a,{force:!0})}}function M(n){let s=o.resolve(n);for(;;){const n=o.join(s,"tsconfig.json");if(e.existsSync(n))return n;const t=o.dirname(s);if(t===s)return;s=t}}function G(){const e=J.resolve("@typescript/native-preview/package.json");return o.join(o.dirname(e),"bin","tsgo.js")}async function H(n){try{const s=await e.promises.readdir(n,{withFileTypes:!0});for(const t of s){const s=o.join(n,t.name);if(t.isDirectory()){if(await H(s))return!0}else if(/\.[cm]?tsx?$/.test(t.name)&&(await e.promises.readFile(s,"utf8")).includes("node:"))return!0}}catch{return!1}return!1}function V(e,n){const s=o.relative(e,n).replaceAll(o.sep,"/");return s.startsWith(".")?s:`./${s}`}const Y={command:"app [package]",describe:"Build an app",builder:I,handler:async e=>K(e,"app")},z={command:"functions [package]",describe:"Build a GCP/Firebase functions app",builder:L,async handler(e){if(!e.onlyPackageJson)return K(e,"functions");{const n=o.resolve(e.package?.toString()??"."),[s,t]=await F(n);s||(console.error(`Failed to parse package.json (${t}).`),process.exit(1)),await Q(n,s,e.moduleType)}}},q={command:"lib [package]",describe:"Build a Node.js / React library",builder:A,handler:async e=>K(e,"lib")};async function K(n,s){process.env.NODE_ENV||="production";const t=!n.silent&&n.verbose,i=process.cwd(),r=o.resolve(n.package?.toString()??"."),[m,f]=await F(r);m||(console.error(`Failed to parse package.json (${f}).`),process.exit(1)),E(n,r);const y=function(n,s,t){if(n.input&&n.input.length>0)return n.input.map(e=>o.resolve(s,e.toString()));const i=o.join(t,"src");for(const n of["ts","tsx","cts","mts"]){const s=o.join(i,`index.${n}`);if(e.existsSync(s))return[s]}console.error("Failed to detect input file."),process.exit(1)}(n,i,r),h=function(e,o){switch(e){case"app":return"app-node";case"functions":return"functions";case"lib":return o.some(e=>e.endsWith(".tsx"))?"lib-react":"lib";default:console.error("target option must be one of: "+N.join(", ")),process.exit(1)}}(s,y);t&&(console.info("argv:",n),console.info("packageJsonPath:",f),console.info("Target (Category):",`${h} (${s})`));const[b]=function(e){const o=e.name?.toString()??"",n=/@([^/]+)\/(.+)/.exec(o),[,s,t]=n??[];return[s,t]}(m),j="module"===m.type;n["core-js"]?process.env.BUILD_TS_COREJS="1":n["core-js-proposals"]&&(process.env.BUILD_TS_COREJS_WITH_PROPOSALS="1"),t&&(process.env.BUILD_TS_VERBOSE="1"),process.env.BUILD_TS_TARGET_CATEGORY=s,process.env.BUILD_TS_TARGET_DETAIL=h;const g=function(e,n,s,t){const i=o.join(s,"dist");if("app-node"===n||"functions"===n)return[{dir:i,format:X(t,e.moduleType)?"module":"commonjs",sourcemap:e.sourcemap&&"inline"}];const r=[],a=e.moduleType||"both",c=e.jsExtension||"either";("cjs"===a||"both"===a||"either"===a&&!t)&&r.push({dir:i,entryFileNames:"both"===c||"either"===c&&!t?"[name].js":"[name].cjs",format:"commonjs",preserveModules:!0,sourcemap:e.sourcemap});("esm"===a||"both"===a||"either"===a&&t)&&r.push({dir:i,entryFileNames:"both"===c||"either"===c&&t?"[name].js":"[name].mjs",format:"module",preserveModules:!0,sourcemap:e.sourcemap});return r}(n,h,r,j);t&&console.info("OutputOptions:",g),0===g.length&&(console.error("Failed to detect output files."),process.exit(1)),process.chdir(r),await e.promises.rm(o.join(r,"dist"),{recursive:!0,force:!0}),"functions"===h&&await Q(r,m,n.moduleType);const v={input:"functions"===h?Object.fromEntries(y.map((e,n)=>[0===n?"index":o.basename(e,o.extname(e)),e])):y,plugins:U(n,h,m,b,r,g),watch:n.watch?{clearScreen:!1}:void 0},w=e=>(Array.isArray(e)?e:[e]).map(e=>o.relative(r,e));if(n.watch)!function(e,o,n,s,t,i){const r=d({...s,output:t}),l=async e=>{process.removeListener("uncaughtException",l),process.stdin.removeListener("end",l),r&&await r.close(),e&&process.exit(e)};u(l),process.on("uncaughtException",l),process.stdin.isTTY||(process.stdin.on("end",l),process.stdin.resume());r.on("event",async s=>{switch(s.code){case"ERROR":!function(e,o=!1){const n=e.name||e.cause?.name,s=n?`${n}: `:"",t=`${e.plugin?`(plugin ${e.plugin}) `:""}${s}${e.message}`,i=[a.bold(a.red(`[!] ${a.bold(t.toString())}`))];e.url&&i.push(a.cyan(e.url)),e.loc?i.push(`${e.loc.file||e.id} (${e.loc.line}:${e.loc.column})`):e.id&&i.push(e.id),e.frame&&i.push(a.dim(e.frame)),e.stack&&i.push(a.dim(e.stack?.replace(`${s}${e.message}\n`,""))),i.push("",""),console.error(i.join("\n")),o||$.exit(1)}(s.error,!0);break;case"BUNDLE_START":{if(e.silent)break;const o=s.input,t=[];"string"==typeof o?t.push(o):t.push(...Array.isArray(o)?o:Object.values(o)),console.info(a.cyan(`Bundles ${a.bold(i(t).join(", "))} → ${a.bold(i(s.output).join(", "))}\non ${n} ...`));break}case"BUNDLE_END":if(e.silent)break;console.info(a.green(`Created ${a.bold(i(s.output).join(", "))} in ${a.bold(p(s.duration))}`)),"app-node"!==o&&"functions"!==o&&await P(e,n);break;case"END":if(e.silent)break;console.info(`\n[${c()}] waiting for changes...`)}"result"in s&&s.result&&s.result.close()})}(n,h,r,v,g,w);else{let e;n.silent||console.info(a.cyan(`Bundles ${a.bold(w(y).join(", "))} → ${a.bold(w(g.map(e=>e.file||e.dir||"")).join(", "))}\non ${r} ...`));let o=!1;try{const o=Date.now(),s=await l(v);e=s,await Promise.all(g.map(e=>s.write(e))),n.silent||console.info(a.green(`Created ${w(g.map(e=>e.file||e.dir||"")).join(", ")} in ${a.bold(p(Date.now()-o))}`))}catch(e){o=!0,console.error("Failed to build due to:",e)}await(e?.close()),o&&process.exit(1),"app-node"===h||"functions"===h||await P(n,r)||process.exit(1)}}async function Q(n,s,t){s.name+="-dist";const i="module"===s.type,r=X(i,t);s.main=i===r?"index.js":r?"index.mjs":"index.cjs",delete s.scripts,delete s.devDependencies,await e.promises.mkdir(o.join(n,"dist"),{recursive:!0}),await e.promises.writeFile(o.join(n,"dist","package.json"),JSON.stringify(s))}function X(e,o){return"esm"===o||(!o||"either"===o)&&e}const Z={command:"run <file>",describe:"Run script",builder:{...R,module:{description:"A module type: cjs or esm",type:"string",alias:"m"},watch:{description:"Whether watch mode is enabled or not",type:"boolean",alias:"w"}},handler(e){E(e,process.cwd());const o=e.file?.toString()??"",n=process.versions.bun,s=n?"bun":"node",t=n?["--bun"]:["--no-warnings","--import","tsx"];e.watch&&t.push("--watch"),t.push(o);const[,...i]=e._,r=[...t,...i.map(e=>e.toString())];e.verbose&&console.info(`Running '${s} ${r.join(" ")}'`);const a=T.spawnSync(s,r,{stdio:"inherit",env:{...process.env}});process.exit(a.status??1)}};t(process.env),await i(r(process.argv)).scriptName("build-ts").options(R).command(Y).command(z).command(q).command(Z).demandCommand().strict().version(function(){let n=o.dirname(new URL(import.meta.url).pathname);for(;!e.existsSync(o.join(n,"package.json"));)n=o.dirname(n);return JSON.parse(e.readFileSync(o.join(n,"package.json"),"utf8")).version}()).help().argv;
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbnYudHMiLCIuLi9zcmMvdHlwZXMudHMiLCIuLi9zcmMvdXRpbHMudHMiLCIuLi9zcmMvc2hhcmVkT3B0aW9uc0J1aWxkZXIudHMiLCIuLi9zcmMvY29tbWFuZHMvYnVpbGQvYnVpbGRlci50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9wbHVnaW4udHMiLCIuLi9zcmMvY29tbWFuZHMvYnVpbGQvdHlwZVNjcmlwdC50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9yb2xsdXBMb2dnZXIudHMiLCIuLi9zcmMvY29tbWFuZHMvcnVuLnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRBbmRBcHBseUVudmlyb25tZW50VmFyaWFibGVzIH0gZnJvbSAnQHdpbGxib29zdGVyL3NoYXJlZC1saWItbm9kZSc7XG5cbmltcG9ydCB0eXBlIHsgYnVpbGRlciB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IHNoYXJlZE9wdGlvbnNCdWlsZGVyIH0gZnJvbSAnLi9zaGFyZWRPcHRpb25zQnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50c1R5cGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxubGV0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBsb2FkcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBgLmVudmAgZmlsZXMuXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlc1dpdGhDYWNoZShcbiAgYXJndjogQXJndW1lbnRzVHlwZTx0eXBlb2Ygc2hhcmVkT3B0aW9uc0J1aWxkZXI+LFxuICBjd2Q6IHN0cmluZ1xuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghZW52VmFycykge1xuICAgIGVudlZhcnMgPSByZWFkQW5kQXBwbHlFbnZpcm9ubWVudFZhcmlhYmxlcyhhcmd2LCBjd2QpO1xuICAgIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnTG9hZGVkIGVudiB2YXJzOicsIE9iamVjdC5rZXlzKGVudlZhcnMpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudlZhcnM7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgZGVmaW5pdGlvbiBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3aWxsIGJlIGluamVjdGVkIGludG8gdGhlIGJ1aWxkLlxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudFZhcmlhYmxlc0RlZmluaXRpb24oXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8dHlwZW9mIGJ1aWxkZXI+LFxuICBjd2Q6IHN0cmluZ1xuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGVudlZhcnNEZWY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgY29uc3QgZW52VmFyTmFtZXMgPSBuZXcgU2V0KFtcbiAgICAuLi4oYXJndi5pbmxpbmUgPz8gW10pLmZsYXRNYXAoKGUpID0+IGUudG9TdHJpbmcoKS5zcGxpdCgnLCcpKSxcbiAgICAuLi4oYXJndi5hdXRvSW5saW5lID8gT2JqZWN0LmtleXMobG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlKGFyZ3YsIGN3ZCkpIDogW10pLFxuICBdKTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGVudlZhck5hbWVzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52W25hbWVdID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgZW52VmFyc0RlZltgcHJvY2Vzcy5lbnYuJHtuYW1lfWBdID0gSlNPTi5zdHJpbmdpZnkocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9XG4gIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICBjb25zb2xlLmluZm8oJ0lubGluZSBlbnYgdmFyczonLCBPYmplY3Qua2V5cyhlbnZWYXJzRGVmKSk7XG4gIH1cbiAgcmV0dXJuIGVudlZhcnNEZWY7XG59XG4iLCJpbXBvcnQgdHlwZSB7IEFyZ3VtZW50c0NhbWVsQ2FzZSwgSW5mZXJyZWRPcHRpb25UeXBlcywgT3B0aW9ucyB9IGZyb20gJ3lhcmdzJztcblxuZXhwb3J0IGNvbnN0IGFsbFRhcmdldENhdGVnb3JpZXMgPSBbJ2FwcCcsICdmdW5jdGlvbnMnLCAnbGliJ10gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFRhcmdldENhdGVnb3J5ID0gKHR5cGVvZiBhbGxUYXJnZXRDYXRlZ29yaWVzKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgYWxsVGFyZ2V0RGV0YWlscyA9IFsnYXBwLW5vZGUnLCAnZnVuY3Rpb25zJywgJ2xpYicsICdsaWItcmVhY3QnXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0RGV0YWlsID0gKHR5cGVvZiBhbGxUYXJnZXREZXRhaWxzKVtudW1iZXJdO1xuXG5leHBvcnQgdHlwZSBBcmd1bWVudHNUeXBlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBPcHRpb25zPj4gPSBBcmd1bWVudHNDYW1lbENhc2U8SW5mZXJyZWRPcHRpb25UeXBlczxUPj47XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHVybCBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFBhY2thZ2VKc29uKGRpclBhdGg6IHN0cmluZyk6IFByb21pc2U8W1BhY2thZ2VKc29uIHwgdW5kZWZpbmVkLCBzdHJpbmddPiB7XG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCAncGFja2FnZS5qc29uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25UZXh0ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUocGFja2FnZUpzb25QYXRoLCAndXRmOCcpO1xuICAgIHJldHVybiBbSlNPTi5wYXJzZShwYWNrYWdlSnNvblRleHQpIGFzIFBhY2thZ2VKc29uLCBwYWNrYWdlSnNvblBhdGhdO1xuICB9IGNhdGNoIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cbiAgcmV0dXJuIFt1bmRlZmluZWQsIHBhY2thZ2VKc29uUGF0aF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWlsZFRzUm9vdFBhdGgoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHVybC5maWxlVVJMVG9QYXRoKHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUoaW1wb3J0Lm1ldGEudXJsKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlQW5kTmFtZShwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pOiBbc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWRdIHtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBwYWNrYWdlSnNvbi5uYW1lPy50b1N0cmluZygpID8/ICcnO1xuICBjb25zdCBtYXRjaCA9IC9AKFteL10rKVxcLyguKykvLmV4ZWMocGFja2FnZU5hbWUpO1xuICBjb25zdCBbLCBuYW1lc3BhY2UsIG5hbWVdID0gbWF0Y2ggPz8gW107XG4gIHJldHVybiBbbmFtZXNwYWNlLCBuYW1lXTtcbn1cbiIsImltcG9ydCB7IHlhcmdzT3B0aW9uc0J1aWxkZXJGb3JFbnYgfSBmcm9tICdAd2lsbGJvb3N0ZXIvc2hhcmVkLWxpYi1ub2RlJztcblxuZXhwb3J0IGNvbnN0IHNoYXJlZE9wdGlvbnNCdWlsZGVyID0ge1xuICAuLi55YXJnc09wdGlvbnNCdWlsZGVyRm9yRW52LFxuICBzaWxlbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgd2F0Y2ggbW9kZSBpcyBlbmFibGVkIG9yIG5vdCcsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGFsaWFzOiAncycsXG4gIH0sXG59IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc2hhcmVkT3B0aW9uc0J1aWxkZXIgfSBmcm9tICcuLi8uLi9zaGFyZWRPcHRpb25zQnVpbGRlci5qcyc7XG5cbmV4cG9ydCBjb25zdCBidWlsZGVyID0ge1xuICAuLi5zaGFyZWRPcHRpb25zQnVpbGRlcixcbiAgaW5wdXQ6IHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdQYXRocyBvZiBzb3VyY2UgY29kZSBmaWxlcyB0byBiZSBidWlsdC4gVGhlIGZpcnN0IGZpbGUgaXMgbWFpbi4gSWYgbm8gb3B0aW9uIGlzIGdpdmVuLCBcInNyYy9pbmRleC57dHMsdHN4fVwiIGZyb20gcGFja2FnZSBkaXJlY3RvcnkgaXMgdGFyZ2V0ZWQuJyxcbiAgICB0eXBlOiAnYXJyYXknLFxuICAgIGFsaWFzOiAnaScsXG4gIH0sXG4gICdjb3JlLWpzJzoge1xuICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciBvciBub3QgY29yZS1qcyBpcyBlbXBsb3llZC4nLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgJ2NvcmUtanMtcHJvcG9zYWxzJzoge1xuICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciBvciBub3QgY29yZS1qcyB3aXRoIHByb3Bvc2FscyBzdXBwb3J0IGlzIGVtcGxveWVkLicsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBtaW5pZnk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgb3Igbm90IG1pbmlmaWNhdGlvbiBpcyBlbmFibGVkLicsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNvdXJjZW1hcDoge1xuICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciBvciBub3Qgc291cmNlbWFwIGlzIGVuYWJsZWQuJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgZXh0ZXJuYWw6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0FkZGl0aW9uYWwgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLicsXG4gICAgdHlwZTogJ2FycmF5JyxcbiAgfSxcbiAgaW5saW5lOiB7XG4gICAgZGVzY3JpcHRpb246ICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgaW5saW5lZC4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gIH0sXG4gICdhdXRvLWlubGluZSc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0lubGluZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVmaW5lZCBhdCBlbnYgZmlsZXMuJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHdhdGNoIG1vZGUgaXMgZW5hYmxlZCBvciBub3QnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBhbGlhczogJ3cnLFxuICB9LFxuICBrZWVwSW1wb3J0OiB7XG4gICAgZGVzY3JpcHRpb246ICdJZGVudGlmaWVycyB0byBiZSBrZXB0IGFzIGltcG9ydCBzdGF0ZW1lbnRzLicsXG4gICAgdHlwZTogJ2FycmF5JyxcbiAgfSxcbiAgYnVuZGxlQnVpbHRpbnM6IHtcbiAgICBkZXNjcmlwdGlvbjogJ01vZHVsZSBuYW1lcyBzYW1lIHdpdGggYnVpbHRpbnMgKGUuZy4sIHVuZGljaSkgdG8gYmUgYnVuZGxlZC4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgYXBwQnVpbGRlciA9IHtcbiAgLi4uYnVpbGRlcixcbiAgbW9kdWxlVHlwZToge1xuICAgIGRlc2NyaXB0aW9uOiAnZXNtLCBjanMsIG9yIGVpdGhlciAoZGVmYXVsdCkuJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBhbGlhczogJ20nLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uc0J1aWxkZXIgPSB7XG4gIC4uLmFwcEJ1aWxkZXIsXG4gIG9ubHlQYWNrYWdlSnNvbjoge1xuICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBnZW5lcmF0ZSBvbmx5IHBhY2thZ2UuanNvbi4nLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBsaWJCdWlsZGVyID0ge1xuICAuLi5idWlsZGVyLFxuICBtb2R1bGVUeXBlOiB7XG4gICAgZGVzY3JpcHRpb246ICdlc20sIGNqcywgZWl0aGVyLCBvciBib3RoIChkZWZhdWx0KS4nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAnbScsXG4gIH0sXG4gIC8vIC5qcyBmaWxlcyBpbiBhIHBhY2thZ2Ugd2l0aCBgXCJ0eXBlXCI6IFwibW9kdWxlXCJgIGFyZSB0cmVhdGVkIGFzIGVzbS5cbiAgLy8gSG93ZXZlciwgd2Ugd2FudCB0byB0cmVhdCB0aGVtIGFzIGNqcyBpbiB0aGUgY2FzZSB3aGVyZSBhIGNqcyBwcm9qZWN0IGltcG9ydHMgYW4gZXNtIHBhY2thZ2UuXG4gIC8vIFRvIGRlYWwgd2l0aCB0aGUgY2FzZSwgd2UgdXNlIC5janMgYW5kIC5tanMgZXh0ZW5zaW9ucyBpbnN0ZWFkIG9mIC5qcyBleHRlbnNpb24uXG4gIGpzRXh0ZW5zaW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHVzZSAuanMgaW4gY2pzIGFuZC9vciBlc206IGVpdGhlciAoZGVmYXVsdCksIGJvdGgsIG9yIG5vbmUuJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBhbGlhczogJ2onLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQW55QnVpbGRlclR5cGUgPSB0eXBlb2YgYXBwQnVpbGRlciB8IHR5cGVvZiBmdW5jdGlvbnNCdWlsZGVyIHwgdHlwZW9mIGxpYkJ1aWxkZXI7XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyBiYWJlbCB9IGZyb20gJ0Byb2xsdXAvcGx1Z2luLWJhYmVsJztcbmltcG9ydCAqIGFzIGNvbW1vbmpzIGZyb20gJ0Byb2xsdXAvcGx1Z2luLWNvbW1vbmpzJztcbmltcG9ydCAqIGFzIGpzb24gZnJvbSAnQHJvbGx1cC9wbHVnaW4tanNvbic7XG5pbXBvcnQgKiBhcyByZXNvbHZlIGZyb20gJ0Byb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZSc7XG5pbXBvcnQgKiBhcyByZXBsYWNlIGZyb20gJ0Byb2xsdXAvcGx1Z2luLXJlcGxhY2UnO1xuaW1wb3J0ICogYXMgdGVyc2VyIGZyb20gJ0Byb2xsdXAvcGx1Z2luLXRlcnNlcic7XG5pbXBvcnQgdHlwZSB7IE91dHB1dE9wdGlvbnMsIFBsdWdpbiB9IGZyb20gJ3JvbGx1cCc7XG5pbXBvcnQgKiBhcyBhbmFseXplIGZyb20gJ3JvbGx1cC1wbHVnaW4tYW5hbHl6ZXInO1xuaW1wb3J0IHsga2VlcEltcG9ydCB9IGZyb20gJ3JvbGx1cC1wbHVnaW4ta2VlcC1pbXBvcnQnO1xuaW1wb3J0IHsgbm9kZUV4dGVybmFscyB9IGZyb20gJ3JvbGx1cC1wbHVnaW4tbm9kZS1leHRlcm5hbHMnO1xuaW1wb3J0IHByZXNlcnZlRGlyZWN0aXZlcyBmcm9tICdyb2xsdXAtcGx1Z2luLXByZXNlcnZlLWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgc3RyaW5nIH0gZnJvbSAncm9sbHVwLXBsdWdpbi1zdHJpbmcnO1xuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGVzRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2Vudi5qcyc7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50c1R5cGUsIFRhcmdldERldGFpbCB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGdldEJ1aWxkVHNSb290UGF0aCB9IGZyb20gJy4uLy4uL3V0aWxzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBidWlsZGVyIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUGx1Z2lucyhcbiAgYXJndjogQXJndW1lbnRzVHlwZTx0eXBlb2YgYnVpbGRlcj4sXG4gIHRhcmdldERldGFpbDogVGFyZ2V0RGV0YWlsLFxuICBwYWNrYWdlSnNvbjogUGFja2FnZUpzb24sXG4gIG5hbWVzcGFjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwYWNrYWdlRGlyUGF0aDogc3RyaW5nLFxuICBvdXRwdXRPcHRpb25zTGlzdDogT3V0cHV0T3B0aW9uc1tdXG4pOiBQbHVnaW5bXSB7XG4gIGNvbnN0IGV4dGVybmFsRGVwcyA9IFsuLi4oYXJndi5leHRlcm5hbCA/PyBbXSldLm1hcCgoaXRlbSkgPT4gaXRlbS50b1N0cmluZygpKTtcbiAgaWYgKHBhY2thZ2VKc29uLmRlcGVuZGVuY2llcz8uWydAcHJpc21hL2NsaWVudCddKSB7XG4gICAgZXh0ZXJuYWxEZXBzLnB1c2goJ3ByaXNtYS1jbGllbnQnKTtcbiAgfVxuICAvLyBTaW5jZSBgZGVwczogdHJ1ZWAgZG9lcyBub3Qgd29yayBmb3IgYGltcG9ydCBjaHVuayBmcm9tICdsb2Rhc2guY2h1bmsvaW5kZXguanMnO2BcbiAgZXh0ZXJuYWxEZXBzLnB1c2goXG4gICAgLi4uT2JqZWN0LmtleXMocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5vcHRpb25hbERlcGVuZGVuY2llcyA/PyB7fSlcbiAgKTtcbiAgLy8gQWRkIGV4dGVybmFsIGRlcGVuZGVuY2llcyBmcm9tIHNpYmxpbmcgcGFja2FnZXNcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKCcuLicsICcuLicsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICBjb25zdCBwYWNrYWdlRGlycyA9IGZzLnJlYWRkaXJTeW5jKHBhdGguam9pbignLi4nKSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIGZvciAoY29uc3QgcGFja2FnZURpciBvZiBwYWNrYWdlRGlycykge1xuICAgICAgaWYgKCFwYWNrYWdlRGlyLmlzRGlyZWN0b3J5KCkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLmpvaW4oJy4uJywgcGFja2FnZURpci5uYW1lLCAncGFja2FnZS5qc29uJyk7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IG90aGVyUGFja2FnZUpzb246IFBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmOCcpKTtcbiAgICAgIGlmIChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXM/LltvdGhlclBhY2thZ2VKc29uLm5hbWUgPz8gJyddKSB7XG4gICAgICAgIGV4dGVybmFsRGVwcy5wdXNoKFxuICAgICAgICAgIC4uLk9iamVjdC5rZXlzKG90aGVyUGFja2FnZUpzb24uZGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyhvdGhlclBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXMgPz8ge30pLFxuICAgICAgICAgIC4uLk9iamVjdC5rZXlzKG90aGVyUGFja2FnZUpzb24ub3B0aW9uYWxEZXBlbmRlbmNpZXMgPz8ge30pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLmNqcycsICcubWpzJywgJy5qcycsICcuanN4JywgJy5qc29uJywgJy5jdHMnLCAnLm10cycsICcudHMnLCAnLnRzeCddO1xuICBjb25zdCBiYWJlbENvbmZpZ1BhdGggPSBwYXRoLmpvaW4oZ2V0QnVpbGRUc1Jvb3RQYXRoKCksICdiYWJlbC5jb25maWcubWpzJyk7XG4gIGNvbnN0IHJlcGxhY2VQbHVnaW4gPSBnZXREZWZhdWx0UGx1Z2luRmFjdG9yeShyZXBsYWNlKTtcbiAgY29uc3QganNvblBsdWdpbiA9IGdldERlZmF1bHRQbHVnaW5GYWN0b3J5KGpzb24pO1xuICBjb25zdCByZXNvbHZlUGx1Z2luID0gZ2V0RGVmYXVsdFBsdWdpbkZhY3RvcnkocmVzb2x2ZSk7XG4gIGNvbnN0IGNvbW1vbmpzUGx1Z2luID0gZ2V0RGVmYXVsdFBsdWdpbkZhY3RvcnkoY29tbW9uanMpO1xuICBjb25zdCB0ZXJzZXJQbHVnaW4gPSBnZXREZWZhdWx0UGx1Z2luRmFjdG9yeSh0ZXJzZXIpO1xuICBjb25zdCBhbmFseXplUGx1Z2luID0gZ2V0RGVmYXVsdFBsdWdpbkZhY3RvcnkoYW5hbHl6ZSk7XG4gIGNvbnN0IHBsdWdpbnM6IFBsdWdpbltdID0gW1xuICAgIHJlcGxhY2VQbHVnaW4oe1xuICAgICAgLy8gSWdub3JlIHdvcmQgYm91bmRhcmllcyBhbmQgcmVwbGFjZSBldmVyeSBpbnN0YW5jZSBvZiB0aGUgc3RyaW5nLlxuICAgICAgLy8gY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcGx1Z2lucy90cmVlL21hc3Rlci9wYWNrYWdlcy9yZXBsYWNlI3dvcmQtYm91bmRhcmllc1xuICAgICAgZGVsaW1pdGVyczogWycnLCAnJ10sXG4gICAgICBwcmV2ZW50QXNzaWdubWVudDogdHJ1ZSxcbiAgICAgIHZhbHVlczogY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZXNEZWZpbml0aW9uKGFyZ3YsIHBhY2thZ2VEaXJQYXRoKSxcbiAgICB9KSxcbiAgICBqc29uUGx1Z2luKCksXG4gICAgbm9kZUV4dGVybmFscyh7XG4gICAgICBkZXBzOiB0cnVlLFxuICAgICAgZGV2RGVwczogZmFsc2UsXG4gICAgICBwZWVyRGVwczogdHJ1ZSxcbiAgICAgIG9wdERlcHM6IHRydWUsXG4gICAgICBpbmNsdWRlOiBleHRlcm5hbERlcHMubWFwKChuYW1lKSA9PiBuZXcgUmVnRXhwKGBeJHtuYW1lfSg/OlxcXFwvLispP2ApKSxcbiAgICAgIGV4Y2x1ZGU6IG5hbWVzcGFjZSAmJiBuZXcgUmVnRXhwKGBeQD8ke25hbWVzcGFjZX0oPzpcXFxcLy4rKT9gKSxcbiAgICB9KSxcbiAgICByZXNvbHZlUGx1Z2luKHtcbiAgICAgIGV4dGVuc2lvbnMsXG4gICAgICBwcmVmZXJCdWlsdGluczogKGlkOiBzdHJpbmcpID0+ICFhcmd2LmJ1bmRsZUJ1aWx0aW5zPy5pbmNsdWRlcyhpZCksXG4gICAgfSksXG4gICAgY29tbW9uanNQbHVnaW4oKSxcbiAgICBrZWVwSW1wb3J0KHsgbW9kdWxlTmFtZXM6IGFyZ3Yua2VlcEltcG9ydD8ubWFwKChpdGVtKSA9PiBpdGVtLnRvU3RyaW5nKCkpID8/IFtdIH0pLFxuICBdO1xuICBjb25zdCBpc0JhYmVsSGVscGVyc0J1bmRsZWQgPVxuICAgIHRhcmdldERldGFpbCA9PT0gJ2FwcC1ub2RlJyB8fCB0YXJnZXREZXRhaWwgPT09ICdmdW5jdGlvbnMnIHx8ICFleHRlcm5hbERlcHMuaW5jbHVkZXMoJ0BiYWJlbC9ydW50aW1lJyk7XG4gIHByb2Nlc3MuZW52LkJVSUxEVFNfVVNFX0JBQkxFX1JVTlRJTUUgPSBpc0JhYmVsSGVscGVyc0J1bmRsZWQgPyAnJyA6ICcxJztcbiAgcGx1Z2lucy5wdXNoKFxuICAgIGJhYmVsKHtcbiAgICAgIGNvbmZpZ0ZpbGU6IGJhYmVsQ29uZmlnUGF0aCxcbiAgICAgIGV4dGVuc2lvbnMsXG4gICAgICAvLyBXZSBuZWVkIGBydW50aW1lIHNpbmNlIGBidW5kbGVkYCBtYXkgYnJlYWsgZGlyZWN0b3J5IHN0cnVjdHVyZSBieSBjcmVhdGluZyBfdmlydHVhbCBkaXJlY3RvcnkuXG4gICAgICBiYWJlbEhlbHBlcnM6IGlzQmFiZWxIZWxwZXJzQnVuZGxlZCA/ICdidW5kbGVkJyA6ICdydW50aW1lJyxcbiAgICAgIGV4Y2x1ZGU6IC9eKC4rXFwvKT9ub2RlX21vZHVsZXNcXC8uKyQvLFxuICAgIH0pLFxuICAgIC4uLihvdXRwdXRPcHRpb25zTGlzdC5zb21lKChvcHRzKSA9PiBvcHRzLnByZXNlcnZlTW9kdWxlcykgPyBbcHJlc2VydmVEaXJlY3RpdmVzKCldIDogW10pLFxuICAgIHN0cmluZyh7IGluY2x1ZGU6IFsnKiovKi5jc3YnLCAnKiovKi50eHQnXSB9KVxuICApO1xuICBpZiAoYXJndi5taW5pZnkpIHtcbiAgICBwbHVnaW5zLnB1c2godGVyc2VyUGx1Z2luKHsgY29tcHJlc3M6IHsgZGlyZWN0aXZlczogZmFsc2UgfSB9KSk7XG4gIH1cbiAgcGx1Z2lucy5wdXNoKGFuYWx5emVQbHVnaW4oeyBzdW1tYXJ5T25seTogdHJ1ZSB9KSk7XG4gIHJldHVybiBwbHVnaW5zO1xufVxuXG50eXBlIFBsdWdpbkZhY3RvcnkgPSAob3B0aW9ucz86IHVua25vd24pID0+IFBsdWdpbjtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFBsdWdpbkZhY3RvcnkobW9kdWxlOiB7IGRlZmF1bHQ6IHVua25vd24gfSk6IFBsdWdpbkZhY3Rvcnkge1xuICByZXR1cm4gbW9kdWxlLmRlZmF1bHQgYXMgUGx1Z2luRmFjdG9yeTtcbn1cbiIsImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50c1R5cGUgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQW55QnVpbGRlclR5cGUgfSBmcm9tICcuL2J1aWxkZXIuanMnO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVEZWNsYXJhdGlvbkZpbGVzKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPixcbiAgY29yZVByb2plY3REaXJQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBjb3JlQ29uZmlnRmlsZSA9IGZpbmRDb25maWdGaWxlKGNvcmVQcm9qZWN0RGlyUGF0aCk7XG4gIGlmICghY29yZUNvbmZpZ0ZpbGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZpbmQgdHNjb25maWcuanNvbiBpbiAke2NvcmVQcm9qZWN0RGlyUGF0aH0uYCk7XG4gIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICBjb25zb2xlLmluZm8oJ0ZvdW5kIHRzY29uZmlnLmpzb246JywgY29yZUNvbmZpZ0ZpbGUpO1xuICB9XG5cbiAgY29uc3QgcHJvamVjdHM6IFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXVtdID0gW107XG4gIGxldCBvdXREaXIgPSBwYXRoLmpvaW4oJ2Rpc3QnLCBwYXRoLmJhc2VuYW1lKGNvcmVQcm9qZWN0RGlyUGF0aCksICdzcmMnKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3V0RGlyKSkge1xuICAgIGNvbnN0IHBhcmVudERpclBhdGggPSBwYXRoLmRpcm5hbWUoY29yZVByb2plY3REaXJQYXRoKTtcbiAgICBjb25zdCBkaXJlbnRzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcihwYXJlbnREaXJQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgY29yZVByb2plY3REaXJQYXRoID0gcGF0aC5yZXNvbHZlKGNvcmVQcm9qZWN0RGlyUGF0aCk7XG4gICAgZm9yIChjb25zdCBkaXJlbnQgb2YgZGlyZW50cykge1xuICAgICAgaWYgKCFkaXJlbnQuaXNEaXJlY3RvcnkoKSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHByb2plY3REaXJQYXRoID0gcGF0aC5yZXNvbHZlKHBhcmVudERpclBhdGgsIGRpcmVudC5uYW1lKTtcbiAgICAgIGlmIChwcm9qZWN0RGlyUGF0aCA9PT0gY29yZVByb2plY3REaXJQYXRoKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgY29uZmlnRmlsZSA9IGZpbmRDb25maWdGaWxlKHByb2plY3REaXJQYXRoKTtcbiAgICAgIGNvbnN0IG91dERpciA9IHBhdGguam9pbignZGlzdCcsIGRpcmVudC5uYW1lLCAnc3JjJyk7XG4gICAgICBpZiAoY29uZmlnRmlsZSAmJiBmcy5leGlzdHNTeW5jKG91dERpcikpIHtcbiAgICAgICAgcHJvamVjdHMucHVzaChbcHJvamVjdERpclBhdGgsIGNvbmZpZ0ZpbGUsIG91dERpcl0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXREaXIgPSAnZGlzdCc7XG4gIH1cbiAgcHJvamVjdHMucHVzaChbY29yZVByb2plY3REaXJQYXRoLCBjb3JlQ29uZmlnRmlsZSwgb3V0RGlyXSk7XG5cbiAgbGV0IGFsbFN1Y2NlZWRlZCA9IHRydWU7XG4gIGZvciAoY29uc3QgW3Byb2plY3REaXJQYXRoLCBjb25maWdGaWxlLCBvdXREaXJdIG9mIHByb2plY3RzKSB7XG4gICAgYWxsU3VjY2VlZGVkICYmPSBhd2FpdCBydW5UeXBlU2NyaXB0TmF0aXZlKGFyZ3YsIHByb2plY3REaXJQYXRoLCBjb25maWdGaWxlLCBwYXRoLmpvaW4oY29yZVByb2plY3REaXJQYXRoLCBvdXREaXIpKTtcbiAgfVxuICByZXR1cm4gYWxsU3VjY2VlZGVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5UeXBlU2NyaXB0TmF0aXZlKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPixcbiAgcHJvamVjdERpclBhdGg6IHN0cmluZyxcbiAgY29uZmlnRmlsZTogc3RyaW5nLFxuICBvdXREaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICBjb25zb2xlLmluZm8oJ3J1blR5cGVTY3JpcHROYXRpdmUoKScsIHByb2plY3REaXJQYXRoLCBjb25maWdGaWxlLCBvdXREaXIpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnRmlsZURpclBhdGggPSBwYXRoLmRpcm5hbWUoY29uZmlnRmlsZSk7XG4gIGNvbnN0IHRlbXBDb25maWdGaWxlID0gcGF0aC5qb2luKGNvbmZpZ0ZpbGVEaXJQYXRoLCBgLmJ1aWxkLXRzLXRzZ28uJHtwcm9jZXNzLnBpZH0uJHtEYXRlLm5vdygpfS5qc29uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKFxuICAgICAgdGVtcENvbmZpZ0ZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeShhd2FpdCBjcmVhdGVUeXBlU2NyaXB0TmF0aXZlQ29uZmlnKHByb2plY3REaXJQYXRoLCBjb25maWdGaWxlLCBvdXREaXIpLCB1bmRlZmluZWQsIDIpXG4gICAgKTtcbiAgICBjb25zdCByZXQgPSBjaGlsZF9wcm9jZXNzLnNwYXduU3luYyhwcm9jZXNzLmV4ZWNQYXRoLCBbZ2V0VHlwZVNjcmlwdE5hdGl2ZVBhdGgoKSwgJy1wJywgdGVtcENvbmZpZ0ZpbGVdLCB7XG4gICAgICBjd2Q6IHByb2plY3REaXJQYXRoLFxuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICB9KTtcbiAgICBpZiAocmV0LmVycm9yKSB0aHJvdyByZXQuZXJyb3I7XG4gICAgcmV0dXJuIHJldC5zdGF0dXMgPT09IDA7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucHJvbWlzZXMucm0odGVtcENvbmZpZ0ZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVHlwZVNjcmlwdE5hdGl2ZUNvbmZpZyhcbiAgcHJvamVjdERpclBhdGg6IHN0cmluZyxcbiAgY29uZmlnRmlsZTogc3RyaW5nLFxuICBvdXREaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBjb21waWxlck9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIGRlY2xhcmF0aW9uOiB0cnVlLFxuICAgIGVtaXREZWNsYXJhdGlvbk9ubHk6IHRydWUsXG4gICAgbW9kdWxlOiAnTm9kZU5leHQnLFxuICAgIG1vZHVsZVJlc29sdXRpb246ICdOb2RlTmV4dCcsXG4gICAgbm9FbWl0OiBmYWxzZSxcbiAgICBub0VtaXRPbkVycm9yOiB0cnVlLFxuICAgIG91dERpcixcbiAgICByb290RGlyOiAnc3JjJyxcbiAgfTtcbiAgaWYgKGF3YWl0IHVzZXNOb2RlUHJvdG9jb2xJbXBvcnQocGF0aC5qb2luKHByb2plY3REaXJQYXRoLCAnc3JjJykpKSB7XG4gICAgY29uc3QgdHlwZXMgPSBhd2FpdCBjb2xsZWN0VHlwZVBhY2thZ2VzKHBhdGguam9pbihwcm9qZWN0RGlyUGF0aCwgJ25vZGVfbW9kdWxlcycsICdAdHlwZXMnKSk7XG4gICAgaWYgKHR5cGVzLmluY2x1ZGVzKCdub2RlJykpIHtcbiAgICAgIGNvbXBpbGVyT3B0aW9ucy50eXBlcyA9IHR5cGVzO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbXBpbGVyT3B0aW9ucyxcbiAgICBleHRlbmRzOiB0b1JlbGF0aXZlQ29uZmlnUGF0aChwYXRoLmRpcm5hbWUoY29uZmlnRmlsZSksIGNvbmZpZ0ZpbGUpLFxuICAgIGluY2x1ZGU6IFsnc3JjLyoqLyonXSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZENvbmZpZ0ZpbGUoZGlyUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGN1cnJlbnREaXJQYXRoID0gcGF0aC5yZXNvbHZlKGRpclBhdGgpO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oY3VycmVudERpclBhdGgsICd0c2NvbmZpZy5qc29uJyk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZSkpIHJldHVybiBjb25maWdGaWxlO1xuXG4gICAgY29uc3QgcGFyZW50RGlyUGF0aCA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyUGF0aCk7XG4gICAgaWYgKHBhcmVudERpclBhdGggPT09IGN1cnJlbnREaXJQYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGN1cnJlbnREaXJQYXRoID0gcGFyZW50RGlyUGF0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlU2NyaXB0TmF0aXZlUGF0aCgpOiBzdHJpbmcge1xuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoJ0B0eXBlc2NyaXB0L25hdGl2ZS1wcmV2aWV3L3BhY2thZ2UuanNvbicpO1xuICByZXR1cm4gcGF0aC5qb2luKHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpLCAnYmluJywgJ3RzZ28uanMnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXNlc05vZGVQcm90b2NvbEltcG9ydChkaXJQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlbnRzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcihkaXJQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgZm9yIChjb25zdCBkaXJlbnQgb2YgZGlyZW50cykge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5qb2luKGRpclBhdGgsIGRpcmVudC5uYW1lKTtcbiAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpZiAoYXdhaXQgdXNlc05vZGVQcm90b2NvbEltcG9ydChjaGlsZFBhdGgpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoL1xcLltjbV0/dHN4PyQvLnRlc3QoZGlyZW50Lm5hbWUpICYmIChhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShjaGlsZFBhdGgsICd1dGY4JykpLmluY2x1ZGVzKCdub2RlOicpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29sbGVjdFR5cGVQYWNrYWdlcyh0eXBlUm9vdHNEaXJQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyZW50cyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIodHlwZVJvb3RzRGlyUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIHJldHVybiBkaXJlbnRzLmZpbHRlcigoZGlyZW50KSA9PiBkaXJlbnQuaXNEaXJlY3RvcnkoKSkubWFwKChkaXJlbnQpID0+IGRpcmVudC5uYW1lKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvUmVsYXRpdmVDb25maWdQYXRoKGZyb21EaXJQYXRoOiBzdHJpbmcsIHRvRmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZnJvbURpclBhdGgsIHRvRmlsZVBhdGgpLnJlcGxhY2VBbGwocGF0aC5zZXAsICcvJyk7XG4gIHJldHVybiByZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLicpID8gcmVsYXRpdmVQYXRoIDogYC4vJHtyZWxhdGl2ZVBhdGh9YDtcbn1cbiIsImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgZGF0ZVRpbWUgZnJvbSAnZGF0ZS10aW1lJztcbmltcG9ydCBtcyBmcm9tICdwcmV0dHktbXMnO1xuaW1wb3J0IHR5cGUgeyBPdXRwdXRPcHRpb25zLCBSb2xsdXBCdWlsZCwgUm9sbHVwT3B0aW9ucyB9IGZyb20gJ3JvbGx1cCc7XG5pbXBvcnQgeyByb2xsdXAsIHdhdGNoIH0gZnJvbSAncm9sbHVwJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlciB9IGZyb20gJ3NpZ25hbC1leGl0JztcbmltcG9ydCB7IG9uRXhpdCB9IGZyb20gJ3NpZ25hbC1leGl0JztcbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tICd0eXBlLWZlc3QnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kTW9kdWxlIH0gZnJvbSAneWFyZ3MnO1xuXG5pbXBvcnQgeyBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUgfSBmcm9tICcuLi8uLi9lbnYuanMnO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudHNUeXBlLCBUYXJnZXRDYXRlZ29yeSwgVGFyZ2V0RGV0YWlsIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYWxsVGFyZ2V0Q2F0ZWdvcmllcyB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGdldE5hbWVzcGFjZUFuZE5hbWUsIHJlYWRQYWNrYWdlSnNvbiB9IGZyb20gJy4uLy4uL3V0aWxzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBbnlCdWlsZGVyVHlwZSwgYnVpbGRlciB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBhcHBCdWlsZGVyLCBmdW5jdGlvbnNCdWlsZGVyLCBsaWJCdWlsZGVyIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcbmltcG9ydCB7IHNldHVwUGx1Z2lucyB9IGZyb20gJy4vcGx1Z2luLmpzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi9yb2xsdXBMb2dnZXIuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVEZWNsYXJhdGlvbkZpbGVzIH0gZnJvbSAnLi90eXBlU2NyaXB0LmpzJztcblxuZXhwb3J0IGNvbnN0IGFwcDogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBBcmd1bWVudHNUeXBlPHR5cGVvZiBhcHBCdWlsZGVyPj4gPSB7XG4gIGNvbW1hbmQ6ICdhcHAgW3BhY2thZ2VdJyxcbiAgZGVzY3JpYmU6ICdCdWlsZCBhbiBhcHAnLFxuICBidWlsZGVyOiBhcHBCdWlsZGVyLFxuICBhc3luYyBoYW5kbGVyKGFyZ3YpIHtcbiAgICByZXR1cm4gYnVpbGQoYXJndiwgJ2FwcCcpO1xuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uczogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBBcmd1bWVudHNUeXBlPHR5cGVvZiBmdW5jdGlvbnNCdWlsZGVyPj4gPSB7XG4gIGNvbW1hbmQ6ICdmdW5jdGlvbnMgW3BhY2thZ2VdJyxcbiAgZGVzY3JpYmU6ICdCdWlsZCBhIEdDUC9GaXJlYmFzZSBmdW5jdGlvbnMgYXBwJyxcbiAgYnVpbGRlcjogZnVuY3Rpb25zQnVpbGRlcixcbiAgYXN5bmMgaGFuZGxlcihhcmd2KSB7XG4gICAgaWYgKGFyZ3Yub25seVBhY2thZ2VKc29uKSB7XG4gICAgICBjb25zdCBwYWNrYWdlRGlyUGF0aCA9IHBhdGgucmVzb2x2ZShhcmd2LnBhY2thZ2U/LnRvU3RyaW5nKCkgPz8gJy4nKTtcbiAgICAgIGNvbnN0IFtwYWNrYWdlSnNvbiwgcGFja2FnZUpzb25QYXRoXSA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbihwYWNrYWdlRGlyUGF0aCk7XG4gICAgICBpZiAoIXBhY2thZ2VKc29uKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBwYWNrYWdlLmpzb24gKCR7cGFja2FnZUpzb25QYXRofSkuYCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGdlbmVyYXRlUGFja2FnZUpzb25Gb3JGdW5jdGlvbnMocGFja2FnZURpclBhdGgsIHBhY2thZ2VKc29uLCBhcmd2Lm1vZHVsZVR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVpbGQoYXJndiwgJ2Z1bmN0aW9ucycpO1xuICAgIH1cbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBsaWI6IENvbW1hbmRNb2R1bGU8dW5rbm93biwgQXJndW1lbnRzVHlwZTx0eXBlb2YgbGliQnVpbGRlcj4+ID0ge1xuICBjb21tYW5kOiAnbGliIFtwYWNrYWdlXScsXG4gIGRlc2NyaWJlOiAnQnVpbGQgYSBOb2RlLmpzIC8gUmVhY3QgbGlicmFyeScsXG4gIGJ1aWxkZXI6IGxpYkJ1aWxkZXIsXG4gIGFzeW5jIGhhbmRsZXIoYXJndikge1xuICAgIHJldHVybiBidWlsZChhcmd2LCAnbGliJyk7XG4gIH0sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGQoYXJndjogQXJndW1lbnRzVHlwZTxBbnlCdWlsZGVyVHlwZT4sIHRhcmdldENhdGVnb3J5OiBUYXJnZXRDYXRlZ29yeSk6IFByb21pc2U8dm9pZD4ge1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViB8fD0gJ3Byb2R1Y3Rpb24nO1xuXG4gIC8vIGBzaWxlbnRgIGlzIHN0cm9uZ2VyIHRoYW4gYHZlcmJvc2VgLlxuICBjb25zdCB2ZXJib3NlID0gIWFyZ3Yuc2lsZW50ICYmIGFyZ3YudmVyYm9zZTtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICBjb25zdCBwYWNrYWdlRGlyUGF0aCA9IHBhdGgucmVzb2x2ZShhcmd2LnBhY2thZ2U/LnRvU3RyaW5nKCkgPz8gJy4nKTtcbiAgY29uc3QgW3BhY2thZ2VKc29uLCBwYWNrYWdlSnNvblBhdGhdID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKHBhY2thZ2VEaXJQYXRoKTtcbiAgaWYgKCFwYWNrYWdlSnNvbikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBwYWNrYWdlLmpzb24gKCR7cGFja2FnZUpzb25QYXRofSkuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgbG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlKGFyZ3YsIHBhY2thZ2VEaXJQYXRoKTtcblxuICBjb25zdCBpbnB1dHMgPSB2ZXJpZnlJbnB1dChhcmd2LCBjd2QsIHBhY2thZ2VEaXJQYXRoKTtcbiAgY29uc3QgdGFyZ2V0RGV0YWlsID0gZGV0ZWN0VGFyZ2V0RGV0YWlsKHRhcmdldENhdGVnb3J5LCBpbnB1dHMpO1xuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdhcmd2OicsIGFyZ3YpO1xuICAgIGNvbnNvbGUuaW5mbygncGFja2FnZUpzb25QYXRoOicsIHBhY2thZ2VKc29uUGF0aCk7XG4gICAgY29uc29sZS5pbmZvKCdUYXJnZXQgKENhdGVnb3J5KTonLCBgJHt0YXJnZXREZXRhaWx9ICgke3RhcmdldENhdGVnb3J5fSlgKTtcbiAgfVxuXG4gIGNvbnN0IFtuYW1lc3BhY2VdID0gZ2V0TmFtZXNwYWNlQW5kTmFtZShwYWNrYWdlSnNvbik7XG4gIGNvbnN0IGlzRXNtUGFja2FnZSA9IHBhY2thZ2VKc29uLnR5cGUgPT09ICdtb2R1bGUnO1xuXG4gIGlmIChhcmd2Wydjb3JlLWpzJ10pIHtcbiAgICBwcm9jZXNzLmVudi5CVUlMRF9UU19DT1JFSlMgPSAnMSc7XG4gIH0gZWxzZSBpZiAoYXJndlsnY29yZS1qcy1wcm9wb3NhbHMnXSkge1xuICAgIHByb2Nlc3MuZW52LkJVSUxEX1RTX0NPUkVKU19XSVRIX1BST1BPU0FMUyA9ICcxJztcbiAgfVxuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgcHJvY2Vzcy5lbnYuQlVJTERfVFNfVkVSQk9TRSA9ICcxJztcbiAgfVxuICBwcm9jZXNzLmVudi5CVUlMRF9UU19UQVJHRVRfQ0FURUdPUlkgPSB0YXJnZXRDYXRlZ29yeTtcbiAgcHJvY2Vzcy5lbnYuQlVJTERfVFNfVEFSR0VUX0RFVEFJTCA9IHRhcmdldERldGFpbDtcblxuICBjb25zdCBvdXRwdXRPcHRpb25zTGlzdCA9IGdldE91dHB1dE9wdGlvbnNMaXN0KGFyZ3YsIHRhcmdldERldGFpbCwgcGFja2FnZURpclBhdGgsIGlzRXNtUGFja2FnZSk7XG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdPdXRwdXRPcHRpb25zOicsIG91dHB1dE9wdGlvbnNMaXN0KTtcbiAgfVxuICBpZiAob3V0cHV0T3B0aW9uc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRldGVjdCBvdXRwdXQgZmlsZXMuJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJvY2Vzcy5jaGRpcihwYWNrYWdlRGlyUGF0aCk7XG4gIGF3YWl0IGZzLnByb21pc2VzLnJtKHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ2Rpc3QnKSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICBpZiAodGFyZ2V0RGV0YWlsID09PSAnZnVuY3Rpb25zJykge1xuICAgIGF3YWl0IGdlbmVyYXRlUGFja2FnZUpzb25Gb3JGdW5jdGlvbnMocGFja2FnZURpclBhdGgsIHBhY2thZ2VKc29uLCBhcmd2Lm1vZHVsZVR5cGUpO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogUm9sbHVwT3B0aW9ucyA9IHtcbiAgICBpbnB1dDpcbiAgICAgIHRhcmdldERldGFpbCA9PT0gJ2Z1bmN0aW9ucydcbiAgICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBpbnB1dHMubWFwKChpbnB1dCwgaW5kZXgpID0+IFtpbmRleCA9PT0gMCA/ICdpbmRleCcgOiBwYXRoLmJhc2VuYW1lKGlucHV0LCBwYXRoLmV4dG5hbWUoaW5wdXQpKSwgaW5wdXRdKVxuICAgICAgICAgIClcbiAgICAgICAgOiBpbnB1dHMsXG4gICAgcGx1Z2luczogc2V0dXBQbHVnaW5zKGFyZ3YsIHRhcmdldERldGFpbCwgcGFja2FnZUpzb24sIG5hbWVzcGFjZSwgcGFja2FnZURpclBhdGgsIG91dHB1dE9wdGlvbnNMaXN0KSxcbiAgICB3YXRjaDogYXJndi53YXRjaCA/IHsgY2xlYXJTY3JlZW46IGZhbHNlIH0gOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgY29uc3QgcGF0aFRvUmVsYXRpdmVQYXRoID0gKHBhdGhzOiBzdHJpbmcgfCBSZWFkb25seTxzdHJpbmdbXT4pOiBzdHJpbmdbXSA9PlxuICAgIChBcnJheS5pc0FycmF5KHBhdGhzKSA/IHBhdGhzIDogW3BhdGhzXSkubWFwKChwKSA9PiBwYXRoLnJlbGF0aXZlKHBhY2thZ2VEaXJQYXRoLCBwKSk7XG4gIGlmIChhcmd2LndhdGNoKSB7XG4gICAgd2F0Y2hSb2xsdXAoYXJndiwgdGFyZ2V0RGV0YWlsLCBwYWNrYWdlRGlyUGF0aCwgb3B0aW9ucywgb3V0cHV0T3B0aW9uc0xpc3QsIHBhdGhUb1JlbGF0aXZlUGF0aCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFhcmd2LnNpbGVudCkge1xuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBjaGFsay5jeWFuKFxuICAgICAgICAgIGBCdW5kbGVzICR7Y2hhbGsuYm9sZChwYXRoVG9SZWxhdGl2ZVBhdGgoaW5wdXRzKS5qb2luKCcsICcpKX0g4oaSICR7Y2hhbGsuYm9sZChcbiAgICAgICAgICAgIHBhdGhUb1JlbGF0aXZlUGF0aChvdXRwdXRPcHRpb25zTGlzdC5tYXAoKG9wdHMpID0+IG9wdHMuZmlsZSB8fCBvcHRzLmRpciB8fCAnJykpLmpvaW4oJywgJylcbiAgICAgICAgICApfVxcbm9uICR7cGFja2FnZURpclBhdGh9IC4uLmBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgYnVuZGxlOiBSb2xsdXBCdWlsZCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYnVpbGRGYWlsZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IF9idW5kbGUgPSBhd2FpdCByb2xsdXAob3B0aW9ucyk7XG4gICAgICBidW5kbGUgPSBfYnVuZGxlO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwob3V0cHV0T3B0aW9uc0xpc3QubWFwKChvcHRzKSA9PiBfYnVuZGxlLndyaXRlKG9wdHMpKSk7XG5cbiAgICAgIGlmICghYXJndi5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgIGNoYWxrLmdyZWVuKFxuICAgICAgICAgICAgYENyZWF0ZWQgJHtwYXRoVG9SZWxhdGl2ZVBhdGgob3V0cHV0T3B0aW9uc0xpc3QubWFwKChvcHRzKSA9PiBvcHRzLmZpbGUgfHwgb3B0cy5kaXIgfHwgJycpKS5qb2luKFxuICAgICAgICAgICAgICAnLCAnXG4gICAgICAgICAgICApfSBpbiAke2NoYWxrLmJvbGQobXMoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkpfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGJ1aWxkRmFpbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBidWlsZCBkdWUgdG86JywgZXJyb3IpO1xuICAgIH1cbiAgICBhd2FpdCBidW5kbGU/LmNsb3NlKCk7XG4gICAgaWYgKGJ1aWxkRmFpbGVkKSBwcm9jZXNzLmV4aXQoMSk7XG5cbiAgICBpZiAoXG4gICAgICB0YXJnZXREZXRhaWwgIT09ICdhcHAtbm9kZScgJiZcbiAgICAgIHRhcmdldERldGFpbCAhPT0gJ2Z1bmN0aW9ucycgJiZcbiAgICAgICEoYXdhaXQgZ2VuZXJhdGVEZWNsYXJhdGlvbkZpbGVzKGFyZ3YsIHBhY2thZ2VEaXJQYXRoKSlcbiAgICApIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2F0Y2hSb2xsdXAoXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8QW55QnVpbGRlclR5cGU+LFxuICB0YXJnZXREZXRhaWw6IHN0cmluZyxcbiAgcGFja2FnZURpclBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogUm9sbHVwT3B0aW9ucyxcbiAgb3V0cHV0T3B0aW9uc0xpc3Q6IE91dHB1dE9wdGlvbnNbXSxcbiAgcGF0aFRvUmVsYXRpdmVQYXRoOiAocGF0aHM6IHN0cmluZyB8IFJlYWRvbmx5PHN0cmluZ1tdPikgPT4gc3RyaW5nW11cbik6IHZvaWQge1xuICBjb25zdCB3YXRjaGVyID0gd2F0Y2goeyAuLi5vcHRpb25zLCBvdXRwdXQ6IG91dHB1dE9wdGlvbnNMaXN0IH0pO1xuXG4gIGNvbnN0IGNsb3NlID0gYXN5bmMgKGNvZGU6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKCd1bmNhdWdodEV4Y2VwdGlvbicsIGNsb3NlKTtcbiAgICBwcm9jZXNzLnN0ZGluLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbG9zZSk7XG4gICAgaWYgKHdhdGNoZXIpIGF3YWl0IHdhdGNoZXIuY2xvc2UoKTtcbiAgICBpZiAoY29kZSkgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICB9O1xuICBvbkV4aXQoY2xvc2UgYXMgdW5rbm93biBhcyBIYW5kbGVyKTtcbiAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBjbG9zZSk7XG4gIGlmICghcHJvY2Vzcy5zdGRpbi5pc1RUWSkge1xuICAgIHByb2Nlc3Muc3RkaW4ub24oJ2VuZCcsIGNsb3NlKTtcbiAgICBwcm9jZXNzLnN0ZGluLnJlc3VtZSgpO1xuICB9XG5cbiAgd2F0Y2hlci5vbignZXZlbnQnLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgIGNhc2UgJ0VSUk9SJzoge1xuICAgICAgICBoYW5kbGVFcnJvcihldmVudC5lcnJvciwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQlVORExFX1NUQVJUJzoge1xuICAgICAgICBpZiAoYXJndi5zaWxlbnQpIGJyZWFrO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50SW5wdXQgPSBldmVudC5pbnB1dDtcbiAgICAgICAgY29uc3QgaW5wdXRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudElucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlucHV0RmlsZXMucHVzaChldmVudElucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnB1dEZpbGVzLnB1c2goXG4gICAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldmVudElucHV0KSA/IGV2ZW50SW5wdXQgOiBPYmplY3QudmFsdWVzKGV2ZW50SW5wdXQgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgY2hhbGsuY3lhbihcbiAgICAgICAgICAgIGBCdW5kbGVzICR7Y2hhbGsuYm9sZChwYXRoVG9SZWxhdGl2ZVBhdGgoaW5wdXRGaWxlcykuam9pbignLCAnKSl9IOKGkiAke2NoYWxrLmJvbGQoXG4gICAgICAgICAgICAgIHBhdGhUb1JlbGF0aXZlUGF0aChldmVudC5vdXRwdXQpLmpvaW4oJywgJylcbiAgICAgICAgICAgICl9XFxub24gJHtwYWNrYWdlRGlyUGF0aH0gLi4uYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdCVU5ETEVfRU5EJzoge1xuICAgICAgICBpZiAoYXJndi5zaWxlbnQpIGJyZWFrO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICBjaGFsay5ncmVlbihcbiAgICAgICAgICAgIGBDcmVhdGVkICR7Y2hhbGsuYm9sZChwYXRoVG9SZWxhdGl2ZVBhdGgoZXZlbnQub3V0cHV0KS5qb2luKCcsICcpKX0gaW4gJHtjaGFsay5ib2xkKG1zKGV2ZW50LmR1cmF0aW9uKSl9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGFyZ2V0RGV0YWlsICE9PSAnYXBwLW5vZGUnICYmIHRhcmdldERldGFpbCAhPT0gJ2Z1bmN0aW9ucycpIHtcbiAgICAgICAgICBhd2FpdCBnZW5lcmF0ZURlY2xhcmF0aW9uRmlsZXMoYXJndiwgcGFja2FnZURpclBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRU5EJzoge1xuICAgICAgICBpZiAoYXJndi5zaWxlbnQpIGJyZWFrO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuWyR7ZGF0ZVRpbWUoKX1dIHdhaXRpbmcgZm9yIGNoYW5nZXMuLi5gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCdyZXN1bHQnIGluIGV2ZW50ICYmIGV2ZW50LnJlc3VsdCkge1xuICAgICAgdm9pZCBldmVudC5yZXN1bHQuY2xvc2UoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlJbnB1dChhcmd2OiBBcmd1bWVudHNUeXBlPHR5cGVvZiBidWlsZGVyPiwgY3dkOiBzdHJpbmcsIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGlmIChhcmd2LmlucHV0ICYmIGFyZ3YuaW5wdXQubGVuZ3RoID4gMCkgcmV0dXJuIGFyZ3YuaW5wdXQubWFwKChwKSA9PiBwYXRoLnJlc29sdmUoY3dkLCBwLnRvU3RyaW5nKCkpKTtcblxuICBjb25zdCBzcmNEaXJQYXRoID0gcGF0aC5qb2luKHBhY2thZ2VEaXJQYXRoLCAnc3JjJyk7XG4gIGZvciAoY29uc3QgZXh0IG9mIFsndHMnLCAndHN4JywgJ2N0cycsICdtdHMnXSkge1xuICAgIGNvbnN0IGlucHV0ID0gcGF0aC5qb2luKHNyY0RpclBhdGgsIGBpbmRleC4ke2V4dH1gKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhpbnB1dCkpIHJldHVybiBbaW5wdXRdO1xuICB9XG5cbiAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRldGVjdCBpbnB1dCBmaWxlLicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFRhcmdldERldGFpbCh0YXJnZXRDYXRlZ29yeTogc3RyaW5nLCBpbnB1dHM6IHN0cmluZ1tdKTogVGFyZ2V0RGV0YWlsIHtcbiAgc3dpdGNoICh0YXJnZXRDYXRlZ29yeSkge1xuICAgIGNhc2UgJ2FwcCc6IHtcbiAgICAgIHJldHVybiAnYXBwLW5vZGUnO1xuICAgIH1cbiAgICBjYXNlICdmdW5jdGlvbnMnOiB7XG4gICAgICByZXR1cm4gJ2Z1bmN0aW9ucyc7XG4gICAgfVxuICAgIGNhc2UgJ2xpYic6IHtcbiAgICAgIGlmIChpbnB1dHMuc29tZSgoaW5wdXQpID0+IGlucHV0LmVuZHNXaXRoKCcudHN4JykpKSB7XG4gICAgICAgIHJldHVybiAnbGliLXJlYWN0JztcbiAgICAgIH1cbiAgICAgIHJldHVybiAnbGliJztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc29sZS5lcnJvcigndGFyZ2V0IG9wdGlvbiBtdXN0IGJlIG9uZSBvZjogJyArIGFsbFRhcmdldENhdGVnb3JpZXMuam9pbignLCAnKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUGFja2FnZUpzb25Gb3JGdW5jdGlvbnMoXG4gIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcsXG4gIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbixcbiAgbW9kdWxlVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcGFja2FnZUpzb24ubmFtZSArPSAnLWRpc3QnO1xuICBjb25zdCBlc21QYWNrYWdlID0gcGFja2FnZUpzb24udHlwZSA9PT0gJ21vZHVsZSc7XG4gIGNvbnN0IGVzbU91dHB1dCA9IGlzRXNtT3V0cHV0KGVzbVBhY2thZ2UsIG1vZHVsZVR5cGUpO1xuICBwYWNrYWdlSnNvbi5tYWluID0gZXNtUGFja2FnZSA9PT0gZXNtT3V0cHV0ID8gJ2luZGV4LmpzJyA6IGVzbU91dHB1dCA/ICdpbmRleC5tanMnIDogJ2luZGV4LmNqcyc7XG5cbiAgLy8gUHJldmVudCBGaXJlYmFzZSBGdW5jdGlvbnMgZnJvbSBydW5uaW5nIGBidWlsZGAgc2NyaXB0IHNpbmNlIHdlIGFyZSBidWlsZGluZyBjb2RlIGJlZm9yZSBkZXBsb3lpbmcuXG4gIGRlbGV0ZSBwYWNrYWdlSnNvbi5zY3JpcHRzO1xuICAvLyBkZXZEZXBlbmRlbmNpZXMgYXJlIG5vdCByZXF1aXJlZCBzaW5jZSB3ZSBhcmUgYnVpbGRpbmcgY29kZSBiZWZvcmUgZGVwbG95aW5nLlxuICBkZWxldGUgcGFja2FnZUpzb24uZGV2RGVwZW5kZW5jaWVzO1xuXG4gIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ2Rpc3QnKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShwYXRoLmpvaW4ocGFja2FnZURpclBhdGgsICdkaXN0JywgJ3BhY2thZ2UuanNvbicpLCBKU09OLnN0cmluZ2lmeShwYWNrYWdlSnNvbikpO1xufVxuXG5mdW5jdGlvbiBnZXRPdXRwdXRPcHRpb25zTGlzdChcbiAgYXJndjogQXJndW1lbnRzVHlwZTxBbnlCdWlsZGVyVHlwZT4sXG4gIHRhcmdldERldGFpbDogVGFyZ2V0RGV0YWlsLFxuICBwYWNrYWdlRGlyUGF0aDogc3RyaW5nLFxuICBpc0VzbVBhY2thZ2U6IGJvb2xlYW5cbik6IE91dHB1dE9wdGlvbnNbXSB7XG4gIGNvbnN0IG91dERpclBhdGggPSBwYXRoLmpvaW4ocGFja2FnZURpclBhdGgsICdkaXN0Jyk7XG4gIGlmICh0YXJnZXREZXRhaWwgPT09ICdhcHAtbm9kZScgfHwgdGFyZ2V0RGV0YWlsID09PSAnZnVuY3Rpb25zJykge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGRpcjogb3V0RGlyUGF0aCxcbiAgICAgICAgZm9ybWF0OiBpc0VzbU91dHB1dChpc0VzbVBhY2thZ2UsIGFyZ3YubW9kdWxlVHlwZSkgPyAnbW9kdWxlJyA6ICdjb21tb25qcycsXG4gICAgICAgIHNvdXJjZW1hcDogYXJndi5zb3VyY2VtYXAgJiYgJ2lubGluZScsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvLyBUaGUgZm9sbG93aW5nIGltcG9ydCBzdGF0ZW1lbnQgaW4gYW4gZXNtIG1vZHVsZSBjYXVzZXMgdGhlIGZvbGxvd2luZyBlcnJvcjpcbiAgLy8gU3RhdGVtZW50OlxuICAvLyAgIGltcG9ydCB7IHVzZVByZXZpb3VzIH0gZnJvbSAncmVhY3QtdXNlJztcbiAgLy8gRXJyb3I6XG4gIC8vICAgTmFtZWQgZXhwb3J0ICd1c2VQcmV2aW91cycgbm90IGZvdW5kLiBUaGUgcmVxdWVzdGVkIG1vZHVsZSAncmVhY3QtdXNlJyBpcyBhIENvbW1vbkpTIG1vZHVsZSxcbiAgLy8gICB3aGljaCBtYXkgbm90IHN1cHBvcnQgYWxsIG1vZHVsZS5leHBvcnRzIGFzIG5hbWVkIGV4cG9ydHMuXG4gIC8vIFdlIG5lZWQgY2pzIG1vZHVsZXMgZm9yIHdlYiBhcHBzIHRvIGF2b2lkIHRoZSBlcnJvci5cbiAgLy8gQWxzbywgc3BsaXR0aW5nIGEgbGlicmFyeSBpcyB1c2VmdWwgaW4gYm90aCBtb2R1bGVzLCBzbyBwcmVzZXJ2ZU1vZHVsZXMgc2hvdWxkIGJlIHRydWUuXG4gIGNvbnN0IG91dHB1dE9wdGlvbnNMaXN0OiBPdXRwdXRPcHRpb25zW10gPSBbXTtcbiAgY29uc3QgbW9kdWxlVHlwZSA9IGFyZ3YubW9kdWxlVHlwZSB8fCAnYm90aCc7XG4gIGNvbnN0IGpzRXh0ID0gYXJndi5qc0V4dGVuc2lvbiB8fCAnZWl0aGVyJztcbiAgaWYgKG1vZHVsZVR5cGUgPT09ICdjanMnIHx8IG1vZHVsZVR5cGUgPT09ICdib3RoJyB8fCAobW9kdWxlVHlwZSA9PT0gJ2VpdGhlcicgJiYgIWlzRXNtUGFja2FnZSkpIHtcbiAgICBvdXRwdXRPcHRpb25zTGlzdC5wdXNoKHtcbiAgICAgIGRpcjogb3V0RGlyUGF0aCxcbiAgICAgIGVudHJ5RmlsZU5hbWVzOiBqc0V4dCA9PT0gJ2JvdGgnIHx8IChqc0V4dCA9PT0gJ2VpdGhlcicgJiYgIWlzRXNtUGFja2FnZSkgPyAnW25hbWVdLmpzJyA6ICdbbmFtZV0uY2pzJyxcbiAgICAgIGZvcm1hdDogJ2NvbW1vbmpzJyxcbiAgICAgIHByZXNlcnZlTW9kdWxlczogdHJ1ZSxcbiAgICAgIHNvdXJjZW1hcDogYXJndi5zb3VyY2VtYXAsXG4gICAgfSk7XG4gIH1cbiAgaWYgKG1vZHVsZVR5cGUgPT09ICdlc20nIHx8IG1vZHVsZVR5cGUgPT09ICdib3RoJyB8fCAobW9kdWxlVHlwZSA9PT0gJ2VpdGhlcicgJiYgaXNFc21QYWNrYWdlKSkge1xuICAgIG91dHB1dE9wdGlvbnNMaXN0LnB1c2goe1xuICAgICAgZGlyOiBvdXREaXJQYXRoLFxuICAgICAgZW50cnlGaWxlTmFtZXM6IGpzRXh0ID09PSAnYm90aCcgfHwgKGpzRXh0ID09PSAnZWl0aGVyJyAmJiBpc0VzbVBhY2thZ2UpID8gJ1tuYW1lXS5qcycgOiAnW25hbWVdLm1qcycsXG4gICAgICBmb3JtYXQ6ICdtb2R1bGUnLFxuICAgICAgcHJlc2VydmVNb2R1bGVzOiB0cnVlLFxuICAgICAgc291cmNlbWFwOiBhcmd2LnNvdXJjZW1hcCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb3V0cHV0T3B0aW9uc0xpc3Q7XG59XG5cbmZ1bmN0aW9uIGlzRXNtT3V0cHV0KGlzRXNtUGFja2FnZTogYm9vbGVhbiwgbW9kdWxlVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBtb2R1bGVUeXBlID09PSAnZXNtJyB8fCAoKCFtb2R1bGVUeXBlIHx8IG1vZHVsZVR5cGUgPT09ICdlaXRoZXInKSAmJiBpc0VzbVBhY2thZ2UpO1xufVxuIiwiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB0eXBlIHsgUm9sbHVwRXJyb3IgfSBmcm9tICdyb2xsdXAnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyb3I6IFJvbGx1cEVycm9yLCByZWNvdmVyID0gZmFsc2UpOiB2b2lkIHtcbiAgY29uc3QgbmFtZSA9IGVycm9yLm5hbWUgfHwgKGVycm9yLmNhdXNlIGFzIEVycm9yKT8ubmFtZTtcbiAgY29uc3QgbmFtZVNlY3Rpb24gPSBuYW1lID8gYCR7bmFtZX06IGAgOiAnJztcbiAgY29uc3QgcGx1Z2luU2VjdGlvbiA9IGVycm9yLnBsdWdpbiA/IGAocGx1Z2luICR7ZXJyb3IucGx1Z2lufSkgYCA6ICcnO1xuICBjb25zdCBtZXNzYWdlID0gYCR7cGx1Z2luU2VjdGlvbn0ke25hbWVTZWN0aW9ufSR7ZXJyb3IubWVzc2FnZX1gO1xuXG4gIGNvbnN0IG91dHB1dExpbmVzID0gW2NoYWxrLmJvbGQoY2hhbGsucmVkKGBbIV0gJHtjaGFsay5ib2xkKG1lc3NhZ2UudG9TdHJpbmcoKSl9YCkpXTtcblxuICBpZiAoZXJyb3IudXJsKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChjaGFsay5jeWFuKGVycm9yLnVybCkpO1xuICB9XG5cbiAgaWYgKGVycm9yLmxvYykge1xuICAgIG91dHB1dExpbmVzLnB1c2goYCR7ZXJyb3IubG9jLmZpbGUgfHwgZXJyb3IuaWR9ICgke2Vycm9yLmxvYy5saW5lfToke2Vycm9yLmxvYy5jb2x1bW59KWApO1xuICB9IGVsc2UgaWYgKGVycm9yLmlkKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChlcnJvci5pZCk7XG4gIH1cblxuICBpZiAoZXJyb3IuZnJhbWUpIHtcbiAgICBvdXRwdXRMaW5lcy5wdXNoKGNoYWxrLmRpbShlcnJvci5mcmFtZSkpO1xuICB9XG5cbiAgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChjaGFsay5kaW0oZXJyb3Iuc3RhY2s/LnJlcGxhY2UoYCR7bmFtZVNlY3Rpb259JHtlcnJvci5tZXNzYWdlfVxcbmAsICcnKSkpO1xuICB9XG5cbiAgb3V0cHV0TGluZXMucHVzaCgnJywgJycpO1xuICBjb25zb2xlLmVycm9yKG91dHB1dExpbmVzLmpvaW4oJ1xcbicpKTtcblxuICBpZiAoIXJlY292ZXIpIHByb2Nlc3MuZXhpdCgxKTtcbn1cbiIsImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBDb21tYW5kTW9kdWxlLCBJbmZlcnJlZE9wdGlvblR5cGVzIH0gZnJvbSAneWFyZ3MnO1xuXG5pbXBvcnQgeyBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUgfSBmcm9tICcuLi9lbnYuanMnO1xuaW1wb3J0IHsgc2hhcmVkT3B0aW9uc0J1aWxkZXIgfSBmcm9tICcuLi9zaGFyZWRPcHRpb25zQnVpbGRlci5qcyc7XG5cbmNvbnN0IGJ1aWxkZXIgPSB7XG4gIC4uLnNoYXJlZE9wdGlvbnNCdWlsZGVyLFxuICBtb2R1bGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0EgbW9kdWxlIHR5cGU6IGNqcyBvciBlc20nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAnbScsXG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHdhdGNoIG1vZGUgaXMgZW5hYmxlZCBvciBub3QnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBhbGlhczogJ3cnLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IHJ1bjogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBJbmZlcnJlZE9wdGlvblR5cGVzPHR5cGVvZiBidWlsZGVyPj4gPSB7XG4gIGNvbW1hbmQ6ICdydW4gPGZpbGU+JyxcbiAgZGVzY3JpYmU6ICdSdW4gc2NyaXB0JyxcbiAgYnVpbGRlcixcbiAgaGFuZGxlcihhcmd2KSB7XG4gICAgbG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlKGFyZ3YsIHByb2Nlc3MuY3dkKCkpO1xuXG4gICAgY29uc3QgZmlsZSA9IGFyZ3YuZmlsZT8udG9TdHJpbmcoKSA/PyAnJztcblxuICAgIC8vIGNmLiBodHRwczovL2J1bi5zaC9ndWlkZXMvdXRpbC9kZXRlY3QtYnVuXG4gICAgY29uc3QgaXNSdW5uaW5nT25CdW4gPSBwcm9jZXNzLnZlcnNpb25zLmJ1bjtcbiAgICBjb25zdCBydW50aW1lID0gaXNSdW5uaW5nT25CdW4gPyAnYnVuJyA6ICdub2RlJztcbiAgICBjb25zdCBhcmdzID0gaXNSdW5uaW5nT25CdW4gPyBbJy0tYnVuJ10gOiBbJy0tbm8td2FybmluZ3MnLCAnLS1pbXBvcnQnLCAndHN4J107XG4gICAgaWYgKGFyZ3Yud2F0Y2gpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS13YXRjaCcpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goZmlsZSk7XG4gICAgY29uc3QgWywgLi4uYWRkaXRpb25hbEFyZ3VtZW50c10gPSBhcmd2Ll87XG4gICAgY29uc3QgcnVudGltZUFyZ3MgPSBbLi4uYXJncywgLi4uYWRkaXRpb25hbEFyZ3VtZW50cy5tYXAoKGFyZykgPT4gYXJnLnRvU3RyaW5nKCkpXTtcbiAgICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmluZm8oYFJ1bm5pbmcgJyR7cnVudGltZX0gJHtydW50aW1lQXJncy5qb2luKCcgJyl9J2ApO1xuICAgIH1cbiAgICBjb25zdCByZXQgPSBjaGlsZF9wcm9jZXNzLnNwYXduU3luYyhydW50aW1lLCBydW50aW1lQXJncywge1xuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiB9LFxuICAgIH0pO1xuICAgIHByb2Nlc3MuZXhpdChyZXQuc3RhdHVzID8/IDEpO1xuICB9LFxufTtcbiIsImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IHJlbW92ZU5wbUFuZFlhcm5FbnZpcm9ubWVudFZhcmlhYmxlcyB9IGZyb20gJ0B3aWxsYm9vc3Rlci9zaGFyZWQtbGliLW5vZGUnO1xuaW1wb3J0IHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IGhpZGVCaW4gfSBmcm9tICd5YXJncy9oZWxwZXJzJztcblxuaW1wb3J0IHsgYXBwLCBmdW5jdGlvbnMsIGxpYiB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGQuanMnO1xuaW1wb3J0IHsgcnVuIH0gZnJvbSAnLi9jb21tYW5kcy9ydW4uanMnO1xuaW1wb3J0IHsgc2hhcmVkT3B0aW9uc0J1aWxkZXIgfSBmcm9tICcuL3NoYXJlZE9wdGlvbnNCdWlsZGVyLmpzJztcblxucmVtb3ZlTnBtQW5kWWFybkVudmlyb25tZW50VmFyaWFibGVzKHByb2Nlc3MuZW52KTtcblxuYXdhaXQgeWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuc2NyaXB0TmFtZSgnYnVpbGQtdHMnKVxuICAub3B0aW9ucyhzaGFyZWRPcHRpb25zQnVpbGRlcilcbiAgLmNvbW1hbmQoYXBwKVxuICAuY29tbWFuZChmdW5jdGlvbnMpXG4gIC5jb21tYW5kKGxpYilcbiAgLmNvbW1hbmQocnVuKVxuICAuZGVtYW5kQ29tbWFuZCgpXG4gIC5zdHJpY3QoKVxuICAudmVyc2lvbihnZXRWZXJzaW9uKCkpXG4gIC5oZWxwKCkuYXJndjtcblxuZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICBsZXQgcGFja2FnZUpzb25EaXIgPSBwYXRoLmRpcm5hbWUobmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lKTtcbiAgd2hpbGUgKCFmcy5leGlzdHNTeW5jKHBhdGguam9pbihwYWNrYWdlSnNvbkRpciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgIHBhY2thZ2VKc29uRGlyID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uRGlyKTtcbiAgfVxuICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihwYWNrYWdlSnNvbkRpciwgJ3BhY2thZ2UuanNvbicpLCAndXRmOCcpKSBhcyB7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICB9O1xuICByZXR1cm4gcGFja2FnZUpzb24udmVyc2lvbjtcbn1cbiJdLCJuYW1lcyI6WyJlbnZWYXJzIiwibG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlIiwiYXJndiIsImN3ZCIsInJlYWRBbmRBcHBseUVudmlyb25tZW50VmFyaWFibGVzIiwidmVyYm9zZSIsImNvbnNvbGUiLCJpbmZvIiwiT2JqZWN0Iiwia2V5cyIsImNyZWF0ZUVudmlyb25tZW50VmFyaWFibGVzRGVmaW5pdGlvbiIsImVudlZhcnNEZWYiLCJlbnZWYXJOYW1lcyIsIlNldCIsImlubGluZSIsImZsYXRNYXAiLCJlIiwidG9TdHJpbmciLCJzcGxpdCIsImF1dG9JbmxpbmUiLCJuYW1lIiwidW5kZWZpbmVkIiwicHJvY2VzcyIsImVudiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhbGxUYXJnZXRDYXRlZ29yaWVzIiwiYXN5bmMiLCJyZWFkUGFja2FnZUpzb24iLCJkaXJQYXRoIiwicGFja2FnZUpzb25QYXRoIiwicGF0aCIsImpvaW4iLCJwYWNrYWdlSnNvblRleHQiLCJmcyIsInByb21pc2VzIiwicmVhZEZpbGUiLCJwYXJzZSIsInNoYXJlZE9wdGlvbnNCdWlsZGVyIiwieWFyZ3NPcHRpb25zQnVpbGRlckZvckVudiIsInNpbGVudCIsImRlc2NyaXB0aW9uIiwidHlwZSIsImFsaWFzIiwiYnVpbGRlciIsImlucHV0IiwiZGVmYXVsdCIsIm1pbmlmeSIsInNvdXJjZW1hcCIsImV4dGVybmFsIiwid2F0Y2giLCJrZWVwSW1wb3J0IiwiYnVuZGxlQnVpbHRpbnMiLCJhcHBCdWlsZGVyIiwibW9kdWxlVHlwZSIsImZ1bmN0aW9uc0J1aWxkZXIiLCJvbmx5UGFja2FnZUpzb24iLCJsaWJCdWlsZGVyIiwianNFeHRlbnNpb24iLCJzZXR1cFBsdWdpbnMiLCJ0YXJnZXREZXRhaWwiLCJwYWNrYWdlSnNvbiIsIm5hbWVzcGFjZSIsInBhY2thZ2VEaXJQYXRoIiwib3V0cHV0T3B0aW9uc0xpc3QiLCJleHRlcm5hbERlcHMiLCJtYXAiLCJpdGVtIiwiZGVwZW5kZW5jaWVzIiwicHVzaCIsInBlZXJEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsImV4aXN0c1N5bmMiLCJwYWNrYWdlRGlycyIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsInBhY2thZ2VEaXIiLCJpc0RpcmVjdG9yeSIsIm90aGVyUGFja2FnZUpzb24iLCJyZWFkRmlsZVN5bmMiLCJleHRlbnNpb25zIiwiYmFiZWxDb25maWdQYXRoIiwidXJsIiwiZmlsZVVSTFRvUGF0aCIsImRpcm5hbWUiLCJyZXBsYWNlUGx1Z2luIiwiZ2V0RGVmYXVsdFBsdWdpbkZhY3RvcnkiLCJyZXBsYWNlIiwianNvblBsdWdpbiIsImpzb24iLCJyZXNvbHZlUGx1Z2luIiwicmVzb2x2ZSIsImNvbW1vbmpzUGx1Z2luIiwiY29tbW9uanMiLCJ0ZXJzZXJQbHVnaW4iLCJ0ZXJzZXIiLCJhbmFseXplUGx1Z2luIiwiYW5hbHl6ZSIsInBsdWdpbnMiLCJkZWxpbWl0ZXJzIiwicHJldmVudEFzc2lnbm1lbnQiLCJ2YWx1ZXMiLCJub2RlRXh0ZXJuYWxzIiwiZGVwcyIsImRldkRlcHMiLCJwZWVyRGVwcyIsIm9wdERlcHMiLCJpbmNsdWRlIiwiUmVnRXhwIiwiZXhjbHVkZSIsInByZWZlckJ1aWx0aW5zIiwiaWQiLCJpbmNsdWRlcyIsIm1vZHVsZU5hbWVzIiwiaXNCYWJlbEhlbHBlcnNCdW5kbGVkIiwiQlVJTERUU19VU0VfQkFCTEVfUlVOVElNRSIsImJhYmVsIiwiY29uZmlnRmlsZSIsImJhYmVsSGVscGVycyIsInNvbWUiLCJvcHRzIiwicHJlc2VydmVNb2R1bGVzIiwicHJlc2VydmVEaXJlY3RpdmVzIiwic3RyaW5nIiwiY29tcHJlc3MiLCJkaXJlY3RpdmVzIiwic3VtbWFyeU9ubHkiLCJtb2R1bGUiLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsImdlbmVyYXRlRGVjbGFyYXRpb25GaWxlcyIsImNvcmVQcm9qZWN0RGlyUGF0aCIsImNvcmVDb25maWdGaWxlIiwiZmluZENvbmZpZ0ZpbGUiLCJFcnJvciIsInByb2plY3RzIiwib3V0RGlyIiwiYmFzZW5hbWUiLCJwYXJlbnREaXJQYXRoIiwiZGlyZW50cyIsInJlYWRkaXIiLCJkaXJlbnQiLCJwcm9qZWN0RGlyUGF0aCIsImFsbFN1Y2NlZWRlZCIsInJ1blR5cGVTY3JpcHROYXRpdmUiLCJjb25maWdGaWxlRGlyUGF0aCIsInRlbXBDb25maWdGaWxlIiwicGlkIiwiRGF0ZSIsIm5vdyIsIndyaXRlRmlsZSIsImNvbXBpbGVyT3B0aW9ucyIsImRlY2xhcmF0aW9uIiwiZW1pdERlY2xhcmF0aW9uT25seSIsIm1vZHVsZVJlc29sdXRpb24iLCJub0VtaXQiLCJub0VtaXRPbkVycm9yIiwicm9vdERpciIsInVzZXNOb2RlUHJvdG9jb2xJbXBvcnQiLCJ0eXBlcyIsInR5cGVSb290c0RpclBhdGgiLCJmaWx0ZXIiLCJjb2xsZWN0VHlwZVBhY2thZ2VzIiwiZXh0ZW5kcyIsInRvUmVsYXRpdmVDb25maWdQYXRoIiwiY3JlYXRlVHlwZVNjcmlwdE5hdGl2ZUNvbmZpZyIsInJldCIsImNoaWxkX3Byb2Nlc3MiLCJzcGF3blN5bmMiLCJleGVjUGF0aCIsImdldFR5cGVTY3JpcHROYXRpdmVQYXRoIiwic3RkaW8iLCJlcnJvciIsInN0YXR1cyIsInJtIiwiZm9yY2UiLCJjdXJyZW50RGlyUGF0aCIsImNoaWxkUGF0aCIsInRlc3QiLCJmcm9tRGlyUGF0aCIsInRvRmlsZVBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJyZWxhdGl2ZSIsInJlcGxhY2VBbGwiLCJzZXAiLCJzdGFydHNXaXRoIiwiYXBwIiwiY29tbWFuZCIsImRlc2NyaWJlIiwiaGFuZGxlciIsImJ1aWxkIiwiZnVuY3Rpb25zIiwicGFja2FnZSIsImV4aXQiLCJnZW5lcmF0ZVBhY2thZ2VKc29uRm9yRnVuY3Rpb25zIiwibGliIiwidGFyZ2V0Q2F0ZWdvcnkiLCJOT0RFX0VOViIsImlucHV0cyIsImxlbmd0aCIsInAiLCJzcmNEaXJQYXRoIiwiZXh0IiwidmVyaWZ5SW5wdXQiLCJlbmRzV2l0aCIsImRldGVjdFRhcmdldERldGFpbCIsInBhY2thZ2VOYW1lIiwibWF0Y2giLCJleGVjIiwiZ2V0TmFtZXNwYWNlQW5kTmFtZSIsImlzRXNtUGFja2FnZSIsIkJVSUxEX1RTX0NPUkVKUyIsIkJVSUxEX1RTX0NPUkVKU19XSVRIX1BST1BPU0FMUyIsIkJVSUxEX1RTX1ZFUkJPU0UiLCJCVUlMRF9UU19UQVJHRVRfQ0FURUdPUlkiLCJCVUlMRF9UU19UQVJHRVRfREVUQUlMIiwib3V0RGlyUGF0aCIsImRpciIsImZvcm1hdCIsImlzRXNtT3V0cHV0IiwianNFeHQiLCJlbnRyeUZpbGVOYW1lcyIsImdldE91dHB1dE9wdGlvbnNMaXN0IiwiY2hkaXIiLCJyZWN1cnNpdmUiLCJvcHRpb25zIiwiZnJvbUVudHJpZXMiLCJpbmRleCIsImV4dG5hbWUiLCJjbGVhclNjcmVlbiIsInBhdGhUb1JlbGF0aXZlUGF0aCIsInBhdGhzIiwiQXJyYXkiLCJpc0FycmF5Iiwid2F0Y2hlciIsIm91dHB1dCIsImNsb3NlIiwicmVtb3ZlTGlzdGVuZXIiLCJzdGRpbiIsImNvZGUiLCJvbkV4aXQiLCJvbiIsImlzVFRZIiwicmVzdW1lIiwiZXZlbnQiLCJyZWNvdmVyIiwiY2F1c2UiLCJuYW1lU2VjdGlvbiIsIm1lc3NhZ2UiLCJwbHVnaW4iLCJvdXRwdXRMaW5lcyIsImNoYWxrIiwiYm9sZCIsInJlZCIsImN5YW4iLCJsb2MiLCJmaWxlIiwibGluZSIsImNvbHVtbiIsImZyYW1lIiwiZGltIiwic3RhY2siLCJoYW5kbGVFcnJvciIsImV2ZW50SW5wdXQiLCJpbnB1dEZpbGVzIiwiZ3JlZW4iLCJtcyIsImR1cmF0aW9uIiwiZGF0ZVRpbWUiLCJyZXN1bHQiLCJ3YXRjaFJvbGx1cCIsImJ1bmRsZSIsImJ1aWxkRmFpbGVkIiwic3RhcnRUaW1lIiwiX2J1bmRsZSIsInJvbGx1cCIsIlByb21pc2UiLCJhbGwiLCJ3cml0ZSIsImVzbVBhY2thZ2UiLCJlc21PdXRwdXQiLCJtYWluIiwic2NyaXB0cyIsImRldkRlcGVuZGVuY2llcyIsIm1rZGlyIiwicnVuIiwiaXNSdW5uaW5nT25CdW4iLCJ2ZXJzaW9ucyIsImJ1biIsInJ1bnRpbWUiLCJhcmdzIiwiYWRkaXRpb25hbEFyZ3VtZW50cyIsIl8iLCJydW50aW1lQXJncyIsImFyZyIsInJlbW92ZU5wbUFuZFlhcm5FbnZpcm9ubWVudFZhcmlhYmxlcyIsInlhcmdzIiwiaGlkZUJpbiIsInNjcmlwdE5hbWUiLCJkZW1hbmRDb21tYW5kIiwic3RyaWN0IiwidmVyc2lvbiIsInBhY2thZ2VKc29uRGlyIiwiVVJMIiwicGF0aG5hbWUiLCJnZXRWZXJzaW9uIiwiaGVscCJdLCJtYXBwaW5ncyI6IjBoQ0FNQSxJQUFJQSxFQUtHLFNBQVNDLEVBQ2RDLEVBQ0FDLEdBUUEsT0FOS0gsSUFDSEEsRUFBVUksRUFBaUNGLEVBQU1DLEdBQzdDRCxFQUFLRyxTQUNQQyxRQUFRQyxLQUFLLG1CQUFvQkMsT0FBT0MsS0FBS1QsS0FHMUNBLENBQ1QsQ0FLTyxTQUFTVSxFQUNkUixFQUNBQyxHQUVBLE1BQU1RLEVBQXFDLENBQUEsRUFDckNDLEVBQWMsSUFBSUMsSUFBSSxLQUN0QlgsRUFBS1ksUUFBVSxJQUFJQyxRQUFTQyxHQUFNQSxFQUFFQyxXQUFXQyxNQUFNLFNBQ3JEaEIsRUFBS2lCLFdBQWFYLE9BQU9DLEtBQUtSLEVBQWtDQyxFQUFNQyxJQUFRLEtBRXBGLElBQUssTUFBTWlCLEtBQVFSLE9BQ1NTLElBQXRCQyxRQUFRQyxJQUFJSCxLQUVoQlQsRUFBVyxlQUFlUyxLQUFVSSxLQUFLQyxVQUFVSCxRQUFRQyxJQUFJSCxLQUtqRSxPQUhJbEIsRUFBS0csU0FDUEMsUUFBUUMsS0FBSyxtQkFBb0JDLE9BQU9DLEtBQUtFLElBRXhDQSxDQUNULENDM0NPLE1BQU1lLEVBQXNCLENBQUMsTUFBTyxZQUFhLE9DSWpEQyxlQUFlQyxFQUFnQkMsR0FDcEMsTUFBTUMsRUFBa0JDLEVBQUtDLEtBQUtILEVBQVMsZ0JBQzNDLElBQ0UsTUFBTUksUUFBd0JDLEVBQUdDLFNBQVNDLFNBQVNOLEVBQWlCLFFBQ3BFLE1BQU8sQ0FBQ04sS0FBS2EsTUFBTUosR0FBaUNILEVBQ3RELENBQUUsTUFDQSxDQUVGLE1BQU8sTUFBQ1QsRUFBV1MsRUFDckIsQ0NiTyxNQUFNUSxFQUF1QixJQUMvQkMsRUFDSEMsT0FBUSxDQUNOQyxZQUFhLHVDQUNiQyxLQUFNLFVBQ05DLE1BQU8sTUNMRUMsRUFBVSxJ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
|
|
1
|
+
import e from"node:fs";import n from"node:path";import{readAndApplyEnvironmentVariables as o,yargsOptionsBuilderForEnv as s,removeNpmAndYarnEnvironmentVariables as t}from"@willbooster/shared-lib-node";import i from"yargs";import{hideBin as r}from"yargs/helpers";import a from"chalk";import c from"date-time";import p from"pretty-ms";import{rollup as l,watch as d}from"rollup";import{onExit as u}from"signal-exit";import m from"node:url";import{babel as f}from"@rollup/plugin-babel";import*as y from"@rollup/plugin-commonjs";import*as h from"@rollup/plugin-json";import*as b from"@rollup/plugin-node-resolve";import*as j from"@rollup/plugin-replace";import*as g from"@rollup/plugin-terser";import*as v from"rollup-plugin-analyzer";import{keepImport as w}from"rollup-plugin-keep-import";import{nodeExternals as x}from"rollup-plugin-node-externals";import S from"rollup-plugin-preserve-directives";import{string as k}from"rollup-plugin-string";import $ from"node:process";import*as T from"node:child_process";import{createRequire as D}from"node:module";let O;function E(e,n){return O||(O=o(e,n),e.verbose&&console.info("Loaded env vars:",Object.keys(O))),O}function _(e,n){const o={},s=new Set([...(e.inline??[]).flatMap(e=>e.toString().split(",")),...e.autoInline?Object.keys(E(e,n)):[]]);for(const e of s)void 0!==process.env[e]&&(o[`process.env.${e}`]=JSON.stringify(process.env[e]));return e.verbose&&console.info("Inline env vars:",Object.keys(o)),o}const F=["app","functions","lib"];async function R(o){const s=n.join(o,"package.json");try{const n=await e.promises.readFile(s,"utf8");return[JSON.parse(n),s]}catch{}return[void 0,s]}const B={...s,silent:{description:"Whether watch mode is enabled or not",type:"boolean",alias:"s"}},N={...B,input:{description:'Paths of source code files to be built. The first file is main. If no option is given, "src/index.{ts,tsx}" from package directory is targeted.',type:"array",alias:"i"},"core-js":{description:"Whether or not core-js is employed.",type:"boolean",default:!1},"core-js-proposals":{description:"Whether or not core-js with proposals support is employed.",type:"boolean",default:!1},minify:{description:"Whether or not minification is enabled.",type:"boolean",default:!0},sourcemap:{description:"Whether or not sourcemap is enabled.",type:"boolean",default:!0},external:{description:"Additional external dependencies.",type:"array"},inline:{description:"Environment variables to be inlined.",type:"array"},"auto-inline":{description:"Inline environment variables defined at env files.",type:"boolean",default:!1},watch:{description:"Whether watch mode is enabled or not",type:"boolean",alias:"w"},keepImport:{description:"Identifiers to be kept as import statements.",type:"array"},bundleBuiltins:{description:"Module names same with builtins (e.g., undici) to be bundled.",type:"array"}},I={...N,moduleType:{description:"esm, cjs, or either (default).",type:"string",alias:"m"}},L={...I,onlyPackageJson:{description:"Whether to generate only package.json.",type:"boolean"}},A={...N,moduleType:{description:"esm, cjs, either, or both (default).",type:"string",alias:"m"},jsExtension:{description:"Whether to use .js in cjs and/or esm: either (default), both, or none.",type:"string",alias:"j"}};function W(o,s,t,i,r,a){const c=[...o.external??[]].map(e=>e.toString());if(t.dependencies?.["@prisma/client"]&&c.push("prisma-client"),c.push(...Object.keys(t.dependencies??{}),...Object.keys(t.peerDependencies??{}),...Object.keys(t.optionalDependencies??{})),e.existsSync(n.join("..","..","package.json"))){const o=e.readdirSync(n.join(".."),{withFileTypes:!0});for(const s of o){if(!s.isDirectory())continue;const o=n.join("..",s.name,"package.json");if(!e.existsSync(o))continue;const i=JSON.parse(e.readFileSync(o,"utf8"));t.dependencies?.[i.name??""]&&c.push(...Object.keys(i.dependencies??{}),...Object.keys(i.peerDependencies??{}),...Object.keys(i.optionalDependencies??{}))}}const p=[".cjs",".mjs",".js",".jsx",".json",".cts",".mts",".ts",".tsx"],l=n.join(m.fileURLToPath(n.dirname(n.dirname(import.meta.url))),"babel.config.mjs"),d=J(j),u=J(h),$=J(b),T=J(y),D=J(g),O=J(v),E=[d({delimiters:["",""],preventAssignment:!0,values:_(o,r)}),u(),x({deps:!0,devDeps:!1,peerDeps:!0,optDeps:!0,include:c.map(e=>new RegExp(`^${e}(?:\\/.+)?`)),exclude:U(s)&&i&&new RegExp(`^@?${i}(?:\\/.+)?`)}),$({extensions:p,preferBuiltins:e=>!o.bundleBuiltins?.includes(e)}),T(),w({moduleNames:o.keepImport?.map(e=>e.toString())??[]})],F="app-node"===s||"functions"===s||!c.includes("@babel/runtime");return process.env.BUILDTS_USE_BABLE_RUNTIME=F?"":"1",E.push(f({configFile:l,extensions:p,babelHelpers:F?"bundled":"runtime",exclude:/^(.+\/)?node_modules\/.+$/}),...a.some(e=>e.preserveModules)?[S()]:[],k({include:["**/*.csv","**/*.txt"]})),o.minify&&E.push(D({compress:{directives:!1}})),E.push(O({summaryOnly:!0})),E}function U(e){return"app-node"===e||"functions"===e}function J(e){return e.default}const P=D(import.meta.url);async function C(o,s){const t=G(s);if(!t)throw new Error(`Failed to find tsconfig.json in ${s}.`);o.verbose&&console.info("Found tsconfig.json:",t);const i=[];let r=n.join("dist",n.basename(s),"src");if(e.existsSync(r)){const o=n.dirname(s),t=await e.promises.readdir(o,{withFileTypes:!0});s=n.resolve(s);for(const r of t){if(!r.isDirectory())continue;const t=n.resolve(o,r.name);if(t===s)continue;const a=G(t),c=n.join("dist",r.name,"src");a&&e.existsSync(c)&&i.push([t,a,c])}}else r="dist";i.push([s,t,r]);let a=!0;for(const[e,t,r]of i)a&&=await M(o,e,t,n.join(s,r));return a}async function M(o,s,t,i){o.verbose&&console.info("runTypeScriptNative()",s,t,i);const r=n.dirname(t),a=n.join(r,`.build-ts-tsgo.${process.pid}.${Date.now()}.json`);try{await e.promises.writeFile(a,JSON.stringify(await async function(o,s,t){const i={declaration:!0,emitDeclarationOnly:!0,noEmit:!1,noEmitOnError:!0,outDir:t,rootDir:"src"};if(await V(n.join(o,"src"))){const s=await async function(n){try{return(await e.promises.readdir(n,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return[]}}(n.join(o,"node_modules","@types"));s.includes("node")&&(i.types=s)}return{compilerOptions:i,extends:Y(n.dirname(s),s),include:["src/**/*"]}}(s,t,i),void 0,2));const o=T.spawnSync(process.execPath,[H(),"-p",a],{cwd:s,stdio:"inherit"});if(o.error)throw o.error;return 0===o.status}finally{await e.promises.rm(a,{force:!0})}}function G(o){let s=n.resolve(o);for(;;){const o=n.join(s,"tsconfig.json");if(e.existsSync(o))return o;const t=n.dirname(s);if(t===s)return;s=t}}function H(){const e=P.resolve("@typescript/native-preview/package.json");return n.join(n.dirname(e),"bin","tsgo.js")}async function V(o){try{const s=await e.promises.readdir(o,{withFileTypes:!0});for(const t of s){const s=n.join(o,t.name);if(t.isDirectory()){if(await V(s))return!0}else if(/\.[cm]?tsx?$/.test(t.name)&&(await e.promises.readFile(s,"utf8")).includes("node:"))return!0}}catch{return!1}return!1}function Y(e,o){const s=n.relative(e,o).replaceAll(n.sep,"/");return s.startsWith(".")?s:`./${s}`}const z={command:"app [package]",describe:"Build an app",builder:I,handler:async e=>Q(e,"app")},q={command:"functions [package]",describe:"Build a GCP/Firebase functions app",builder:L,async handler(e){if(!e.onlyPackageJson)return Q(e,"functions");{const o=n.resolve(e.package?.toString()??"."),[s,t]=await R(o);s||(console.error(`Failed to parse package.json (${t}).`),process.exit(1)),await Z(o,s,e.moduleType)}}},K={command:"lib [package]",describe:"Build a Node.js / React library",builder:A,handler:async e=>Q(e,"lib")};async function Q(o,s){process.env.NODE_ENV||="production";const t=!o.silent&&o.verbose,i=process.cwd(),r=n.resolve(o.package?.toString()??"."),[m,f]=await R(r);m||(console.error(`Failed to parse package.json (${f}).`),process.exit(1)),E(o,r);const y=function(o,s,t){if(o.input&&o.input.length>0)return o.input.map(e=>n.resolve(s,e.toString()));const i=n.join(t,"src");for(const o of["ts","tsx","cts","mts"]){const s=n.join(i,`index.${o}`);if(e.existsSync(s))return[s]}console.error("Failed to detect input file."),process.exit(1)}(o,i,r),h=function(e,o,s){switch(e){case"app":return"app-node";case"functions":return"functions";case"lib":return o.some(e=>e.endsWith(".tsx"))||function(e){const o=n.join(e,"src");return X(o)}(s)?"lib-react":"lib";default:console.error("target option must be one of: "+F.join(", ")),process.exit(1)}}(s,y,r);t&&(console.info("argv:",o),console.info("packageJsonPath:",f),console.info("Target (Category):",`${h} (${s})`));const[b]=function(e){const n=e.name?.toString()??"",o=/@([^/]+)\/(.+)/.exec(n),[,s,t]=o??[];return[s,t]}(m),j="module"===m.type;o["core-js"]?process.env.BUILD_TS_COREJS="1":o["core-js-proposals"]&&(process.env.BUILD_TS_COREJS_WITH_PROPOSALS="1"),t&&(process.env.BUILD_TS_VERBOSE="1"),process.env.BUILD_TS_TARGET_CATEGORY=s,process.env.BUILD_TS_TARGET_DETAIL=h;const g=function(e,o,s,t){const i=n.join(s,"dist");if("app-node"===o||"functions"===o)return[{dir:i,format:ee(t,e.moduleType)?"module":"commonjs",sourcemap:e.sourcemap&&"inline"}];const r=[],a=e.moduleType||"both",c=e.jsExtension||"either";("cjs"===a||"both"===a||"either"===a&&!t)&&r.push({dir:i,entryFileNames:"both"===c||"either"===c&&!t?"[name].js":"[name].cjs",format:"commonjs",preserveModules:!0,preserveModulesRoot:n.join(s,"src"),sourcemap:e.sourcemap});("esm"===a||"both"===a||"either"===a&&t)&&r.push({dir:i,entryFileNames:"both"===c||"either"===c&&t?"[name].js":"[name].mjs",format:"module",preserveModules:!0,preserveModulesRoot:n.join(s,"src"),sourcemap:e.sourcemap});return r}(o,h,r,j);t&&console.info("OutputOptions:",g),0===g.length&&(console.error("Failed to detect output files."),process.exit(1)),process.chdir(r),await e.promises.rm(n.join(r,"dist"),{recursive:!0,force:!0}),"functions"===h&&await Z(r,m,o.moduleType);const v={input:"functions"===h?Object.fromEntries(y.map((e,o)=>[0===o?"index":n.basename(e,n.extname(e)),e])):y,plugins:W(o,h,m,b,r,g),watch:o.watch?{clearScreen:!1}:void 0},w=e=>(Array.isArray(e)?e:[e]).map(e=>n.relative(r,e));if(o.watch)!function(e,n,o,s,t,i){const r=d({...s,output:t}),l=async e=>{process.removeListener("uncaughtException",l),process.stdin.removeListener("end",l),r&&await r.close(),e&&process.exit(e)};u(l),process.on("uncaughtException",l),process.stdin.isTTY||(process.stdin.on("end",l),process.stdin.resume());r.on("event",async s=>{switch(s.code){case"ERROR":!function(e,n=!1){const o=e.name||e.cause?.name,s=o?`${o}: `:"",t=`${e.plugin?`(plugin ${e.plugin}) `:""}${s}${e.message}`,i=[a.bold(a.red(`[!] ${a.bold(t.toString())}`))];e.url&&i.push(a.cyan(e.url)),e.loc?i.push(`${e.loc.file||e.id} (${e.loc.line}:${e.loc.column})`):e.id&&i.push(e.id),e.frame&&i.push(a.dim(e.frame)),e.stack&&i.push(a.dim(e.stack?.replace(`${s}${e.message}\n`,""))),i.push("",""),console.error(i.join("\n")),n||$.exit(1)}(s.error,!0);break;case"BUNDLE_START":{if(e.silent)break;const n=s.input,t=[];"string"==typeof n?t.push(n):t.push(...Array.isArray(n)?n:Object.values(n)),console.info(a.cyan(`Bundles ${a.bold(i(t).join(", "))} → ${a.bold(i(s.output).join(", "))}\non ${o} ...`));break}case"BUNDLE_END":if(e.silent)break;console.info(a.green(`Created ${a.bold(i(s.output).join(", "))} in ${a.bold(p(s.duration))}`)),"app-node"!==n&&"functions"!==n&&await C(e,o);break;case"END":if(e.silent)break;console.info(`\n[${c()}] waiting for changes...`)}"result"in s&&s.result&&s.result.close()})}(o,h,r,v,g,w);else{let e;o.silent||console.info(a.cyan(`Bundles ${a.bold(w(y).join(", "))} → ${a.bold(w(g.map(e=>e.file||e.dir||"")).join(", "))}\non ${r} ...`));let n=!1;try{const n=Date.now(),s=await l(v);e=s,await Promise.all(g.map(e=>s.write(e))),o.silent||console.info(a.green(`Created ${w(g.map(e=>e.file||e.dir||"")).join(", ")} in ${a.bold(p(Date.now()-n))}`))}catch(e){n=!0,console.error("Failed to build due to:",e)}await(e?.close()),n&&process.exit(1),"app-node"===h||"functions"===h||await C(o,r)||process.exit(1)}}function X(o){try{return e.readdirSync(o,{withFileTypes:!0}).some(e=>{const s=n.join(o,e.name);return e.isDirectory()?X(s):e.isFile()&&e.name.endsWith(".tsx")})}catch{return!1}}async function Z(o,s,t){s.name+="-dist";const i="module"===s.type,r=ee(i,t);s.main=i===r?"index.js":r?"index.mjs":"index.cjs",delete s.scripts,delete s.devDependencies,await e.promises.mkdir(n.join(o,"dist"),{recursive:!0}),await e.promises.writeFile(n.join(o,"dist","package.json"),JSON.stringify(s))}function ee(e,n){return"esm"===n||(!n||"either"===n)&&e}const ne={command:"run <file>",describe:"Run script",builder:{...B,module:{description:"A module type: cjs or esm",type:"string",alias:"m"},watch:{description:"Whether watch mode is enabled or not",type:"boolean",alias:"w"}},handler(e){E(e,process.cwd());const n=e.file?.toString()??"",o=process.versions.bun,s=o?"bun":"node",t=o?["--bun"]:["--no-warnings","--import","tsx"];e.watch&&t.push("--watch"),t.push(n);const[,...i]=e._,r=[...t,...i.map(e=>e.toString())];e.verbose&&console.info(`Running '${s} ${r.join(" ")}'`);const a=T.spawnSync(s,r,{stdio:"inherit",env:{...process.env}});process.exit(a.status??1)}};t(process.env),await i(r(process.argv)).scriptName("build-ts").options(B).command(z).command(q).command(K).command(ne).demandCommand().strict().version(function(){let o=n.dirname(new URL(import.meta.url).pathname);for(;!e.existsSync(n.join(o,"package.json"));)o=n.dirname(o);return JSON.parse(e.readFileSync(n.join(o,"package.json"),"utf8")).version}()).help().argv;
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbnYudHMiLCIuLi9zcmMvdHlwZXMudHMiLCIuLi9zcmMvdXRpbHMudHMiLCIuLi9zcmMvc2hhcmVkT3B0aW9uc0J1aWxkZXIudHMiLCIuLi9zcmMvY29tbWFuZHMvYnVpbGQvYnVpbGRlci50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9wbHVnaW4udHMiLCIuLi9zcmMvY29tbWFuZHMvYnVpbGQvdHlwZVNjcmlwdC50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9yb2xsdXBMb2dnZXIudHMiLCIuLi9zcmMvY29tbWFuZHMvcnVuLnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRBbmRBcHBseUVudmlyb25tZW50VmFyaWFibGVzIH0gZnJvbSAnQHdpbGxib29zdGVyL3NoYXJlZC1saWItbm9kZSc7XG5cbmltcG9ydCB0eXBlIHsgYnVpbGRlciB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IHNoYXJlZE9wdGlvbnNCdWlsZGVyIH0gZnJvbSAnLi9zaGFyZWRPcHRpb25zQnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50c1R5cGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxubGV0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBsb2FkcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBgLmVudmAgZmlsZXMuXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlc1dpdGhDYWNoZShcbiAgYXJndjogQXJndW1lbnRzVHlwZTx0eXBlb2Ygc2hhcmVkT3B0aW9uc0J1aWxkZXI+LFxuICBjd2Q6IHN0cmluZ1xuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghZW52VmFycykge1xuICAgIGVudlZhcnMgPSByZWFkQW5kQXBwbHlFbnZpcm9ubWVudFZhcmlhYmxlcyhhcmd2LCBjd2QpO1xuICAgIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnTG9hZGVkIGVudiB2YXJzOicsIE9iamVjdC5rZXlzKGVudlZhcnMpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudlZhcnM7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgZGVmaW5pdGlvbiBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3aWxsIGJlIGluamVjdGVkIGludG8gdGhlIGJ1aWxkLlxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudFZhcmlhYmxlc0RlZmluaXRpb24oXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8dHlwZW9mIGJ1aWxkZXI+LFxuICBjd2Q6IHN0cmluZ1xuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGVudlZhcnNEZWY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgY29uc3QgZW52VmFyTmFtZXMgPSBuZXcgU2V0KFtcbiAgICAuLi4oYXJndi5pbmxpbmUgPz8gW10pLmZsYXRNYXAoKGUpID0+IGUudG9TdHJpbmcoKS5zcGxpdCgnLCcpKSxcbiAgICAuLi4oYXJndi5hdXRvSW5saW5lID8gT2JqZWN0LmtleXMobG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlKGFyZ3YsIGN3ZCkpIDogW10pLFxuICBdKTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGVudlZhck5hbWVzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52W25hbWVdID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgZW52VmFyc0RlZltgcHJvY2Vzcy5lbnYuJHtuYW1lfWBdID0gSlNPTi5zdHJpbmdpZnkocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9XG4gIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICBjb25zb2xlLmluZm8oJ0lubGluZSBlbnYgdmFyczonLCBPYmplY3Qua2V5cyhlbnZWYXJzRGVmKSk7XG4gIH1cbiAgcmV0dXJuIGVudlZhcnNEZWY7XG59XG4iLCJpbXBvcnQgdHlwZSB7IEFyZ3VtZW50c0NhbWVsQ2FzZSwgSW5mZXJyZWRPcHRpb25UeXBlcywgT3B0aW9ucyB9IGZyb20gJ3lhcmdzJztcblxuZXhwb3J0IGNvbnN0IGFsbFRhcmdldENhdGVnb3JpZXMgPSBbJ2FwcCcsICdmdW5jdGlvbnMnLCAnbGliJ10gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFRhcmdldENhdGVnb3J5ID0gKHR5cGVvZiBhbGxUYXJnZXRDYXRlZ29yaWVzKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgYWxsVGFyZ2V0RGV0YWlscyA9IFsnYXBwLW5vZGUnLCAnZnVuY3Rpb25zJywgJ2xpYicsICdsaWItcmVhY3QnXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0RGV0YWlsID0gKHR5cGVvZiBhbGxUYXJnZXREZXRhaWxzKVtudW1iZXJdO1xuXG5leHBvcnQgdHlwZSBBcmd1bWVudHNUeXBlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBPcHRpb25zPj4gPSBBcmd1bWVudHNDYW1lbENhc2U8SW5mZXJyZWRPcHRpb25UeXBlczxUPj47XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHVybCBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFBhY2thZ2VKc29uKGRpclBhdGg6IHN0cmluZyk6IFByb21pc2U8W1BhY2thZ2VKc29uIHwgdW5kZWZpbmVkLCBzdHJpbmddPiB7XG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCAncGFja2FnZS5qc29uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25UZXh0ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUocGFja2FnZUpzb25QYXRoLCAndXRmOCcpO1xuICAgIHJldHVybiBbSlNPTi5wYXJzZShwYWNrYWdlSnNvblRleHQpIGFzIFBhY2thZ2VKc29uLCBwYWNrYWdlSnNvblBhdGhdO1xuICB9IGNhdGNoIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cbiAgcmV0dXJuIFt1bmRlZmluZWQsIHBhY2thZ2VKc29uUGF0aF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWlsZFRzUm9vdFBhdGgoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHVybC5maWxlVVJMVG9QYXRoKHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUoaW1wb3J0Lm1ldGEudXJsKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlQW5kTmFtZShwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pOiBbc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWRdIHtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBwYWNrYWdlSnNvbi5uYW1lPy50b1N0cmluZygpID8/ICcnO1xuICBjb25zdCBtYXRjaCA9IC9AKFteL10rKVxcLyguKykvLmV4ZWMocGFja2FnZU5hbWUpO1xuICBjb25zdCBbLCBuYW1lc3BhY2UsIG5hbWVdID0gbWF0Y2ggPz8gW107XG4gIHJldHVybiBbbmFtZXNwYWNlLCBuYW1lXTtcbn1cbiIsImltcG9ydCB7IHlhcmdzT3B0aW9uc0J1aWxkZXJGb3JFbnYgfSBmcm9tICdAd2lsbGJvb3N0ZXIvc2hhcmVkLWxpYi1ub2RlJztcblxuZXhwb3J0IGNvbnN0IHNoYXJlZE9wdGlvbnNCdWlsZGVyID0ge1xuICAuLi55YXJnc09wdGlvbnNCdWlsZGVyRm9yRW52LFxuICBzaWxlbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgd2F0Y2ggbW9kZSBpcyBlbmFibGVkIG9yIG5vdCcsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGFsaWFzOiAncycsXG4gIH0sXG59IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc2hhcmVkT3B0aW9uc0J1aWxkZXIgfSBmcm9tICcuLi8uLi9zaGFyZWRPcHRpb25zQnVpbGRlci5qcyc7XG5cbmV4cG9ydCBjb25zdCBidWlsZGVyID0ge1xuICAuLi5zaGFyZWRPcHRpb25zQnVpbGRlcixcbiAgaW5wdXQ6IHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdQYXRocyBvZiBzb3VyY2UgY29kZSBmaWxlcyB0byBiZSBidWlsdC4gVGhlIGZpcnN0IGZpbGUgaXMgbWFpbi4gSWYgbm8gb3B0aW9uIGlzIGdpdmVuLCBcInNyYy9pbmRleC57dHMsdHN4fVwiIGZyb20gcGFja2FnZSBkaXJlY3RvcnkgaXMgdGFyZ2V0ZWQuJyxcbiAgICB0eXBlOiAnYXJyYXknLFxuICAgIGFsaWFzOiAnaScsXG4gIH0sXG4gICdjb3JlLWpzJzoge1xuICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciBvciBub3QgY29yZS1qcyBpcyBlbXBsb3llZC4nLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgJ2NvcmUtanMtcHJvcG9zYWxzJzoge1xuICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciBvciBub3QgY29yZS1qcyB3aXRoIHByb3Bvc2FscyBzdXBwb3J0IGlzIGVtcGxveWVkLicsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBtaW5pZnk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgb3Igbm90IG1pbmlmaWNhdGlvbiBpcyBlbmFibGVkLicsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNvdXJjZW1hcDoge1xuICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciBvciBub3Qgc291cmNlbWFwIGlzIGVuYWJsZWQuJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgZXh0ZXJuYWw6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0FkZGl0aW9uYWwgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLicsXG4gICAgdHlwZTogJ2FycmF5JyxcbiAgfSxcbiAgaW5saW5lOiB7XG4gICAgZGVzY3JpcHRpb246ICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgaW5saW5lZC4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gIH0sXG4gICdhdXRvLWlubGluZSc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0lubGluZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVmaW5lZCBhdCBlbnYgZmlsZXMuJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHdhdGNoIG1vZGUgaXMgZW5hYmxlZCBvciBub3QnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBhbGlhczogJ3cnLFxuICB9LFxuICBrZWVwSW1wb3J0OiB7XG4gICAgZGVzY3JpcHRpb246ICdJZGVudGlmaWVycyB0byBiZSBrZXB0IGFzIGltcG9ydCBzdGF0ZW1lbnRzLicsXG4gICAgdHlwZTogJ2FycmF5JyxcbiAgfSxcbiAgYnVuZGxlQnVpbHRpbnM6IHtcbiAgICBkZXNjcmlwdGlvbjogJ01vZHVsZSBuYW1lcyBzYW1lIHdpdGggYnVpbHRpbnMgKGUuZy4sIHVuZGljaSkgdG8gYmUgYnVuZGxlZC4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgYXBwQnVpbGRlciA9IHtcbiAgLi4uYnVpbGRlcixcbiAgbW9kdWxlVHlwZToge1xuICAgIGRlc2NyaXB0aW9uOiAnZXNtLCBjanMsIG9yIGVpdGhlciAoZGVmYXVsdCkuJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBhbGlhczogJ20nLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uc0J1aWxkZXIgPSB7XG4gIC4uLmFwcEJ1aWxkZXIsXG4gIG9ubHlQYWNrYWdlSnNvbjoge1xuICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBnZW5lcmF0ZSBvbmx5IHBhY2thZ2UuanNvbi4nLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBsaWJCdWlsZGVyID0ge1xuICAuLi5idWlsZGVyLFxuICBtb2R1bGVUeXBlOiB7XG4gICAgZGVzY3JpcHRpb246ICdlc20sIGNqcywgZWl0aGVyLCBvciBib3RoIChkZWZhdWx0KS4nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAnbScsXG4gIH0sXG4gIC8vIC5qcyBmaWxlcyBpbiBhIHBhY2thZ2Ugd2l0aCBgXCJ0eXBlXCI6IFwibW9kdWxlXCJgIGFyZSB0cmVhdGVkIGFzIGVzbS5cbiAgLy8gSG93ZXZlciwgd2Ugd2FudCB0byB0cmVhdCB0aGVtIGFzIGNqcyBpbiB0aGUgY2FzZSB3aGVyZSBhIGNqcyBwcm9qZWN0IGltcG9ydHMgYW4gZXNtIHBhY2thZ2UuXG4gIC8vIFRvIGRlYWwgd2l0aCB0aGUgY2FzZSwgd2UgdXNlIC5janMgYW5kIC5tanMgZXh0ZW5zaW9ucyBpbnN0ZWFkIG9mIC5qcyBleHRlbnNpb24uXG4gIGpzRXh0ZW5zaW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHVzZSAuanMgaW4gY2pzIGFuZC9vciBlc206IGVpdGhlciAoZGVmYXVsdCksIGJvdGgsIG9yIG5vbmUuJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBhbGlhczogJ2onLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQW55QnVpbGRlclR5cGUgPSB0eXBlb2YgYXBwQnVpbGRlciB8IHR5cGVvZiBmdW5jdGlvbnNCdWlsZGVyIHwgdHlwZW9mIGxpYkJ1aWxkZXI7XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyBiYWJlbCB9IGZyb20gJ0Byb2xsdXAvcGx1Z2luLWJhYmVsJztcbmltcG9ydCAqIGFzIGNvbW1vbmpzIGZyb20gJ0Byb2xsdXAvcGx1Z2luLWNvbW1vbmpzJztcbmltcG9ydCAqIGFzIGpzb24gZnJvbSAnQHJvbGx1cC9wbHVnaW4tanNvbic7XG5pbXBvcnQgKiBhcyByZXNvbHZlIGZyb20gJ0Byb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZSc7XG5pbXBvcnQgKiBhcyByZXBsYWNlIGZyb20gJ0Byb2xsdXAvcGx1Z2luLXJlcGxhY2UnO1xuaW1wb3J0ICogYXMgdGVyc2VyIGZyb20gJ0Byb2xsdXAvcGx1Z2luLXRlcnNlcic7XG5pbXBvcnQgdHlwZSB7IE91dHB1dE9wdGlvbnMsIFBsdWdpbiB9IGZyb20gJ3JvbGx1cCc7XG5pbXBvcnQgKiBhcyBhbmFseXplIGZyb20gJ3JvbGx1cC1wbHVnaW4tYW5hbHl6ZXInO1xuaW1wb3J0IHsga2VlcEltcG9ydCB9IGZyb20gJ3JvbGx1cC1wbHVnaW4ta2VlcC1pbXBvcnQnO1xuaW1wb3J0IHsgbm9kZUV4dGVybmFscyB9IGZyb20gJ3JvbGx1cC1wbHVnaW4tbm9kZS1leHRlcm5hbHMnO1xuaW1wb3J0IHByZXNlcnZlRGlyZWN0aXZlcyBmcm9tICdyb2xsdXAtcGx1Z2luLXByZXNlcnZlLWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgc3RyaW5nIH0gZnJvbSAncm9sbHVwLXBsdWdpbi1zdHJpbmcnO1xuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGVzRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2Vudi5qcyc7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50c1R5cGUsIFRhcmdldERldGFpbCB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGdldEJ1aWxkVHNSb290UGF0aCB9IGZyb20gJy4uLy4uL3V0aWxzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBidWlsZGVyIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUGx1Z2lucyhcbiAgYXJndjogQXJndW1lbnRzVHlwZTx0eXBlb2YgYnVpbGRlcj4sXG4gIHRhcmdldERldGFpbDogVGFyZ2V0RGV0YWlsLFxuICBwYWNrYWdlSnNvbjogUGFja2FnZUpzb24sXG4gIG5hbWVzcGFjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwYWNrYWdlRGlyUGF0aDogc3RyaW5nLFxuICBvdXRwdXRPcHRpb25zTGlzdDogT3V0cHV0T3B0aW9uc1tdXG4pOiBQbHVnaW5bXSB7XG4gIGNvbnN0IGV4dGVybmFsRGVwcyA9IFsuLi4oYXJndi5leHRlcm5hbCA/PyBbXSldLm1hcCgoaXRlbSkgPT4gaXRlbS50b1N0cmluZygpKTtcbiAgaWYgKHBhY2thZ2VKc29uLmRlcGVuZGVuY2llcz8uWydAcHJpc21hL2NsaWVudCddKSB7XG4gICAgZXh0ZXJuYWxEZXBzLnB1c2goJ3ByaXNtYS1jbGllbnQnKTtcbiAgfVxuICAvLyBTaW5jZSBgZGVwczogdHJ1ZWAgZG9lcyBub3Qgd29yayBmb3IgYGltcG9ydCBjaHVuayBmcm9tICdsb2Rhc2guY2h1bmsvaW5kZXguanMnO2BcbiAgZXh0ZXJuYWxEZXBzLnB1c2goXG4gICAgLi4uT2JqZWN0LmtleXMocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5vcHRpb25hbERlcGVuZGVuY2llcyA/PyB7fSlcbiAgKTtcbiAgLy8gQWRkIGV4dGVybmFsIGRlcGVuZGVuY2llcyBmcm9tIHNpYmxpbmcgcGFja2FnZXNcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKCcuLicsICcuLicsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICBjb25zdCBwYWNrYWdlRGlycyA9IGZzLnJlYWRkaXJTeW5jKHBhdGguam9pbignLi4nKSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIGZvciAoY29uc3QgcGFja2FnZURpciBvZiBwYWNrYWdlRGlycykge1xuICAgICAgaWYgKCFwYWNrYWdlRGlyLmlzRGlyZWN0b3J5KCkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLmpvaW4oJy4uJywgcGFja2FnZURpci5uYW1lLCAncGFja2FnZS5qc29uJyk7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IG90aGVyUGFja2FnZUpzb246IFBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmOCcpKTtcbiAgICAgIGlmIChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXM/LltvdGhlclBhY2thZ2VKc29uLm5hbWUgPz8gJyddKSB7XG4gICAgICAgIGV4dGVybmFsRGVwcy5wdXNoKFxuICAgICAgICAgIC4uLk9iamVjdC5rZXlzKG90aGVyUGFja2FnZUpzb24uZGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyhvdGhlclBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXMgPz8ge30pLFxuICAgICAgICAgIC4uLk9iamVjdC5rZXlzKG90aGVyUGFja2FnZUpzb24ub3B0aW9uYWxEZXBlbmRlbmNpZXMgPz8ge30pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLmNqcycsICcubWpzJywgJy5qcycsICcuanN4JywgJy5qc29uJywgJy5jdHMnLCAnLm10cycsICcudHMnLCAnLnRzeCddO1xuICBjb25zdCBiYWJlbENvbmZpZ1BhdGggPSBwYXRoLmpvaW4oZ2V0QnVpbGRUc1Jvb3RQYXRoKCksICdiYWJlbC5jb25maWcubWpzJyk7XG4gIGNvbnN0IHJlcGxhY2VQbHVnaW4gPSBnZXREZWZhdWx0UGx1Z2luRmFjdG9yeShyZXBsYWNlKTtcbiAgY29uc3QganNvblBsdWdpbiA9IGdldERlZmF1bHRQbHVnaW5GYWN0b3J5KGpzb24pO1xuICBjb25zdCByZXNvbHZlUGx1Z2luID0gZ2V0RGVmYXVsdFBsdWdpbkZhY3RvcnkocmVzb2x2ZSk7XG4gIGNvbnN0IGNvbW1vbmpzUGx1Z2luID0gZ2V0RGVmYXVsdFBsdWdpbkZhY3RvcnkoY29tbW9uanMpO1xuICBjb25zdCB0ZXJzZXJQbHVnaW4gPSBnZXREZWZhdWx0UGx1Z2luRmFjdG9yeSh0ZXJzZXIpO1xuICBjb25zdCBhbmFseXplUGx1Z2luID0gZ2V0RGVmYXVsdFBsdWdpbkZhY3RvcnkoYW5hbHl6ZSk7XG4gIGNvbnN0IHBsdWdpbnM6IFBsdWdpbltdID0gW1xuICAgIHJlcGxhY2VQbHVnaW4oe1xuICAgICAgLy8gSWdub3JlIHdvcmQgYm91bmRhcmllcyBhbmQgcmVwbGFjZSBldmVyeSBpbnN0YW5jZSBvZiB0aGUgc3RyaW5nLlxuICAgICAgLy8gY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcGx1Z2lucy90cmVlL21hc3Rlci9wYWNrYWdlcy9yZXBsYWNlI3dvcmQtYm91bmRhcmllc1xuICAgICAgZGVsaW1pdGVyczogWycnLCAnJ10sXG4gICAgICBwcmV2ZW50QXNzaWdubWVudDogdHJ1ZSxcbiAgICAgIHZhbHVlczogY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZXNEZWZpbml0aW9uKGFyZ3YsIHBhY2thZ2VEaXJQYXRoKSxcbiAgICB9KSxcbiAgICBqc29uUGx1Z2luKCksXG4gICAgbm9kZUV4dGVybmFscyh7XG4gICAgICBkZXBzOiB0cnVlLFxuICAgICAgZGV2RGVwczogZmFsc2UsXG4gICAgICBwZWVyRGVwczogdHJ1ZSxcbiAgICAgIG9wdERlcHM6IHRydWUsXG4gICAgICBpbmNsdWRlOiBleHRlcm5hbERlcHMubWFwKChuYW1lKSA9PiBuZXcgUmVnRXhwKGBeJHtuYW1lfSg/OlxcXFwvLispP2ApKSxcbiAgICAgIGV4Y2x1ZGU6IHNob3VsZEJ1bmRsZVNhbWVOYW1lc3BhY2VEZXBlbmRlbmNpZXModGFyZ2V0RGV0YWlsKSAmJiBuYW1lc3BhY2UgJiYgbmV3IFJlZ0V4cChgXkA/JHtuYW1lc3BhY2V9KD86XFxcXC8uKyk/YCksXG4gICAgfSksXG4gICAgcmVzb2x2ZVBsdWdpbih7XG4gICAgICBleHRlbnNpb25zLFxuICAgICAgcHJlZmVyQnVpbHRpbnM6IChpZDogc3RyaW5nKSA9PiAhYXJndi5idW5kbGVCdWlsdGlucz8uaW5jbHVkZXMoaWQpLFxuICAgIH0pLFxuICAgIGNvbW1vbmpzUGx1Z2luKCksXG4gICAga2VlcEltcG9ydCh7IG1vZHVsZU5hbWVzOiBhcmd2LmtlZXBJbXBvcnQ/Lm1hcCgoaXRlbSkgPT4gaXRlbS50b1N0cmluZygpKSA/PyBbXSB9KSxcbiAgXTtcbiAgY29uc3QgaXNCYWJlbEhlbHBlcnNCdW5kbGVkID1cbiAgICB0YXJnZXREZXRhaWwgPT09ICdhcHAtbm9kZScgfHwgdGFyZ2V0RGV0YWlsID09PSAnZnVuY3Rpb25zJyB8fCAhZXh0ZXJuYWxEZXBzLmluY2x1ZGVzKCdAYmFiZWwvcnVudGltZScpO1xuICBwcm9jZXNzLmVudi5CVUlMRFRTX1VTRV9CQUJMRV9SVU5USU1FID0gaXNCYWJlbEhlbHBlcnNCdW5kbGVkID8gJycgOiAnMSc7XG4gIHBsdWdpbnMucHVzaChcbiAgICBiYWJlbCh7XG4gICAgICBjb25maWdGaWxlOiBiYWJlbENvbmZpZ1BhdGgsXG4gICAgICBleHRlbnNpb25zLFxuICAgICAgLy8gV2UgbmVlZCBgcnVudGltZSBzaW5jZSBgYnVuZGxlZGAgbWF5IGJyZWFrIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYnkgY3JlYXRpbmcgX3ZpcnR1YWwgZGlyZWN0b3J5LlxuICAgICAgYmFiZWxIZWxwZXJzOiBpc0JhYmVsSGVscGVyc0J1bmRsZWQgPyAnYnVuZGxlZCcgOiAncnVudGltZScsXG4gICAgICBleGNsdWRlOiAvXiguK1xcLyk/bm9kZV9tb2R1bGVzXFwvLiskLyxcbiAgICB9KSxcbiAgICAuLi4ob3V0cHV0T3B0aW9uc0xpc3Quc29tZSgob3B0cykgPT4gb3B0cy5wcmVzZXJ2ZU1vZHVsZXMpID8gW3ByZXNlcnZlRGlyZWN0aXZlcygpXSA6IFtdKSxcbiAgICBzdHJpbmcoeyBpbmNsdWRlOiBbJyoqLyouY3N2JywgJyoqLyoudHh0J10gfSlcbiAgKTtcbiAgaWYgKGFyZ3YubWluaWZ5KSB7XG4gICAgcGx1Z2lucy5wdXNoKHRlcnNlclBsdWdpbih7IGNvbXByZXNzOiB7IGRpcmVjdGl2ZXM6IGZhbHNlIH0gfSkpO1xuICB9XG4gIHBsdWdpbnMucHVzaChhbmFseXplUGx1Z2luKHsgc3VtbWFyeU9ubHk6IHRydWUgfSkpO1xuICByZXR1cm4gcGx1Z2lucztcbn1cblxuZnVuY3Rpb24gc2hvdWxkQnVuZGxlU2FtZU5hbWVzcGFjZURlcGVuZGVuY2llcyh0YXJnZXREZXRhaWw6IFRhcmdldERldGFpbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFyZ2V0RGV0YWlsID09PSAnYXBwLW5vZGUnIHx8IHRhcmdldERldGFpbCA9PT0gJ2Z1bmN0aW9ucyc7XG59XG5cbnR5cGUgUGx1Z2luRmFjdG9yeSA9IChvcHRpb25zPzogdW5rbm93bikgPT4gUGx1Z2luO1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0UGx1Z2luRmFjdG9yeShtb2R1bGU6IHsgZGVmYXVsdDogdW5rbm93biB9KTogUGx1Z2luRmFjdG9yeSB7XG4gIHJldHVybiBtb2R1bGUuZGVmYXVsdCBhcyBQbHVnaW5GYWN0b3J5O1xufVxuIiwiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgQXJndW1lbnRzVHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBbnlCdWlsZGVyVHlwZSB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZURlY2xhcmF0aW9uRmlsZXMoXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8QW55QnVpbGRlclR5cGU+LFxuICBjb3JlUHJvamVjdERpclBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGNvcmVDb25maWdGaWxlID0gZmluZENvbmZpZ0ZpbGUoY29yZVByb2plY3REaXJQYXRoKTtcbiAgaWYgKCFjb3JlQ29uZmlnRmlsZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmluZCB0c2NvbmZpZy5qc29uIGluICR7Y29yZVByb2plY3REaXJQYXRofS5gKTtcbiAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgIGNvbnNvbGUuaW5mbygnRm91bmQgdHNjb25maWcuanNvbjonLCBjb3JlQ29uZmlnRmlsZSk7XG4gIH1cblxuICBjb25zdCBwcm9qZWN0czogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddW10gPSBbXTtcbiAgbGV0IG91dERpciA9IHBhdGguam9pbignZGlzdCcsIHBhdGguYmFzZW5hbWUoY29yZVByb2plY3REaXJQYXRoKSwgJ3NyYycpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhvdXREaXIpKSB7XG4gICAgY29uc3QgcGFyZW50RGlyUGF0aCA9IHBhdGguZGlybmFtZShjb3JlUHJvamVjdERpclBhdGgpO1xuICAgIGNvbnN0IGRpcmVudHMgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKHBhcmVudERpclBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBjb3JlUHJvamVjdERpclBhdGggPSBwYXRoLnJlc29sdmUoY29yZVByb2plY3REaXJQYXRoKTtcbiAgICBmb3IgKGNvbnN0IGRpcmVudCBvZiBkaXJlbnRzKSB7XG4gICAgICBpZiAoIWRpcmVudC5pc0RpcmVjdG9yeSgpKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgcHJvamVjdERpclBhdGggPSBwYXRoLnJlc29sdmUocGFyZW50RGlyUGF0aCwgZGlyZW50Lm5hbWUpO1xuICAgICAgaWYgKHByb2plY3REaXJQYXRoID09PSBjb3JlUHJvamVjdERpclBhdGgpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjb25maWdGaWxlID0gZmluZENvbmZpZ0ZpbGUocHJvamVjdERpclBhdGgpO1xuICAgICAgY29uc3Qgb3V0RGlyID0gcGF0aC5qb2luKCdkaXN0JywgZGlyZW50Lm5hbWUsICdzcmMnKTtcbiAgICAgIGlmIChjb25maWdGaWxlICYmIGZzLmV4aXN0c1N5bmMob3V0RGlyKSkge1xuICAgICAgICBwcm9qZWN0cy5wdXNoKFtwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSwgb3V0RGlyXSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dERpciA9ICdkaXN0JztcbiAgfVxuICBwcm9qZWN0cy5wdXNoKFtjb3JlUHJvamVjdERpclBhdGgsIGNvcmVDb25maWdGaWxlLCBvdXREaXJdKTtcblxuICBsZXQgYWxsU3VjY2VlZGVkID0gdHJ1ZTtcbiAgZm9yIChjb25zdCBbcHJvamVjdERpclBhdGgsIGNvbmZpZ0ZpbGUsIG91dERpcl0gb2YgcHJvamVjdHMpIHtcbiAgICBhbGxTdWNjZWVkZWQgJiY9IGF3YWl0IHJ1blR5cGVTY3JpcHROYXRpdmUoYXJndiwgcHJvamVjdERpclBhdGgsIGNvbmZpZ0ZpbGUsIHBhdGguam9pbihjb3JlUHJvamVjdERpclBhdGgsIG91dERpcikpO1xuICB9XG4gIHJldHVybiBhbGxTdWNjZWVkZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blR5cGVTY3JpcHROYXRpdmUoXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8QW55QnVpbGRlclR5cGU+LFxuICBwcm9qZWN0RGlyUGF0aDogc3RyaW5nLFxuICBjb25maWdGaWxlOiBzdHJpbmcsXG4gIG91dERpcjogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgIGNvbnNvbGUuaW5mbygncnVuVHlwZVNjcmlwdE5hdGl2ZSgpJywgcHJvamVjdERpclBhdGgsIGNvbmZpZ0ZpbGUsIG91dERpcik7XG4gIH1cblxuICBjb25zdCBjb25maWdGaWxlRGlyUGF0aCA9IHBhdGguZGlybmFtZShjb25maWdGaWxlKTtcbiAgY29uc3QgdGVtcENvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oY29uZmlnRmlsZURpclBhdGgsIGAuYnVpbGQtdHMtdHNnby4ke3Byb2Nlc3MucGlkfS4ke0RhdGUubm93KCl9Lmpzb25gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoXG4gICAgICB0ZW1wQ29uZmlnRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGF3YWl0IGNyZWF0ZVR5cGVTY3JpcHROYXRpdmVDb25maWcocHJvamVjdERpclBhdGgsIGNvbmZpZ0ZpbGUsIG91dERpciksIHVuZGVmaW5lZCwgMilcbiAgICApO1xuICAgIGNvbnN0IHJldCA9IGNoaWxkX3Byb2Nlc3Muc3Bhd25TeW5jKHByb2Nlc3MuZXhlY1BhdGgsIFtnZXRUeXBlU2NyaXB0TmF0aXZlUGF0aCgpLCAnLXAnLCB0ZW1wQ29uZmlnRmlsZV0sIHtcbiAgICAgIGN3ZDogcHJvamVjdERpclBhdGgsXG4gICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgIH0pO1xuICAgIGlmIChyZXQuZXJyb3IpIHRocm93IHJldC5lcnJvcjtcbiAgICByZXR1cm4gcmV0LnN0YXR1cyA9PT0gMDtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5ybSh0ZW1wQ29uZmlnRmlsZSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVUeXBlU2NyaXB0TmF0aXZlQ29uZmlnKFxuICBwcm9qZWN0RGlyUGF0aDogc3RyaW5nLFxuICBjb25maWdGaWxlOiBzdHJpbmcsXG4gIG91dERpcjogc3RyaW5nXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IGNvbXBpbGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgZGVjbGFyYXRpb246IHRydWUsXG4gICAgZW1pdERlY2xhcmF0aW9uT25seTogdHJ1ZSxcbiAgICBub0VtaXQ6IGZhbHNlLFxuICAgIG5vRW1pdE9uRXJyb3I6IHRydWUsXG4gICAgb3V0RGlyLFxuICAgIHJvb3REaXI6ICdzcmMnLFxuICB9O1xuICBpZiAoYXdhaXQgdXNlc05vZGVQcm90b2NvbEltcG9ydChwYXRoLmpvaW4ocHJvamVjdERpclBhdGgsICdzcmMnKSkpIHtcbiAgICBjb25zdCB0eXBlcyA9IGF3YWl0IGNvbGxlY3RUeXBlUGFja2FnZXMocGF0aC5qb2luKHByb2plY3REaXJQYXRoLCAnbm9kZV9tb2R1bGVzJywgJ0B0eXBlcycpKTtcbiAgICBpZiAodHlwZXMuaW5jbHVkZXMoJ25vZGUnKSkge1xuICAgICAgY29tcGlsZXJPcHRpb25zLnR5cGVzID0gdHlwZXM7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY29tcGlsZXJPcHRpb25zLFxuICAgIGV4dGVuZHM6IHRvUmVsYXRpdmVDb25maWdQYXRoKHBhdGguZGlybmFtZShjb25maWdGaWxlKSwgY29uZmlnRmlsZSksXG4gICAgaW5jbHVkZTogWydzcmMvKiovKiddLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kQ29uZmlnRmlsZShkaXJQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBsZXQgY3VycmVudERpclBhdGggPSBwYXRoLnJlc29sdmUoZGlyUGF0aCk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihjdXJyZW50RGlyUGF0aCwgJ3RzY29uZmlnLmpzb24nKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhjb25maWdGaWxlKSkgcmV0dXJuIGNvbmZpZ0ZpbGU7XG5cbiAgICBjb25zdCBwYXJlbnREaXJQYXRoID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXJQYXRoKTtcbiAgICBpZiAocGFyZW50RGlyUGF0aCA9PT0gY3VycmVudERpclBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY3VycmVudERpclBhdGggPSBwYXJlbnREaXJQYXRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVTY3JpcHROYXRpdmVQYXRoKCk6IHN0cmluZyB7XG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnQHR5cGVzY3JpcHQvbmF0aXZlLXByZXZpZXcvcGFja2FnZS5qc29uJyk7XG4gIHJldHVybiBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCksICdiaW4nLCAndHNnby5qcycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1c2VzTm9kZVByb3RvY29sSW1wb3J0KGRpclBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRpcmVudHMgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKGRpclBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBmb3IgKGNvbnN0IGRpcmVudCBvZiBkaXJlbnRzKSB7XG4gICAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZGlyZW50Lm5hbWUpO1xuICAgICAgaWYgKGRpcmVudC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGlmIChhd2FpdCB1c2VzTm9kZVByb3RvY29sSW1wb3J0KGNoaWxkUGF0aCkpIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmICgvXFwuW2NtXT90c3g/JC8udGVzdChkaXJlbnQubmFtZSkgJiYgKGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGNoaWxkUGF0aCwgJ3V0ZjgnKSkuaW5jbHVkZXMoJ25vZGU6JykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0VHlwZVBhY2thZ2VzKHR5cGVSb290c0RpclBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlbnRzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcih0eXBlUm9vdHNEaXJQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgcmV0dXJuIGRpcmVudHMuZmlsdGVyKChkaXJlbnQpID0+IGRpcmVudC5pc0RpcmVjdG9yeSgpKS5tYXAoKGRpcmVudCkgPT4gZGlyZW50Lm5hbWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9SZWxhdGl2ZUNvbmZpZ1BhdGgoZnJvbURpclBhdGg6IHN0cmluZywgdG9GaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShmcm9tRGlyUGF0aCwgdG9GaWxlUGF0aCkucmVwbGFjZUFsbChwYXRoLnNlcCwgJy8nKTtcbiAgcmV0dXJuIHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuJykgPyByZWxhdGl2ZVBhdGggOiBgLi8ke3JlbGF0aXZlUGF0aH1gO1xufVxuIiwiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBkYXRlVGltZSBmcm9tICdkYXRlLXRpbWUnO1xuaW1wb3J0IG1zIGZyb20gJ3ByZXR0eS1tcyc7XG5pbXBvcnQgdHlwZSB7IE91dHB1dE9wdGlvbnMsIFJvbGx1cEJ1aWxkLCBSb2xsdXBPcHRpb25zIH0gZnJvbSAncm9sbHVwJztcbmltcG9ydCB7IHJvbGx1cCwgd2F0Y2ggfSBmcm9tICdyb2xsdXAnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyIH0gZnJvbSAnc2lnbmFsLWV4aXQnO1xuaW1wb3J0IHsgb25FeGl0IH0gZnJvbSAnc2lnbmFsLWV4aXQnO1xuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gJ3R5cGUtZmVzdCc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRNb2R1bGUgfSBmcm9tICd5YXJncyc7XG5cbmltcG9ydCB7IGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlc1dpdGhDYWNoZSB9IGZyb20gJy4uLy4uL2Vudi5qcyc7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50c1R5cGUsIFRhcmdldENhdGVnb3J5LCBUYXJnZXREZXRhaWwgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBhbGxUYXJnZXRDYXRlZ29yaWVzIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZ2V0TmFtZXNwYWNlQW5kTmFtZSwgcmVhZFBhY2thZ2VKc29uIH0gZnJvbSAnLi4vLi4vdXRpbHMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFueUJ1aWxkZXJUeXBlLCBidWlsZGVyIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcbmltcG9ydCB7IGFwcEJ1aWxkZXIsIGZ1bmN0aW9uc0J1aWxkZXIsIGxpYkJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXIuanMnO1xuaW1wb3J0IHsgc2V0dXBQbHVnaW5zIH0gZnJvbSAnLi9wbHVnaW4uanMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuL3JvbGx1cExvZ2dlci5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZURlY2xhcmF0aW9uRmlsZXMgfSBmcm9tICcuL3R5cGVTY3JpcHQuanMnO1xuXG5leHBvcnQgY29uc3QgYXBwOiBDb21tYW5kTW9kdWxlPHVua25vd24sIEFyZ3VtZW50c1R5cGU8dHlwZW9mIGFwcEJ1aWxkZXI+PiA9IHtcbiAgY29tbWFuZDogJ2FwcCBbcGFja2FnZV0nLFxuICBkZXNjcmliZTogJ0J1aWxkIGFuIGFwcCcsXG4gIGJ1aWxkZXI6IGFwcEJ1aWxkZXIsXG4gIGFzeW5jIGhhbmRsZXIoYXJndikge1xuICAgIHJldHVybiBidWlsZChhcmd2LCAnYXBwJyk7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25zOiBDb21tYW5kTW9kdWxlPHVua25vd24sIEFyZ3VtZW50c1R5cGU8dHlwZW9mIGZ1bmN0aW9uc0J1aWxkZXI+PiA9IHtcbiAgY29tbWFuZDogJ2Z1bmN0aW9ucyBbcGFja2FnZV0nLFxuICBkZXNjcmliZTogJ0J1aWxkIGEgR0NQL0ZpcmViYXNlIGZ1bmN0aW9ucyBhcHAnLFxuICBidWlsZGVyOiBmdW5jdGlvbnNCdWlsZGVyLFxuICBhc3luYyBoYW5kbGVyKGFyZ3YpIHtcbiAgICBpZiAoYXJndi5vbmx5UGFja2FnZUpzb24pIHtcbiAgICAgIGNvbnN0IHBhY2thZ2VEaXJQYXRoID0gcGF0aC5yZXNvbHZlKGFyZ3YucGFja2FnZT8udG9TdHJpbmcoKSA/PyAnLicpO1xuICAgICAgY29uc3QgW3BhY2thZ2VKc29uLCBwYWNrYWdlSnNvblBhdGhdID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKHBhY2thZ2VEaXJQYXRoKTtcbiAgICAgIGlmICghcGFja2FnZUpzb24pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIHBhY2thZ2UuanNvbiAoJHtwYWNrYWdlSnNvblBhdGh9KS5gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZ2VuZXJhdGVQYWNrYWdlSnNvbkZvckZ1bmN0aW9ucyhwYWNrYWdlRGlyUGF0aCwgcGFja2FnZUpzb24sIGFyZ3YubW9kdWxlVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWlsZChhcmd2LCAnZnVuY3Rpb25zJyk7XG4gICAgfVxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGxpYjogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBBcmd1bWVudHNUeXBlPHR5cGVvZiBsaWJCdWlsZGVyPj4gPSB7XG4gIGNvbW1hbmQ6ICdsaWIgW3BhY2thZ2VdJyxcbiAgZGVzY3JpYmU6ICdCdWlsZCBhIE5vZGUuanMgLyBSZWFjdCBsaWJyYXJ5JyxcbiAgYnVpbGRlcjogbGliQnVpbGRlcixcbiAgYXN5bmMgaGFuZGxlcihhcmd2KSB7XG4gICAgcmV0dXJuIGJ1aWxkKGFyZ3YsICdsaWInKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZChhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPiwgdGFyZ2V0Q2F0ZWdvcnk6IFRhcmdldENhdGVnb3J5KTogUHJvbWlzZTx2b2lkPiB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WIHx8PSAncHJvZHVjdGlvbic7XG5cbiAgLy8gYHNpbGVudGAgaXMgc3Ryb25nZXIgdGhhbiBgdmVyYm9zZWAuXG4gIGNvbnN0IHZlcmJvc2UgPSAhYXJndi5zaWxlbnQgJiYgYXJndi52ZXJib3NlO1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIGNvbnN0IHBhY2thZ2VEaXJQYXRoID0gcGF0aC5yZXNvbHZlKGFyZ3YucGFja2FnZT8udG9TdHJpbmcoKSA/PyAnLicpO1xuICBjb25zdCBbcGFja2FnZUpzb24sIHBhY2thZ2VKc29uUGF0aF0gPSBhd2FpdCByZWFkUGFja2FnZUpzb24ocGFja2FnZURpclBhdGgpO1xuICBpZiAoIXBhY2thZ2VKc29uKSB7XG4gICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIHBhY2thZ2UuanNvbiAoJHtwYWNrYWdlSnNvblBhdGh9KS5gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUoYXJndiwgcGFja2FnZURpclBhdGgpO1xuXG4gIGNvbnN0IGlucHV0cyA9IHZlcmlmeUlucHV0KGFyZ3YsIGN3ZCwgcGFja2FnZURpclBhdGgpO1xuICBjb25zdCB0YXJnZXREZXRhaWwgPSBkZXRlY3RUYXJnZXREZXRhaWwodGFyZ2V0Q2F0ZWdvcnksIGlucHV0cywgcGFja2FnZURpclBhdGgpO1xuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdhcmd2OicsIGFyZ3YpO1xuICAgIGNvbnNvbGUuaW5mbygncGFja2FnZUpzb25QYXRoOicsIHBhY2thZ2VKc29uUGF0aCk7XG4gICAgY29uc29sZS5pbmZvKCdUYXJnZXQgKENhdGVnb3J5KTonLCBgJHt0YXJnZXREZXRhaWx9ICgke3RhcmdldENhdGVnb3J5fSlgKTtcbiAgfVxuXG4gIGNvbnN0IFtuYW1lc3BhY2VdID0gZ2V0TmFtZXNwYWNlQW5kTmFtZShwYWNrYWdlSnNvbik7XG4gIGNvbnN0IGlzRXNtUGFja2FnZSA9IHBhY2thZ2VKc29uLnR5cGUgPT09ICdtb2R1bGUnO1xuXG4gIGlmIChhcmd2Wydjb3JlLWpzJ10pIHtcbiAgICBwcm9jZXNzLmVudi5CVUlMRF9UU19DT1JFSlMgPSAnMSc7XG4gIH0gZWxzZSBpZiAoYXJndlsnY29yZS1qcy1wcm9wb3NhbHMnXSkge1xuICAgIHByb2Nlc3MuZW52LkJVSUxEX1RTX0NPUkVKU19XSVRIX1BST1BPU0FMUyA9ICcxJztcbiAgfVxuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgcHJvY2Vzcy5lbnYuQlVJTERfVFNfVkVSQk9TRSA9ICcxJztcbiAgfVxuICBwcm9jZXNzLmVudi5CVUlMRF9UU19UQVJHRVRfQ0FURUdPUlkgPSB0YXJnZXRDYXRlZ29yeTtcbiAgcHJvY2Vzcy5lbnYuQlVJTERfVFNfVEFSR0VUX0RFVEFJTCA9IHRhcmdldERldGFpbDtcblxuICBjb25zdCBvdXRwdXRPcHRpb25zTGlzdCA9IGdldE91dHB1dE9wdGlvbnNMaXN0KGFyZ3YsIHRhcmdldERldGFpbCwgcGFja2FnZURpclBhdGgsIGlzRXNtUGFja2FnZSk7XG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdPdXRwdXRPcHRpb25zOicsIG91dHB1dE9wdGlvbnNMaXN0KTtcbiAgfVxuICBpZiAob3V0cHV0T3B0aW9uc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRldGVjdCBvdXRwdXQgZmlsZXMuJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJvY2Vzcy5jaGRpcihwYWNrYWdlRGlyUGF0aCk7XG4gIGF3YWl0IGZzLnByb21pc2VzLnJtKHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ2Rpc3QnKSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICBpZiAodGFyZ2V0RGV0YWlsID09PSAnZnVuY3Rpb25zJykge1xuICAgIGF3YWl0IGdlbmVyYXRlUGFja2FnZUpzb25Gb3JGdW5jdGlvbnMocGFja2FnZURpclBhdGgsIHBhY2thZ2VKc29uLCBhcmd2Lm1vZHVsZVR5cGUpO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogUm9sbHVwT3B0aW9ucyA9IHtcbiAgICBpbnB1dDpcbiAgICAgIHRhcmdldERldGFpbCA9PT0gJ2Z1bmN0aW9ucydcbiAgICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBpbnB1dHMubWFwKChpbnB1dCwgaW5kZXgpID0+IFtpbmRleCA9PT0gMCA/ICdpbmRleCcgOiBwYXRoLmJhc2VuYW1lKGlucHV0LCBwYXRoLmV4dG5hbWUoaW5wdXQpKSwgaW5wdXRdKVxuICAgICAgICAgIClcbiAgICAgICAgOiBpbnB1dHMsXG4gICAgcGx1Z2luczogc2V0dXBQbHVnaW5zKGFyZ3YsIHRhcmdldERldGFpbCwgcGFja2FnZUpzb24sIG5hbWVzcGFjZSwgcGFja2FnZURpclBhdGgsIG91dHB1dE9wdGlvbnNMaXN0KSxcbiAgICB3YXRjaDogYXJndi53YXRjaCA/IHsgY2xlYXJTY3JlZW46IGZhbHNlIH0gOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgY29uc3QgcGF0aFRvUmVsYXRpdmVQYXRoID0gKHBhdGhzOiBzdHJpbmcgfCBSZWFkb25seTxzdHJpbmdbXT4pOiBzdHJpbmdbXSA9PlxuICAgIChBcnJheS5pc0FycmF5KHBhdGhzKSA/IHBhdGhzIDogW3BhdGhzXSkubWFwKChwKSA9PiBwYXRoLnJlbGF0aXZlKHBhY2thZ2VEaXJQYXRoLCBwKSk7XG4gIGlmIChhcmd2LndhdGNoKSB7XG4gICAgd2F0Y2hSb2xsdXAoYXJndiwgdGFyZ2V0RGV0YWlsLCBwYWNrYWdlRGlyUGF0aCwgb3B0aW9ucywgb3V0cHV0T3B0aW9uc0xpc3QsIHBhdGhUb1JlbGF0aXZlUGF0aCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFhcmd2LnNpbGVudCkge1xuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBjaGFsay5jeWFuKFxuICAgICAgICAgIGBCdW5kbGVzICR7Y2hhbGsuYm9sZChwYXRoVG9SZWxhdGl2ZVBhdGgoaW5wdXRzKS5qb2luKCcsICcpKX0g4oaSICR7Y2hhbGsuYm9sZChcbiAgICAgICAgICAgIHBhdGhUb1JlbGF0aXZlUGF0aChvdXRwdXRPcHRpb25zTGlzdC5tYXAoKG9wdHMpID0+IG9wdHMuZmlsZSB8fCBvcHRzLmRpciB8fCAnJykpLmpvaW4oJywgJylcbiAgICAgICAgICApfVxcbm9uICR7cGFja2FnZURpclBhdGh9IC4uLmBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgYnVuZGxlOiBSb2xsdXBCdWlsZCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYnVpbGRGYWlsZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IF9idW5kbGUgPSBhd2FpdCByb2xsdXAob3B0aW9ucyk7XG4gICAgICBidW5kbGUgPSBfYnVuZGxlO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwob3V0cHV0T3B0aW9uc0xpc3QubWFwKChvcHRzKSA9PiBfYnVuZGxlLndyaXRlKG9wdHMpKSk7XG5cbiAgICAgIGlmICghYXJndi5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgIGNoYWxrLmdyZWVuKFxuICAgICAgICAgICAgYENyZWF0ZWQgJHtwYXRoVG9SZWxhdGl2ZVBhdGgob3V0cHV0T3B0aW9uc0xpc3QubWFwKChvcHRzKSA9PiBvcHRzLmZpbGUgfHwgb3B0cy5kaXIgfHwgJycpKS5qb2luKFxuICAgICAgICAgICAgICAnLCAnXG4gICAgICAgICAgICApfSBpbiAke2NoYWxrLmJvbGQobXMoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkpfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGJ1aWxkRmFpbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBidWlsZCBkdWUgdG86JywgZXJyb3IpO1xuICAgIH1cbiAgICBhd2FpdCBidW5kbGU/LmNsb3NlKCk7XG4gICAgaWYgKGJ1aWxkRmFpbGVkKSBwcm9jZXNzLmV4aXQoMSk7XG5cbiAgICBpZiAoXG4gICAgICB0YXJnZXREZXRhaWwgIT09ICdhcHAtbm9kZScgJiZcbiAgICAgIHRhcmdldERldGFpbCAhPT0gJ2Z1bmN0aW9ucycgJiZcbiAgICAgICEoYXdhaXQgZ2VuZXJhdGVEZWNsYXJhdGlvbkZpbGVzKGFyZ3YsIHBhY2thZ2VEaXJQYXRoKSlcbiAgICApIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2F0Y2hSb2xsdXAoXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8QW55QnVpbGRlclR5cGU+LFxuICB0YXJnZXREZXRhaWw6IHN0cmluZyxcbiAgcGFja2FnZURpclBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogUm9sbHVwT3B0aW9ucyxcbiAgb3V0cHV0T3B0aW9uc0xpc3Q6IE91dHB1dE9wdGlvbnNbXSxcbiAgcGF0aFRvUmVsYXRpdmVQYXRoOiAocGF0aHM6IHN0cmluZyB8IFJlYWRvbmx5PHN0cmluZ1tdPikgPT4gc3RyaW5nW11cbik6IHZvaWQge1xuICBjb25zdCB3YXRjaGVyID0gd2F0Y2goeyAuLi5vcHRpb25zLCBvdXRwdXQ6IG91dHB1dE9wdGlvbnNMaXN0IH0pO1xuXG4gIGNvbnN0IGNsb3NlID0gYXN5bmMgKGNvZGU6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKCd1bmNhdWdodEV4Y2VwdGlvbicsIGNsb3NlKTtcbiAgICBwcm9jZXNzLnN0ZGluLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbG9zZSk7XG4gICAgaWYgKHdhdGNoZXIpIGF3YWl0IHdhdGNoZXIuY2xvc2UoKTtcbiAgICBpZiAoY29kZSkgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICB9O1xuICBvbkV4aXQoY2xvc2UgYXMgdW5rbm93biBhcyBIYW5kbGVyKTtcbiAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBjbG9zZSk7XG4gIGlmICghcHJvY2Vzcy5zdGRpbi5pc1RUWSkge1xuICAgIHByb2Nlc3Muc3RkaW4ub24oJ2VuZCcsIGNsb3NlKTtcbiAgICBwcm9jZXNzLnN0ZGluLnJlc3VtZSgpO1xuICB9XG5cbiAgd2F0Y2hlci5vbignZXZlbnQnLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgIGNhc2UgJ0VSUk9SJzoge1xuICAgICAgICBoYW5kbGVFcnJvcihldmVudC5lcnJvciwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQlVORExFX1NUQVJUJzoge1xuICAgICAgICBpZiAoYXJndi5zaWxlbnQpIGJyZWFrO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50SW5wdXQgPSBldmVudC5pbnB1dDtcbiAgICAgICAgY29uc3QgaW5wdXRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudElucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlucHV0RmlsZXMucHVzaChldmVudElucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnB1dEZpbGVzLnB1c2goXG4gICAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldmVudElucHV0KSA/IGV2ZW50SW5wdXQgOiBPYmplY3QudmFsdWVzKGV2ZW50SW5wdXQgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgY2hhbGsuY3lhbihcbiAgICAgICAgICAgIGBCdW5kbGVzICR7Y2hhbGsuYm9sZChwYXRoVG9SZWxhdGl2ZVBhdGgoaW5wdXRGaWxlcykuam9pbignLCAnKSl9IOKGkiAke2NoYWxrLmJvbGQoXG4gICAgICAgICAgICAgIHBhdGhUb1JlbGF0aXZlUGF0aChldmVudC5vdXRwdXQpLmpvaW4oJywgJylcbiAgICAgICAgICAgICl9XFxub24gJHtwYWNrYWdlRGlyUGF0aH0gLi4uYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdCVU5ETEVfRU5EJzoge1xuICAgICAgICBpZiAoYXJndi5zaWxlbnQpIGJyZWFrO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICBjaGFsay5ncmVlbihcbiAgICAgICAgICAgIGBDcmVhdGVkICR7Y2hhbGsuYm9sZChwYXRoVG9SZWxhdGl2ZVBhdGgoZXZlbnQub3V0cHV0KS5qb2luKCcsICcpKX0gaW4gJHtjaGFsay5ib2xkKG1zKGV2ZW50LmR1cmF0aW9uKSl9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGFyZ2V0RGV0YWlsICE9PSAnYXBwLW5vZGUnICYmIHRhcmdldERldGFpbCAhPT0gJ2Z1bmN0aW9ucycpIHtcbiAgICAgICAgICBhd2FpdCBnZW5lcmF0ZURlY2xhcmF0aW9uRmlsZXMoYXJndiwgcGFja2FnZURpclBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRU5EJzoge1xuICAgICAgICBpZiAoYXJndi5zaWxlbnQpIGJyZWFrO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuWyR7ZGF0ZVRpbWUoKX1dIHdhaXRpbmcgZm9yIGNoYW5nZXMuLi5gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCdyZXN1bHQnIGluIGV2ZW50ICYmIGV2ZW50LnJlc3VsdCkge1xuICAgICAgdm9pZCBldmVudC5yZXN1bHQuY2xvc2UoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlJbnB1dChhcmd2OiBBcmd1bWVudHNUeXBlPHR5cGVvZiBidWlsZGVyPiwgY3dkOiBzdHJpbmcsIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGlmIChhcmd2LmlucHV0ICYmIGFyZ3YuaW5wdXQubGVuZ3RoID4gMCkgcmV0dXJuIGFyZ3YuaW5wdXQubWFwKChwKSA9PiBwYXRoLnJlc29sdmUoY3dkLCBwLnRvU3RyaW5nKCkpKTtcblxuICBjb25zdCBzcmNEaXJQYXRoID0gcGF0aC5qb2luKHBhY2thZ2VEaXJQYXRoLCAnc3JjJyk7XG4gIGZvciAoY29uc3QgZXh0IG9mIFsndHMnLCAndHN4JywgJ2N0cycsICdtdHMnXSkge1xuICAgIGNvbnN0IGlucHV0ID0gcGF0aC5qb2luKHNyY0RpclBhdGgsIGBpbmRleC4ke2V4dH1gKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhpbnB1dCkpIHJldHVybiBbaW5wdXRdO1xuICB9XG5cbiAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRldGVjdCBpbnB1dCBmaWxlLicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFRhcmdldERldGFpbCh0YXJnZXRDYXRlZ29yeTogc3RyaW5nLCBpbnB1dHM6IHN0cmluZ1tdLCBwYWNrYWdlRGlyUGF0aDogc3RyaW5nKTogVGFyZ2V0RGV0YWlsIHtcbiAgc3dpdGNoICh0YXJnZXRDYXRlZ29yeSkge1xuICAgIGNhc2UgJ2FwcCc6IHtcbiAgICAgIHJldHVybiAnYXBwLW5vZGUnO1xuICAgIH1cbiAgICBjYXNlICdmdW5jdGlvbnMnOiB7XG4gICAgICByZXR1cm4gJ2Z1bmN0aW9ucyc7XG4gICAgfVxuICAgIGNhc2UgJ2xpYic6IHtcbiAgICAgIGlmIChpbnB1dHMuc29tZSgoaW5wdXQpID0+IGlucHV0LmVuZHNXaXRoKCcudHN4JykpIHx8IGRvZXNTcmNDb250YWluVHN4KHBhY2thZ2VEaXJQYXRoKSkge1xuICAgICAgICByZXR1cm4gJ2xpYi1yZWFjdCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ2xpYic7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3RhcmdldCBvcHRpb24gbXVzdCBiZSBvbmUgb2Y6ICcgKyBhbGxUYXJnZXRDYXRlZ29yaWVzLmpvaW4oJywgJykpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkb2VzU3JjQ29udGFpblRzeChwYWNrYWdlRGlyUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNyY0RpclBhdGggPSBwYXRoLmpvaW4ocGFja2FnZURpclBhdGgsICdzcmMnKTtcbiAgcmV0dXJuIGRvZXNEaXJlY3RvcnlDb250YWluVHN4KHNyY0RpclBhdGgpO1xufVxuXG5mdW5jdGlvbiBkb2VzRGlyZWN0b3J5Q29udGFpblRzeChkaXJQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyaWVzID0gZnMucmVhZGRpclN5bmMoZGlyUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIHJldHVybiBlbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBlbnRyeVBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZW50cnkubmFtZSk7XG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIGRvZXNEaXJlY3RvcnlDb250YWluVHN4KGVudHJ5UGF0aCk7XG4gICAgICByZXR1cm4gZW50cnkuaXNGaWxlKCkgJiYgZW50cnkubmFtZS5lbmRzV2l0aCgnLnRzeCcpO1xuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQYWNrYWdlSnNvbkZvckZ1bmN0aW9ucyhcbiAgcGFja2FnZURpclBhdGg6IHN0cmluZyxcbiAgcGFja2FnZUpzb246IFBhY2thZ2VKc29uLFxuICBtb2R1bGVUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFByb21pc2U8dm9pZD4ge1xuICBwYWNrYWdlSnNvbi5uYW1lICs9ICctZGlzdCc7XG4gIGNvbnN0IGVzbVBhY2thZ2UgPSBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJztcbiAgY29uc3QgZXNtT3V0cHV0ID0gaXNFc21PdXRwdXQoZXNtUGFja2FnZSwgbW9kdWxlVHlwZSk7XG4gIHBhY2thZ2VKc29uLm1haW4gPSBlc21QYWNrYWdlID09PSBlc21PdXRwdXQgPyAnaW5kZXguanMnIDogZXNtT3V0cHV0ID8gJ2luZGV4Lm1qcycgOiAnaW5kZXguY2pzJztcblxuICAvLyBQcmV2ZW50IEZpcmViYXNlIEZ1bmN0aW9ucyBmcm9tIHJ1bm5pbmcgYGJ1aWxkYCBzY3JpcHQgc2luY2Ugd2UgYXJlIGJ1aWxkaW5nIGNvZGUgYmVmb3JlIGRlcGxveWluZy5cbiAgZGVsZXRlIHBhY2thZ2VKc29uLnNjcmlwdHM7XG4gIC8vIGRldkRlcGVuZGVuY2llcyBhcmUgbm90IHJlcXVpcmVkIHNpbmNlIHdlIGFyZSBidWlsZGluZyBjb2RlIGJlZm9yZSBkZXBsb3lpbmcuXG4gIGRlbGV0ZSBwYWNrYWdlSnNvbi5kZXZEZXBlbmRlbmNpZXM7XG5cbiAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIocGF0aC5qb2luKHBhY2thZ2VEaXJQYXRoLCAnZGlzdCcpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ2Rpc3QnLCAncGFja2FnZS5qc29uJyksIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VKc29uKSk7XG59XG5cbmZ1bmN0aW9uIGdldE91dHB1dE9wdGlvbnNMaXN0KFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPixcbiAgdGFyZ2V0RGV0YWlsOiBUYXJnZXREZXRhaWwsXG4gIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcsXG4gIGlzRXNtUGFja2FnZTogYm9vbGVhblxuKTogT3V0cHV0T3B0aW9uc1tdIHtcbiAgY29uc3Qgb3V0RGlyUGF0aCA9IHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ2Rpc3QnKTtcbiAgaWYgKHRhcmdldERldGFpbCA9PT0gJ2FwcC1ub2RlJyB8fCB0YXJnZXREZXRhaWwgPT09ICdmdW5jdGlvbnMnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGlyOiBvdXREaXJQYXRoLFxuICAgICAgICBmb3JtYXQ6IGlzRXNtT3V0cHV0KGlzRXNtUGFja2FnZSwgYXJndi5tb2R1bGVUeXBlKSA/ICdtb2R1bGUnIDogJ2NvbW1vbmpzJyxcbiAgICAgICAgc291cmNlbWFwOiBhcmd2LnNvdXJjZW1hcCAmJiAnaW5saW5lJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8vIFRoZSBmb2xsb3dpbmcgaW1wb3J0IHN0YXRlbWVudCBpbiBhbiBlc20gbW9kdWxlIGNhdXNlcyB0aGUgZm9sbG93aW5nIGVycm9yOlxuICAvLyBTdGF0ZW1lbnQ6XG4gIC8vICAgaW1wb3J0IHsgdXNlUHJldmlvdXMgfSBmcm9tICdyZWFjdC11c2UnO1xuICAvLyBFcnJvcjpcbiAgLy8gICBOYW1lZCBleHBvcnQgJ3VzZVByZXZpb3VzJyBub3QgZm91bmQuIFRoZSByZXF1ZXN0ZWQgbW9kdWxlICdyZWFjdC11c2UnIGlzIGEgQ29tbW9uSlMgbW9kdWxlLFxuICAvLyAgIHdoaWNoIG1heSBub3Qgc3VwcG9ydCBhbGwgbW9kdWxlLmV4cG9ydHMgYXMgbmFtZWQgZXhwb3J0cy5cbiAgLy8gV2UgbmVlZCBjanMgbW9kdWxlcyBmb3Igd2ViIGFwcHMgdG8gYXZvaWQgdGhlIGVycm9yLlxuICAvLyBBbHNvLCBzcGxpdHRpbmcgYSBsaWJyYXJ5IGlzIHVzZWZ1bCBpbiBib3RoIG1vZHVsZXMsIHNvIHByZXNlcnZlTW9kdWxlcyBzaG91bGQgYmUgdHJ1ZS5cbiAgY29uc3Qgb3V0cHV0T3B0aW9uc0xpc3Q6IE91dHB1dE9wdGlvbnNbXSA9IFtdO1xuICBjb25zdCBtb2R1bGVUeXBlID0gYXJndi5tb2R1bGVUeXBlIHx8ICdib3RoJztcbiAgY29uc3QganNFeHQgPSBhcmd2LmpzRXh0ZW5zaW9uIHx8ICdlaXRoZXInO1xuICBpZiAobW9kdWxlVHlwZSA9PT0gJ2NqcycgfHwgbW9kdWxlVHlwZSA9PT0gJ2JvdGgnIHx8IChtb2R1bGVUeXBlID09PSAnZWl0aGVyJyAmJiAhaXNFc21QYWNrYWdlKSkge1xuICAgIG91dHB1dE9wdGlvbnNMaXN0LnB1c2goe1xuICAgICAgZGlyOiBvdXREaXJQYXRoLFxuICAgICAgZW50cnlGaWxlTmFtZXM6IGpzRXh0ID09PSAnYm90aCcgfHwgKGpzRXh0ID09PSAnZWl0aGVyJyAmJiAhaXNFc21QYWNrYWdlKSA/ICdbbmFtZV0uanMnIDogJ1tuYW1lXS5janMnLFxuICAgICAgZm9ybWF0OiAnY29tbW9uanMnLFxuICAgICAgcHJlc2VydmVNb2R1bGVzOiB0cnVlLFxuICAgICAgcHJlc2VydmVNb2R1bGVzUm9vdDogcGF0aC5qb2luKHBhY2thZ2VEaXJQYXRoLCAnc3JjJyksXG4gICAgICBzb3VyY2VtYXA6IGFyZ3Yuc291cmNlbWFwLFxuICAgIH0pO1xuICB9XG4gIGlmIChtb2R1bGVUeXBlID09PSAnZXNtJyB8fCBtb2R1bGVUeXBlID09PSAnYm90aCcgfHwgKG1vZHVsZVR5cGUgPT09ICdlaXRoZXInICYmIGlzRXNtUGFja2FnZSkpIHtcbiAgICBvdXRwdXRPcHRpb25zTGlzdC5wdXNoKHtcbiAgICAgIGRpcjogb3V0RGlyUGF0aCxcbiAgICAgIGVudHJ5RmlsZU5hbWVzOiBqc0V4dCA9PT0gJ2JvdGgnIHx8IChqc0V4dCA9PT0gJ2VpdGhlcicgJiYgaXNFc21QYWNrYWdlKSA/ICdbbmFtZV0uanMnIDogJ1tuYW1lXS5tanMnLFxuICAgICAgZm9ybWF0OiAnbW9kdWxlJyxcbiAgICAgIHByZXNlcnZlTW9kdWxlczogdHJ1ZSxcbiAgICAgIHByZXNlcnZlTW9kdWxlc1Jvb3Q6IHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ3NyYycpLFxuICAgICAgc291cmNlbWFwOiBhcmd2LnNvdXJjZW1hcCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb3V0cHV0T3B0aW9uc0xpc3Q7XG59XG5cbmZ1bmN0aW9uIGlzRXNtT3V0cHV0KGlzRXNtUGFja2FnZTogYm9vbGVhbiwgbW9kdWxlVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBtb2R1bGVUeXBlID09PSAnZXNtJyB8fCAoKCFtb2R1bGVUeXBlIHx8IG1vZHVsZVR5cGUgPT09ICdlaXRoZXInKSAmJiBpc0VzbVBhY2thZ2UpO1xufVxuIiwiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB0eXBlIHsgUm9sbHVwRXJyb3IgfSBmcm9tICdyb2xsdXAnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyb3I6IFJvbGx1cEVycm9yLCByZWNvdmVyID0gZmFsc2UpOiB2b2lkIHtcbiAgY29uc3QgbmFtZSA9IGVycm9yLm5hbWUgfHwgKGVycm9yLmNhdXNlIGFzIEVycm9yKT8ubmFtZTtcbiAgY29uc3QgbmFtZVNlY3Rpb24gPSBuYW1lID8gYCR7bmFtZX06IGAgOiAnJztcbiAgY29uc3QgcGx1Z2luU2VjdGlvbiA9IGVycm9yLnBsdWdpbiA/IGAocGx1Z2luICR7ZXJyb3IucGx1Z2lufSkgYCA6ICcnO1xuICBjb25zdCBtZXNzYWdlID0gYCR7cGx1Z2luU2VjdGlvbn0ke25hbWVTZWN0aW9ufSR7ZXJyb3IubWVzc2FnZX1gO1xuXG4gIGNvbnN0IG91dHB1dExpbmVzID0gW2NoYWxrLmJvbGQoY2hhbGsucmVkKGBbIV0gJHtjaGFsay5ib2xkKG1lc3NhZ2UudG9TdHJpbmcoKSl9YCkpXTtcblxuICBpZiAoZXJyb3IudXJsKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChjaGFsay5jeWFuKGVycm9yLnVybCkpO1xuICB9XG5cbiAgaWYgKGVycm9yLmxvYykge1xuICAgIG91dHB1dExpbmVzLnB1c2goYCR7ZXJyb3IubG9jLmZpbGUgfHwgZXJyb3IuaWR9ICgke2Vycm9yLmxvYy5saW5lfToke2Vycm9yLmxvYy5jb2x1bW59KWApO1xuICB9IGVsc2UgaWYgKGVycm9yLmlkKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChlcnJvci5pZCk7XG4gIH1cblxuICBpZiAoZXJyb3IuZnJhbWUpIHtcbiAgICBvdXRwdXRMaW5lcy5wdXNoKGNoYWxrLmRpbShlcnJvci5mcmFtZSkpO1xuICB9XG5cbiAgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChjaGFsay5kaW0oZXJyb3Iuc3RhY2s/LnJlcGxhY2UoYCR7bmFtZVNlY3Rpb259JHtlcnJvci5tZXNzYWdlfVxcbmAsICcnKSkpO1xuICB9XG5cbiAgb3V0cHV0TGluZXMucHVzaCgnJywgJycpO1xuICBjb25zb2xlLmVycm9yKG91dHB1dExpbmVzLmpvaW4oJ1xcbicpKTtcblxuICBpZiAoIXJlY292ZXIpIHByb2Nlc3MuZXhpdCgxKTtcbn1cbiIsImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBDb21tYW5kTW9kdWxlLCBJbmZlcnJlZE9wdGlvblR5cGVzIH0gZnJvbSAneWFyZ3MnO1xuXG5pbXBvcnQgeyBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUgfSBmcm9tICcuLi9lbnYuanMnO1xuaW1wb3J0IHsgc2hhcmVkT3B0aW9uc0J1aWxkZXIgfSBmcm9tICcuLi9zaGFyZWRPcHRpb25zQnVpbGRlci5qcyc7XG5cbmNvbnN0IGJ1aWxkZXIgPSB7XG4gIC4uLnNoYXJlZE9wdGlvbnNCdWlsZGVyLFxuICBtb2R1bGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0EgbW9kdWxlIHR5cGU6IGNqcyBvciBlc20nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAnbScsXG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHdhdGNoIG1vZGUgaXMgZW5hYmxlZCBvciBub3QnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBhbGlhczogJ3cnLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IHJ1bjogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBJbmZlcnJlZE9wdGlvblR5cGVzPHR5cGVvZiBidWlsZGVyPj4gPSB7XG4gIGNvbW1hbmQ6ICdydW4gPGZpbGU+JyxcbiAgZGVzY3JpYmU6ICdSdW4gc2NyaXB0JyxcbiAgYnVpbGRlcixcbiAgaGFuZGxlcihhcmd2KSB7XG4gICAgbG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlKGFyZ3YsIHByb2Nlc3MuY3dkKCkpO1xuXG4gICAgY29uc3QgZmlsZSA9IGFyZ3YuZmlsZT8udG9TdHJpbmcoKSA/PyAnJztcblxuICAgIC8vIGNmLiBodHRwczovL2J1bi5zaC9ndWlkZXMvdXRpbC9kZXRlY3QtYnVuXG4gICAgY29uc3QgaXNSdW5uaW5nT25CdW4gPSBwcm9jZXNzLnZlcnNpb25zLmJ1bjtcbiAgICBjb25zdCBydW50aW1lID0gaXNSdW5uaW5nT25CdW4gPyAnYnVuJyA6ICdub2RlJztcbiAgICBjb25zdCBhcmdzID0gaXNSdW5uaW5nT25CdW4gPyBbJy0tYnVuJ10gOiBbJy0tbm8td2FybmluZ3MnLCAnLS1pbXBvcnQnLCAndHN4J107XG4gICAgaWYgKGFyZ3Yud2F0Y2gpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS13YXRjaCcpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goZmlsZSk7XG4gICAgY29uc3QgWywgLi4uYWRkaXRpb25hbEFyZ3VtZW50c10gPSBhcmd2Ll87XG4gICAgY29uc3QgcnVudGltZUFyZ3MgPSBbLi4uYXJncywgLi4uYWRkaXRpb25hbEFyZ3VtZW50cy5tYXAoKGFyZykgPT4gYXJnLnRvU3RyaW5nKCkpXTtcbiAgICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmluZm8oYFJ1bm5pbmcgJyR7cnVudGltZX0gJHtydW50aW1lQXJncy5qb2luKCcgJyl9J2ApO1xuICAgIH1cbiAgICBjb25zdCByZXQgPSBjaGlsZF9wcm9jZXNzLnNwYXduU3luYyhydW50aW1lLCBydW50aW1lQXJncywge1xuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiB9LFxuICAgIH0pO1xuICAgIHByb2Nlc3MuZXhpdChyZXQuc3RhdHVzID8/IDEpO1xuICB9LFxufTtcbiIsImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IHJlbW92ZU5wbUFuZFlhcm5FbnZpcm9ubWVudFZhcmlhYmxlcyB9IGZyb20gJ0B3aWxsYm9vc3Rlci9zaGFyZWQtbGliLW5vZGUnO1xuaW1wb3J0IHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IGhpZGVCaW4gfSBmcm9tICd5YXJncy9oZWxwZXJzJztcblxuaW1wb3J0IHsgYXBwLCBmdW5jdGlvbnMsIGxpYiB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGQuanMnO1xuaW1wb3J0IHsgcnVuIH0gZnJvbSAnLi9jb21tYW5kcy9ydW4uanMnO1xuaW1wb3J0IHsgc2hhcmVkT3B0aW9uc0J1aWxkZXIgfSBmcm9tICcuL3NoYXJlZE9wdGlvbnNCdWlsZGVyLmpzJztcblxucmVtb3ZlTnBtQW5kWWFybkVudmlyb25tZW50VmFyaWFibGVzKHByb2Nlc3MuZW52KTtcblxuYXdhaXQgeWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuc2NyaXB0TmFtZSgnYnVpbGQtdHMnKVxuICAub3B0aW9ucyhzaGFyZWRPcHRpb25zQnVpbGRlcilcbiAgLmNvbW1hbmQoYXBwKVxuICAuY29tbWFuZChmdW5jdGlvbnMpXG4gIC5jb21tYW5kKGxpYilcbiAgLmNvbW1hbmQocnVuKVxuICAuZGVtYW5kQ29tbWFuZCgpXG4gIC5zdHJpY3QoKVxuICAudmVyc2lvbihnZXRWZXJzaW9uKCkpXG4gIC5oZWxwKCkuYXJndjtcblxuZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICBsZXQgcGFja2FnZUpzb25EaXIgPSBwYXRoLmRpcm5hbWUobmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lKTtcbiAgd2hpbGUgKCFmcy5leGlzdHNTeW5jKHBhdGguam9pbihwYWNrYWdlSnNvbkRpciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgIHBhY2thZ2VKc29uRGlyID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uRGlyKTtcbiAgfVxuICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihwYWNrYWdlSnNvbkRpciwgJ3BhY2thZ2UuanNvbicpLCAndXRmOCcpKSBhcyB7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICB9O1xuICByZXR1cm4gcGFja2FnZUpzb24udmVyc2lvbjtcbn1cbiJdLCJuYW1lcyI6WyJlbnZWYXJzIiwibG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlIiwiYXJndiIsImN3ZCIsInJlYWRBbmRBcHBseUVudmlyb25tZW50VmFyaWFibGVzIiwidmVyYm9zZSIsImNvbnNvbGUiLCJpbmZvIiwiT2JqZWN0Iiwia2V5cyIsImNyZWF0ZUVudmlyb25tZW50VmFyaWFibGVzRGVmaW5pdGlvbiIsImVudlZhcnNEZWYiLCJlbnZWYXJOYW1lcyIsIlNldCIsImlubGluZSIsImZsYXRNYXAiLCJlIiwidG9TdHJpbmciLCJzcGxpdCIsImF1dG9JbmxpbmUiLCJuYW1lIiwidW5kZWZpbmVkIiwicHJvY2VzcyIsImVudiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhbGxUYXJnZXRDYXRlZ29yaWVzIiwiYXN5bmMiLCJyZWFkUGFja2FnZUpzb24iLCJkaXJQYXRoIiwicGFja2FnZUpzb25QYXRoIiwicGF0aCIsImpvaW4iLCJwYWNrYWdlSnNvblRleHQiLCJmcyIsInByb21pc2VzIiwicmVhZEZpbGUiLCJwYXJzZSIsInNoYXJlZE9wdGlvbnNCdWlsZGVyIiwieWFyZ3NPcHRpb25zQnVpbGRlckZvckVudiIsInNpbGVudCIsImRlc2NyaXB0aW9uIiwidHlwZSIsImFsaWFzIiwiYnVpbGRlciIsImlucHV0IiwiZGVmYXVsdCIsIm1pbmlmeSIsInNvdXJjZW1hcCIsImV4dGVybmFsIiwid2F0Y2giLCJrZWVwSW1wb3J0IiwiYnVuZGxlQnVpbHRpbnMiLCJhcHBCdWlsZGVyIiwibW9kdWxlVHlwZSIsImZ1bmN0aW9uc0J1aWxkZXIiLCJvbmx5UGFja2FnZUpzb24iLCJsaWJCdWlsZGVyIiwianNFeHRlbnNpb24iLCJzZXR1cFBsdWdpbnMiLCJ0YXJnZXREZXRhaWwiLCJwYWNrYWdlSnNvbiIsIm5hbWVzcGFjZSIsInBhY2thZ2VEaXJQYXRoIiwib3V0cHV0T3B0aW9uc0xpc3QiLCJleHRlcm5hbERlcHMiLCJtYXAiLCJpdGVtIiwiZGVwZW5kZW5jaWVzIiwicHVzaCIsInBlZXJEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsImV4aXN0c1N5bmMiLCJwYWNrYWdlRGlycyIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsInBhY2thZ2VEaXIiLCJpc0RpcmVjdG9yeSIsIm90aGVyUGFja2FnZUpzb24iLCJyZWFkRmlsZVN5bmMiLCJleHRlbnNpb25zIiwiYmFiZWxDb25maWdQYXRoIiwidXJsIiwiZmlsZVVSTFRvUGF0aCIsImRpcm5hbWUiLCJyZXBsYWNlUGx1Z2luIiwiZ2V0RGVmYXVsdFBsdWdpbkZhY3RvcnkiLCJyZXBsYWNlIiwianNvblBsdWdpbiIsImpzb24iLCJyZXNvbHZlUGx1Z2luIiwicmVzb2x2ZSIsImNvbW1vbmpzUGx1Z2luIiwiY29tbW9uanMiLCJ0ZXJzZXJQbHVnaW4iLCJ0ZXJzZXIiLCJhbmFseXplUGx1Z2luIiwiYW5hbHl6ZSIsInBsdWdpbnMiLCJkZWxpbWl0ZXJzIiwicHJldmVudEFzc2lnbm1lbnQiLCJ2YWx1ZXMiLCJub2RlRXh0ZXJuYWxzIiwiZGVwcyIsImRldkRlcHMiLCJwZWVyRGVwcyIsIm9wdERlcHMiLCJpbmNsdWRlIiwiUmVnRXhwIiwiZXhjbHVkZSIsInNob3VsZEJ1bmRsZVNhbWVOYW1lc3BhY2VEZXBlbmRlbmNpZXMiLCJwcmVmZXJCdWlsdGlucyIsImlkIiwiaW5jbHVkZXMiLCJtb2R1bGVOYW1lcyIsImlzQmFiZWxIZWxwZXJzQnVuZGxlZCIsIkJVSUxEVFNfVVNFX0JBQkxFX1JVTlRJTUUiLCJiYWJlbCIsImNvbmZpZ0ZpbGUiLCJiYWJlbEhlbHBlcnMiLCJzb21lIiwib3B0cyIsInByZXNlcnZlTW9kdWxlcyIsInByZXNlcnZlRGlyZWN0aXZlcyIsInN0cmluZyIsImNvbXByZXNzIiwiZGlyZWN0aXZlcyIsInN1bW1hcnlPbmx5IiwibW9kdWxlIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJnZW5lcmF0ZURlY2xhcmF0aW9uRmlsZXMiLCJjb3JlUHJvamVjdERpclBhdGgiLCJjb3JlQ29uZmlnRmlsZSIsImZpbmRDb25maWdGaWxlIiwiRXJyb3IiLCJwcm9qZWN0cyIsIm91dERpciIsImJhc2VuYW1lIiwicGFyZW50RGlyUGF0aCIsImRpcmVudHMiLCJyZWFkZGlyIiwiZGlyZW50IiwicHJvamVjdERpclBhdGgiLCJhbGxTdWNjZWVkZWQiLCJydW5UeXBlU2NyaXB0TmF0aXZlIiwiY29uZmlnRmlsZURpclBhdGgiLCJ0ZW1wQ29uZmlnRmlsZSIsInBpZCIsIkRhdGUiLCJub3ciLCJ3cml0ZUZpbGUiLCJjb21waWxlck9wdGlvbnMiLCJkZWNsYXJhdGlvbiIsImVtaXREZWNsYXJhdGlvbk9ubHkiLCJub0VtaXQiLCJub0VtaXRPbkVycm9yIiwicm9vdERpciIsInVzZXNOb2RlUHJvdG9jb2xJbXBvcnQiLCJ0eXBlcyIsInR5cGVSb290c0RpclBhdGgiLCJmaWx0ZXIiLCJjb2xsZWN0VHlwZVBhY2thZ2VzIiwiZXh0ZW5kcyIsInRvUmVsYXRpdmVDb25maWdQYXRoIiwiY3JlYXRlVHlwZVNjcmlwdE5hdGl2ZUNvbmZpZyIsInJldCIsImNoaWxkX3Byb2Nlc3MiLCJzcGF3blN5bmMiLCJleGVjUGF0aCIsImdldFR5cGVTY3JpcHROYXRpdmVQYXRoIiwic3RkaW8iLCJlcnJvciIsInN0YXR1cyIsInJtIiwiZm9yY2UiLCJjdXJyZW50RGlyUGF0aCIsImNoaWxkUGF0aCIsInRlc3QiLCJmcm9tRGlyUGF0aCIsInRvRmlsZVBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJyZWxhdGl2ZSIsInJlcGxhY2VBbGwiLCJzZXAiLCJzdGFydHNXaXRoIiwiYXBwIiwiY29tbWFuZCIsImRlc2NyaWJlIiwiaGFuZGxlciIsImJ1aWxkIiwiZnVuY3Rpb25zIiwicGFja2FnZSIsImV4aXQiLCJnZW5lcmF0ZVBhY2thZ2VKc29uRm9yRnVuY3Rpb25zIiwibGliIiwidGFyZ2V0Q2F0ZWdvcnkiLCJOT0RFX0VOViIsImlucHV0cyIsImxlbmd0aCIsInAiLCJzcmNEaXJQYXRoIiwiZXh0IiwidmVyaWZ5SW5wdXQiLCJlbmRzV2l0aCIsImRvZXNEaXJlY3RvcnlDb250YWluVHN4IiwiZG9lc1NyY0NvbnRhaW5Uc3giLCJkZXRlY3RUYXJnZXREZXRhaWwiLCJwYWNrYWdlTmFtZSIsIm1hdGNoIiwiZXhlYyIsImdldE5hbWVzcGFjZUFuZE5hbWUiLCJpc0VzbVBhY2thZ2UiLCJCVUlMRF9UU19DT1JFSlMiLCJCVUlMRF9UU19DT1JFSlNfV0lUSF9QUk9QT1NBTFMiLCJCVUlMRF9UU19WRVJCT1NFIiwiQlVJTERfVFNfVEFSR0VUX0NBVEVHT1JZIiwiQlVJTERfVFNfVEFSR0VUX0RFVEFJTCIsIm91dERpclBhdGgiLCJkaXIiLCJmb3JtYXQiLCJpc0VzbU91dHB1dCIsImpzRXh0IiwiZW50cnlGaWxlTmFtZXMiLCJwcmVzZXJ2ZU1vZHVsZXNSb290IiwiZ2V0T3V0cHV0T3B0aW9uc0xpc3QiLCJjaGRpciIsInJlY3Vyc2l2ZSIsIm9wdGlvbnMiLCJmcm9tRW50cmllcyIsImluZGV4IiwiZXh0bmFtZSIsImNsZWFyU2NyZWVuIiwicGF0aFRvUmVsYXRpdmVQYXRoIiwicGF0aHMiLCJBcnJheSIsImlzQXJyYXkiLCJ3YXRjaGVyIiwib3V0cHV0IiwiY2xvc2UiLCJyZW1vdmVMaXN0ZW5lciIsInN0ZGluIiwiY29kZSIsIm9uRXhpdCIsIm9uIiwiaXNUVFkiLCJyZXN1bWUiLCJldmVudCIsInJlY292ZXIiLCJjYXVzZSIsIm5hbWVTZWN0aW9uIiwibWVzc2FnZSIsInBsdWdpbiIsIm91dHB1dExpbmVzIiwiY2hhbGsiLCJib2xkIiwicmVkIiwiY3lhbiIsImxvYyIsImZpbGUiLCJsaW5lIiwiY29sdW1uIiwiZnJhbWUiLCJkaW0iLCJzdGFjayIsImhhbmRsZUVycm9yIiwiZXZlbnRJbnB1dCIsImlucHV0RmlsZXMiLCJncmVlbiIsIm1zIiwiZHVyYXRpb24iLCJkYXRlVGltZSIsInJlc3VsdCIsIndhdGNoUm9sbHVwIiwiYnVuZGxlIiwiYnVpbGRGYWlsZWQiLCJzdGFydFRpbWUiLCJfYnVuZGxlIiwicm9sbHVwIiwiUHJvbWlzZSIsImFsbCIsIndyaXRlIiwiZW50cnkiLCJlbnRyeVBhdGgiLCJpc0ZpbGUiLCJlc21QYWNrYWdlIiwiZXNtT3V0cHV0IiwibWFpbiIsInNjcmlwdHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJta2RpciIsInJ1biIsImlzUnVubmluZ09uQnVuIiwidmVyc2lvbnMiLCJidW4iLCJydW50aW1lIiwiYXJncyIsImFkZGl0aW9uYWxBcmd1bWVudHMiLCJfIiwicnVudGltZUFyZ3MiLCJhcmciLCJyZW1vdmVOcG1BbmRZYXJuRW52aXJvbm1lbnRWYXJpYWJsZXMiLCJ5YXJncyIsImhpZGVCaW4iLCJzY3JpcHROYW1lIiwiZGVtYW5kQ29tbWFuZCIsInN0cmljdCIsInZlcnNpb24iLCJwYWNrYWdlSnNvbkRpciIsIlVSTCIsInBhdGhuYW1lIiwiZ2V0VmVyc2lvbiIsImhlbHAiXSwibWFwcGluZ3MiOiIwaENBTUEsSUFBSUEsRUFLRyxTQUFTQyxFQUNkQyxFQUNBQyxHQVFBLE9BTktILElBQ0hBLEVBQVVJLEVBQWlDRixFQUFNQyxHQUM3Q0QsRUFBS0csU0FDUEMsUUFBUUMsS0FBSyxtQkFBb0JDLE9BQU9DLEtBQUtULEtBRzFDQSxDQUNULENBS08sU0FBU1UsRUFDZFIsRUFDQUMsR0FFQSxNQUFNUSxFQUFxQyxDQUFBLEVBQ3JDQyxFQUFjLElBQUlDLElBQUksS0FDdEJYLEVBQUtZLFFBQVUsSUFBSUMsUUFBU0MsR0FBTUEsRUFBRUMsV0FBV0MsTUFBTSxTQUNyRGhCLEVBQUtpQixXQUFhWCxPQUFPQyxLQUFLUixFQUFrQ0MsRUFBTUMsSUFBUSxLQUVwRixJQUFLLE1BQU1pQixLQUFRUixPQUNTUyxJQUF0QkMsUUFBUUMsSUFBSUgsS0FFaEJULEVBQVcsZUFBZVMsS0FBVUksS0FBS0MsVUFBVUgsUUFBUUMsSUFBSUgsS0FLakUsT0FISWxCLEVBQUtHLFNBQ1BDLFFBQVFDLEtBQUssbUJBQW9CQyxPQUFPQyxLQUFLRSxJQUV4Q0EsQ0FDVCxDQzNDTyxNQUFNZSxFQUFzQixDQUFDLE1BQU8sWUFBYSxPQ0lqREMsZUFBZUMsRUFBZ0JDLEdBQ3BDLE1BQU1DLEVBQWtCQyxFQUFLQyxLQUFLSCxFQUFTLGdCQUMzQyxJQUNFLE1BQU1JLFFBQXdCQyxFQUFHQyxTQUFTQyxT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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "build-ts",
|
|
3
|
-
"version": "17.1.
|
|
3
|
+
"version": "17.1.6",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"author": "WillBooster Inc.",
|
|
6
6
|
"repository": {
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"rollup": "4.60.1",
|
|
59
59
|
"rollup-plugin-analyzer": "4.0.0",
|
|
60
60
|
"rollup-plugin-keep-import": "1.0.3",
|
|
61
|
-
"rollup-plugin-node-externals": "
|
|
61
|
+
"rollup-plugin-node-externals": "9.0.0",
|
|
62
62
|
"rollup-plugin-preserve-directives": "0.4.0",
|
|
63
63
|
"rollup-plugin-string": "3.0.0",
|
|
64
64
|
"signal-exit": "4.1.0",
|