@nlabs/lex 1.52.10 → 1.52.11

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
@@ -14,7 +14,8 @@ function _define_property(obj, key, value) {
14
14
  /**
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
- */ import { existsSync, readFileSync, writeFileSync } from 'fs';
17
+ */ import findFileUp from 'find-file-up';
18
+ import { existsSync, readFileSync, writeFileSync } from 'fs';
18
19
  import { dirname, extname as pathExtname, relative as pathRelative, resolve as pathResolve } from 'path';
19
20
  import { URL } from 'url';
20
21
  import { getDirName, getLexPackageJsonPath, relativeFilePath } from './utils/file.js';
@@ -78,30 +79,94 @@ export const defaultConfigValues = {
78
79
  staticPath: './src/static'
79
80
  }
80
81
  };
82
+ const getPackageDir = ()=>{
83
+ const cwd = process.cwd();
84
+ const currentPkgPath = pathResolve(cwd, 'package.json');
85
+ if (existsSync(currentPkgPath)) {
86
+ try {
87
+ const pkg = JSON.parse(readFileSync(currentPkgPath, 'utf8'));
88
+ if (!pkg.workspaces) {
89
+ return cwd;
90
+ }
91
+ } catch {
92
+ return cwd;
93
+ }
94
+ }
95
+ let searchDir = cwd;
96
+ for(let i = 0; i < 10; i++){
97
+ const pkgPath = pathResolve(searchDir, 'package.json');
98
+ if (existsSync(pkgPath)) {
99
+ try {
100
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
101
+ if (!pkg.workspaces) {
102
+ return searchDir;
103
+ }
104
+ } catch {
105
+ // Continue searching
106
+ }
107
+ }
108
+ const parent = dirname(searchDir);
109
+ if (parent === searchDir) {
110
+ break;
111
+ }
112
+ searchDir = parent;
113
+ }
114
+ const configFormats = [
115
+ 'js',
116
+ 'mjs',
117
+ 'cjs',
118
+ 'ts',
119
+ 'json'
120
+ ];
121
+ for (const format of configFormats){
122
+ const configPath = findFileUp.sync(`lex.config.${format}`, cwd, 5);
123
+ if (configPath) {
124
+ return dirname(configPath);
125
+ }
126
+ }
127
+ return cwd;
128
+ };
81
129
  export const getTypeScriptConfigPath = (configName)=>{
130
+ const packageDir = getPackageDir();
82
131
  const cwd = process.cwd();
83
132
  if (configName === 'tsconfig.build.json') {
84
- const projectBuildConfig = pathResolve(cwd, 'tsconfig.build.json');
133
+ const projectBuildConfig = pathResolve(packageDir, 'tsconfig.build.json');
85
134
  if (existsSync(projectBuildConfig)) {
86
135
  return projectBuildConfig;
87
136
  }
137
+ const rootBuildConfig = pathResolve(cwd, 'tsconfig.build.json');
138
+ if (existsSync(rootBuildConfig)) {
139
+ return rootBuildConfig;
140
+ }
88
141
  }
89
142
  if (configName === 'tsconfig.lint.json') {
90
- const projectLintConfig = pathResolve(cwd, 'tsconfig.eslint.json');
143
+ const projectLintConfig = pathResolve(packageDir, 'tsconfig.eslint.json');
91
144
  if (existsSync(projectLintConfig)) {
92
145
  return projectLintConfig;
93
146
  }
147
+ const rootLintConfig = pathResolve(cwd, 'tsconfig.eslint.json');
148
+ if (existsSync(rootLintConfig)) {
149
+ return rootLintConfig;
150
+ }
94
151
  }
95
152
  if (configName === 'tsconfig.test.json') {
96
- const projectTestConfig = pathResolve(cwd, 'tsconfig.test.json');
153
+ const projectTestConfig = pathResolve(packageDir, 'tsconfig.test.json');
97
154
  if (existsSync(projectTestConfig)) {
98
155
  return projectTestConfig;
99
156
  }
157
+ const rootTestConfig = pathResolve(cwd, 'tsconfig.test.json');
158
+ if (existsSync(rootTestConfig)) {
159
+ return rootTestConfig;
160
+ }
100
161
  }
101
- const projectConfigPath = pathResolve(cwd, configName);
162
+ const projectConfigPath = pathResolve(packageDir, configName);
102
163
  if (existsSync(projectConfigPath)) {
103
164
  return projectConfigPath;
104
165
  }
166
+ const rootConfigPath = pathResolve(cwd, configName);
167
+ if (existsSync(rootConfigPath)) {
168
+ return rootConfigPath;
169
+ }
105
170
  const lexDir = LexConfig.getLexDir();
106
171
  return pathResolve(lexDir, configName);
107
172
  };
@@ -343,4 +408,4 @@ _define_property(LexConfig, "config", {
343
408
  ...defaultConfigValues
344
409
  });
