@nlabs/lex 1.51.6 → 1.52.0

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/lib/LexConfig.js CHANGED
@@ -15,7 +15,7 @@ function _define_property(obj, key, value) {
15
15
  * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
16
16
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
17
17
  */ import { existsSync, readFileSync, writeFileSync } from 'fs';
18
- import { dirname, extname as pathExtname, resolve as pathResolve } from 'path';
18
+ import { dirname, extname as pathExtname, relative as pathRelative, resolve as pathResolve } from 'path';
19
19
  import { URL } from 'url';
20
20
  import { getDirName, getLexPackageJsonPath, relativeFilePath } from './utils/file.js';
21
21
  import { log } from './utils/log.js';
@@ -42,6 +42,8 @@ export const defaultConfigValues = {
42
42
  sourceFullPath: pathResolve(cwd, './src'),
43
43
  sourcePath: './src',
44
44
  swc: {
45
+ inlineSourcesContent: true,
46
+ isModule: true,
45
47
  jsc: {
46
48
  externalHelpers: false,
47
49
  keepClassNames: false,
@@ -59,6 +61,7 @@ export const defaultConfigValues = {
59
61
  }
60
62
  }
61
63
  },
64
+ minify: false,
62
65
  module: {
63
66
  lazy: false,
64
67
  noInterop: false,
@@ -66,9 +69,6 @@ export const defaultConfigValues = {
66
69
  strictMode: true,
67
70
  type: 'es6'
68
71
  },
69
- inlineSourcesContent: true,
70
- isModule: true,
71
- minify: false,
72
72
  sourceMaps: 'inline'
73
73
  },
74
74
  targetEnvironment: 'web',
@@ -271,15 +271,37 @@ export class LexConfig {
271
271
  writeFileSync(tsconfigPath, readFileSync(pathResolve(dirName, '../../../tsconfig.base.json')));
272
272
  }
273
273
  }
274
- static checkCompileTypescriptConfig() {
275
- const lexDir = LexConfig.getLexDir();
276
- const tsconfigCompilePath = pathResolve(lexDir, './tsconfig.build.json');
277
- if (!existsSync(tsconfigCompilePath)) {
278
- const templatePath = pathResolve(lexDir, 'tsconfig.build.json');
279
- if (existsSync(templatePath)) {
280
- writeFileSync(tsconfigCompilePath, readFileSync(templatePath));
281
- }
282
- }
274
+ static getTypeScriptDeclarationFlags() {
275
+ const cwd = process.cwd();
276
+ const outputPath = LexConfig.config.outputPath || './lib';
277
+ const outputFullPath = LexConfig.config.outputFullPath || pathResolve(cwd, outputPath);
278
+ const sourcePath = LexConfig.config.sourcePath || './src';
279
+ const sourceFullPath = LexConfig.config.sourceFullPath || pathResolve(cwd, sourcePath);
280
+ const relativeOutDir = pathRelative(cwd, outputFullPath) || './lib';
281
+ const relativeRootDir = pathRelative(cwd, sourceFullPath) || './src';
282
+ return [
283
+ '--emitDeclarationOnly',
284
+ '--declaration',
285
+ '--declarationMap',
286
+ '--outDir',
287
+ relativeOutDir,
288
+ '--rootDir',
289
+ relativeRootDir,
290
+ '--skipLibCheck',
291
+ '--esModuleInterop',
292
+ '--allowSyntheticDefaultImports',
293
+ '--module',
294
+ 'NodeNext',
295
+ '--moduleResolution',
296
+ 'NodeNext',
297
+ '--target',
298
+ 'ESNext',
299
+ '--jsx',
300
+ 'react-jsx',
301
+ '--isolatedModules',
302
+ '--resolveJsonModule',
303
+ '--allowJs'
304
+ ];
283
305
  }
284
306
  static checkLintTypescriptConfig() {
285
307
  const lexDir = LexConfig.getLexDir();
@@ -306,4 +328,4 @@ _define_property(LexConfig, "config", {
306
328
  ...defaultConfigValues
307
329
  });
308
330
 
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2Rpcm5hbWUsIGV4dG5hbWUgYXMgcGF0aEV4dG5hbWUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0RGlyTmFtZSwgZ2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge0xpbnRlcn0gZnJvbSAnZXNsaW50JztcblxuY29uc3QgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSmVzdENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIHJvb3RzPzogc3RyaW5nW107XG4gIHRlc3RFbnZpcm9ubWVudD86IHN0cmluZztcbiAgdHJhbnNmb3JtPzogUmVjb3JkPHN0cmluZywgW3N0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj5dPjtcbiAgdHJhbnNmb3JtSWdub3JlUGF0dGVybnM/OiBzdHJpbmdbXTtcbiAgbW9kdWxlTmFtZU1hcHBlcj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGV4dGVuc2lvbnNUb1RyZWF0QXNFc20/OiBzdHJpbmdbXTtcbiAgcHJlc2V0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYnBhY2tDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBlbnRyeT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBvdXRwdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBsdWdpbnM/OiB1bmtub3duW107XG4gIHN0YXRpY1BhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlDb25maWcge1xuICBwcm92aWRlcj86ICdjdXJzb3InIHwgJ2NvcGlsb3QnIHwgJ29wZW5haScgfCAnYW50aHJvcGljJyB8ICdub25lJztcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFU0xpbnRDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBleHRlbmRzPzogc3RyaW5nW107XG4gIHJ1bGVzPzogTGludGVyLlJ1bGVzUmVjb3JkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNXQ0NvbmZpZyB7XG4gIGpzYz86IHtcbiAgICBwYXJzZXI/OiB7XG4gICAgICBzeW50YXg/OiAndHlwZXNjcmlwdCcgfCAnZWNtYXNjcmlwdCc7XG4gICAgICB0c3g/OiBib29sZWFuO1xuICAgICAgZGVjb3JhdG9ycz86IGJvb2xlYW47XG4gICAgICBkeW5hbWljSW1wb3J0PzogYm9vbGVhbjtcbiAgICB9O1xuICAgIHRhcmdldD86ICdlczMnIHwgJ2VzNScgfCAnZXMyMDE1JyB8ICdlczIwMTYnIHwgJ2VzMjAxNycgfCAnZXMyMDE4JyB8ICdlczIwMTknIHwgJ2VzMjAyMCcgfCAnZXMyMDIxJyB8ICdlczIwMjInIHwgJ2VzMjAyMyc7XG4gICAgdHJhbnNmb3JtPzoge1xuICAgICAgcmVhY3Q/OiB7XG4gICAgICAgIHJ1bnRpbWU/OiAnYXV0b21hdGljJyB8ICdjbGFzc2ljJztcbiAgICAgICAgcHJhZ21hPzogc3RyaW5nO1xuICAgICAgICBwcmFnbWFGcmFnPzogc3RyaW5nO1xuICAgICAgICB0aHJvd0lmTmFtZXNwYWNlPzogYm9vbGVhbjtcbiAgICAgICAgZGV2ZWxvcG1lbnQ/OiBib29sZWFuO1xuICAgICAgICB1c2VCdWlsdGlucz86IGJvb2xlYW47XG4gICAgICAgIHJlZnJlc2g/OiBib29sZWFuO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGV4dGVybmFsSGVscGVycz86IGJvb2xlYW47XG4gICAga2VlcENsYXNzTmFtZXM/OiBib29sZWFuO1xuICAgIGxvb3NlPzogYm9vbGVhbjtcbiAgICBtaW5pZnk/OiB7XG4gICAgICBjb21wcmVzcz86IGJvb2xlYW47XG4gICAgICBtYW5nbGU/OiBib29sZWFuO1xuICAgIH07XG4gIH07XG4gIG1vZHVsZT86IHtcbiAgICB0eXBlPzogJ2VzNicgfCAnY29tbW9uanMnIHwgJ2FtZCcgfCAndW1kJyB8ICdzeXN0ZW1qcyc7XG4gICAgc3RyaWN0PzogYm9vbGVhbjtcbiAgICBzdHJpY3RNb2RlPzogYm9vbGVhbjtcbiAgICBsYXp5PzogYm9vbGVhbjtcbiAgICBub0ludGVyb3A/OiBib29sZWFuO1xuICB9O1xuICBtaW5pZnk/OiBib29sZWFuO1xuICBzb3VyY2VNYXBzPzogYm9vbGVhbiB8ICdpbmxpbmUnO1xuICBpbmxpbmVTb3VyY2VzQ29udGVudD86IGJvb2xlYW47XG4gIGlzTW9kdWxlPzogYm9vbGVhbjtcbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIGNvbmZpZ0ZpbGU/OiBzdHJpbmc7XG4gIHN3Y3JjPzogYm9vbGVhbjtcbiAgZW52Pzoge1xuICAgIHRhcmdldHM/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbW9kZT86ICd1c2FnZScgfCAnZW50cnknO1xuICAgIGNvcmVKcz86IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBkeW5hbWljSW1wb3J0PzogYm9vbGVhbjtcbiAgICBsb29zZT86IGJvb2xlYW47XG4gICAgYnVnZml4ZXM/OiBib29sZWFuO1xuICAgIGluY2x1ZGU/OiBzdHJpbmdbXTtcbiAgICBleGNsdWRlPzogc3RyaW5nW107XG4gICAgZm9yY2VBbGxUcmFuc2Zvcm1zPzogYm9vbGVhbjtcbiAgICBtb2R1bGVzPzogJ2FtZCcgfCAndW1kJyB8ICdzeXN0ZW1qcycgfCAnYXV0bycgfCBmYWxzZTtcbiAgICBzaGlwcGVkUHJvcG9zYWxzPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZXhDb25maWdUeXBlIHtcbiAgYWk/OiBBSUNvbmZpZztcbiAgY29uZmlnRmlsZXM/OiBzdHJpbmdbXTtcbiAgY29weUZpbGVzPzogc3RyaW5nW107XG4gIGVudHJ5SFRNTD86IHN0cmluZztcbiAgZW50cnlKcz86IHN0cmluZztcbiAgZW52Pzogb2JqZWN0O1xuICBlc2xpbnQ/OiBFU0xpbnRDb25maWc7XG4gIGdpdFVybD86IHN0cmluZztcbiAgamVzdD86IEplc3RDb25maWc7XG4gIGxpYnJhcnlOYW1lPzogc3RyaW5nO1xuICBsaWJyYXJ5VGFyZ2V0Pzogc3RyaW5nO1xuICBvdXRwdXRGaWxlPzogc3RyaW5nO1xuICBvdXRwdXRGdWxsUGF0aD86IHN0cmluZztcbiAgb3V0cHV0SGFzaD86IGJvb2xlYW47XG4gIG91dHB1dFBhdGg/OiBzdHJpbmc7XG4gIHBhY2thZ2VNYW5hZ2VyPzogJ25wbScgfCAneWFybic7XG4gIHByZXNldD86ICd3ZWInIHwgJ25vZGUnIHwgJ2xhbWJkYScgfCAnbW9iaWxlJztcbiAgc291cmNlRnVsbFBhdGg/OiBzdHJpbmc7XG4gIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gIHN3Yz86IFNXQ0NvbmZpZztcbiAgdGFyZ2V0RW52aXJvbm1lbnQ/OiAnbm9kZScgfCAnd2ViJztcbiAgdXNlR3JhcGhRbD86IGJvb2xlYW47XG4gIHVzZVR5cGVzY3JpcHQ/OiBib29sZWFuO1xuICB3ZWJwYWNrPzogV2VicGFja0NvbmZpZztcbn1cblxuZXhwb3J0IHR5cGUgQ29uZmlnID0gTGV4Q29uZmlnVHlwZTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb25maWdWYWx1ZXM6IExleENvbmZpZ1R5cGUgPSB7XG4gIGFpOiB7XG4gICAgbWF4VG9rZW5zOiA0MDAwLFxuICAgIG1vZGVsOiAnZ3B0LTRvJyxcbiAgICBwcm92aWRlcjogJ25vbmUnLFxuICAgIHRlbXBlcmF0dXJlOiAwLjFcbiAgfSxcbiAgY29uZmlnRmlsZXM6IFtdLFxuICBjb3B5RmlsZXM6IFtdLFxuICBlbnRyeUhUTUw6ICdpbmRleC5odG1sJyxcbiAgZW50cnlKczogJ2luZGV4LmpzJyxcbiAgZW52OiBudWxsLFxuICBlc2xpbnQ6IHt9LFxuICBqZXN0OiB7fSxcbiAgb3V0cHV0RnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vbGliJyksXG4gIG91dHB1dEhhc2g6IGZhbHNlLFxuICBvdXRwdXRQYXRoOiAnLi9saWInLFxuICBwYWNrYWdlTWFuYWdlcjogJ25wbScsXG4gIHByZXNldDogJ3dlYicsXG4gIHNvdXJjZUZ1bGxQYXRoOiBwYXRoUmVzb2x2ZShjd2QsICcuL3NyYycpLFxuICBzb3VyY2VQYXRoOiAnLi9zcmMnLFxuICBzd2M6IHtcbiAgICBqc2M6IHtcbiAgICAgIGV4dGVybmFsSGVscGVyczogZmFsc2UsXG4gICAgICBrZWVwQ2xhc3NOYW1lczogZmFsc2UsXG4gICAgICBsb29zZTogZmFsc2UsXG4gICAgICBwYXJzZXI6IHtcbiAgICAgICAgZGVjb3JhdG9yczogdHJ1ZSxcbiAgICAgICAgZHluYW1pY0ltcG9ydDogdHJ1ZSxcbiAgICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICAgIHRzeDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHRhcmdldDogJ2VzMjAyMCcsXG4gICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICBydW50aW1lOiAnYXV0b21hdGljJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBtb2R1bGU6IHtcbiAgICAgIGxhenk6IGZhbHNlLFxuICAgICAgbm9JbnRlcm9wOiBmYWxzZSxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgICBzdHJpY3RNb2RlOiB0cnVlLFxuICAgICAgdHlwZTogJ2VzNidcbiAgICB9LFxuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgc291cmNlTWFwczogJ2lubGluZSdcbiAgfSxcbiAgdGFyZ2V0RW52aXJvbm1lbnQ6ICd3ZWInLFxuICB1c2VHcmFwaFFsOiBmYWxzZSxcbiAgdXNlVHlwZXNjcmlwdDogZmFsc2UsXG4gIHdlYnBhY2s6IHtcbiAgICBzdGF0aWNQYXRoOiAnLi9zcmMvc3RhdGljJ1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGggPSAoY29uZmlnTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcuYnVpbGQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0QnVpbGRDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy5idWlsZC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0QnVpbGRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdEJ1aWxkQ29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy5saW50Lmpzb24nKSB7XG4gICAgY29uc3QgcHJvamVjdExpbnRDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy5lc2xpbnQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdExpbnRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdExpbnRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgaWYoY29uZmlnTmFtZSA9PT0gJ3RzY29uZmlnLnRlc3QuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0VGVzdENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdFRlc3RDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdFRlc3RDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGNvbmZpZ05hbWUpO1xuICBpZihleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoKSkge1xuICAgIHJldHVybiBwcm9qZWN0Q29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgcmV0dXJuIHBhdGhSZXNvbHZlKGxleERpciwgY29uZmlnTmFtZSk7XG59O1xuXG5leHBvcnQgY2xhc3MgTGV4Q29uZmlnIHtcbiAgc3RhdGljIGNvbmZpZzogTGV4Q29uZmlnVHlwZSA9IHtcbiAgICAuLi5kZWZhdWx0Q29uZmlnVmFsdWVzXG4gIH07XG5cbiAgc3RhdGljIHNldCB1c2VUeXBlc2NyaXB0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgTGV4Q29uZmlnLmNvbmZpZy51c2VUeXBlc2NyaXB0ID0gdmFsdWU7XG4gICAgY29uc3Qge3NvdXJjZUZ1bGxQYXRofSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgICBjb25zdCB7ZW50cnlKc30gPSBMZXhDb25maWcuY29uZmlnO1xuXG4gICAgaWYoZW50cnlKcyA9PT0gJ2luZGV4LmpzJyAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgaW5kZXhQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShjd2QsIHNvdXJjZUZ1bGxQYXRoLCAnaW5kZXgudHN4Jyk7XG4gICAgICBjb25zdCBoYXNJbmRleFRzeDogYm9vbGVhbiA9IGV4aXN0c1N5bmMoaW5kZXhQYXRoKTtcblxuICAgICAgaWYoaGFzSW5kZXhUc3gpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lbnRyeUpzID0gJ2luZGV4LnRzeCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHMnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRMZXhEaXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGlybmFtZShnZXRMZXhQYWNrYWdlSnNvblBhdGgoKSk7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlQ29uZmlnKHVwZGF0ZWRDb25maWc6IExleENvbmZpZ1R5cGUpOiBMZXhDb25maWdUeXBlIHtcbiAgICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIG91dHB1dFBhdGgsIHNvdXJjZVBhdGgsIHNvdXJjZUZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0LCBhaX0gPSB1cGRhdGVkQ29uZmlnO1xuICAgIGNvbnN0IGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgIGlmKHVzZVR5cGVzY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSB1c2VUeXBlc2NyaXB0O1xuICAgIH1cblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCAmJiBvdXRwdXRGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBpZihzb3VyY2VQYXRoICE9PSB1bmRlZmluZWQgJiYgc291cmNlRnVsbFBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXBkYXRlZENvbmZpZy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYoYWkpIHtcbiAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uYWl9O1xuXG4gICAgICBpZihwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScgJiYgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9PT0gJ25vbmUnKSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgPSAnY3Vyc29yJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMZXhDb25maWcuY29uZmlnID0gey4uLkxleENvbmZpZy5jb25maWcsIC4uLnVwZGF0ZWRDb25maWd9O1xuXG4gICAgcmV0dXJuIExleENvbmZpZy5jb25maWc7XG4gIH1cblxuICBzdGF0aWMgYWRkQ29uZmlnUGFyYW1zKGNtZCwgcGFyYW1zOiBMZXhDb25maWdUeXBlKSB7XG4gICAgY29uc3QgbmFtZVByb3BlcnR5OiBzdHJpbmcgPSAnX25hbWUnO1xuICAgIGNvbnN0IHtlbnZpcm9ubWVudCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgdHlwZXNjcmlwdH0gPSBjbWQ7XG5cbiAgICBpZihvdXRwdXRQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5vdXRwdXRQYXRoID0gb3V0cHV0UGF0aDtcbiAgICAgIHBhcmFtcy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgb3V0cHV0UGF0aCk7XG4gICAgfVxuXG4gICAgaWYoc291cmNlUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuc291cmNlUGF0aCA9IHNvdXJjZVBhdGg7XG4gICAgICBwYXJhbXMuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIHNvdXJjZVBhdGgpO1xuICAgIH1cblxuICAgIGlmKHR5cGVzY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnVzZVR5cGVzY3JpcHQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKGVudmlyb25tZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy50YXJnZXRFbnZpcm9ubWVudCA9IGVudmlyb25tZW50ID09PSAnd2ViJyA/ICd3ZWInIDogJ25vZGUnO1xuICAgIH1cblxuICAgIHByb2Nlc3MuZW52LkxFWF9DT05GSUcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHtcbiAgICAgICAgLi4uTGV4Q29uZmlnLnVwZGF0ZUNvbmZpZyhwYXJhbXMpLFxuICAgICAgICBjb21tYW5kTmFtZTogY21kW25hbWVQcm9wZXJ0eV0sXG4gICAgICAgIGlzU3RhdGljOiBjbWQuc3RhdGljXG4gICAgICB9LCBudWxsLCAwXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwYXJzZUNvbmZpZyhjbWQsIGlzUm9vdDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBsZXhDb25maWcsIGxleENvbmZpZ05hbWUsIHF1aWV0LCB0eXBlc2NyaXB0LCBkZWJ1ZyA9IGZhbHNlfSA9IGNtZDtcbiAgICBjb25zdCBjb25maWdGb3JtYXRzID0gWydqcycsICdtanMnLCAnY2pzJywgJ3RzJywgJ2pzb24nXTtcbiAgICBjb25zdCBjb25maWdCYXNlTmFtZTogc3RyaW5nID0gbGV4Q29uZmlnTmFtZSB8fCAnbGV4LmNvbmZpZyc7XG4gICAgbGV0IGNvbmZpZ1BhdGg6IHN0cmluZyA9IGxleENvbmZpZyB8fCAnJztcbiAgICBsZXQgY29uZmlnRXhpc3RzOiBib29sZWFuID0gbGV4Q29uZmlnID8gZXhpc3RzU3luYyhjb25maWdQYXRoKSA6IGZhbHNlO1xuXG4gICAgaWYoIWNvbmZpZ1BhdGggfHwgIWNvbmZpZ0V4aXN0cykge1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBTZWFyY2hpbmcgZm9yIGNvbmZpZyBmaWxlcyB3aXRoIGJhc2UgbmFtZTogJHtjb25maWdCYXNlTmFtZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgICAgIGNvbnN0IHBvdGVudGlhbFBhdGggPSBpc1Jvb3RcbiAgICAgICAgICA/IHBhdGhSZXNvbHZlKGN3ZCwgYC4vJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YClcbiAgICAgICAgICA6IHJlbGF0aXZlRmlsZVBhdGgoYCR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWAsIGN3ZCk7XG5cbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYENoZWNraW5nIGZvciBjb25maWcgZmlsZTogJHtwb3RlbnRpYWxQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZXhpc3RzU3luYyhwb3RlbnRpYWxQYXRoKSkge1xuICAgICAgICAgIGNvbmZpZ1BhdGggPSBwb3RlbnRpYWxQYXRoO1xuICAgICAgICAgIGNvbmZpZ0V4aXN0cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWdFeGlzdHMpIHtcbiAgICAgIGxvZyhgVXNpbmcgJHtjbGlOYW1lfSBjb25maWd1cmF0aW9uIGZpbGU6ICR7Y29uZmlnUGF0aH1gLCAnbm90ZScsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGV4dDogc3RyaW5nID0gcGF0aEV4dG5hbWUoY29uZmlnUGF0aCk7XG5cbiAgICAgIGlmKGV4dCA9PT0gJy5qc29uJykge1xuICAgICAgICBjb25zdCBjb25maWdDb250ZW50OiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgICBpZihjb25maWdDb250ZW50KSB7XG4gICAgICAgICAgbGV0IGNvbmZpZ0pzb246IExleENvbmZpZ1R5cGU7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uZmlnSnNvbiA9IEpTT04ucGFyc2UoY29uZmlnQ29udGVudCk/LmRlZmF1bHQgfHwge307XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gcGFyc2UgSlNPTiBjb25maWc6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICBjb25maWdKc29uID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgTGV4Q29uZmlnLmFkZENvbmZpZ1BhcmFtcyhjbWQsIGNvbmZpZ0pzb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbWFsZm9ybWVkLCAke2NvbmZpZ1BhdGh9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYoWycuanMnLCAnLm1qcycsICcuY2pzJywgJy50cyddLmluY2x1ZGVzKGV4dCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZXh0ID09PSAnLmNqcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSBuZXcgVVJMKGBmaWxlOi8vLyR7cGF0aFJlc29sdmUoY29uZmlnUGF0aCl9YCkuaHJlZjtcblxuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIENvbW1vbkpTIGNvbmZpZyBmcm9tOiAke2ZpbGVVcmx9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoZmlsZVVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgTG9hZGluZyBFU00vVFMgY29uZmlnIGZyb206ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV4Q3VzdG9tQ29uZmlnID0gYXdhaXQgaW1wb3J0KGNvbmZpZ1BhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGxleEN1c3RvbUNvbmZpZy5kZWZhdWx0IHx8IGxleEN1c3RvbUNvbmZpZztcblxuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYExvYWRlZCBjb25maWc6ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZighY29uZmlnKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogQ29uZmlnIGZpbGUgbG9hZGVkIGJ1dCBubyBjb25maWd1cmF0aW9uIGZvdW5kYCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgTGV4Q29uZmlnLmFkZENvbmZpZ1BhcmFtcyhjbWQsIGNvbmZpZyB8fCB7fSk7XG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvbmZpZyBmaWxlIG11c3QgYmUgYSBKUywgQ0pTLCBNSlMsIFRTLCBvciBKU09OIGZpbGUuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coJ05vIGNvbmZpZyBmaWxlIGZvdW5kLiBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIExleENvbmZpZy51c2VUeXBlc2NyaXB0ID0gISF0eXBlc2NyaXB0O1xuICAgICAgTGV4Q29uZmlnLmFkZENvbmZpZ1BhcmFtcyhjbWQsIExleENvbmZpZy5jb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGVja1R5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgdHNjb25maWdQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShjd2QsICcuL3RzY29uZmlnLmpzb24nKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKHRzY29uZmlnUGF0aCkpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSBnZXREaXJOYW1lKCk7XG4gICAgICB3cml0ZUZpbGVTeW5jKHRzY29uZmlnUGF0aCwgcmVhZEZpbGVTeW5jKHBhdGhSZXNvbHZlKGRpck5hbWUsICcuLi8uLi8uLi90c2NvbmZpZy5iYXNlLmpzb24nKSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGVja0NvbXBpbGVUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICBjb25zdCB0c2NvbmZpZ0NvbXBpbGVQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShsZXhEaXIsICcuL3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKHRzY29uZmlnQ29tcGlsZVBhdGgpKSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsICd0c2NvbmZpZy5idWlsZC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0NvbXBpbGVQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59Il0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsImV4dG5hbWUiLCJwYXRoRXh0bmFtZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsIlVSTCIsImdldERpck5hbWUiLCJnZXRMZXhQYWNrYWdlSnNvblBhdGgiLCJyZWxhdGl2ZUZpbGVQYXRoIiwibG9nIiwiY3dkIiwicHJvY2VzcyIsImRlZmF1bHRDb25maWdWYWx1ZXMiLCJhaSIsIm1heFRva2VucyIsIm1vZGVsIiwicHJvdmlkZXIiLCJ0ZW1wZXJhdHVyZSIsImNvbmZpZ0ZpbGVzIiwiY29weUZpbGVzIiwiZW50cnlIVE1MIiwiZW50cnlKcyIsImVudiIsImVzbGludCIsImplc3QiLCJvdXRwdXRGdWxsUGF0aCIsIm91dHB1dEhhc2giLCJvdXRwdXRQYXRoIiwicGFja2FnZU1hbmFnZXIiLCJwcmVzZXQiLCJzb3VyY2VGdWxsUGF0aCIsInNvdXJjZVBhdGgiLCJzd2MiLCJqc2MiLCJleHRlcm5hbEhlbHBlcnMiLCJrZWVwQ2xhc3NOYW1lcyIsImxvb3NlIiwicGFyc2VyIiwiZGVjb3JhdG9ycyIsImR5bmFtaWNJbXBvcnQiLCJzeW50YXgiLCJ0c3giLCJ0YXJnZXQiLCJ0cmFuc2Zvcm0iLCJyZWFjdCIsInJ1bnRpbWUiLCJtb2R1bGUiLCJsYXp5Iiwibm9JbnRlcm9wIiwic3RyaWN0Iiwic3RyaWN0TW9kZSIsInR5cGUiLCJpbmxpbmVTb3VyY2VzQ29udGVudCIsImlzTW9kdWxlIiwibWluaWZ5Iiwic291cmNlTWFwcyIsInRhcmdldEVudmlyb25tZW50IiwidXNlR3JhcGhRbCIsInVzZVR5cGVzY3JpcHQiLCJ3ZWJwYWNrIiwic3RhdGljUGF0aCIsImdldFR5cGVTY3JpcHRDb25maWdQYXRoIiwiY29uZmlnTmFtZSIsInByb2plY3RCdWlsZENvbmZpZyIsInByb2plY3RMaW50Q29uZmlnIiwicHJvamVjdFRlc3RDb25maWciLCJwcm9qZWN0Q29uZmlnUGF0aCIsImxleERpciIsIkxleENvbmZpZyIsImdldExleERpciIsInZhbHVlIiwiY29uZmlnIiwiaW5kZXhQYXRoIiwiaGFzSW5kZXhUc3giLCJ1cGRhdGVDb25maWciLCJ1cGRhdGVkQ29uZmlnIiwidW5kZWZpbmVkIiwiQ1VSU09SX0lERSIsImFkZENvbmZpZ1BhcmFtcyIsImNtZCIsInBhcmFtcyIsIm5hbWVQcm9wZXJ0eSIsImVudmlyb25tZW50IiwidHlwZXNjcmlwdCIsIkxFWF9DT05GSUciLCJKU09OIiwic3RyaW5naWZ5IiwiY29tbWFuZE5hbWUiLCJpc1N0YXRpYyIsInN0YXRpYyIsInBhcnNlQ29uZmlnIiwiaXNSb290IiwiY2xpTmFtZSIsImxleENvbmZpZyIsImxleENvbmZpZ05hbWUiLCJxdWlldCIsImRlYnVnIiwiY29uZmlnRm9ybWF0cyIsImNvbmZpZ0Jhc2VOYW1lIiwiY29uZmlnUGF0aCIsImNvbmZpZ0V4aXN0cyIsImZvcm1hdCIsInBvdGVudGlhbFBhdGgiLCJleHQiLCJjb25maWdDb250ZW50IiwiY29uZmlnSnNvbiIsInBhcnNlIiwiZGVmYXVsdCIsImVycm9yIiwibWVzc2FnZSIsImluY2x1ZGVzIiwibGV4Q3VzdG9tQ29uZmlnIiwiZmlsZVVybCIsImhyZWYiLCJjb25zb2xlIiwiY2hlY2tUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdQYXRoIiwiZGlyTmFtZSIsImNoZWNrQ29tcGlsZVR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ0NvbXBpbGVQYXRoIiwidGVtcGxhdGVQYXRoIiwiY2hlY2tMaW50VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnTGludFBhdGgiLCJjaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdUZXN0UGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUMzRCxTQUFRQyxPQUFPLEVBQUVDLFdBQVdDLFdBQVcsRUFBRUMsV0FBV0MsV0FBVyxRQUFPLE9BQU87QUFDN0UsU0FBUUMsR0FBRyxRQUFPLE1BQU07QUFFeEIs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
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBleHRuYW1lIGFzIHBhdGhFeHRuYW1lLFxuICByZWxhdGl2ZSBhcyBwYXRoUmVsYXRpdmUsXG4gIHJlc29sdmUgYXMgcGF0aFJlc29sdmVcbn0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1VSTH0gZnJvbSAndXJsJztcblxuaW1wb3J0IHtnZXREaXJOYW1lLCBnZXRMZXhQYWNrYWdlSnNvblBhdGgsIHJlbGF0aXZlRmlsZVBhdGh9IGZyb20gJy4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi91dGlscy9sb2cuanMnO1xuXG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0Q29uZmlnIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgcm9vdHM/OiBzdHJpbmdbXTtcbiAgdGVzdEVudmlyb25tZW50Pzogc3RyaW5nO1xuICB0cmFuc2Zvcm0/OiBSZWNvcmQ8c3RyaW5nLCBbc3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPl0+O1xuICB0cmFuc2Zvcm1JZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xuICBtb2R1bGVOYW1lTWFwcGVyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZXh0ZW5zaW9uc1RvVHJlYXRBc0VzbT86IHN0cmluZ1tdO1xuICBwcmVzZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2VicGFja0NvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGVudHJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIG91dHB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtb2R1bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcGx1Z2lucz86IHVua25vd25bXTtcbiAgc3RhdGljUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUNvbmZpZyB7XG4gIHByb3ZpZGVyPzogJ2N1cnNvcicgfCAnY29waWxvdCcgfCAnb3BlbmFpJyB8ICdhbnRocm9waWMnIHwgJ25vbmUnO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBtYXhUb2tlbnM/OiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU1dDQ29uZmlnIHtcbiAganNjPzoge1xuICAgIHBhcnNlcj86IHtcbiAgICAgIHN5bnRheD86ICd0eXBlc2NyaXB0JyB8ICdlY21hc2NyaXB0JztcbiAgICAgIHRzeD86IGJvb2xlYW47XG4gICAgICBkZWNvcmF0b3JzPzogYm9vbGVhbjtcbiAgICAgIGR5bmFtaWNJbXBvcnQ/OiBib29sZWFuO1xuICAgIH07XG4gICAgdGFyZ2V0PzogJ2VzMycgfCAnZXM1JyB8ICdlczIwMTUnIHwgJ2VzMjAxNicgfCAnZXMyMDE3JyB8ICdlczIwMTgnIHwgJ2VzMjAxOScgfCAnZXMyMDIwJyB8ICdlczIwMjEnIHwgJ2VzMjAyMicgfCAnZXMyMDIzJztcbiAgICB0cmFuc2Zvcm0/OiB7XG4gICAgICByZWFjdD86IHtcbiAgICAgICAgcnVudGltZT86ICdhdXRvbWF0aWMnIHwgJ2NsYXNzaWMnO1xuICAgICAgICBwcmFnbWE/OiBzdHJpbmc7XG4gICAgICAgIHByYWdtYUZyYWc/OiBzdHJpbmc7XG4gICAgICAgIHRocm93SWZOYW1lc3BhY2U/OiBib29sZWFuO1xuICAgICAgICBkZXZlbG9wbWVudD86IGJvb2xlYW47XG4gICAgICAgIHVzZUJ1aWx0aW5zPzogYm9vbGVhbjtcbiAgICAgICAgcmVmcmVzaD86IGJvb2xlYW47XG4gICAgICB9O1xuICAgIH07XG4gICAgZXh0ZXJuYWxIZWxwZXJzPzogYm9vbGVhbjtcbiAgICBrZWVwQ2xhc3NOYW1lcz86IGJvb2xlYW47XG4gICAgbG9vc2U/OiBib29sZWFuO1xuICAgIG1pbmlmeT86IHtcbiAgICAgIGNvbXByZXNzPzogYm9vbGVhbjtcbiAgICAgIG1hbmdsZT86IGJvb2xlYW47XG4gICAgfTtcbiAgfTtcbiAgbW9kdWxlPzoge1xuICAgIHR5cGU/OiAnZXM2JyB8ICdjb21tb25qcycgfCAnYW1kJyB8ICd1bWQnIHwgJ3N5c3RlbWpzJztcbiAgICBzdHJpY3Q/OiBib29sZWFuO1xuICAgIHN0cmljdE1vZGU/OiBib29sZWFuO1xuICAgIGxhenk/OiBib29sZWFuO1xuICAgIG5vSW50ZXJvcD86IGJvb2xlYW47XG4gIH07XG4gIG1pbmlmeT86IGJvb2xlYW47XG4gIHNvdXJjZU1hcHM/OiBib29sZWFuIHwgJ2lubGluZSc7XG4gIGlubGluZVNvdXJjZXNDb250ZW50PzogYm9vbGVhbjtcbiAgaXNNb2R1bGU/OiBib29sZWFuO1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgY29uZmlnRmlsZT86IHN0cmluZztcbiAgc3djcmM/OiBib29sZWFuO1xuICBlbnY/OiB7XG4gICAgdGFyZ2V0cz86IHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBtb2RlPzogJ3VzYWdlJyB8ICdlbnRyeSc7XG4gICAgY29yZUpzPzogc3RyaW5nO1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGR5bmFtaWNJbXBvcnQ/OiBib29sZWFuO1xuICAgIGxvb3NlPzogYm9vbGVhbjtcbiAgICBidWdmaXhlcz86IGJvb2xlYW47XG4gICAgaW5jbHVkZT86IHN0cmluZ1tdO1xuICAgIGV4Y2x1ZGU/OiBzdHJpbmdbXTtcbiAgICBmb3JjZUFsbFRyYW5zZm9ybXM/OiBib29sZWFuO1xuICAgIG1vZHVsZXM/OiAnYW1kJyB8ICd1bWQnIHwgJ3N5c3RlbWpzJyB8ICdhdXRvJyB8IGZhbHNlO1xuICAgIHNoaXBwZWRQcm9wb3NhbHM/OiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExleENvbmZpZ1R5cGUge1xuICBhaT86IEFJQ29uZmlnO1xuICBjb25maWdGaWxlcz86IHN0cmluZ1tdO1xuICBjb3B5RmlsZXM/OiBzdHJpbmdbXTtcbiAgZW50cnlIVE1MPzogc3RyaW5nO1xuICBlbnRyeUpzPzogc3RyaW5nO1xuICBlbnY/OiBvYmplY3Q7XG4gIGVzbGludD86IEVTTGludENvbmZpZztcbiAgZ2l0VXJsPzogc3RyaW5nO1xuICBqZXN0PzogSmVzdENvbmZpZztcbiAgbGlicmFyeU5hbWU/OiBzdHJpbmc7XG4gIGxpYnJhcnlUYXJnZXQ/OiBzdHJpbmc7XG4gIG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIG91dHB1dEZ1bGxQYXRoPzogc3RyaW5nO1xuICBvdXRwdXRIYXNoPzogYm9vbGVhbjtcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgcGFja2FnZU1hbmFnZXI/OiAnbnBtJyB8ICd5YXJuJztcbiAgcHJlc2V0PzogJ3dlYicgfCAnbm9kZScgfCAnbGFtYmRhJyB8ICdtb2JpbGUnO1xuICBzb3VyY2VGdWxsUGF0aD86IHN0cmluZztcbiAgc291cmNlUGF0aD86IHN0cmluZztcbiAgc3djPzogU1dDQ29uZmlnO1xuICB0YXJnZXRFbnZpcm9ubWVudD86ICdub2RlJyB8ICd3ZWInO1xuICB1c2VHcmFwaFFsPzogYm9vbGVhbjtcbiAgdXNlVHlwZXNjcmlwdD86IGJvb2xlYW47XG4gIHdlYnBhY2s/OiBXZWJwYWNrQ29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSBMZXhDb25maWdUeXBlO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ1ZhbHVlczogTGV4Q29uZmlnVHlwZSA9IHtcbiAgYWk6IHtcbiAgICBtYXhUb2tlbnM6IDQwMDAsXG4gICAgbW9kZWw6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnbm9uZScsXG4gICAgdGVtcGVyYXR1cmU6IDAuMVxuICB9LFxuICBjb25maWdGaWxlczogW10sXG4gIGNvcHlGaWxlczogW10sXG4gIGVudHJ5SFRNTDogJ2luZGV4Lmh0bWwnLFxuICBlbnRyeUpzOiAnaW5kZXguanMnLFxuICBlbnY6IG51bGwsXG4gIGVzbGludDoge30sXG4gIGplc3Q6IHt9LFxuICBvdXRwdXRGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9saWInKSxcbiAgb3V0cHV0SGFzaDogZmFsc2UsXG4gIG91dHB1dFBhdGg6ICcuL2xpYicsXG4gIHBhY2thZ2VNYW5hZ2VyOiAnbnBtJyxcbiAgcHJlc2V0OiAnd2ViJyxcbiAgc291cmNlRnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vc3JjJyksXG4gIHNvdXJjZVBhdGg6ICcuL3NyYycsXG4gIHN3Yzoge1xuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIGpzYzoge1xuICAgICAgZXh0ZXJuYWxIZWxwZXJzOiBmYWxzZSxcbiAgICAgIGtlZXBDbGFzc05hbWVzOiBmYWxzZSxcbiAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgIHBhcnNlcjoge1xuICAgICAgICBkZWNvcmF0b3JzOiB0cnVlLFxuICAgICAgICBkeW5hbWljSW1wb3J0OiB0cnVlLFxuICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgdHN4OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiAnZXMyMDIwJyxcbiAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgbW9kdWxlOiB7XG4gICAgICBsYXp5OiBmYWxzZSxcbiAgICAgIG5vSW50ZXJvcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgICAgIHR5cGU6ICdlczYnXG4gICAgfSxcbiAgICBzb3VyY2VNYXBzOiAnaW5saW5lJ1xuICB9LFxuICB0YXJnZXRFbnZpcm9ubWVudDogJ3dlYicsXG4gIHVzZUdyYXBoUWw6IGZhbHNlLFxuICB1c2VUeXBlc2NyaXB0OiBmYWxzZSxcbiAgd2VicGFjazoge1xuICAgIHN0YXRpY1BhdGg6ICcuL3NyYy9zdGF0aWMnXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCA9IChjb25maWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy5idWlsZC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0QnVpbGRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgaWYoY29uZmlnTmFtZSA9PT0gJ3RzY29uZmlnLmxpbnQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0TGludENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcudGVzdC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RUZXN0Q29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0VGVzdENvbmZpZztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgY29uZmlnTmFtZSk7XG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHByb2plY3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICByZXR1cm4gcGF0aFJlc29sdmUobGV4RGlyLCBjb25maWdOYW1lKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBMZXhDb25maWcge1xuICBzdGF0aWMgY29uZmlnOiBMZXhDb25maWdUeXBlID0ge1xuICAgIC4uLmRlZmF1bHRDb25maWdWYWx1ZXNcbiAgfTtcblxuICBzdGF0aWMgc2V0IHVzZVR5cGVzY3JpcHQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBMZXhDb25maWcuY29uZmlnLnVzZVR5cGVzY3JpcHQgPSB2YWx1ZTtcbiAgICBjb25zdCB7c291cmNlRnVsbFBhdGh9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAgIGNvbnN0IHtlbnRyeUpzfSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgICBpZihlbnRyeUpzID09PSAnaW5kZXguanMnICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBpbmRleFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlRnVsbFBhdGgsICdpbmRleC50c3gnKTtcbiAgICAgIGNvbnN0IGhhc0luZGV4VHN4OiBib29sZWFuID0gZXhpc3RzU3luYyhpbmRleFBhdGgpO1xuXG4gICAgICBpZihoYXNJbmRleFRzeCkge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHN4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50cyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldExleERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkaXJuYW1lKGdldExleFBhY2thZ2VKc29uUGF0aCgpKTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVDb25maWcodXBkYXRlZENvbmZpZzogTGV4Q29uZmlnVHlwZSk6IExleENvbmZpZ1R5cGUge1xuICAgIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHQsIGFpfSA9IHVwZGF0ZWRDb25maWc7XG4gICAgY29uc3QgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBMZXhDb25maWcudXNlVHlwZXNjcmlwdCA9IHVzZVR5cGVzY3JpcHQ7XG4gICAgfVxuXG4gICAgaWYob3V0cHV0UGF0aCAhPT0gdW5kZWZpbmVkICYmIG91dHB1dEZ1bGxQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZWRDb25maWcub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIG91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZihhaSkge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haSA9IHsuLi5MZXhDb25maWcuY29uZmlnLmFpLCAuLi5haX07XG5cbiAgICAgIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJyAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZywgLi4udXBkYXRlZENvbmZpZ307XG5cbiAgICByZXR1cm4gTGV4Q29uZmlnLmNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhZGRDb25maWdQYXJhbXMoY21kLCBwYXJhbXM6IExleENvbmZpZ1R5cGUpIHtcbiAgICBjb25zdCBuYW1lUHJvcGVydHk6IHN0cmluZyA9ICdfbmFtZSc7XG4gICAgY29uc3Qge2Vudmlyb25tZW50LCBvdXRwdXRQYXRoLCBzb3VyY2VQYXRoLCB0eXBlc2NyaXB0fSA9IGNtZDtcblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBpZihzb3VyY2VQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VQYXRoID0gc291cmNlUGF0aDtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYodHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudXNlVHlwZXNjcmlwdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYoZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnRhcmdldEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgPT09ICd3ZWInID8gJ3dlYicgOiAnbm9kZSc7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTEVYX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAge1xuICAgICAgICAuLi5MZXhDb25maWcudXBkYXRlQ29uZmlnKHBhcmFtcyksXG4gICAgICAgIGNvbW1hbmROYW1lOiBjbWRbbmFtZVByb3BlcnR5XSxcbiAgICAgICAgaXNTdGF0aWM6IGNtZC5zdGF0aWNcbiAgICAgIH0sIG51bGwsIDBcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlQ29uZmlnKGNtZCwgaXNSb290OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGxleENvbmZpZywgbGV4Q29uZmlnTmFtZSwgcXVpZXQsIHR5cGVzY3JpcHQsIGRlYnVnID0gZmFsc2V9ID0gY21kO1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuICAgIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lOiBzdHJpbmcgPSBsZXhDb25maWdOYW1lIHx8ICdsZXguY29uZmlnJztcbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nID0gbGV4Q29uZmlnIHx8ICcnO1xuICAgIGxldCBjb25maWdFeGlzdHM6IGJvb2xlYW4gPSBsZXhDb25maWcgPyBleGlzdHNTeW5jKGNvbmZpZ1BhdGgpIDogZmFsc2U7XG5cbiAgICBpZighY29uZmlnUGF0aCB8fCAhY29uZmlnRXhpc3RzKSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFNlYXJjaGluZyBmb3IgY29uZmlnIGZpbGVzIHdpdGggYmFzZSBuYW1lOiAke2NvbmZpZ0Jhc2VOYW1lfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBmb3IoY29uc3QgZm9ybWF0IG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IGlzUm9vdFxuICAgICAgICAgID8gcGF0aFJlc29sdmUoY3dkLCBgLi8ke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gKVxuICAgICAgICAgIDogcmVsYXRpdmVGaWxlUGF0aChgJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCwgY3dkKTtcblxuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgQ2hlY2tpbmcgZm9yIGNvbmZpZyBmaWxlOiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihleGlzdHNTeW5jKHBvdGVudGlhbFBhdGgpKSB7XG4gICAgICAgICAgY29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICAgICAgY29uZmlnRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ0V4aXN0cykge1xuICAgICAgbG9nKGBVc2luZyAke2NsaU5hbWV9IGNvbmZpZ3VyYXRpb24gZmlsZTogJHtjb25maWdQYXRofWAsICdub3RlJywgcXVpZXQpO1xuICAgICAgY29uc3QgZXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShjb25maWdQYXRoKTtcblxuICAgICAgaWYoZXh0ID09PSAnLmpzb24nKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQ6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgICAgIGlmKGNvbmZpZ0NvbnRlbnQpIHtcbiAgICAgICAgICBsZXQgY29uZmlnSnNvbjogTGV4Q29uZmlnVHlwZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWdKc29uID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KT8uZGVmYXVsdCB8fCB7fTtcbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBwYXJzZSBKU09OIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnSnNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtYWxmb3JtZWQsICR7Y29uZmlnUGF0aH1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihbJy5qcycsICcubWpzJywgJy5janMnLCAnLnRzJ10uaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihleHQgPT09ICcuY2pzJykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IG5ldyBVUkwoYGZpbGU6Ly8vJHtwYXRoUmVzb2x2ZShjb25maWdQYXRoKX1gKS5ocmVmO1xuXG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgQ29tbW9uSlMgY29uZmlnIGZyb206ICR7ZmlsZVVybH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChmaWxlVXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIEVTTS9UUyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gbGV4Q3VzdG9tQ29uZmlnLmRlZmF1bHQgfHwgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgTG9hZGVkIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKCFjb25maWcpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBDb25maWcgZmlsZSBsb2FkZWQgYnV0IG5vIGNvbmZpZ3VyYXRpb24gZm91bmRgLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbXVzdCBiZSBhIEpTLCBDSlMsIE1KUywgVFMsIG9yIEpTT04gZmlsZS5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZygnTm8gY29uZmlnIGZpbGUgZm91bmQuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSAhIXR5cGVzY3JpcHQ7XG4gICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJy4vdHNjb25maWcuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdQYXRoKSkge1xuICAgICAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcbiAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdQYXRoLCByZWFkRmlsZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uLy4uL3RzY29uZmlnLmJhc2UuanNvbicpKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dFBhdGggfHwgJy4vbGliJztcbiAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VQYXRoIHx8ICcuL3NyYyc7XG4gICAgY29uc3Qgc291cmNlRnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgY29uc3QgcmVsYXRpdmVPdXREaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBvdXRwdXRGdWxsUGF0aCkgfHwgJy4vbGliJztcbiAgICBjb25zdCByZWxhdGl2ZVJvb3REaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCkgfHwgJy4vc3JjJztcblxuICAgIHJldHVybiBbXG4gICAgICAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgLy8gQ1JJVElDQUw6IE9ubHkgZW1pdCAuZC50cyBmaWxlcywgbm8gSlMgZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uJywgLy8gR2VuZXJhdGUgZGVjbGFyYXRpb24gZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uTWFwJywgLy8gR2VuZXJhdGUgc291cmNlIG1hcHMgZm9yIGRlY2xhcmF0aW9uc1xuICAgICAgJy0tb3V0RGlyJywgcmVsYXRpdmVPdXREaXIsXG4gICAgICAnLS1yb290RGlyJywgcmVsYXRpdmVSb290RGlyLFxuICAgICAgJy0tc2tpcExpYkNoZWNrJywgLy8gU2tpcCB0eXBlIGNoZWNraW5nIG9mIGRlY2xhcmF0aW9uIGZpbGVzIChmYXN0ZXIsIG1vcmUgbGVuaWVudClcbiAgICAgICctLWVzTW9kdWxlSW50ZXJvcCcsXG4gICAgICAnLS1hbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzJyxcbiAgICAgICctLW1vZHVsZScsICdOb2RlTmV4dCcsXG4gICAgICAnLS1tb2R1bGVSZXNvbHV0aW9uJywgJ05vZGVOZXh0JyxcbiAgICAgICctLXRhcmdldCcsICdFU05leHQnLFxuICAgICAgJy0tanN4JywgJ3JlYWN0LWpzeCcsXG4gICAgICAnLS1pc29sYXRlZE1vZHVsZXMnLFxuICAgICAgJy0tcmVzb2x2ZUpzb25Nb2R1bGUnLFxuICAgICAgJy0tYWxsb3dKcydcbiAgICAgIC8vIE5vdGU6IC0tbm9VbnVzZWRMb2NhbHMgYW5kIC0tbm9VbnVzZWRQYXJhbWV0ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgICAvLyBhbmQgd291bGQgYWN0dWFsbHkgZW5hYmxlIHN0cmljdCBjaGVja2luZywgd2hpY2ggd2Ugd2FudCB0byBhdm9pZCBmb3IgZmFzdGVyIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59Il0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsImV4dG5hbWUiLCJwYXRoRXh0bmFtZSIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiVVJMIiwiZ2V0RGlyTmFtZSIsImdldExleFBhY2thZ2VKc29uUGF0aCIsInJlbGF0aXZlRmlsZVBhdGgiLCJsb2ciLCJjd2QiLCJwcm9jZXNzIiwiZGVmYXVsdENvbmZpZ1ZhbHVlcyIsImFpIiwibWF4VG9rZW5zIiwibW9kZWwiLCJwcm92aWRlciIsInRlbXBlcmF0dXJlIiwiY29uZmlnRmlsZXMiLCJjb3B5RmlsZXMiLCJlbnRyeUhUTUwiLCJlbnRyeUpzIiwiZW52IiwiZXNsaW50IiwiamVzdCIsIm91dHB1dEZ1bGxQYXRoIiwib3V0cHV0SGFzaCIsIm91dHB1dFBhdGgiLCJwYWNrYWdlTWFuYWdlciIsInByZXNldCIsInNvdXJjZUZ1bGxQYXRoIiwic291cmNlUGF0aCIsInN3YyIsImlubGluZVNvdXJjZXNDb250ZW50IiwiaXNNb2R1bGUiLCJqc2MiLCJleHRlcm5hbEhlbHBlcnMiLCJrZWVwQ2xhc3NOYW1lcyIsImxvb3NlIiwicGFyc2VyIiwiZGVjb3JhdG9ycyIsImR5bmFtaWNJbXBvcnQiLCJzeW50YXgiLCJ0c3giLCJ0YXJnZXQiLCJ0cmFuc2Zvcm0iLCJyZWFjdCIsInJ1bnRpbWUiLCJtaW5pZnkiLCJtb2R1bGUiLCJsYXp5Iiwibm9JbnRlcm9wIiwic3RyaWN0Iiwic3RyaWN0TW9kZSIsInR5cGUiLCJzb3VyY2VNYXBzIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsIndlYnBhY2siLCJzdGF0aWNQYXRoIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjb25maWdOYW1lIiwicHJvamVjdEJ1aWxkQ29uZmlnIiwicHJvamVjdExpbnRDb25maWciLCJwcm9qZWN0VGVzdENvbmZpZyIsInByb2plY3RDb25maWdQYXRoIiwibGV4RGlyIiwiTGV4Q29uZmlnIiwiZ2V0TGV4RGlyIiwidmFsdWUiLCJjb25maWciLCJpbmRleFBhdGgiLCJoYXNJbmRleFRzeCIsInVwZGF0ZUNvbmZpZyIsInVwZGF0ZWRDb25maWciLCJ1bmRlZmluZWQiLCJDVVJTT1JfSURFIiwiYWRkQ29uZmlnUGFyYW1zIiwiY21kIiwicGFyYW1zIiwibmFtZVByb3BlcnR5IiwiZW52aXJvbm1lbnQiLCJ0eXBlc2NyaXB0IiwiTEVYX0NPTkZJRyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb21tYW5kTmFtZSIsImlzU3RhdGljIiwic3RhdGljIiwicGFyc2VDb25maWciLCJpc1Jvb3QiLCJjbGlOYW1lIiwibGV4Q29uZmlnIiwibGV4Q29uZmlnTmFtZSIsInF1aWV0IiwiZGVidWciLCJjb25maWdGb3JtYXRzIiwiY29uZmlnQmFzZU5hbWUiLCJjb25maWdQYXRoIiwiY29uZmlnRXhpc3RzIiwiZm9ybWF0IiwicG90ZW50aWFsUGF0aCIsImV4dCIsImNvbmZpZ0NvbnRlbnQiLCJjb25maWdKc29uIiwicGFyc2UiLCJkZWZhdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJsZXhDdXN0b21Db25maWciLCJmaWxlVXJsIiwiaHJlZiIsImNvbnNvbGUiLCJjaGVja1R5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ1BhdGgiLCJkaXJOYW1lIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJyZWxhdGl2ZU91dERpciIsInJlbGF0aXZlUm9vdERpciIsImNoZWNrTGludFR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ0xpbnRQYXRoIiwidGVtcGxhdGVQYXRoIiwiY2hlY2tUZXN0VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnVGVzdFBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxVQUFVLEVBQUVDLFlBQVksRUFBRUMsYUFBYSxRQUFPLEtBQUs7QUFDM0QsU0FDRUMsT0FBTyxFQUNQQyxXQUFXQyxXQUFXLEVBQ3RCQyxZQUFZQyxZQUFZLEVBQ3hCQyxXQUFXQyxXQUFXLFFBQ2pCLE9BQU87QUFDZCxTQUFRQyxHQUFHLFFBQU8sTUFBTTtBQUV4QixTQUFRQyxVQUFVLEVBQUVDLHFCQUFxQixFQUFFQyxnQkFBZ0IsUUFBTyxrQkFBa0I7QUFDcEYsU0FBUUMsR0FBRyxRQUFPLGlCQUFpQjtBQUluQyxNQUFNQyxNQUFjQyxRQUFRRCxHQUFHO0FBNkgvQixPQUFPLE1BQU1FLHNCQUFxQztJQUNoREMsSUFBSTtRQUNGQyxXQUFXO1FBQ1hDLE9BQU87UUFDUEMsVUFBVTtRQUNWQyxhQUFhO0lBQ2Y7SUFDQUMsYUFBYSxFQUFFO0lBQ2ZDLFdBQVcsRUFBRTtJQUNiQyxXQUFXO0lBQ1hDLFNBQVM7SUFDVEMsS0FBSztJQUNMQyxRQUFRLENBQUM7SUFDVEMsTUFBTSxDQUFDO0lBQ1BDLGdCQUFnQnJCLFlBQVlNLEtBQUs7SUFDakNnQixZQUFZO0lBQ1pDLFlBQVk7SUFDWkMsZ0JBQWdCO0lBQ2hCQyxRQUFRO0lBQ1JDLGdCQUFnQjFCLFlBQVlNLEtBQUs7SUFDakNxQixZQUFZO0lBQ1pDLEtBQUs7UUFDSEMsc0JBQXNCO1FBQ3RCQyxVQUFVO1FBQ1ZDLEtBQUs7WUFDSEMsaUJBQWlCO1lBQ2pCQyxnQkFBZ0I7WUFDaEJDLE9BQU87WUFDUEMsUUFBUTtnQkFDTkMsWUFBWTtnQkFDWkMsZUFBZTtnQkFDZkMsUUFBUTtnQkFDUkMsS0FBSztZQUNQO1lBQ0FDLFFBQVE7WUFDUkMsV0FBVztnQkFDVEMsT0FBTztvQkFDTEMsU0FBUztnQkFDWDtZQUNGO1FBQ0Y7UUFDQUMsUUFBUTtRQUNSQyxRQUFRO1lBQ05DLE1BQU07WUFDTkMsV0FBVztZQUNYQyxRQUFRO1lBQ1JDLFlBQVk7WUFDWkMsTUFBTTtRQUNSO1FBQ0FDLFlBQVk7SUFDZDtJQUNBQyxtQkFBbUI7SUFDbkJDLFlBQVk7SUFDWkMsZUFBZTtJQUNmQyxTQUFTO1FBQ1BDLFlBQVk7SUFDZDtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1DLDBCQUEwQixDQUFDQztJQUN0QyxNQUFNcEQsTUFBTUMsUUFBUUQsR0FBRztJQUV2QixJQUFHb0QsZUFBZSx1QkFBdUI7UUFDdkMsTUFBTUMscUJBQXFCM0QsWUFBWU0sS0FBSztRQUM1QyxJQUFHZixXQUFXb0UscUJBQXFCO1lBQ2pDLE9BQU9BO1FBQ1Q7SUFDRjtJQUVBLElBQUdELGVBQWUsc0JBQXNCO1FBQ3RDLE1BQU1FLG9CQUFvQjVELFlBQVlNLEtBQUs7UUFDM0MsSUFBR2YsV0FBV3FFLG9CQUFvQjtZQUNoQyxPQUFPQTtRQUNUO0lBQ0Y7SUFFQSxJQUFHRixlQUFlLHNCQUFzQjtRQUN0QyxNQUFNRyxvQkFBb0I3RCxZQUFZTSxLQUFLO1FBQzNDLElBQUdmLFdBQVdzRSxvQkFBb0I7WUFDaEMsT0FBT0E7UUFDVDtJQUNGO0lBRUEsTUFBTUMsb0JBQW9COUQsWUFBWU0sS0FBS29EO0lBQzNDLElBQUduRSxXQUFXdUUsb0JBQW9CO1FBQ2hDLE9BQU9BO0lBQ1Q7SUFFQSxNQUFNQyxTQUFTQyxVQUFVQyxTQUFTO0lBQ2xDLE9BQU9qRSxZQUFZK0QsUUFBUUw7QUFDN0IsRUFBRTtBQUVGLE9BQU8sTUFBTU07SUFLWCxXQUFXVixjQUFjWSxLQUFjLEVBQUU7UUFDdkNGLFVBQVVHLE1BQU0sQ0FBQ2IsYUFBYSxHQUFHWTtRQUNqQyxNQUFNLEVBQUN4QyxjQUFjLEVBQUMsR0FBR3NDLFVBQVVHLE1BQU07UUFFekMsTUFBTSxFQUFDbEQsT0FBTyxFQUFDLEdBQUcrQyxVQUFVRyxNQUFNO1FBRWxDLElBQUdsRCxZQUFZLGNBQWNpRCxPQUFPO1lBQ2xDLE1BQU1FLFlBQW9CcEUsWUFBWU0sS0FBS29CLGdCQUFnQjtZQUMzRCxNQUFNMkMsY0FBdUI5RSxXQUFXNkU7WUFFeEMsSUFBR0MsYUFBYTtnQkFDZEwsVUFBVUcsTUFBTSxDQUFDbEQsT0FBTyxHQUFHO1lBQzdCLE9BQU87Z0JBQ0wrQyxVQUFVRyxNQUFNLENBQUNsRCxPQUFPLEdBQUc7WUFDN0I7UUFDRjtJQUNGO0lBRUEsT0FBT2dELFlBQW9CO1FBQ3pCLE9BQU92RSxRQUFRUztJQUNqQjtJQUVBLE9BQU9tRSxhQUFhQyxhQUE0QixFQUFpQjtRQUMvRCxNQUFNLEVBQUNsRCxjQUFjLEVBQUVFLFVBQVUsRUFBRUksVUFBVSxFQUFFRCxjQUFjLEVBQUU0QixhQUFhLEVBQUU3QyxFQUFFLEVBQUMsR0FBRzhEO1FBQ3BGLE1BQU1qRSxNQUFjQyxRQUFRRCxHQUFHO1FBRS9CLElBQUdnRCxrQkFBa0JrQixXQUFXO1lBQzlCUixVQUFVVixhQUFhLEdBQUdBO1FBQzVCO1FBRUEsSUFBRy9CLGVBQWVpRCxhQUFhbkQsbUJBQW1CbUQsV0FBVztZQUMzREQsY0FBY2xELGNBQWMsR0FBR3JCLFlBQVlNLEtBQUtpQjtRQUNsRDtRQUVBLElBQUdJLGVBQWU2QyxhQUFhOUMsbUJBQW1COEMsV0FBVztZQUMzREQsY0FBYzdDLGNBQWMsR0FBRzFCLFlBQVlNLEtBQUtxQjtRQUNsRDtRQUVBLElBQUdsQixJQUFJO1lBQ0x1RCxVQUFVRyxNQUFNLENBQUMxRCxFQUFFLEdBQUc7Z0JBQUMsR0FBR3VELFVBQVVHLE1BQU0sQ0FBQzFELEVBQUU7Z0JBQUUsR0FBR0EsRUFBRTtZQUFBO1lBRXBELElBQUdGLFFBQVFXLEdBQUcsQ0FBQ3VELFVBQVUsS0FBSyxVQUFVVCxVQUFVRyxNQUFNLENBQUMxRCxFQUFFLENBQUNHLFFBQVEsS0FBSyxRQUFRO2dCQUMvRW9ELFVBQVVHLE1BQU0sQ0FBQzFELEVBQUUsQ0FBQ0csUUFBUSxHQUFHO1lBQ2pDO1FBQ0Y7UUFFQW9ELFVBQVVHLE1BQU0sR0FBRztZQUFDLEdBQUdILFVBQVVHLE1BQU07WUFBRSxHQUFHSSxhQUFhO1FBQUE7UUFFekQsT0FBT1AsVUFBVUcsTUFBTTtJQUN6QjtJQUVBLE9BQU9PLGdCQUFnQkMsR0FBRyxFQUFFQyxNQUFxQixFQUFFO1FBQ2pELE1BQU1DLGVBQXVCO1FBQzdCLE1BQU0sRUFBQ0MsV0FBVyxFQUFFdkQsVUFBVSxFQUFFSSxVQUFVLEVBQUVvRCxVQUFVLEVBQUMsR0FBR0o7UUFFMUQsSUFBR3BELGVBQWVpRCxXQUFXO1lBQzNCSSxPQUFPckQsVUFBVSxHQUFHQTtZQUNwQnFELE9BQU92RCxjQUFjLEdBQUdyQixZQUFZTSxLQUFLaUI7UUFDM0M7UUFFQSxJQUFHSSxlQUFlNkMsV0FBVztZQUMzQkksT0FBT2pELFVBQVUsR0FBR0E7WUFDcEJpRCxPQUFPbEQsY0FBYyxHQUFHMUIsWUFBWU0sS0FBS3FCO1FBQzNDO1FBRUEsSUFBR29ELGVBQWVQLFdBQVc7WUFDM0JJLE9BQU90QixhQUFhLEdBQUc7UUFDekI7UUFFQSxJQUFHd0IsZ0JBQWdCTixXQUFXO1lBQzVCSSxPQUFPeEIsaUJBQWlCLEdBQUcwQixnQkFBZ0IsUUFBUSxRQUFRO1FBQzdEO1FBRUF2RSxRQUFRVyxHQUFHLENBQUM4RCxVQUFVLEdBQUdDLEtBQUtDLFNBQVMsQ0FDckM7WUFDRSxHQUFHbEIsVUFBVU0sWUFBWSxDQUFDTSxPQUFPO1lBQ2pDTyxhQUFhUixHQUFHLENBQUNFLGFBQWE7WUFDOUJPLFVBQVVULElBQUlVLE1BQU07UUFDdEIsR0FBRyxNQUFNO0lBRWI7SUFFQSxhQUFhQyxZQUFZWCxHQUFHLEVBQUVZLFNBQWtCLElBQUksRUFBaUI7UUFDbkUsTUFBTSxFQUFDQyxVQUFVLEtBQUssRUFBRUMsU0FBUyxFQUFFQyxhQUFhLEVBQUVDLEtBQUssRUFBRVosVUFBVSxFQUFFYSxRQUFRLEtBQUssRUFBQyxHQUFHakI7UUFDdEYsTUFBTWtCLGdCQUFnQjtZQUFDO1lBQU07WUFBTztZQUFPO1lBQU07U0FBTztRQUN4RCxNQUFNQyxpQkFBeUJKLGlCQUFpQjtRQUNoRCxJQUFJSyxhQUFxQk4sYUFBYTtRQUN0QyxJQUFJTyxlQUF3QlAsWUFBWWxHLFdBQVd3RyxjQUFjO1FBRWpFLElBQUcsQ0FBQ0EsY0FBYyxDQUFDQyxjQUFjO1lBQy9CLElBQUdKLE9BQU87Z0JBQ1J2RixJQUFJLENBQUMsMkNBQTJDLEVBQUV5RixnQkFBZ0IsRUFBRSxRQUFRSDtZQUM5RTtZQUVBLEtBQUksTUFBTU0sVUFBVUosY0FBZTtnQkFDakMsTUFBTUssZ0JBQWdCWCxTQUNsQnZGLFlBQVlNLEtBQUssQ0FBQyxFQUFFLEVBQUV3RixlQUFlLENBQUMsRUFBRUcsUUFBUSxJQUNoRDdGLGlCQUFpQixHQUFHMEYsZUFBZSxDQUFDLEVBQUVHLFFBQVEsRUFBRTNGO2dCQUVwRCxJQUFHc0YsT0FBTztvQkFDUnZGLElBQUksQ0FBQywwQkFBMEIsRUFBRTZGLGVBQWUsRUFBRSxRQUFRUDtnQkFDNUQ7Z0JBRUEsSUFBR3BHLFdBQVcyRyxnQkFBZ0I7b0JBQzVCSCxhQUFhRztvQkFDYkYsZUFBZTtvQkFDZjtnQkFDRjtZQUNGO1FBQ0Y7UUFFQSxJQUFHQSxjQUFjO1lBQ2YzRixJQUFJLENBQUMsTUFBTSxFQUFFbUYsUUFBUSxxQkFBcUIsRUFBRU8sWUFBWSxFQUFFLFFBQVFKO1lBQ2xFLE1BQU1RLE1BQWN2RyxZQUFZbUc7WUFFaEMsSUFBR0ksUUFBUSxTQUFTO2dCQUNsQixNQUFNQyxnQkFBd0I1RyxhQUFhdUcsWUFBWTtnQkFFdkQsSUFBR0ssZUFBZTtvQkFDaEIsSUFBSUM7b0JBRUosSUFBSTt3QkFDRkEsYUFBYXBCLEtBQUtxQixLQUFLLENBQUNGLGdCQUFnQkcsV0FBVyxDQUFDO29CQUN0RCxFQUFFLE9BQU1DLE9BQU87d0JBQ2JuRyxJQUFJLENBQUMsRUFBRSxFQUFFbUYsUUFBUSxxQ0FBcUMsRUFBRWdCLE1BQU1DLE9BQU8sRUFBRSxFQUFFLFNBQVNkO3dCQUNsRlUsYUFBYSxDQUFDO29CQUNoQjtvQkFFQXJDLFVBQVVVLGVBQWUsQ0FBQ0MsS0FBSzBCO2dCQUNqQyxPQUFPO29CQUNMaEcsSUFBSSxDQUFDLEVBQUUsRUFBRW1GLFFBQVEsK0JBQStCLEVBQUVPLFlBQVksRUFBRSxTQUFTSjtnQkFDM0U7WUFDRixPQUFPLElBQUc7Z0JBQUM7Z0JBQU87Z0JBQVE7Z0JBQVE7YUFBTSxDQUFDZSxRQUFRLENBQUNQLE1BQU07Z0JBQ3RELElBQUk7b0JBQ0YsSUFBSVE7b0JBRUosSUFBR1IsUUFBUSxRQUFRO3dCQUNqQixNQUFNUyxVQUFVLElBQUkzRyxJQUFJLENBQUMsUUFBUSxFQUFFRCxZQUFZK0YsYUFBYSxFQUFFYyxJQUFJO3dCQUVsRSxJQUFHakIsT0FBTzs0QkFDUnZGLElBQUksQ0FBQyw4QkFBOEIsRUFBRXVHLFNBQVMsRUFBRSxRQUFRakI7d0JBQzFEO3dCQUNBZ0Isa0JBQWtCLE1BQU0sTUFBTSxDQUFDQztvQkFDakMsT0FBTzt3QkFDTCxJQUFHaEIsT0FBTzs0QkFDUnZGLElBQUksQ0FBQyw0QkFBNEIsRUFBRTBGLFlBQVksRUFBRSxRQUFRSjt3QkFDM0Q7d0JBRUFnQixrQkFBa0IsTUFBTSxNQUFNLENBQUNaO29CQUNqQztvQkFFQSxNQUFNNUIsU0FBU3dDLGdCQUFnQkosT0FBTyxJQUFJSTtvQkFFMUMsSUFBR2YsT0FBTzt3QkFDUnZGLElBQUksQ0FBQyxlQUFlLEVBQUU0RSxLQUFLQyxTQUFTLENBQUNmLFFBQVEsTUFBTSxJQUFJLEVBQUUsUUFBUXdCO29CQUNuRTtvQkFFQSxJQUFHLENBQUN4QixRQUFRO3dCQUNWOUQsSUFBSSxDQUFDLEVBQUUsRUFBRW1GLFFBQVEsdURBQXVELENBQUMsRUFBRSxRQUFRRztvQkFDckY7b0JBRUEzQixVQUFVVSxlQUFlLENBQUNDLEtBQUtSLFVBQVUsQ0FBQztnQkFDNUMsRUFBRSxPQUFNcUMsT0FBTztvQkFDYm5HLElBQUksQ0FBQyxFQUFFLEVBQUVtRixRQUFRLG9DQUFvQyxFQUFFZ0IsTUFBTUMsT0FBTyxFQUFFLEVBQUUsU0FBU2Q7b0JBQ2pGLElBQUdDLE9BQU87d0JBQ1Isc0NBQXNDO3dCQUN0Q2tCLFFBQVFOLEtBQUssQ0FBQ0E7b0JBQ2hCO2dCQUNGO1lBQ0YsT0FBTztnQkFDTG5HLElBQUksQ0FBQyxFQUFFLEVBQUVtRixRQUFRLDZEQUE2RCxDQUFDLEVBQUUsU0FBU0c7WUFDNUY7UUFDRixPQUFPO1lBQ0wsSUFBR0MsT0FBTztnQkFDUnZGLElBQUksc0RBQXNELFFBQVFzRjtZQUNwRTtZQUVBM0IsVUFBVVYsYUFBYSxHQUFHLENBQUMsQ0FBQ3lCO1lBQzVCZixVQUFVVSxlQUFlLENBQUNDLEtBQUtYLFVBQVVHLE1BQU07UUFDakQ7SUFDRjtJQUVBLE9BQU80Qyx3QkFBd0I7UUFDN0IsTUFBTUMsZUFBdUJoSCxZQUFZTSxLQUFLO1FBRTlDLElBQUcsQ0FBQ2YsV0FBV3lILGVBQWU7WUFDNUIsTUFBTUMsVUFBVS9HO1lBQ2hCVCxjQUFjdUgsY0FBY3hILGFBQWFRLFlBQVlpSCxTQUFTO1FBQ2hFO0lBQ0Y7SUFFQSxPQUFPQyxnQ0FBMEM7UUFDL0MsTUFBTTVHLE1BQU1DLFFBQVFELEdBQUc7UUFDdkIsTUFBTWlCLGFBQWF5QyxVQUFVRyxNQUFNLENBQUM1QyxVQUFVLElBQUk7UUFDbEQsTUFBTUYsaUJBQWlCMkMsVUFBVUcsTUFBTSxDQUFDOUMsY0FBYyxJQUFJckIsWUFBWU0sS0FBS2lCO1FBQzNFLE1BQU1JLGFBQWFxQyxVQUFVRyxNQUFNLENBQUN4QyxVQUFVLElBQUk7UUFDbEQsTUFBTUQsaUJBQWlCc0MsVUFBVUcsTUFBTSxDQUFDekMsY0FBYyxJQUFJMUIsWUFBWU0sS0FBS3FCO1FBQzNFLE1BQU13RixpQkFBaUJySCxhQUFhUSxLQUFLZSxtQkFBbUI7UUFDNUQsTUFBTStGLGtCQUFrQnRILGFBQWFRLEtBQUtvQixtQkFBbUI7UUFFN0QsT0FBTztZQUNMO1lBQ0E7WUFDQTtZQUNBO1lBQVl5RjtZQUNaO1lBQWFDO1lBQ2I7WUFDQTtZQUNBO1lBQ0E7WUFBWTtZQUNaO1lBQXNCO1lBQ3RCO1lBQVk7WUFDWjtZQUFTO1lBQ1Q7WUFDQTtZQUNBO1NBR0Q7SUFDSDtJQUVBLE9BQU9DLDRCQUE0QjtRQUNqQyxNQUFNdEQsU0FBU0MsVUFBVUMsU0FBUztRQUNsQyxNQUFNcUQsbUJBQTJCdEgsWUFBWStELFFBQVE7UUFFckQsSUFBRyxDQUFDeEUsV0FBVytILG1CQUFtQjtZQUNoQyxNQUFNQyxlQUFldkgsWUFBWStELFFBQVE7WUFDekMsSUFBR3hFLFdBQVdnSSxlQUFlO2dCQUMzQjlILGNBQWM2SCxrQkFBa0I5SCxhQUFhK0g7WUFDL0M7UUFDRjtJQUNGO0lBRUEsT0FBT0MsNEJBQTRCO1FBQ2pDLE1BQU16RCxTQUFTQyxVQUFVQyxTQUFTO1FBQ2xDLE1BQU13RCxtQkFBMkJ6SCxZQUFZK0QsUUFBUTtRQUVyRCxJQUFHLENBQUN4RSxXQUFXa0ksbUJBQW1CO1lBQ2hDLE1BQU1GLGVBQWV2SCxZQUFZK0QsUUFBUTtZQUN6QyxJQUFHeEUsV0FBV2dJLGVBQWU7Z0JBQzNCOUgsY0FBY2dJLGtCQUFrQmpJLGFBQWErSDtZQUMvQztRQUNGO0lBQ0Y7QUFDRjtBQXhQRSxpQkFEV3ZELFdBQ0pHLFVBQXdCO0lBQzdCLEdBQUczRCxtQkFBbUI7QUFDeEIifQ==