@mnaoumov/typescript-dev-toolkit 1.1.0 → 1.3.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.
Files changed (155) hide show
  1. package/dist/lib/cjs/build.cjs +2 -24
  2. package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.cjs +2 -24
  3. package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +1 -56
  4. package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.cjs +4 -25
  5. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +6 -61
  6. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +129 -27
  7. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +3 -1
  8. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +3 -25
  9. package/dist/lib/cjs/bundlers/index.cjs +2 -57
  10. package/dist/lib/cjs/check-project-types.cjs +3 -25
  11. package/dist/lib/cjs/cli-utils.cjs +5 -33
  12. package/dist/lib/cjs/cli-utils.d.cts +1 -1
  13. package/dist/lib/cjs/code-generator.cjs +1 -56
  14. package/dist/lib/cjs/commitlint-config.cjs +2 -24
  15. package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +1 -56
  16. package/dist/lib/cjs/commitlint-spellcheck-header.cjs +1 -56
  17. package/dist/lib/cjs/env-toggle.cjs +14 -25
  18. package/dist/lib/cjs/env-toggle.d.cts +7 -0
  19. package/dist/lib/cjs/exec.cjs +3 -25
  20. package/dist/lib/cjs/exec.d.cts +1 -0
  21. package/dist/lib/cjs/forbidden-patterns.cjs +3 -25
  22. package/dist/lib/cjs/formatters/dprint.cjs +2 -24
  23. package/dist/lib/cjs/formatters/index.cjs +2 -57
  24. package/dist/lib/cjs/fs.cjs +2 -24
  25. package/dist/lib/cjs/fs.d.cts +1 -0
  26. package/dist/lib/cjs/gate.cjs +1 -56
  27. package/dist/lib/cjs/git.cjs +42 -58
  28. package/dist/lib/cjs/git.d.cts +29 -0
  29. package/dist/lib/cjs/index.cjs +31 -86
  30. package/dist/lib/cjs/json.cjs +2 -24
  31. package/dist/lib/cjs/library-build.cjs +92 -34
  32. package/dist/lib/cjs/library-build.d.cts +10 -4
  33. package/dist/lib/cjs/library-references.d.cts +0 -3
  34. package/dist/lib/cjs/linters/cspell-content.cjs +2 -24
  35. package/dist/lib/cjs/linters/cspell.cjs +1 -56
  36. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +1 -56
  37. package/dist/lib/cjs/linters/eslint-config.cjs +8 -30
  38. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +1 -56
  39. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +1 -56
  40. package/dist/lib/cjs/linters/eslint-rules/index.cjs +13 -68
  41. package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +2 -24
  42. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +2 -24
  43. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +2 -24
  44. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +2 -24
  45. package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +1 -56
  46. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +1 -56
  47. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +2 -24
  48. package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +2 -24
  49. package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +2 -24
  50. package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +1 -56
  51. package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +2 -24
  52. package/dist/lib/cjs/linters/eslint.cjs +2 -24
  53. package/dist/lib/cjs/linters/index.cjs +15 -70
  54. package/dist/lib/cjs/linters/lint-ignores.cjs +2 -24
  55. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +3 -25
  56. package/dist/lib/cjs/linters/markdownlint-content.cjs +2 -24
  57. package/dist/lib/cjs/linters/markdownlint-ignores.cjs +1 -56
  58. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +2 -57
  59. package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +1 -56
  60. package/dist/lib/cjs/linters/markdownlint.cjs +5 -26
  61. package/dist/lib/cjs/linters/markdownlint.d.cts +11 -0
  62. package/dist/lib/cjs/linters/over-exposure.cjs +2 -24
  63. package/dist/lib/cjs/nano-staged-config.cjs +2 -57
  64. package/dist/lib/cjs/npm-publish.cjs +1 -56
  65. package/dist/lib/cjs/npm-run.cjs +2 -24
  66. package/dist/lib/cjs/npm.cjs +2 -24
  67. package/dist/lib/cjs/package-lock-integrity.cjs +1 -56
  68. package/dist/lib/cjs/package-manager.cjs +3 -25
  69. package/dist/lib/cjs/released-issues.cjs +2 -24
  70. package/dist/lib/cjs/repo-paths.cjs +1 -56
  71. package/dist/lib/cjs/root.cjs +2 -24
  72. package/dist/lib/cjs/test-runners/index.cjs +3 -58
  73. package/dist/lib/cjs/test-runners/vitest-config.cjs +1 -56
  74. package/dist/lib/cjs/test-runners/vitest.cjs +1 -56
  75. package/dist/lib/cjs/validate-declarations.cjs +2 -24
  76. package/dist/lib/cjs/version.cjs +2 -24
  77. package/dist/lib/cjs/version.d.cts +1 -0
  78. package/dist/lib/esm/build.mjs +2 -11
  79. package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +2 -11
  80. package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +1 -43
  81. package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +4 -12
  82. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +1 -43
  83. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +3 -1
  84. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +154 -14
  85. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +2 -11
  86. package/dist/lib/esm/bundlers/index.mjs +1 -43
  87. package/dist/lib/esm/check-project-types.mjs +2 -11
  88. package/dist/lib/esm/cli-utils.d.mts +1 -1
  89. package/dist/lib/esm/cli-utils.mjs +5 -20
  90. package/dist/lib/esm/code-generator.mjs +1 -43
  91. package/dist/lib/esm/commitlint-config.mjs +2 -11
  92. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +1 -43
  93. package/dist/lib/esm/commitlint-spellcheck-header.mjs +1 -43
  94. package/dist/lib/esm/env-toggle.d.mts +7 -0
  95. package/dist/lib/esm/env-toggle.mjs +12 -11
  96. package/dist/lib/esm/exec.d.mts +1 -0
  97. package/dist/lib/esm/exec.mjs +2 -11
  98. package/dist/lib/esm/forbidden-patterns.mjs +2 -11
  99. package/dist/lib/esm/formatters/dprint.mjs +2 -11
  100. package/dist/lib/esm/formatters/index.mjs +1 -43
  101. package/dist/lib/esm/fs.d.mts +1 -0
  102. package/dist/lib/esm/fs.mjs +2 -11
  103. package/dist/lib/esm/gate.mjs +1 -43
  104. package/dist/lib/esm/git.d.mts +29 -0
  105. package/dist/lib/esm/git.mjs +40 -44
  106. package/dist/lib/esm/index.mjs +1 -43
  107. package/dist/lib/esm/json.mjs +2 -11
  108. package/dist/lib/esm/library-build.d.mts +10 -4
  109. package/dist/lib/esm/library-build.mjs +101 -21
  110. package/dist/lib/esm/library-references.d.mts +0 -3
  111. package/dist/lib/esm/linters/cspell-content.mjs +2 -11
  112. package/dist/lib/esm/linters/cspell.mjs +1 -43
  113. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +1 -43
  114. package/dist/lib/esm/linters/eslint-config.mjs +2 -11
  115. package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +1 -43
  116. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +1 -43
  117. package/dist/lib/esm/linters/eslint-rules/index.mjs +1 -43
  118. package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +2 -11
  119. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +2 -11
  120. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +2 -11
  121. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +2 -11
  122. package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +1 -43
  123. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +1 -43
  124. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +2 -11
  125. package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +2 -11
  126. package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +2 -11
  127. package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +1 -43
  128. package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +2 -11
  129. package/dist/lib/esm/linters/eslint.mjs +2 -11
  130. package/dist/lib/esm/linters/index.mjs +1 -43
  131. package/dist/lib/esm/linters/lint-ignores.mjs +2 -11
  132. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +2 -11
  133. package/dist/lib/esm/linters/markdownlint-content.mjs +2 -11
  134. package/dist/lib/esm/linters/markdownlint-ignores.mjs +1 -43
  135. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +1 -43
  136. package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +1 -43
  137. package/dist/lib/esm/linters/markdownlint.d.mts +11 -0
  138. package/dist/lib/esm/linters/markdownlint.mjs +9 -14
  139. package/dist/lib/esm/linters/over-exposure.mjs +2 -11
  140. package/dist/lib/esm/nano-staged-config.mjs +1 -43
  141. package/dist/lib/esm/npm-publish.mjs +1 -43
  142. package/dist/lib/esm/npm-run.mjs +2 -11
  143. package/dist/lib/esm/npm.mjs +2 -11
  144. package/dist/lib/esm/package-lock-integrity.mjs +1 -43
  145. package/dist/lib/esm/package-manager.mjs +2 -11
  146. package/dist/lib/esm/released-issues.mjs +2 -11
  147. package/dist/lib/esm/repo-paths.mjs +1 -43
  148. package/dist/lib/esm/root.mjs +2 -11
  149. package/dist/lib/esm/test-runners/index.mjs +1 -43
  150. package/dist/lib/esm/test-runners/vitest-config.mjs +1 -43
  151. package/dist/lib/esm/test-runners/vitest.mjs +1 -43
  152. package/dist/lib/esm/validate-declarations.mjs +2 -11
  153. package/dist/lib/esm/version.d.mts +1 -0
  154. package/dist/lib/esm/version.mjs +2 -11
  155. package/package.json +2 -2
@@ -2,13 +2,7 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
@@ -39,23 +33,7 @@ function ensureBrowserProcess() {
39
33
  existingProcessRecord['browser'] = true;
40
34
  }
41
35
 
42
- function keepName($unknown) {
43
- return $unknown;
44
- }
45
-
46
- (function initCjs() {
47
- const globalThisRecord = globalThis;
48
- ensureDisposeSymbols();
49
- globalThisRecord['__name'] ??= keepName;
50
- globalThisRecord['__extractDefault'] ??= extractDefault;
51
-
52
- ensureBrowserProcess();
53
-
54
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
- function extractDefault(module) {
56
- return module && module.__esModule && 'default' in module ? module.default : module;
57
- }
58
- })();
36
+ ensureBrowserProcess();
59
37
  })();
60
38
 
61
39
  "use strict";