345
410
 
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBleHRuYW1lIGFzIHBhdGhFeHRuYW1lLFxuICByZWxhdGl2ZSBhcyBwYXRoUmVsYXRpdmUsXG4gIHJlc29sdmUgYXMgcGF0aFJlc29sdmVcbn0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1VSTH0gZnJvbSAndXJsJztcblxuaW1wb3J0IHtnZXREaXJOYW1lLCBnZXRMZXhQYWNrYWdlSnNvblBhdGgsIHJlbGF0aXZlRmlsZVBhdGh9IGZyb20gJy4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi91dGlscy9sb2cuanMnO1xuXG5pbXBvcnQgdHlwZSB7T3B0aW9uc30gZnJvbSAnQHN3Yy9jb3JlJztcbmltcG9ydCB0eXBlIHtMaW50ZXJ9IGZyb20gJ2VzbGludCc7XG5cbmNvbnN0IGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKTtcblxuXG5leHBvcnQgaW50ZXJmYWNlIEplc3RDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICByb290cz86IHN0cmluZ1tdO1xuICB0ZXN0RW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gIHRyYW5zZm9ybT86IFJlY29yZDxzdHJpbmcsIFtzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+XT47XG4gIHRyYW5zZm9ybUlnbm9yZVBhdHRlcm5zPzogc3RyaW5nW107XG4gIG1vZHVsZU5hbWVNYXBwZXI/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBleHRlbnNpb25zVG9UcmVhdEFzRXNtPzogc3RyaW5nW107XG4gIHByZXNldD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWJwYWNrQ29uZmlnIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgZW50cnk/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgb3V0cHV0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1vZHVsZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwbHVnaW5zPzogdW5rbm93bltdO1xuICBzdGF0aWNQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJQ29uZmlnIHtcbiAgcHJvdmlkZXI/OiAnY3Vyc29yJyB8ICdjb3BpbG90JyB8ICdvcGVuYWknIHwgJ2FudGhyb3BpYycgfCAnbm9uZSc7XG4gIGFwaUtleT86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIG1heFRva2Vucz86IG51bWJlcjtcbiAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRVNMaW50Q29uZmlnIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgZXh0ZW5kcz86IHN0cmluZ1tdO1xuICBydWxlcz86IExpbnRlci5SdWxlc1JlY29yZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMZXhDb25maWdUeXBlIHtcbiAgYWk/OiBBSUNvbmZpZztcbiAgY29uZmlnRmlsZXM/OiBzdHJpbmdbXTtcbiAgY29weUZpbGVzPzogc3RyaW5nW107XG4gIGVudHJ5SFRNTD86IHN0cmluZztcbiAgZW50cnlKcz86IHN0cmluZztcbiAgZW52Pzogb2JqZWN0O1xuICBlc2xpbnQ/OiBFU0xpbnRDb25maWc7XG4gIGdpdFVybD86IHN0cmluZztcbiAgamVzdD86IEplc3RDb25maWc7XG4gIGxpYnJhcnlOYW1lPzogc3RyaW5nO1xuICBsaWJyYXJ5VGFyZ2V0Pzogc3RyaW5nO1xuICBvdXRwdXRGaWxlPzogc3RyaW5nO1xuICBvdXRwdXRGdWxsUGF0aD86IHN0cmluZztcbiAgb3V0cHV0SGFzaD86IGJvb2xlYW47XG4gIG91dHB1dFBhdGg/OiBzdHJpbmc7XG4gIHBhY2thZ2VNYW5hZ2VyPzogJ25wbScgfCAneWFybic7XG4gIHByZXNldD86ICd3ZWInIHwgJ25vZGUnIHwgJ2xhbWJkYScgfCAnbW9iaWxlJztcbiAgc291cmNlRnVsbFBhdGg/OiBzdHJpbmc7XG4gIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gIHN3Yz86IFNXQ09wdGlvbnM7XG4gIHRhcmdldEVudmlyb25tZW50PzogJ25vZGUnIHwgJ3dlYic7XG4gIHVzZUdyYXBoUWw/OiBib29sZWFuO1xuICB1c2VUeXBlc2NyaXB0PzogYm9vbGVhbjtcbiAgd2VicGFjaz86IFdlYnBhY2tDb25maWc7XG59XG5cbmV4cG9ydCB0eXBlIENvbmZpZyA9IExleENvbmZpZ1R5cGU7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29uZmlnVmFsdWVzOiBMZXhDb25maWdUeXBlID0ge1xuICBhaToge1xuICAgIG1heFRva2VuczogNDAwMCxcbiAgICBtb2RlbDogJ2dwdC00bycsXG4gICAgcHJvdmlkZXI6ICdub25lJyxcbiAgICB0ZW1wZXJhdHVyZTogMC4xXG4gIH0sXG4gIGNvbmZpZ0ZpbGVzOiBbXSxcbiAgY29weUZpbGVzOiBbXSxcbiAgZW50cnlIVE1MOiAnaW5kZXguaHRtbCcsXG4gIGVudHJ5SnM6ICdpbmRleC5qcycsXG4gIGVudjogbnVsbCxcbiAgZXNsaW50OiB7fSxcbiAgamVzdDoge30sXG4gIG91dHB1dEZ1bGxQYXRoOiBwYXRoUmVzb2x2ZShjd2QsICcuL2xpYicpLFxuICBvdXRwdXRIYXNoOiBmYWxzZSxcbiAgb3V0cHV0UGF0aDogJy4vbGliJyxcbiAgcGFja2FnZU1hbmFnZXI6ICducG0nLFxuICBwcmVzZXQ6ICd3ZWInLFxuICBzb3VyY2VGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9zcmMnKSxcbiAgc291cmNlUGF0aDogJy4vc3JjJyxcbiAgc3djOiB7XG4gICAgaW5saW5lU291cmNlc0NvbnRlbnQ6IHRydWUsXG4gICAgaXNNb2R1bGU6IHRydWUsXG4gICAganNjOiB7XG4gICAgICBleHRlcm5hbEhlbHBlcnM6IGZhbHNlLFxuICAgICAga2VlcENsYXNzTmFtZXM6IGZhbHNlLFxuICAgICAgbG9vc2U6IGZhbHNlLFxuICAgICAgcGFyc2VyOiB7XG4gICAgICAgIGRlY29yYXRvcnM6IHRydWUsXG4gICAgICAgIGR5bmFtaWNJbXBvcnQ6IHRydWUsXG4gICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgICB0c3g6IHRydWVcbiAgICAgIH0sXG4gICAgICB0YXJnZXQ6ICdlczIwMjMnLFxuICAgICAgdHJhbnNmb3JtOiB7XG4gICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgcnVudGltZTogJ2F1dG9tYXRpYydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWluaWZ5OiBmYWxzZSxcbiAgICBtb2R1bGU6IHtcbiAgICAgIGxhenk6IGZhbHNlLFxuICAgICAgbm9JbnRlcm9wOiBmYWxzZSxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgICBzdHJpY3RNb2RlOiB0cnVlLFxuICAgICAgdHlwZTogJ2VzNidcbiAgICB9LFxuICAgIHNvdXJjZU1hcHM6ICdpbmxpbmUnXG4gIH0sXG4gIHRhcmdldEVudmlyb25tZW50OiAnd2ViJyxcbiAgdXNlR3JhcGhRbDogZmFsc2UsXG4gIHVzZVR5cGVzY3JpcHQ6IGZhbHNlLFxuICB3ZWJwYWNrOiB7XG4gICAgc3RhdGljUGF0aDogJy4vc3JjL3N0YXRpYydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVTY3JpcHRDb25maWdQYXRoID0gKGNvbmZpZ05hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgaWYoY29uZmlnTmFtZSA9PT0gJ3RzY29uZmlnLmJ1aWxkLmpzb24nKSB7XG4gICAgY29uc3QgcHJvamVjdEJ1aWxkQ29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdEJ1aWxkQ29uZmlnKSkge1xuICAgICAgcmV0dXJuIHByb2plY3RCdWlsZENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcubGludC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RMaW50Q29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuZXNsaW50Lmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RMaW50Q29uZmlnKSkge1xuICAgICAgcmV0dXJuIHByb2plY3RMaW50Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy50ZXN0Lmpzb24nKSB7XG4gICAgY29uc3QgcHJvamVjdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy50ZXN0Lmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RUZXN0Q29uZmlnKSkge1xuICAgICAgcmV0dXJuIHByb2plY3RUZXN0Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByb2plY3RDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWdOYW1lKTtcbiAgaWYoZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkpIHtcbiAgICByZXR1cm4gcHJvamVjdENvbmZpZ1BhdGg7XG4gIH1cblxuICBjb25zdCBsZXhEaXIgPSBMZXhDb25maWcuZ2V0TGV4RGlyKCk7XG4gIHJldHVybiBwYXRoUmVzb2x2ZShsZXhEaXIsIGNvbmZpZ05hbWUpO1xufTtcblxuZXhwb3J0IGNsYXNzIExleENvbmZpZyB7XG4gIHN0YXRpYyBjb25maWc6IExleENvbmZpZ1R5cGUgPSB7XG4gICAgLi4uZGVmYXVsdENvbmZpZ1ZhbHVlc1xuICB9O1xuXG4gIHN0YXRpYyBzZXQgdXNlVHlwZXNjcmlwdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIExleENvbmZpZy5jb25maWcudXNlVHlwZXNjcmlwdCA9IHZhbHVlO1xuICAgIGNvbnN0IHtlbnRyeUpzLCBzb3VyY2VGdWxsUGF0aCwgdGFyZ2V0RW52aXJvbm1lbnR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAgIGlmKGVudHJ5SnMgPT09ICdpbmRleC5qcycgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGluZGV4UGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCwgJ2luZGV4LnRzeCcpO1xuICAgICAgY29uc3QgaGFzSW5kZXhUc3g6IGJvb2xlYW4gPSBleGlzdHNTeW5jKGluZGV4UGF0aCk7XG5cbiAgICAgIGlmKGhhc0luZGV4VHN4KSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50c3gnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lbnRyeUpzID0gJ2luZGV4LnRzJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MucGFyc2VyID0ge1xuICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICB0c3g6IHRydWVcbiAgICB9O1xuXG4gICAgaWYodGFyZ2V0RW52aXJvbm1lbnQgPT09ICd3ZWInKSB7XG4gICAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MudHJhbnNmb3JtID0ge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldExleERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkaXJuYW1lKGdldExleFBhY2thZ2VKc29uUGF0aCgpKTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVDb25maWcodXBkYXRlZENvbmZpZzogTGV4Q29uZmlnVHlwZSk6IExleENvbmZpZ1R5cGUge1xuICAgIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHQsIGFpfSA9IHVwZGF0ZWRDb25maWc7XG4gICAgY29uc3QgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBMZXhDb25maWcudXNlVHlwZXNjcmlwdCA9IHVzZVR5cGVzY3JpcHQ7XG4gICAgfVxuXG4gICAgaWYob3V0cHV0UGF0aCAhPT0gdW5kZWZpbmVkICYmIG91dHB1dEZ1bGxQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZWRDb25maWcub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIG91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZihhaSkge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haSA9IHsuLi5MZXhDb25maWcuY29uZmlnLmFpLCAuLi5haX07XG5cbiAgICAgIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJyAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZywgLi4udXBkYXRlZENvbmZpZ307XG5cbiAgICByZXR1cm4gTGV4Q29uZmlnLmNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhZGRDb25maWdQYXJhbXMoY21kLCBwYXJhbXM6IExleENvbmZpZ1R5cGUpIHtcbiAgICBjb25zdCBuYW1lUHJvcGVydHk6IHN0cmluZyA9ICdfbmFtZSc7XG4gICAgY29uc3Qge2Vudmlyb25tZW50LCBvdXRwdXRQYXRoLCBzb3VyY2VQYXRoLCB0eXBlc2NyaXB0fSA9IGNtZDtcbiAgICBjb25zdCBjdXJyZW50Q3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3VycmVudEN3ZCwgb3V0cHV0UGF0aCk7XG4gICAgfSBlbHNlIGlmKHBhcmFtcy5vdXRwdXRQYXRoICYmICFwYXJhbXMub3V0cHV0RnVsbFBhdGgpIHtcbiAgICAgIHBhcmFtcy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN1cnJlbnRDd2QsIHBhcmFtcy5vdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBpZihzb3VyY2VQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VQYXRoID0gc291cmNlUGF0aDtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN1cnJlbnRDd2QsIHNvdXJjZVBhdGgpO1xuICAgIH0gZWxzZSBpZihwYXJhbXMuc291cmNlUGF0aCAmJiAhcGFyYW1zLnNvdXJjZUZ1bGxQYXRoKSB7XG4gICAgICBwYXJhbXMuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShjdXJyZW50Q3dkLCBwYXJhbXMuc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYodHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudXNlVHlwZXNjcmlwdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYoZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnRhcmdldEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgPT09ICd3ZWInID8gJ3dlYicgOiAnbm9kZSc7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTEVYX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAge1xuICAgICAgICAuLi5MZXhDb25maWcudXBkYXRlQ29uZmlnKHBhcmFtcyksXG4gICAgICAgIGNvbW1hbmROYW1lOiBjbWRbbmFtZVByb3BlcnR5XSxcbiAgICAgICAgaXNTdGF0aWM6IGNtZC5zdGF0aWNcbiAgICAgIH0sIG51bGwsIDBcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlQ29uZmlnKGNtZCwgaXNSb290OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGxleENvbmZpZywgbGV4Q29uZmlnTmFtZSwgcXVpZXQsIHR5cGVzY3JpcHQsIGRlYnVnID0gZmFsc2V9ID0gY21kO1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuICAgIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lOiBzdHJpbmcgPSBsZXhDb25maWdOYW1lIHx8ICdsZXguY29uZmlnJztcbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nID0gbGV4Q29uZmlnIHx8ICcnO1xuICAgIGxldCBjb25maWdFeGlzdHM6IGJvb2xlYW4gPSBsZXhDb25maWcgPyBleGlzdHNTeW5jKGNvbmZpZ1BhdGgpIDogZmFsc2U7XG5cbiAgICBpZighY29uZmlnUGF0aCB8fCAhY29uZmlnRXhpc3RzKSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFNlYXJjaGluZyBmb3IgY29uZmlnIGZpbGVzIHdpdGggYmFzZSBuYW1lOiAke2NvbmZpZ0Jhc2VOYW1lfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBmb3IoY29uc3QgZm9ybWF0IG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IGlzUm9vdFxuICAgICAgICAgID8gcGF0aFJlc29sdmUoY3dkLCBgLi8ke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gKVxuICAgICAgICAgIDogcmVsYXRpdmVGaWxlUGF0aChgJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCwgY3dkKTtcblxuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgQ2hlY2tpbmcgZm9yIGNvbmZpZyBmaWxlOiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihleGlzdHNTeW5jKHBvdGVudGlhbFBhdGgpKSB7XG4gICAgICAgICAgY29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICAgICAgY29uZmlnRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ0V4aXN0cykge1xuICAgICAgbG9nKGBVc2luZyAke2NsaU5hbWV9IGNvbmZpZ3VyYXRpb24gZmlsZTogJHtjb25maWdQYXRofWAsICdub3RlJywgcXVpZXQpO1xuICAgICAgY29uc3QgZXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShjb25maWdQYXRoKTtcblxuICAgICAgaWYoZXh0ID09PSAnLmpzb24nKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQ6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgICAgIGlmKGNvbmZpZ0NvbnRlbnQpIHtcbiAgICAgICAgICBsZXQgY29uZmlnSnNvbjogTGV4Q29uZmlnVHlwZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWdKc29uID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KT8uZGVmYXVsdCB8fCB7fTtcbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBwYXJzZSBKU09OIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnSnNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtYWxmb3JtZWQsICR7Y29uZmlnUGF0aH1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihbJy5qcycsICcubWpzJywgJy5janMnLCAnLnRzJ10uaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihleHQgPT09ICcuY2pzJykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IG5ldyBVUkwoYGZpbGU6Ly8vJHtwYXRoUmVzb2x2ZShjb25maWdQYXRoKX1gKS5ocmVmO1xuXG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgQ29tbW9uSlMgY29uZmlnIGZyb206ICR7ZmlsZVVybH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChmaWxlVXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIEVTTS9UUyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gbGV4Q3VzdG9tQ29uZmlnLmRlZmF1bHQgfHwgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgTG9hZGVkIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKCFjb25maWcpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBDb25maWcgZmlsZSBsb2FkZWQgYnV0IG5vIGNvbmZpZ3VyYXRpb24gZm91bmRgLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbXVzdCBiZSBhIEpTLCBDSlMsIE1KUywgVFMsIG9yIEpTT04gZmlsZS5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZygnTm8gY29uZmlnIGZpbGUgZm91bmQuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSAhIXR5cGVzY3JpcHQ7XG4gICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJy4vdHNjb25maWcuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdQYXRoKSkge1xuICAgICAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcbiAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdQYXRoLCByZWFkRmlsZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uLy4uL3RzY29uZmlnLmJhc2UuanNvbicpKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dFBhdGggfHwgJy4vbGliJztcbiAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VQYXRoIHx8ICcuL3NyYyc7XG4gICAgY29uc3Qgc291cmNlRnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgY29uc3QgcmVsYXRpdmVPdXREaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBvdXRwdXRGdWxsUGF0aCkgfHwgJy4vbGliJztcbiAgICBjb25zdCByZWxhdGl2ZVJvb3REaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCkgfHwgJy4vc3JjJztcblxuICAgIHJldHVybiBbXG4gICAgICAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgLy8gQ1JJVElDQUw6IE9ubHkgZW1pdCAuZC50cyBmaWxlcywgbm8gSlMgZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uJywgLy8gR2VuZXJhdGUgZGVjbGFyYXRpb24gZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uTWFwJywgLy8gR2VuZXJhdGUgc291cmNlIG1hcHMgZm9yIGRlY2xhcmF0aW9uc1xuICAgICAgJy0tb3V0RGlyJywgcmVsYXRpdmVPdXREaXIsXG4gICAgICAnLS1yb290RGlyJywgcmVsYXRpdmVSb290RGlyLFxuICAgICAgJy0tc2tpcExpYkNoZWNrJywgLy8gU2tpcCB0eXBlIGNoZWNraW5nIG9mIGRlY2xhcmF0aW9uIGZpbGVzIChmYXN0ZXIsIG1vcmUgbGVuaWVudClcbiAgICAgICctLWVzTW9kdWxlSW50ZXJvcCcsXG4gICAgICAnLS1hbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzJyxcbiAgICAgICctLW1vZHVsZScsICdOb2RlTmV4dCcsXG4gICAgICAnLS1tb2R1bGVSZXNvbHV0aW9uJywgJ05vZGVOZXh0JyxcbiAgICAgICctLXRhcmdldCcsICdFU05leHQnLFxuICAgICAgJy0tanN4JywgJ3JlYWN0LWpzeCcsXG4gICAgICAnLS1pc29sYXRlZE1vZHVsZXMnLFxuICAgICAgJy0tcmVzb2x2ZUpzb25Nb2R1bGUnLFxuICAgICAgJy0tYWxsb3dKcydcbiAgICAgIC8vIE5vdGU6IC0tbm9VbnVzZWRMb2NhbHMgYW5kIC0tbm9VbnVzZWRQYXJhbWV0ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgICAvLyBhbmQgd291bGQgYWN0dWFsbHkgZW5hYmxlIHN0cmljdCBjaGVja2luZywgd2hpY2ggd2Ugd2FudCB0byBhdm9pZCBmb3IgZmFzdGVyIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNXQ09wdGlvbnMgPSBPcHRpb25zOyJdLCJuYW1lcyI6WyJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwid3JpdGVGaWxlU3luYyIsImRpcm5hbWUiLCJleHRuYW1lIiwicGF0aEV4dG5hbWUiLCJyZWxhdGl2ZSIsInBhdGhSZWxhdGl2ZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsIlVSTCIsImdldERpck5hbWUiLCJnZXRMZXhQYWNrYWdlSnNvblBhdGgiLCJyZWxhdGl2ZUZpbGVQYXRoIiwibG9nIiwiY3dkIiwicHJvY2VzcyIsImRlZmF1bHRDb25maWdWYWx1ZXMiLCJhaSIsIm1heFRva2VucyIsIm1vZGVsIiwicHJvdmlkZXIiLCJ0ZW1wZXJhdHVyZSIsImNvbmZpZ0ZpbGVzIiwiY29weUZpbGVzIiwiZW50cnlIVE1MIiwiZW50cnlKcyIsImVudiIsImVzbGludCIsImplc3QiLCJvdXRwdXRGdWxsUGF0aCIsIm91dHB1dEhhc2giLCJvdXRwdXRQYXRoIiwicGFja2FnZU1hbmFnZXIiLCJwcmVzZXQiLCJzb3VyY2VGdWxsUGF0aCIsInNvdXJjZVBhdGgiLCJzd2MiLCJpbmxpbmVTb3VyY2VzQ29udGVudCIsImlzTW9kdWxlIiwianNjIiwiZXh0ZXJuYWxIZWxwZXJzIiwia2VlcENsYXNzTmFtZXMiLCJsb29zZSIsInBhcnNlciIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0Iiwic3ludGF4IiwidHN4IiwidGFyZ2V0IiwidHJhbnNmb3JtIiwicmVhY3QiLCJydW50aW1lIiwibWluaWZ5IiwibW9kdWxlIiwibGF6eSIsIm5vSW50ZXJvcCIsInN0cmljdCIsInN0cmljdE1vZGUiLCJ0eXBlIiwic291cmNlTWFwcyIsInRhcmdldEVudmlyb25tZW50IiwidXNlR3JhcGhRbCIsInVzZVR5cGVzY3JpcHQiLCJ3ZWJwYWNrIiwic3RhdGljUGF0aCIsImdldFR5cGVTY3JpcHRDb25maWdQYXRoIiwiY29uZmlnTmFtZSIsInByb2plY3RCdWlsZENvbmZpZyIsInByb2plY3RMaW50Q29uZmlnIiwicHJvamVjdFRlc3RDb25maWciLCJwcm9qZWN0Q29uZmlnUGF0aCIsImxleERpciIsIkxleENvbmZpZyIsImdldExleERpciIsInZhbHVlIiwiY29uZmlnIiwiaW5kZXhQYXRoIiwiaGFzSW5kZXhUc3giLCJ1cGRhdGVDb25maWciLCJ1cGRhdGVkQ29uZmlnIiwidW5kZWZpbmVkIiwiQ1VSU09SX0lERSIsImFkZENvbmZpZ1BhcmFtcyIsImNtZCIsInBhcmFtcyIsIm5hbWVQcm9wZXJ0eSIsImVudmlyb25tZW50IiwidHlwZXNjcmlwdCIsImN1cnJlbnRDd2QiLCJMRVhfQ09ORklHIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbW1hbmROYW1lIiwiaXNTdGF0aWMiLCJzdGF0aWMiLCJwYXJzZUNvbmZpZyIsImlzUm9vdCIsImNsaU5hbWUiLCJsZXhDb25maWciLCJsZXhDb25maWdOYW1lIiwicXVpZXQiLCJkZWJ1ZyIsImNvbmZpZ0Zvcm1hdHMiLCJjb25maWdCYXNlTmFtZSIsImNvbmZpZ1BhdGgiLCJjb25maWdFeGlzdHMiLCJmb3JtYXQiLCJwb3RlbnRpYWxQYXRoIiwiZXh0IiwiY29uZmlnQ29udGVudCIsImNvbmZpZ0pzb24iLCJwYXJzZSIsImRlZmF1bHQiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsImxleEN1c3RvbUNvbmZpZyIsImZpbGVVcmwiLCJocmVmIiwiY29uc29sZSIsImNoZWNrVHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnUGF0aCIsImRpck5hbWUiLCJnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncyIsInJlbGF0aXZlT3V0RGlyIiwicmVsYXRpdmVSb290RGlyIiwiY2hlY2tMaW50VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnTGludFBhdGgiLCJ0ZW1wbGF0ZVBhdGgiLCJjaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25m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
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBmaW5kRmlsZVVwIGZyb20gJ2ZpbmQtZmlsZS11cCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSxcbiAgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLFxuICByZXNvbHZlIGFzIHBhdGhSZXNvbHZlXG59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0RGlyTmFtZSwgZ2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge09wdGlvbnN9IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0Q29uZmlnIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgcm9vdHM/OiBzdHJpbmdbXTtcbiAgdGVzdEVudmlyb25tZW50Pzogc3RyaW5nO1xuICB0cmFuc2Zvcm0/OiBSZWNvcmQ8c3RyaW5nLCBbc3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPl0+O1xuICB0cmFuc2Zvcm1JZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xuICBtb2R1bGVOYW1lTWFwcGVyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZXh0ZW5zaW9uc1RvVHJlYXRBc0VzbT86IHN0cmluZ1tdO1xuICBwcmVzZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2VicGFja0NvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGVudHJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIG91dHB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtb2R1bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcGx1Z2lucz86IHVua25vd25bXTtcbiAgc3RhdGljUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUNvbmZpZyB7XG4gIHByb3ZpZGVyPzogJ2N1cnNvcicgfCAnY29waWxvdCcgfCAnb3BlbmFpJyB8ICdhbnRocm9waWMnIHwgJ25vbmUnO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBtYXhUb2tlbnM/OiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGV4Q29uZmlnVHlwZSB7XG4gIGFpPzogQUlDb25maWc7XG4gIGNvbmZpZ0ZpbGVzPzogc3RyaW5nW107XG4gIGNvcHlGaWxlcz86IHN0cmluZ1tdO1xuICBlbnRyeUhUTUw/OiBzdHJpbmc7XG4gIGVudHJ5SnM/OiBzdHJpbmc7XG4gIGVudj86IG9iamVjdDtcbiAgZXNsaW50PzogRVNMaW50Q29uZmlnO1xuICBnaXRVcmw/OiBzdHJpbmc7XG4gIGplc3Q/OiBKZXN0Q29uZmlnO1xuICBsaWJyYXJ5TmFtZT86IHN0cmluZztcbiAgbGlicmFyeVRhcmdldD86IHN0cmluZztcbiAgb3V0cHV0RmlsZT86IHN0cmluZztcbiAgb3V0cHV0RnVsbFBhdGg/OiBzdHJpbmc7XG4gIG91dHB1dEhhc2g/OiBib29sZWFuO1xuICBvdXRwdXRQYXRoPzogc3RyaW5nO1xuICBwYWNrYWdlTWFuYWdlcj86ICducG0nIHwgJ3lhcm4nO1xuICBwcmVzZXQ/OiAnd2ViJyB8ICdub2RlJyB8ICdsYW1iZGEnIHwgJ21vYmlsZSc7XG4gIHNvdXJjZUZ1bGxQYXRoPzogc3RyaW5nO1xuICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICBzd2M/OiBTV0NPcHRpb25zO1xuICB0YXJnZXRFbnZpcm9ubWVudD86ICdub2RlJyB8ICd3ZWInO1xuICB1c2VHcmFwaFFsPzogYm9vbGVhbjtcbiAgdXNlVHlwZXNjcmlwdD86IGJvb2xlYW47XG4gIHdlYnBhY2s/OiBXZWJwYWNrQ29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSBMZXhDb25maWdUeXBlO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ1ZhbHVlczogTGV4Q29uZmlnVHlwZSA9IHtcbiAgYWk6IHtcbiAgICBtYXhUb2tlbnM6IDQwMDAsXG4gICAgbW9kZWw6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnbm9uZScsXG4gICAgdGVtcGVyYXR1cmU6IDAuMVxuICB9LFxuICBjb25maWdGaWxlczogW10sXG4gIGNvcHlGaWxlczogW10sXG4gIGVudHJ5SFRNTDogJ2luZGV4Lmh0bWwnLFxuICBlbnRyeUpzOiAnaW5kZXguanMnLFxuICBlbnY6IG51bGwsXG4gIGVzbGludDoge30sXG4gIGplc3Q6IHt9LFxuICBvdXRwdXRGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9saWInKSxcbiAgb3V0cHV0SGFzaDogZmFsc2UsXG4gIG91dHB1dFBhdGg6ICcuL2xpYicsXG4gIHBhY2thZ2VNYW5hZ2VyOiAnbnBtJyxcbiAgcHJlc2V0OiAnd2ViJyxcbiAgc291cmNlRnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vc3JjJyksXG4gIHNvdXJjZVBhdGg6ICcuL3NyYycsXG4gIHN3Yzoge1xuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIGpzYzoge1xuICAgICAgZXh0ZXJuYWxIZWxwZXJzOiBmYWxzZSxcbiAgICAgIGtlZXBDbGFzc05hbWVzOiBmYWxzZSxcbiAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgIHBhcnNlcjoge1xuICAgICAgICBkZWNvcmF0b3JzOiB0cnVlLFxuICAgICAgICBkeW5hbWljSW1wb3J0OiB0cnVlLFxuICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgdHN4OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiAnZXMyMDIzJyxcbiAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgbW9kdWxlOiB7XG4gICAgICBsYXp5OiBmYWxzZSxcbiAgICAgIG5vSW50ZXJvcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgICAgIHR5cGU6ICdlczYnXG4gICAgfSxcbiAgICBzb3VyY2VNYXBzOiAnaW5saW5lJ1xuICB9LFxuICB0YXJnZXRFbnZpcm9ubWVudDogJ3dlYicsXG4gIHVzZUdyYXBoUWw6IGZhbHNlLFxuICB1c2VUeXBlc2NyaXB0OiBmYWxzZSxcbiAgd2VicGFjazoge1xuICAgIHN0YXRpY1BhdGg6ICcuL3NyYy9zdGF0aWMnXG4gIH1cbn07XG5cbmNvbnN0IGdldFBhY2thZ2VEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgY3VycmVudFBrZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdwYWNrYWdlLmpzb24nKTtcblxuICBpZihleGlzdHNTeW5jKGN1cnJlbnRQa2dQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhjdXJyZW50UGtnUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICBpZighcGtnLndvcmtzcGFjZXMpIHtcbiAgICAgICAgcmV0dXJuIGN3ZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoe1xuICAgICAgcmV0dXJuIGN3ZDtcbiAgICB9XG4gIH1cblxuICBsZXQgc2VhcmNoRGlyID0gY3dkO1xuXG4gIGZvcihsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGhSZXNvbHZlKHNlYXJjaERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGY4JykpO1xuXG4gICAgICAgIGlmKCFwa2cud29ya3NwYWNlcykge1xuICAgICAgICAgIHJldHVybiBzZWFyY2hEaXI7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICAgIC8vIENvbnRpbnVlIHNlYXJjaGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoc2VhcmNoRGlyKTtcblxuICAgIGlmKHBhcmVudCA9PT0gc2VhcmNoRGlyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VhcmNoRGlyID0gcGFyZW50O1xuICB9XG5cbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgY29uZmlnUGF0aCA9IGZpbmRGaWxlVXAuc3luYyhgbGV4LmNvbmZpZy4ke2Zvcm1hdH1gLCBjd2QsIDUpO1xuXG4gICAgaWYoY29uZmlnUGF0aCkge1xuICAgICAgcmV0dXJuIGRpcm5hbWUoY29uZmlnUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGN3ZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCA9IChjb25maWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy5idWlsZC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICd0c2NvbmZpZy5idWlsZC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0QnVpbGRDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdEJ1aWxkQ29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocm9vdEJ1aWxkQ29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RCdWlsZENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcubGludC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RMaW50Q29uZmlnID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0TGludENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHJvb3RMaW50Q29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RMaW50Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy50ZXN0Lmpzb24nKSB7XG4gICAgY29uc3QgcHJvamVjdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0VGVzdENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290VGVzdENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhyb290VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290VGVzdENvbmZpZztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHByb2plY3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3Qgcm9vdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocm9vdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHJvb3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuXG4gIHJldHVybiBwYXRoUmVzb2x2ZShsZXhEaXIsIGNvbmZpZ05hbWUpO1xufTtcblxuZXhwb3J0IGNsYXNzIExleENvbmZpZyB7XG4gIHN0YXRpYyBjb25maWc6IExleENvbmZpZ1R5cGUgPSB7XG4gICAgLi4uZGVmYXVsdENvbmZpZ1ZhbHVlc1xuICB9O1xuXG4gIHN0YXRpYyBzZXQgdXNlVHlwZXNjcmlwdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIExleENvbmZpZy5jb25maWcudXNlVHlwZXNjcmlwdCA9IHZhbHVlO1xuICAgIGNvbnN0IHtlbnRyeUpzLCBzb3VyY2VGdWxsUGF0aCwgdGFyZ2V0RW52aXJvbm1lbnR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAgIGlmKGVudHJ5SnMgPT09ICdpbmRleC5qcycgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGluZGV4UGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCwgJ2luZGV4LnRzeCcpO1xuICAgICAgY29uc3QgaGFzSW5kZXhUc3g6IGJvb2xlYW4gPSBleGlzdHNTeW5jKGluZGV4UGF0aCk7XG5cbiAgICAgIGlmKGhhc0luZGV4VHN4KSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50c3gnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lbnRyeUpzID0gJ2luZGV4LnRzJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MucGFyc2VyID0ge1xuICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICB0c3g6IHRydWVcbiAgICB9O1xuXG4gICAgaWYodGFyZ2V0RW52aXJvbm1lbnQgPT09ICd3ZWInKSB7XG4gICAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MudHJhbnNmb3JtID0ge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldExleERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkaXJuYW1lKGdldExleFBhY2thZ2VKc29uUGF0aCgpKTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVDb25maWcodXBkYXRlZENvbmZpZzogTGV4Q29uZmlnVHlwZSk6IExleENvbmZpZ1R5cGUge1xuICAgIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHQsIGFpfSA9IHVwZGF0ZWRDb25maWc7XG4gICAgY29uc3QgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBMZXhDb25maWcudXNlVHlwZXNjcmlwdCA9IHVzZVR5cGVzY3JpcHQ7XG4gICAgfVxuXG4gICAgaWYob3V0cHV0UGF0aCAhPT0gdW5kZWZpbmVkICYmIG91dHB1dEZ1bGxQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZWRDb25maWcub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIG91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZihhaSkge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haSA9IHsuLi5MZXhDb25maWcuY29uZmlnLmFpLCAuLi5haX07XG5cbiAgICAgIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJyAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZywgLi4udXBkYXRlZENvbmZpZ307XG5cbiAgICByZXR1cm4gTGV4Q29uZmlnLmNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhZGRDb25maWdQYXJhbXMoY21kLCBwYXJhbXM6IExleENvbmZpZ1R5cGUpIHtcbiAgICBjb25zdCBuYW1lUHJvcGVydHk6IHN0cmluZyA9ICdfbmFtZSc7XG4gICAgY29uc3Qge2Vudmlyb25tZW50LCBvdXRwdXRQYXRoLCBzb3VyY2VQYXRoLCB0eXBlc2NyaXB0fSA9IGNtZDtcbiAgICBjb25zdCBjdXJyZW50Q3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3VycmVudEN3ZCwgb3V0cHV0UGF0aCk7XG4gICAgfSBlbHNlIGlmKHBhcmFtcy5vdXRwdXRQYXRoICYmICFwYXJhbXMub3V0cHV0RnVsbFBhdGgpIHtcbiAgICAgIHBhcmFtcy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN1cnJlbnRDd2QsIHBhcmFtcy5vdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBpZihzb3VyY2VQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VQYXRoID0gc291cmNlUGF0aDtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN1cnJlbnRDd2QsIHNvdXJjZVBhdGgpO1xuICAgIH0gZWxzZSBpZihwYXJhbXMuc291cmNlUGF0aCAmJiAhcGFyYW1zLnNvdXJjZUZ1bGxQYXRoKSB7XG4gICAgICBwYXJhbXMuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShjdXJyZW50Q3dkLCBwYXJhbXMuc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYodHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudXNlVHlwZXNjcmlwdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYoZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnRhcmdldEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgPT09ICd3ZWInID8gJ3dlYicgOiAnbm9kZSc7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTEVYX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAge1xuICAgICAgICAuLi5MZXhDb25maWcudXBkYXRlQ29uZmlnKHBhcmFtcyksXG4gICAgICAgIGNvbW1hbmROYW1lOiBjbWRbbmFtZVByb3BlcnR5XSxcbiAgICAgICAgaXNTdGF0aWM6IGNtZC5zdGF0aWNcbiAgICAgIH0sIG51bGwsIDBcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlQ29uZmlnKGNtZCwgaXNSb290OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGxleENvbmZpZywgbGV4Q29uZmlnTmFtZSwgcXVpZXQsIHR5cGVzY3JpcHQsIGRlYnVnID0gZmFsc2V9ID0gY21kO1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuICAgIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lOiBzdHJpbmcgPSBsZXhDb25maWdOYW1lIHx8ICdsZXguY29uZmlnJztcbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nID0gbGV4Q29uZmlnIHx8ICcnO1xuICAgIGxldCBjb25maWdFeGlzdHM6IGJvb2xlYW4gPSBsZXhDb25maWcgPyBleGlzdHNTeW5jKGNvbmZpZ1BhdGgpIDogZmFsc2U7XG5cbiAgICBpZighY29uZmlnUGF0aCB8fCAhY29uZmlnRXhpc3RzKSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFNlYXJjaGluZyBmb3IgY29uZmlnIGZpbGVzIHdpdGggYmFzZSBuYW1lOiAke2NvbmZpZ0Jhc2VOYW1lfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBmb3IoY29uc3QgZm9ybWF0IG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IGlzUm9vdFxuICAgICAgICAgID8gcGF0aFJlc29sdmUoY3dkLCBgLi8ke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gKVxuICAgICAgICAgIDogcmVsYXRpdmVGaWxlUGF0aChgJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCwgY3dkKTtcblxuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgQ2hlY2tpbmcgZm9yIGNvbmZpZyBmaWxlOiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihleGlzdHNTeW5jKHBvdGVudGlhbFBhdGgpKSB7XG4gICAgICAgICAgY29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICAgICAgY29uZmlnRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ0V4aXN0cykge1xuICAgICAgbG9nKGBVc2luZyAke2NsaU5hbWV9IGNvbmZpZ3VyYXRpb24gZmlsZTogJHtjb25maWdQYXRofWAsICdub3RlJywgcXVpZXQpO1xuICAgICAgY29uc3QgZXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShjb25maWdQYXRoKTtcblxuICAgICAgaWYoZXh0ID09PSAnLmpzb24nKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQ6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgICAgIGlmKGNvbmZpZ0NvbnRlbnQpIHtcbiAgICAgICAgICBsZXQgY29uZmlnSnNvbjogTGV4Q29uZmlnVHlwZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWdKc29uID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KT8uZGVmYXVsdCB8fCB7fTtcbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBwYXJzZSBKU09OIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnSnNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtYWxmb3JtZWQsICR7Y29uZmlnUGF0aH1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihbJy5qcycsICcubWpzJywgJy5janMnLCAnLnRzJ10uaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihleHQgPT09ICcuY2pzJykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IG5ldyBVUkwoYGZpbGU6Ly8vJHtwYXRoUmVzb2x2ZShjb25maWdQYXRoKX1gKS5ocmVmO1xuXG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgQ29tbW9uSlMgY29uZmlnIGZyb206ICR7ZmlsZVVybH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChmaWxlVXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIEVTTS9UUyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gbGV4Q3VzdG9tQ29uZmlnLmRlZmF1bHQgfHwgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgTG9hZGVkIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKCFjb25maWcpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBDb25maWcgZmlsZSBsb2FkZWQgYnV0IG5vIGNvbmZpZ3VyYXRpb24gZm91bmRgLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbXVzdCBiZSBhIEpTLCBDSlMsIE1KUywgVFMsIG9yIEpTT04gZmlsZS5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZygnTm8gY29uZmlnIGZpbGUgZm91bmQuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSAhIXR5cGVzY3JpcHQ7XG4gICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJy4vdHNjb25maWcuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdQYXRoKSkge1xuICAgICAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcbiAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdQYXRoLCByZWFkRmlsZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uLy4uL3RzY29uZmlnLmJhc2UuanNvbicpKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dFBhdGggfHwgJy4vbGliJztcbiAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VQYXRoIHx8ICcuL3NyYyc7XG4gICAgY29uc3Qgc291cmNlRnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgY29uc3QgcmVsYXRpdmVPdXREaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBvdXRwdXRGdWxsUGF0aCkgfHwgJy4vbGliJztcbiAgICBjb25zdCByZWxhdGl2ZVJvb3REaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCkgfHwgJy4vc3JjJztcblxuICAgIHJldHVybiBbXG4gICAgICAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgLy8gQ1JJVElDQUw6IE9ubHkgZW1pdCAuZC50cyBmaWxlcywgbm8gSlMgZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uJywgLy8gR2VuZXJhdGUgZGVjbGFyYXRpb24gZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uTWFwJywgLy8gR2VuZXJhdGUgc291cmNlIG1hcHMgZm9yIGRlY2xhcmF0aW9uc1xuICAgICAgJy0tb3V0RGlyJywgcmVsYXRpdmVPdXREaXIsXG4gICAgICAnLS1yb290RGlyJywgcmVsYXRpdmVSb290RGlyLFxuICAgICAgJy0tc2tpcExpYkNoZWNrJywgLy8gU2tpcCB0eXBlIGNoZWNraW5nIG9mIGRlY2xhcmF0aW9uIGZpbGVzIChmYXN0ZXIsIG1vcmUgbGVuaWVudClcbiAgICAgICctLWVzTW9kdWxlSW50ZXJvcCcsXG4gICAgICAnLS1hbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzJyxcbiAgICAgICctLW1vZHVsZScsICdOb2RlTmV4dCcsXG4gICAgICAnLS1tb2R1bGVSZXNvbHV0aW9uJywgJ05vZGVOZXh0JyxcbiAgICAgICctLXRhcmdldCcsICdFU05leHQnLFxuICAgICAgJy0tanN4JywgJ3JlYWN0LWpzeCcsXG4gICAgICAnLS1pc29sYXRlZE1vZHVsZXMnLFxuICAgICAgJy0tcmVzb2x2ZUpzb25Nb2R1bGUnLFxuICAgICAgJy0tYWxsb3dKcydcbiAgICAgIC8vIE5vdGU6IC0tbm9VbnVzZWRMb2NhbHMgYW5kIC0tbm9VbnVzZWRQYXJhbWV0ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgICAvLyBhbmQgd291bGQgYWN0dWFsbHkgZW5hYmxlIHN0cmljdCBjaGVja2luZywgd2hpY2ggd2Ugd2FudCB0byBhdm9pZCBmb3IgZmFzdGVyIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNXQ09wdGlvbnMgPSBPcHRpb25zOyJdLCJuYW1lcyI6WyJmaW5kRmlsZVVwIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsIndyaXRlRmlsZVN5bmMiLCJkaXJuYW1lIiwiZXh0bmFtZSIsInBhdGhFeHRuYW1lIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJVUkwiLCJnZXREaXJOYW1lIiwiZ2V0TGV4UGFja2FnZUpzb25QYXRoIiwicmVsYXRpdmVGaWxlUGF0aCIsImxvZyIsImN3ZCIsInByb2Nlc3MiLCJkZWZhdWx0Q29uZmlnVmFsdWVzIiwiYWkiLCJtYXhUb2tlbnMiLCJtb2RlbCIsInByb3ZpZGVyIiwidGVtcGVyYXR1cmUiLCJjb25maWdGaWxlcyIsImNvcHlGaWxlcyIsImVudHJ5SFRNTCIsImVudHJ5SnMiLCJlbnYiLCJlc2xpbnQiLCJqZXN0Iiwib3V0cHV0RnVsbFBhdGgiLCJvdXRwdXRIYXNoIiwib3V0cHV0UGF0aCIsInBhY2thZ2VNYW5hZ2VyIiwicHJlc2V0Iiwic291cmNlRnVsbFBhdGgiLCJzb3VyY2VQYXRoIiwic3djIiwiaW5saW5lU291cmNlc0NvbnRlbnQiLCJpc01vZHVsZSIsImpzYyIsImV4dGVybmFsSGVscGVycyIsImtlZXBDbGFzc05hbWVzIiwibG9vc2UiLCJwYXJzZXIiLCJkZWNvcmF0b3JzIiwiZHluYW1pY0ltcG9ydCIsInN5bnRheCIsInRzeCIsInRhcmdldCIsInRyYW5zZm9ybSIsInJlYWN0IiwicnVudGltZSIsIm1pbmlmeSIsIm1vZHVsZSIsImxhenkiLCJub0ludGVyb3AiLCJzdHJpY3QiLCJzdHJpY3RNb2RlIiwidHlwZSIsInNvdXJjZU1hcHMiLCJ0YXJnZXRFbnZpcm9ubWVudCIsInVzZUdyYXBoUWwiLCJ1c2VUeXBlc2NyaXB0Iiwid2VicGFjayIsInN0YXRpY1BhdGgiLCJnZXRQYWNrYWdlRGlyIiwiY3VycmVudFBrZ1BhdGgiLCJwa2ciLCJKU09OIiwicGFyc2UiLCJ3b3Jrc3BhY2VzIiwic2VhcmNoRGlyIiwiaSIsInBrZ1BhdGgiLCJwYXJlbnQiLCJjb25maWdGb3JtYXRzIiwiZm9ybWF0IiwiY29uZmlnUGF0aCIsInN5bmMiLCJnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCIsImNvbmZpZ05hbWUiLCJwYWNrYWdlRGlyIiwicHJvamVjdEJ1aWxkQ29uZmlnIiwicm9vdEJ1aWxkQ29uZmlnIiwicHJvamVjdExpbnRDb25maWciLCJyb290TGludENvbmZpZyIsInByb2plY3RUZXN0Q29uZmlnIiwicm9vdFRlc3RDb25maWciLCJwcm9qZWN0Q29uZmlnUGF0aCIsInJvb3RDb25maWdQYXRoIiwibGV4RGlyIiwiTGV4Q29uZmlnIiwiZ2V0TGV4RGlyIiwidmFsdWUiLCJjb25maWciLCJpbmRleFBhdGgiLCJoYXNJbmRleFRzeCIsInVwZGF0ZUNvbmZpZyIsInVwZGF0ZWRDb25maWciLCJ1bmRlZmluZWQiLCJDVVJTT1JfSURFIiwiYWRkQ29uZmlnUGFyYW1zIiwiY21kIiwicGFyYW1zIiwibmFtZVByb3BlcnR5IiwiZW52aXJvbm1lbnQiLCJ0eXBlc2NyaXB0IiwiY3VycmVudEN3ZCIsIkxFWF9DT05GSUciLCJzdHJpbmdpZnkiLCJjb21tYW5kTmFtZSIsImlzU3RhdGljIiwic3RhdGljIiwicGFyc2VDb25maWciLCJpc1Jvb3QiLCJjbGlOYW1lIiwibGV4Q29uZmlnIiwibGV4Q29uZmlnTmFtZSIsInF1aWV0IiwiZGVidWciLCJjb25maWdCYXNlTmFtZSIsImNvbmZpZ0V4aXN0cyIsInBvdGVudGlhbFBhdGgiLCJleHQiLCJjb25maWdDb250ZW50IiwiY29uZmlnSnNvbiIsImRlZmF1bHQiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsImxleEN1c3RvbUNvbmZpZyIsImZpbGVVcmwiLCJocmVmIiwiY29uc29sZSIsImNoZWNrVHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnUGF0aCIsImRpck5hbWUiLCJnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncyIsInJlbGF0aXZlT3V0RGlyIiwicmVsYXRpdmVSb290RGlyIiwiY2hlY2tMaW50VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnTGludFBhdGgiLCJ0ZW1wbGF0ZVBhdGgiLCJjaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdUZXN0UGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOzs7Q0FHQyxHQUNELE9BQU9BLGdCQUFnQixlQUFlO0FBQ3RDLFNBQVFDLFVBQVUsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUMzRCxTQUNFQyxPQUFPLEVBQ1BDLFdBQVdDLFdBQVcsRUFDdEJDLFlBQVlDLFlBQVksRUFDeEJDLFdBQVdDLFdBQVcsUUFDakIsT0FBTztBQUNkLFNBQVFDLEdBQUcsUUFBTyxNQUFNO0FBRXhCLFNBQVFDLFVBQVUsRUFBRUMscUJBQXFCLEVBQUVDLGdCQUFnQixRQUFPLGtCQUFrQjtBQUNwRixTQUFRQyxHQUFHLFFBQU8saUJBQWlCO0FBS25DLE1BQU1DLE1BQWNDLFFBQVFELEdBQUc7QUFrRS9CLE9BQU8sTUFBTUUsc0JBQXFDO0lBQ2hEQyxJQUFJO1FBQ0ZDLFdBQVc7UUFDWEMsT0FBTztRQUNQQyxVQUFVO1FBQ1ZDLGFBQWE7SUFDZjtJQUNBQyxhQUFhLEVBQUU7SUFDZkMsV0FBVyxFQUFFO0lBQ2JDLFdBQVc7SUFDWEMsU0FBUztJQUNUQyxLQUFLO0lBQ0xDLFFBQVEsQ0FBQztJQUNUQyxNQUFNLENBQUM7SUFDUEMsZ0JBQWdCckIsWUFBWU0sS0FBSztJQUNqQ2dCLFlBQVk7SUFDWkMsWUFBWTtJQUNaQyxnQkFBZ0I7SUFDaEJDLFFBQVE7SUFDUkMsZ0JBQWdCMUIsWUFBWU0sS0FBSztJQUNqQ3FCLFlBQVk7SUFDWkMsS0FBSztRQUNIQyxzQkFBc0I7UUFDdEJDLFVBQVU7UUFDVkMsS0FBSztZQUNIQyxpQkFBaUI7WUFDakJDLGdC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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "1.52.10",
3
+ "version": "1.52.11",
4
4
  "description": "Lex",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -93,78 +93,67 @@
