// vite.config.ts import replace from "file:///home/johan/Projets/mon-entreprise/node_modules/@rollup/plugin-replace/dist/rollup-plugin-replace.cjs.js"; import yaml from "file:///home/johan/Projets/mon-entreprise/node_modules/@rollup/plugin-yaml/dist/index.js"; import legacy from "file:///home/johan/Projets/mon-entreprise/node_modules/@vitejs/plugin-legacy/dist/index.mjs"; import react from "file:///home/johan/Projets/mon-entreprise/node_modules/@vitejs/plugin-react/dist/index.mjs"; import fs from "fs/promises"; import path from "path"; import serveStatic from "file:///home/johan/Projets/mon-entreprise/node_modules/serve-static/index.js"; import { defineConfig, loadEnv } from "file:///home/johan/Projets/mon-entreprise/node_modules/vite/dist/node/index.js"; import { VitePWA } from "file:///home/johan/Projets/mon-entreprise/node_modules/vite-plugin-pwa/dist/index.mjs"; // scripts/runScriptOnFileChange/execOnFileChange.ts import { getPackageDeps } from "file:///home/johan/Projets/mon-entreprise/node_modules/@rushstack/package-deps-hash/lib/index.js"; import { exec as originalExec } from "child_process"; import { existsSync, lstatSync, readFileSync, writeFileSync } from "fs"; import { relative, resolve } from "path"; import { promisify } from "util"; var exec = promisify(originalExec); var execOnFileChange = async (config) => { const path2 = resolve(config.basePath, config.depsPath); const deps = Object.fromEntries(getPackageDeps(config.basePath)); const depsEntries = Object.entries(deps); const existingDeps = existsSync(path2) ? JSON.parse(readFileSync(path2, { encoding: "utf8" })) : {}; const existingDepsEntries = Object.entries(existingDeps); const promises = config.options.map(async (cfg) => { let fileChanged = null; const index = cfg.paths.map((val) => { const isDir = lstatSync(resolve(config.basePath, val)).isDirectory(); const isFile = lstatSync(resolve(config.basePath, val)).isFile(); return { isDir, isFile, absolute: resolve(config.basePath, val), relative: relative( resolve(config.basePath), resolve(config.basePath, val) ) }; }).findIndex(({ absolute, relative: relative2, isFile, isDir }) => { if (isFile) { if (deps[relative2] !== existingDeps[relative2]) { fileChanged = relative2; } return deps[relative2] !== existingDeps[relative2]; } else if (isDir) { const index2 = depsEntries.findIndex( ([a, b], i) => { var _a, _b; return (relative2.length ? a.startsWith(relative2 + "/") : true) && (((_a = existingDepsEntries == null ? void 0 : existingDepsEntries[i]) == null ? void 0 : _a[0]) !== a || ((_b = existingDepsEntries == null ? void 0 : existingDepsEntries[i]) == null ? void 0 : _b[1]) !== b); } ); if (index2 > -1) { fileChanged = depsEntries[index2][0]; } return index2 > -1; } throw new Error("Path is not a directory or a file: " + absolute); }); if (index > -1) { const result = await exec(cfg.run); return { path: cfg.paths[index], fileChanged, run: cfg.run, result }; } return null; }); const res = await Promise.all(promises); writeFileSync(path2, JSON.stringify(deps, null, 2)); return res; }; // scripts/runScriptOnFileChange/index.ts var runScriptOnFileChange = async () => { console.log("Search for changed file..."); const results = await execOnFileChange({ basePath: "./", depsPath: ".deps.json", options: [ { paths: [ "./source/pages/Simulateurs/EconomieCollaborative/activit\xE9s.yaml", "./source/pages/Simulateurs/EconomieCollaborative/activit\xE9s.en.yaml" ], run: "yarn build:yaml-to-dts" } ] }); results.filter((x) => !!x).forEach(({ fileChanged, run, result }) => { console.log("Changed file detected:", fileChanged); console.log("Execute:", run, "\n"); if (result.stdout) { console.log(result.stdout); } if (result.stderr) { console.error(result.stderr); } }); }; // vite-pwa-options.ts var pwaOptions = { registerType: "prompt", strategies: "injectManifest", srcDir: "source", filename: "sw.ts", injectManifest: { maximumFileSizeToCacheInBytes: 3e6, manifestTransforms: [ (entries) => { const manifest = entries.filter( (entry) => !/assets\/.*(-legacy|lazy_)/.test(entry.url) && (entry.url.endsWith(".html") ? /(infrance|mon-entreprise)\.html/.test(entry.url) : true) ); return { manifest }; } ] }, includeAssets: ["logo-*.png"], manifest: { start_url: "/", name: "Mon entreprise", short_name: "Mon entreprise", description: "L'assistant officiel du cr\xE9ateur d'entreprise", lang: "fr", orientation: "portrait-primary", display: "minimal-ui", theme_color: "#2975d1", background_color: "#ffffff", icons: [ { src: "/favicon/android-chrome-192x192-shadow.png?v=2.0", sizes: "192x192", type: "image/png" }, { src: "/favicon/android-chrome-512x512-shadow.png?v=2.0", sizes: "512x512", type: "image/png" } ] } }; // vite.config.ts var __vite_injected_original_import_meta_url = "file:///home/johan/Projets/mon-entreprise/site/vite.config.ts"; var env = (mode) => loadEnv(mode, process.cwd(), ""); var vite_config_default = defineConfig(({ command, mode }) => ({ resolve: { alias: { "@": path.resolve("./source") }, extensions: [".js", ".ts", ".jsx", ".tsx", ".json"] }, publicDir: "source/public", build: { sourcemap: true, rollupOptions: { output: { chunkFileNames: (chunkInfo) => { if (chunkInfo.isDynamicEntry) { return "assets/lazy_[name].[hash].js"; } return "assets/[name].[hash].js"; } } } }, define: { BRANCH_NAME: JSON.stringify(getBranch(mode)), IS_DEVELOPMENT: mode === "development", IS_STAGING: mode === "production" && !isProductionBranch(mode), IS_PRODUCTION: mode === "production" && isProductionBranch(mode) }, plugins: [ { name: "run-script-on-file-change", apply: "serve", buildStart() { if (mode === "development") { void runScriptOnFileChange(); } } }, command === "build" && replace({ __SENTRY_DEBUG__: false, preventAssignment: false }), react({ babel: { plugins: [["babel-plugin-styled-components", { pure: true }]] } }), yaml(), multipleSPA({ defaultSite: "mon-entreprise", templatePath: "./source/template.html", sites: { "mon-entreprise": { lang: "fr", entry: "/source/entry-fr.tsx", title: "mon-entreprise.urssaf.fr : L'assistant officiel du cr\xE9ateur d'entreprise", description: "Du statut juridique \xE0 la premi\xE8re embauche, en passant par la simulation des cotisations, vous trouverez ici toutes les ressources pour d\xE9marrer votre activit\xE9.", shareImage: "/source/images/logo-monentreprise.svg", shareImageAlt: "Logo mon-entreprise, site Urssaf" }, infrance: { lang: "en", entry: "/source/entry-en.tsx", title: "My company in France: A step-by-step guide to start a business in France", description: "Find the type of company that suits you and follow the steps to register your company. Discover the French social security system by simulating your hiring costs. Discover the procedures to hire in France and learn the basics of French labour law.", shareImage: "/logo-mycompany-share.png", shareImageAlt: "Logo My company in France by Urssaf" } } }), VitePWA(pwaOptions), legacy({ targets: ["defaults", "not IE 11"] }) ], server: { port: 3e3, hmr: { clientPort: typeof env(mode).HMR_CLIENT_PORT !== "undefined" ? parseInt(env(mode).HMR_CLIENT_PORT) : void 0 }, watch: { ignored: [ "!**/node_modules/publicodes/**", "!**/node_modules/publicodes-react/**" ] }, proxy: { "/api": "http://localhost:3004", "/twemoji": { target: "https://twemoji.maxcdn.com", changeOrigin: true, rewrite: (path2) => path2.replace(/^\/twemoji/, ""), timeout: 3 * 1e3 } } }, optimizeDeps: { entries: ["./source/entry-fr.tsx", "./source/entry-en.tsx"], exclude: ["publicodes-react", "publicodes"], include: ["publicodes > moo", "publicodes > nearley"] }, ssr: { noExternal: [ /react-aria|react-stately|internationalized/, /markdown-to-jsx/, /styled-components|emotion/, /publicodes-react/ ] } })); function multipleSPA(options) { const fillTemplate = async (siteName) => { const siteData = options.sites[siteName]; const template = await fs.readFile(options.templatePath, "utf-8"); const filledTemplate = template.toString().replace(/\{\{(.+)\}\}/g, (_match, p1) => siteData[p1.trim()]); return filledTemplate; }; return { name: "multiple-spa", enforce: "pre", configureServer(vite) { vite.middlewares.use( "/simulateur-iframe-integration.js", serveStatic(new URL("./dist", __vite_injected_original_import_meta_url).pathname, { index: "simulateur-iframe-integration.js" }) ); vite.middlewares.use(async (req, res, next) => { var _a; const url = (_a = req.originalUrl) == null ? void 0 : _a.replace(/^\/%2F/, "/"); const firstLevelDir = url == null ? void 0 : url.slice(1).split("/")[0]; if (url && /\?.*html-proxy/.test(url)) { return next(); } if (url && ["/", "/index.html"].includes(url)) { res.writeHead(302, { Location: "/" + options.defaultSite }).end(); } else if (firstLevelDir && url && Object.keys(options.sites).map((site) => `/${site}.html`).includes(url)) { const siteName = firstLevelDir.replace(".html", ""); const content = await vite.transformIndexHtml( "/" + siteName, await fillTemplate(siteName) ); res.end(content); } else if (firstLevelDir && Object.keys(options.sites).some((name) => firstLevelDir === name)) { const siteName = firstLevelDir; const content = await vite.transformIndexHtml( url, await fillTemplate(siteName) ); res.end(content); } else { next(); } }); }, config(config, { command }) { var _a, _b; if (command === "build" && !((_a = config.build) == null ? void 0 : _a.ssr)) { config.build = { ...config.build, rollupOptions: { ...(_b = config.build) == null ? void 0 : _b.rollupOptions, input: Object.fromEntries( Object.keys(options.sites).map((name) => [ name, `virtual:${name}.html` ]) ) } }; } }, resolveId(id) { const pathname = id.split("/").slice(-1)[0]; if (pathname == null ? void 0 : pathname.startsWith("virtual:")) { return pathname.replace("virtual:", ""); } return null; }, async load(id) { if (Object.keys(options.sites).some((name) => id.endsWith(name + ".html"))) { return await fillTemplate(id.replace(/\.html$/, "")); } } }; } var getBranch = (mode) => { var _a, _b, _c; let branch = (_c = (_b = (_a = env(mode).VITE_GITHUB_REF) == null ? void 0 : _a.split("/")) == null ? void 0 : _b.slice(-1)) == null ? void 0 : _c[0]; if (branch === "merge") { branch = env(mode).VITE_GITHUB_HEAD_REF; } return branch ?? ""; }; var isProductionBranch = (mode) => { return ["master", "next"].includes(getBranch(mode)); }; export { vite_config_default as default, getBranch, isProductionBranch }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAic2NyaXB0cy9ydW5TY3JpcHRPbkZpbGVDaGFuZ2UvZXhlY09uRmlsZUNoYW5nZS50cyIsICJzY3JpcHRzL3J1blNjcmlwdE9uRmlsZUNoYW5nZS9pbmRleC50cyIsICJ2aXRlLXB3YS1vcHRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL2hvbWUvam9oYW4vUHJvamV0cy9tb24tZW50cmVwcmlzZS9zaXRlXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvaG9tZS9qb2hhbi9Qcm9qZXRzL21vbi1lbnRyZXByaXNlL3NpdGUvdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL2hvbWUvam9oYW4vUHJvamV0cy9tb24tZW50cmVwcmlzZS9zaXRlL3ZpdGUuY29uZmlnLnRzXCI7LyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHJlcGxhY2UgZnJvbSAnQHJvbGx1cC9wbHVnaW4tcmVwbGFjZSdcbmltcG9ydCB5YW1sIGZyb20gJ0Byb2xsdXAvcGx1Z2luLXlhbWwnXG5pbXBvcnQgbGVnYWN5IGZyb20gJ0B2aXRlanMvcGx1Z2luLWxlZ2FjeSdcbmltcG9ydCByZWFjdCBmcm9tICdAdml0ZWpzL3BsdWdpbi1yZWFjdCdcbmltcG9ydCBmcyBmcm9tICdmcy9wcm9taXNlcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgc2VydmVTdGF0aWMgZnJvbSAnc2VydmUtc3RhdGljJ1xuaW1wb3J0IHsgUGx1Z2luLCBkZWZpbmVDb25maWcsIGxvYWRFbnYgfSBmcm9tICd2aXRlJ1xuaW1wb3J0IHsgVml0ZVBXQSB9IGZyb20gJ3ZpdGUtcGx1Z2luLXB3YSdcblxuaW1wb3J0IHsgcnVuU2NyaXB0T25GaWxlQ2hhbmdlIH0gZnJvbSAnLi9zY3JpcHRzL3J1blNjcmlwdE9uRmlsZUNoYW5nZSdcbmltcG9ydCB7IHB3YU9wdGlvbnMgfSBmcm9tICcuL3ZpdGUtcHdhLW9wdGlvbnMnXG5cbmNvbnN0IGVudiA9IChtb2RlOiBzdHJpbmcpID0+IGxvYWRFbnYobW9kZSwgcHJvY2Vzcy5jd2QoKSwgJycpXG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBjb21tYW5kLCBtb2RlIH0pID0+ICh7XG5cdHJlc29sdmU6IHtcblx0XHRhbGlhczogeyAnQCc6IHBhdGgucmVzb2x2ZSgnLi9zb3VyY2UnKSB9LFxuXHRcdGV4dGVuc2lvbnM6IFsnLmpzJywgJy50cycsICcuanN4JywgJy50c3gnLCAnLmpzb24nXSxcblx0fSxcblx0cHVibGljRGlyOiAnc291cmNlL3B1YmxpYycsXG5cdGJ1aWxkOiB7XG5cdFx0c291cmNlbWFwOiB0cnVlLFxuXHRcdHJvbGx1cE9wdGlvbnM6IHtcblx0XHRcdG91dHB1dDoge1xuXHRcdFx0XHRjaHVua0ZpbGVOYW1lczogKGNodW5rSW5mbykgPT4ge1xuXHRcdFx0XHRcdGlmIChjaHVua0luZm8uaXNEeW5hbWljRW50cnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiAnYXNzZXRzL2xhenlfW25hbWVdLltoYXNoXS5qcydcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gJ2Fzc2V0cy9bbmFtZV0uW2hhc2hdLmpzJ1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXHRkZWZpbmU6IHtcblx0XHRCUkFOQ0hfTkFNRTogSlNPTi5zdHJpbmdpZnkoZ2V0QnJhbmNoKG1vZGUpKSxcblx0XHRJU19ERVZFTE9QTUVOVDogbW9kZSA9PT0gJ2RldmVsb3BtZW50Jyxcblx0XHRJU19TVEFHSU5HOiBtb2RlID09PSAncHJvZHVjdGlvbicgJiYgIWlzUHJvZHVjdGlvbkJyYW5jaChtb2RlKSxcblx0XHRJU19QUk9EVUNUSU9OOiBtb2RlID09PSAncHJvZHVjdGlvbicgJiYgaXNQcm9kdWN0aW9uQnJhbmNoKG1vZGUpLFxuXHR9LFxuXHRwbHVnaW5zOiBbXG5cdFx0e1xuXHRcdFx0bmFtZTogJ3J1bi1zY3JpcHQtb24tZmlsZS1jaGFuZ2UnLFxuXHRcdFx0YXBwbHk6ICdzZXJ2ZScsXG5cdFx0XHRidWlsZFN0YXJ0KCkge1xuXHRcdFx0XHRpZiAobW9kZSA9PT0gJ2RldmVsb3BtZW50Jykge1xuXHRcdFx0XHRcdHZvaWQgcnVuU2NyaXB0T25GaWxlQ2hhbmdlKClcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGNvbW1hbmQgPT09ICdidWlsZCcgJiZcblx0XHRcdHJlcGxhY2Uoe1xuXHRcdFx0XHRfX1NFTlRSWV9ERUJVR19fOiBmYWxzZSxcblx0XHRcdFx0cHJldmVudEFzc2lnbm1lbnQ6IGZhbHNlLFxuXHRcdFx0fSksXG5cdFx0cmVhY3Qoe1xuXHRcdFx0YmFiZWw6IHtcblx0XHRcdFx0cGx1Z2luczogW1snYmFiZWwtcGx1Z2luLXN0eWxlZC1jb21wb25lbnRzJywgeyBwdXJlOiB0cnVlIH1dXSxcblx0XHRcdH0sXG5cdFx0fSksXG5cdFx0eWFtbCgpLFxuXHRcdG11bHRpcGxlU1BBKHtcblx0XHRcdGRlZmF1bHRTaXRlOiAnbW9uLWVudHJlcHJpc2UnLFxuXHRcdFx0dGVtcGxhdGVQYXRoOiAnLi9zb3VyY2UvdGVtcGxhdGUuaHRtbCcsXG5cdFx0XHRzaXRlczoge1xuXHRcdFx0XHQnbW9uLWVudHJlcHJpc2UnOiB7XG5cdFx0XHRcdFx0bGFuZzogJ2ZyJyxcblx0XHRcdFx0XHRlbnRyeTogJy9zb3VyY2UvZW50cnktZnIudHN4Jyxcblx0XHRcdFx0XHR0aXRsZTpcblx0XHRcdFx0XHRcdFwibW9uLWVudHJlcHJpc2UudXJzc2FmLmZyIDogTCdhc3Npc3RhbnQgb2ZmaWNpZWwgZHUgY3JcdTAwRTlhdGV1ciBkJ2VudHJlcHJpc2VcIixcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjpcblx0XHRcdFx0XHRcdCdEdSBzdGF0dXQganVyaWRpcXVlIFx1MDBFMCBsYSBwcmVtaVx1MDBFOHJlIGVtYmF1Y2hlLCBlbiBwYXNzYW50IHBhciBsYSBzaW11bGF0aW9uIGRlcyBjb3Rpc2F0aW9ucywgdm91cyB0cm91dmVyZXogaWNpIHRvdXRlcyBsZXMgcmVzc291cmNlcyBwb3VyIGRcdTAwRTltYXJyZXIgdm90cmUgYWN0aXZpdFx1MDBFOS4nLFxuXHRcdFx0XHRcdHNoYXJlSW1hZ2U6ICcvc291cmNlL2ltYWdlcy9sb2dvLW1vbmVudHJlcHJpc2Uuc3ZnJyxcblx0XHRcdFx0XHRzaGFyZUltYWdlQWx0OiAnTG9nbyBtb24tZW50cmVwcmlzZSwgc2l0ZSBVcnNzYWYnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpbmZyYW5jZToge1xuXHRcdFx0XHRcdGxhbmc6ICdlbicsXG5cdFx0XHRcdFx0ZW50cnk6ICcvc291cmNlL2VudHJ5LWVuLnRzeCcsXG5cdFx0XHRcdFx0dGl0bGU6XG5cdFx0XHRcdFx0XHQnTXkgY29tcGFueSBpbiBGcmFuY2U6IEEgc3RlcC1ieS1zdGVwIGd1aWRlIHRvIHN0YXJ0IGEgYnVzaW5lc3MgaW4gRnJhbmNlJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjpcblx0XHRcdFx0XHRcdCdGaW5kIHRoZSB0eXBlIG9mIGNvbXBhbnkgdGhhdCBzdWl0cyB5b3UgYW5kIGZvbGxvdyB0aGUgc3RlcHMgdG8gcmVnaXN0ZXIgeW91ciBjb21wYW55LiBEaXNjb3ZlciB0aGUgRnJlbmNoIHNvY2lhbCBzZWN1cml0eSBzeXN0ZW0gYnkgc2ltdWxhdGluZyB5b3VyIGhpcmluZyBjb3N0cy4gRGlzY292ZXIgdGhlIHByb2NlZHVyZXMgdG8gaGlyZSBpbiBGcmFuY2UgYW5kIGxlYXJuIHRoZSBiYXNpY3Mgb2YgRnJlbmNoIGxhYm91ciBsYXcuJyxcblx0XHRcdFx0XHRzaGFyZUltYWdlOiAnL2xvZ28tbXljb21wYW55LXNoYXJlLnBuZycsXG5cdFx0XHRcdFx0c2hhcmVJbWFnZUFsdDogJ0xvZ28gTXkgY29tcGFueSBpbiBGcmFuY2UgYnkgVXJzc2FmJyxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSksXG5cdFx0Vml0ZVBXQShwd2FPcHRpb25zKSxcblx0XHRsZWdhY3koe1xuXHRcdFx0dGFyZ2V0czogWydkZWZhdWx0cycsICdub3QgSUUgMTEnXSxcblx0XHR9KSxcblx0XSxcblx0c2VydmVyOiB7XG5cdFx0cG9ydDogMzAwMCxcblx0XHRobXI6IHtcblx0XHRcdGNsaWVudFBvcnQ6XG5cdFx0XHRcdHR5cGVvZiBlbnYobW9kZSkuSE1SX0NMSUVOVF9QT1JUICE9PSAndW5kZWZpbmVkJ1xuXHRcdFx0XHRcdD8gcGFyc2VJbnQoZW52KG1vZGUpLkhNUl9DTElFTlRfUE9SVClcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdC8vIEtlZXAgd2F0Y2hpbmcgY2hhbmdlcyBpbiB0aGUgcHVibGljb2RlcyBwYWNrYWdlIHRvIHN1cHBvcnQgbGl2ZSByZWxvYWRcblx0XHQvLyB3aGVuIHdlIGl0ZXJhdGUgb24gcHVibGljb2RlcyBsb2dpYy5cblx0XHQvLyBodHRwczovL3ZpdGVqcy5kZXYvY29uZmlnLyNzZXJ2ZXItd2F0Y2hcblx0XHR3YXRjaDoge1xuXHRcdFx0aWdub3JlZDogW1xuXHRcdFx0XHQnISoqL25vZGVfbW9kdWxlcy9wdWJsaWNvZGVzLyoqJyxcblx0XHRcdFx0JyEqKi9ub2RlX21vZHVsZXMvcHVibGljb2Rlcy1yZWFjdC8qKicsXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0cHJveHk6IHtcblx0XHRcdCcvYXBpJzogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwNCcsXG5cdFx0XHQnL3R3ZW1vamknOiB7XG5cdFx0XHRcdHRhcmdldDogJ2h0dHBzOi8vdHdlbW9qaS5tYXhjZG4uY29tJyxcblx0XHRcdFx0Y2hhbmdlT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHRyZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKC9eXFwvdHdlbW9qaS8sICcnKSxcblx0XHRcdFx0dGltZW91dDogMyAqIDEwMDAsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cdG9wdGltaXplRGVwczoge1xuXHRcdGVudHJpZXM6IFsnLi9zb3VyY2UvZW50cnktZnIudHN4JywgJy4vc291cmNlL2VudHJ5LWVuLnRzeCddLFxuXHRcdGV4Y2x1ZGU6IFsncHVibGljb2Rlcy1yZWFjdCcsICdwdWJsaWNvZGVzJ10sXG5cdFx0Ly8gT3B0aW1pemUgY2pzIGRlcHMgZnJvbSBwdWJsaWNvZGVzXG5cdFx0aW5jbHVkZTogWydwdWJsaWNvZGVzID4gbW9vJywgJ3B1YmxpY29kZXMgPiBuZWFybGV5J10sXG5cdH0sXG5cdHNzcjoge1xuXHRcdC8qKlxuXHRcdCAqIFByZXZlbnQgbGlzdGVkIGRlcGVuZGVuY2llcyBmcm9tIGJlaW5nIGV4dGVybmFsaXplZCBmb3IgU1NSIGJ1aWxkIGNhdXNlIHNvbWVcblx0XHQgKiBwYWNrYWdlcyBhcmUgbm90IGVzbSByZWFkeSBvciBwYWNrYWdlLmpzb24gc2V0dXAgc2VlbXMgd3JvbmcsIHdhaXQgdGhpcyBwciB0byBiZSBtZXJnZTpcblx0XHQgKiByZWFjdC1zcGVjdHJ1bTogaHR0cHM6Ly9naXRodWIuY29tL2Fkb2JlL3JlYWN0LXNwZWN0cnVtL3B1bGwvMzYzMFxuXHRcdCAqIG1hcmtkb3duLXRvLWpzeDogaHR0cHM6Ly9naXRodWIuY29tL3Byb2JhYmx5dXAvbWFya2Rvd24tdG8tanN4L3B1bGwvNDE0XG5cdFx0ICogc3R5bGVkLWNvbXBvbmVudHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9pc3N1ZXMvMzYwMVxuXHRcdCAqIHB1YmxpY29kZXMtcmVhY3Q6IEFkZCB0eXBlIG1vZHVsZVxuXHRcdCAqL1xuXHRcdG5vRXh0ZXJuYWw6IFtcblx0XHRcdC9yZWFjdC1hcmlhfHJlYWN0LXN0YXRlbHl8aW50ZXJuYXRpb25hbGl6ZWQvLFxuXHRcdFx0L21hcmtkb3duLXRvLWpzeC8sXG5cdFx0XHQvc3R5bGVkLWNvbXBvbmVudHN8ZW1vdGlvbi8sXG5cdFx0XHQvcHVibGljb2Rlcy1yZWFjdC8sIC8vIFRPRE8gcmVtb3ZlIHRoaXMgYWZ0ZXIgcHVibGljb2Rlcy1yZWFjdCB1cGdyYWRlXG5cdFx0XSxcblx0fSxcbn0pKVxuXG50eXBlIE11bHRpcGxlU1BBT3B0aW9ucyA9IHtcblx0ZGVmYXVsdFNpdGU6IHN0cmluZ1xuXHR0ZW1wbGF0ZVBhdGg6IHN0cmluZ1xuXHRzaXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj5cbn1cblxuLyoqXG4gKiBBIGN1c3RvbSBwbHVnaW4gdG8gY3JlYXRlIG11bHRpcGxlIHZpcnR1YWwgaHRtbCBmaWxlcyBmcm9tIGEgdGVtcGxhdGUuIFdpbGxcbiAqIGdlbmVyYXRlIGRpc3RpbmN0IGVudHJ5IHBvaW50cyBhbmQgc2luZ2xlLXBhZ2UgYXBwbGljYXRpb24gb3V0cHV0cy5cbiAqL1xuZnVuY3Rpb24gbXVsdGlwbGVTUEEob3B0aW9uczogTXVsdGlwbGVTUEFPcHRpb25zKTogUGx1Z2luIHtcblx0Y29uc3QgZmlsbFRlbXBsYXRlID0gYXN5bmMgKHNpdGVOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBzaXRlRGF0YSA9IG9wdGlvbnMuc2l0ZXNbc2l0ZU5hbWVdXG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBhd2FpdCBmcy5yZWFkRmlsZShvcHRpb25zLnRlbXBsYXRlUGF0aCwgJ3V0Zi04Jylcblx0XHRjb25zdCBmaWxsZWRUZW1wbGF0ZSA9IHRlbXBsYXRlXG5cdFx0XHQudG9TdHJpbmcoKVxuXHRcdFx0LnJlcGxhY2UoL1xce1xceyguKylcXH1cXH0vZywgKF9tYXRjaCwgcDEpID0+IHNpdGVEYXRhWyhwMSBhcyBzdHJpbmcpLnRyaW0oKV0pXG5cblx0XHRyZXR1cm4gZmlsbGVkVGVtcGxhdGVcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bmFtZTogJ211bHRpcGxlLXNwYScsXG5cdFx0ZW5mb3JjZTogJ3ByZScsXG5cblx0XHRjb25maWd1cmVTZXJ2ZXIodml0ZSkge1xuXHRcdFx0Ly8gVE9ETzogdGhpcyBtaWRkbGV3YXJlIGlzIHNwZWNpZmljIHRvIHRoZSBcIm1vbi1lbnRyZXByaXNlXCIgYXBwIGFuZFxuXHRcdFx0Ly8gc2hvdWxkbid0IGJlIGluIHRoZSBcIm11bHRpcGxlU1BBXCIgcGx1Z2luXG5cdFx0XHR2aXRlLm1pZGRsZXdhcmVzLnVzZShcblx0XHRcdFx0Jy9zaW11bGF0ZXVyLWlmcmFtZS1pbnRlZ3JhdGlvbi5qcycsXG5cdFx0XHRcdHNlcnZlU3RhdGljKG5ldyBVUkwoJy4vZGlzdCcsIGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUsIHtcblx0XHRcdFx0XHRpbmRleDogJ3NpbXVsYXRldXItaWZyYW1lLWludGVncmF0aW9uLmpzJyxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuXHRcdFx0dml0ZS5taWRkbGV3YXJlcy51c2UoYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IHJlcS5vcmlnaW5hbFVybD8ucmVwbGFjZSgvXlxcLyUyRi8sICcvJylcblxuXHRcdFx0XHRjb25zdCBmaXJzdExldmVsRGlyID0gdXJsPy5zbGljZSgxKS5zcGxpdCgnLycpWzBdXG5cblx0XHRcdFx0aWYgKHVybCAmJiAvXFw/LipodG1sLXByb3h5Ly50ZXN0KHVybCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gbmV4dCgpXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodXJsICYmIFsnLycsICcvaW5kZXguaHRtbCddLmluY2x1ZGVzKHVybCkpIHtcblx0XHRcdFx0XHRyZXMud3JpdGVIZWFkKDMwMiwgeyBMb2NhdGlvbjogJy8nICsgb3B0aW9ucy5kZWZhdWx0U2l0ZSB9KS5lbmQoKVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHRoaXMgY29uZGl0aW9uIGlzIGZvciB0aGUgc3RhcnQ6bmV0bGlmeSBzY3JpcHQgdG8gbWF0Y2ggL21vbi1lbnRyZXByaXNlIG9yIC9pbmZyYW5jZVxuXHRcdFx0XHRlbHNlIGlmIChcblx0XHRcdFx0XHRmaXJzdExldmVsRGlyICYmXG5cdFx0XHRcdFx0dXJsICYmXG5cdFx0XHRcdFx0T2JqZWN0LmtleXMob3B0aW9ucy5zaXRlcylcblx0XHRcdFx0XHRcdC5tYXAoKHNpdGUpID0+IGAvJHtzaXRlfS5odG1sYClcblx0XHRcdFx0XHRcdC5pbmNsdWRlcyh1cmwpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IHNpdGVOYW1lID0gZmlyc3RMZXZlbERpci5yZXBsYWNlKCcuaHRtbCcsICcnKVxuXHRcdFx0XHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB2aXRlLnRyYW5zZm9ybUluZGV4SHRtbChcblx0XHRcdFx0XHRcdCcvJyArIHNpdGVOYW1lLFxuXHRcdFx0XHRcdFx0YXdhaXQgZmlsbFRlbXBsYXRlKHNpdGVOYW1lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHRyZXMuZW5kKGNvbnRlbnQpXG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0Zmlyc3RMZXZlbERpciAmJlxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKG9wdGlvbnMuc2l0ZXMpLnNvbWUoKG5hbWUpID0+IGZpcnN0TGV2ZWxEaXIgPT09IG5hbWUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IHNpdGVOYW1lID0gZmlyc3RMZXZlbERpclxuXHRcdFx0XHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB2aXRlLnRyYW5zZm9ybUluZGV4SHRtbChcblx0XHRcdFx0XHRcdHVybCxcblx0XHRcdFx0XHRcdGF3YWl0IGZpbGxUZW1wbGF0ZShzaXRlTmFtZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0cmVzLmVuZChjb250ZW50KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5leHQoKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0sXG5cblx0XHRjb25maWcoY29uZmlnLCB7IGNvbW1hbmQgfSkge1xuXHRcdFx0aWYgKGNvbW1hbmQgPT09ICdidWlsZCcgJiYgIWNvbmZpZy5idWlsZD8uc3NyKSB7XG5cdFx0XHRcdGNvbmZpZy5idWlsZCA9IHtcblx0XHRcdFx0XHQuLi5jb25maWcuYnVpbGQsXG5cdFx0XHRcdFx0cm9sbHVwT3B0aW9uczoge1xuXHRcdFx0XHRcdFx0Li4uY29uZmlnLmJ1aWxkPy5yb2xsdXBPcHRpb25zLFxuXHRcdFx0XHRcdFx0aW5wdXQ6IE9iamVjdC5mcm9tRW50cmllcyhcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMob3B0aW9ucy5zaXRlcykubWFwKChuYW1lKSA9PiBbXG5cdFx0XHRcdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRcdFx0XHRgdmlydHVhbDoke25hbWV9Lmh0bWxgLFxuXHRcdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHJlc29sdmVJZChpZCkge1xuXHRcdFx0Y29uc3QgcGF0aG5hbWUgPSBpZC5zcGxpdCgnLycpLnNsaWNlKC0xKVswXVxuXHRcdFx0aWYgKHBhdGhuYW1lPy5zdGFydHNXaXRoKCd2aXJ0dWFsOicpKSB7XG5cdFx0XHRcdHJldHVybiBwYXRobmFtZS5yZXBsYWNlKCd2aXJ0dWFsOicsICcnKVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbFxuXHRcdH0sXG5cblx0XHRhc3luYyBsb2FkKGlkKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdE9iamVjdC5rZXlzKG9wdGlvbnMuc2l0ZXMpLnNvbWUoKG5hbWUpID0+IGlkLmVuZHNXaXRoKG5hbWUgKyAnLmh0bWwnKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgZmlsbFRlbXBsYXRlKGlkLnJlcGxhY2UoL1xcLmh0bWwkLywgJycpKVxuXHRcdFx0fVxuXHRcdH0sXG5cdH1cbn1cblxuLyoqXG4gKiBHaXQgYnJhbmNoIG5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJyYW5jaCA9IChtb2RlOiBzdHJpbmcpID0+IHtcblx0bGV0IGJyYW5jaDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZW52KG1vZGUpXG5cdFx0LlZJVEVfR0lUSFVCX1JFRj8uc3BsaXQoJy8nKVxuXHRcdD8uc2xpY2UoLTEpPy5bMF1cblxuXHRpZiAoYnJhbmNoID09PSAnbWVyZ2UnKSB7XG5cdFx0YnJhbmNoID0gZW52KG1vZGUpLlZJVEVfR0lUSFVCX0hFQURfUkVGXG5cdH1cblxuXHRyZXR1cm4gYnJhbmNoID8/ICcnXG59XG5cbi8qKlxuICogV2UgdXNlIHRoaXMgZnVuY3Rpb24gdG8gaGlkZSBzb21lIGZlYXR1cmVzIGluIHByb2R1Y3Rpb24gd2hpbGUga2VlcGluZyB0aGVtXG4gKiBpbiBmZWF0dXJlLWJyYW5jaGVzLiBJbiBjYXNlIHdlIGRvIEEvQiB0ZXN0aW5nIHdpdGggc2V2ZXJhbCBicmFuY2hlcyBzZXJ2ZWRcbiAqIGluIHByb2R1Y3Rpb24sIHdlIHNob3VsZCBhZGQgdGhlIHB1YmxpYyBmYWNlZCBicmFuY2ggbmFtZXMgaW4gdGhlIHRlc3QgYmVsb3cuXG4gKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBpbXBvcnQubWV0YS5lbnYuTU9ERSBpbiB0aGF0IGEgZmVhdHVyZSBicmFuY2ggbWF5XG4gKiBiZSBidWlsZCBpbiBwcm9kdWN0aW9uIG1vZGUgKHdpdGggdGhlIE5PREVfRU5WKSBidXQgd2UgbWF5IHN0aWxsIHdhbnQgdG8gc2hvd1xuICogb3IgaGlkZSBzb21lIGZlYXR1cmVzLlxuICovXG5leHBvcnQgY29uc3QgaXNQcm9kdWN0aW9uQnJhbmNoID0gKG1vZGU6IHN0cmluZykgPT4ge1xuXHRyZXR1cm4gWydtYXN0ZXInLCAnbmV4dCddLmluY2x1ZGVzKGdldEJyYW5jaChtb2RlKSlcbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL2hvbWUvam9oYW4vUHJvamV0cy9tb24tZW50cmVwcmlzZS9zaXRlL3NjcmlwdHMvcnVuU2NyaXB0T25GaWxlQ2hhbmdlXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvaG9tZS9qb2hhbi9Qcm9qZXRzL21vbi1lbnRyZXByaXNlL3NpdGUvc2NyaXB0cy9ydW5TY3JpcHRPbkZpbGVDaGFuZ2UvZXhlY09uRmlsZUNoYW5nZS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vaG9tZS9qb2hhbi9Qcm9qZXRzL21vbi1lbnRyZXByaXNlL3NpdGUvc2NyaXB0cy9ydW5TY3JpcHRPbkZpbGVDaGFuZ2UvZXhlY09uRmlsZUNoYW5nZS50c1wiO2ltcG9ydCB7IGdldFBhY2thZ2VEZXBzIH0gZnJvbSAnQHJ1c2hzdGFjay9wYWNrYWdlLWRlcHMtaGFzaCdcbmltcG9ydCB7IGV4ZWMgYXMgb3JpZ2luYWxFeGVjIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IGV4aXN0c1N5bmMsIGxzdGF0U3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnXG5pbXBvcnQgeyByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJ1xuXG5jb25zdCBleGVjID0gcHJvbWlzaWZ5KG9yaWdpbmFsRXhlYylcblxudHlwZSBEaXJQYXRoID0gc3RyaW5nXG50eXBlIEZpbGVQYXRoID0gc3RyaW5nXG5cbmludGVyZmFjZSBPcHRpb24ge1xuXHRwYXRoczogKERpclBhdGggfCBGaWxlUGF0aClbXVxuXHRydW46IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgQ29uZmlnIHtcblx0YmFzZVBhdGg6IHN0cmluZ1xuXHRkZXBzUGF0aDogc3RyaW5nXG5cdG9wdGlvbnM6IE9wdGlvbltdXG59XG5cbnR5cGUgRGVwcyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuLyoqXG4gKiBFeGVjdXRlIGEgY29tbWFuZCB3aGVuIGEgZmlsZSBvciBhIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBjaGFuZ2VzXG4gKi9cbmV4cG9ydCBjb25zdCBleGVjT25GaWxlQ2hhbmdlID0gYXN5bmMgKGNvbmZpZzogQ29uZmlnKSA9PiB7XG5cdGNvbnN0IHBhdGggPSByZXNvbHZlKGNvbmZpZy5iYXNlUGF0aCwgY29uZmlnLmRlcHNQYXRoKVxuXG5cdGNvbnN0IGRlcHM6IERlcHMgPSBPYmplY3QuZnJvbUVudHJpZXMoZ2V0UGFja2FnZURlcHMoY29uZmlnLmJhc2VQYXRoKSlcblx0Y29uc3QgZGVwc0VudHJpZXMgPSBPYmplY3QuZW50cmllcyhkZXBzKVxuXG5cdGNvbnN0IGV4aXN0aW5nRGVwcyA9IGV4aXN0c1N5bmMocGF0aClcblx0XHQ/IChKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSkpIGFzIERlcHMpXG5cdFx0OiB7fVxuXHRjb25zdCBleGlzdGluZ0RlcHNFbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZXhpc3RpbmdEZXBzKVxuXG5cdGNvbnN0IHByb21pc2VzID0gY29uZmlnLm9wdGlvbnMubWFwKGFzeW5jIChjZmcpID0+IHtcblx0XHRsZXQgZmlsZUNoYW5nZWQ6IG51bGwgfCBzdHJpbmcgPSBudWxsXG5cdFx0Y29uc3QgaW5kZXggPSBjZmcucGF0aHNcblx0XHRcdC5tYXAoKHZhbCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpc0RpciA9IGxzdGF0U3luYyhyZXNvbHZlKGNvbmZpZy5iYXNlUGF0aCwgdmFsKSkuaXNEaXJlY3RvcnkoKVxuXHRcdFx0XHRjb25zdCBpc0ZpbGUgPSBsc3RhdFN5bmMocmVzb2x2ZShjb25maWcuYmFzZVBhdGgsIHZhbCkpLmlzRmlsZSgpXG5cblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRpc0Rpcixcblx0XHRcdFx0XHRpc0ZpbGUsXG5cdFx0XHRcdFx0YWJzb2x1dGU6IHJlc29sdmUoY29uZmlnLmJhc2VQYXRoLCB2YWwpLFxuXHRcdFx0XHRcdHJlbGF0aXZlOiByZWxhdGl2ZShcblx0XHRcdFx0XHRcdHJlc29sdmUoY29uZmlnLmJhc2VQYXRoKSxcblx0XHRcdFx0XHRcdHJlc29sdmUoY29uZmlnLmJhc2VQYXRoLCB2YWwpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5maW5kSW5kZXgoKHsgYWJzb2x1dGUsIHJlbGF0aXZlLCBpc0ZpbGUsIGlzRGlyIH0pID0+IHtcblx0XHRcdFx0aWYgKGlzRmlsZSkge1xuXHRcdFx0XHRcdGlmIChkZXBzW3JlbGF0aXZlXSAhPT0gZXhpc3RpbmdEZXBzW3JlbGF0aXZlXSkge1xuXHRcdFx0XHRcdFx0ZmlsZUNoYW5nZWQgPSByZWxhdGl2ZVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBkZXBzW3JlbGF0aXZlXSAhPT0gZXhpc3RpbmdEZXBzW3JlbGF0aXZlXVxuXHRcdFx0XHR9IGVsc2UgaWYgKGlzRGlyKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXggPSBkZXBzRW50cmllcy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0XHQoW2EsIGJdLCBpKSA9PlxuXHRcdFx0XHRcdFx0XHQocmVsYXRpdmUubGVuZ3RoID8gYS5zdGFydHNXaXRoKHJlbGF0aXZlICsgJy8nKSA6IHRydWUpICYmXG5cdFx0XHRcdFx0XHRcdChleGlzdGluZ0RlcHNFbnRyaWVzPy5baV0/LlswXSAhPT0gYSB8fFxuXHRcdFx0XHRcdFx0XHRcdGV4aXN0aW5nRGVwc0VudHJpZXM/LltpXT8uWzFdICE9PSBiKVxuXHRcdFx0XHRcdClcblxuXHRcdFx0XHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRcdFx0XHRmaWxlQ2hhbmdlZCA9IGRlcHNFbnRyaWVzW2luZGV4XVswXVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBpbmRleCA+IC0xXG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdQYXRoIGlzIG5vdCBhIGRpcmVjdG9yeSBvciBhIGZpbGU6ICcgKyBhYnNvbHV0ZSlcblx0XHRcdH0pXG5cblx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlYyhjZmcucnVuKVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRwYXRoOiBjZmcucGF0aHNbaW5kZXhdLFxuXHRcdFx0XHRmaWxlQ2hhbmdlZCxcblx0XHRcdFx0cnVuOiBjZmcucnVuLFxuXHRcdFx0XHRyZXN1bHQsXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGxcblx0fSlcblxuXHRjb25zdCByZXMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcblxuXHR3cml0ZUZpbGVTeW5jKHBhdGgsIEpTT04uc3RyaW5naWZ5KGRlcHMsIG51bGwsIDIpKVxuXG5cdHJldHVybiByZXNcbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL2hvbWUvam9oYW4vUHJvamV0cy9tb24tZW50cmVwcmlzZS9zaXRlL3NjcmlwdHMvcnVuU2NyaXB0T25GaWxlQ2hhbmdlXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvaG9tZS9qb2hhbi9Qcm9qZXRzL21vbi1lbnRyZXByaXNlL3NpdGUvc2NyaXB0cy9ydW5TY3JpcHRPbkZpbGVDaGFuZ2UvaW5kZXgudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL2hvbWUvam9oYW4vUHJvamV0cy9tb24tZW50cmVwcmlzZS9zaXRlL3NjcmlwdHMvcnVuU2NyaXB0T25GaWxlQ2hhbmdlL2luZGV4LnRzXCI7aW1wb3J0IHsgZXhlY09uRmlsZUNoYW5nZSB9IGZyb20gJy4vZXhlY09uRmlsZUNoYW5nZS5qcydcblxuZXhwb3J0IGNvbnN0IHJ1blNjcmlwdE9uRmlsZUNoYW5nZSA9IGFzeW5jICgpID0+IHtcblx0Y29uc29sZS5sb2coJ1NlYXJjaCBmb3IgY2hhbmdlZCBmaWxlLi4uJylcblxuXHRjb25zdCByZXN1bHRzID0gYXdhaXQgZXhlY09uRmlsZUNoYW5nZSh7XG5cdFx0YmFzZVBhdGg6ICcuLycsXG5cdFx0ZGVwc1BhdGg6ICcuZGVwcy5qc29uJyxcblx0XHRvcHRpb25zOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdGhzOiBbXG5cdFx0XHRcdFx0Jy4vc291cmNlL3BhZ2VzL1NpbXVsYXRldXJzL0Vjb25vbWllQ29sbGFib3JhdGl2ZS9hY3Rpdml0XHUwMEU5cy55YW1sJyxcblx0XHRcdFx0XHQnLi9zb3VyY2UvcGFnZXMvU2ltdWxhdGV1cnMvRWNvbm9taWVDb2xsYWJvcmF0aXZlL2FjdGl2aXRcdTAwRTlzLmVuLnlhbWwnLFxuXHRcdFx0XHRdLFxuXHRcdFx0XHRydW46ICd5YXJuIGJ1aWxkOnlhbWwtdG8tZHRzJyxcblx0XHRcdH0sXG5cdFx0XSxcblx0fSlcblxuXHRyZXN1bHRzXG5cdFx0LmZpbHRlcig8VD4oeDogbnVsbCB8IFQpOiB4IGlzIFQgPT4gISF4KVxuXHRcdC5mb3JFYWNoKCh7IGZpbGVDaGFuZ2VkLCBydW4sIHJlc3VsdCB9KSA9PiB7XG5cdFx0XHRjb25zb2xlLmxvZygnQ2hhbmdlZCBmaWxlIGRldGVjdGVkOicsIGZpbGVDaGFuZ2VkKVxuXHRcdFx0Y29uc29sZS5sb2coJ0V4ZWN1dGU6JywgcnVuLCAnXFxuJylcblxuXHRcdFx0aWYgKHJlc3VsdC5zdGRvdXQpIHtcblx0XHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LnN0ZG91dClcblx0XHRcdH1cblx0XHRcdGlmIChyZXN1bHQuc3RkZXJyKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IocmVzdWx0LnN0ZGVycilcblx0XHRcdH1cblx0XHR9KVxufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvaG9tZS9qb2hhbi9Qcm9qZXRzL21vbi1lbnRyZXByaXNlL3NpdGVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9ob21lL2pvaGFuL1Byb2pldHMvbW9uLWVudHJlcHJpc2Uvc2l0ZS92aXRlLXB3YS1vcHRpb25zLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9ob21lL2pvaGFuL1Byb2pldHMvbW9uLWVudHJlcHJpc2Uvc2l0ZS92aXRlLXB3YS1vcHRpb25zLnRzXCI7aW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3ZpdGUtcGx1Z2luLXB3YSdcblxuZXhwb3J0IGNvbnN0IHB3YU9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG5cdC8vIHNlbGZEZXN0cm95aW5nOiB0cnVlLCAvLyBVbnJlZ2lzdGVyIFBXQVxuXHRyZWdpc3RlclR5cGU6ICdwcm9tcHQnLFxuXHRzdHJhdGVnaWVzOiAnaW5qZWN0TWFuaWZlc3QnLFxuXHRzcmNEaXI6ICdzb3VyY2UnLFxuXHRmaWxlbmFtZTogJ3N3LnRzJyxcblx0aW5qZWN0TWFuaWZlc3Q6IHtcblx0XHRtYXhpbXVtRmlsZVNpemVUb0NhY2hlSW5CeXRlczogMzAwMDAwMCxcblx0XHRtYW5pZmVzdFRyYW5zZm9ybXM6IFtcblx0XHRcdChlbnRyaWVzKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG1hbmlmZXN0ID0gZW50cmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0KGVudHJ5KSA9PlxuXHRcdFx0XHRcdFx0IS9hc3NldHNcXC8uKigtbGVnYWN5fGxhenlfKS8udGVzdChlbnRyeS51cmwpICYmXG5cdFx0XHRcdFx0XHQoZW50cnkudXJsLmVuZHNXaXRoKCcuaHRtbCcpXG5cdFx0XHRcdFx0XHRcdD8gLyhpbmZyYW5jZXxtb24tZW50cmVwcmlzZSlcXC5odG1sLy50ZXN0KGVudHJ5LnVybClcblx0XHRcdFx0XHRcdFx0OiB0cnVlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0cmV0dXJuIHsgbWFuaWZlc3QgfVxuXHRcdFx0fSxcblx0XHRdLFxuXHR9LFxuXHRpbmNsdWRlQXNzZXRzOiBbJ2xvZ28tKi5wbmcnXSxcblx0bWFuaWZlc3Q6IHtcblx0XHRzdGFydF91cmw6ICcvJyxcblx0XHRuYW1lOiAnTW9uIGVudHJlcHJpc2UnLFxuXHRcdHNob3J0X25hbWU6ICdNb24gZW50cmVwcmlzZScsXG5cdFx0ZGVzY3JpcHRpb246IFwiTCdhc3Npc3RhbnQgb2ZmaWNpZWwgZHUgY3JcdTAwRTlhdGV1ciBkJ2VudHJlcHJpc2VcIixcblx0XHRsYW5nOiAnZnInLFxuXHRcdG9yaWVudGF0aW9uOiAncG9ydHJhaXQtcHJpbWFyeScsXG5cdFx0ZGlzcGxheTogJ21pbmltYWwtdWknLFxuXHRcdHRoZW1lX2NvbG9yOiAnIzI5NzVkMScsXG5cdFx0YmFja2dyb3VuZF9jb2xvcjogJyNmZmZmZmYnLFxuXHRcdGljb25zOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHNyYzogJy9mYXZpY29uL2FuZHJvaWQtY2hyb21lLTE5MngxOTItc2hhZG93LnBuZz92PTIuMCcsXG5cdFx0XHRcdHNpemVzOiAnMTkyeDE5MicsXG5cdFx0XHRcdHR5cGU6ICdpbWFnZS9wbmcnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0c3JjOiAnL2Zhdmljb24vYW5kcm9pZC1jaHJvbWUtNTEyeDUxMi1zaGFkb3cucG5nP3Y9Mi4wJyxcblx0XHRcdFx0c2l6ZXM6ICc1MTJ4NTEyJyxcblx0XHRcdFx0dHlwZTogJ2ltYWdlL3BuZycsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0sXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsT0FBTyxhQUFhO0FBQ3BCLE9BQU8sVUFBVTtBQUNqQixPQUFPLFlBQVk7QUFDbkIsT0FBTyxXQUFXO0FBQ2xCLE9BQU8sUUFBUTtBQUNmLE9BQU8sVUFBVTtBQUNqQixPQUFPLGlCQUFpQjtBQUN4QixTQUFpQixjQUFjLGVBQWU7QUFDOUMsU0FBUyxlQUFlOzs7QUNUbVgsU0FBUyxzQkFBc0I7QUFDMWEsU0FBUyxRQUFRLG9CQUFvQjtBQUNyQyxTQUFTLFlBQVksV0FBVyxjQUFjLHFCQUFxQjtBQUNuRSxTQUFTLFVBQVUsZUFBZTtBQUNsQyxTQUFTLGlCQUFpQjtBQUUxQixJQUFNLE9BQU8sVUFBVSxZQUFZO0FBcUI1QixJQUFNLG1CQUFtQixPQUFPLFdBQW1CO0FBQ3pELFFBQU1BLFFBQU8sUUFBUSxPQUFPLFVBQVUsT0FBTyxRQUFRO0FBRXJELFFBQU0sT0FBYSxPQUFPLFlBQVksZUFBZSxPQUFPLFFBQVEsQ0FBQztBQUNyRSxRQUFNLGNBQWMsT0FBTyxRQUFRLElBQUk7QUFFdkMsUUFBTSxlQUFlLFdBQVdBLEtBQUksSUFDaEMsS0FBSyxNQUFNLGFBQWFBLE9BQU0sRUFBRSxVQUFVLE9BQU8sQ0FBQyxDQUFDLElBQ3BELENBQUM7QUFDSixRQUFNLHNCQUFzQixPQUFPLFFBQVEsWUFBWTtBQUV2RCxRQUFNLFdBQVcsT0FBTyxRQUFRLElBQUksT0FBTyxRQUFRO0FBQ2xELFFBQUksY0FBNkI7QUFDakMsVUFBTSxRQUFRLElBQUksTUFDaEIsSUFBSSxDQUFDLFFBQVE7QUFDYixZQUFNLFFBQVEsVUFBVSxRQUFRLE9BQU8sVUFBVSxHQUFHLENBQUMsRUFBRSxZQUFZO0FBQ25FLFlBQU0sU0FBUyxVQUFVLFFBQVEsT0FBTyxVQUFVLEdBQUcsQ0FBQyxFQUFFLE9BQU87QUFFL0QsYUFBTztBQUFBLFFBQ047QUFBQSxRQUNBO0FBQUEsUUFDQSxVQUFVLFFBQVEsT0FBTyxVQUFVLEdBQUc7QUFBQSxRQUN0QyxVQUFVO0FBQUEsVUFDVCxRQUFRLE9BQU8sUUFBUTtBQUFBLFVBQ3ZCLFFBQVEsT0FBTyxVQUFVLEdBQUc7QUFBQSxRQUM3QjtBQUFBLE1BQ0Q7QUFBQSxJQUNELENBQUMsRUFDQSxVQUFVLENBQUMsRUFBRSxVQUFVLFVBQUFDLFdBQVUsUUFBUSxNQUFNLE1BQU07QUFDckQsVUFBSSxRQUFRO0FBQ1gsWUFBSSxLQUFLQSxlQUFjLGFBQWFBLFlBQVc7QUFDOUMsd0JBQWNBO0FBQUEsUUFDZjtBQUVBLGVBQU8sS0FBS0EsZUFBYyxhQUFhQTtBQUFBLE1BQ3hDLFdBQVcsT0FBTztBQUNqQixjQUFNQyxTQUFRLFlBQVk7QUFBQSxVQUN6QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBRztBQWhFbEI7QUFpRVEsb0JBQUFELFVBQVMsU0FBUyxFQUFFLFdBQVdBLFlBQVcsR0FBRyxJQUFJLFlBQ2pELGdFQUFzQixPQUF0QixtQkFBMkIsUUFBTyxPQUNsQyxnRUFBc0IsT0FBdEIsbUJBQTJCLFFBQU87QUFBQTtBQUFBLFFBQ3JDO0FBRUEsWUFBSUMsU0FBUSxJQUFJO0FBQ2Ysd0JBQWMsWUFBWUEsUUFBTztBQUFBLFFBQ2xDO0FBRUEsZUFBT0EsU0FBUTtBQUFBLE1BQ2hCO0FBQ0EsWUFBTSxJQUFJLE1BQU0sd0NBQXdDLFFBQVE7QUFBQSxJQUNqRSxDQUFDO0FBRUYsUUFBSSxRQUFRLElBQUk7QUFDZixZQUFNLFNBQVMsTUFBTSxLQUFLLElBQUksR0FBRztBQUVqQyxhQUFPO0FBQUEsUUFDTixNQUFNLElBQUksTUFBTTtBQUFBLFFBQ2hCO0FBQUEsUUFDQSxLQUFLLElBQUk7QUFBQSxRQUNUO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUixDQUFDO0FBRUQsUUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFFBQVE7QUFFdEMsZ0JBQWNGLE9BQU0sS0FBSyxVQUFVLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFFakQsU0FBTztBQUNSOzs7QUNoR08sSUFBTSx3QkFBd0IsWUFBWTtBQUNoRCxVQUFRLElBQUksNEJBQTRCO0FBRXhDLFFBQU0sVUFBVSxNQUFNLGlCQUFpQjtBQUFBLElBQ3RDLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxNQUNSO0FBQUEsUUFDQyxPQUFPO0FBQUEsVUFDTjtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsUUFDQSxLQUFLO0FBQUEsTUFDTjtBQUFBLElBQ0Q7QUFBQSxFQUNELENBQUM7QUFFRCxVQUNFLE9BQU8sQ0FBSSxNQUF3QixDQUFDLENBQUMsQ0FBQyxFQUN0QyxRQUFRLENBQUMsRUFBRSxhQUFhLEtBQUssT0FBTyxNQUFNO0FBQzFDLFlBQVEsSUFBSSwwQkFBMEIsV0FBVztBQUNqRCxZQUFRLElBQUksWUFBWSxLQUFLLElBQUk7QUFFakMsUUFBSSxPQUFPLFFBQVE7QUFDbEIsY0FBUSxJQUFJLE9BQU8sTUFBTTtBQUFBLElBQzFCO0FBQ0EsUUFBSSxPQUFPLFFBQVE7QUFDbEIsY0FBUSxNQUFNLE9BQU8sTUFBTTtBQUFBLElBQzVCO0FBQUEsRUFDRCxDQUFDO0FBQ0g7OztBQzlCTyxJQUFNLGFBQStCO0FBQUEsRUFFM0MsY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsZ0JBQWdCO0FBQUEsSUFDZiwrQkFBK0I7QUFBQSxJQUMvQixvQkFBb0I7QUFBQSxNQUNuQixDQUFDLFlBQVk7QUFDWixjQUFNLFdBQVcsUUFBUTtBQUFBLFVBQ3hCLENBQUMsVUFDQSxDQUFDLDRCQUE0QixLQUFLLE1BQU0sR0FBRyxNQUMxQyxNQUFNLElBQUksU0FBUyxPQUFPLElBQ3hCLGtDQUFrQyxLQUFLLE1BQU0sR0FBRyxJQUNoRDtBQUFBLFFBQ0w7QUFFQSxlQUFPLEVBQUUsU0FBUztBQUFBLE1BQ25CO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUNBLGVBQWUsQ0FBQyxZQUFZO0FBQUEsRUFDNUIsVUFBVTtBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLElBQ04sWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsYUFBYTtBQUFBLElBQ2Isa0JBQWtCO0FBQUEsSUFDbEIsT0FBTztBQUFBLE1BQ047QUFBQSxRQUNDLEtBQUs7QUFBQSxRQUNMLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxNQUNQO0FBQUEsTUFDQTtBQUFBLFFBQ0MsS0FBSztBQUFBLFFBQ0wsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLE1BQ1A7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUNEOzs7QUhoRHNMLElBQU0sMkNBQTJDO0FBY3ZPLElBQU0sTUFBTSxDQUFDLFNBQWlCLFFBQVEsTUFBTSxRQUFRLElBQUksR0FBRyxFQUFFO0FBRTdELElBQU8sc0JBQVEsYUFBYSxDQUFDLEVBQUUsU0FBUyxLQUFLLE9BQU87QUFBQSxFQUNuRCxTQUFTO0FBQUEsSUFDUixPQUFPLEVBQUUsS0FBSyxLQUFLLFFBQVEsVUFBVSxFQUFFO0FBQUEsSUFDdkMsWUFBWSxDQUFDLE9BQU8sT0FBTyxRQUFRLFFBQVEsT0FBTztBQUFBLEVBQ25EO0FBQUEsRUFDQSxXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsSUFDTixXQUFXO0FBQUEsSUFDWCxlQUFlO0FBQUEsTUFDZCxRQUFRO0FBQUEsUUFDUCxnQkFBZ0IsQ0FBQyxjQUFjO0FBQzlCLGNBQUksVUFBVSxnQkFBZ0I7QUFDN0IsbUJBQU87QUFBQSxVQUNSO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxhQUFhLEtBQUssVUFBVSxVQUFVLElBQUksQ0FBQztBQUFBLElBQzNDLGdCQUFnQixTQUFTO0FBQUEsSUFDekIsWUFBWSxTQUFTLGdCQUFnQixDQUFDLG1CQUFtQixJQUFJO0FBQUEsSUFDN0QsZUFBZSxTQUFTLGdCQUFnQixtQkFBbUIsSUFBSTtBQUFBLEVBQ2hFO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUjtBQUFBLE1BQ0MsTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLE1BQ1AsYUFBYTtBQUNaLFlBQUksU0FBUyxlQUFlO0FBQzNCLGVBQUssc0JBQXNCO0FBQUEsUUFDNUI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLElBQ0EsWUFBWSxXQUNYLFFBQVE7QUFBQSxNQUNQLGtCQUFrQjtBQUFBLE1BQ2xCLG1CQUFtQjtBQUFBLElBQ3BCLENBQUM7QUFBQSxJQUNGLE1BQU07QUFBQSxNQUNMLE9BQU87QUFBQSxRQUNOLFNBQVMsQ0FBQyxDQUFDLGtDQUFrQyxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFBQSxNQUM3RDtBQUFBLElBQ0QsQ0FBQztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsWUFBWTtBQUFBLE1BQ1gsYUFBYTtBQUFBLE1BQ2IsY0FBYztBQUFBLE1BQ2QsT0FBTztBQUFBLFFBQ04sa0JBQWtCO0FBQUEsVUFDakIsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFVBQ1AsT0FDQztBQUFBLFVBQ0QsYUFDQztBQUFBLFVBQ0QsWUFBWTtBQUFBLFVBQ1osZUFBZTtBQUFBLFFBQ2hCO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxNQUFNO0FBQUEsVUFDTixPQUFPO0FBQUEsVUFDUCxPQUNDO0FBQUEsVUFDRCxhQUNDO0FBQUEsVUFDRCxZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsUUFDaEI7QUFBQSxNQUNEO0FBQUEsSUFDRCxDQUFDO0FBQUEsSUFDRCxRQUFRLFVBQVU7QUFBQSxJQUNsQixPQUFPO0FBQUEsTUFDTixTQUFTLENBQUMsWUFBWSxXQUFXO0FBQUEsSUFDbEMsQ0FBQztBQUFBLEVBQ0Y7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLEtBQUs7QUFBQSxNQUNKLFlBQ0MsT0FBTyxJQUFJLElBQUksRUFBRSxvQkFBb0IsY0FDbEMsU0FBUyxJQUFJLElBQUksRUFBRSxlQUFlLElBQ2xDO0FBQUEsSUFDTDtBQUFBLElBSUEsT0FBTztBQUFBLE1BQ04sU0FBUztBQUFBLFFBQ1I7QUFBQSxRQUNBO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLFlBQVk7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFNBQVMsQ0FBQ0csVUFBU0EsTUFBSyxRQUFRLGNBQWMsRUFBRTtBQUFBLFFBQ2hELFNBQVMsSUFBSTtBQUFBLE1BQ2Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsY0FBYztBQUFBLElBQ2IsU0FBUyxDQUFDLHlCQUF5Qix1QkFBdUI7QUFBQSxJQUMxRCxTQUFTLENBQUMsb0JBQW9CLFlBQVk7QUFBQSxJQUUxQyxTQUFTLENBQUMsb0JBQW9CLHNCQUFzQjtBQUFBLEVBQ3JEO0FBQUEsRUFDQSxLQUFLO0FBQUEsSUFTSixZQUFZO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQ0QsRUFBRTtBQVlGLFNBQVMsWUFBWSxTQUFxQztBQUN6RCxRQUFNLGVBQWUsT0FBTyxhQUFxQjtBQUNoRCxVQUFNLFdBQVcsUUFBUSxNQUFNO0FBQy9CLFVBQU0sV0FBVyxNQUFNLEdBQUcsU0FBUyxRQUFRLGNBQWMsT0FBTztBQUNoRSxVQUFNLGlCQUFpQixTQUNyQixTQUFTLEVBQ1QsUUFBUSxpQkFBaUIsQ0FBQyxRQUFRLE9BQU8sU0FBVSxHQUFjLEtBQUssRUFBRTtBQUUxRSxXQUFPO0FBQUEsRUFDUjtBQUVBLFNBQU87QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUVULGdCQUFnQixNQUFNO0FBR3JCLFdBQUssWUFBWTtBQUFBLFFBQ2hCO0FBQUEsUUFDQSxZQUFZLElBQUksSUFBSSxVQUFVLHdDQUFlLEVBQUUsVUFBVTtBQUFBLFVBQ3hELE9BQU87QUFBQSxRQUNSLENBQUM7QUFBQSxNQUNGO0FBRUEsV0FBSyxZQUFZLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUztBQXBMbEQ7QUFxTEksY0FBTSxPQUFNLFNBQUksZ0JBQUosbUJBQWlCLFFBQVEsVUFBVTtBQUUvQyxjQUFNLGdCQUFnQiwyQkFBSyxNQUFNLEdBQUcsTUFBTSxLQUFLO0FBRS9DLFlBQUksT0FBTyxpQkFBaUIsS0FBSyxHQUFHLEdBQUc7QUFDdEMsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFFQSxZQUFJLE9BQU8sQ0FBQyxLQUFLLGFBQWEsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUM5QyxjQUFJLFVBQVUsS0FBSyxFQUFFLFVBQVUsTUFBTSxRQUFRLFlBQVksQ0FBQyxFQUFFLElBQUk7QUFBQSxRQUNqRSxXQUdDLGlCQUNBLE9BQ0EsT0FBTyxLQUFLLFFBQVEsS0FBSyxFQUN2QixJQUFJLENBQUMsU0FBUyxJQUFJLFdBQVcsRUFDN0IsU0FBUyxHQUFHLEdBQ2I7QUFDRCxnQkFBTSxXQUFXLGNBQWMsUUFBUSxTQUFTLEVBQUU7QUFDbEQsZ0JBQU0sVUFBVSxNQUFNLEtBQUs7QUFBQSxZQUMxQixNQUFNO0FBQUEsWUFDTixNQUFNLGFBQWEsUUFBUTtBQUFBLFVBQzVCO0FBQ0EsY0FBSSxJQUFJLE9BQU87QUFBQSxRQUNoQixXQUNDLGlCQUNBLE9BQU8sS0FBSyxRQUFRLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUyxrQkFBa0IsSUFBSSxHQUMvRDtBQUNELGdCQUFNLFdBQVc7QUFDakIsZ0JBQU0sVUFBVSxNQUFNLEtBQUs7QUFBQSxZQUMxQjtBQUFBLFlBQ0EsTUFBTSxhQUFhLFFBQVE7QUFBQSxVQUM1QjtBQUNBLGNBQUksSUFBSSxPQUFPO0FBQUEsUUFDaEIsT0FBTztBQUNOLGVBQUs7QUFBQSxRQUNOO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUFBLElBRUEsT0FBTyxRQUFRLEVBQUUsUUFBUSxHQUFHO0FBOU45QjtBQStORyxVQUFJLFlBQVksV0FBVyxHQUFDLFlBQU8sVUFBUCxtQkFBYyxNQUFLO0FBQzlDLGVBQU8sUUFBUTtBQUFBLFVBQ2QsR0FBRyxPQUFPO0FBQUEsVUFDVixlQUFlO0FBQUEsWUFDZCxJQUFHLFlBQU8sVUFBUCxtQkFBYztBQUFBLFlBQ2pCLE9BQU8sT0FBTztBQUFBLGNBQ2IsT0FBTyxLQUFLLFFBQVEsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQUEsZ0JBQ3hDO0FBQUEsZ0JBQ0EsV0FBVztBQUFBLGNBQ1osQ0FBQztBQUFBLFlBQ0Y7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUEsSUFFQSxVQUFVLElBQUk7QUFDYixZQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUN6QyxVQUFJLHFDQUFVLFdBQVcsYUFBYTtBQUNyQyxlQUFPLFNBQVMsUUFBUSxZQUFZLEVBQUU7QUFBQSxNQUN2QztBQUVBLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFQSxNQUFNLEtBQUssSUFBSTtBQUNkLFVBQ0MsT0FBTyxLQUFLLFFBQVEsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxPQUFPLE9BQU8sQ0FBQyxHQUNwRTtBQUNELGVBQU8sTUFBTSxhQUFhLEdBQUcsUUFBUSxXQUFXLEVBQUUsQ0FBQztBQUFBLE1BQ3BEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFDRDtBQUtPLElBQU0sWUFBWSxDQUFDLFNBQWlCO0FBclEzQztBQXNRQyxNQUFJLFVBQTZCLHFCQUFJLElBQUksRUFDdkMsb0JBRCtCLG1CQUNkLE1BQU0sU0FEUSxtQkFFOUIsTUFBTSxRQUZ3QixtQkFFbEI7QUFFZixNQUFJLFdBQVcsU0FBUztBQUN2QixhQUFTLElBQUksSUFBSSxFQUFFO0FBQUEsRUFDcEI7QUFFQSxTQUFPLFVBQVU7QUFDbEI7QUFVTyxJQUFNLHFCQUFxQixDQUFDLFNBQWlCO0FBQ25ELFNBQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxTQUFTLFVBQVUsSUFBSSxDQUFDO0FBQ25EOyIsCiAgIm5hbWVzIjogWyJwYXRoIiwgInJlbGF0aXZlIiwgImluZGV4IiwgInBhdGgiXQp9Cg==