@@ -87,7 +65,14 @@ __export(preprocess_plugin_exports, {
87
65
  module.exports = __toCommonJS(preprocess_plugin_exports);
88
66
  var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
89
67
  var import_string = require('@mnaoumov/typescript-lib/string');
68
+ var import_node_buffer = require('node:buffer');
90
69
  var import_promises = require('node:fs/promises');
70
+ var import_typescript = require('typescript');
71
+ const DISPOSE_SYMBOL_NAMES = /* @__PURE__ */ new Set(["asyncDispose", "dispose"]);
72
+ const INLINE_SOURCE_MAP_PREFIX = "//# sourceMappingURL=data:application/json;base64,";
73
+ const JS_OUTPUT_REG_EXP = /\.[cm]?js$/;
74
+ const KNOWN_SYMBOL_HELPER_NAME = "__knownSymbol";
75
+ const NON_BARE_SPECIFIER_REG_EXP = /^(?:\.|\/|node:)/;
91
76
  function ensureBrowserProcess() {
92
77
  const browserProcess = {
93
78
  browser: true,
@@ -148,9 +133,16 @@ function preprocessPlugin(options = {}) {
148
133
  for (const key of Object.keys(replacements)) {
149
134
  build.initialOptions.define[key] = `__${(0, import_string.makeValidVariableName)(key)}`;
150
135
  }
151
- build.initialOptions.banner ??= {};
152
- build.initialOptions.banner["js"] ??= "";
153
- build.initialOptions.banner["js"] += makePreprocessBanner({ additionalBannerInitFunctions, isEsm });
136
+ if (build.initialOptions.bundle === false) {
137
+ const leadingBanner = build.initialOptions.banner?.["js"] ?? "";
138
+ build.onEnd((result) => {
139
+ addModulePreambles({ additionalBannerInitFunctions, leadingBanner, outputFiles: result.outputFiles ?? [] });
140
+ });
141
+ } else {
142
+ build.initialOptions.banner ??= {};
143
+ build.initialOptions.banner["js"] ??= "";
144
+ build.initialOptions.banner["js"] += makePreprocessBanner({ additionalBannerInitFunctions, isEsm });
145
+ }
154
146
  build.onLoad({ filter: /\.(?:js|ts|cjs|mjs|cts|mts)$/ }, async ($arguments) => {
155
147
  let contents = await (0, import_promises.readFile)($arguments.path, "utf-8");
156
148
  for (const [key, value] of Object.entries(replacements)) {
@@ -176,6 +168,20 @@ ${contents}`;
176
168
  }
177
169
  };
178
170
  }
171
+ function addModulePreambles(params) {
172
+ const { additionalBannerInitFunctions, leadingBanner, outputFiles } = params;
173
+ for (const outputFile of outputFiles) {
174
+ if (!JS_OUTPUT_REG_EXP.test(outputFile.path)) {
175
+ continue;
176
+ }
177
+ const code = outputFile.text;
178
+ const preamble = makeModulePreamble(getModuleShimNeeds(code), additionalBannerInitFunctions);
179
+ if (preamble === "") {
180
+ continue;
181
+ }
182
+ outputFile.contents = new TextEncoder().encode(insertPreamble({ code, leadingBanner, preamble }));
183
+ }
184
+ }
179
185
  function getCjsImportMetaUrl() {
180
186
  if (typeof __filename === "string") {
181
187
  const localRequire = require;
@@ -186,6 +192,63 @@ function getCjsImportMetaUrl() {
186
192
  }
187
193
  return globalThis.location?.href ?? "";
188
194
  }
195
+ function getIdentifierUsage(node) {
196
+ const { parent } = node;
197
+ if (((0, import_typescript.isPropertyAccessExpression)(parent) || (0, import_typescript.isPropertyAssignment)(parent) || (0, import_typescript.isMethodDeclaration)(parent) || (0, import_typescript.isPropertyDeclaration)(parent) || (0, import_typescript.isGetAccessorDeclaration)(parent) || (0, import_typescript.isSetAccessorDeclaration)(parent)) && parent.name === node) {
198
+ return "member" /* Member */;
199
+ }
200
+ return ((0, import_typescript.isVariableDeclaration)(parent) || (0, import_typescript.isFunctionDeclaration)(parent) || (0, import_typescript.isClassDeclaration)(parent) || (0, import_typescript.isParameter)(parent) || (0, import_typescript.isBindingElement)(parent) || (0, import_typescript.isImportClause)(parent) || (0, import_typescript.isImportSpecifier)(parent) || (0, import_typescript.isNamespaceImport)(parent)) && parent.name === node ? "binding" /* Binding */ : "read" /* Read */;
201
+ }
202
+ function getModuleShimNeeds(code) {
203
+ const sourceFile = (0, import_typescript.createSourceFile)("module.js", code, import_typescript.ScriptTarget.Latest, true, import_typescript.ScriptKind.JS);
204
+ const boundNames = /* @__PURE__ */ new Set();
205
+ const readNames = /* @__PURE__ */ new Set();
206
+ let isBareImportFound = false;
207
+ let isDisposeSymbolFound = false;
208
+ function visit(node) {
209
+ const specifier = getModuleSpecifier(node);
210
+ if (specifier !== void 0 && !NON_BARE_SPECIFIER_REG_EXP.test(specifier)) {
211
+ isBareImportFound = true;
212
+ }
213
+ if ((0, import_typescript.isPropertyAccessExpression)(node) && (0, import_typescript.isIdentifier)(node.expression) && node.expression.text === "Symbol" && DISPOSE_SYMBOL_NAMES.has(node.name.text)) {
214
+ isDisposeSymbolFound = true;
215
+ }
216
+ if ((0, import_typescript.isIdentifier)(node)) {
217
+ if (node.text === KNOWN_SYMBOL_HELPER_NAME) {
218
+ isDisposeSymbolFound = true;
219
+ }
220
+ const usage = getIdentifierUsage(node);
221
+ if (usage === "binding" /* Binding */) {
222
+ boundNames.add(node.text);
223
+ } else if (usage === "read" /* Read */) {
224
+ readNames.add(node.text);
225
+ }
226
+ }
227
+ (0, import_typescript.forEachChild)(node, visit);
228
+ }
229
+ visit(sourceFile);
230
+ function isFreeRead(name) {
231
+ return readNames.has(name) && !boundNames.has(name);
232
+ }
233
+ return {
234
+ isBrowserProcessNeeded: isFreeRead("process") || isBareImportFound,
235
+ isDisposeSymbolsNeeded: isDisposeSymbolFound,
236
+ isNameNeeded: isFreeRead("__name")
237
+ };
238
+ }
239
+ function getModuleSpecifier(node) {
240
+ if (((0, import_typescript.isImportDeclaration)(node) || (0, import_typescript.isExportDeclaration)(node)) && node.moduleSpecifier !== void 0 && (0, import_typescript.isStringLiteral)(node.moduleSpecifier)) {
241
+ return node.moduleSpecifier.text;
242
+ }
243
+ if ((0, import_typescript.isCallExpression)(node)) {
244
+ const [firstArgument] = node.arguments;
245
+ const isLoader = node.expression.kind === import_typescript.SyntaxKind.ImportKeyword || (0, import_typescript.isIdentifier)(node.expression) && node.expression.text === "require";
246
+ if (isLoader && firstArgument !== void 0 && (0, import_typescript.isStringLiteral)(firstArgument)) {
247
+ return firstArgument.text;
248
+ }
249
+ }
250
+ return void 0;
251
+ }
189
252
  function initCjs() {
190
253
  const globalThisRecord = globalThis;
191
254
  ensureDisposeSymbols();
@@ -200,6 +263,45 @@ function initEsm() {
200
263
  ensureDisposeSymbols();
201
264
  ensureBrowserProcess();
202
265
  }
266
+ function insertPreamble(params) {
267
+ const { code, leadingBanner, preamble } = params;
268
+ const insertAt = leadingBanner.endsWith("\n") && code.startsWith(leadingBanner) ? leadingBanner.length : 0;
269
+ const addedLineCount = preamble.split("\n").length - 1;
270
+ let shiftedCode = code;
271
+ const sourceMapStart = code.lastIndexOf(INLINE_SOURCE_MAP_PREFIX);
272
+ if (sourceMapStart !== -1) {
273
+ const dataStart = sourceMapStart + INLINE_SOURCE_MAP_PREFIX.length;
274
+ const data = code.slice(dataStart).trimEnd();
275
+ const sourceMap = JSON.parse(import_node_buffer.Buffer.from(data, "base64").toString("utf-8"));
276
+ sourceMap.mappings = ";".repeat(addedLineCount) + sourceMap.mappings;
277
+ shiftedCode = code.slice(0, dataStart) + import_node_buffer.Buffer.from(JSON.stringify(sourceMap), "utf-8").toString("base64") + code.slice(dataStart + data.length);
278
+ }
279
+ return shiftedCode.slice(0, insertAt) + preamble + shiftedCode.slice(insertAt);
280
+ }
281
+ function makeModulePreamble(needs, additionalBannerInitFunctions) {
282
+ const shims = [];
283
+ const calls = [];
284
+ if (needs.isDisposeSymbolsNeeded) {
285
+ shims.push(ensureDisposeSymbols);
286
+ calls.push("ensureDisposeSymbols();");
287
+ }
288
+ if (needs.isBrowserProcessNeeded) {
289
+ shims.push(ensureBrowserProcess);
290
+ calls.push("ensureBrowserProcess();");
291
+ }
292
+ if (needs.isNameNeeded) {
293
+ shims.push(keepName);
294
+ calls.push("globalThis['__name'] ??= keepName;");
295
+ }
296
+ const sharedScope = shims.length === 0 ? "" : `(function () {
297
+ ${shims.map(String).join("\n\n")}
298
+
299
+ ${calls.join("\n")}
300
+ })();
301
+ `;
302
+ return sharedScope + additionalBannerInitFunctions.map((function_) => `(${String(function_)})();
303
+ `).join("");
304
+ }
203
305
  // Annotate the CommonJS export names for ESM import in node:
204
306
  0 && (module.exports = {
205
307
  ensureBrowserProcess,
@@ -208,4 +310,4 @@ function initEsm() {
208
310
  makePreprocessBanner,
209
311
  preprocessPlugin
210
312
  });
211
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9wcmVwcm9jZXNzLXBsdWdpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBUaGF0IGlzXG4gKiB3aHkgdGhleSBhbGwgbGl2ZSBpbiB0aGlzIG1vZHVsZTogZXNidWlsZCBjb21waWxlcyBhIGNyb3NzLW1vZHVsZSBjYWxsIHRvIGAoMCwgaW1wb3J0X21vZHVsZS5mbikoXHUyMDI2KWAsXG4gKiB3aGljaCB3b3VsZCBuYW1lIGEgYmluZGluZyB0aGUgZW1pdHRlZCBidW5kbGUgZG9lcyBub3QgaGF2ZS4gU2FtZS1tb2R1bGUgcmVmZXJlbmNlcyBzdGF5IGJhcmUsIGFuZFxuICoge0BsaW5rIG1ha2VQcmVwcm9jZXNzQmFubmVyfSBzZXJpYWxpemVzIHRoZSBzaGltcyBhbG9uZ3NpZGUgdGhlIGBpbml0YCBmdW5jdGlvbiBzbyB0aGV5IGFyZSBpbiBzY29wZSB0aGVyZS4gQSBzaGltXG4gKiB0aGF0IGlzIG5vdCBzZXJpYWxpemVkIHNpbGVudGx5IGRlZ3JhZGVzIHRvIHdoYXRldmVyIHRoZSBjb25zdW1lcidzIGdsb2JhbCBzY29wZSBob2xkcyB1bmRlciB0aGF0IG5hbWUgXHUyMDE0IHdoaWNoXG4gKiBpcyBob3cgYF9fbmFtZWAgdXNlZCB0byBlbmQgdXAgaG9sZGluZyBgd2luZG93Lm5hbWVgLlxuICpcbiAqIEEgY2FsbGVyIHRoYXQgbmVlZHMgbW9yZSBpbiB0aGUgYmFubmVyICh0aGUgT2JzaWRpYW4gcGx1Z2luIGJ1aWxkZXIgcGF0Y2hlcyBgcmVxdWlyZWApIGhhbmRzIGluXG4gKiB7QGxpbmsgUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMuYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnN9LiBFYWNoIG9uZSBpcyBzZXJpYWxpemVkIGFzIGl0cyBPV04gaW1tZWRpYXRlbHlcbiAqIGludm9rZWQgZnVuY3Rpb24gYWZ0ZXIgdGhlIHNoYXJlZCBzY29wZSwgc28gaXQgbXVzdCBiZSBzZWxmLWNvbnRhaW5lZDogaXQgY2Fubm90IHNlZSB0aGUgc2hpbXMsIGFuZCBjYWxsaW5nIG9uZVxuICogZnJvbSBhbm90aGVyIG1vZHVsZSB3b3VsZCBoaXQgZXhhY3RseSB0aGUgY3Jvc3MtbW9kdWxlIHRyYXAgYWJvdmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljT2JqZWN0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBicm93c2VyLWZsYXZvcmVkIHN0YW5kLWluIGZvciBOb2RlJ3MgYHByb2Nlc3NgIGdsb2JhbC5cbiAqL1xuaW50ZXJmYWNlIEJyb3dzZXJQcm9jZXNzIGV4dGVuZHMgUGFydGlhbDxOb2RlSlMuUHJvY2Vzcz4ge1xuICAvKipcbiAgICogTWFya3MgdGhlIHByb2Nlc3MgYXMgYSBicm93c2VyIG9uZS4gVGhlIGJ1bmRsZWQgYGRlYnVnYCBwYWNrYWdlIHNlbGVjdHMgaXRzIGJyb3dzZXIgZW50cnkgcG9pbnQgb24gaXQuXG4gICAqL1xuICBicm93c2VyOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiB0aGUgYFN5bWJvbGAgY29uc3RydWN0b3Ige0BsaW5rIGVuc3VyZURpc3Bvc2VTeW1ib2xzfSByZWFkcyBhbmQgd3JpdGVzLCB3aXRoIHRoZSB0d28gZGlzcG9zZVxuICogc3ltYm9scyBvcHRpb25hbCBiZWNhdXNlIGFuIGVuZ2luZSB3aXRob3V0IEV4cGxpY2l0IFJlc291cmNlIE1hbmFnZW1lbnQgZG9lcyBub3QgaGF2ZSB0aGVtLlxuICovXG5pbnRlcmZhY2UgRGlzcG9zZVN5bWJvbEhvc3Qge1xuICBhc3luY0Rpc3Bvc2U/OiBzeW1ib2w7XG4gIGRpc3Bvc2U/OiBzeW1ib2w7XG4gIGZvcjogKGtleTogc3RyaW5nKSA9PiBzeW1ib2w7XG59XG5cbmludGVyZmFjZSBFc21Nb2R1bGUge1xuICBfX2VzTW9kdWxlOiBib29sZWFuO1xuICBkZWZhdWx0OiB1bmtub3duO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBhIGJyb3dzZXIgZ2xvYmFsIHtAbGluayBnZXRDanNJbXBvcnRNZXRhVXJsfSByZWFkcywgb3B0aW9uYWwgYmVjYXVzZSBhIG5vbi1icm93c2VyIGhvc3QgaGFzIG5vbmUuXG4gKi9cbmludGVyZmFjZSBMb2NhdGlvbkhvc3Qge1xuICBsb2NhdGlvbj86IFBhZ2VMb2NhdGlvbjtcbn1cblxuaW50ZXJmYWNlIFBhZ2VMb2NhdGlvbiB7XG4gIGhyZWY6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFVybE1vZHVsZSB7XG4gIHBhdGhUb0ZpbGVVUkw6IHR5cGVvZiBwYXRoVG9GaWxlVVJMO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhlIGJ1bmRsZSBydW5zIGFnYWluc3QgYSBgcHJvY2Vzc2AgZ2xvYmFsIHRoYXQgYnJvd3Nlci10YXJnZXRpbmcgcGFja2FnZXMgcmVjb2duaXplLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLCBzbyBpdCBuZXZlciBydW5zIGluIHRoZSBidWlsZGVyIHByb2Nlc3MgXHUyMDE0IGJ1dCBpdCBpcyBhbiBvcmRpbmFyeVxuICogZnVuY3Rpb24gaGVyZSwgc28gaXQgaXMgdW5pdC10ZXN0ZWQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gYnkgZXZhbHVhdGluZyB0aGUgYmFubmVyIHRleHQuXG4gKlxuICogRmlsbHMgaW4gdGhlIGtleXMgTUlTU0lORyBmcm9tIGEgaG9zdC1wcm92aWRlZCBgcHJvY2Vzc2AgcmF0aGVyIHRoYW4gcmVwbGFjaW5nIG9yIHNraXBwaW5nIGl0LiBPYnNpZGlhblxuICogTW9iaWxlIGV4cG9zZXMgYSBwYXJ0aWFsIGBwcm9jZXNzYCwgYW5kIHRoZSB3aG9sZS1vYmplY3QgZ3VhcmRzIHRoaXMgcmVwbGFjZWQgKGBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzKSB7XG4gKiByZXR1cm47IH1gIC8gYGdsb2JhbFRoaXNSZWNvcmRbJ3Byb2Nlc3MnXSA/Pz0gXHUyMDI2YCkgdG9vayB0aGF0IGFzIFwiYWxyZWFkeSBzaGltbWVkXCIsIHNvIGBicm93c2VyYCBuZXZlclxuICogbGFuZGVkLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2UgdGhlbiBzZWxlY3RlZCBpdHMgTm9kZSBlbnRyeSBwb2ludCwgd2hpY2ggY2FsbHNcbiAqIGByZXF1aXJlKCd1dGlsJykuZGVwcmVjYXRlKClgIGF0IG1vZHVsZSB0b3AgbGV2ZWwsIGFuZCBvbiBtb2JpbGUgdGhlIHBhdGNoZWQgYHJlcXVpcmVgIHJldHVybnMgYHt9YCBcdTIwMTQgc29cbiAqIHRoZSBwbHVnaW4gdGhyZXcgYmVmb3JlIGl0cyBgb25sb2FkYCByYW4uXG4gKlxuICogQSByZWFsIE5vZGUgb3IgRWxlY3Ryb24gYHByb2Nlc3NgIGlzIGxlZnQgY29tcGxldGVseSB1bnRvdWNoZWQuIGBwcm9jZXNzLnZlcnNpb25zLm5vZGVgIGlzIHRoZSBzaWduYWwgZm9yXG4gKiBpdCwgYW5kIGl0IGlzIHNlbGYtY29udGFpbmVkLCBzbyBpdCBhbHNvIGhvbGRzIGluIHRoZSBOb2RlIENMSSBidW5kbGVzIHRoaXMgYmFubmVyIGlzIGVtaXR0ZWQgaW50by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk6IHZvaWQge1xuICBjb25zdCBicm93c2VyUHJvY2VzczogR2VuZXJpY09iamVjdDxCcm93c2VyUHJvY2Vzcz4gPSB7XG4gICAgYnJvd3NlcjogdHJ1ZSxcbiAgICBjd2QoKSB7XG4gICAgICByZXR1cm4gJy8nO1xuICAgIH0sXG4gICAgZW52OiB7fSxcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnXG4gIH07XG5cbiAgY29uc3QgZXhpc3RpbmdQcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzIGFzIFBhcnRpYWw8Tm9kZUpTLlByb2Nlc3M+IHwgdW5kZWZpbmVkO1xuXG4gIGlmICghZXhpc3RpbmdQcm9jZXNzKSB7XG4gICAgZ2xvYmFsVGhpcy5wcm9jZXNzID0gYnJvd3NlclByb2Nlc3MgYXMgTm9kZUpTLlByb2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nUHJvY2Vzcy52ZXJzaW9ucz8ubm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nUHJvY2Vzc1JlY29yZCA9IGV4aXN0aW5nUHJvY2VzcyBhcyBHZW5lcmljT2JqZWN0O1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGJyb3dzZXJQcm9jZXNzKSkge1xuICAgIGV4aXN0aW5nUHJvY2Vzc1JlY29yZFtrZXldID8/PSB2YWx1ZTtcbiAgfVxuXG4gIGV4aXN0aW5nUHJvY2Vzc1JlY29yZFsnYnJvd3NlciddID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBNYWtlcyBgU3ltYm9sLmRpc3Bvc2VgIGFuZCBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgZXhpc3QsIGZhbGxpbmcgYmFjayB0byB0aGUgcmVnaXN0cnkgc3ltYm9scyBlc2J1aWxkJ3NcbiAqIGB1c2luZ2AgaGVscGVycyBsb29rIHVwLlxuICpcbiAqIEBwYXJhbSBzeW1ib2xDb25zdHJ1Y3RvciAtIFRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB0byBwYXRjaC4gRGVmYXVsdHMgdG8gdGhlIGFtYmllbnQgb25lOyB0aGUgcGFyYW1ldGVyXG4gKiBleGlzdHMgc28gYSB0ZXN0IGNhbiBoYW5kIGluIGFuIGVuZ2luZSB0aGF0IGxhY2tzIHRoZSB3ZWxsLWtub3duIHN5bWJvbHMuXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIuIEEgZGlzcG9zYWJsZSBkZWNsYXJlcyBpdHMgbWV0aG9kIHVuZGVyIHRoZSBMSVRFUkFMIGtleVxuICogYFtTeW1ib2wuZGlzcG9zZV1gLCB3aGlsZSBlc2J1aWxkIGxvd2VycyBldmVyeSBgdXNpbmdgIHRvIGEgbG9va3VwIHRocm91Z2ggYF9fa25vd25TeW1ib2woJ2Rpc3Bvc2UnKWAsXG4gKiB3aGljaCBmYWxscyBiYWNrIHRvIGBTeW1ib2wuZm9yKCdTeW1ib2wuZGlzcG9zZScpYCB3aGVuIHRoZSBlbmdpbmUgaGFzIG5vIHdlbGwta25vd24gc3ltYm9sLiBPbiBzdWNoIGFuXG4gKiBlbmdpbmUgdGhlIGxpdGVyYWwga2V5IGV2YWx1YXRlcyB0byBgdW5kZWZpbmVkYCwgdGhlIG1ldGhvZCBsYW5kcyB1bmRlciB0aGUgc3RyaW5nIGBcInVuZGVmaW5lZFwiYCwgYW5kXG4gKiBldmVyeSBgdXNpbmdgIG9mIGl0IHRocm93cyBgT2JqZWN0IG5vdCBkaXNwb3NhYmxlYC4gRmlsbGluZyB0aGUgd2VsbC1rbm93biBzbG90IHdpdGggdGhhdCBzYW1lIHJlZ2lzdHJ5XG4gKiBzeW1ib2wgbWFrZXMgYm90aCBzaWRlcyBuYW1lIG9uZSBrZXkgb24gZXZlcnkgZW5naW5lLiBBIGhvc3QgdGhhdCBhbHJlYWR5IGhhcyB0aGUgc3ltYm9sIGlzIGxlZnRcbiAqIHVudG91Y2hlZDogYD8/PWAgbmV2ZXIgcmVhY2hlcyB0aGUgYXNzaWdubWVudCwgd2hpY2ggdGhlIGhvc3QncyBub24td3JpdGFibGUgcHJvcGVydHkgd291bGQgcmVmdXNlLlxuICpcbiAqIFRoZSBkZWZhdWx0IG5hbWVzIGBTeW1ib2xgIGJhcmUgb24gcHVycG9zZTogaXQgZXhpc3RzIG9uIGV2ZXJ5IGVuZ2luZSB0aGlzIHJ1bnMgb24sIGFuZCBhIGJhcmUgcmVmZXJlbmNlXG4gKiByZXNvbHZlcyBhZ2FpbnN0IHdoYXRldmVyIHNjb3BlIHRoZSBiYW5uZXIgaXMgZXZhbHVhdGVkIGluLCBleGFjdGx5IGFzIHRoZSBidW5kbGUncyBvd25cbiAqIGBbU3ltYm9sLmRpc3Bvc2VdYCBrZXlzIGRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRGlzcG9zZVN5bWJvbHMoc3ltYm9sQ29uc3RydWN0b3I6IERpc3Bvc2VTeW1ib2xIb3N0ID0gU3ltYm9sKTogdm9pZCB7XG4gIHN5bWJvbENvbnN0cnVjdG9yLmFzeW5jRGlzcG9zZSA/Pz0gc3ltYm9sQ29uc3RydWN0b3IuZm9yKCdTeW1ib2wuYXN5bmNEaXNwb3NlJyk7XG4gIHN5bWJvbENvbnN0cnVjdG9yLmRpc3Bvc2UgPz89IHN5bWJvbENvbnN0cnVjdG9yLmZvcignU3ltYm9sLmRpc3Bvc2UnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGl0cyBhcmd1bWVudCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gVGhlIHZhbHVlIHRvIHJldHVybi5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBwYXNzZWQgaW4uXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHdoZXJlIGl0IHN0YW5kcyBpbiBmb3IgZXNidWlsZCdzIGBfX25hbWVgIGhlbHBlciBcdTIwMTQgd2hpY2ggbmFtZXMgYVxuICogZnVuY3Rpb24gYW5kIHJldHVybnMgaXQgXHUyMDE0IGZvciBidW5kbGVzIHRoYXQgcmVmZXJlbmNlIHRoZSBoZWxwZXIgd2l0aG91dCBlbWl0dGluZyB0aGVpciBvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZWVwTmFtZSgkdW5rbm93bjogdW5rbm93bik6IHVua25vd24ge1xuICByZXR1cm4gJHVua25vd247XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBiYW5uZXIgaW5qZWN0ZWQgYXQgdGhlIHRvcCBvZiBldmVyeSBlbWl0dGVkIGJ1bmRsZS5cbiAqXG4gKiBgU3RyaW5nKGZuKWAgY2FwdHVyZXMgb25seSB0aGUgZnVuY3Rpb24ncyBvd24gYm9keSwgc28gZXZlcnkgc2hpbSB0aGUgYGluaXRgIGZ1bmN0aW9uIGNhbGxzIGhhcyB0byBiZVxuICogc2VyaWFsaXplZCBuZXh0IHRvIGl0IGFuZCB3cmFwcGVkIGluIG9uZSBzaGFyZWQgc2NvcGU7IG90aGVyd2lzZSB0aGUgY2FsbCBpdCBtYWtlcyByZXNvbHZlcyBhZ2FpbnN0IHRoZVxuICogY29uc3VtZXIncyBnbG9iYWwgc2NvcGUgYXQgcnVudGltZS4gU2VlIHRoaXMgZmlsZSdzIGBAZmlsZWAgcmVtYXJrcy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBiYW5uZXIgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBiYW5uZXIgc291cmNlIHRvIHByZXBlbmQgdG8gdGhlIGVtaXR0ZWQgYnVuZGxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVByZXByb2Nlc3NCYW5uZXIob3B0aW9uczogTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zID0gW10sIGlzRXNtID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNoaW1zID0gaXNFc20gPyBbZW5zdXJlRGlzcG9zZVN5bWJvbHMsIGVuc3VyZUJyb3dzZXJQcm9jZXNzXSA6IFtlbnN1cmVEaXNwb3NlU3ltYm9scywgZW5zdXJlQnJvd3NlclByb2Nlc3MsIGtlZXBOYW1lXTtcbiAgY29uc3QgaW5pdCA9IGlzRXNtID8gaW5pdEVzbSA6IGluaXRDanM7XG4gIGNvbnN0IGFkZGl0aW9uYWxJbml0cyA9IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLm1hcCgoZnVuY3Rpb25fKSA9PiBgKCR7U3RyaW5nKGZ1bmN0aW9uXyl9KSgpO1xcbmApLmpvaW4oJycpO1xuICByZXR1cm4gYFxcbihmdW5jdGlvbiAoKSB7XFxuJHtzaGltcy5tYXAoU3RyaW5nKS5qb2luKCdcXG5cXG4nKX1cXG5cXG4oJHtTdHJpbmcoaW5pdCl9KSgpO1xcbn0pKCk7XFxuJHthZGRpdGlvbmFsSW5pdHN9YDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIHRvIHRoZSBtYXRjaGluZyBgc3RvcGAgZWl0aGVyIG5lZWRzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQgb3IgaXMgc2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciBhbmQgc28gcnVucyBpbnNpZGUgdGhlIGJ1aWx0IGJ1bmRsZSwgbmV2ZXIgaW4gdGhpcyBwcm9jZXNzLiBUaGUgc2hpbXMgYWJvdmUgYXJlIGRlbGliZXJhdGVseSBOT1QgaWdub3JlZDogdGhleSBhcmUgb3JkaW5hcnkgZnVuY3Rpb25zIGhlcmUgYW5kIGFyZSB1bml0LXRlc3RlZCBkaXJlY3RseS4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgcHJlcHJvY2Vzc2VzIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZmlsZXMuXG4gKlxuICogVGhpcyBwbHVnaW4gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczpcbiAqIC0gUmVwbGFjZXMgaW5zdGFuY2VzIG9mIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgd2l0aCBhIENvbW1vbkpTLWNvbXBhdGlibGUgYF9fZmlsZW5hbWVgIGFsdGVybmF0aXZlLlxuICogLSBNb2RpZmllcyB0aGUgYHNvdXJjZU1hcHBpbmdVUkxgIGNvbW1lbnQgc28gYSB0ZW1wbGF0ZSBsaXRlcmFsIGVuZGluZyBhIGZpbGUgZG9lcyBub3Qgc3dhbGxvdyBpdC5cbiAqIC0gQWRkcyBhIGJhc2ljIGBwcm9jZXNzYCBvYmplY3QgdG8gdGhlIGdsb2JhbCBzY29wZSBpZiBgcHJvY2Vzc2AgaXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQuXG4gKiAtIEZpbGxzIGluIGBTeW1ib2wuZGlzcG9zZWAgLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgb24gZW5naW5lcyB0aGF0IGxhY2sgdGhlbSwgc28gYHVzaW5nYCB3b3JrcyB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgaGFuZGxlcyB0aGUgcHJlcHJvY2Vzc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3NQbHVnaW4ob3B0aW9uczogUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMgPSB7fSk6IFBsdWdpbiB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyID0gZ2V0Q2pzSW1wb3J0TWV0YVVybCwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gaXNFc21cbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICBbXG4gICAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6ICdpbXBvcnQoZG90KW1ldGEoZG90KXVybCcsXG4gICAgICAgICAgcmVwbGFjZXI6ICcuJyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogJyhkb3QpJ1xuICAgICAgICB9KVxuICAgICAgXTogY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyXG4gICAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdwcmVwcm9jZXNzJyxcbiAgICBzZXR1cChidWlsZCk6IHZvaWQge1xuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lID8/PSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKSkge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5kZWZpbmVba2V5XSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgIH1cblxuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyID8/PSB7fTtcbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmJhbm5lclsnanMnXSA/Pz0gJyc7XG4gICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gKz0gbWFrZVByZXByb2Nlc3NCYW5uZXIoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgaXNFc20gfSk7XG5cbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogL1xcLig/OmpzfHRzfGNqc3xtanN8Y3RzfG10cykkLyB9LCBhc3luYyAoJGFyZ3VtZW50cykgPT4ge1xuICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCByZWFkRmlsZSgkYXJndW1lbnRzLnBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgICAgICBpZiAoIWNvbnRlbnRzLmluY2x1ZGVzKGtleSkgfHwgY29udGVudHMuaW5jbHVkZXMoYHZhciAke3ZhcmlhYmxlfWApKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyBgKCR7U3RyaW5nKHZhbHVlKX0pKClgIDogdG9Kc29uKHZhbHVlLCB7IGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5GdWxsIH0pO1xuICAgICAgICAgIGNvbnRlbnRzID0gYHZhciAke3ZhcmlhYmxlfSA9IGdsb2JhbFRoaXNbJyR7a2V5fSddID8/ICR7dmFsdWVTdHJpbmd9O1xcbiR7Y29udGVudHN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhBQ0s6IFRoZSAkeycnfSBwYXJ0IGlzIHVzZWQgdG8gZW5zdXJlIE9ic2lkaWFuIGxvYWRzIHRoZSBwbHVnaW4gcHJvcGVybHksXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQgc3RvcHMgbG9hZGluZyBhZnRlciB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc291cmNlTWFwcGluZ1VSTCBjb21tZW50LlxuXG4gICAgICAgIGNvbnRlbnRzID0gcmVwbGFjZUFsbCh7XG4gICAgICAgICAgJHN0cmluZzogY29udGVudHMsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAtLSBJdCBpcyBpbnRlbnRpb25hbCwgdGhlIHN0cmluZyBsb29rcyBsaWtlIGEgdGVtcGxhdGUgbGl0ZXJhbCwgYnV0IGl0IGlzIG5vdC5cbiAgICAgICAgICByZXBsYWNlcjogJ2BcXG4vLyMke1xcJ1xcJ30gc291cmNlTWFwcGluZ1VSTCcsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IC9gXFxyP1xcblxcL1xcLyMgc291cmNlTWFwcGluZ1VSTC9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgbG9hZGVyOiAndHMnXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpIGFzIFVybE1vZHVsZTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIExvY2F0aW9uSG9zdCkubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXRDanMoKTogdm9pZCB7XG4gIGNvbnN0IGdsb2JhbFRoaXNSZWNvcmQgPSBnbG9iYWxUaGlzIGFzIEdlbmVyaWNPYmplY3Q7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGdsb2JhbFRoaXNSZWNvcmRbJ19fbmFtZSddID8/PSBrZWVwTmFtZTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19leHRyYWN0RGVmYXVsdCddID8/PSBleHRyYWN0RGVmYXVsdDtcblxuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBTZXJpYWxpemVkIHdpdGggaW5pdENqcyBpbnRvIHRoZSBiYW5uZXI7IGF0IG1vZHVsZSBzY29wZSBpdCB3b3VsZCBiZSBsZWZ0IG91dCBvZiBpdC5cbiAgZnVuY3Rpb24gZXh0cmFjdERlZmF1bHQobW9kdWxlOiBQYXJ0aWFsPEVzbU1vZHVsZT4gfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgICByZXR1cm4gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtb2R1bGUgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXNtKCk6IHZvaWQge1xuICBlbnN1cmVEaXNwb3NlU3ltYm9scygpO1xuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBBbiB1bmJ1bmRsZWRcbiAqIGJ1aWxkIChgYnVuZGxlOiBmYWxzZWAsIG9uZSBvdXRwdXQgcGVyIHNvdXJjZSkgZ2V0cyBubyBiYW5uZXI6IGVhY2ggZW1pdHRlZCBtb2R1bGUgZ2V0cyBhIHByZWFtYmxlIGhvbGRpbmcgb25seSB0aGVcbiAqIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIGEgbW9kdWxlIHRoYXQgbmVlZHMgbm9uZSBnZXRzIG5vdGhpbmcuIFRoYXQgaXNcbiAqIHdoeSB0aGV5IGFsbCBsaXZlIGluIHRoaXMgbW9kdWxlOiBlc2J1aWxkIGNvbXBpbGVzIGEgY3Jvc3MtbW9kdWxlIGNhbGwgdG8gYCgwLCBpbXBvcnRfbW9kdWxlLmZuKSjigKYpYCxcbiAqIHdoaWNoIHdvdWxkIG5hbWUgYSBiaW5kaW5nIHRoZSBlbWl0dGVkIGJ1bmRsZSBkb2VzIG5vdCBoYXZlLiBTYW1lLW1vZHVsZSByZWZlcmVuY2VzIHN0YXkgYmFyZSwgYW5kXG4gKiB7QGxpbmsgbWFrZVByZXByb2Nlc3NCYW5uZXJ9IHNlcmlhbGl6ZXMgdGhlIHNoaW1zIGFsb25nc2lkZSB0aGUgYGluaXRgIGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGluIHNjb3BlIHRoZXJlLiBBIHNoaW1cbiAqIHRoYXQgaXMgbm90IHNlcmlhbGl6ZWQgc2lsZW50bHkgZGVncmFkZXMgdG8gd2hhdGV2ZXIgdGhlIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGhvbGRzIHVuZGVyIHRoYXQgbmFtZSDigJQgd2hpY2hcbiAqIGlzIGhvdyBgX19uYW1lYCB1c2VkIHRvIGVuZCB1cCBob2xkaW5nIGB3aW5kb3cubmFtZWAuXG4gKlxuICogQSBjYWxsZXIgdGhhdCBuZWVkcyBtb3JlIGluIHRoZSBiYW5uZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gYnVpbGRlciBwYXRjaGVzIGByZXF1aXJlYCkgaGFuZHMgaW5cbiAqIHtAbGluayBQcmVwcm9jZXNzUGx1Z2luT3B0aW9ucy5hZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uc30uIEVhY2ggb25lIGlzIHNlcmlhbGl6ZWQgYXMgaXRzIE9XTiBpbW1lZGlhdGVseVxuICogaW52b2tlZCBmdW5jdGlvbiBhZnRlciB0aGUgc2hhcmVkIHNjb3BlLCBzbyBpdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkOiBpdCBjYW5ub3Qgc2VlIHRoZSBzaGltcywgYW5kIGNhbGxpbmcgb25lXG4gKiBmcm9tIGFub3RoZXIgbW9kdWxlIHdvdWxkIGhpdCBleGFjdGx5IHRoZSBjcm9zcy1tb2R1bGUgdHJhcCBhYm92ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHR5cGUge1xuICBPdXRwdXRGaWxlLFxuICBQbHVnaW5cbn0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7XG4gIElkZW50aWZpZXIsXG4gIE5vZGVcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU291cmNlRmlsZSxcbiAgZm9yRWFjaENoaWxkLFxuICBpc0JpbmRpbmdFbGVtZW50LFxuICBpc0NhbGxFeHByZXNzaW9uLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW1wb3J0Q2xhdXNlLFxuICBpc0ltcG9ydERlY2xhcmF0aW9uLFxuICBpc0ltcG9ydFNwZWNpZmllcixcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNOYW1lc3BhY2VJbXBvcnQsXG4gIGlzUGFyYW1ldGVyLFxuICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbixcbiAgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIGlzVmFyaWFibGVEZWNsYXJhdGlvbixcbiAgU2NyaXB0S2luZCxcbiAgU2NyaXB0VGFyZ2V0LFxuICBTeW50YXhLaW5kXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCBESVNQT1NFX1NZTUJPTF9OQU1FUyA9IG5ldyBTZXQoWydhc3luY0Rpc3Bvc2UnLCAnZGlzcG9zZSddKTtcbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCA9ICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5jb25zdCBKU19PVVRQVVRfUkVHX0VYUCA9IC9cXC5bY21dP2pzJC87XG4vLyBFc2J1aWxkJ3MgaGVscGVyIGJlaGluZCBhIGxvd2VyZWQgYHVzaW5nYCwgd2hpY2ggbG9va3MgdXAgYFN5bWJvbC5kaXNwb3NlYCBieSBuYW1lLlxuY29uc3QgS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FID0gJ19fa25vd25TeW1ib2wnO1xuLy8gQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBvciBhIGBub2RlOmAgYnVpbHQtaW46IGFueXRoaW5nIGVsc2UgbmFtZXMgYSBwYWNrYWdlLlxuY29uc3QgTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAgPSAvXig/OlxcLnxcXC98bm9kZTopLztcblxuZW51bSBJZGVudGlmaWVyVXNhZ2Uge1xuICBCaW5kaW5nID0gJ2JpbmRpbmcnLFxuICBNZW1iZXIgPSAnbWVtYmVyJyxcbiAgUmVhZCA9ICdyZWFkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBZGRNb2R1bGVQcmVhbWJsZXNQYXJhbXMge1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW107XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZXM6IHJlYWRvbmx5IE91dHB1dEZpbGVbXTtcbn1cblxuLyoqXG4gKiBBIGJyb3dzZXItZmxhdm9yZWQgc3RhbmQtaW4gZm9yIE5vZGUncyBgcHJvY2Vzc2AgZ2xvYmFsLlxuICovXG5pbnRlcmZhY2UgQnJvd3NlclByb2Nlc3MgZXh0ZW5kcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgcHJvY2VzcyBhcyBhIGJyb3dzZXIgb25lLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2Ugc2VsZWN0cyBpdHMgYnJvd3NlciBlbnRyeSBwb2ludCBvbiBpdC5cbiAgICovXG4gIGJyb3dzZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB7QGxpbmsgZW5zdXJlRGlzcG9zZVN5bWJvbHN9IHJlYWRzIGFuZCB3cml0ZXMsIHdpdGggdGhlIHR3byBkaXNwb3NlXG4gKiBzeW1ib2xzIG9wdGlvbmFsIGJlY2F1c2UgYW4gZW5naW5lIHdpdGhvdXQgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBkb2VzIG5vdCBoYXZlIHRoZW0uXG4gKi9cbmludGVyZmFjZSBEaXNwb3NlU3ltYm9sSG9zdCB7XG4gIGFzeW5jRGlzcG9zZT86IHN5bWJvbDtcbiAgZGlzcG9zZT86IHN5bWJvbDtcbiAgZm9yOiAoa2V5OiBzdHJpbmcpID0+IHN5bWJvbDtcbn1cblxuaW50ZXJmYWNlIEVzbU1vZHVsZSB7XG4gIF9fZXNNb2R1bGU6IGJvb2xlYW47XG4gIGRlZmF1bHQ6IHVua25vd247XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIGEgYnJvd3NlciBnbG9iYWwge0BsaW5rIGdldENqc0ltcG9ydE1ldGFVcmx9IHJlYWRzLCBvcHRpb25hbCBiZWNhdXNlIGEgbm9uLWJyb3dzZXIgaG9zdCBoYXMgbm9uZS5cbiAqL1xuaW50ZXJmYWNlIEluc2VydFByZWFtYmxlUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBsZWFkaW5nQmFubmVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWFtYmxlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBMb2NhdGlvbkhvc3Qge1xuICBsb2NhdGlvbj86IFBhZ2VMb2NhdGlvbjtcbn1cblxuaW50ZXJmYWNlIE1vZHVsZVNoaW1OZWVkcyB7XG4gIHJlYWRvbmx5IGlzQnJvd3NlclByb2Nlc3NOZWVkZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRGlzcG9zZVN5bWJvbHNOZWVkZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzTmFtZU5lZWRlZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBhZ2VMb2NhdGlvbiB7XG4gIGhyZWY6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNvdXJjZU1hcFdpdGhNYXBwaW5ncyB7XG4gIG1hcHBpbmdzOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBVcmxNb2R1bGUge1xuICBwYXRoVG9GaWxlVVJMOiB0eXBlb2YgcGF0aFRvRmlsZVVSTDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBidW5kbGUgcnVucyBhZ2FpbnN0IGEgYHByb2Nlc3NgIGdsb2JhbCB0aGF0IGJyb3dzZXItdGFyZ2V0aW5nIHBhY2thZ2VzIHJlY29nbml6ZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgc28gaXQgbmV2ZXIgcnVucyBpbiB0aGUgYnVpbGRlciBwcm9jZXNzIOKAlCBidXQgaXQgaXMgYW4gb3JkaW5hcnlcbiAqIGZ1bmN0aW9uIGhlcmUsIHNvIGl0IGlzIHVuaXQtdGVzdGVkIGRpcmVjdGx5IHJhdGhlciB0aGFuIGJ5IGV2YWx1YXRpbmcgdGhlIGJhbm5lciB0ZXh0LlxuICpcbiAqIEZpbGxzIGluIHRoZSBrZXlzIE1JU1NJTkcgZnJvbSBhIGhvc3QtcHJvdmlkZWQgYHByb2Nlc3NgIHJhdGhlciB0aGFuIHJlcGxhY2luZyBvciBza2lwcGluZyBpdC4gT2JzaWRpYW5cbiAqIE1vYmlsZSBleHBvc2VzIGEgcGFydGlhbCBgcHJvY2Vzc2AsIGFuZCB0aGUgd2hvbGUtb2JqZWN0IGd1YXJkcyB0aGlzIHJlcGxhY2VkIChgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcykge1xuICogcmV0dXJuOyB9YCAvIGBnbG9iYWxUaGlzUmVjb3JkWydwcm9jZXNzJ10gPz89IOKApmApIHRvb2sgdGhhdCBhcyBcImFscmVhZHkgc2hpbW1lZFwiLCBzbyBgYnJvd3NlcmAgbmV2ZXJcbiAqIGxhbmRlZC4gVGhlIGJ1bmRsZWQgYGRlYnVnYCBwYWNrYWdlIHRoZW4gc2VsZWN0ZWQgaXRzIE5vZGUgZW50cnkgcG9pbnQsIHdoaWNoIGNhbGxzXG4gKiBgcmVxdWlyZSgndXRpbCcpLmRlcHJlY2F0ZSgpYCBhdCBtb2R1bGUgdG9wIGxldmVsLCBhbmQgb24gbW9iaWxlIHRoZSBwYXRjaGVkIGByZXF1aXJlYCByZXR1cm5zIGB7fWAg4oCUIHNvXG4gKiB0aGUgcGx1Z2luIHRocmV3IGJlZm9yZSBpdHMgYG9ubG9hZGAgcmFuLlxuICpcbiAqIEEgcmVhbCBOb2RlIG9yIEVsZWN0cm9uIGBwcm9jZXNzYCBpcyBsZWZ0IGNvbXBsZXRlbHkgdW50b3VjaGVkLiBgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlYCBpcyB0aGUgc2lnbmFsIGZvclxuICogaXQsIGFuZCBpdCBpcyBzZWxmLWNvbnRhaW5lZCwgc28gaXQgYWxzbyBob2xkcyBpbiB0aGUgTm9kZSBDTEkgYnVuZGxlcyB0aGlzIGJhbm5lciBpcyBlbWl0dGVkIGludG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVCcm93c2VyUHJvY2VzcygpOiB2b2lkIHtcbiAgY29uc3QgYnJvd3NlclByb2Nlc3M6IEdlbmVyaWNPYmplY3Q8QnJvd3NlclByb2Nlc3M+ID0ge1xuICAgIGJyb3dzZXI6IHRydWUsXG4gICAgY3dkKCkge1xuICAgICAgcmV0dXJuICcvJztcbiAgICB9LFxuICAgIGVudjoge30sXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJ1xuICB9O1xuXG4gIGNvbnN0IGV4aXN0aW5nUHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcyBhcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB8IHVuZGVmaW5lZDtcblxuICBpZiAoIWV4aXN0aW5nUHJvY2Vzcykge1xuICAgIGdsb2JhbFRoaXMucHJvY2VzcyA9IGJyb3dzZXJQcm9jZXNzIGFzIE5vZGVKUy5Qcm9jZXNzO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChleGlzdGluZ1Byb2Nlc3MudmVyc2lvbnM/Lm5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBleGlzdGluZ1Byb2Nlc3NSZWNvcmQgPSBleGlzdGluZ1Byb2Nlc3MgYXMgR2VuZXJpY09iamVjdDtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhicm93c2VyUHJvY2VzcykpIHtcbiAgICBleGlzdGluZ1Byb2Nlc3NSZWNvcmRba2V5XSA/Pz0gdmFsdWU7XG4gIH1cblxuICBleGlzdGluZ1Byb2Nlc3NSZWNvcmRbJ2Jyb3dzZXInXSA9IHRydWU7XG59XG5cbi8qKlxuICogTWFrZXMgYFN5bWJvbC5kaXNwb3NlYCBhbmQgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIGV4aXN0LCBmYWxsaW5nIGJhY2sgdG8gdGhlIHJlZ2lzdHJ5IHN5bWJvbHMgZXNidWlsZCdzXG4gKiBgdXNpbmdgIGhlbHBlcnMgbG9vayB1cC5cbiAqXG4gKiBAcGFyYW0gc3ltYm9sQ29uc3RydWN0b3IgLSBUaGUgYFN5bWJvbGAgY29uc3RydWN0b3IgdG8gcGF0Y2guIERlZmF1bHRzIHRvIHRoZSBhbWJpZW50IG9uZTsgdGhlIHBhcmFtZXRlclxuICogZXhpc3RzIHNvIGEgdGVzdCBjYW4gaGFuZCBpbiBhbiBlbmdpbmUgdGhhdCBsYWNrcyB0aGUgd2VsbC1rbm93biBzeW1ib2xzLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLiBBIGRpc3Bvc2FibGUgZGVjbGFyZXMgaXRzIG1ldGhvZCB1bmRlciB0aGUgTElURVJBTCBrZXlcbiAqIGBbU3ltYm9sLmRpc3Bvc2VdYCwgd2hpbGUgZXNidWlsZCBsb3dlcnMgZXZlcnkgYHVzaW5nYCB0byBhIGxvb2t1cCB0aHJvdWdoIGBfX2tub3duU3ltYm9sKCdkaXNwb3NlJylgLFxuICogd2hpY2ggZmFsbHMgYmFjayB0byBgU3ltYm9sLmZvcignU3ltYm9sLmRpc3Bvc2UnKWAgd2hlbiB0aGUgZW5naW5lIGhhcyBubyB3ZWxsLWtub3duIHN5bWJvbC4gT24gc3VjaCBhblxuICogZW5naW5lIHRoZSBsaXRlcmFsIGtleSBldmFsdWF0ZXMgdG8gYHVuZGVmaW5lZGAsIHRoZSBtZXRob2QgbGFuZHMgdW5kZXIgdGhlIHN0cmluZyBgXCJ1bmRlZmluZWRcImAsIGFuZFxuICogZXZlcnkgYHVzaW5nYCBvZiBpdCB0aHJvd3MgYE9iamVjdCBub3QgZGlzcG9zYWJsZWAuIEZpbGxpbmcgdGhlIHdlbGwta25vd24gc2xvdCB3aXRoIHRoYXQgc2FtZSByZWdpc3RyeVxuICogc3ltYm9sIG1ha2VzIGJvdGggc2lkZXMgbmFtZSBvbmUga2V5IG9uIGV2ZXJ5IGVuZ2luZS4gQSBob3N0IHRoYXQgYWxyZWFkeSBoYXMgdGhlIHN5bWJvbCBpcyBsZWZ0XG4gKiB1bnRvdWNoZWQ6IGA/Pz1gIG5ldmVyIHJlYWNoZXMgdGhlIGFzc2lnbm1lbnQsIHdoaWNoIHRoZSBob3N0J3Mgbm9uLXdyaXRhYmxlIHByb3BlcnR5IHdvdWxkIHJlZnVzZS5cbiAqXG4gKiBUaGUgZGVmYXVsdCBuYW1lcyBgU3ltYm9sYCBiYXJlIG9uIHB1cnBvc2U6IGl0IGV4aXN0cyBvbiBldmVyeSBlbmdpbmUgdGhpcyBydW5zIG9uLCBhbmQgYSBiYXJlIHJlZmVyZW5jZVxuICogcmVzb2x2ZXMgYWdhaW5zdCB3aGF0ZXZlciBzY29wZSB0aGUgYmFubmVyIGlzIGV2YWx1YXRlZCBpbiwgZXhhY3RseSBhcyB0aGUgYnVuZGxlJ3Mgb3duXG4gKiBgW1N5bWJvbC5kaXNwb3NlXWAga2V5cyBkby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZURpc3Bvc2VTeW1ib2xzKHN5bWJvbENvbnN0cnVjdG9yOiBEaXNwb3NlU3ltYm9sSG9zdCA9IFN5bWJvbCk6IHZvaWQge1xuICBzeW1ib2xDb25zdHJ1Y3Rvci5hc3luY0Rpc3Bvc2UgPz89IHN5bWJvbENvbnN0cnVjdG9yLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuICBzeW1ib2xDb25zdHJ1Y3Rvci5kaXNwb3NlID8/PSBzeW1ib2xDb25zdHJ1Y3Rvci5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBpdHMgYXJndW1lbnQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIFRoZSB2YWx1ZSB0byByZXR1cm4uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgcGFzc2VkIGluLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLCB3aGVyZSBpdCBzdGFuZHMgaW4gZm9yIGVzYnVpbGQncyBgX19uYW1lYCBoZWxwZXIg4oCUIHdoaWNoIG5hbWVzIGFcbiAqIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGl0IOKAlCBmb3IgYnVuZGxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgaGVscGVyIHdpdGhvdXQgZW1pdHRpbmcgdGhlaXIgb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcE5hbWUoJHVua25vd246IHVua25vd24pOiB1bmtub3duIHtcbiAgcmV0dXJuICR1bmtub3duO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYmFubmVyIGluamVjdGVkIGF0IHRoZSB0b3Agb2YgZXZlcnkgZW1pdHRlZCBidW5kbGUuXG4gKlxuICogYFN0cmluZyhmbilgIGNhcHR1cmVzIG9ubHkgdGhlIGZ1bmN0aW9uJ3Mgb3duIGJvZHksIHNvIGV2ZXJ5IHNoaW0gdGhlIGBpbml0YCBmdW5jdGlvbiBjYWxscyBoYXMgdG8gYmVcbiAqIHNlcmlhbGl6ZWQgbmV4dCB0byBpdCBhbmQgd3JhcHBlZCBpbiBvbmUgc2hhcmVkIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNhbGwgaXQgbWFrZXMgcmVzb2x2ZXMgYWdhaW5zdCB0aGVcbiAqIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGF0IHJ1bnRpbWUuIFNlZSB0aGlzIGZpbGUncyBgQGZpbGVgIHJlbWFya3MuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgYmFubmVyIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgYmFubmVyIHNvdXJjZSB0byBwcmVwZW5kIHRvIHRoZSBlbWl0dGVkIGJ1bmRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQcmVwcm9jZXNzQmFubmVyKG9wdGlvbnM6IE1ha2VQcmVwcm9jZXNzQmFubmVyT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucyA9IFtdLCBpc0VzbSA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICBjb25zdCBzaGltcyA9IGlzRXNtID8gW2Vuc3VyZURpc3Bvc2VTeW1ib2xzLCBlbnN1cmVCcm93c2VyUHJvY2Vzc10gOiBbZW5zdXJlRGlzcG9zZVN5bWJvbHMsIGVuc3VyZUJyb3dzZXJQcm9jZXNzLCBrZWVwTmFtZV07XG4gIGNvbnN0IGluaXQgPSBpc0VzbSA/IGluaXRFc20gOiBpbml0Q2pzO1xuICBjb25zdCBhZGRpdGlvbmFsSW5pdHMgPSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucy5tYXAoKGZ1bmN0aW9uXykgPT4gYCgke1N0cmluZyhmdW5jdGlvbl8pfSkoKTtcXG5gKS5qb2luKCcnKTtcbiAgcmV0dXJuIGBcXG4oZnVuY3Rpb24gKCkge1xcbiR7c2hpbXMubWFwKFN0cmluZykuam9pbignXFxuXFxuJyl9XFxuXFxuKCR7U3RyaW5nKGluaXQpfSkoKTtcXG59KSgpO1xcbiR7YWRkaXRpb25hbEluaXRzfWA7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGx1Z2luJ3Mgc2V0dXAgbmVlZHMgYSBsaXZlIGVzYnVpbGQgY29udGV4dCwgYW5kIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxhdGVyIGlnbm9yZWQgcmFuZ2VzIGFyZSBzZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyIGFuZCBzbyBydW4gaW5zaWRlIHRoZSBidWlsdCBidW5kbGUsIG5ldmVyIGluIHRoaXMgcHJvY2Vzcy4gVGhlIHNoaW1zIGFib3ZlIGFyZSBkZWxpYmVyYXRlbHkgTk9UIGlnbm9yZWQ6IHRoZXkgYXJlIG9yZGluYXJ5IGZ1bmN0aW9ucyBoZXJlIGFuZCBhcmUgdW5pdC10ZXN0ZWQgZGlyZWN0bHksIGFuZCBuZWl0aGVyIGFyZSB0aGUgdW5idW5kbGVkLWJ1aWxkIGhlbHBlcnMsIHdoaWNoIHRoZSB0ZXN0cyBkcml2ZSB0aHJvdWdoIGEgc3R1YiBidWlsZC4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgcHJlcHJvY2Vzc2VzIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZmlsZXMuXG4gKlxuICogVGhpcyBwbHVnaW4gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczpcbiAqIC0gUmVwbGFjZXMgaW5zdGFuY2VzIG9mIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgd2l0aCBhIENvbW1vbkpTLWNvbXBhdGlibGUgYF9fZmlsZW5hbWVgIGFsdGVybmF0aXZlLlxuICogLSBNb2RpZmllcyB0aGUgYHNvdXJjZU1hcHBpbmdVUkxgIGNvbW1lbnQgc28gYSB0ZW1wbGF0ZSBsaXRlcmFsIGVuZGluZyBhIGZpbGUgZG9lcyBub3Qgc3dhbGxvdyBpdC5cbiAqIC0gQWRkcyBhIGJhc2ljIGBwcm9jZXNzYCBvYmplY3QgdG8gdGhlIGdsb2JhbCBzY29wZSBpZiBgcHJvY2Vzc2AgaXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQuXG4gKiAtIEZpbGxzIGluIGBTeW1ib2wuZGlzcG9zZWAgLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgb24gZW5naW5lcyB0aGF0IGxhY2sgdGhlbSwgc28gYHVzaW5nYCB3b3JrcyB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgaGFuZGxlcyB0aGUgcHJlcHJvY2Vzc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3NQbHVnaW4ob3B0aW9uczogUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMgPSB7fSk6IFBsdWdpbiB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyID0gZ2V0Q2pzSW1wb3J0TWV0YVVybCwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gaXNFc21cbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICBbXG4gICAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6ICdpbXBvcnQoZG90KW1ldGEoZG90KXVybCcsXG4gICAgICAgICAgcmVwbGFjZXI6ICcuJyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogJyhkb3QpJ1xuICAgICAgICB9KVxuICAgICAgXTogY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyXG4gICAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdwcmVwcm9jZXNzJyxcbiAgICBzZXR1cChidWlsZCk6IHZvaWQge1xuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lID8/PSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKSkge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5kZWZpbmVba2V5XSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJ1aWxkLmluaXRpYWxPcHRpb25zLmJ1bmRsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gT25lIG91dHB1dCBwZXIgc291cmNlOiBlYWNoIG1vZHVsZSBnZXRzIG9ubHkgdGhlIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgc28gYSBwYWdlIGltcG9ydGluZyBhIHB1cmVcbiAgICAgICAgLy8gbW9kdWxlIG9mIGEgbGlicmFyeSBpcyBsZWZ0IHdpdGggaXRzIGdsb2JhbHMgdW50b3VjaGVkLlxuICAgICAgICBjb25zdCBsZWFkaW5nQmFubmVyID0gYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyPy5bJ2pzJ10gPz8gJyc7XG4gICAgICAgIGJ1aWxkLm9uRW5kKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBhZGRNb2R1bGVQcmVhbWJsZXMoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgbGVhZGluZ0Jhbm5lciwgb3V0cHV0RmlsZXM6IHJlc3VsdC5vdXRwdXRGaWxlcyA/PyBbXSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXIgPz89IHt9O1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gPz89ICcnO1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gKz0gbWFrZVByZXByb2Nlc3NCYW5uZXIoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgaXNFc20gfSk7XG4gICAgICB9XG5cbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogL1xcLig/OmpzfHRzfGNqc3xtanN8Y3RzfG10cykkLyB9LCBhc3luYyAoJGFyZ3VtZW50cykgPT4ge1xuICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCByZWFkRmlsZSgkYXJndW1lbnRzLnBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgICAgICBpZiAoIWNvbnRlbnRzLmluY2x1ZGVzKGtleSkgfHwgY29udGVudHMuaW5jbHVkZXMoYHZhciAke3ZhcmlhYmxlfWApKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyBgKCR7U3RyaW5nKHZhbHVlKX0pKClgIDogdG9Kc29uKHZhbHVlLCB7IGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5GdWxsIH0pO1xuICAgICAgICAgIGNvbnRlbnRzID0gYHZhciAke3ZhcmlhYmxlfSA9IGdsb2JhbFRoaXNbJyR7a2V5fSddID8/ICR7dmFsdWVTdHJpbmd9O1xcbiR7Y29udGVudHN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhBQ0s6IFRoZSAkeycnfSBwYXJ0IGlzIHVzZWQgdG8gZW5zdXJlIE9ic2lkaWFuIGxvYWRzIHRoZSBwbHVnaW4gcHJvcGVybHksXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQgc3RvcHMgbG9hZGluZyBhZnRlciB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc291cmNlTWFwcGluZ1VSTCBjb21tZW50LlxuXG4gICAgICAgIGNvbnRlbnRzID0gcmVwbGFjZUFsbCh7XG4gICAgICAgICAgJHN0cmluZzogY29udGVudHMsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAtLSBJdCBpcyBpbnRlbnRpb25hbCwgdGhlIHN0cmluZyBsb29rcyBsaWtlIGEgdGVtcGxhdGUgbGl0ZXJhbCwgYnV0IGl0IGlzIG5vdC5cbiAgICAgICAgICByZXBsYWNlcjogJ2BcXG4vLyMke1xcJ1xcJ30gc291cmNlTWFwcGluZ1VSTCcsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IC9gXFxyP1xcblxcL1xcLyMgc291cmNlTWFwcGluZ1VSTC9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgbG9hZGVyOiAndHMnXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogUHJlcGVuZHMgdG8gZWFjaCBlbWl0dGVkIG1vZHVsZSB0aGUgcHJlYW1ibGUgaXRzIG93biBjb2RlIG5lZWRzLCBhbmQgbm90aGluZyB3aGVuIGl0IG5lZWRzIG5vbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbWl0dGVkIG1vZHVsZXMsIHRoZSBiYW5uZXIgdGhlIGNhbGxlciBhbHJlYWR5IHB1dCBmaXJzdCwgYW5kIHRoZSBjYWxsZXIncyBleHRyYSBpbml0cy5cbiAqL1xuZnVuY3Rpb24gYWRkTW9kdWxlUHJlYW1ibGVzKHBhcmFtczogQWRkTW9kdWxlUHJlYW1ibGVzUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGxlYWRpbmdCYW5uZXIsIG91dHB1dEZpbGVzIH0gPSBwYXJhbXM7XG4gIGZvciAoY29uc3Qgb3V0cHV0RmlsZSBvZiBvdXRwdXRGaWxlcykge1xuICAgIGlmICghSlNfT1VUUFVUX1JFR19FWFAudGVzdChvdXRwdXRGaWxlLnBhdGgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2RlID0gb3V0cHV0RmlsZS50ZXh0O1xuICAgIGNvbnN0IHByZWFtYmxlID0gbWFrZU1vZHVsZVByZWFtYmxlKGdldE1vZHVsZVNoaW1OZWVkcyhjb2RlKSwgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMpO1xuICAgIGlmIChwcmVhbWJsZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG91dHB1dEZpbGUuY29udGVudHMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoaW5zZXJ0UHJlYW1ibGUoeyBjb2RlLCBsZWFkaW5nQmFubmVyLCBwcmVhbWJsZSB9KSk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBtb2R1bGUsIHNlZSBhYm92ZS4gKi9cbmZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpIGFzIFVybE1vZHVsZTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIExvY2F0aW9uSG9zdCkubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG5mdW5jdGlvbiBnZXRJZGVudGlmaWVyVXNhZ2Uobm9kZTogSWRlbnRpZmllcik6IElkZW50aWZpZXJVc2FnZSB7XG4gIGNvbnN0IHsgcGFyZW50IH0gPSBub2RlO1xuICBpZiAoXG4gICAgKGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHBhcmVudCkgfHwgaXNQcm9wZXJ0eUFzc2lnbm1lbnQocGFyZW50KSB8fCBpc01ldGhvZERlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uKHBhcmVudClcbiAgICAgIHx8IGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwYXJlbnQpIHx8IGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwYXJlbnQpKVxuICAgICYmIHBhcmVudC5uYW1lID09PSBub2RlXG4gICkge1xuICAgIHJldHVybiBJZGVudGlmaWVyVXNhZ2UuTWVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIChpc1ZhcmlhYmxlRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc0NsYXNzRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc1BhcmFtZXRlcihwYXJlbnQpIHx8IGlzQmluZGluZ0VsZW1lbnQocGFyZW50KVxuICAgICAgfHwgaXNJbXBvcnRDbGF1c2UocGFyZW50KSB8fCBpc0ltcG9ydFNwZWNpZmllcihwYXJlbnQpIHx8IGlzTmFtZXNwYWNlSW1wb3J0KHBhcmVudCkpXG4gICAgICAmJiBwYXJlbnQubmFtZSA9PT0gbm9kZVxuICAgID8gSWRlbnRpZmllclVzYWdlLkJpbmRpbmdcbiAgICA6IElkZW50aWZpZXJVc2FnZS5SZWFkO1xufVxuXG4vKipcbiAqIFJlYWRzIHdoaWNoIHNoaW1zIGFuIGVtaXR0ZWQgbW9kdWxlIG5lZWRzIGZyb20gaXRzIGNvZGUuXG4gKlxuICogLSBgZW5zdXJlQnJvd3NlclByb2Nlc3NgOiBpdCByZWFkcyBhIGBwcm9jZXNzYCBpdCBkb2VzIG5vdCBiaW5kIGl0c2VsZiwgb3IgaXQgbG9hZHMgYSBiYXJlIHBhY2thZ2UgdGhhdCBpcyBub3QgYVxuICogICBgbm9kZTpgIGJ1aWx0LWluLiBUaGUgc2Vjb25kIGNhc2UgaXMgdGhlcmUgYmVjYXVzZSBzdWNoIGEgcGFja2FnZSAoYHBhdGgtYnJvd3NlcmlmeWAgcmVhZHMgYHByb2Nlc3MuY3dkKClgKSBjYW5ub3RcbiAqICAgY2FycnkgYSBzaGltIG9mIGl0cyBvd24sIGFuZCBpbiBhbiB1bmJ1bmRsZWQgYnVpbGQgaXRzIGltcG9ydGVyIGlzIHRoZSBvbmx5IG1vZHVsZSB0aGF0IGNhbi5cbiAqIC0gYGVuc3VyZURpc3Bvc2VTeW1ib2xzYDogaXQgbmFtZXMgYFN5bWJvbC5kaXNwb3NlYCBvciBgU3ltYm9sLmFzeW5jRGlzcG9zZWAsIG9yIGhvbGRzIGVzYnVpbGQncyBgX19rbm93blN5bWJvbGBcbiAqICAgaGVscGVyLCB3aGljaCBhIGxvd2VyZWQgYHVzaW5nYCBlbWl0cy5cbiAqIC0gYF9fbmFtZWA6IGl0IHJlYWRzIGEgYF9fbmFtZWAgaXQgZG9lcyBub3QgZGVjbGFyZS5cbiAqXG4gKiBAcGFyYW0gY29kZSAtIFRoZSBlbWl0dGVkIG1vZHVsZS5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIG1vZHVsZSBuZWVkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlU2hpbU5lZWRzKGNvZGU6IHN0cmluZyk6IE1vZHVsZVNoaW1OZWVkcyB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBjcmVhdGVTb3VyY2VGaWxlKCdtb2R1bGUuanMnLCBjb2RlLCBTY3JpcHRUYXJnZXQuTGF0ZXN0LCB0cnVlLCBTY3JpcHRLaW5kLkpTKTtcbiAgY29uc3QgYm91bmROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByZWFkTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgbGV0IGlzQmFyZUltcG9ydEZvdW5kID0gZmFsc2U7XG4gIGxldCBpc0Rpc3Bvc2VTeW1ib2xGb3VuZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBzcGVjaWZpZXIgPSBnZXRNb2R1bGVTcGVjaWZpZXIobm9kZSk7XG4gICAgaWYgKHNwZWNpZmllciAhPT0gdW5kZWZpbmVkICYmICFOT05fQkFSRV9TUEVDSUZJRVJfUkVHX0VYUC50ZXN0KHNwZWNpZmllcikpIHtcbiAgICAgIGlzQmFyZUltcG9ydEZvdW5kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKSAmJiBpc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSAmJiBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gJ1N5bWJvbCdcbiAgICAgICYmIERJU1BPU0VfU1lNQk9MX05BTUVTLmhhcyhub2RlLm5hbWUudGV4dClcbiAgICApIHtcbiAgICAgIGlzRGlzcG9zZVN5bWJvbEZvdW5kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICBpZiAobm9kZS50ZXh0ID09PSBLTk9XTl9TWU1CT0xfSEVMUEVSX05BTUUpIHtcbiAgICAgICAgaXNEaXNwb3NlU3ltYm9sRm91bmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2FnZSA9IGdldElkZW50aWZpZXJVc2FnZShub2RlKTtcbiAgICAgIGlmICh1c2FnZSA9PT0gSWRlbnRpZmllclVzYWdlLkJpbmRpbmcpIHtcbiAgICAgICAgYm91bmROYW1lcy5hZGQobm9kZS50ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAodXNhZ2UgPT09IElkZW50aWZpZXJVc2FnZS5SZWFkKSB7XG4gICAgICAgIHJlYWROYW1lcy5hZGQobm9kZS50ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICB9XG4gIHZpc2l0KHNvdXJjZUZpbGUpO1xuXG4gIGZ1bmN0aW9uIGlzRnJlZVJlYWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlYWROYW1lcy5oYXMobmFtZSkgJiYgIWJvdW5kTmFtZXMuaGFzKG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpc0Jyb3dzZXJQcm9jZXNzTmVlZGVkOiBpc0ZyZWVSZWFkKCdwcm9jZXNzJykgfHwgaXNCYXJlSW1wb3J0Rm91bmQsXG4gICAgaXNEaXNwb3NlU3ltYm9sc05lZWRlZDogaXNEaXNwb3NlU3ltYm9sRm91bmQsXG4gICAgaXNOYW1lTmVlZGVkOiBpc0ZyZWVSZWFkKCdfX25hbWUnKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIobm9kZTogTm9kZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgoaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSB8fCBpc0V4cG9ydERlY2xhcmF0aW9uKG5vZGUpKSAmJiBub2RlLm1vZHVsZVNwZWNpZmllciAhPT0gdW5kZWZpbmVkICYmIGlzU3RyaW5nTGl0ZXJhbChub2RlLm1vZHVsZVNwZWNpZmllcikpIHtcbiAgICByZXR1cm4gbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dDtcbiAgfVxuXG4gIGlmIChpc0NhbGxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgY29uc3QgW2ZpcnN0QXJndW1lbnRdID0gbm9kZS5hcmd1bWVudHM7XG4gICAgY29uc3QgaXNMb2FkZXIgPSBub2RlLmV4cHJlc3Npb24ua2luZCA9PT0gU3ludGF4S2luZC5JbXBvcnRLZXl3b3JkIHx8IChpc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSAmJiBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gJ3JlcXVpcmUnKTtcbiAgICBpZiAoaXNMb2FkZXIgJiYgZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkICYmIGlzU3RyaW5nTGl0ZXJhbChmaXJzdEFyZ3VtZW50KSkge1xuICAgICAgcmV0dXJuIGZpcnN0QXJndW1lbnQudGV4dDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgc2VlIGFib3ZlLiAqL1xuZnVuY3Rpb24gaW5pdENqcygpOiB2b2lkIHtcbiAgY29uc3QgZ2xvYmFsVGhpc1JlY29yZCA9IGdsb2JhbFRoaXMgYXMgR2VuZXJpY09iamVjdDtcbiAgZW5zdXJlRGlzcG9zZVN5bWJvbHMoKTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19uYW1lJ10gPz89IGtlZXBOYW1lO1xuICBnbG9iYWxUaGlzUmVjb3JkWydfX2V4dHJhY3REZWZhdWx0J10gPz89IGV4dHJhY3REZWZhdWx0O1xuXG4gIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nIC0tIFNlcmlhbGl6ZWQgd2l0aCBpbml0Q2pzIGludG8gdGhlIGJhbm5lcjsgYXQgbW9kdWxlIHNjb3BlIGl0IHdvdWxkIGJlIGxlZnQgb3V0IG9mIGl0LlxuICBmdW5jdGlvbiBleHRyYWN0RGVmYXVsdChtb2R1bGU6IFBhcnRpYWw8RXNtTW9kdWxlPiB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICAgIHJldHVybiBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgJiYgJ2RlZmF1bHQnIGluIG1vZHVsZSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRFc20oKTogdm9pZCB7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4vKipcbiAqIEluc2VydHMgdGhlIHByZWFtYmxlIGFmdGVyIHRoZSBjYWxsZXIncyBsZWFkaW5nIGJhbm5lciwgYW5kIHNoaWZ0cyBhbiBpbmxpbmUgc291cmNlIG1hcCBkb3duIGJ5IHRoZSBsaW5lcyBpdCBhZGRzLFxuICogc28gdGhlIG1vZHVsZSdzIG93biBsaW5lcyBrZWVwIG1hcHBpbmcgb250byB0aGVpciBzb3VyY2VzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbW9kdWxlLCBpdHMgbGVhZGluZyBiYW5uZXIgYW5kIHRoZSBwcmVhbWJsZS5cbiAqIEByZXR1cm5zIFRoZSBtb2R1bGUgd2l0aCB0aGUgcHJlYW1ibGUgaW4gaXQuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFByZWFtYmxlKHBhcmFtczogSW5zZXJ0UHJlYW1ibGVQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGNvZGUsIGxlYWRpbmdCYW5uZXIsIHByZWFtYmxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGluc2VydEF0ID0gbGVhZGluZ0Jhbm5lci5lbmRzV2l0aCgnXFxuJykgJiYgY29kZS5zdGFydHNXaXRoKGxlYWRpbmdCYW5uZXIpID8gbGVhZGluZ0Jhbm5lci5sZW5ndGggOiAwO1xuICBjb25zdCBhZGRlZExpbmVDb3VudCA9IHByZWFtYmxlLnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxO1xuICBsZXQgc2hpZnRlZENvZGUgPSBjb2RlO1xuICBjb25zdCBzb3VyY2VNYXBTdGFydCA9IGNvZGUubGFzdEluZGV4T2YoSU5MSU5FX1NPVVJDRV9NQVBfUFJFRklYKTtcbiAgaWYgKHNvdXJjZU1hcFN0YXJ0ICE9PSAtMSkge1xuICAgIGNvbnN0IGRhdGFTdGFydCA9IHNvdXJjZU1hcFN0YXJ0ICsgSU5MSU5FX1NPVVJDRV9NQVBfUFJFRklYLmxlbmd0aDtcbiAgICBjb25zdCBkYXRhID0gY29kZS5zbGljZShkYXRhU3RhcnQpLnRyaW1FbmQoKTtcbiAgICBjb25zdCBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGRhdGEsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKSkgYXMgU291cmNlTWFwV2l0aE1hcHBpbmdzO1xuICAgIHNvdXJjZU1hcC5tYXBwaW5ncyA9ICc7Jy5yZXBlYXQoYWRkZWRMaW5lQ291bnQpICsgc291cmNlTWFwLm1hcHBpbmdzO1xuICAgIHNoaWZ0ZWRDb2RlID0gY29kZS5zbGljZSgwLCBkYXRhU3RhcnQpICsgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpICsgY29kZS5zbGljZShkYXRhU3RhcnQgKyBkYXRhLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHNoaWZ0ZWRDb2RlLnNsaWNlKDAsIGluc2VydEF0KSArIHByZWFtYmxlICsgc2hpZnRlZENvZGUuc2xpY2UoaW5zZXJ0QXQpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcHJlYW1ibGUgb2Ygb25lIHVuYnVuZGxlZCBtb2R1bGU6IHRoZSBzaGltcyBpdCBuZWVkcyBpbiBvbmUgc2hhcmVkIHNjb3BlLCB0aGVuIHRoZSBjYWxsZXIncyBleHRyYSBpbml0cy5cbiAqXG4gKiBAcGFyYW0gbmVlZHMgLSBXaGF0IHRoZSBtb2R1bGUgbmVlZHMuXG4gKiBAcGFyYW0gYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgLSBUaGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMsIHdoaWNoIGV2ZXJ5IG1vZHVsZSBnZXRzLlxuICogQHJldHVybnMgVGhlIHByZWFtYmxlLCBlbXB0eSB3aGVuIHRoZSBtb2R1bGUgbmVlZHMgbm90aGluZy5cbiAqL1xuZnVuY3Rpb24gbWFrZU1vZHVsZVByZWFtYmxlKG5lZWRzOiBNb2R1bGVTaGltTmVlZHMsIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zOiByZWFkb25seSAoKCkgPT4gdm9pZClbXSk6IHN0cmluZyB7XG4gIGNvbnN0IHNoaW1zOiAoKC4uLmFyZ3VtZW50c186IG5ldmVyW10pID0+IHVua25vd24pW10gPSBbXTtcbiAgY29uc3QgY2FsbHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5lZWRzLmlzRGlzcG9zZVN5bWJvbHNOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGVuc3VyZURpc3Bvc2VTeW1ib2xzKTtcbiAgICBjYWxscy5wdXNoKCdlbnN1cmVEaXNwb3NlU3ltYm9scygpOycpO1xuICB9XG5cbiAgaWYgKG5lZWRzLmlzQnJvd3NlclByb2Nlc3NOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGVuc3VyZUJyb3dzZXJQcm9jZXNzKTtcbiAgICBjYWxscy5wdXNoKCdlbnN1cmVCcm93c2VyUHJvY2VzcygpOycpO1xuICB9XG5cbiAgaWYgKG5lZWRzLmlzTmFtZU5lZWRlZCkge1xuICAgIHNoaW1zLnB1c2goa2VlcE5hbWUpO1xuICAgIGNhbGxzLnB1c2goJ2dsb2JhbFRoaXNbXFwnX19uYW1lXFwnXSA/Pz0ga2VlcE5hbWU7Jyk7XG4gIH1cblxuICBjb25zdCBzaGFyZWRTY29wZSA9IHNoaW1zLmxlbmd0aCA9PT0gMCA/ICcnIDogYChmdW5jdGlvbiAoKSB7XFxuJHtzaGltcy5tYXAoU3RyaW5nKS5qb2luKCdcXG5cXG4nKX1cXG5cXG4ke2NhbGxzLmpvaW4oJ1xcbicpfVxcbn0pKCk7XFxuYDtcbiAgcmV0dXJuIHNoYXJlZFNjb3BlICsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMubWFwKChmdW5jdGlvbl8pID0+IGAoJHtTdHJpbmcoZnVuY3Rpb25fKX0pKCk7XFxuYCkuam9pbignJyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUNBLDBCQUdPO0FBQ1Asb0JBR087QUFDUCx5QkFBdUI7QUFDdkIsc0JBQXlCO0FBQ3pCLHdCQXlCTztBQUVQLE1BQU0sdUJBQXVCLG9CQUFJLElBQUksQ0FBQyxnQkFBZ0IsU0FBUyxDQUFDO0FBQ2hFLE1BQU0sMkJBQTJCO0FBQ2pDLE1BQU0sb0JBQW9CO0FBRTFCLE1BQU0sMkJBQTJCO0FBRWpDLE1BQU0sNkJBQTZCO0FBZ0k1QixTQUFTLHVCQUE2QjtBQUMzQyxRQUFNLGlCQUFnRDtBQUFBLElBQ3BELFNBQVM7QUFBQSxJQUNULE1BQU07QUFDSixhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxDQUFDO0FBQUEsSUFDTixVQUFVO0FBQUEsRUFDWjtBQUVBLFFBQU0sa0JBQWtCLFdBQVc7QUFFbkMsTUFBSSxDQUFDLGlCQUFpQjtBQUNwQixlQUFXLFVBQVU7QUFDckI7QUFBQSxFQUNGO0FBRUEsTUFBSSxnQkFBZ0IsVUFBVSxNQUFNO0FBQ2xDO0FBQUEsRUFDRjtBQUVBLFFBQU0sd0JBQXdCO0FBRTlCLGFBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxPQUFPLFFBQVEsY0FBYyxHQUFHO0FBQ3pELDBCQUFzQixHQUFHLE1BQU07QUFBQSxFQUNqQztBQUVBLHdCQUFzQixTQUFTLElBQUk7QUFDckM7QUFzQk8sU0FBUyxxQkFBcUIsb0JBQXVDLFFBQWM7QUFDeEYsb0JBQWtCLGlCQUFpQixrQkFBa0IsSUFBSSxxQkFBcUI7QUFDOUUsb0JBQWtCLFlBQVksa0JBQWtCLElBQUksZ0JBQWdCO0FBQ3RFO0FBWU8sU0FBUyxTQUFTLFVBQTRCO0FBQ25ELFNBQU87QUFDVDtBQVlPLFNBQVMscUJBQXFCLFVBQXVDLENBQUMsR0FBVztBQUN0RixRQUFNLEVBQUUsZ0NBQWdDLENBQUMsR0FBRyxRQUFRLE1BQU0sSUFBSTtBQUM5RCxRQUFNLFFBQVEsUUFBUSxDQUFDLHNCQUFzQixvQkFBb0IsSUFBSSxDQUFDLHNCQUFzQixzQkFBc0IsUUFBUTtBQUMxSCxRQUFNLE9BQU8sUUFBUSxVQUFVO0FBQy9CLFFBQU0sa0JBQWtCLDhCQUE4QixJQUFJLENBQUMsY0FBYyxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQUEsQ0FBUSxFQUFFLEtBQUssRUFBRTtBQUMvRyxTQUFPO0FBQUE7QUFBQSxFQUFxQixNQUFNLElBQUksTUFBTSxFQUFFLEtBQUssTUFBTSxDQUFDO0FBQUE7QUFBQSxHQUFRLE9BQU8sSUFBSSxDQUFDO0FBQUE7QUFBQSxFQUFnQixlQUFlO0FBQy9HO0FBZ0JPLFNBQVMsaUJBQWlCLFVBQW1DLENBQUMsR0FBVztBQUM5RSxRQUFNLEVBQUUsZ0NBQWdDLENBQUMsR0FBRywyQkFBMkIscUJBQXFCLFFBQVEsTUFBTSxJQUFJO0FBQzlHLFFBQU0sZUFBZSxRQUNqQixDQUFDLElBQ0Q7QUFBQSxJQUNBLEtBQ0UsMEJBQVc7QUFBQSxNQUNULFNBQVM7QUFBQSxNQUNULFVBQVU7QUFBQSxNQUNWLGFBQWE7QUFBQSxJQUNmLENBQUMsQ0FDSCxHQUFHO0FBQUEsRUFDTDtBQUVGLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU0sT0FBYTtBQUNqQixZQUFNLGVBQWUsV0FBVyxDQUFDO0FBRWpDLGlCQUFXLE9BQU8sT0FBTyxLQUFLLFlBQVksR0FBRztBQUMzQyxjQUFNLGVBQWUsT0FBTyxHQUFHLElBQUksU0FBSyxxQ0FBc0IsR0FBRyxDQUFDO0FBQUEsTUFDcEU7QUFFQSxVQUFJLE1BQU0sZUFBZSxXQUFXLE9BQU87QUFHekMsY0FBTSxnQkFBZ0IsTUFBTSxlQUFlLFNBQVMsSUFBSSxLQUFLO0FBQzdELGNBQU0sTUFBTSxDQUFDLFdBQVc7QUFDdEIsNkJBQW1CLEVBQUUsK0JBQStCLGVBQWUsYUFBYSxPQUFPLGVBQWUsQ0FBQyxFQUFFLENBQUM7QUFBQSxRQUM1RyxDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsY0FBTSxlQUFlLFdBQVcsQ0FBQztBQUNqQyxjQUFNLGVBQWUsT0FBTyxJQUFJLE1BQU07QUFDdEMsY0FBTSxlQUFlLE9BQU8sSUFBSSxLQUFLLHFCQUFxQixFQUFFLCtCQUErQixNQUFNLENBQUM7QUFBQSxNQUNwRztBQUVBLFlBQU0sT0FBTyxFQUFFLFFBQVEsK0JBQStCLEdBQUcsT0FBTyxlQUFlO0FBQzdFLFlBQUksV0FBVyxVQUFNLDBCQUFTLFdBQVcsTUFBTSxPQUFPO0FBRXRELG1CQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLFlBQVksR0FBRztBQUN2RCxnQkFBTSxXQUFXLFNBQUsscUNBQXNCLEdBQUcsQ0FBQztBQUNoRCxjQUFJLENBQUMsU0FBUyxTQUFTLEdBQUcsS0FBSyxTQUFTLFNBQVMsT0FBTyxRQUFRLEVBQUUsR0FBRztBQUNuRTtBQUFBLFVBQ0Y7QUFDQSxnQkFBTSxjQUFjLE9BQU8sVUFBVSxhQUFhLElBQUksT0FBTyxLQUFLLENBQUMsWUFBUSw0QkFBTyxPQUFPLEVBQUUsc0JBQXNCLHlDQUFxQixLQUFLLENBQUM7QUFDNUkscUJBQVcsT0FBTyxRQUFRLGtCQUFrQixHQUFHLFNBQVMsV0FBVztBQUFBLEVBQU0sUUFBUTtBQUFBLFFBQ25GO0FBS0EsdUJBQVcsMEJBQVc7QUFBQSxVQUNwQixTQUFTO0FBQUE7QUFBQSxVQUVULFVBQVU7QUFBQSxVQUNWLGFBQWE7QUFBQSxRQUNmLENBQUM7QUFFRCxlQUFPO0FBQUEsVUFDTDtBQUFBLFVBQ0EsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGO0FBU0EsU0FBUyxtQkFBbUIsUUFBd0M7QUFDbEUsUUFBTSxFQUFFLCtCQUErQixlQUFlLFlBQVksSUFBSTtBQUN0RSxhQUFXLGNBQWMsYUFBYTtBQUNwQyxRQUFJLENBQUMsa0JBQWtCLEtBQUssV0FBVyxJQUFJLEdBQUc7QUFDNUM7QUFBQSxJQUNGO0FBRUEsVUFBTSxPQUFPLFdBQVc7QUFDeEIsVUFBTSxXQUFXLG1CQUFtQixtQkFBbUIsSUFBSSxHQUFHLDZCQUE2QjtBQUMzRixRQUFJLGFBQWEsSUFBSTtBQUNuQjtBQUFBLElBQ0Y7QUFFQSxlQUFXLFdBQVcsSUFBSSxZQUFZLEVBQUUsT0FBTyxlQUFlLEVBQUUsTUFBTSxlQUFlLFNBQVMsQ0FBQyxDQUFDO0FBQUEsRUFDbEc7QUFDRjtBQUdBLFNBQVMsc0JBQThCO0FBQ3JDLE1BQUksT0FBTyxlQUFlLFVBQVU7QUFDbEMsVUFBTSxlQUFlO0FBQ3JCLFVBQU0sTUFBTSxhQUFhLFVBQVU7QUFDbkMsUUFBSSxPQUFPLElBQUksa0JBQWtCLFlBQVk7QUFDM0MsYUFBTyxJQUFJLGNBQWMsVUFBVSxFQUFFO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBR0EsU0FBUSxXQUE0QixVQUFVLFFBQVE7QUFDeEQ7QUFHQSxTQUFTLG1CQUFtQixNQUFtQztBQUM3RCxRQUFNLEVBQUUsT0FBTyxJQUFJO0FBQ25CLFdBQ0csOENBQTJCLE1BQU0sU0FBSyx3Q0FBcUIsTUFBTSxTQUFLLHVDQUFvQixNQUFNLFNBQUsseUNBQXNCLE1BQU0sU0FDN0gsNENBQXlCLE1BQU0sU0FBSyw0Q0FBeUIsTUFBTSxNQUNyRSxPQUFPLFNBQVMsTUFDbkI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLGNBQVEseUNBQXNCLE1BQU0sU0FBSyx5Q0FBc0IsTUFBTSxTQUFLLHNDQUFtQixNQUFNLFNBQUssK0JBQVksTUFBTSxTQUFLLG9DQUFpQixNQUFNLFNBQy9JLGtDQUFlLE1BQU0sU0FBSyxxQ0FBa0IsTUFBTSxTQUFLLHFDQUFrQixNQUFNLE1BQy9FLE9BQU8sU0FBUyxPQUNuQiwwQkFDQTtBQUNOO0FBZUEsU0FBUyxtQkFBbUIsTUFBK0I7QUFDekQsUUFBTSxpQkFBYSxvQ0FBaUIsYUFBYSxNQUFNLCtCQUFhLFFBQVEsTUFBTSw2QkFBVyxFQUFFO0FBQy9GLFFBQU0sYUFBYSxvQkFBSSxJQUFZO0FBQ25DLFFBQU0sWUFBWSxvQkFBSSxJQUFZO0FBQ2xDLE1BQUksb0JBQW9CO0FBQ3hCLE1BQUksdUJBQXVCO0FBRTNCLFdBQVMsTUFBTSxNQUFrQjtBQUMvQixVQUFNLFlBQVksbUJBQW1CLElBQUk7QUFDekMsUUFBSSxjQUFjLFVBQWEsQ0FBQywyQkFBMkIsS0FBSyxTQUFTLEdBQUc7QUFDMUUsMEJBQW9CO0FBQUEsSUFDdEI7QUFFQSxZQUNFLDhDQUEyQixJQUFJLFNBQUssZ0NBQWEsS0FBSyxVQUFVLEtBQUssS0FBSyxXQUFXLFNBQVMsWUFDM0YscUJBQXFCLElBQUksS0FBSyxLQUFLLElBQUksR0FDMUM7QUFDQSw2QkFBdUI7QUFBQSxJQUN6QjtBQUVBLFlBQUksZ0NBQWEsSUFBSSxHQUFHO0FBQ3RCLFVBQUksS0FBSyxTQUFTLDBCQUEwQjtBQUMxQywrQkFBdUI7QUFBQSxNQUN6QjtBQUVBLFlBQU0sUUFBUSxtQkFBbUIsSUFBSTtBQUNyQyxVQUFJLFVBQVUseUJBQXlCO0FBQ3JDLG1CQUFXLElBQUksS0FBSyxJQUFJO0FBQUEsTUFDMUIsV0FBVyxVQUFVLG1CQUFzQjtBQUN6QyxrQkFBVSxJQUFJLEtBQUssSUFBSTtBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUVBLHdDQUFhLE1BQU0sS0FBSztBQUFBLEVBQzFCO0FBQ0EsUUFBTSxVQUFVO0FBRWhCLFdBQVMsV0FBVyxNQUF1QjtBQUN6QyxXQUFPLFVBQVUsSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksSUFBSTtBQUFBLEVBQ3BEO0FBRUEsU0FBTztBQUFBLElBQ0wsd0JBQXdCLFdBQVcsU0FBUyxLQUFLO0FBQUEsSUFDakQsd0JBQXdCO0FBQUEsSUFDeEIsY0FBYyxXQUFXLFFBQVE7QUFBQSxFQUNuQztBQUNGO0FBRUEsU0FBUyxtQkFBbUIsTUFBZ0M7QUFDMUQsV0FBSyx1Q0FBb0IsSUFBSSxTQUFLLHVDQUFvQixJQUFJLE1BQU0sS0FBSyxvQkFBb0IsY0FBYSxtQ0FBZ0IsS0FBSyxlQUFlLEdBQUc7QUFDM0ksV0FBTyxLQUFLLGdCQUFnQjtBQUFBLEVBQzlCO0FBRUEsVUFBSSxvQ0FBaUIsSUFBSSxHQUFHO0FBQzFCLFVBQU0sQ0FBQyxhQUFhLElBQUksS0FBSztBQUM3QixVQUFNLFdBQVcsS0FBSyxXQUFXLFNBQVMsNkJBQVcscUJBQWtCLGdDQUFhLEtBQUssVUFBVSxLQUFLLEtBQUssV0FBVyxTQUFTO0FBQ2pJLFFBQUksWUFBWSxrQkFBa0IsY0FBYSxtQ0FBZ0IsYUFBYSxHQUFHO0FBQzdFLGFBQU8sY0FBYztBQUFBLElBQ3ZCO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQUdBLFNBQVMsVUFBZ0I7QUFDdkIsUUFBTSxtQkFBbUI7QUFDekIsdUJBQXFCO0FBQ3JCLG1CQUFpQixRQUFRLE1BQU07QUFDL0IsbUJBQWlCLGtCQUFrQixNQUFNO0FBRXpDLHVCQUFxQjtBQUdyQixXQUFTLGVBQWVBLFNBQWlEO0FBQ3ZFLFdBQU9BLFdBQVVBLFFBQU8sY0FBYyxhQUFhQSxVQUFTQSxRQUFPLFVBQVVBO0FBQUEsRUFDL0U7QUFDRjtBQUVBLFNBQVMsVUFBZ0I7QUFDdkIsdUJBQXFCO0FBQ3JCLHVCQUFxQjtBQUN2QjtBQVVBLFNBQVMsZUFBZSxRQUFzQztBQUM1RCxRQUFNLEVBQUUsTUFBTSxlQUFlLFNBQVMsSUFBSTtBQUMxQyxRQUFNLFdBQVcsY0FBYyxTQUFTLElBQUksS0FBSyxLQUFLLFdBQVcsYUFBYSxJQUFJLGNBQWMsU0FBUztBQUN6RyxRQUFNLGlCQUFpQixTQUFTLE1BQU0sSUFBSSxFQUFFLFNBQVM7QUFDckQsTUFBSSxjQUFjO0FBQ2xCLFFBQU0saUJBQWlCLEtBQUssWUFBWSx3QkFBd0I7QUFDaEUsTUFBSSxtQkFBbUIsSUFBSTtBQUN6QixVQUFNLFlBQVksaUJBQWlCLHlCQUF5QjtBQUM1RCxVQUFNLE9BQU8sS0FBSyxNQUFNLFNBQVMsRUFBRSxRQUFRO0FBQzNDLFVBQU0sWUFBWSxLQUFLLE1BQU0sMEJBQU8sS0FBSyxNQUFNLFFBQVEsRUFBRSxTQUFTLE9BQU8sQ0FBQztBQUMxRSxjQUFVLFdBQVcsSUFBSSxPQUFPLGNBQWMsSUFBSSxVQUFVO0FBQzVELGtCQUFjLEtBQUssTUFBTSxHQUFHLFNBQVMsSUFBSSwwQkFBTyxLQUFLLEtBQUssVUFBVSxTQUFTLEdBQUcsT0FBTyxFQUFFLFNBQVMsUUFBUSxJQUFJLEtBQUssTUFBTSxZQUFZLEtBQUssTUFBTTtBQUFBLEVBQ2xKO0FBQ0EsU0FBTyxZQUFZLE1BQU0sR0FBRyxRQUFRLElBQUksV0FBVyxZQUFZLE1BQU0sUUFBUTtBQUMvRTtBQVNBLFNBQVMsbUJBQW1CLE9BQXdCLCtCQUFnRTtBQUNsSCxRQUFNLFFBQWlELENBQUM7QUFDeEQsUUFBTSxRQUFrQixDQUFDO0FBRXpCLE1BQUksTUFBTSx3QkFBd0I7QUFDaEMsVUFBTSxLQUFLLG9CQUFvQjtBQUMvQixVQUFNLEtBQUsseUJBQXlCO0FBQUEsRUFDdEM7QUFFQSxNQUFJLE1BQU0sd0JBQXdCO0FBQ2hDLFVBQU0sS0FBSyxvQkFBb0I7QUFDL0IsVUFBTSxLQUFLLHlCQUF5QjtBQUFBLEVBQ3RDO0FBRUEsTUFBSSxNQUFNLGNBQWM7QUFDdEIsVUFBTSxLQUFLLFFBQVE7QUFDbkIsVUFBTSxLQUFLLG9DQUFzQztBQUFBLEVBQ25EO0FBRUEsUUFBTSxjQUFjLE1BQU0sV0FBVyxJQUFJLEtBQUs7QUFBQSxFQUFtQixNQUFNLElBQUksTUFBTSxFQUFFLEtBQUssTUFBTSxDQUFDO0FBQUE7QUFBQSxFQUFPLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFBQTtBQUFBO0FBQ3RILFNBQU8sY0FBYyw4QkFBOEIsSUFBSSxDQUFDLGNBQWMsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUFBLENBQVEsRUFBRSxLQUFLLEVBQUU7QUFDOUc7IiwibmFtZXMiOlsibW9kdWxlIl19
@@ -8,7 +8,9 @@
8
8
  * We cannot use `.` instead of `(dot)` in the above description because the file itself is preprocessed with the same rule.
9
9
  *
10
10
  * `initCjs`, `initEsm` and the shims they call are stringified with `String(fn)` and injected into every
11
- * built bundle as an esbuild banner, so they must be reachable from one another by BARE identifier. That is
11
+ * built bundle as an esbuild banner, so they must be reachable from one another by BARE identifier. An unbundled
12
+ * build (`bundle: false`, one output per source) gets no banner: each emitted module gets a preamble holding only the
13
+ * shims its own code needs, and a module that needs none gets nothing. That is
12
14
  * why they all live in this module: esbuild compiles a cross-module call to `(0, import_module.fn)(…)`,
13
15
  * which would name a binding the emitted bundle does not have. Same-module references stay bare, and
14
16
  * {@link makePreprocessBanner} serializes the shims alongside the `init` function so they are in scope there. A shim
@@ -2,13 +2,7 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
@@ -39,23 +33,7 @@ function ensureBrowserProcess() {
39
33
  existingProcessRecord['browser'] = true;
40
34
  }
41
35
 
42
- function keepName($unknown) {
43
- return $unknown;
44
- }
45
-
46
- (function initCjs() {
47
- const globalThisRecord = globalThis;
48
- ensureDisposeSymbols();
49
- globalThisRecord['__name'] ??= keepName;
50
- globalThisRecord['__extractDefault'] ??= extractDefault;
51
-
52
- ensureBrowserProcess();
53
-
54
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
- function extractDefault(module) {
56
- return module && module.__esModule && 'default' in module ? module.default : module;
57
- }
58
- })();
36
+ ensureBrowserProcess();
59
37
  })();
60
38
 
61
39
  "use strict";
@@ -92,7 +70,7 @@ __export(svelte_wrapper_plugin_exports, {
92
70
  });
93
71
  module.exports = __toCommonJS(svelte_wrapper_plugin_exports);
94
72
  var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
95
- var import_esbuild_svelte = __toESM(__extractDefault(require('esbuild-svelte')), 1);
73
+ var import_esbuild_svelte = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('esbuild-svelte')), 1);
96
74
  var import_svelte_preprocess = require('svelte-preprocess');
97
75
  var import_npm = require('../../npm.cjs');
98
76
  const esbuildSvelte = (0, import_object_utils.extractDefaultExportInterop)(import_esbuild_svelte.default);
@@ -126,4 +104,4 @@ function svelteWrapperPlugin(isProductionBuild) {
126
104
  0 && (module.exports = {
127
105
  svelteWrapperPlugin
128
106
  });
129
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9zdmVsdGUtd3JhcHBlci1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTdmVsdGUgd3JhcHBlciBlc2J1aWxkIHBsdWdpbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gZXNidWlsZCBwbHVnaW4gd3JhcHBpbmcgZXNidWlsZC1zdmVsdGUgd2l0aCBzdmVsdGUtcHJlcHJvY2VzczsgcmVxdWlyZXMgYSBsaXZlIGVzYnVpbGQgY29udGV4dC4gKi9cblxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcblxuaW1wb3J0IHsgZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgZXNidWlsZFN2ZWx0ZV8gZnJvbSAnZXNidWlsZC1zdmVsdGUnO1xuaW1wb3J0IHsgc3ZlbHRlUHJlcHJvY2VzcyB9IGZyb20gJ3N2ZWx0ZS1wcmVwcm9jZXNzJztcblxuaW1wb3J0IHsgcmVhZFBhY2thZ2VKc29uIH0gZnJvbSAnLi4vLi4vbnBtLnRzJztcblxuY29uc3QgZXNidWlsZFN2ZWx0ZSA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChlc2J1aWxkU3ZlbHRlXyk7XG5cbi8qKlxuICogV3JhcHMgdGhlIGVzYnVpbGQtc3ZlbHRlIHBsdWdpbiB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBmb3JtYXQgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0gaXNQcm9kdWN0aW9uQnVpbGQgLSBXaGV0aGVyIHRoZSBidWlsZCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gKiBAcmV0dXJucyBUaGUgZXNidWlsZCBwbHVnaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdmVsdGVXcmFwcGVyUGx1Z2luKGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuKTogUGx1Z2luIHtcbiAgY29uc3QgZXNidWlsZFN2ZWx0ZVBsdWdpbiA9IGVzYnVpbGRTdmVsdGUoe1xuICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgY3NzOiAnaW5qZWN0ZWQnLFxuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIG1vZHVsZUNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIHByZXByb2Nlc3M6IHN2ZWx0ZVByZXByb2Nlc3MoKVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzdmVsdGUtd3JhcHBlcicsXG4gICAgYXN5bmMgc2V0dXAoYnVpbGQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJyA/ICdlc20nIDogJ2Nqcyc7XG4gICAgICBhd2FpdCBlc2J1aWxkU3ZlbHRlUGx1Z2luLnNldHVwKHtcbiAgICAgICAgLi4uYnVpbGQsXG4gICAgICAgIGluaXRpYWxPcHRpb25zOiB7XG4gICAgICAgICAgLi4uYnVpbGQuaW5pdGlhbE9wdGlvbnMsXG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUEsMEJBQTRDO0FBQzVDLDRCQUEyQjtBQUMzQiwrQkFBaUM7QUFFakMsaUJBQWdDO0FBRWhDLE1BQU0sb0JBQWdCLGlEQUE0QixzQkFBQUEsT0FBYztBQVF6RCxTQUFTLG9CQUFvQixtQkFBb0M7QUFDdEUsUUFBTSxzQkFBc0IsY0FBYztBQUFBLElBQ3hDLGlCQUFpQjtBQUFBLE1BQ2YsS0FBSztBQUFBLE1BQ0wsS0FBSyxDQUFDO0FBQUEsSUFDUjtBQUFBLElBQ0EsdUJBQXVCO0FBQUEsTUFDckIsS0FBSyxDQUFDO0FBQUEsSUFDUjtBQUFBLElBQ0EsZ0JBQVksMkNBQWlCO0FBQUEsRUFDL0IsQ0FBQztBQUVELFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU0sTUFBTSxPQUFzQjtBQUNoQyxZQUFNLGNBQWMsVUFBTSw0QkFBZ0I7QUFDMUMsWUFBTSxTQUFTLFlBQVksU0FBUyxXQUFXLFFBQVE7QUFDdkQsWUFBTSxvQkFBb0IsTUFBTTtBQUFBLFFBQzlCLEdBQUc7QUFBQSxRQUNILGdCQUFnQjtBQUFBLFVBQ2QsR0FBRyxNQUFNO0FBQUEsVUFDVDtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJlc2J1aWxkU3ZlbHRlXyJdCn0K
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvc3ZlbHRlLXdyYXBwZXItcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTdmVsdGUgd3JhcHBlciBlc2J1aWxkIHBsdWdpbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gZXNidWlsZCBwbHVnaW4gd3JhcHBpbmcgZXNidWlsZC1zdmVsdGUgd2l0aCBzdmVsdGUtcHJlcHJvY2VzczsgcmVxdWlyZXMgYSBsaXZlIGVzYnVpbGQgY29udGV4dC4gKi9cblxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcblxuaW1wb3J0IHsgZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgZXNidWlsZFN2ZWx0ZV8gZnJvbSAnZXNidWlsZC1zdmVsdGUnO1xuaW1wb3J0IHsgc3ZlbHRlUHJlcHJvY2VzcyB9IGZyb20gJ3N2ZWx0ZS1wcmVwcm9jZXNzJztcblxuaW1wb3J0IHsgcmVhZFBhY2thZ2VKc29uIH0gZnJvbSAnLi4vLi4vbnBtLnRzJztcblxuY29uc3QgZXNidWlsZFN2ZWx0ZSA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChlc2J1aWxkU3ZlbHRlXyk7XG5cbi8qKlxuICogV3JhcHMgdGhlIGVzYnVpbGQtc3ZlbHRlIHBsdWdpbiB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBmb3JtYXQgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0gaXNQcm9kdWN0aW9uQnVpbGQgLSBXaGV0aGVyIHRoZSBidWlsZCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gKiBAcmV0dXJucyBUaGUgZXNidWlsZCBwbHVnaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdmVsdGVXcmFwcGVyUGx1Z2luKGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuKTogUGx1Z2luIHtcbiAgY29uc3QgZXNidWlsZFN2ZWx0ZVBsdWdpbiA9IGVzYnVpbGRTdmVsdGUoe1xuICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgY3NzOiAnaW5qZWN0ZWQnLFxuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIG1vZHVsZUNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIHByZXByb2Nlc3M6IHN2ZWx0ZVByZXByb2Nlc3MoKVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzdmVsdGUtd3JhcHBlcicsXG4gICAgYXN5bmMgc2V0dXAoYnVpbGQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJyA/ICdlc20nIDogJ2Nqcyc7XG4gICAgICBhd2FpdCBlc2J1aWxkU3ZlbHRlUGx1Z2luLnNldHVwKHtcbiAgICAgICAgLi4uYnVpbGQsXG4gICAgICAgIGluaXRpYWxPcHRpb25zOiB7XG4gICAgICAgICAgLi4uYnVpbGQuaW5pdGlhbE9wdGlvbnMsXG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVVBLDBCQUE0QztBQUM1Qyw0QkFBMkI7QUFDM0IsK0JBQWlDO0FBRWpDLGlCQUFnQztBQUVoQyxNQUFNLG9CQUFnQixpREFBNEIsc0JBQUFBLE9BQWM7QUFRekQsU0FBUyxvQkFBb0IsbUJBQW9DO0FBQ3RFLFFBQU0sc0JBQXNCLGNBQWM7QUFBQSxJQUN4QyxpQkFBaUI7QUFBQSxNQUNmLEtBQUs7QUFBQSxNQUNMLEtBQUssQ0FBQztBQUFBLElBQ1I7QUFBQSxJQUNBLHVCQUF1QjtBQUFBLE1BQ3JCLEtBQUssQ0FBQztBQUFBLElBQ1I7QUFBQSxJQUNBLGdCQUFZLDJDQUFpQjtBQUFBLEVBQy9CLENBQUM7QUFFRCxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNLE1BQU0sT0FBc0I7QUFDaEMsWUFBTSxjQUFjLFVBQU0sNEJBQWdCO0FBQzFDLFlBQU0sU0FBUyxZQUFZLFNBQVMsV0FBVyxRQUFRO0FBQ3ZELFlBQU0sb0JBQW9CLE1BQU07QUFBQSxRQUM5QixHQUFHO0FBQUEsUUFDSCxnQkFBZ0I7QUFBQSxVQUNkLEdBQUcsTUFBTTtBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6WyJlc2J1aWxkU3ZlbHRlXyJdfQ==
@@ -3,61 +3,6 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
- (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
- }
11
-
12
- function ensureBrowserProcess() {
13
- const browserProcess = {
14
- browser: true,
15
- cwd() {
16
- return '/';
17
- },
18
- env: {},
19
- platform: 'android'
20
- };
21
-
22
- const existingProcess = globalThis.process;
23
-
24
- if (!existingProcess) {
25
- globalThis.process = browserProcess;
26
- return;
27
- }
28
-
29
- if (existingProcess.versions?.node) {
30
- return;
31
- }
32
-
33
- const existingProcessRecord = existingProcess;
34
-
35
- for (const [key, value] of Object.entries(browserProcess)) {
36
- existingProcessRecord[key] ??= value;
37
- }
38
-
39
- existingProcessRecord['browser'] = true;
40
- }
41
-
42
- function keepName($unknown) {
43
- return $unknown;
44
- }
45
-
46
- (function initCjs() {
47
- const globalThisRecord = globalThis;
48
- ensureDisposeSymbols();
49
- globalThisRecord['__name'] ??= keepName;
50
- globalThisRecord['__extractDefault'] ??= extractDefault;
51
-
52
- ensureBrowserProcess();
53
-
54
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
- function extractDefault(module) {
56
- return module && module.__esModule && 'default' in module ? module.default : module;
57
- }
58
- })();
59
- })();
60
-
61
6
  "use strict";
62
7
  var __create = Object.create;
63
8
  var __defProp = Object.defineProperty;
@@ -91,9 +36,9 @@ __export(bundlers_exports, {
91
36
  "esbuild-impl": () => esbuild_impl
92
37
  });
93
38
  module.exports = __toCommonJS(bundlers_exports);
94
- var esbuild_impl = __toESM(__extractDefault(require('./esbuild-impl/index.cjs')), 1);
39
+ var esbuild_impl = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./esbuild-impl/index.cjs')), 1);
95
40
  // Annotate the CommonJS export names for ESM import in node:
96
41
  0 && (module.exports = {
97
42
  "esbuild-impl": null
98
43
  });
99
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2VzYnVpbGQtaW1wbCcgZnJvbSAnLi9lc2J1aWxkLWltcGwvaW5kZXgudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSx3QkFBQUE7QUFBQTtBQUFBO0FBRUEsSUFBQUEsZUFBZ0M7IiwKICAibmFtZXMiOiBbImVzYnVpbGQtaW1wbCJdCn0K
44
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2VzYnVpbGQtaW1wbCcgZnJvbSAnLi9lc2J1aWxkLWltcGwvaW5kZXgudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBLHdCQUFBQTtBQUFBO0FBQUE7QUFFQSxJQUFBQSxlQUFnQzsiLAogICJuYW1lcyI6IFsiZXNidWlsZC1pbXBsIl0KfQo=
@@ -2,13 +2,7 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
@@ -39,23 +33,7 @@ function ensureBrowserProcess() {
39
33
  existingProcessRecord['browser'] = true;
40
34
  }
41
35
 
42
- function keepName($unknown) {
43
- return $unknown;
44
- }
45
-
46
- (function initCjs() {
47
- const globalThisRecord = globalThis;
48
- ensureDisposeSymbols();
49
- globalThisRecord['__name'] ??= keepName;
50
- globalThisRecord['__extractDefault'] ??= extractDefault;
51
-
52
- ensureBrowserProcess();
53
-
54
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
- function extractDefault(module) {
56
- return module && module.__esModule && 'default' in module ? module.default : module;
57
- }
58
- })();
36
+ ensureBrowserProcess();
59
37
  })();
60
38
 
61
39
  "use strict";
@@ -93,7 +71,7 @@ __export(check_project_types_exports, {
93
71
  toCanonical: () => toCanonical
94
72
  });
95
73
  module.exports = __toCommonJS(check_project_types_exports);
96
- var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
74
+ var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
97
75
  var import_typescript = require('typescript');
98
76
  const FORMAT_HOST = {
99
77
  getCanonicalFileName: (fileName) => fileName,
@@ -160,4 +138,4 @@ function shouldKeepDiagnosticByFile(diagnostic, shouldKeepFile) {
160
138
  parseTsConfig,
161
139
  toCanonical
162
140
  });
163
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NoZWNrLXByb2plY3QtdHlwZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUeXBlLWNoZWNrcyBhIHNldCBvZiBUeXBlU2NyaXB0IGZpbGVzIHdpdGggYHNraXBMaWJDaGVja2AgZGlzYWJsZWQsIGJ1dCByZXBvcnRzIG9ubHkgdGhlXG4gKiBkaWFnbm9zdGljcyB3aG9zZSBzb3VyY2UgZmlsZSB3ZSBvd24uIFRoaXMgbGV0cyB0aGUgZ2VuZXJhbCBidWlsZCBydW4gd2l0aCBgc2tpcExpYkNoZWNrOiB0cnVlYFxuICogKHNvIGl0IGRvZXMgbm90IGZhaWwgb24gYnJva2VuIHVwc3RyZWFtIGAuZC50c2AgZmlsZXMgd2UgZG8gbm90IGNvbnRyb2wsIHN1Y2ggYXMgYSBnaXZlblxuICogdmVyc2lvbidzIGBvYnNpZGlhbi5kLnRzYCkgd2hpbGUgc3RpbGwgZnVsbHkgdmFsaWRhdGluZyB0aGUgZGVjbGFyYXRpb25zIHdlIGF1dGhvci5cbiAqXG4gKiBXaGVuIHVwc3RyZWFtIHR5cGVzIGFyZSBmaXhlZCwgdGhlIGBJZ25vcmVkIE4gZGlhZ25vc3RpYyhzKWAgY291bnQgZHJvcHMgdG8gYDBgLCBzaWduYWxsaW5nIHRoZVxuICogd29ya2Fyb3VuZCBpcyBubyBsb25nZXIgZG9pbmcgYW55dGhpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21waWxlck9wdGlvbnMsXG4gIERpYWdub3N0aWMsXG4gIEZvcm1hdERpYWdub3N0aWNzSG9zdCxcbiAgUGFyc2VDb25maWdGaWxlSG9zdFxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIERpYWdub3N0aWNDYXRlZ29yeSxcbiAgZm9ybWF0RGlhZ25vc3RpYyxcbiAgZm9ybWF0RGlhZ25vc3RpY3MsXG4gIGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dCxcbiAgZ2V0UGFyc2VkQ29tbWFuZExpbmVPZkNvbmZpZ0ZpbGUsXG4gIGdldFByZUVtaXREaWFnbm9zdGljcyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja1Byb2plY3RUeXBlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tQcm9qZWN0VHlwZXNQYXJhbXMge1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBpZ25vcmVkIGRpYWdub3N0aWNzICh0aG9zZSBkcm9wcGVkIGJ5IHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX1cbiAgICogb3Ige0BsaW5rIENoZWNrUHJvamVjdFR5cGVzUGFyYW1zLnNob3VsZEtlZXBEaWFnbm9zdGljfSkgYXJlIHByaW50ZWQgaW4gZnVsbCBhZnRlciB0aGUgaWdub3JlZFxuICAgKiBjb3VudCwgc28gdGhleSBjYW4gYmUgaW5zcGVjdGVkLiBXaGVuIG9taXR0ZWQgb3IgYGZhbHNlYCwgb25seSB0aGUgY291bnQgaXMgcHJpbnRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNWZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgQ29tcGlsZXIgb3B0aW9ucyBmb3IgdGhlIHByb2dyYW0uIGBza2lwTGliQ2hlY2tgIGlzIGFsd2F5cyBmb3JjZWQgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IENvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgVGhlIHJvb3QgZmlsZXMgdG8gdHlwZS1jaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciBhIGRpYWdub3N0aWMgc2hvdWxkIGJlIHJlcG9ydGVkLCBiYXNlZCBvbiB0aGUgZGlhZ25vc3RpYyBpdHNlbGYgcmF0aGVyIHRoYW4gaXRzXG4gICAqIHNvdXJjZSBmaWxlLiBSdW5zIGluIGFkZGl0aW9uIHRvIHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX0gXHUyMDE0IGEgZGlhZ25vc3RpYyBpc1xuICAgKiByZXBvcnRlZCBvbmx5IHdoZW4gYm90aCBwcmVkaWNhdGVzIGtlZXAgaXQuIFVzZSB0aGlzIHRvIGRyb3AgZGlhZ25vc3RpY3MgdGhhdCBhcmUgcmVwb3J0ZWQgaW4gYVxuICAgKiBmaWxlIHdlIG93biBidXQgYXJlIGNhdXNlZCBieSBzb21ldGhpbmcgd2UgZG8gbm90IGNvbnRyb2wgKGUuZy4gYSBjcm9zcy1tb2R1bGUtZm9ybWF0IGludGVyb3BcbiAgICogY29tcGxhaW50IGFib3V0IGEgdGhpcmQtcGFydHkgaW1wb3J0KS4gV2hlbiBvbWl0dGVkLCBubyBkaWFnbm9zdGljIGlzIGRyb3BwZWQgb24gdGhpcyBiYXNpcy5cbiAgICpcbiAgICogQHBhcmFtIGRpYWdub3N0aWMgLSBUaGUgZGlhZ25vc3RpYyB0byBldmFsdWF0ZS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRGlhZ25vc3RpYz86IChkaWFnbm9zdGljOiBEaWFnbm9zdGljKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgYSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUgaXMgb25lIHdlIGNhcmUgYWJvdXQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIFRoZSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUsIGFscmVhZHkgcGFzc2VkIHRocm91Z2gge0BsaW5rIHRvQ2Fub25pY2FsfS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRmlsZTogKGZpbGVOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlc29sdmVkIHJlc3VsdCBvZiB7QGxpbmsgcGFyc2VUc0NvbmZpZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkVHNDb25maWcge1xuICAvKipcbiAgVGhlIHJlc29sdmVkIGxpc3Qgb2YgZmlsZXMgdGhlIGNvbmZpZyBpbmNsdWRlcyAoYWJzb2x1dGUgcGF0aHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIGNvbXBpbGVyIG9wdGlvbnMgKHdpdGggYGV4dGVuZHNgIGFwcGxpZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xufVxuXG5jb25zdCBGT1JNQVRfSE9TVDogRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0ge1xuICBnZXRDYW5vbmljYWxGaWxlTmFtZTogKGZpbGVOYW1lKSA9PiBmaWxlTmFtZSxcbiAgZ2V0Q3VycmVudERpcmVjdG9yeTogKCkgPT4gc3lzLmdldEN1cnJlbnREaXJlY3RvcnkoKSxcbiAgZ2V0TmV3TGluZTogKCkgPT4gc3lzLm5ld0xpbmVcbn07XG5cbi8qKlxuICogVHlwZS1jaGVja3MgYSBzZXQgb2YgZmlsZXMgd2l0aCBgc2tpcExpYkNoZWNrOiBmYWxzZWAsIGJ1dCByZXBvcnRzIG9ubHkgdGhlIGRpYWdub3N0aWNzIHdob3NlXG4gKiBzb3VyY2UgZmlsZSBwYXNzZXMgYHNob3VsZEtlZXBGaWxlYC4gRGlhZ25vc3RpY3MgZnJvbSBmaWxlcyB3ZSBkbyBub3QgY29udHJvbCAoZS5nLiBicm9rZW5cbiAqIHRoaXJkLXBhcnR5IGAuZC50c2AgcHVsbGVkIGluIHRyYW5zaXRpdmVseSkgYXJlIGRyb3BwZWQsIHdoaWxlIHN0aWxsIGJlaW5nIGNvdW50ZWQgZm9yXG4gKiB2aXNpYmlsaXR5LiBXaGVuIGBpc1ZlcmJvc2VgIGlzIHNldCwgdGhlIGRyb3BwZWQgZGlhZ25vc3RpY3MgYXJlIGFsc28gcHJpbnRlZCBpbiBmdWxsLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcHJvZ3JhbSBpbnB1dHMgYW5kIHRoZSBrZWVwIHByZWRpY2F0ZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIG5vIHJlcG9ydGVkIGRpYWdub3N0aWMgaXMgYW4gZXJyb3IsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcm9qZWN0VHlwZXMocGFyYW1zOiBDaGVja1Byb2plY3RUeXBlc1BhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCBvcHRpb25zOiBDb21waWxlck9wdGlvbnMgPSB7XG4gICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgc2tpcExpYkNoZWNrOiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKHtcbiAgICBvcHRpb25zLFxuICAgIHJvb3ROYW1lczogWy4uLnBhcmFtcy5yb290TmFtZXNdXG4gIH0pO1xuXG4gIGNvbnN0IGFsbERpYWdub3N0aWNzID0gZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuICBjb25zdCBrZXB0RGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+IHNob3VsZEtlZXBEaWFnbm9zdGljQnlGaWxlKGRpYWdub3N0aWMsIHBhcmFtcy5zaG91bGRLZWVwRmlsZSkgJiYgKHBhcmFtcy5zaG91bGRLZWVwRGlhZ25vc3RpYz8uKGRpYWdub3N0aWMpID8/IHRydWUpKTtcbiAgY29uc3QgaWdub3JlZENvdW50ID0gYWxsRGlhZ25vc3RpY3MubGVuZ3RoIC0ga2VwdERpYWdub3N0aWNzLmxlbmd0aDtcblxuICBpZiAoa2VwdERpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShmb3JtYXREaWFnbm9zdGljc1dpdGhDb2xvckFuZENvbnRleHQoa2VwdERpYWdub3N0aWNzLCBGT1JNQVRfSE9TVCkpO1xuICB9XG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYElnbm9yZWQgJHtTdHJpbmcoaWdub3JlZENvdW50KX0gZGlhZ25vc3RpYyhzKSBvdXRzaWRlIHRoZSB2YWxpZGF0ZWQgc2V0LlxcbmApO1xuXG4gIGlmIChwYXJhbXMuaXNWZXJib3NlICYmIGlnbm9yZWRDb3VudCA+IDApIHtcbiAgICBjb25zdCBpZ25vcmVkRGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+ICFrZXB0RGlhZ25vc3RpY3MuaW5jbHVkZXMoZGlhZ25vc3RpYykpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dChpZ25vcmVkRGlhZ25vc3RpY3MsIEZPUk1BVF9IT1NUKSk7XG4gIH1cblxuICByZXR1cm4ga2VwdERpYWdub3N0aWNzLmV2ZXJ5KChkaWFnbm9zdGljKSA9PiBkaWFnbm9zdGljLmNhdGVnb3J5ICE9PSBEaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIGB0c2NvbmZpZy5qc29uYCAocmVzb2x2aW5nIGBleHRlbmRzYCwgYGluY2x1ZGVgLCBgZXhjbHVkZWApIGludG8gdGhlIHJlc29sdmVkIGZpbGUgbGlzdFxuICogYW5kIGNvbXBpbGVyIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHRzQ29uZmlnUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGZpbGUgbmFtZXMgYW5kIG9wdGlvbnMuXG4gKiBAdGhyb3dzIElmIHRoZSBjb25maWcgY2Fubm90IGJlIHBhcnNlZCBvciBjb250YWlucyBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRzQ29uZmlnKHRzQ29uZmlnUGF0aDogc3RyaW5nKTogUGFyc2VkVHNDb25maWcge1xuICBjb25zdCBob3N0OiBQYXJzZUNvbmZpZ0ZpbGVIb3N0ID0ge1xuICAgIGZpbGVFeGlzdHM6IChwYXRoKSA9PiBzeXMuZmlsZUV4aXN0cyhwYXRoKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiAoKSA9PiBzeXMuZ2V0Q3VycmVudERpcmVjdG9yeSgpLFxuICAgIG9uVW5SZWNvdmVyYWJsZUNvbmZpZ0ZpbGVEaWFnbm9zdGljOiAoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWMoZGlhZ25vc3RpYywgRk9STUFUX0hPU1QpKTtcbiAgICB9LFxuICAgIHJlYWREaXJlY3Rvcnk6IChyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSA9PiBzeXMucmVhZERpcmVjdG9yeShyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSxcbiAgICByZWFkRmlsZTogKHBhdGgpID0+IHN5cy5yZWFkRmlsZShwYXRoKSxcbiAgICB1c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzOiBzeXMudXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lc1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlZCA9IGdldFBhcnNlZENvbW1hbmRMaW5lT2ZDb25maWdGaWxlKHRzQ29uZmlnUGF0aCwgdW5kZWZpbmVkLCBob3N0KTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFR5cGVTY3JpcHQgY29uZmlnOiAke3RzQ29uZmlnUGF0aH1gKTtcbiAgfVxuXG4gIGlmIChwYXJzZWQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyB3aGlsZSBwYXJzaW5nIFR5cGVTY3JpcHQgY29uZmlnICR7dHNDb25maWdQYXRofTpcXG4ke2Zvcm1hdERpYWdub3N0aWNzKHBhcnNlZC5lcnJvcnMsIEZPUk1BVF9IT1NUKX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZU5hbWVzOiBwYXJzZWQuZmlsZU5hbWVzLFxuICAgIG9wdGlvbnM6IHBhcnNlZC5vcHRpb25zXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGZpbGUgcGF0aCBmb3IgY29tcGFyaXNvbjogZm9yd2FyZCBzbGFzaGVzIGV2ZXJ5d2hlcmUsIGxvd2VyLWNhc2VkIG9uIGFcbiAqIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lIC0gVGhlIHBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIGNhbm9uaWNhbCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYW5vbmljYWwoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaWxlTmFtZS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgcmV0dXJuIHN5cy51c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzID8gbm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkS2VlcERpYWdub3N0aWNCeUZpbGUoZGlhZ25vc3RpYzogRGlhZ25vc3RpYywgc2hvdWxkS2VlcEZpbGU6IChmaWxlTmFtZTogc3RyaW5nKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhZGlhZ25vc3RpYy5maWxlIHx8IHNob3VsZEtlZXBGaWxlKHRvQ2Fub25pY2FsKGRpYWdub3N0aWMuZmlsZS5maWxlTmFtZSkpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBLDBCQUFvQjtB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
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jaGVjay1wcm9qZWN0LXR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUeXBlLWNoZWNrcyBhIHNldCBvZiBUeXBlU2NyaXB0IGZpbGVzIHdpdGggYHNraXBMaWJDaGVja2AgZGlzYWJsZWQsIGJ1dCByZXBvcnRzIG9ubHkgdGhlXG4gKiBkaWFnbm9zdGljcyB3aG9zZSBzb3VyY2UgZmlsZSB3ZSBvd24uIFRoaXMgbGV0cyB0aGUgZ2VuZXJhbCBidWlsZCBydW4gd2l0aCBgc2tpcExpYkNoZWNrOiB0cnVlYFxuICogKHNvIGl0IGRvZXMgbm90IGZhaWwgb24gYnJva2VuIHVwc3RyZWFtIGAuZC50c2AgZmlsZXMgd2UgZG8gbm90IGNvbnRyb2wsIHN1Y2ggYXMgYSBnaXZlblxuICogdmVyc2lvbidzIGBvYnNpZGlhbi5kLnRzYCkgd2hpbGUgc3RpbGwgZnVsbHkgdmFsaWRhdGluZyB0aGUgZGVjbGFyYXRpb25zIHdlIGF1dGhvci5cbiAqXG4gKiBXaGVuIHVwc3RyZWFtIHR5cGVzIGFyZSBmaXhlZCwgdGhlIGBJZ25vcmVkIE4gZGlhZ25vc3RpYyhzKWAgY291bnQgZHJvcHMgdG8gYDBgLCBzaWduYWxsaW5nIHRoZVxuICogd29ya2Fyb3VuZCBpcyBubyBsb25nZXIgZG9pbmcgYW55dGhpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21waWxlck9wdGlvbnMsXG4gIERpYWdub3N0aWMsXG4gIEZvcm1hdERpYWdub3N0aWNzSG9zdCxcbiAgUGFyc2VDb25maWdGaWxlSG9zdFxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIERpYWdub3N0aWNDYXRlZ29yeSxcbiAgZm9ybWF0RGlhZ25vc3RpYyxcbiAgZm9ybWF0RGlhZ25vc3RpY3MsXG4gIGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dCxcbiAgZ2V0UGFyc2VkQ29tbWFuZExpbmVPZkNvbmZpZ0ZpbGUsXG4gIGdldFByZUVtaXREaWFnbm9zdGljcyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja1Byb2plY3RUeXBlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tQcm9qZWN0VHlwZXNQYXJhbXMge1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBpZ25vcmVkIGRpYWdub3N0aWNzICh0aG9zZSBkcm9wcGVkIGJ5IHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX1cbiAgICogb3Ige0BsaW5rIENoZWNrUHJvamVjdFR5cGVzUGFyYW1zLnNob3VsZEtlZXBEaWFnbm9zdGljfSkgYXJlIHByaW50ZWQgaW4gZnVsbCBhZnRlciB0aGUgaWdub3JlZFxuICAgKiBjb3VudCwgc28gdGhleSBjYW4gYmUgaW5zcGVjdGVkLiBXaGVuIG9taXR0ZWQgb3IgYGZhbHNlYCwgb25seSB0aGUgY291bnQgaXMgcHJpbnRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNWZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgQ29tcGlsZXIgb3B0aW9ucyBmb3IgdGhlIHByb2dyYW0uIGBza2lwTGliQ2hlY2tgIGlzIGFsd2F5cyBmb3JjZWQgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IENvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgVGhlIHJvb3QgZmlsZXMgdG8gdHlwZS1jaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciBhIGRpYWdub3N0aWMgc2hvdWxkIGJlIHJlcG9ydGVkLCBiYXNlZCBvbiB0aGUgZGlhZ25vc3RpYyBpdHNlbGYgcmF0aGVyIHRoYW4gaXRzXG4gICAqIHNvdXJjZSBmaWxlLiBSdW5zIGluIGFkZGl0aW9uIHRvIHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX0g4oCUIGEgZGlhZ25vc3RpYyBpc1xuICAgKiByZXBvcnRlZCBvbmx5IHdoZW4gYm90aCBwcmVkaWNhdGVzIGtlZXAgaXQuIFVzZSB0aGlzIHRvIGRyb3AgZGlhZ25vc3RpY3MgdGhhdCBhcmUgcmVwb3J0ZWQgaW4gYVxuICAgKiBmaWxlIHdlIG93biBidXQgYXJlIGNhdXNlZCBieSBzb21ldGhpbmcgd2UgZG8gbm90IGNvbnRyb2wgKGUuZy4gYSBjcm9zcy1tb2R1bGUtZm9ybWF0IGludGVyb3BcbiAgICogY29tcGxhaW50IGFib3V0IGEgdGhpcmQtcGFydHkgaW1wb3J0KS4gV2hlbiBvbWl0dGVkLCBubyBkaWFnbm9zdGljIGlzIGRyb3BwZWQgb24gdGhpcyBiYXNpcy5cbiAgICpcbiAgICogQHBhcmFtIGRpYWdub3N0aWMgLSBUaGUgZGlhZ25vc3RpYyB0byBldmFsdWF0ZS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRGlhZ25vc3RpYz86IChkaWFnbm9zdGljOiBEaWFnbm9zdGljKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgYSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUgaXMgb25lIHdlIGNhcmUgYWJvdXQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIFRoZSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUsIGFscmVhZHkgcGFzc2VkIHRocm91Z2gge0BsaW5rIHRvQ2Fub25pY2FsfS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRmlsZTogKGZpbGVOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlc29sdmVkIHJlc3VsdCBvZiB7QGxpbmsgcGFyc2VUc0NvbmZpZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkVHNDb25maWcge1xuICAvKipcbiAgVGhlIHJlc29sdmVkIGxpc3Qgb2YgZmlsZXMgdGhlIGNvbmZpZyBpbmNsdWRlcyAoYWJzb2x1dGUgcGF0aHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIGNvbXBpbGVyIG9wdGlvbnMgKHdpdGggYGV4dGVuZHNgIGFwcGxpZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xufVxuXG5jb25zdCBGT1JNQVRfSE9TVDogRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0ge1xuICBnZXRDYW5vbmljYWxGaWxlTmFtZTogKGZpbGVOYW1lKSA9PiBmaWxlTmFtZSxcbiAgZ2V0Q3VycmVudERpcmVjdG9yeTogKCkgPT4gc3lzLmdldEN1cnJlbnREaXJlY3RvcnkoKSxcbiAgZ2V0TmV3TGluZTogKCkgPT4gc3lzLm5ld0xpbmVcbn07XG5cbi8qKlxuICogVHlwZS1jaGVja3MgYSBzZXQgb2YgZmlsZXMgd2l0aCBgc2tpcExpYkNoZWNrOiBmYWxzZWAsIGJ1dCByZXBvcnRzIG9ubHkgdGhlIGRpYWdub3N0aWNzIHdob3NlXG4gKiBzb3VyY2UgZmlsZSBwYXNzZXMgYHNob3VsZEtlZXBGaWxlYC4gRGlhZ25vc3RpY3MgZnJvbSBmaWxlcyB3ZSBkbyBub3QgY29udHJvbCAoZS5nLiBicm9rZW5cbiAqIHRoaXJkLXBhcnR5IGAuZC50c2AgcHVsbGVkIGluIHRyYW5zaXRpdmVseSkgYXJlIGRyb3BwZWQsIHdoaWxlIHN0aWxsIGJlaW5nIGNvdW50ZWQgZm9yXG4gKiB2aXNpYmlsaXR5LiBXaGVuIGBpc1ZlcmJvc2VgIGlzIHNldCwgdGhlIGRyb3BwZWQgZGlhZ25vc3RpY3MgYXJlIGFsc28gcHJpbnRlZCBpbiBmdWxsLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcHJvZ3JhbSBpbnB1dHMgYW5kIHRoZSBrZWVwIHByZWRpY2F0ZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIG5vIHJlcG9ydGVkIGRpYWdub3N0aWMgaXMgYW4gZXJyb3IsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcm9qZWN0VHlwZXMocGFyYW1zOiBDaGVja1Byb2plY3RUeXBlc1BhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCBvcHRpb25zOiBDb21waWxlck9wdGlvbnMgPSB7XG4gICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgc2tpcExpYkNoZWNrOiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKHtcbiAgICBvcHRpb25zLFxuICAgIHJvb3ROYW1lczogWy4uLnBhcmFtcy5yb290TmFtZXNdXG4gIH0pO1xuXG4gIGNvbnN0IGFsbERpYWdub3N0aWNzID0gZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuICBjb25zdCBrZXB0RGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+IHNob3VsZEtlZXBEaWFnbm9zdGljQnlGaWxlKGRpYWdub3N0aWMsIHBhcmFtcy5zaG91bGRLZWVwRmlsZSkgJiYgKHBhcmFtcy5zaG91bGRLZWVwRGlhZ25vc3RpYz8uKGRpYWdub3N0aWMpID8/IHRydWUpKTtcbiAgY29uc3QgaWdub3JlZENvdW50ID0gYWxsRGlhZ25vc3RpY3MubGVuZ3RoIC0ga2VwdERpYWdub3N0aWNzLmxlbmd0aDtcblxuICBpZiAoa2VwdERpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShmb3JtYXREaWFnbm9zdGljc1dpdGhDb2xvckFuZENvbnRleHQoa2VwdERpYWdub3N0aWNzLCBGT1JNQVRfSE9TVCkpO1xuICB9XG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYElnbm9yZWQgJHtTdHJpbmcoaWdub3JlZENvdW50KX0gZGlhZ25vc3RpYyhzKSBvdXRzaWRlIHRoZSB2YWxpZGF0ZWQgc2V0LlxcbmApO1xuXG4gIGlmIChwYXJhbXMuaXNWZXJib3NlICYmIGlnbm9yZWRDb3VudCA+IDApIHtcbiAgICBjb25zdCBpZ25vcmVkRGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+ICFrZXB0RGlhZ25vc3RpY3MuaW5jbHVkZXMoZGlhZ25vc3RpYykpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dChpZ25vcmVkRGlhZ25vc3RpY3MsIEZPUk1BVF9IT1NUKSk7XG4gIH1cblxuICByZXR1cm4ga2VwdERpYWdub3N0aWNzLmV2ZXJ5KChkaWFnbm9zdGljKSA9PiBkaWFnbm9zdGljLmNhdGVnb3J5ICE9PSBEaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIGB0c2NvbmZpZy5qc29uYCAocmVzb2x2aW5nIGBleHRlbmRzYCwgYGluY2x1ZGVgLCBgZXhjbHVkZWApIGludG8gdGhlIHJlc29sdmVkIGZpbGUgbGlzdFxuICogYW5kIGNvbXBpbGVyIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHRzQ29uZmlnUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGZpbGUgbmFtZXMgYW5kIG9wdGlvbnMuXG4gKiBAdGhyb3dzIElmIHRoZSBjb25maWcgY2Fubm90IGJlIHBhcnNlZCBvciBjb250YWlucyBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRzQ29uZmlnKHRzQ29uZmlnUGF0aDogc3RyaW5nKTogUGFyc2VkVHNDb25maWcge1xuICBjb25zdCBob3N0OiBQYXJzZUNvbmZpZ0ZpbGVIb3N0ID0ge1xuICAgIGZpbGVFeGlzdHM6IChwYXRoKSA9PiBzeXMuZmlsZUV4aXN0cyhwYXRoKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiAoKSA9PiBzeXMuZ2V0Q3VycmVudERpcmVjdG9yeSgpLFxuICAgIG9uVW5SZWNvdmVyYWJsZUNvbmZpZ0ZpbGVEaWFnbm9zdGljOiAoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWMoZGlhZ25vc3RpYywgRk9STUFUX0hPU1QpKTtcbiAgICB9LFxuICAgIHJlYWREaXJlY3Rvcnk6IChyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSA9PiBzeXMucmVhZERpcmVjdG9yeShyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSxcbiAgICByZWFkRmlsZTogKHBhdGgpID0+IHN5cy5yZWFkRmlsZShwYXRoKSxcbiAgICB1c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzOiBzeXMudXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lc1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlZCA9IGdldFBhcnNlZENvbW1hbmRMaW5lT2ZDb25maWdGaWxlKHRzQ29uZmlnUGF0aCwgdW5kZWZpbmVkLCBob3N0KTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFR5cGVTY3JpcHQgY29uZmlnOiAke3RzQ29uZmlnUGF0aH1gKTtcbiAgfVxuXG4gIGlmIChwYXJzZWQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyB3aGlsZSBwYXJzaW5nIFR5cGVTY3JpcHQgY29uZmlnICR7dHNDb25maWdQYXRofTpcXG4ke2Zvcm1hdERpYWdub3N0aWNzKHBhcnNlZC5lcnJvcnMsIEZPUk1BVF9IT1NUKX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZU5hbWVzOiBwYXJzZWQuZmlsZU5hbWVzLFxuICAgIG9wdGlvbnM6IHBhcnNlZC5vcHRpb25zXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGZpbGUgcGF0aCBmb3IgY29tcGFyaXNvbjogZm9yd2FyZCBzbGFzaGVzIGV2ZXJ5d2hlcmUsIGxvd2VyLWNhc2VkIG9uIGFcbiAqIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lIC0gVGhlIHBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIGNhbm9uaWNhbCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYW5vbmljYWwoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaWxlTmFtZS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgcmV0dXJuIHN5cy51c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzID8gbm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkS2VlcERpYWdub3N0aWNCeUZpbGUoZGlhZ25vc3RpYzogRGlhZ25vc3RpYywgc2hvdWxkS2VlcEZpbGU6IChmaWxlTmFtZTogc3RyaW5nKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhZGlhZ25vc3RpYy5maWxlIHx8IHNob3VsZEtlZXBGaWxlKHRvQ2Fub25pY2FsKGRpYWdub3N0aWMuZmlsZS5maWxlTmFtZSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSwwQkFBb0I7QUFDcEIsd0JBU087QUE2RFAsTUFBTSxjQUFxQztBQUFBLEVBQ3pDLHNC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