93
93
  "@babel/runtime-corejs3": "^7.28.4",
94
94
  "@mdx-js/loader": "^3.1.1",
95
95
  "@nlabs/webpack-plugin-static-site": "*",
96
- "@storybook/addon-docs": "^10.1.6",
97
- "@storybook/addon-links": "^10.1.6",
96
+ "@storybook/addon-docs": "^10.1.10",
97
+ "@storybook/addon-links": "^10.1.10",
98
98
  "@storybook/addon-postcss": "^2.0.0",
99
99
  "@storybook/addon-styling-webpack": "^3.0.0",
100
- "@storybook/addon-themes": "^10.1.6",
100
+ "@storybook/addon-themes": "^10.1.10",
101
101
  "@storybook/addon-webpack5-compiler-babel": "^4.0.0",
102
- "@storybook/cli": "^10.1.6",
103
- "@storybook/react": "^10.1.6",
104
- "@storybook/react-webpack5": "^10.1.6",
105
- "@swc/core": "^1.15.3",
102
+ "@storybook/cli": "^10.1.10",
103
+ "@storybook/react": "^10.1.10",
104
+ "@storybook/react-webpack5": "^10.1.10",
105
+ "@swc/core": "^1.15.7",
106
106
  "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
107
- "@tailwindcss/postcss": "4.1.17",
107
+ "@tailwindcss/postcss": "4.1.18",
108
108
  "@testing-library/jest-dom": "^6.9.1",
109
- "@testing-library/react": "^16.3.0",
110
- "acorn": "^8.15.0",
111
- "ajv": "^8.17.1",
109
+ "@testing-library/react": "^16.3.1",
112
110
  "assert": "^2.1.0",
113
- "autoprefixer": "^10.4.22",
111
+ "autoprefixer": "^10.4.23",
114
112
  "babel-jest": "^30.2.0",
115
113
  "babel-loader": "^10.0.0",
116
- "babel-plugin-module-resolver": "^5.0.2",
117
- "babel-plugin-transform-import-meta": "^2.3.3",
118
114
  "boxen": "8.0.1",
119
115
  "buffer": "^6.0.3",
120
- "caniuse-lite": "1.0.30001760",
116
+ "caniuse-lite": "1.0.30001761",
121
117
  "chalk": "^5.6.2",
122
118
  "commander": "^14.0.2",
123
119
  "compare-versions": "^6.1.1",
124
120
  "compression-webpack-plugin": "^11.1.0",
125
- "config-webpack-plugin": "^1.1.0",
126
121
  "copy-webpack-plugin": "^13.0.1",
127
122
  "core-js": "^3.47.0",
128
123
  "crypto-js": "^4.2.0",
129
124
  "css-loader": "^7.1.2",
130
- "css-minimizer-webpack-plugin": "^7.0.3",
125
+ "css-minimizer-webpack-plugin": "^7.0.4",
131
126
  "cssnano": "^7.1.2",
132
127
  "dotenv-webpack": "^8.1.1",
133
128
  "download-npm-package": "^3.1.12",
134
- "eslint": "^9.39.1",
129
+ "eslint": "^9.39.2",
135
130
  "eslint-config-styleguidejs": "^4.1.12",
136
131
  "execa": "9.6.1",
137
132
  "expect": "^30.2.0",
138
- "exports-loader": "^5.0.0",
139
133
  "express": "^5.2.1",
140
134
  "favicons-webpack-plugin": "^6.0.1",
141
- "file-loader": "^6.2.0",
142
135
  "find-file-up": "^2.0.1",
143
136
  "glob": "^13.0.0",
144
137
  "global": "^4.4.0",
145
138
  "graphql": "^16.12.0",
146
- "graphql-http": "^1.22.4",
147
139
  "graphql-tag": "^2.12.6",
148
140
  "html-loader": "^5.1.0",
149
141
  "html-webpack-plugin": "^5.6.5",
150
142
  "https-browserify": "^1.0.0",
151
143
  "image-webpack-loader": "^8.1.0",
152
- "imports-loader": "^5.0.0",
153
144
  "jest": "^30.2.0",
154
145
  "jest-circus": "^30.2.0",
155
146
  "jest-cli": "^30.2.0",
156
147
  "jest-environment-jsdom": "^30.2.0",
157
148
  "jest-transform-graphql": "2.1.0",
158
149
  "jest-util": "^30.2.0",
159
- "json-d-ts": "1.0.1",
160
150
  "latest-version": "9.0.0",
161
151
  "lodash": "^4.17.21",
162
152
  "luxon": "^3.7.2",
163
153
  "math-expression-evaluator": "^2.0.7",
164
154
  "mini-css-extract-plugin": "^2.9.4",
165
- "net": "^1.0.2",
166
- "npm-check-updates": "^19.1.2",
167
- "openai": "^6.10.0",
155
+ "npm-check-updates": "^19.2.0",
156
+ "openai": "^6.15.0",
168
157
  "ora": "9.0.0",
169
158
  "os-browserify": "^0.3.0",
170
159
  "path-browserify": "^1.0.1",
@@ -186,37 +175,30 @@
186
175
  "postcss-value-parser": "^4.2.0",
187
176
  "process": "^0.11.10",
188
177
  "randombytes": "^2.1.0",
189
- "react": "^19.2.1",
190
- "react-dom": "^19.2.1",
178
+ "react": "^19.2.3",
179
+ "react-dom": "^19.2.3",
191
180
  "regenerator-runtime": "^0.14.1",
192
181
  "resolve": "^1.22.11",
193
182
  "rimraf": "^6.1.2",
194
183
  "semver": "^7.7.3",
195
184
  "source-map-loader": "^5.0.0",
196
- "speed-measure-webpack-plugin": "^1.5.0",
197
- "static-site-generator-webpack-plugin": "3.4.2",
198
- "storybook": "^10.1.6",
185
+ "storybook": "^10.1.10",
199
186
  "stream-browserify": "^3.0.0",
200
187
  "stream-http": "^3.2.0",
201
188
  "style-loader": "^4.0.0",
202
189
  "svg-spritemap-webpack-plugin": "^5.1.0",
203
190
  "svgo": "4.0.0",
204
191
  "swc-loader": "^0.2.6",
205
- "tailwindcss": "^4.1.17",
206
- "tls": "^0.0.1",
192
+ "tailwindcss": "^4.1.18",
207
193
  "ts-node": "^10.9.2",
208
194
  "tsconfig-paths-webpack-plugin": "^4.2.0",
209
195
  "typescript": "5.9.3",
210
- "uncrypto": "^0.1.3",
211
- "unicorn-magic": "^0.4.0",
212
- "url-loader": "^4.1.1",
213
196
  "util": "^0.12.5",
214
197
  "vm-browserify": "^1.1.2",
215
- "webpack": "5.103.0",
198
+ "webpack": "5.104.1",
216
199
  "webpack-bundle-analyzer": "^5.1.0",
217
200
  "webpack-cli": "^6.0.1",
218
201
  "webpack-merge": "^6.0.1",
219
- "webpack-nano": "^1.1.1",
220
202
  "webpack-plugin-serve": "^1.6.0",
221
203
  "ws": "^8.18.3"
222
204
  },
@@ -225,7 +207,7 @@
225
207
  "@types/express": "^5.0.6",
226
208
  "@types/jest": "^30.0.0",
227
209
  "@types/luxon": "^3.7.1",
228
- "@types/node": "^24.10.2",
210
+ "@types/node": "^25.0.3",
229
211
  "@types/ora": "^3.2.0",
230
212
  "@types/react": "^19.2.7",
231
213
  "@types/webpack": "^5.28.5"
@@ -234,9 +216,9 @@
234
216
  "css-loader": "7.1.2"
235
217
  },
236
218
  "overrides": {
237
- "cheerio": "^1.0.0-rc.13",
219
+ "cheerio": "^1.1.2",
238
220
  "cross-spawn": "^7.0.6",
239
- "css-select": "^5.1.0",
221
+ "css-select": "^5.2.2",
240
222
  "got": "^14.6.5",
241
223
  "http-cache-semantics": "^4.2.0",
242
224
  "http-proxy-middleware": "^3.0.5",
package/webpack.config.js CHANGED
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import {StaticSitePlugin} from '@nlabs/webpack-plugin-static-site';
6
6
  import tailwindcss from '@tailwindcss/postcss';
7
+ import tailwindNesting from '@tailwindcss/nesting';
7
8
  import autoprefixer from 'autoprefixer';
8
9
  import CompressionWebpackPlugin from 'compression-webpack-plugin';
9
10
  import CopyWebpackPlugin from 'copy-webpack-plugin';
@@ -465,8 +466,6 @@ export default (webpackEnv, webpackOptions) => {
465
466
  {
466
467
  test: /\.css$/,
467
468
  use: [
468
- // In production, extract CSS to separate files for injection into HTML
469
- // In development, inject CSS via style-loader for HMR
470
469
  ...(isProduction && isWeb
471
470
  ? [{
472
471
  loader: require(miniCssExtractPluginPath).loader
@@ -504,6 +503,7 @@ export default (webpackEnv, webpackOptions) => {
504
503
  strict: false,
505
504
  warnings: false
506
505
  }),
506
+ tailwindNesting(),
507
507
  postcssNesting(),
508
508
  tailwindcss(),
509
509
  autoprefixer(),