@mnaoumov/typescript-dev-toolkit 3.9.0 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/commitlint-config.cjs +4 -1
- package/dist/lib/cjs/commitlint-config.d.cts +2 -2
- package/dist/lib/cjs/commitlint-lint-md-header.cjs +78 -0
- package/dist/lib/cjs/commitlint-lint-md-header.d.cts +40 -0
- package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +8 -2
- package/dist/lib/cjs/docs-site/api-doc-settings.cjs +1 -1
- package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +5 -0
- package/dist/lib/cjs/docs-site/docs-site-config.cjs +3 -1
- package/dist/lib/cjs/docs-site/docs-site-config.d.cts +8 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/test-runners/index.cjs +7 -1
- package/dist/lib/cjs/test-runners/index.d.cts +2 -0
- package/dist/lib/cjs/test-runners/stryker-config.cjs +102 -0
- package/dist/lib/cjs/test-runners/stryker-config.d.cts +60 -0
- package/dist/lib/cjs/test-runners/stryker.cjs +105 -0
- package/dist/lib/cjs/test-runners/stryker.d.cts +30 -0
- package/dist/lib/cjs/version.cjs +50 -29
- package/dist/lib/esm/commitlint-config.d.mts +2 -2
- package/dist/lib/esm/commitlint-config.mjs +7 -1
- package/dist/lib/esm/commitlint-lint-md-header.d.mts +40 -0
- package/dist/lib/esm/commitlint-lint-md-header.mjs +52 -0
- package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +8 -2
- package/dist/lib/esm/docs-site/api-doc-settings.d.mts +5 -0
- package/dist/lib/esm/docs-site/api-doc-settings.mjs +1 -1
- package/dist/lib/esm/docs-site/docs-site-config.d.mts +8 -0
- package/dist/lib/esm/docs-site/docs-site-config.mjs +3 -1
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/test-runners/index.d.mts +2 -0
- package/dist/lib/esm/test-runners/index.mjs +5 -1
- package/dist/lib/esm/test-runners/stryker-config.d.mts +60 -0
- package/dist/lib/esm/test-runners/stryker-config.mjs +63 -0
- package/dist/lib/esm/test-runners/stryker.d.mts +30 -0
- package/dist/lib/esm/test-runners/stryker.mjs +84 -0
- package/dist/lib/esm/version.mjs +50 -29
- package/package.json +12 -1
- package/test-runners/stryker/package.json +6 -0
- package/test-runners/stryker-config/package.json +6 -0
|
@@ -63,6 +63,7 @@ module.exports = __toCommonJS(commitlint_config_exports);
|
|
|
63
63
|
var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
|
|
64
64
|
var import_node_module = require('node:module');
|
|
65
65
|
var import_commitlint_forbidden_patterns = require('./commitlint-forbidden-patterns.cjs');
|
|
66
|
+
var import_commitlint_lint_md_header = require('./commitlint-lint-md-header.cjs');
|
|
66
67
|
var import_commitlint_spellcheck_header = require('./commitlint-spellcheck-header.cjs');
|
|
67
68
|
var __import_meta_url = globalThis["import.meta.url"] ?? (function getCjsImportMetaUrl() {
|
|
68
69
|
if (typeof __filename === "string") {
|
|
@@ -85,11 +86,13 @@ const commitlintConfig = {
|
|
|
85
86
|
{
|
|
86
87
|
rules: {
|
|
87
88
|
...import_commitlint_forbidden_patterns.forbiddenPatternsPlugin.rules,
|
|
89
|
+
...import_commitlint_lint_md_header.lintMdHeaderPlugin.rules,
|
|
88
90
|
...import_commitlint_spellcheck_header.spellcheckHeaderPlugin.rules
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
93
|
],
|
|
92
94
|
rules: {
|
|
95
|
+
[import_commitlint_lint_md_header.LINT_MD_HEADER_RULE_NAME]: [ERROR_SEVERITY, "always"],
|
|
93
96
|
[import_commitlint_forbidden_patterns.NO_FORBIDDEN_PATTERNS_RULE_NAME]: [ERROR_SEVERITY, "always"],
|
|
94
97
|
[import_commitlint_spellcheck_header.SPELLCHECK_HEADER_RULE_NAME]: [ERROR_SEVERITY, "always"]
|
|
95
98
|
}
|
|
@@ -100,4 +103,4 @@ const obsidianDevUtilsConfig = commitlintConfig;
|
|
|
100
103
|
commitlintConfig,
|
|
101
104
|
obsidianDevUtilsConfig
|
|
102
105
|
});
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21taXRsaW50LWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoZnVuY3Rpb24gZ2V0Q2pzSW1wb3J0TWV0YVVybCgpIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgIGlmICh0eXBlb2YgdXJsLnBhdGhUb0ZpbGVVUkwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB1cmwucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKS5ocmVmO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHRoZSBwYWdlIFVSTCwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duLlxuICByZXR1cm4gZ2xvYmFsVGhpcy5sb2NhdGlvbj8uaHJlZiA/
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21taXRsaW50LWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoZnVuY3Rpb24gZ2V0Q2pzSW1wb3J0TWV0YVVybCgpIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgIGlmICh0eXBlb2YgdXJsLnBhdGhUb0ZpbGVVUkwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB1cmwucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKS5ocmVmO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHRoZSBwYWdlIFVSTCwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duLlxuICByZXR1cm4gZ2xvYmFsVGhpcy5sb2NhdGlvbj8uaHJlZiA/PyAnJztcbn0pKCk7XG4vKipcbiAqIEBmaWxlXG4gKlxuICogU2hhcmVkIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbiBmb3IgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBjb21taXRsaW50LCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBSdWxlQ29uZmlnU2V2ZXJpdHksXG4gIFVzZXJDb25maWdcbn0gZnJvbSAnQGNvbW1pdGxpbnQvdHlwZXMnO1xuXG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5cbmltcG9ydCB7XG4gIGZvcmJpZGRlblBhdHRlcm5zUGx1Z2luLFxuICBOT19GT1JCSURERU5fUEFUVEVSTlNfUlVMRV9OQU1FXG59IGZyb20gJy4vY29tbWl0bGludC1mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuaW1wb3J0IHtcbiAgTElOVF9NRF9IRUFERVJfUlVMRV9OQU1FLFxuICBsaW50TWRIZWFkZXJQbHVnaW5cbn0gZnJvbSAnLi9jb21taXRsaW50LWxpbnQtbWQtaGVhZGVyLnRzJztcbmltcG9ydCB7XG4gIFNQRUxMQ0hFQ0tfSEVBREVSX1JVTEVfTkFNRSxcbiAgc3BlbGxjaGVja0hlYWRlclBsdWdpblxufSBmcm9tICcuL2NvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIudHMnO1xuXG4vKlxuICogYFJ1bGVDb25maWdTZXZlcml0eS5FcnJvcmAuIFRoZSBlbnVtIGxpdmVzIGluIGEgcGFja2FnZSB0aGlzIGxpYnJhcnkgb25seSBoYXMgYXMgYSBkZXZEZXBlbmRlbmN5LCBzbyBpdHMgdmFsdWUgY2Fubm90IGJlIGltcG9ydGVkIGF0IHJ1bnRpbWUuXG4gKi9cbmNvbnN0IEVSUk9SX1NFVkVSSVRZX0xFVkVMID0gMjtcbmNvbnN0IEVSUk9SX1NFVkVSSVRZID0gY2FzdFRvPFJ1bGVDb25maWdTZXZlcml0eT4oRVJST1JfU0VWRVJJVFlfTEVWRUwpO1xuXG4vKipcbiAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsYCdzIGVudHJ5LCByZXNvbHZlZCBmcm9tIHRoaXMgbW9kdWxlLiBDb21taXRsaW50IHJlc29sdmVzIGFcbiAqIGJhcmUgYGV4dGVuZHNgIG5hbWUgZnJvbSB0aGUgY29uc3VtZXIncyB3b3JraW5nIGRpcmVjdG9yeSwgd2hpY2ggZmluZHMgdGhpcyBwYWNrYWdlJ3Mgb3duIGRlcGVuZGVuY3kgb25seSB3aGVuIHRoZVxuICogcGFja2FnZSBtYW5hZ2VyIGhhcHBlbmVkIHRvIGhvaXN0IGl0OyBhbiBhYnNvbHV0ZSBwYXRoIGZpbmRzIGl0IHdoZXJldmVyIGl0IHdhcyBpbnN0YWxsZWQuXG4gKi9cbmNvbnN0IENPTkZJR19DT05WRU5USU9OQUxfUEFUSCA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKS5yZXNvbHZlKCdAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsJyk7XG5cbi8qKlxuICogQ29tbWl0bGludCBjb25maWd1cmF0aW9uIGV4dGVuZGluZyBgQGNvbW1pdGxpbnQvY29uZmlnLWNvbnZlbnRpb25hbGAsIHBsdXMgYSBydWxlIHJlZnVzaW5nIGEgbWVzc2FnZSB3aG9zZVxuICogaGVhZGVyLCBib2R5IG9yIGZvb3RlciBtYXRjaGVzIHRoZSB1bnB1Ymxpc2hlZCBmb3JiaWRkZW4tcGF0dGVybnMgbGlzdCAoYSBuby1vcCB3aGVuIG5vbmUgaXMgY29uZmlndXJlZCksIGFuZFxuICogdHdvIHJ1bGVzIGNoZWNraW5nIHRoZSBoZWFkZXIgdGhlIHdheSB0aGUgcmVsZWFzZSBjaGVja3MgdGhlIGNoYW5nZWxvZyBidWxsZXQgaXQgYmVjb21lczogYSBzcGVsbGNoZWNrIChhIG5vLW9wXG4gKiBpbiBhIHByb2plY3Qgd2l0aCBubyBgc3BlbGxjaGVja2Agc2NyaXB0KSBhbmQgYSBtYXJrZG93bmxpbnQgKGEgbm8tb3AgaW4gYSBwcm9qZWN0IHdpdGggbm8gYGxpbnQ6bWRgIHNjcmlwdCkuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21taXRsaW50Q29uZmlnOiBVc2VyQ29uZmlnID0ge1xuICBleHRlbmRzOiBbQ09ORklHX0NPTlZFTlRJT05BTF9QQVRIXSxcbiAgLy8gT05FIHBsdWdpbiBvYmplY3QsIG5ldmVyIHR3bzogYEBjb21taXRsaW50L2xvYWRgIHN0b3JlcyBldmVyeSBpbmxpbmUgcGx1Z2luIHVuZGVyIHRoZSBzYW1lIGBsb2NhbGAga2V5LCBzbyBhXG4gIC8vIHNlY29uZCBvYmplY3Qgc2lsZW50bHkgcmVwbGFjZXMgdGhlIGZpcnN0IGFuZCBpdHMgcnVsZSB0aGVuIGZhaWxzIGFzIFwiRm91bmQgcnVsZXMgd2l0aG91dCBpbXBsZW1lbnRhdGlvblwiLlxuICBwbHVnaW5zOiBbXG4gICAge1xuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLi4uZm9yYmlkZGVuUGF0dGVybnNQbHVnaW4ucnVsZXMsXG4gICAgICAgIC4uLmxpbnRNZEhlYWRlclBsdWdpbi5ydWxlcyxcbiAgICAgICAgLi4uc3BlbGxjaGVja0hlYWRlclBsdWdpbi5ydWxlc1xuICAgICAgfVxuICAgIH1cbiAgXSxcbiAgcnVsZXM6IHtcbiAgICBbTElOVF9NRF9IRUFERVJfUlVMRV9OQU1FXTogW0VSUk9SX1NFVkVSSVRZLCAnYWx3YXlzJ10sXG4gICAgW05PX0ZPUkJJRERFTl9QQVRURVJOU19SVUxFX05BTUVdOiBbRVJST1JfU0VWRVJJVFksICdhbHdheXMnXSxcbiAgICBbU1BFTExDSEVDS19IRUFERVJfUlVMRV9OQU1FXTogW0VSUk9SX1NFVkVSSVRZLCAnYWx3YXlzJ11cbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgcHJldmlvdXMgbmFtZSBvZiB7QGxpbmsgY29tbWl0bGludENvbmZpZ30uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBjb21taXRsaW50Q29uZmlnfS4gVGhpcyBhbGlhcyBpcyByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogVXNlckNvbmZpZyA9IGNvbW1pdGxpbnRDb25maWc7XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLDBCQUF1QjtBQUN2Qix5QkFBOEI7QUFFOUIsMkNBR087QUFDUCx1Q0FHTztBQUNQLDBDQUdPO0FBdkNQLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sU0FBUyxzQkFBc0I7QUFDdkYsTUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNsQyxVQUFNLGVBQWU7QUFDckIsVUFBTSxNQUFNLGFBQWEsVUFBVTtBQUNuQyxRQUFJLE9BQU8sSUFBSSxrQkFBa0IsWUFBWTtBQUMzQyxhQUFPLElBQUksY0FBYyxVQUFVLEVBQUU7QUFBQSxJQUN2QztBQUFBLEVBQ0Y7QUFHQSxTQUFPLFdBQVcsVUFBVSxRQUFRO0FBQ3RDLEdBQUc7QUFpQ0gsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSxxQkFBaUIsNEJBQTJCLG9CQUFvQjtBQU90RSxNQUFNLCtCQUEyQixrQ0FBYyxpQkFBZSxFQUFFLFFBQVEsaUNBQWlDO0FBUWxHLE1BQU0sbUJBQStCO0FBQUEsRUFDMUMsU0FBUyxDQUFDLHdCQUF3QjtBQUFBO0FBQUE7QUFBQSxFQUdsQyxTQUFTO0FBQUEsSUFDUDtBQUFBLE1BQ0UsT0FBTztBQUFBLFFBQ0wsR0FBRyw2REFBd0I7QUFBQSxRQUMzQixHQUFHLG9EQUFtQjtBQUFBLFFBQ3RCLEdBQUcsMkRBQXVCO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsQ0FBQyx5REFBd0IsR0FBRyxDQUFDLGdCQUFnQixRQUFRO0FBQUEsSUFDckQsQ0FBQyxvRUFBK0IsR0FBRyxDQUFDLGdCQUFnQixRQUFRO0FBQUEsSUFDNUQsQ0FBQywrREFBMkIsR0FBRyxDQUFDLGdCQUFnQixRQUFRO0FBQUEsRUFDMUQ7QUFDRjtBQU9PLE1BQU0seUJBQXFDOyIsIm5hbWVzIjpbXX0=
|
|
@@ -8,8 +8,8 @@ import type { UserConfig } from '@commitlint/types' with { 'resolution-mode': 'i
|
|
|
8
8
|
/**
|
|
9
9
|
* Commitlint configuration extending `@commitlint/config-conventional`, plus a rule refusing a message whose
|
|
10
10
|
* header, body or footer matches the unpublished forbidden-patterns list (a no-op when none is configured), and
|
|
11
|
-
*
|
|
12
|
-
* project with no `spellcheck` script).
|
|
11
|
+
* two rules checking the header the way the release checks the changelog bullet it becomes: a spellcheck (a no-op
|
|
12
|
+
* in a project with no `spellcheck` script) and a markdownlint (a no-op in a project with no `lint:md` script).
|
|
13
13
|
*/
|
|
14
14
|
export declare const commitlintConfig: UserConfig;
|
|
15
15
|
/**
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __export = (target, all) => {
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from))
|
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var commitlint_lint_md_header_exports = {};
|
|
25
|
+
__export(commitlint_lint_md_header_exports, {
|
|
26
|
+
LINT_MD_HEADER_RULE_NAME: () => LINT_MD_HEADER_RULE_NAME,
|
|
27
|
+
lintMdHeaderPlugin: () => lintMdHeaderPlugin,
|
|
28
|
+
lintMdHeaderRule: () => lintMdHeaderRule
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(commitlint_lint_md_header_exports);
|
|
31
|
+
var import_markdownlint_content = require('./linters/markdownlint-content.cjs');
|
|
32
|
+
var import_npm = require('./npm.cjs');
|
|
33
|
+
var import_repo_paths = require('./repo-paths.cjs');
|
|
34
|
+
var import_root = require('./root.cjs');
|
|
35
|
+
var import_version = require('./version.cjs');
|
|
36
|
+
const LINT_MD_HEADER_RULE_NAME = "typescript-dev-toolkit/lint-md-header";
|
|
37
|
+
const LINT_MD_SCRIPT_NAME = "lint:md";
|
|
38
|
+
const FALLBACK_VERSION = "0.0.0";
|
|
39
|
+
async function lintMdHeaderRule(commit) {
|
|
40
|
+
if (!commit.header) {
|
|
41
|
+
return [true];
|
|
42
|
+
}
|
|
43
|
+
const packageJson = await (0, import_npm.readPackageJson)();
|
|
44
|
+
if (!Object.keys(packageJson.scripts ?? {}).includes(LINT_MD_SCRIPT_NAME)) {
|
|
45
|
+
return [true];
|
|
46
|
+
}
|
|
47
|
+
const version = packageJson.version ?? FALLBACK_VERSION;
|
|
48
|
+
const findings = await (0, import_markdownlint_content.lintMarkdownContent)({
|
|
49
|
+
content: `# CHANGELOG
|
|
50
|
+
|
|
51
|
+
## ${version}
|
|
52
|
+
|
|
53
|
+
- ${(0, import_version.autolinkBareUrls)(commit.header)}
|
|
54
|
+
`,
|
|
55
|
+
filePath: (0, import_root.resolvePathFromRootSafe)({ path: import_repo_paths.RepoPaths.ChangelogMd })
|
|
56
|
+
});
|
|
57
|
+
if (findings.length === 0) {
|
|
58
|
+
return [true];
|
|
59
|
+
}
|
|
60
|
+
return [
|
|
61
|
+
false,
|
|
62
|
+
`the header does not pass \`${LINT_MD_SCRIPT_NAME}\`, and it ships verbatim into the next release's changelog:
|
|
63
|
+
${findings.join("\n")}
|
|
64
|
+
Reword it so the changelog bullet it becomes passes the project's markdownlint configuration.`
|
|
65
|
+
];
|
|
66
|
+
}
|
|
67
|
+
const lintMdHeaderPlugin = {
|
|
68
|
+
rules: {
|
|
69
|
+
[LINT_MD_HEADER_RULE_NAME]: lintMdHeaderRule
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
73
|
+
0 && (module.exports = {
|
|
74
|
+
LINT_MD_HEADER_RULE_NAME,
|
|
75
|
+
lintMdHeaderPlugin,
|
|
76
|
+
lintMdHeaderRule
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIGNvbW1pdGxpbnQgcnVsZSB0aGF0IGxpbnRzIGEgY29tbWl0IEhFQURFUiB3aXRoIHRoZSBwcm9qZWN0J3Mgb3duIGBsaW50Om1kYCBjb25maWd1cmF0aW9uLlxuICpcbiAqIFRoZSBoZWFkZXIgaXMgdGhlIG9uZSBwYXJ0IG9mIGEgY29tbWl0IG1lc3NhZ2UgdGhhdCBzaGlwcyB2ZXJiYXRpbTogYSByZWxlYXNlIHR1cm5zIGV2ZXJ5IGNvbW1pdCBzdWJqZWN0XG4gKiBzaW5jZSB0aGUgbGFzdCB0YWcgaW50byBhIGAtIDxzdWJqZWN0PmAgYnVsbGV0IG9mIHRoZSBuZXcgYENIQU5HRUxPRy5tZGAgc2VjdGlvbiwgYW5kIGxpbnRzIHRoYXQgc2VjdGlvbiB3aXRoXG4gKiBgbGludDptZGAgYmVmb3JlIHdyaXRpbmcgaXQuIFRoYXQgY2hlY2sgcnVucyBhdCByZWxlYXNlIHRpbWUsIGFmdGVyIHRoZSB3aG9sZSBwcmVmbGlnaHQgZ2F0ZSwgYW5kIHdlZWtzIGFmdGVyXG4gKiB0aGUgc3ViamVjdCB3YXMgcHVzaGVkOiBhIHJlbGVhc2Ugb25jZSBwYXNzZWQgaXRzIDI1LW1pbnV0ZSBwcmVmbGlnaHQgYW5kIHdhcyB0aGVuIHJlZnVzZWQgYmVjYXVzZSBhIGN1c3RvbVxuICogcnVsZSBmbGFnZ2VkIGEgcGx1Z2luIG5hbWUgaW4gYSBwdXNoZWQgYGRvY3MocmVhZG1lKTpgIHN1YmplY3QuIEEgcHVzaGVkIHN1YmplY3QgY2Fubm90IGJlIGNoYW5nZWQsIHNvIHRoZVxuICogcmVsZWFzZSBoYWQgdG8gYmUgcmUtcnVuIHdpdGggaGFuZC13cml0dGVuIG5vdGVzLiBUaGUgY29tbWl0LW1zZyBob29rIGlzIHRoZSBsYXN0IHBvaW50IGF0IHdoaWNoIHRoZSBzdWJqZWN0XG4gKiBjYW4gc3RpbGwgYmUgY2hhbmdlZCBmb3IgZnJlZS5cbiAqXG4gKiBUaGUgaGVhZGVyIGlzIGNoZWNrZWQgQVMgdGhlIHNlY3Rpb24gdGhlIHJlbGVhc2Ugd291bGQgYnVpbGQgZnJvbSBpdCwgYXR0cmlidXRlZCB0byBgQ0hBTkdFTE9HLm1kYCwgc28gdGhlXG4gKiB2ZXJkaWN0IGlzIHRoZSBvbmUgdGhlIHJlbGVhc2Ugd291bGQgZ2l2ZTogdGhlIHNhbWUgY29uZmlndXJhdGlvbiwgdGhlIHNhbWUgY3VzdG9tIHJ1bGVzLCBhbmQgYmFyZSBVUkxzXG4gKiBhdXRvbGlua2VkIHRoZSB3YXkgdGhlIHJlbGVhc2UgYXV0b2xpbmtzIHRoZW0uIEl0IHJ1bnMgb25seSB3aGVyZSB0aGUgcHJvamVjdCBkZWZpbmVzIGEgYGxpbnQ6bWRgIHNjcmlwdCxcbiAqIHdoaWNoIGlzIHRoZSBjb25kaXRpb24gdGhlIHJlbGVhc2UgYXBwbGllcyB0b28uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBc3luY1J1bGUsXG4gIFBsdWdpbixcbiAgUnVsZU91dGNvbWVcbn0gZnJvbSAnQGNvbW1pdGxpbnQvdHlwZXMnO1xuXG5pbXBvcnQgeyBsaW50TWFya2Rvd25Db250ZW50IH0gZnJvbSAnLi9saW50ZXJzL21hcmtkb3dubGludC1jb250ZW50LnRzJztcbmltcG9ydCB7IHJlYWRQYWNrYWdlSnNvbiB9IGZyb20gJy4vbnBtLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290U2FmZSB9IGZyb20gJy4vcm9vdC50cyc7XG5pbXBvcnQgeyBhdXRvbGlua0JhcmVVcmxzIH0gZnJvbSAnLi92ZXJzaW9uLnRzJztcblxuLyoqXG4gKiBUaGUgbmFtZSB0aGUgcnVsZSBpcyByZWdpc3RlcmVkIHVuZGVyLlxuICovXG5leHBvcnQgY29uc3QgTElOVF9NRF9IRUFERVJfUlVMRV9OQU1FID0gJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbGludC1tZC1oZWFkZXInO1xuXG4vKipcbiAqIFRoZSBucG0gc2NyaXB0IHdob3NlIHByZXNlbmNlIG9wdHMgYSBwcm9qZWN0IGludG8gdGhlIGNoZWNrLlxuICovXG5jb25zdCBMSU5UX01EX1NDUklQVF9OQU1FID0gJ2xpbnQ6bWQnO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIHRoZSBzZWN0aW9uIGhlYWRpbmcgbmFtZXMgd2hlbiBgcGFja2FnZS5qc29uYCBoYXMgbm9uZS4gTWFya2Rvd25saW50IHJlYWRzIGl0IGFzIGFueSBoZWFkaW5nIHRleHQuXG4gKi9cbmNvbnN0IEZBTExCQUNLX1ZFUlNJT04gPSAnMC4wLjAnO1xuXG50eXBlIENvbW1pdCA9IFBhcmFtZXRlcnM8QXN5bmNSdWxlPlswXTtcblxuLyoqXG4gKiBMaW50cyB0aGUgY29tbWl0IGhlYWRlciBhcyB0aGUgY2hhbmdlbG9nIHNlY3Rpb24gdGhlIHJlbGVhc2Ugd291bGQgYnVpbGQgZnJvbSBpdC5cbiAqXG4gKiBPbmx5IHRoZSBgYWx3YXlzYCBjb25kaXRpb24gaXMgbWVhbmluZ2Z1bDogYG5ldmVyYCB3b3VsZCByZXF1aXJlIHRoZSBoZWFkZXIgdG8gZmFpbCBgbGludDptZGAsIHNvIGl0IGlzXG4gKiB0cmVhdGVkIHRoZSBzYW1lIHdheSByYXRoZXIgdGhhbiBpbnZlcnRlZC5cbiAqXG4gKiBAcGFyYW0gY29tbWl0IC0gVGhlIHBhcnNlZCBjb21taXQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBydWxlIG91dGNvbWUsIG5hbWluZyBlYWNoIGZpbmRpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaW50TWRIZWFkZXJSdWxlKGNvbW1pdDogQ29tbWl0KTogUHJvbWlzZTxSdWxlT3V0Y29tZT4ge1xuICBpZiAoIWNvbW1pdC5oZWFkZXIpIHtcbiAgICByZXR1cm4gW3RydWVdO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb24gPSBhd2FpdCByZWFkUGFja2FnZUpzb24oKTtcbiAgaWYgKCFPYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5zY3JpcHRzID8/IHt9KS5pbmNsdWRlcyhMSU5UX01EX1NDUklQVF9OQU1FKSkge1xuICAgIHJldHVybiBbdHJ1ZV07XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gcGFja2FnZUpzb24udmVyc2lvbiA/PyBGQUxMQkFDS19WRVJTSU9OO1xuICBjb25zdCBmaW5kaW5ncyA9IGF3YWl0IGxpbnRNYXJrZG93bkNvbnRlbnQoe1xuICAgIGNvbnRlbnQ6IGAjIENIQU5HRUxPR1xcblxcbiMjICR7dmVyc2lvbn1cXG5cXG4tICR7YXV0b2xpbmtCYXJlVXJscyhjb21taXQuaGVhZGVyKX1cXG5gLFxuICAgIGZpbGVQYXRoOiByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IFJlcG9QYXRocy5DaGFuZ2Vsb2dNZCB9KVxuICB9KTtcblxuICBpZiAoZmluZGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFt0cnVlXTtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgZmFsc2UsXG4gICAgYHRoZSBoZWFkZXIgZG9lcyBub3QgcGFzcyBcXGAke0xJTlRfTURfU0NSSVBUX05BTUV9XFxgLCBhbmQgaXQgc2hpcHMgdmVyYmF0aW0gaW50byB0aGUgbmV4dCByZWxlYXNlJ3MgY2hhbmdlbG9nOlxcbmBcbiAgICArIGAke2ZpbmRpbmdzLmpvaW4oJ1xcbicpfVxcbmBcbiAgICArICdSZXdvcmQgaXQgc28gdGhlIGNoYW5nZWxvZyBidWxsZXQgaXQgYmVjb21lcyBwYXNzZXMgdGhlIHByb2plY3RcXCdzIG1hcmtkb3dubGludCBjb25maWd1cmF0aW9uLidcbiAgXTtcbn1cblxuLyoqXG4gKiBUaGUgY29tbWl0bGludCBwbHVnaW4gY2Fycnlpbmcge0BsaW5rIGxpbnRNZEhlYWRlclJ1bGV9LlxuICovXG5leHBvcnQgY29uc3QgbGludE1kSGVhZGVyUGx1Z2luOiBQbHVnaW4gPSB7XG4gIHJ1bGVzOiB7XG4gICAgW0xJTlRfTURfSEVBREVSX1JVTEVfTkFNRV06IGxpbnRNZEhlYWRlclJ1bGVcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QkEsa0NBQW9DO0FBQ3BDLGlCQUFnQztBQUNoQyx3QkFBMEI7QUFDMUIsa0JBQXdDO0FBQ3hDLHFCQUFpQztBQUsxQixNQUFNLDJCQUEyQjtBQUt4QyxNQUFNLHNCQUFzQjtBQUs1QixNQUFNLG1CQUFtQjtBQWF6QixlQUFzQixpQkFBaUIsUUFBc0M7QUFDM0UsTUFBSSxDQUFDLE9BQU8sUUFBUTtBQUNsQixXQUFPLENBQUMsSUFBSTtBQUFBLEVBQ2Q7QUFFQSxRQUFNLGNBQWMsVUFBTSw0QkFBZ0I7QUFDMUMsTUFBSSxDQUFDLE9BQU8sS0FBSyxZQUFZLFdBQVcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxtQkFBbUIsR0FBRztBQUN6RSxXQUFPLENBQUMsSUFBSTtBQUFBLEVBQ2Q7QUFFQSxRQUFNLFVBQVUsWUFBWSxXQUFXO0FBQ3ZDLFFBQU0sV0FBVyxVQUFNLGlEQUFvQjtBQUFBLElBQ3pDLFNBQVM7QUFBQTtBQUFBLEtBQXFCLE9BQU87QUFBQTtBQUFBLFFBQVMsaUNBQWlCLE9BQU8sTUFBTSxDQUFDO0FBQUE7QUFBQSxJQUM3RSxjQUFVLHFDQUF3QixFQUFFLE1BQU0sNEJBQVUsWUFBWSxDQUFDO0FBQUEsRUFDbkUsQ0FBQztBQUVELE1BQUksU0FBUyxXQUFXLEdBQUc7QUFDekIsV0FBTyxDQUFDLElBQUk7QUFBQSxFQUNkO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLDhCQUE4QixtQkFBbUI7QUFBQSxFQUM1QyxTQUFTLEtBQUssSUFBSSxDQUFDO0FBQUE7QUFBQSxFQUUxQjtBQUNGO0FBS08sTUFBTSxxQkFBNkI7QUFBQSxFQUN4QyxPQUFPO0FBQUEsSUFDTCxDQUFDLHdCQUF3QixHQUFHO0FBQUEsRUFDOUI7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* A commitlint rule that lints a commit HEADER with the project's own `lint:md` configuration.
|
|
6
|
+
*
|
|
7
|
+
* The header is the one part of a commit message that ships verbatim: a release turns every commit subject
|
|
8
|
+
* since the last tag into a `- <subject>` bullet of the new `CHANGELOG.md` section, and lints that section with
|
|
9
|
+
* `lint:md` before writing it. That check runs at release time, after the whole preflight gate, and weeks after
|
|
10
|
+
* the subject was pushed: a release once passed its 25-minute preflight and was then refused because a custom
|
|
11
|
+
* rule flagged a plugin name in a pushed `docs(readme):` subject. A pushed subject cannot be changed, so the
|
|
12
|
+
* release had to be re-run with hand-written notes. The commit-msg hook is the last point at which the subject
|
|
13
|
+
* can still be changed for free.
|
|
14
|
+
*
|
|
15
|
+
* The header is checked AS the section the release would build from it, attributed to `CHANGELOG.md`, so the
|
|
16
|
+
* verdict is the one the release would give: the same configuration, the same custom rules, and bare URLs
|
|
17
|
+
* autolinked the way the release autolinks them. It runs only where the project defines a `lint:md` script,
|
|
18
|
+
* which is the condition the release applies too.
|
|
19
|
+
*/
|
|
20
|
+
import type { AsyncRule, Plugin, RuleOutcome } from '@commitlint/types' with { 'resolution-mode': 'import' };
|
|
21
|
+
/**
|
|
22
|
+
* The name the rule is registered under.
|
|
23
|
+
*/
|
|
24
|
+
export declare const LINT_MD_HEADER_RULE_NAME = "typescript-dev-toolkit/lint-md-header";
|
|
25
|
+
type Commit = Parameters<AsyncRule>[0];
|
|
26
|
+
/**
|
|
27
|
+
* Lints the commit header as the changelog section the release would build from it.
|
|
28
|
+
*
|
|
29
|
+
* Only the `always` condition is meaningful: `never` would require the header to fail `lint:md`, so it is
|
|
30
|
+
* treated the same way rather than inverted.
|
|
31
|
+
*
|
|
32
|
+
* @param commit - The parsed commit.
|
|
33
|
+
* @returns A {@link Promise} that resolves to the rule outcome, naming each finding.
|
|
34
|
+
*/
|
|
35
|
+
export declare function lintMdHeaderRule(commit: Commit): Promise<RuleOutcome>;
|
|
36
|
+
/**
|
|
37
|
+
* The commitlint plugin carrying {@link lintMdHeaderRule}.
|
|
38
|
+
*/
|
|
39
|
+
export declare const lintMdHeaderPlugin: Plugin;
|
|
40
|
+
export {};
|
|
@@ -522,8 +522,14 @@ function sidebarTreeToEntries(node, label) {
|
|
|
522
522
|
return { collapsed: true, items, label };
|
|
523
523
|
}
|
|
524
524
|
function getApiIndexIntro(namespaces) {
|
|
525
|
-
const { packageName, publicApiEntry } = (0, import_api_doc_settings.getApiDocSettings)();
|
|
525
|
+
const { apiIndexIntro, importStatement, packageName, publicApiEntry } = (0, import_api_doc_settings.getApiDocSettings)();
|
|
526
|
+
if (apiIndexIntro !== void 0) {
|
|
527
|
+
return apiIndexIntro;
|
|
528
|
+
}
|
|
526
529
|
const intro = `The complete API reference for \`${packageName}\`, generated from its TSDoc. `;
|
|
530
|
+
if (importStatement !== void 0) {
|
|
531
|
+
return `${intro}The modules below group the exports by source module; each export's page shows the statement it is imported with.`;
|
|
532
|
+
}
|
|
527
533
|
if (publicApiEntry !== void 0) {
|
|
528
534
|
return `${intro}Every export is imported from the package root, \`${packageName}\`; the modules below group them by source module.`;
|
|
529
535
|
}
|
|
@@ -565,4 +571,4 @@ function renderNamespaceTable(lines, heading, columnLabel, entries, allTypes, na
|
|
|
565
571
|
renderVariablePage,
|
|
566
572
|
sidebarTreeToEntries
|
|
567
573
|
});
|
|
568
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1EWCBwYWdlICsgc2lkZWJhciBlbWlzc2lvbjogcmVuZGVycyBtb2R1bGUgaW5kZXggcGFnZXMsIHBlci10eXBlIG92ZXJ2aWV3IHBhZ2VzLCBwZXItbWVtYmVyIHBhZ2VzLFxuICogYmFja2xpbmtzLCBhbmQgdGhlIFN0YXJsaWdodCBzaWRlYmFyIEpTT04uXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgUGFnZUNvbnRlbnQsXG4gIFBhZ2VGcm9udE1hdHRlcixcbiAgU2lkZWJhckVudHJ5LFxuICBTaWRlYmFyTGluayxcbiAgU2lkZWJhclRyZWVOb2RlLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBsaW5rQmFzZVR5cGUsXG4gIG1hcmtkb3duVG9IdG1sLFxuICBtZW1iZXJIcmVmLFxuICByZW5kZXJFeGFtcGxlTWR4LFxuICByZW5kZXJNZHhQcm9zZSxcbiAgcmVuZGVyVHlwZVdpdGhMaW5rcyxcbiAgcmVzb2x2ZUxpbmtzLFxuICB0b1R5cGVGaWxlU2VnbWVudCxcbiAgdG9UeXBlUm91dGVTZWdtZW50LFxuICB0eXBlTGlua1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgZ2V0QXBpRG9jU2V0dGluZ3MgfSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHtcbiAgZW5zdXJlRGlyZWN0b3J5LFxuICBlc2NhcGVKc1N0cmluZyxcbiAgZXNjYXBlSnN4QXR0cmlidXRlLFxuICBlc2NhcGVNYXJrZG93bixcbiAgZXNjYXBlTWR4QW5nbGVCcmFja2V0cyxcbiAgZXNjYXBlTWR4QnJhY2VzLFxuICBlc2NhcGVNZHhQcm9zZSxcbiAgZXNjYXBlWWFtbCxcbiAgZ2V0RGlzcGxheU5hbWUsXG4gIGdldEltcG9ydFN0YXRlbWVudCxcbiAgZ2V0TmFtZXNwYWNlRGlyZWN0b3J5LFxuICBtZW1iZXJSb3V0ZVNlZ21lbnQsXG4gIG1lbWJlclNsdWcsXG4gIG92ZXJsb2FkUm91dGVTZWdtZW50LFxuICBvdmVybG9hZFNsdWcsXG4gIHN0cmlwTWFya2Rvd24sXG4gIHRydW5jYXRlU2lnbmF0dXJlXG59IGZyb20gJy4vYXBpLWRvYy10ZXh0LXV0aWxzLnRzJztcbmltcG9ydCB7IEFQSV9DT01QT05FTlRTX0lNUE9SVF9QUkVGSVggfSBmcm9tICcuL2RvY3Mtc2l0ZS1hc3NldHMudHMnO1xuXG5jb25zdCBKU09OX0lOREVOVCA9IDI7XG5cbi8qKlxuICogQXBwZW5kIGJhY2tsaW5rcyB0byBvdmVydmlldyBwYWdlcyBhbmQgd3JpdGUgYWxsIGZpbGVzLiBLZXllZCBieSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqXG4gKiBAcGFyYW0gcGFnZUNvbnRlbnRzIC0gRXZlcnkgb3ZlcnZpZXcgcGFnZSdzIGNvbnRlbnQgYW5kIHBhdGgsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGVuZEJhY2tsaW5rc0FuZFdyaXRlKFxuICBwYWdlQ29udGVudHM6IE1hcDxzdHJpbmcsIFBhZ2VDb250ZW50PixcbiAgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGJhY2tsaW5rcyA9IGJ1aWxkQmFja2xpbmtzRnJvbUNvbnRlbnQocGFnZUNvbnRlbnRzLCBhbGxUeXBlcyk7XG5cbiAgZm9yIChjb25zdCBba2V5LCB7IGNvbnRlbnQsIGZpbGVQYXRoIH1dIG9mIHBhZ2VDb250ZW50cykge1xuICAgIGNvbnN0IHR5cGVCYWNrbGlua3MgPSBiYWNrbGlua3MuZ2V0KGtleSkgPz8gW107XG4gICAgY29uc3QgbGluZXMgPSBbY29udGVudF07XG4gICAgaWYgKHR5cGVCYWNrbGlua3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc29ydGVkQmFja2xpbmtzID0gWy4uLnR5cGVCYWNrbGlua3NdLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gICAgICBsaW5lcy5wdXNoKCcnLCAnLS0tJywgJycsICcqKkxpbmtzIHRvIHRoaXMgcGFnZToqKicsICcnKTtcbiAgICAgIGZvciAoY29uc3QgYmxLZXkgb2Ygc29ydGVkQmFja2xpbmtzKSB7XG4gICAgICAgIGNvbnN0IGJsSW5mbyA9IGVuc3VyZU5vbk51bGxhYmxlKGFsbFR5cGVzLmdldChibEtleSkpO1xuICAgICAgICBjb25zdCBibE5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGJsSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICBsaW5lcy5wdXNoKGAtIFske2JsSW5mby5uYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtibE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudChibEluZm8ubmFtZXNwYWNlLCBibEluZm8ubmFtZSl9LylgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCBiYWNrbGlua3MgYnkgc2Nhbm5pbmcgZ2VuZXJhdGVkIHBhZ2UgY29udGVudCBmb3IgaW50ZXJuYWwgQVBJIGxpbmtzLiBLZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKlxuICogQHBhcmFtIHBhZ2VDb250ZW50cyAtIEV2ZXJ5IG92ZXJ2aWV3IHBhZ2UncyBjb250ZW50IGFuZCBwYXRoLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcmV0dXJucyBFYWNoIHJlZmVyZW5jZWQgdHlwZSdzIHF1YWxpZmllZCBpZCBtYXBwZWQgdG8gdGhlIGlkcyBvZiB0aGUgcGFnZXMgbGlua2luZyB0byBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFja2xpbmtzRnJvbUNvbnRlbnQoXG4gIHBhZ2VDb250ZW50czogTWFwPHN0cmluZywgUGFnZUNvbnRlbnQ+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+XG4pOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4ge1xuICBjb25zdCBiYWNrbGlua3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIC8vIEVtaXR0ZWQgVVJMcyBsb3dlcmNhc2UgdGhlIHR5cGUgc2VnbWVudCAoc2VlIHRvUm91dGVTZWdtZW50KSwgc28gbWFwIGVhY2ggbG93ZXJjYXNlZCByb3V0ZVxuICAvLyBpZGVudGl0eSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBxdWFsaWZpZWQgdHlwZSBrZXkuXG4gIGNvbnN0IHJvdXRlS2V5VG9UeXBlS2V5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBbdHlwZUtleSwgaW5mb10gb2YgYWxsVHlwZXMpIHtcbiAgICByb3V0ZUtleVRvVHlwZUtleS5zZXQoYCR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0jJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9YCwgdHlwZUtleSk7XG4gIH1cbiAgY29uc3QgZXNjYXBlZEJhc2UgPSBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoLnJlcGxhY2VBbGwoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBTdHJpbmcucmF3YFxcJCZgKTtcbiAgY29uc3QgbGlua1BhdHRlcm4gPSBuZXcgUmVnRXhwKGAke2VzY2FwZWRCYXNlfS9hcGkvKD88cGF0aD4oPzpbYS16QS1aMC05X0AtXSsvKSspYCwgJ2cnKTtcbiAgZm9yIChjb25zdCBbc291cmNlS2V5LCB7IGNvbnRlbnQgfV0gb2YgcGFnZUNvbnRlbnRzKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBjb250ZW50Lm1hdGNoQWxsKGxpbmtQYXR0ZXJuKSkge1xuICAgICAgLy8gVGhlIHBhdHRlcm4gcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHNlZ21lbnQuXG4gICAgICBjb25zdCBzZWdtZW50cyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdwYXRoJykuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IGVuc3VyZU5vbk51bGxhYmxlKHNlZ21lbnRzLmF0KC0xKSk7XG4gICAgICBjb25zdCBuYW1lc3BhY2UgPSBzZWdtZW50cy5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgICAgY29uc3Qgcm91dGVLZXkgPSBgJHtuYW1lc3BhY2V9IyR7dHlwZU5hbWV9YDtcbiAgICAgIGNvbnN0IHJlc29sdmVkS2V5ID0gcm91dGVLZXlUb1R5cGVLZXkuZ2V0KHJvdXRlS2V5KTtcbiAgICAgIGlmIChyZXNvbHZlZEtleSAhPT0gdW5kZWZpbmVkICYmIHJlc29sdmVkS2V5ICE9PSBzb3VyY2VLZXkpIHtcbiAgICAgICAgcmVmZXJlbmNlZC5hZGQocmVzb2x2ZWRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZWQpIHtcbiAgICAgIGlmICghYmFja2xpbmtzLmhhcyhyZWZlcmVuY2UpKSB7XG4gICAgICAgIGJhY2tsaW5rcy5zZXQocmVmZXJlbmNlLCBbXSk7XG4gICAgICB9XG4gICAgICBiYWNrbGlua3MuZ2V0KHJlZmVyZW5jZSk/LnB1c2goc291cmNlS2V5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFja2xpbmtzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbmFtZXNwYWNlIHRyZWUgdGhlIHNpZGViYXIgaXMgZ2VuZXJhdGVkIGZyb20uXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEByZXR1cm5zIFRoZSByb290IG9mIHRoZSB0cmVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaWRlYmFyVHJlZSh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogU2lkZWJhclRyZWVOb2RlIHtcbiAgY29uc3Qgcm9vdDogU2lkZWJhclRyZWVOb2RlID0geyBjaGlsZHJlbjogbmV3IE1hcCgpLCB0eXBlczogW10gfTtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGNvbnN0IHBhcnRzID0gaW5mby5uYW1lc3BhY2Uuc3BsaXQoJy8nKTtcbiAgICBsZXQgbm9kZSA9IHJvb3Q7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBsZXQgY2hpbGQgPSBub2RlLmNoaWxkcmVuLmdldChwYXJ0KTtcbiAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgY2hpbGQgPSB7IGNoaWxkcmVuOiBuZXcgTWFwKCksIHR5cGVzOiBbXSB9O1xuICAgICAgICBub2RlLmNoaWxkcmVuLnNldChwYXJ0LCBjaGlsZCk7XG4gICAgICB9XG4gICAgICBub2RlID0gY2hpbGQ7XG4gICAgfVxuICAgIG5vZGUudHlwZXMucHVzaChpbmZvKTtcbiAgfVxuICByZXR1cm4gcm9vdDtcbn1cblxuLyoqXG4gKiBUaGUgcmF3IGNvZGUgc2lnbmF0dXJlIHNob3duIG9uIGEgdHlwZS1vdmVydmlldyBwYWdlJ3MgT0cgY2FyZCwgZm9yIHRoZSBraW5kcyB0aGF0IHJlbmRlciBhIHNpbmdsZVxuICogc2lnbmF0dXJlIGxpbmUgKGZ1bmN0aW9uIC8gdHlwZSBhbGlhcyAvIHZhcmlhYmxlKS4gQ2xhc3NlcywgaW50ZXJmYWNlcyBhbmQgZW51bXMgcmVuZGVyIG1lbWJlclxuICogdGFibGVzIGluc3RlYWQsIHNvIHRoZXkgZ2V0IG5vIHNpZ25hdHVyZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBzaWduYXR1cmUsIG9yIGB1bmRlZmluZWRgIGZvciBhIGtpbmQgdGhhdCByZW5kZXJzIG1lbWJlciB0YWJsZXMgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPdmVydmlld1NpZ25hdHVyZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGluZm8ua2luZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0ICRmdW5jdGlvbiA9IGluZm8ubWV0aG9kc1swXTtcbiAgICByZXR1cm4gJGZ1bmN0aW9uID8gYGZ1bmN0aW9uICR7JGZ1bmN0aW9uLnNpZ25hdHVyZX06ICR7JGZ1bmN0aW9uLnJldHVyblR5cGV9YCA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaW5mby5raW5kID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gYHR5cGUgJHtnZXREaXNwbGF5TmFtZShpbmZvLm5hbWUsIGluZm8pfSA9ICR7aW5mby50eXBlQWxpYXNUZXh0ID8/ICd1bmtub3duJ31gO1xuICB9XG4gIHJldHVybiBpbmZvLmtpbmQgPT09ICd2YXJpYWJsZScgPyBgJHtpbmZvLnZhcmlhYmxlS2V5d29yZCA/PyAnbGV0J30gJHtuYW1lfTogJHtpbmZvLnZhcmlhYmxlVHlwZSA/PyAndW5rbm93bid9YCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcml0ZXMgb25lIHBhZ2UgcGVyIG93biBwcm9wZXJ0eSBhbmQgcGVyIG93biBtZXRob2Qgb3ZlcmxvYWQga2V5IG9mIGEgY2xhc3Mgb3IgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVNZW1iZXJQYWdlcyhuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKTtcbiAgY29uc3QgdHlwZUZpbGVEaXJlY3RvcnkgPSB0b1R5cGVGaWxlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IHR5cGVSb3V0ZURpcmVjdG9yeSA9IHRvVHlwZVJvdXRlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IGNvbXBvbmVudEltcG9ydHMgPSBnZXRDb21wb25lbnRJbXBvcnRzKFsnTWVtYmVyRGV0YWlsJ10pO1xuXG4gIC8vIFByb3BlcnR5IHBhZ2VzIChza2lwIGluaGVyaXRlZCDigJQgdGhleSBsaXZlIG9uIHRoZSBwYXJlbnQgdHlwZSlcbiAgY29uc3QgcHJvcGVydGllcyA9IGluZm8ucHJvcGVydGllcy5maWx0ZXIoKHApID0+ICFwLmluaGVyaXRlZEZyb20pO1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCB0eXBlRmlsZURpcmVjdG9yeSwgYCR7bWVtYmVyU2x1Zyhwcm9wZXJ0eS5uYW1lKX0ubWR4YCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAgIGNvbnN0IHByb3BlcnR5VGl0bGUgPSBgJHtuYW1lfS4ke3Byb3BlcnR5Lm5hbWV9YDtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogcHJvcGVydHkuZGVzY3JpcHRpb24sXG4gICAgICBzaWRlYmFyTGFiZWw6IHByb3BlcnR5VGl0bGUsXG4gICAgICBzaWduYXR1cmU6IGAke3Byb3BlcnR5LnNpZ25hdHVyZX06ICR7cHJvcGVydHkudHlwZX1gLFxuICAgICAgc2x1ZzogYGFwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZURpcmVjdG9yeX0vJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCxcbiAgICAgIHRpdGxlOiBwcm9wZXJ0eVRpdGxlXG4gICAgfSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIC4uLmNvbXBvbmVudEltcG9ydHMsXG4gICAgICAnJyxcbiAgICAgIC8vIEJyZWFkY3J1bWJcbiAgICAgIGBbJHtuYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9Lykg4oC6ICR7cHJvcGVydHkubmFtZX1gLFxuICAgICAgJydcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGljQXR0cmlidXRlID0gcHJvcGVydHkuaXNTdGF0aWMgPyAnIGlzU3RhdGljPXt0cnVlfScgOiAnJztcbiAgICBjb25zdCB0eXBlQXR0cmlidXRlID0gYCB0eXBlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhwcm9wZXJ0eS50eXBlLCBhbGxUeXBlcywgbmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9XCJgO1xuICAgIGNvbnN0IGRlc2NBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5kZXNjcmlwdGlvbiA/IGAgZGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MocHJvcGVydHkuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgICBjb25zdCByZW1hcmtzQXR0cmlidXRlID0gcHJvcGVydHkucmVtYXJrcyA/IGAgcmVtYXJrcz1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhwcm9wZXJ0eS5yZW1hcmtzLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgIDogJyc7XG4gICAgY29uc3Qgc2luY2VBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5zaW5jZSA/IGAgc2luY2U9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShwcm9wZXJ0eS5zaW5jZSl9XCJgIDogJyc7XG4gICAgY29uc3QgZXhhbXBsZXNBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5leGFtcGxlcy5sZW5ndGggPiAwID8gYCBleGFtcGxlcz17JHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eS5leGFtcGxlcyl9fWAgOiAnJztcblxuICAgIGxpbmVzLnB1c2goYDxNZW1iZXJEZXRhaWwke3N0YXRpY0F0dHJpYnV0ZX0ke3R5cGVBdHRyaWJ1dGV9JHtkZXNjQXR0cmlidXRlfSR7cmVtYXJrc0F0dHJpYnV0ZX0ke3NpbmNlQXR0cmlidXRlfSR7ZXhhbXBsZXNBdHRyaWJ1dGV9IC8+YCwgJycpO1xuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICAvLyBNZXRob2QgcGFnZXMg4oCUIGVhY2ggb3ZlcmxvYWQga2V5IGdldHMgaXRzIG93biBwYWdlIChza2lwIGluaGVyaXRlZClcbiAgY29uc3QgbWV0aG9kcyA9IGluZm8ubWV0aG9kcy5maWx0ZXIoKG0pID0+ICFtLmluaGVyaXRlZEZyb20pO1xuICBjb25zdCBvdmVybG9hZEdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBNZW1iZXJJbmZvW10+KCk7XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICBjb25zdCBrZXkgPSBtZXRob2Qub3ZlcmxvYWRLZXk7XG4gICAgaWYgKCFvdmVybG9hZEdyb3Vwcy5oYXMoa2V5KSkge1xuICAgICAgb3ZlcmxvYWRHcm91cHMuc2V0KGtleSwgW10pO1xuICAgIH1cbiAgICBvdmVybG9hZEdyb3Vwcy5nZXQoa2V5KT8ucHVzaChtZXRob2QpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbb3ZlcmxvYWRLZXksIG92ZXJsb2Fkc10gb2Ygb3ZlcmxvYWRHcm91cHMpIHtcbiAgICBjb25zdCBmaWxlU2x1ZyA9IG92ZXJsb2FkU2x1ZyhvdmVybG9hZEtleSk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKGdldEFwaURvY1NldHRpbmdzKCkub3V0cHV0RGlyZWN0b3J5LCBuc0RpcmVjdG9yeSwgdHlwZUZpbGVEaXJlY3RvcnksIGAke2ZpbGVTbHVnfS5tZHhgKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGgpO1xuXG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBgJHtuYW1lfS4ke292ZXJsb2FkS2V5fSBtZXRob2RgO1xuICAgIC8vIEEgZ3JvdXAgaXMgY3JlYXRlZCBieSBpdHMgZmlyc3Qgb3ZlcmxvYWQuXG4gICAgY29uc3QgZmlyc3RPdmVybG9hZCA9IGVuc3VyZU5vbk51bGxhYmxlKG92ZXJsb2Fkc1swXSk7XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogZmlyc3RPdmVybG9hZC5kZXNjcmlwdGlvbixcbiAgICAgIHNpZGViYXJMYWJlbDogYCR7bmFtZX0uJHtvdmVybG9hZEtleX1gLFxuICAgICAgc2lnbmF0dXJlOiBgJHtmaXJzdE92ZXJsb2FkLnNpZ25hdHVyZX06ICR7Zmlyc3RPdmVybG9hZC5yZXR1cm5UeXBlfWAsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9LyR7dHlwZVJvdXRlRGlyZWN0b3J5fS8ke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gLFxuICAgICAgdGl0bGU6IGRpc3BsYXlOYW1lXG4gICAgfSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIC4uLmNvbXBvbmVudEltcG9ydHMsXG4gICAgICAnJyxcbiAgICAgIC8vIEJyZWFkY3J1bWJcbiAgICAgIGBbJHtuYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9Lykg4oC6ICR7b3ZlcmxvYWRLZXl9YCxcbiAgICAgICcnXG4gICAgKTtcblxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWQgb2Ygb3ZlcmxvYWRzKSB7XG4gICAgICByZW5kZXJNZXRob2RPdmVybG9hZE1keChsaW5lcywgb3ZlcmxvYWQsIG5hbWUsIGluZm8ubmFtZXNwYWNlLCBhbGxUeXBlcyk7XG4gICAgICBpZiAob3ZlcmxvYWRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbGluZXMucHVzaCgnLS0tJywgJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIGVhY2ggbW9kdWxlJ3MgaW5kZXggcGFnZSBhbmQgdGhlIHJvb3QgQVBJIGluZGV4LlxuICpcbiAqIEBwYXJhbSB0eXBlcyAtIFRoZSBkb2N1bWVudGVkIHR5cGVzLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbW9kdWxlT3ZlcnZpZXdzIC0gRWFjaCBuYW1lc3BhY2UncyBgQGZpbGVgIG92ZXJ2aWV3LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVOYW1lc3BhY2VJbmRleFBhZ2VzKFxuICB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBtb2R1bGVPdmVydmlld3M6IE1hcDxzdHJpbmcsIHN0cmluZz5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGVJbmZvW10+KCk7XG4gIGZvciAoY29uc3QgWywgaW5mb10gb2YgdHlwZXMpIHtcbiAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGluZm8ubmFtZXNwYWNlKSkge1xuICAgICAgbmFtZXNwYWNlcy5zZXQoaW5mby5uYW1lc3BhY2UsIFtdKTtcbiAgICB9XG4gICAgbmFtZXNwYWNlcy5nZXQoaW5mby5uYW1lc3BhY2UpPy5wdXNoKGluZm8pO1xuICB9XG5cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBuc1R5cGVzXSBvZiBuYW1lc3BhY2VzKSB7XG4gICAgY29uc3QgbnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkobmFtZXNwYWNlKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCAnaW5kZXgubWR4Jyk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAgIC8vIFRoZSBtb2R1bGUncyBgQGZpbGVgIHRleHQgZG91YmxlcyBhcyBpdHMgZGVzY3JpcHRpb24uXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgbW9kdWxlIGNhcmQgd2FzIHRpdGxlLW9ubHkgd2hpbGUgZXZlcnkgbWVtYmVyIGNhcmQgdW5kZXIgaXQgY2FycmllZCBvbmUuXG4gICAgY29uc3Qgb3ZlcnZpZXcgPSBtb2R1bGVPdmVydmlld3MuZ2V0KG5hbWVzcGFjZSk7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gcmVuZGVyRnJvbnRNYXR0ZXIoe1xuICAgICAgZGVzY3JpcHRpb246IG92ZXJ2aWV3LFxuICAgICAgc2lkZWJhckxhYmVsOiBuYW1lc3BhY2UsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9YCxcbiAgICAgIHRpdGxlOiBuYW1lc3BhY2VcbiAgICB9KTtcblxuICAgIC8vIE1vZHVsZSBAZmlsZSBvdmVydmlldyB0ZXh0XG4gICAgaWYgKG92ZXJ2aWV3KSB7XG4gICAgICBsaW5lcy5wdXNoKHJlbmRlck1keFByb3NlKG92ZXJ2aWV3LCBhbGxUeXBlcywgbmFtZXNwYWNlKSwgJycpO1xuICAgIH1cblxuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnQ2xhc3NlcycsICdDbGFzcycsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdjbGFzcycpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0ludGVyZmFjZXMnLCAnSW50ZXJmYWNlJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ2ludGVyZmFjZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0Z1bmN0aW9ucycsICdGdW5jdGlvbicsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdmdW5jdGlvbicpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ1R5cGVzJywgJ1R5cGUnLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAndHlwZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0VudW1zJywgJ0VudW0nLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAnZW51bScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ1ZhcmlhYmxlcycsICdWYXJpYWJsZScsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICd2YXJpYWJsZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcblxuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG5cbiAgLy8gUm9vdCBBUEkgaW5kZXggcGFnZSBsaXN0aW5nIGV2ZXJ5IG1vZHVsZS5cbiAgY29uc3Qgc29ydGVkTmFtZXNwYWNlcyA9IFsuLi5uYW1lc3BhY2VzLmtleXMoKV0uc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgY29uc3QgYXBpSW5kZXhJbnRybyA9IGdldEFwaUluZGV4SW50cm8oc29ydGVkTmFtZXNwYWNlcyk7XG4gIGNvbnN0IHJvb3RMaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgZGVzY3JpcHRpb246IGFwaUluZGV4SW50cm8sXG4gICAgc2lkZWJhckxhYmVsOiAnT3ZlcnZpZXcnLFxuICAgIHNsdWc6ICdhcGknLFxuICAgIHRpdGxlOiAnQVBJIHJlZmVyZW5jZSdcbiAgfSk7XG4gIHJvb3RMaW5lcy5wdXNoKGFwaUluZGV4SW50cm8sICcnLCAnIyMgTW9kdWxlcycsICcnKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2Ygc29ydGVkTmFtZXNwYWNlcykge1xuICAgIHJvb3RMaW5lcy5wdXNoKGAtIFske25hbWVzcGFjZX1dKCR7Z2V0QXBpRG9jU2V0dGluZ3MoKS5iYXNlUGF0aH0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZSl9LylgKTtcbiAgfVxuICByb290TGluZXMucHVzaCgnJyk7XG4gIGNvbnN0IHJvb3RGaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksICdpbmRleC5tZHgnKTtcbiAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KHJvb3RGaWxlUGF0aCk7XG4gIGF3YWl0IHdyaXRlRmlsZShyb290RmlsZVBhdGgsIHJvb3RMaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHJldHVybnMgVGhlIHBhZ2UncyBjb250ZW50LCBiZWZvcmUgYmFja2xpbmtzLCBhbmQgdGhlIHBhdGggaXQgaXMgd3JpdHRlbiB0by5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT3ZlcnZpZXdQYWdlKG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBQcm9taXNlPFBhZ2VDb250ZW50PiB7XG4gIGNvbnN0IG5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKTtcbiAgY29uc3QgdHlwZUZpbGVTbHVnID0gdG9UeXBlRmlsZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIG5hbWUpO1xuICBjb25zdCB0eXBlUm91dGVTbHVnID0gdG9UeXBlUm91dGVTZWdtZW50KGluZm8ubmFtZXNwYWNlLCBuYW1lKTtcbiAgY29uc3QgZmlsZVBhdGggPSBqb2luKGdldEFwaURvY1NldHRpbmdzKCkub3V0cHV0RGlyZWN0b3J5LCBuc0RpcmVjdG9yeSwgdHlwZUZpbGVTbHVnLCAnaW5kZXgubWR4Jyk7XG4gIGF3YWl0IGVuc3VyZURpcmVjdG9yeShmaWxlUGF0aCk7XG5cbiAgLy8gRnJvbnRtYXR0ZXJcbiAgY29uc3QgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZShuYW1lLCBpbmZvKTtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gcmVuZGVyRnJvbnRNYXR0ZXIoe1xuICAgIGRlc2NyaXB0aW9uOiBpbmZvLmRlc2NyaXB0aW9uLFxuICAgIHNpZGViYXJMYWJlbDogZGlzcGxheU5hbWUsXG4gICAgc2lnbmF0dXJlOiBjb21wdXRlT3ZlcnZpZXdTaWduYXR1cmUobmFtZSwgaW5mbyksXG4gICAgc2x1ZzogYGFwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZVNsdWd9YCxcbiAgICB0aXRsZTogZGlzcGxheU5hbWVcbiAgfSk7XG5cbiAgLy8gQ29tcG9uZW50IGltcG9ydHMg4oCUIGNvbXB1dGUgcmVsYXRpdmUgcGF0aCBmcm9tIGdlbmVyYXRlZCBwYWdlIHRvIGNvbXBvbmVudHNcbiAgbGluZXMucHVzaCguLi5nZXRDb21wb25lbnRJbXBvcnRzKFsnQ29uc3RydWN0b3JCbG9jaycsICdJbXBvcnRTdGF0ZW1lbnQnLCAnTWV0aG9kVGFibGUnLCAnUHJvcGVydHlUYWJsZScsICdUeXBlU2lnbmF0dXJlJ10pLCAnJyk7XG5cbiAgLy8gRGVzY3JpcHRpb25cbiAgaWYgKGluZm8uZGVzY3JpcHRpb24pIHtcbiAgICBsaW5lcy5wdXNoKHJlbmRlck1keFByb3NlKGluZm8uZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSksICcnKTtcbiAgfVxuXG4gIC8vIFJlbWFya3NcbiAgaWYgKGluZm8ucmVtYXJrcykge1xuICAgIGNvbnN0IHJlbWFya3NCbG9jayA9IHJlbmRlck1keFByb3NlKGluZm8ucmVtYXJrcywgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKTtcbiAgICBsaW5lcy5wdXNoKHJlbWFya3NCbG9jay5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiAobGluZS5sZW5ndGggPiAwID8gYD4gJHtsaW5lfWAgOiAnPicpKS5qb2luKCdcXG4nKSwgJycpO1xuICB9XG5cbiAgLy8gSW1wb3J0IHN0YXRlbWVudFxuICBjb25zdCBpbXBvcnRTdGF0ZW1lbnQgPSBnZXRJbXBvcnRTdGF0ZW1lbnQoaW5mbyk7XG4gIGlmIChpbXBvcnRTdGF0ZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGxpbmVzLnB1c2goYDxJbXBvcnRTdGF0ZW1lbnQgdGV4dD1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKGltcG9ydFN0YXRlbWVudCl9XCIgLz5gLCAnJyk7XG4gIH1cblxuICAvLyBFeGFtcGxlc1xuICBmb3IgKGNvbnN0IGV4YW1wbGUgb2YgaW5mby5leGFtcGxlcykge1xuICAgIGxpbmVzLnB1c2goJyoqRXhhbXBsZToqKicsICcnLCByZW5kZXJFeGFtcGxlTWR4KGV4YW1wbGUsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSksICcnKTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9ucyByZW5kZXIgbGlrZSBtZXRob2QgZGV0YWlsIHBhZ2VzIOKAlCBzaWduYXR1cmUsIHBhcmFtcywgcmV0dXJuc1xuICBpZiAoaW5mby5raW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVuZGVyRnVuY3Rpb25QYWdlKGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG4gICAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG4gIH1cblxuICAvLyBWYXJpYWJsZXMgcmVuZGVyIHdpdGggZGVjbGFyYXRpb24ga2V5d29yZCBhbmQgdHlwZVxuICBpZiAoaW5mby5raW5kID09PSAndmFyaWFibGUnKSB7XG4gICAgcmVuZGVyVmFyaWFibGVQYWdlKGxpbmVzLCBuYW1lLCBpbmZvLCBhbGxUeXBlcyk7XG4gICAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG4gIH1cblxuICAvLyBFbnVtcyByZW5kZXIgdGhlaXIgbWVtYmVycyBsaXN0XG4gIGlmIChpbmZvLmtpbmQgPT09ICdlbnVtJykge1xuICAgIHJlbmRlckVudW1QYWdlKGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG4gICAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG4gIH1cblxuICAvLyBUeXBlIGFsaWFzZXMgcmVuZGVyIHRoZWlyIHJpZ2h0LWhhbmQtc2lkZSBzaWduYXR1cmVcbiAgaWYgKGluZm8ua2luZCA9PT0gJ3R5cGUnKSB7XG4gICAgcmVuZGVyVHlwZUFsaWFzUGFnZShsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xuICB9XG5cbiAgLy8gQ2xhc3NlcyAvIGludGVyZmFjZXM6IHNpZ25hdHVyZSArIGV4dGVuZHMvaW1wbGVtZW50cyArIGNvbnN0cnVjdG9yICsgbWVtYmVyIHRhYmxlc1xuICBjb25zdCB0eXBlUGFyYW1zQXR0cmlidXRlID0gaW5mby50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwID8gYCB0eXBlUGFyYW1zPXske0pTT04uc3RyaW5naWZ5KGluZm8udHlwZVBhcmFtZXRlcnMpfX1gIDogJyc7XG4gIGNvbnN0IGV4dGVuZHNBdHRyaWJ1dGUgPSBpbmZvLmJhc2VUeXBlcy5sZW5ndGggPiAwID8gYCBleHRlbmRzPXske0pTT04uc3RyaW5naWZ5KGluZm8uYmFzZVR5cGVzKX19YCA6ICcnO1xuICBjb25zdCBpbXBsZW1lbnRzQXR0cmlidXRlID0gaW5mby5pbXBsZW1lbnRzVHlwZXMubGVuZ3RoID4gMCA/IGAgaW1wbGVtZW50cz17JHtKU09OLnN0cmluZ2lmeShpbmZvLmltcGxlbWVudHNUeXBlcyl9fWAgOiAnJztcbiAgbGluZXMucHVzaChgPFR5cGVTaWduYXR1cmUga2luZD1cIiR7aW5mby5raW5kfVwiIG5hbWU9XCIke25hbWV9XCIke3R5cGVQYXJhbXNBdHRyaWJ1dGV9JHtleHRlbmRzQXR0cmlidXRlfSR7aW1wbGVtZW50c0F0dHJpYnV0ZX0gLz5gLCAnJyk7XG5cbiAgaWYgKGluZm8uYmFzZVR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsaW5rZWRUeXBlcyA9IGluZm8uYmFzZVR5cGVzLm1hcCgodCkgPT4gbGlua0Jhc2VUeXBlKHQsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpO1xuICAgIGxpbmVzLnB1c2goYCoqRXh0ZW5kczoqKiAke2xpbmtlZFR5cGVzLmpvaW4oJywgJyl9YCwgJycpO1xuICB9XG5cbiAgaWYgKGluZm8uaW1wbGVtZW50c1R5cGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsaW5rZWRUeXBlcyA9IGluZm8uaW1wbGVtZW50c1R5cGVzLm1hcCgodCkgPT4gbGlua0Jhc2VUeXBlKHQsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpO1xuICAgIGxpbmVzLnB1c2goYCoqSW1wbGVtZW50czoqKiAke2xpbmtlZFR5cGVzLmpvaW4oJywgJyl9YCwgJycpO1xuICB9XG5cbiAgcmVuZGVyQ29uc3RydWN0b3JNZHgobGluZXMsIG5hbWUsIGluZm8sIGFsbFR5cGVzKTtcbiAgcmVuZGVyUHJvcGVydHlUYWJsZU1keChsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuICByZW5kZXJNZXRob2RUYWJsZU1keChsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuXG4gIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgU3RhcmxpZ2h0IHNpZGViYXIgb2YgdGhlIEFQSSByZWZlcmVuY2UuXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlU2lkZWJhckpzb24odHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gYnVpbGRTaWRlYmFyVHJlZSh0eXBlcyk7XG5cbiAgY29uc3QgZ3JvdXBzOiBTaWRlYmFyRW50cnlbXSA9IFtdO1xuICBjb25zdCB0b3BMZXZlbHMgPSBbLi4ucm9vdC5jaGlsZHJlbl0uc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGZvciAoY29uc3QgW3RvcExldmVsLCBjaGlsZF0gb2YgdG9wTGV2ZWxzKSB7XG4gICAgZ3JvdXBzLnB1c2goc2lkZWJhclRyZWVUb0VudHJpZXMoY2hpbGQsIHRvcExldmVsKSk7XG4gIH1cblxuICBjb25zdCB3cmFwcGVkU2lkZWJhcjogU2lkZWJhckVudHJ5W10gPSBbe1xuICAgIGNvbGxhcHNlZDogZmFsc2UsXG4gICAgaXRlbXM6IGdyb3VwcyxcbiAgICBsYWJlbDogJ0FQSSByZWZlcmVuY2UnXG4gIH1dO1xuXG4gIGF3YWl0IHdyaXRlRmlsZShnZXRBcGlEb2NTZXR0aW5ncygpLnNpZGViYXJGaWxlLCBKU09OLnN0cmluZ2lmeSh3cmFwcGVkU2lkZWJhciwgbnVsbCwgSlNPTl9JTkRFTlQpLCAndXRmLTgnKTtcbiAgY29uc29sZS53YXJuKGBHZW5lcmF0ZWQgc2lkZWJhciB3aXRoICR7U3RyaW5nKGdyb3Vwcy5sZW5ndGgpfSB0b3AtbGV2ZWwgbW9kdWxlIGdyb3Vwc2ApO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBjbGFzcydzIGNvbnN0cnVjdG9yIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ29uc3RydWN0b3JNZHgobGluZXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gaW5mby5jb25zdHJ1Y3RvckluZm87XG4gIGlmICghY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY3RvclNpZyA9IGBuZXcgJHtuYW1lfSR7Y29uc3RydWN0b3Iuc2lnbmF0dXJlfWA7XG4gIGNvbnN0IGN0b3JEZXNjID0gY29uc3RydWN0b3IuZGVzY3JpcHRpb25cbiAgICA/IGAgZGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MoY29uc3RydWN0b3IuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImBcbiAgICA6ICcnO1xuICBsaW5lcy5wdXNoKGA8Q29uc3RydWN0b3JCbG9jayBzaWduYXR1cmU9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShjdG9yU2lnKX1cIiR7Y3RvckRlc2N9IC8+YCwgJycpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYW4gZW51bSdzIG1lbWJlcnMuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRW51bVBhZ2UobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBsaW5lcy5wdXNoKGA8VHlwZVNpZ25hdHVyZSBraW5kPVwiZW51bVwiIG5hbWU9XCIke2luZm8ubmFtZX1cIiAvPmAsICcnKTtcblxuICBpZiAoaW5mby5lbnVtTWVtYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsaW5lcy5wdXNoKCcqKk1lbWJlcnM6KionLCAnJywgJ3wgTWVtYmVyIHwgVmFsdWUgfCBEZXNjcmlwdGlvbiB8JywgJ3wgOi0tIHwgOi0tIHwgOi0tIHwnKTtcbiAgZm9yIChjb25zdCBtZW1iZXIgb2YgaW5mby5lbnVtTWVtYmVycykge1xuICAgIGNvbnN0IHZhbHVlID0gbWVtYmVyLnZhbHVlID8gYFxcYCR7ZXNjYXBlTWFya2Rvd24obWVtYmVyLnZhbHVlKX1cXGBgIDogJyc7XG4gICAgbGluZXMucHVzaChgfCBcXGAke21lbWJlci5uYW1lfVxcYCB8ICR7dmFsdWV9IHwgJHtlc2NhcGVNYXJrZG93bihyZXNvbHZlTGlua3MobWVtYmVyLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKX0gfGApO1xuICB9XG4gIGxpbmVzLnB1c2goJycpO1xufVxuXG4vKipcbiAqIFJlbmRlciB0aGUgU3RhcmxpZ2h0IGZyb250bWF0dGVyIGJsb2NrICh0aHJvdWdoIHRoZSBjbG9zaW5nIGAtLS1gIGFuZCBpdHMgYmxhbmsgbGluZSkgc2hhcmVkIGJ5IGV2ZXJ5XG4gKiBnZW5lcmF0ZWQgcGFnZSBraW5kOiBtb2R1bGUgaW5kZXgsIHR5cGUgb3ZlcnZpZXcsIHByb3BlcnR5LCBhbmQgbWV0aG9kLlxuICpcbiAqIEV2ZXJ5IHBhZ2Uga2luZCBnb2VzIHRocm91Z2ggaGVyZSBzbyBubyBmaWVsZCBjYW4gYmUgZW1pdHRlZCBvbiBzb21lIGtpbmRzIGFuZCBzaWxlbnRseSBkcm9wcGVkIG9uXG4gKiBvdGhlcnMuIGBkZXNjcmlwdGlvbmAgaW4gcGFydGljdWxhciBpcyBub3QganVzdCBTRU8gbWV0YWRhdGEg4oCUIGl0IGlzIHRoZSBsaW5lIHRoZSBPRyBjYXJkIHJlbmRlcnMgdW5kZXJcbiAqIHRoZSB0aXRsZSwgc28gYSBwYWdlIGtpbmQgdGhhdCBza2lwcGVkIGl0IHByb2R1Y2VkIGEgdGl0bGUtb25seSBjYXJkIG5leHQgdG8gZnVsbHkgcG9wdWxhdGVkIG9uZXMuXG4gKlxuICogQHBhcmFtIGZyb250TWF0dGVyIC0gVGhlIHBhZ2UncyBmcm9udG1hdHRlciBmaWVsZHMuXG4gKiBAcmV0dXJucyBUaGUgZnJvbnRtYXR0ZXIgbGluZXMsIHRocm91Z2ggdGhlIGNsb3NpbmcgYC0tLWAgYW5kIGl0cyBibGFuayBsaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRnJvbnRNYXR0ZXIoZnJvbnRNYXR0ZXI6IFBhZ2VGcm9udE1hdHRlcik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAnLS0tJyxcbiAgICBgdGl0bGU6IFwiJHtlc2NhcGVZYW1sKGZyb250TWF0dGVyLnRpdGxlKX1cImAsXG4gICAgYHNsdWc6IFwiJHtmcm9udE1hdHRlci5zbHVnfVwiYCxcbiAgICAuLi4oZnJvbnRNYXR0ZXIuZGVzY3JpcHRpb24gPyBbYGRlc2NyaXB0aW9uOiBcIiR7ZXNjYXBlWWFtbChzdHJpcE1hcmtkb3duKGZyb250TWF0dGVyLmRlc2NyaXB0aW9uKSl9XCJgXSA6IFtdKSxcbiAgICAuLi4oZnJvbnRNYXR0ZXIuc2lnbmF0dXJlID8gW2BzaWduYXR1cmU6IFwiJHtlc2NhcGVZYW1sKHRydW5jYXRlU2lnbmF0dXJlKGZyb250TWF0dGVyLnNpZ25hdHVyZSkpfVwiYF0gOiBbXSksXG4gICAgJ2VkaXRVcmw6IGZhbHNlJyxcbiAgICAnc2lkZWJhcjonLFxuICAgIGAgIGxhYmVsOiBcIiR7ZXNjYXBlWWFtbChmcm9udE1hdHRlci5zaWRlYmFyTGFiZWwpfVwiYCxcbiAgICAnLS0tJyxcbiAgICAnJ1xuICBdO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBmdW5jdGlvbidzIHNpZ25hdHVyZSwgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlIGFuZCBleGFtcGxlcy5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJGdW5jdGlvblBhZ2UobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCAkZnVuY3Rpb24gPSBpbmZvLm1ldGhvZHNbMF07XG4gIGlmICghJGZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGluZXMucHVzaCgnKipTaWduYXR1cmU6KionLCAnJywgJ2BgYHRzJywgYGZ1bmN0aW9uICR7JGZ1bmN0aW9uLnNpZ25hdHVyZX06ICR7JGZ1bmN0aW9uLnJldHVyblR5cGV9YCwgJ2BgYCcsICcnKTtcblxuICBpZiAoJGZ1bmN0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGxpbmVzLnB1c2goJyoqUGFyYW1ldGVyczoqKicsICcnLCAnfCBQYXJhbWV0ZXIgfCBUeXBlIHwgRGVzY3JpcHRpb24gfCcsICd8IDotLSB8IDotLSB8IDotLSB8Jyk7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgJGZ1bmN0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgIGB8IFxcYCR7cGFyYW1ldGVyLm5hbWV9XFxgIHwgJHtlc2NhcGVNYXJrZG93bihlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3MocGFyYW1ldGVyLnR5cGUsIGFsbFR5cGVzLCBpbmZvLm5hbWUsIGluZm8ubmFtZXNwYWNlKSkpfSB8ICR7ZXNjYXBlTWFya2Rvd24ocmVzb2x2ZUxpbmtzKHBhcmFtZXRlci5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSl9IHxgXG4gICAgICApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgfVxuXG4gIGNvbnN0IHJldHVybkRlc2MgPSAkZnVuY3Rpb24ucmV0dXJuRGVzY3JpcHRpb24gPyBgIOKAlCAke2VzY2FwZU1keFByb3NlKHJlc29sdmVMaW5rcygkZnVuY3Rpb24ucmV0dXJuRGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpfWAgOiAnJztcbiAgbGluZXMucHVzaChgKipSZXR1cm5zOioqICR7ZXNjYXBlTWR4QnJhY2VzKGVzY2FwZU1keEFuZ2xlQnJhY2tldHMocmVuZGVyVHlwZVdpdGhMaW5rcygkZnVuY3Rpb24ucmV0dXJuVHlwZSwgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9JHtyZXR1cm5EZXNjfWAsICcnKTtcblxuICBmb3IgKGNvbnN0IGV4YW1wbGUgb2YgJGZ1bmN0aW9uLmV4YW1wbGVzKSB7XG4gICAgbGluZXMucHVzaCgnKipFeGFtcGxlOioqJywgJycsIHJlbmRlckV4YW1wbGVNZHgoZXhhbXBsZSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSwgJycpO1xuICB9XG59XG5cbi8qKlxuICogUmVuZGVycyBvbmUgbWV0aG9kIG92ZXJsb2FkLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBvdmVybG9hZCAtIFRoZSBvdmVybG9hZC5cbiAqIEBwYXJhbSB0eXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBtZXRob2QgYmVsb25ncyB0by5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSB0eXBlIHRoZSBtZXRob2QgYmVsb25ncyB0by5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1ldGhvZE92ZXJsb2FkTWR4KGxpbmVzOiBzdHJpbmdbXSwgb3ZlcmxvYWQ6IE1lbWJlckluZm8sIHR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IHNpZyA9IGAke292ZXJsb2FkLnNpZ25hdHVyZX06ICR7b3ZlcmxvYWQucmV0dXJuVHlwZX1gO1xuICBjb25zdCBzdGF0aWNBdHRyaWJ1dGUgPSBvdmVybG9hZC5pc1N0YXRpYyA/ICcgaXNTdGF0aWM9e3RydWV9JyA6ICcnO1xuICBjb25zdCBkZXNjQXR0cmlidXRlID0gb3ZlcmxvYWQuZGVzY3JpcHRpb24gPyBgIGRlc2NyaXB0aW9uPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKG92ZXJsb2FkLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgbmFtZXNwYWNlKSkpfVwiYCA6ICcnO1xuICBjb25zdCByZW1hcmtzQXR0cmlidXRlID0gb3ZlcmxvYWQucmVtYXJrcyA/IGAgcmVtYXJrcz1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhvdmVybG9hZC5yZW1hcmtzLCBhbGxUeXBlcywgbmFtZXNwYWNlKSkpfVwiYCA6ICcnO1xuICBjb25zdCBzaW5jZUF0dHJpYnV0ZSA9IG92ZXJsb2FkLnNpbmNlID8gYCBzaW5jZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG92ZXJsb2FkLnNpbmNlKX1cImAgOiAnJztcbiAgY29uc3QgcmV0dXJuVHlwZUF0dHJpYnV0ZSA9IGAgcmV0dXJuVHlwZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlbmRlclR5cGVXaXRoTGlua3Mob3ZlcmxvYWQucmV0dXJuVHlwZSwgYWxsVHlwZXMsIHR5cGVOYW1lLCBuYW1lc3BhY2UpKSl9XCJgO1xuICBjb25zdCByZXR1cm5EZXNjQXR0cmlidXRlID0gb3ZlcmxvYWQucmV0dXJuRGVzY3JpcHRpb25cbiAgICA/IGAgcmV0dXJuRGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3Mob3ZlcmxvYWQucmV0dXJuRGVzY3JpcHRpb24sIGFsbFR5cGVzLCBuYW1lc3BhY2UpKSl9XCJgXG4gICAgOiAnJztcbiAgY29uc3QgZXhhbXBsZXNBdHRyaWJ1dGUgPSBvdmVybG9hZC5leGFtcGxlcy5sZW5ndGggPiAwID8gYCBleGFtcGxlcz17JHtKU09OLnN0cmluZ2lmeShvdmVybG9hZC5leGFtcGxlcyl9fWAgOiAnJztcblxuICBjb25zdCBwYXJhbXMgPSBvdmVybG9hZC5wYXJhbWV0ZXJzLm1hcCgocCkgPT4gKHtcbiAgICBkZXNjcmlwdGlvbjogbWFya2Rvd25Ub0h0bWwocC5kZXNjcmlwdGlvbiB8fCAocC5uYW1lLmVuZHNXaXRoKCc/JykgPyAnKihPcHRpb25hbCkqJyA6ICcnKSksXG4gICAgbmFtZTogcC5uYW1lLFxuICAgIHR5cGU6IG1hcmtkb3duVG9IdG1sKHJlbmRlclR5cGVXaXRoTGlua3MocC50eXBlLCBhbGxUeXBlcywgdHlwZU5hbWUsIG5hbWVzcGFjZSkpXG4gIH0pKTtcbiAgY29uc3QgcGFyYW1zQXR0cmlidXRlID0gcGFyYW1zLmxlbmd0aCA+IDAgPyBgIHBhcmFtZXRlcnM9eyR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX19YCA6ICcnO1xuXG4gIGxpbmVzLnB1c2goXG4gICAgYDxNZW1iZXJEZXRhaWwke3N0YXRpY0F0dHJpYnV0ZX0gc2lnbmF0dXJlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUoc2lnKX1cIiR7ZGVzY0F0dHJpYnV0ZX0ke3JlbWFya3NBdHRyaWJ1dGV9JHtzaW5jZUF0dHJpYnV0ZX0ke3JldHVyblR5cGVBdHRyaWJ1dGV9JHtyZXR1cm5EZXNjQXR0cmlidXRlfSR7cGFyYW1zQXR0cmlidXRlfSR7ZXhhbXBsZXNBdHRyaWJ1dGV9IC8+YCxcbiAgICAnJ1xuICApO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB0eXBlJ3MgbWV0aG9kIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1ldGhvZFRhYmxlTWR4KGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgbWV0aG9kcyA9IFsuLi5pbmZvLm1ldGhvZHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS5pc1N0YXRpYyAhPT0gYi5pc1N0YXRpYykge1xuICAgICAgcmV0dXJuIGEuaXNTdGF0aWMgPyAxIDogLTE7XG4gICAgfVxuICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICB9KTtcbiAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxpbmVzLnB1c2goJzxNZXRob2RUYWJsZSByb3dzPXtbJyk7XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICBjb25zdCBkZXNjID0gZXNjYXBlSnNTdHJpbmcobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKG1ldGhvZC5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpO1xuICAgIGNvbnN0IHN0YXRpY1ByZWZpeCA9IG1ldGhvZC5pc1N0YXRpYyA/ICdzdGF0aWMgJyA6ICcnO1xuICAgIGNvbnN0IHNob3J0UGFyYW1zID0gbWV0aG9kLnBhcmFtZXRlcnMubWFwKChwLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwICYmIEVWRU5UX01FVEhPRFMuaGFzKG1ldGhvZC5uYW1lKSAmJiAocC50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgcC50eXBlLnN0YXJ0c1dpdGgoJ1xcJycpKSA/IHAudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKSA6IHAubmFtZTtcbiAgICB9KS5qb2luKCcsICcpO1xuICAgIGNvbnN0IHNob3J0U2lnID0gYCR7c3RhdGljUHJlZml4fSR7bWV0aG9kLm5hbWV9KCR7c2hvcnRQYXJhbXN9KWA7XG4gICAgY29uc3Qgc2lnID0gZXNjYXBlSnNTdHJpbmcoc2hvcnRTaWcpO1xuICAgIGNvbnN0IHNsdWcgPSBvdmVybG9hZFJvdXRlU2VnbWVudChtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSBtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKG1ldGhvZC5yZXR1cm5UeXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpO1xuICAgIGNvbnN0IGluaGVyaXRlZEF0dHJpYnV0ZSA9IG1ldGhvZC5pbmhlcml0ZWRGcm9tXG4gICAgICA/IGAsIGluaGVyaXRlZEZyb206IFwiJHtlc2NhcGVKc1N0cmluZyhtYXJrZG93blRvSHRtbCh0eXBlTGluayhtZXRob2QuaW5oZXJpdGVkRnJvbSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpfVwiYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBocmVmID0gbWVtYmVySHJlZihzbHVnLCBtZXRob2QuaW5oZXJpdGVkRnJvbSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKTtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgeyBzaWduYXR1cmU6IFwiJHtzaWd9XCIsIGhyZWY6IFwiJHtlc2NhcGVKc1N0cmluZyhocmVmKX1cIiwgcmV0dXJuczogXCIke2VzY2FwZUpzU3RyaW5nKHJldHVyblR5cGUpfVwiLCBkZXNjcmlwdGlvbjogXCIke2Rlc2N9XCIke2luaGVyaXRlZEF0dHJpYnV0ZX0gfSxgXG4gICAgKTtcbiAgfVxuICBsaW5lcy5wdXNoKCddfSAvPicsICcnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdHlwZSdzIHByb3BlcnR5IHRhYmxlLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclByb3BlcnR5VGFibGVNZHgobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gaW5mby5wcm9wZXJ0aWVzO1xuICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGluZXMucHVzaCgnPFByb3BlcnR5VGFibGUgcm93cz17WycpO1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBkZXNjID0gZXNjYXBlSnNTdHJpbmcobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKHByb3BlcnR5LmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSk7XG4gICAgY29uc3QgdHlwZSA9IG1hcmtkb3duVG9IdG1sKHJlbmRlclR5cGVXaXRoTGlua3MocHJvcGVydHkudHlwZSwgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKTtcbiAgICBjb25zdCBpbmhlcml0ZWRBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5pbmhlcml0ZWRGcm9tXG4gICAgICA/IGAsIGluaGVyaXRlZEZyb206IFwiJHtlc2NhcGVKc1N0cmluZyhtYXJrZG93blRvSHRtbCh0eXBlTGluayhwcm9wZXJ0eS5pbmhlcml0ZWRGcm9tLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGhyZWYgPSBtZW1iZXJIcmVmKG1lbWJlclJvdXRlU2VnbWVudChwcm9wZXJ0eS5uYW1lKSwgcHJvcGVydHkuaW5oZXJpdGVkRnJvbSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKTtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgeyBuYW1lOiBcIiR7ZXNjYXBlSnNTdHJpbmcocHJvcGVydHkubmFtZSl9XCIsIGhyZWY6IFwiJHtlc2NhcGVKc1N0cmluZyhocmVmKX1cIiwgdHlwZTogXCIke2VzY2FwZUpzU3RyaW5nKHR5cGUpfVwiLCBkZXNjcmlwdGlvbjogXCIke2Rlc2N9XCIke2luaGVyaXRlZEF0dHJpYnV0ZX0gfSxgXG4gICAgKTtcbiAgfVxuICBsaW5lcy5wdXNoKCddfSAvPicsICcnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdHlwZSBhbGlhcydzIHNpZ25hdHVyZS5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUeXBlQWxpYXNQYWdlKGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgdHlwZVBhcmFtc0F0dHJpYnV0ZSA9IGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCA/IGAgdHlwZVBhcmFtcz17JHtKU09OLnN0cmluZ2lmeShpbmZvLnR5cGVQYXJhbWV0ZXJzKX19YCA6ICcnO1xuICBsaW5lcy5wdXNoKGA8VHlwZVNpZ25hdHVyZSBraW5kPVwidHlwZVwiIG5hbWU9XCIke2luZm8ubmFtZX1cIiR7dHlwZVBhcmFtc0F0dHJpYnV0ZX0gLz5gLCAnJyk7XG5cbiAgY29uc3QgcmhzID0gaW5mby50eXBlQWxpYXNUZXh0ID8/ICd1bmtub3duJztcbiAgbGluZXMucHVzaChcbiAgICAnKipTaWduYXR1cmU6KionLFxuICAgICcnLFxuICAgICdgYGB0cycsXG4gICAgYHR5cGUgJHtnZXREaXNwbGF5TmFtZShpbmZvLm5hbWUsIGluZm8pfSA9ICR7cmhzfWAsXG4gICAgJ2BgYCcsXG4gICAgJycsXG4gICAgYCoqVHlwZToqKiAke2VzY2FwZU1keEJyYWNlcyhlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3MocmhzLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX1gLFxuICAgICcnXG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHZhcmlhYmxlJ3MgZGVjbGFyYXRpb24gYW5kIHR5cGUuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJWYXJpYWJsZVBhZ2UobGluZXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IGtleXdvcmQgPSBpbmZvLnZhcmlhYmxlS2V5d29yZCA/PyAnbGV0JztcbiAgY29uc3QgdmFyaWFibGVUeXBlID0gaW5mby52YXJpYWJsZVR5cGUgPz8gJ3Vua25vd24nO1xuICBsaW5lcy5wdXNoKFxuICAgICcqKlNpZ25hdHVyZToqKicsXG4gICAgJycsXG4gICAgJ2BgYHRzJyxcbiAgICBgJHtrZXl3b3JkfSAke25hbWV9OiAke3ZhcmlhYmxlVHlwZX1gLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgIGAqKlR5cGU6KiogJHtlc2NhcGVNZHhCcmFjZXMoZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKHZhcmlhYmxlVHlwZSwgYWxsVHlwZXMsIG5hbWUsIGluZm8ubmFtZXNwYWNlKSkpfWAsXG4gICAgJydcbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIG5hbWVzcGFjZSB0cmVlIG5vZGUgaW50byBhIHNpZGViYXIgZ3JvdXAuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZS5cbiAqIEBwYXJhbSBsYWJlbCAtIFRoZSBncm91cCdzIGxhYmVsLlxuICogQHJldHVybnMgVGhlIHNpZGViYXIgZ3JvdXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWRlYmFyVHJlZVRvRW50cmllcyhub2RlOiBTaWRlYmFyVHJlZU5vZGUsIGxhYmVsOiBzdHJpbmcpOiBTaWRlYmFyRW50cnkge1xuICBjb25zdCBpdGVtczogKFNpZGViYXJFbnRyeSB8IFNpZGViYXJMaW5rKVtdID0gW107XG5cbiAgLy8gQ2hpbGQgZGlyZWN0b3J5IGdyb3VwcyBmaXJzdCAoYmVmb3JlIHRoaXMgbW9kdWxlJ3Mgb3duIHBhZ2VzKVxuICBjb25zdCBzb3J0ZWRDaGlsZHJlbiA9IFsuLi5ub2RlLmNoaWxkcmVuXS5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgZm9yIChjb25zdCBbY2hpbGROYW1lLCBjaGlsZF0gb2Ygc29ydGVkQ2hpbGRyZW4pIHtcbiAgICBpdGVtcy5wdXNoKHNpZGViYXJUcmVlVG9FbnRyaWVzKGNoaWxkLCBjaGlsZE5hbWUpKTtcbiAgfVxuXG4gIC8vIFRoaXMgbW9kdWxlJ3Mgb3duIG92ZXJ2aWV3IHBhZ2UgKyB0eXBlL2Z1bmN0aW9uIHBhZ2VzIChpbmRpdmlkdWFsIG1lbWJlcnMgYXJlIG5vdCBsaXN0ZWQpLlxuICAvLyBTaWRlYmFyIGBsaW5rYCBmaWVsZHMgbXVzdCBOT1QgZW1iZWQgQkFTRV9QQVRIOiBTdGFybGlnaHQgcHJlcGVuZHMgdGhlIGNvbmZpZyBgYmFzZWAgdG8gZXZlcnlcbiAgLy8gc2lkZWJhciBsaW5rIGl0c2VsZiwgc28gaW5jbHVkaW5nIGl0IGhlcmUgd291bGQgZG91YmxlIHRoZSBiYXNlIChlLmcuIGAvYmFzZS9iYXNlL2FwaS8uLi5gIOKGkiA0MDQpLlxuICAvLyBUaGlzIGRpZmZlcnMgZnJvbSBpbi1jb250ZW50IGxpbmtzLCB3aGljaCBhcmUgcmF3IGFuY2hvcnMgdGhhdCBTdGFybGlnaHQgZG9lcyBub3QgYmFzZS1wcmVwZW5kLlxuICBpZiAobm9kZS50eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgeyBuYW1lc3BhY2UgfSA9IGVuc3VyZU5vbk51bGxhYmxlKG5vZGUudHlwZXNbMF0pO1xuICAgIGl0ZW1zLnB1c2goeyBsYWJlbDogJ092ZXJ2aWV3JywgbGluazogYC9hcGkvJHtuYW1lc3BhY2V9L2AgfSk7XG4gICAgY29uc3Qgc29ydGVkVHlwZXMgPSBbLi4ubm9kZS50eXBlc10uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gICAgZm9yIChjb25zdCB0IG9mIHNvcnRlZFR5cGVzKSB7XG4gICAgICBpdGVtcy5wdXNoKHsgbGFiZWw6IHQubmFtZSwgbGluazogYC9hcGkvJHt0Lm5hbWVzcGFjZX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQodC5uYW1lc3BhY2UsIHQubmFtZSl9L2AgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY29sbGFwc2VkOiB0cnVlLCBpdGVtcywgbGFiZWwgfTtcbn1cblxuLy8gU2VydmVzIGJvdGggYXMgdGhlIHJvb3QgQVBJIHBhZ2UncyBwcm9zZSBhbmQgKHN0cmlwcGVkKSBhcyBpdHMgYGRlc2NyaXB0aW9uYCBmcm9udG1hdHRlci5cbi8vIFNoYXJpbmcgb25lIGZ1bmN0aW9uIGtlZXBzIHRoZSBwYWdlIGFuZCBpdHMgT0cgY2FyZCBmcm9tIGRyaWZ0aW5nIGFwYXJ0LlxuZnVuY3Rpb24gZ2V0QXBpSW5kZXhJbnRybyhuYW1lc3BhY2VzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcGFja2FnZU5hbWUsIHB1YmxpY0FwaUVudHJ5IH0gPSBnZXRBcGlEb2NTZXR0aW5ncygpO1xuICBjb25zdCBpbnRybyA9IGBUaGUgY29tcGxldGUgQVBJIHJlZmVyZW5jZSBmb3IgXFxgJHtwYWNrYWdlTmFtZX1cXGAsIGdlbmVyYXRlZCBmcm9tIGl0cyBUU0RvYy4gYDtcbiAgaWYgKHB1YmxpY0FwaUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7aW50cm99RXZlcnkgZXhwb3J0IGlzIGltcG9ydGVkIGZyb20gdGhlIHBhY2thZ2Ugcm9vdCwgXFxgJHtwYWNrYWdlTmFtZX1cXGA7IHRoZSBtb2R1bGVzIGJlbG93IGdyb3VwIHRoZW0gYnkgc291cmNlIG1vZHVsZS5gO1xuICB9XG4gIGNvbnN0IFtleGFtcGxlTmFtZXNwYWNlID0gJ21vZHVsZSddID0gbmFtZXNwYWNlcztcbiAgcmV0dXJuIGAke2ludHJvfUVhY2ggbW9kdWxlIGJlbG93IG1hcHMgdG8gYW4gaW1wb3J0IHN1YnBhdGggKGUuZy4gdGhlIFxcYCR7ZXhhbXBsZU5hbWVzcGFjZX1cXGAgbW9kdWxlIGlzIFxcYCR7cGFja2FnZU5hbWV9LyR7ZXhhbXBsZU5hbWVzcGFjZX1cXGApLmA7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudEltcG9ydHMoY29tcG9uZW50TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gY29tcG9uZW50TmFtZXMubWFwKChjb21wb25lbnROYW1lKSA9PiBgaW1wb3J0ICR7Y29tcG9uZW50TmFtZX0gZnJvbSBcIiR7QVBJX0NPTVBPTkVOVFNfSU1QT1JUX1BSRUZJWH0vJHtjb21wb25lbnROYW1lfS5hc3Ryb1wiO2ApO1xufVxuXG5mdW5jdGlvbiByZW5kZXJOYW1lc3BhY2VUYWJsZShcbiAgbGluZXM6IHN0cmluZ1tdLFxuICBoZWFkaW5nOiBzdHJpbmcsXG4gIGNvbHVtbkxhYmVsOiBzdHJpbmcsXG4gIGVudHJpZXM6IFR5cGVJbmZvW10sXG4gIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sXG4gIG5hbWVzcGFjZTogc3RyaW5nXG4pOiB2b2lkIHtcbiAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNvcnRlZCA9IFsuLi5lbnRyaWVzXS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgbGluZXMucHVzaChgIyMgJHtoZWFkaW5nfWAsICcnLCBgfCAke2NvbHVtbkxhYmVsfSB8IERlc2NyaXB0aW9uIHxgLCAnfCA6LS0gfCA6LS0gfCcpO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHNvcnRlZCkge1xuICAgIGxpbmVzLnB1c2goYHwgWyR7ZW50cnkubmFtZX1dKC4vJHt0b1R5cGVSb3V0ZVNlZ21lbnQoZW50cnkubmFtZXNwYWNlLCBlbnRyeS5uYW1lKX0vKSB8ICR7ZXNjYXBlTWFya2Rvd24ocmVzb2x2ZUxpbmtzKGVudHJ5LmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgbmFtZXNwYWNlKSl9IHxgKTtcbiAgfVxuICBsaW5lcy5wdXNoKCcnKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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
|
|
574
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1EWCBwYWdlICsgc2lkZWJhciBlbWlzc2lvbjogcmVuZGVycyBtb2R1bGUgaW5kZXggcGFnZXMsIHBlci10eXBlIG92ZXJ2aWV3IHBhZ2VzLCBwZXItbWVtYmVyIHBhZ2VzLFxuICogYmFja2xpbmtzLCBhbmQgdGhlIFN0YXJsaWdodCBzaWRlYmFyIEpTT04uXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgUGFnZUNvbnRlbnQsXG4gIFBhZ2VGcm9udE1hdHRlcixcbiAgU2lkZWJhckVudHJ5LFxuICBTaWRlYmFyTGluayxcbiAgU2lkZWJhclRyZWVOb2RlLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBsaW5rQmFzZVR5cGUsXG4gIG1hcmtkb3duVG9IdG1sLFxuICBtZW1iZXJIcmVmLFxuICByZW5kZXJFeGFtcGxlTWR4LFxuICByZW5kZXJNZHhQcm9zZSxcbiAgcmVuZGVyVHlwZVdpdGhMaW5rcyxcbiAgcmVzb2x2ZUxpbmtzLFxuICB0b1R5cGVGaWxlU2VnbWVudCxcbiAgdG9UeXBlUm91dGVTZWdtZW50LFxuICB0eXBlTGlua1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgZ2V0QXBpRG9jU2V0dGluZ3MgfSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHtcbiAgZW5zdXJlRGlyZWN0b3J5LFxuICBlc2NhcGVKc1N0cmluZyxcbiAgZXNjYXBlSnN4QXR0cmlidXRlLFxuICBlc2NhcGVNYXJrZG93bixcbiAgZXNjYXBlTWR4QW5nbGVCcmFja2V0cyxcbiAgZXNjYXBlTWR4QnJhY2VzLFxuICBlc2NhcGVNZHhQcm9zZSxcbiAgZXNjYXBlWWFtbCxcbiAgZ2V0RGlzcGxheU5hbWUsXG4gIGdldEltcG9ydFN0YXRlbWVudCxcbiAgZ2V0TmFtZXNwYWNlRGlyZWN0b3J5LFxuICBtZW1iZXJSb3V0ZVNlZ21lbnQsXG4gIG1lbWJlclNsdWcsXG4gIG92ZXJsb2FkUm91dGVTZWdtZW50LFxuICBvdmVybG9hZFNsdWcsXG4gIHN0cmlwTWFya2Rvd24sXG4gIHRydW5jYXRlU2lnbmF0dXJlXG59IGZyb20gJy4vYXBpLWRvYy10ZXh0LXV0aWxzLnRzJztcbmltcG9ydCB7IEFQSV9DT01QT05FTlRTX0lNUE9SVF9QUkVGSVggfSBmcm9tICcuL2RvY3Mtc2l0ZS1hc3NldHMudHMnO1xuXG5jb25zdCBKU09OX0lOREVOVCA9IDI7XG5cbi8qKlxuICogQXBwZW5kIGJhY2tsaW5rcyB0byBvdmVydmlldyBwYWdlcyBhbmQgd3JpdGUgYWxsIGZpbGVzLiBLZXllZCBieSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqXG4gKiBAcGFyYW0gcGFnZUNvbnRlbnRzIC0gRXZlcnkgb3ZlcnZpZXcgcGFnZSdzIGNvbnRlbnQgYW5kIHBhdGgsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGVuZEJhY2tsaW5rc0FuZFdyaXRlKFxuICBwYWdlQ29udGVudHM6IE1hcDxzdHJpbmcsIFBhZ2VDb250ZW50PixcbiAgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGJhY2tsaW5rcyA9IGJ1aWxkQmFja2xpbmtzRnJvbUNvbnRlbnQocGFnZUNvbnRlbnRzLCBhbGxUeXBlcyk7XG5cbiAgZm9yIChjb25zdCBba2V5LCB7IGNvbnRlbnQsIGZpbGVQYXRoIH1dIG9mIHBhZ2VDb250ZW50cykge1xuICAgIGNvbnN0IHR5cGVCYWNrbGlua3MgPSBiYWNrbGlua3MuZ2V0KGtleSkgPz8gW107XG4gICAgY29uc3QgbGluZXMgPSBbY29udGVudF07XG4gICAgaWYgKHR5cGVCYWNrbGlua3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc29ydGVkQmFja2xpbmtzID0gWy4uLnR5cGVCYWNrbGlua3NdLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gICAgICBsaW5lcy5wdXNoKCcnLCAnLS0tJywgJycsICcqKkxpbmtzIHRvIHRoaXMgcGFnZToqKicsICcnKTtcbiAgICAgIGZvciAoY29uc3QgYmxLZXkgb2Ygc29ydGVkQmFja2xpbmtzKSB7XG4gICAgICAgIGNvbnN0IGJsSW5mbyA9IGVuc3VyZU5vbk51bGxhYmxlKGFsbFR5cGVzLmdldChibEtleSkpO1xuICAgICAgICBjb25zdCBibE5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGJsSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICBsaW5lcy5wdXNoKGAtIFske2JsSW5mby5uYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtibE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudChibEluZm8ubmFtZXNwYWNlLCBibEluZm8ubmFtZSl9LylgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCBiYWNrbGlua3MgYnkgc2Nhbm5pbmcgZ2VuZXJhdGVkIHBhZ2UgY29udGVudCBmb3IgaW50ZXJuYWwgQVBJIGxpbmtzLiBLZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKlxuICogQHBhcmFtIHBhZ2VDb250ZW50cyAtIEV2ZXJ5IG92ZXJ2aWV3IHBhZ2UncyBjb250ZW50IGFuZCBwYXRoLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcmV0dXJucyBFYWNoIHJlZmVyZW5jZWQgdHlwZSdzIHF1YWxpZmllZCBpZCBtYXBwZWQgdG8gdGhlIGlkcyBvZiB0aGUgcGFnZXMgbGlua2luZyB0byBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFja2xpbmtzRnJvbUNvbnRlbnQoXG4gIHBhZ2VDb250ZW50czogTWFwPHN0cmluZywgUGFnZUNvbnRlbnQ+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+XG4pOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4ge1xuICBjb25zdCBiYWNrbGlua3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIC8vIEVtaXR0ZWQgVVJMcyBsb3dlcmNhc2UgdGhlIHR5cGUgc2VnbWVudCAoc2VlIHRvUm91dGVTZWdtZW50KSwgc28gbWFwIGVhY2ggbG93ZXJjYXNlZCByb3V0ZVxuICAvLyBpZGVudGl0eSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBxdWFsaWZpZWQgdHlwZSBrZXkuXG4gIGNvbnN0IHJvdXRlS2V5VG9UeXBlS2V5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBbdHlwZUtleSwgaW5mb10gb2YgYWxsVHlwZXMpIHtcbiAgICByb3V0ZUtleVRvVHlwZUtleS5zZXQoYCR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0jJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9YCwgdHlwZUtleSk7XG4gIH1cbiAgY29uc3QgZXNjYXBlZEJhc2UgPSBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoLnJlcGxhY2VBbGwoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBTdHJpbmcucmF3YFxcJCZgKTtcbiAgY29uc3QgbGlua1BhdHRlcm4gPSBuZXcgUmVnRXhwKGAke2VzY2FwZWRCYXNlfS9hcGkvKD88cGF0aD4oPzpbYS16QS1aMC05X0AtXSsvKSspYCwgJ2cnKTtcbiAgZm9yIChjb25zdCBbc291cmNlS2V5LCB7IGNvbnRlbnQgfV0gb2YgcGFnZUNvbnRlbnRzKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBjb250ZW50Lm1hdGNoQWxsKGxpbmtQYXR0ZXJuKSkge1xuICAgICAgLy8gVGhlIHBhdHRlcm4gcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHNlZ21lbnQuXG4gICAgICBjb25zdCBzZWdtZW50cyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdwYXRoJykuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IGVuc3VyZU5vbk51bGxhYmxlKHNlZ21lbnRzLmF0KC0xKSk7XG4gICAgICBjb25zdCBuYW1lc3BhY2UgPSBzZWdtZW50cy5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgICAgY29uc3Qgcm91dGVLZXkgPSBgJHtuYW1lc3BhY2V9IyR7dHlwZU5hbWV9YDtcbiAgICAgIGNvbnN0IHJlc29sdmVkS2V5ID0gcm91dGVLZXlUb1R5cGVLZXkuZ2V0KHJvdXRlS2V5KTtcbiAgICAgIGlmIChyZXNvbHZlZEtleSAhPT0gdW5kZWZpbmVkICYmIHJlc29sdmVkS2V5ICE9PSBzb3VyY2VLZXkpIHtcbiAgICAgICAgcmVmZXJlbmNlZC5hZGQocmVzb2x2ZWRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZWQpIHtcbiAgICAgIGlmICghYmFja2xpbmtzLmhhcyhyZWZlcmVuY2UpKSB7XG4gICAgICAgIGJhY2tsaW5rcy5zZXQocmVmZXJlbmNlLCBbXSk7XG4gICAgICB9XG4gICAgICBiYWNrbGlua3MuZ2V0KHJlZmVyZW5jZSk/LnB1c2goc291cmNlS2V5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFja2xpbmtzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbmFtZXNwYWNlIHRyZWUgdGhlIHNpZGViYXIgaXMgZ2VuZXJhdGVkIGZyb20uXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEByZXR1cm5zIFRoZSByb290IG9mIHRoZSB0cmVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaWRlYmFyVHJlZSh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogU2lkZWJhclRyZWVOb2RlIHtcbiAgY29uc3Qgcm9vdDogU2lkZWJhclRyZWVOb2RlID0geyBjaGlsZHJlbjogbmV3IE1hcCgpLCB0eXBlczogW10gfTtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGNvbnN0IHBhcnRzID0gaW5mby5uYW1lc3BhY2Uuc3BsaXQoJy8nKTtcbiAgICBsZXQgbm9kZSA9IHJvb3Q7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBsZXQgY2hpbGQgPSBub2RlLmNoaWxkcmVuLmdldChwYXJ0KTtcbiAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgY2hpbGQgPSB7IGNoaWxkcmVuOiBuZXcgTWFwKCksIHR5cGVzOiBbXSB9O1xuICAgICAgICBub2RlLmNoaWxkcmVuLnNldChwYXJ0LCBjaGlsZCk7XG4gICAgICB9XG4gICAgICBub2RlID0gY2hpbGQ7XG4gICAgfVxuICAgIG5vZGUudHlwZXMucHVzaChpbmZvKTtcbiAgfVxuICByZXR1cm4gcm9vdDtcbn1cblxuLyoqXG4gKiBUaGUgcmF3IGNvZGUgc2lnbmF0dXJlIHNob3duIG9uIGEgdHlwZS1vdmVydmlldyBwYWdlJ3MgT0cgY2FyZCwgZm9yIHRoZSBraW5kcyB0aGF0IHJlbmRlciBhIHNpbmdsZVxuICogc2lnbmF0dXJlIGxpbmUgKGZ1bmN0aW9uIC8gdHlwZSBhbGlhcyAvIHZhcmlhYmxlKS4gQ2xhc3NlcywgaW50ZXJmYWNlcyBhbmQgZW51bXMgcmVuZGVyIG1lbWJlclxuICogdGFibGVzIGluc3RlYWQsIHNvIHRoZXkgZ2V0IG5vIHNpZ25hdHVyZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBzaWduYXR1cmUsIG9yIGB1bmRlZmluZWRgIGZvciBhIGtpbmQgdGhhdCByZW5kZXJzIG1lbWJlciB0YWJsZXMgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPdmVydmlld1NpZ25hdHVyZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGluZm8ua2luZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0ICRmdW5jdGlvbiA9IGluZm8ubWV0aG9kc1swXTtcbiAgICByZXR1cm4gJGZ1bmN0aW9uID8gYGZ1bmN0aW9uICR7JGZ1bmN0aW9uLnNpZ25hdHVyZX06ICR7JGZ1bmN0aW9uLnJldHVyblR5cGV9YCA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaW5mby5raW5kID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gYHR5cGUgJHtnZXREaXNwbGF5TmFtZShpbmZvLm5hbWUsIGluZm8pfSA9ICR7aW5mby50eXBlQWxpYXNUZXh0ID8/ICd1bmtub3duJ31gO1xuICB9XG4gIHJldHVybiBpbmZvLmtpbmQgPT09ICd2YXJpYWJsZScgPyBgJHtpbmZvLnZhcmlhYmxlS2V5d29yZCA/PyAnbGV0J30gJHtuYW1lfTogJHtpbmZvLnZhcmlhYmxlVHlwZSA/PyAndW5rbm93bid9YCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcml0ZXMgb25lIHBhZ2UgcGVyIG93biBwcm9wZXJ0eSBhbmQgcGVyIG93biBtZXRob2Qgb3ZlcmxvYWQga2V5IG9mIGEgY2xhc3Mgb3IgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVNZW1iZXJQYWdlcyhuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKTtcbiAgY29uc3QgdHlwZUZpbGVEaXJlY3RvcnkgPSB0b1R5cGVGaWxlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IHR5cGVSb3V0ZURpcmVjdG9yeSA9IHRvVHlwZVJvdXRlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IGNvbXBvbmVudEltcG9ydHMgPSBnZXRDb21wb25lbnRJbXBvcnRzKFsnTWVtYmVyRGV0YWlsJ10pO1xuXG4gIC8vIFByb3BlcnR5IHBhZ2VzIChza2lwIGluaGVyaXRlZCDigJQgdGhleSBsaXZlIG9uIHRoZSBwYXJlbnQgdHlwZSlcbiAgY29uc3QgcHJvcGVydGllcyA9IGluZm8ucHJvcGVydGllcy5maWx0ZXIoKHApID0+ICFwLmluaGVyaXRlZEZyb20pO1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCB0eXBlRmlsZURpcmVjdG9yeSwgYCR7bWVtYmVyU2x1Zyhwcm9wZXJ0eS5uYW1lKX0ubWR4YCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAgIGNvbnN0IHByb3BlcnR5VGl0bGUgPSBgJHtuYW1lfS4ke3Byb3BlcnR5Lm5hbWV9YDtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogcHJvcGVydHkuZGVzY3JpcHRpb24sXG4gICAgICBzaWRlYmFyTGFiZWw6IHByb3BlcnR5VGl0bGUsXG4gICAgICBzaWduYXR1cmU6IGAke3Byb3BlcnR5LnNpZ25hdHVyZX06ICR7cHJvcGVydHkudHlwZX1gLFxuICAgICAgc2x1ZzogYGFwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZURpcmVjdG9yeX0vJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCxcbiAgICAgIHRpdGxlOiBwcm9wZXJ0eVRpdGxlXG4gICAgfSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIC4uLmNvbXBvbmVudEltcG9ydHMsXG4gICAgICAnJyxcbiAgICAgIC8vIEJyZWFkY3J1bWJcbiAgICAgIGBbJHtuYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9Lykg4oC6ICR7cHJvcGVydHkubmFtZX1gLFxuICAgICAgJydcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGljQXR0cmlidXRlID0gcHJvcGVydHkuaXNTdGF0aWMgPyAnIGlzU3RhdGljPXt0cnVlfScgOiAnJztcbiAgICBjb25zdCB0eXBlQXR0cmlidXRlID0gYCB0eXBlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhwcm9wZXJ0eS50eXBlLCBhbGxUeXBlcywgbmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9XCJgO1xuICAgIGNvbnN0IGRlc2NBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5kZXNjcmlwdGlvbiA/IGAgZGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MocHJvcGVydHkuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgICBjb25zdCByZW1hcmtzQXR0cmlidXRlID0gcHJvcGVydHkucmVtYXJrcyA/IGAgcmVtYXJrcz1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhwcm9wZXJ0eS5yZW1hcmtzLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgIDogJyc7XG4gICAgY29uc3Qgc2luY2VBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5zaW5jZSA/IGAgc2luY2U9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShwcm9wZXJ0eS5zaW5jZSl9XCJgIDogJyc7XG4gICAgY29uc3QgZXhhbXBsZXNBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5leGFtcGxlcy5sZW5ndGggPiAwID8gYCBleGFtcGxlcz17JHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eS5leGFtcGxlcyl9fWAgOiAnJztcblxuICAgIGxpbmVzLnB1c2goYDxNZW1iZXJEZXRhaWwke3N0YXRpY0F0dHJpYnV0ZX0ke3R5cGVBdHRyaWJ1dGV9JHtkZXNjQXR0cmlidXRlfSR7cmVtYXJrc0F0dHJpYnV0ZX0ke3NpbmNlQXR0cmlidXRlfSR7ZXhhbXBsZXNBdHRyaWJ1dGV9IC8+YCwgJycpO1xuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICAvLyBNZXRob2QgcGFnZXMg4oCUIGVhY2ggb3ZlcmxvYWQga2V5IGdldHMgaXRzIG93biBwYWdlIChza2lwIGluaGVyaXRlZClcbiAgY29uc3QgbWV0aG9kcyA9IGluZm8ubWV0aG9kcy5maWx0ZXIoKG0pID0+ICFtLmluaGVyaXRlZEZyb20pO1xuICBjb25zdCBvdmVybG9hZEdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBNZW1iZXJJbmZvW10+KCk7XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICBjb25zdCBrZXkgPSBtZXRob2Qub3ZlcmxvYWRLZXk7XG4gICAgaWYgKCFvdmVybG9hZEdyb3Vwcy5oYXMoa2V5KSkge1xuICAgICAgb3ZlcmxvYWRHcm91cHMuc2V0KGtleSwgW10pO1xuICAgIH1cbiAgICBvdmVybG9hZEdyb3Vwcy5nZXQoa2V5KT8ucHVzaChtZXRob2QpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbb3ZlcmxvYWRLZXksIG92ZXJsb2Fkc10gb2Ygb3ZlcmxvYWRHcm91cHMpIHtcbiAgICBjb25zdCBmaWxlU2x1ZyA9IG92ZXJsb2FkU2x1ZyhvdmVybG9hZEtleSk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKGdldEFwaURvY1NldHRpbmdzKCkub3V0cHV0RGlyZWN0b3J5LCBuc0RpcmVjdG9yeSwgdHlwZUZpbGVEaXJlY3RvcnksIGAke2ZpbGVTbHVnfS5tZHhgKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGgpO1xuXG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBgJHtuYW1lfS4ke292ZXJsb2FkS2V5fSBtZXRob2RgO1xuICAgIC8vIEEgZ3JvdXAgaXMgY3JlYXRlZCBieSBpdHMgZmlyc3Qgb3ZlcmxvYWQuXG4gICAgY29uc3QgZmlyc3RPdmVybG9hZCA9IGVuc3VyZU5vbk51bGxhYmxlKG92ZXJsb2Fkc1swXSk7XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogZmlyc3RPdmVybG9hZC5kZXNjcmlwdGlvbixcbiAgICAgIHNpZGViYXJMYWJlbDogYCR7bmFtZX0uJHtvdmVybG9hZEtleX1gLFxuICAgICAgc2lnbmF0dXJlOiBgJHtmaXJzdE92ZXJsb2FkLnNpZ25hdHVyZX06ICR7Zmlyc3RPdmVybG9hZC5yZXR1cm5UeXBlfWAsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9LyR7dHlwZVJvdXRlRGlyZWN0b3J5fS8ke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gLFxuICAgICAgdGl0bGU6IGRpc3BsYXlOYW1lXG4gICAgfSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIC4uLmNvbXBvbmVudEltcG9ydHMsXG4gICAgICAnJyxcbiAgICAgIC8vIEJyZWFkY3J1bWJcbiAgICAgIGBbJHtuYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9Lykg4oC6ICR7b3ZlcmxvYWRLZXl9YCxcbiAgICAgICcnXG4gICAgKTtcblxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWQgb2Ygb3ZlcmxvYWRzKSB7XG4gICAgICByZW5kZXJNZXRob2RPdmVybG9hZE1keChsaW5lcywgb3ZlcmxvYWQsIG5hbWUsIGluZm8ubmFtZXNwYWNlLCBhbGxUeXBlcyk7XG4gICAgICBpZiAob3ZlcmxvYWRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbGluZXMucHVzaCgnLS0tJywgJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIGVhY2ggbW9kdWxlJ3MgaW5kZXggcGFnZSBhbmQgdGhlIHJvb3QgQVBJIGluZGV4LlxuICpcbiAqIEBwYXJhbSB0eXBlcyAtIFRoZSBkb2N1bWVudGVkIHR5cGVzLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbW9kdWxlT3ZlcnZpZXdzIC0gRWFjaCBuYW1lc3BhY2UncyBgQGZpbGVgIG92ZXJ2aWV3LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVOYW1lc3BhY2VJbmRleFBhZ2VzKFxuICB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBtb2R1bGVPdmVydmlld3M6IE1hcDxzdHJpbmcsIHN0cmluZz5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGVJbmZvW10+KCk7XG4gIGZvciAoY29uc3QgWywgaW5mb10gb2YgdHlwZXMpIHtcbiAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGluZm8ubmFtZXNwYWNlKSkge1xuICAgICAgbmFtZXNwYWNlcy5zZXQoaW5mby5uYW1lc3BhY2UsIFtdKTtcbiAgICB9XG4gICAgbmFtZXNwYWNlcy5nZXQoaW5mby5uYW1lc3BhY2UpPy5wdXNoKGluZm8pO1xuICB9XG5cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBuc1R5cGVzXSBvZiBuYW1lc3BhY2VzKSB7XG4gICAgY29uc3QgbnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkobmFtZXNwYWNlKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCAnaW5kZXgubWR4Jyk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAgIC8vIFRoZSBtb2R1bGUncyBgQGZpbGVgIHRleHQgZG91YmxlcyBhcyBpdHMgZGVzY3JpcHRpb24uXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgbW9kdWxlIGNhcmQgd2FzIHRpdGxlLW9ubHkgd2hpbGUgZXZlcnkgbWVtYmVyIGNhcmQgdW5kZXIgaXQgY2FycmllZCBvbmUuXG4gICAgY29uc3Qgb3ZlcnZpZXcgPSBtb2R1bGVPdmVydmlld3MuZ2V0KG5hbWVzcGFjZSk7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gcmVuZGVyRnJvbnRNYXR0ZXIoe1xuICAgICAgZGVzY3JpcHRpb246IG92ZXJ2aWV3LFxuICAgICAgc2lkZWJhckxhYmVsOiBuYW1lc3BhY2UsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9YCxcbiAgICAgIHRpdGxlOiBuYW1lc3BhY2VcbiAgICB9KTtcblxuICAgIC8vIE1vZHVsZSBAZmlsZSBvdmVydmlldyB0ZXh0XG4gICAgaWYgKG92ZXJ2aWV3KSB7XG4gICAgICBsaW5lcy5wdXNoKHJlbmRlck1keFByb3NlKG92ZXJ2aWV3LCBhbGxUeXBlcywgbmFtZXNwYWNlKSwgJycpO1xuICAgIH1cblxuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnQ2xhc3NlcycsICdDbGFzcycsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdjbGFzcycpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0ludGVyZmFjZXMnLCAnSW50ZXJmYWNlJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ2ludGVyZmFjZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0Z1bmN0aW9ucycsICdGdW5jdGlvbicsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdmdW5jdGlvbicpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ1R5cGVzJywgJ1R5cGUnLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAndHlwZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0VudW1zJywgJ0VudW0nLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAnZW51bScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ1ZhcmlhYmxlcycsICdWYXJpYWJsZScsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICd2YXJpYWJsZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcblxuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG5cbiAgLy8gUm9vdCBBUEkgaW5kZXggcGFnZSBsaXN0aW5nIGV2ZXJ5IG1vZHVsZS5cbiAgY29uc3Qgc29ydGVkTmFtZXNwYWNlcyA9IFsuLi5uYW1lc3BhY2VzLmtleXMoKV0uc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgY29uc3QgYXBpSW5kZXhJbnRybyA9IGdldEFwaUluZGV4SW50cm8oc29ydGVkTmFtZXNwYWNlcyk7XG4gIGNvbnN0IHJvb3RMaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgZGVzY3JpcHRpb246IGFwaUluZGV4SW50cm8sXG4gICAgc2lkZWJhckxhYmVsOiAnT3ZlcnZpZXcnLFxuICAgIHNsdWc6ICdhcGknLFxuICAgIHRpdGxlOiAnQVBJIHJlZmVyZW5jZSdcbiAgfSk7XG4gIHJvb3RMaW5lcy5wdXNoKGFwaUluZGV4SW50cm8sICcnLCAnIyMgTW9kdWxlcycsICcnKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2Ygc29ydGVkTmFtZXNwYWNlcykge1xuICAgIHJvb3RMaW5lcy5wdXNoKGAtIFske25hbWVzcGFjZX1dKCR7Z2V0QXBpRG9jU2V0dGluZ3MoKS5iYXNlUGF0aH0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZSl9LylgKTtcbiAgfVxuICByb290TGluZXMucHVzaCgnJyk7XG4gIGNvbnN0IHJvb3RGaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksICdpbmRleC5tZHgnKTtcbiAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KHJvb3RGaWxlUGF0aCk7XG4gIGF3YWl0IHdyaXRlRmlsZShyb290RmlsZVBhdGgsIHJvb3RMaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHJldHVybnMgVGhlIHBhZ2UncyBjb250ZW50LCBiZWZvcmUgYmFja2xpbmtzLCBhbmQgdGhlIHBhdGggaXQgaXMgd3JpdHRlbiB0by5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT3ZlcnZpZXdQYWdlKG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBQcm9taXNlPFBhZ2VDb250ZW50PiB7XG4gIGNvbnN0IG5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKTtcbiAgY29uc3QgdHlwZUZpbGVTbHVnID0gdG9UeXBlRmlsZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIG5hbWUpO1xuICBjb25zdCB0eXBlUm91dGVTbHVnID0gdG9UeXBlUm91dGVTZWdtZW50KGluZm8ubmFtZXNwYWNlLCBuYW1lKTtcbiAgY29uc3QgZmlsZVBhdGggPSBqb2luKGdldEFwaURvY1NldHRpbmdzKCkub3V0cHV0RGlyZWN0b3J5LCBuc0RpcmVjdG9yeSwgdHlwZUZpbGVTbHVnLCAnaW5kZXgubWR4Jyk7XG4gIGF3YWl0IGVuc3VyZURpcmVjdG9yeShmaWxlUGF0aCk7XG5cbiAgLy8gRnJvbnRtYXR0ZXJcbiAgY29uc3QgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZShuYW1lLCBpbmZvKTtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gcmVuZGVyRnJvbnRNYXR0ZXIoe1xuICAgIGRlc2NyaXB0aW9uOiBpbmZvLmRlc2NyaXB0aW9uLFxuICAgIHNpZGViYXJMYWJlbDogZGlzcGxheU5hbWUsXG4gICAgc2lnbmF0dXJlOiBjb21wdXRlT3ZlcnZpZXdTaWduYXR1cmUobmFtZSwgaW5mbyksXG4gICAgc2x1ZzogYGFwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZVNsdWd9YCxcbiAgICB0aXRsZTogZGlzcGxheU5hbWVcbiAgfSk7XG5cbiAgLy8gQ29tcG9uZW50IGltcG9ydHMg4oCUIGNvbXB1dGUgcmVsYXRpdmUgcGF0aCBmcm9tIGdlbmVyYXRlZCBwYWdlIHRvIGNvbXBvbmVudHNcbiAgbGluZXMucHVzaCguLi5nZXRDb21wb25lbnRJbXBvcnRzKFsnQ29uc3RydWN0b3JCbG9jaycsICdJbXBvcnRTdGF0ZW1lbnQnLCAnTWV0aG9kVGFibGUnLCAnUHJvcGVydHlUYWJsZScsICdUeXBlU2lnbmF0dXJlJ10pLCAnJyk7XG5cbiAgLy8gRGVzY3JpcHRpb25cbiAgaWYgKGluZm8uZGVzY3JpcHRpb24pIHtcbiAgICBsaW5lcy5wdXNoKHJlbmRlck1keFByb3NlKGluZm8uZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSksICcnKTtcbiAgfVxuXG4gIC8vIFJlbWFya3NcbiAgaWYgKGluZm8ucmVtYXJrcykge1xuICAgIGNvbnN0IHJlbWFya3NCbG9jayA9IHJlbmRlck1keFByb3NlKGluZm8ucmVtYXJrcywgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKTtcbiAgICBsaW5lcy5wdXNoKHJlbWFya3NCbG9jay5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiAobGluZS5sZW5ndGggPiAwID8gYD4gJHtsaW5lfWAgOiAnPicpKS5qb2luKCdcXG4nKSwgJycpO1xuICB9XG5cbiAgLy8gSW1wb3J0IHN0YXRlbWVudFxuICBjb25zdCBpbXBvcnRTdGF0ZW1lbnQgPSBnZXRJbXBvcnRTdGF0ZW1lbnQoaW5mbyk7XG4gIGlmIChpbXBvcnRTdGF0ZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGxpbmVzLnB1c2goYDxJbXBvcnRTdGF0ZW1lbnQgdGV4dD1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKGltcG9ydFN0YXRlbWVudCl9XCIgLz5gLCAnJyk7XG4gIH1cblxuICAvLyBFeGFtcGxlc1xuICBmb3IgKGNvbnN0IGV4YW1wbGUgb2YgaW5mby5leGFtcGxlcykge1xuICAgIGxpbmVzLnB1c2goJyoqRXhhbXBsZToqKicsICcnLCByZW5kZXJFeGFtcGxlTWR4KGV4YW1wbGUsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSksICcnKTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9ucyByZW5kZXIgbGlrZSBtZXRob2QgZGV0YWlsIHBhZ2VzIOKAlCBzaWduYXR1cmUsIHBhcmFtcywgcmV0dXJuc1xuICBpZiAoaW5mby5raW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVuZGVyRnVuY3Rpb25QYWdlKGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG4gICAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG4gIH1cblxuICAvLyBWYXJpYWJsZXMgcmVuZGVyIHdpdGggZGVjbGFyYXRpb24ga2V5d29yZCBhbmQgdHlwZVxuICBpZiAoaW5mby5raW5kID09PSAndmFyaWFibGUnKSB7XG4gICAgcmVuZGVyVmFyaWFibGVQYWdlKGxpbmVzLCBuYW1lLCBpbmZvLCBhbGxUeXBlcyk7XG4gICAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG4gIH1cblxuICAvLyBFbnVtcyByZW5kZXIgdGhlaXIgbWVtYmVycyBsaXN0XG4gIGlmIChpbmZvLmtpbmQgPT09ICdlbnVtJykge1xuICAgIHJlbmRlckVudW1QYWdlKGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG4gICAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG4gIH1cblxuICAvLyBUeXBlIGFsaWFzZXMgcmVuZGVyIHRoZWlyIHJpZ2h0LWhhbmQtc2lkZSBzaWduYXR1cmVcbiAgaWYgKGluZm8ua2luZCA9PT0gJ3R5cGUnKSB7XG4gICAgcmVuZGVyVHlwZUFsaWFzUGFnZShsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xuICB9XG5cbiAgLy8gQ2xhc3NlcyAvIGludGVyZmFjZXM6IHNpZ25hdHVyZSArIGV4dGVuZHMvaW1wbGVtZW50cyArIGNvbnN0cnVjdG9yICsgbWVtYmVyIHRhYmxlc1xuICBjb25zdCB0eXBlUGFyYW1zQXR0cmlidXRlID0gaW5mby50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwID8gYCB0eXBlUGFyYW1zPXske0pTT04uc3RyaW5naWZ5KGluZm8udHlwZVBhcmFtZXRlcnMpfX1gIDogJyc7XG4gIGNvbnN0IGV4dGVuZHNBdHRyaWJ1dGUgPSBpbmZvLmJhc2VUeXBlcy5sZW5ndGggPiAwID8gYCBleHRlbmRzPXske0pTT04uc3RyaW5naWZ5KGluZm8uYmFzZVR5cGVzKX19YCA6ICcnO1xuICBjb25zdCBpbXBsZW1lbnRzQXR0cmlidXRlID0gaW5mby5pbXBsZW1lbnRzVHlwZXMubGVuZ3RoID4gMCA/IGAgaW1wbGVtZW50cz17JHtKU09OLnN0cmluZ2lmeShpbmZvLmltcGxlbWVudHNUeXBlcyl9fWAgOiAnJztcbiAgbGluZXMucHVzaChgPFR5cGVTaWduYXR1cmUga2luZD1cIiR7aW5mby5raW5kfVwiIG5hbWU9XCIke25hbWV9XCIke3R5cGVQYXJhbXNBdHRyaWJ1dGV9JHtleHRlbmRzQXR0cmlidXRlfSR7aW1wbGVtZW50c0F0dHJpYnV0ZX0gLz5gLCAnJyk7XG5cbiAgaWYgKGluZm8uYmFzZVR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsaW5rZWRUeXBlcyA9IGluZm8uYmFzZVR5cGVzLm1hcCgodCkgPT4gbGlua0Jhc2VUeXBlKHQsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpO1xuICAgIGxpbmVzLnB1c2goYCoqRXh0ZW5kczoqKiAke2xpbmtlZFR5cGVzLmpvaW4oJywgJyl9YCwgJycpO1xuICB9XG5cbiAgaWYgKGluZm8uaW1wbGVtZW50c1R5cGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsaW5rZWRUeXBlcyA9IGluZm8uaW1wbGVtZW50c1R5cGVzLm1hcCgodCkgPT4gbGlua0Jhc2VUeXBlKHQsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpO1xuICAgIGxpbmVzLnB1c2goYCoqSW1wbGVtZW50czoqKiAke2xpbmtlZFR5cGVzLmpvaW4oJywgJyl9YCwgJycpO1xuICB9XG5cbiAgcmVuZGVyQ29uc3RydWN0b3JNZHgobGluZXMsIG5hbWUsIGluZm8sIGFsbFR5cGVzKTtcbiAgcmVuZGVyUHJvcGVydHlUYWJsZU1keChsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuICByZW5kZXJNZXRob2RUYWJsZU1keChsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuXG4gIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgU3RhcmxpZ2h0IHNpZGViYXIgb2YgdGhlIEFQSSByZWZlcmVuY2UuXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlU2lkZWJhckpzb24odHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gYnVpbGRTaWRlYmFyVHJlZSh0eXBlcyk7XG5cbiAgY29uc3QgZ3JvdXBzOiBTaWRlYmFyRW50cnlbXSA9IFtdO1xuICBjb25zdCB0b3BMZXZlbHMgPSBbLi4ucm9vdC5jaGlsZHJlbl0uc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGZvciAoY29uc3QgW3RvcExldmVsLCBjaGlsZF0gb2YgdG9wTGV2ZWxzKSB7XG4gICAgZ3JvdXBzLnB1c2goc2lkZWJhclRyZWVUb0VudHJpZXMoY2hpbGQsIHRvcExldmVsKSk7XG4gIH1cblxuICBjb25zdCB3cmFwcGVkU2lkZWJhcjogU2lkZWJhckVudHJ5W10gPSBbe1xuICAgIGNvbGxhcHNlZDogZmFsc2UsXG4gICAgaXRlbXM6IGdyb3VwcyxcbiAgICBsYWJlbDogJ0FQSSByZWZlcmVuY2UnXG4gIH1dO1xuXG4gIGF3YWl0IHdyaXRlRmlsZShnZXRBcGlEb2NTZXR0aW5ncygpLnNpZGViYXJGaWxlLCBKU09OLnN0cmluZ2lmeSh3cmFwcGVkU2lkZWJhciwgbnVsbCwgSlNPTl9JTkRFTlQpLCAndXRmLTgnKTtcbiAgY29uc29sZS53YXJuKGBHZW5lcmF0ZWQgc2lkZWJhciB3aXRoICR7U3RyaW5nKGdyb3Vwcy5sZW5ndGgpfSB0b3AtbGV2ZWwgbW9kdWxlIGdyb3Vwc2ApO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBjbGFzcydzIGNvbnN0cnVjdG9yIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ29uc3RydWN0b3JNZHgobGluZXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gaW5mby5jb25zdHJ1Y3RvckluZm87XG4gIGlmICghY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY3RvclNpZyA9IGBuZXcgJHtuYW1lfSR7Y29uc3RydWN0b3Iuc2lnbmF0dXJlfWA7XG4gIGNvbnN0IGN0b3JEZXNjID0gY29uc3RydWN0b3IuZGVzY3JpcHRpb25cbiAgICA/IGAgZGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MoY29uc3RydWN0b3IuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImBcbiAgICA6ICcnO1xuICBsaW5lcy5wdXNoKGA8Q29uc3RydWN0b3JCbG9jayBzaWduYXR1cmU9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShjdG9yU2lnKX1cIiR7Y3RvckRlc2N9IC8+YCwgJycpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYW4gZW51bSdzIG1lbWJlcnMuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRW51bVBhZ2UobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBsaW5lcy5wdXNoKGA8VHlwZVNpZ25hdHVyZSBraW5kPVwiZW51bVwiIG5hbWU9XCIke2luZm8ubmFtZX1cIiAvPmAsICcnKTtcblxuICBpZiAoaW5mby5lbnVtTWVtYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsaW5lcy5wdXNoKCcqKk1lbWJlcnM6KionLCAnJywgJ3wgTWVtYmVyIHwgVmFsdWUgfCBEZXNjcmlwdGlvbiB8JywgJ3wgOi0tIHwgOi0tIHwgOi0tIHwnKTtcbiAgZm9yIChjb25zdCBtZW1iZXIgb2YgaW5mby5lbnVtTWVtYmVycykge1xuICAgIGNvbnN0IHZhbHVlID0gbWVtYmVyLnZhbHVlID8gYFxcYCR7ZXNjYXBlTWFya2Rvd24obWVtYmVyLnZhbHVlKX1cXGBgIDogJyc7XG4gICAgbGluZXMucHVzaChgfCBcXGAke21lbWJlci5uYW1lfVxcYCB8ICR7dmFsdWV9IHwgJHtlc2NhcGVNYXJrZG93bihyZXNvbHZlTGlua3MobWVtYmVyLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKX0gfGApO1xuICB9XG4gIGxpbmVzLnB1c2goJycpO1xufVxuXG4vKipcbiAqIFJlbmRlciB0aGUgU3RhcmxpZ2h0IGZyb250bWF0dGVyIGJsb2NrICh0aHJvdWdoIHRoZSBjbG9zaW5nIGAtLS1gIGFuZCBpdHMgYmxhbmsgbGluZSkgc2hhcmVkIGJ5IGV2ZXJ5XG4gKiBnZW5lcmF0ZWQgcGFnZSBraW5kOiBtb2R1bGUgaW5kZXgsIHR5cGUgb3ZlcnZpZXcsIHByb3BlcnR5LCBhbmQgbWV0aG9kLlxuICpcbiAqIEV2ZXJ5IHBhZ2Uga2luZCBnb2VzIHRocm91Z2ggaGVyZSBzbyBubyBmaWVsZCBjYW4gYmUgZW1pdHRlZCBvbiBzb21lIGtpbmRzIGFuZCBzaWxlbnRseSBkcm9wcGVkIG9uXG4gKiBvdGhlcnMuIGBkZXNjcmlwdGlvbmAgaW4gcGFydGljdWxhciBpcyBub3QganVzdCBTRU8gbWV0YWRhdGEg4oCUIGl0IGlzIHRoZSBsaW5lIHRoZSBPRyBjYXJkIHJlbmRlcnMgdW5kZXJcbiAqIHRoZSB0aXRsZSwgc28gYSBwYWdlIGtpbmQgdGhhdCBza2lwcGVkIGl0IHByb2R1Y2VkIGEgdGl0bGUtb25seSBjYXJkIG5leHQgdG8gZnVsbHkgcG9wdWxhdGVkIG9uZXMuXG4gKlxuICogQHBhcmFtIGZyb250TWF0dGVyIC0gVGhlIHBhZ2UncyBmcm9udG1hdHRlciBmaWVsZHMuXG4gKiBAcmV0dXJucyBUaGUgZnJvbnRtYXR0ZXIgbGluZXMsIHRocm91Z2ggdGhlIGNsb3NpbmcgYC0tLWAgYW5kIGl0cyBibGFuayBsaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRnJvbnRNYXR0ZXIoZnJvbnRNYXR0ZXI6IFBhZ2VGcm9udE1hdHRlcik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAnLS0tJyxcbiAgICBgdGl0bGU6IFwiJHtlc2NhcGVZYW1sKGZyb250TWF0dGVyLnRpdGxlKX1cImAsXG4gICAgYHNsdWc6IFwiJHtmcm9udE1hdHRlci5zbHVnfVwiYCxcbiAgICAuLi4oZnJvbnRNYXR0ZXIuZGVzY3JpcHRpb24gPyBbYGRlc2NyaXB0aW9uOiBcIiR7ZXNjYXBlWWFtbChzdHJpcE1hcmtkb3duKGZyb250TWF0dGVyLmRlc2NyaXB0aW9uKSl9XCJgXSA6IFtdKSxcbiAgICAuLi4oZnJvbnRNYXR0ZXIuc2lnbmF0dXJlID8gW2BzaWduYXR1cmU6IFwiJHtlc2NhcGVZYW1sKHRydW5jYXRlU2lnbmF0dXJlKGZyb250TWF0dGVyLnNpZ25hdHVyZSkpfVwiYF0gOiBbXSksXG4gICAgJ2VkaXRVcmw6IGZhbHNlJyxcbiAgICAnc2lkZWJhcjonLFxuICAgIGAgIGxhYmVsOiBcIiR7ZXNjYXBlWWFtbChmcm9udE1hdHRlci5zaWRlYmFyTGFiZWwpfVwiYCxcbiAgICAnLS0tJyxcbiAgICAnJ1xuICBdO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBmdW5jdGlvbidzIHNpZ25hdHVyZSwgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlIGFuZCBleGFtcGxlcy5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJGdW5jdGlvblBhZ2UobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCAkZnVuY3Rpb24gPSBpbmZvLm1ldGhvZHNbMF07XG4gIGlmICghJGZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGluZXMucHVzaCgnKipTaWduYXR1cmU6KionLCAnJywgJ2BgYHRzJywgYGZ1bmN0aW9uICR7JGZ1bmN0aW9uLnNpZ25hdHVyZX06ICR7JGZ1bmN0aW9uLnJldHVyblR5cGV9YCwgJ2BgYCcsICcnKTtcblxuICBpZiAoJGZ1bmN0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGxpbmVzLnB1c2goJyoqUGFyYW1ldGVyczoqKicsICcnLCAnfCBQYXJhbWV0ZXIgfCBUeXBlIHwgRGVzY3JpcHRpb24gfCcsICd8IDotLSB8IDotLSB8IDotLSB8Jyk7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgJGZ1bmN0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgIGB8IFxcYCR7cGFyYW1ldGVyLm5hbWV9XFxgIHwgJHtlc2NhcGVNYXJrZG93bihlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3MocGFyYW1ldGVyLnR5cGUsIGFsbFR5cGVzLCBpbmZvLm5hbWUsIGluZm8ubmFtZXNwYWNlKSkpfSB8ICR7ZXNjYXBlTWFya2Rvd24ocmVzb2x2ZUxpbmtzKHBhcmFtZXRlci5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSl9IHxgXG4gICAgICApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgfVxuXG4gIGNvbnN0IHJldHVybkRlc2MgPSAkZnVuY3Rpb24ucmV0dXJuRGVzY3JpcHRpb24gPyBgIOKAlCAke2VzY2FwZU1keFByb3NlKHJlc29sdmVMaW5rcygkZnVuY3Rpb24ucmV0dXJuRGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpfWAgOiAnJztcbiAgbGluZXMucHVzaChgKipSZXR1cm5zOioqICR7ZXNjYXBlTWR4QnJhY2VzKGVzY2FwZU1keEFuZ2xlQnJhY2tldHMocmVuZGVyVHlwZVdpdGhMaW5rcygkZnVuY3Rpb24ucmV0dXJuVHlwZSwgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9JHtyZXR1cm5EZXNjfWAsICcnKTtcblxuICBmb3IgKGNvbnN0IGV4YW1wbGUgb2YgJGZ1bmN0aW9uLmV4YW1wbGVzKSB7XG4gICAgbGluZXMucHVzaCgnKipFeGFtcGxlOioqJywgJycsIHJlbmRlckV4YW1wbGVNZHgoZXhhbXBsZSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSwgJycpO1xuICB9XG59XG5cbi8qKlxuICogUmVuZGVycyBvbmUgbWV0aG9kIG92ZXJsb2FkLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBvdmVybG9hZCAtIFRoZSBvdmVybG9hZC5cbiAqIEBwYXJhbSB0eXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBtZXRob2QgYmVsb25ncyB0by5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSB0eXBlIHRoZSBtZXRob2QgYmVsb25ncyB0by5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1ldGhvZE92ZXJsb2FkTWR4KGxpbmVzOiBzdHJpbmdbXSwgb3ZlcmxvYWQ6IE1lbWJlckluZm8sIHR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IHNpZyA9IGAke292ZXJsb2FkLnNpZ25hdHVyZX06ICR7b3ZlcmxvYWQucmV0dXJuVHlwZX1gO1xuICBjb25zdCBzdGF0aWNBdHRyaWJ1dGUgPSBvdmVybG9hZC5pc1N0YXRpYyA/ICcgaXNTdGF0aWM9e3RydWV9JyA6ICcnO1xuICBjb25zdCBkZXNjQXR0cmlidXRlID0gb3ZlcmxvYWQuZGVzY3JpcHRpb24gPyBgIGRlc2NyaXB0aW9uPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKG92ZXJsb2FkLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgbmFtZXNwYWNlKSkpfVwiYCA6ICcnO1xuICBjb25zdCByZW1hcmtzQXR0cmlidXRlID0gb3ZlcmxvYWQucmVtYXJrcyA/IGAgcmVtYXJrcz1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhvdmVybG9hZC5yZW1hcmtzLCBhbGxUeXBlcywgbmFtZXNwYWNlKSkpfVwiYCA6ICcnO1xuICBjb25zdCBzaW5jZUF0dHJpYnV0ZSA9IG92ZXJsb2FkLnNpbmNlID8gYCBzaW5jZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG92ZXJsb2FkLnNpbmNlKX1cImAgOiAnJztcbiAgY29uc3QgcmV0dXJuVHlwZUF0dHJpYnV0ZSA9IGAgcmV0dXJuVHlwZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlbmRlclR5cGVXaXRoTGlua3Mob3ZlcmxvYWQucmV0dXJuVHlwZSwgYWxsVHlwZXMsIHR5cGVOYW1lLCBuYW1lc3BhY2UpKSl9XCJgO1xuICBjb25zdCByZXR1cm5EZXNjQXR0cmlidXRlID0gb3ZlcmxvYWQucmV0dXJuRGVzY3JpcHRpb25cbiAgICA/IGAgcmV0dXJuRGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3Mob3ZlcmxvYWQucmV0dXJuRGVzY3JpcHRpb24sIGFsbFR5cGVzLCBuYW1lc3BhY2UpKSl9XCJgXG4gICAgOiAnJztcbiAgY29uc3QgZXhhbXBsZXNBdHRyaWJ1dGUgPSBvdmVybG9hZC5leGFtcGxlcy5sZW5ndGggPiAwID8gYCBleGFtcGxlcz17JHtKU09OLnN0cmluZ2lmeShvdmVybG9hZC5leGFtcGxlcyl9fWAgOiAnJztcblxuICBjb25zdCBwYXJhbXMgPSBvdmVybG9hZC5wYXJhbWV0ZXJzLm1hcCgocCkgPT4gKHtcbiAgICBkZXNjcmlwdGlvbjogbWFya2Rvd25Ub0h0bWwocC5kZXNjcmlwdGlvbiB8fCAocC5uYW1lLmVuZHNXaXRoKCc/JykgPyAnKihPcHRpb25hbCkqJyA6ICcnKSksXG4gICAgbmFtZTogcC5uYW1lLFxuICAgIHR5cGU6IG1hcmtkb3duVG9IdG1sKHJlbmRlclR5cGVXaXRoTGlua3MocC50eXBlLCBhbGxUeXBlcywgdHlwZU5hbWUsIG5hbWVzcGFjZSkpXG4gIH0pKTtcbiAgY29uc3QgcGFyYW1zQXR0cmlidXRlID0gcGFyYW1zLmxlbmd0aCA+IDAgPyBgIHBhcmFtZXRlcnM9eyR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX19YCA6ICcnO1xuXG4gIGxpbmVzLnB1c2goXG4gICAgYDxNZW1iZXJEZXRhaWwke3N0YXRpY0F0dHJpYnV0ZX0gc2lnbmF0dXJlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUoc2lnKX1cIiR7ZGVzY0F0dHJpYnV0ZX0ke3JlbWFya3NBdHRyaWJ1dGV9JHtzaW5jZUF0dHJpYnV0ZX0ke3JldHVyblR5cGVBdHRyaWJ1dGV9JHtyZXR1cm5EZXNjQXR0cmlidXRlfSR7cGFyYW1zQXR0cmlidXRlfSR7ZXhhbXBsZXNBdHRyaWJ1dGV9IC8+YCxcbiAgICAnJ1xuICApO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB0eXBlJ3MgbWV0aG9kIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1ldGhvZFRhYmxlTWR4KGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgbWV0aG9kcyA9IFsuLi5pbmZvLm1ldGhvZHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS5pc1N0YXRpYyAhPT0gYi5pc1N0YXRpYykge1xuICAgICAgcmV0dXJuIGEuaXNTdGF0aWMgPyAxIDogLTE7XG4gICAgfVxuICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICB9KTtcbiAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxpbmVzLnB1c2goJzxNZXRob2RUYWJsZSByb3dzPXtbJyk7XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICBjb25zdCBkZXNjID0gZXNjYXBlSnNTdHJpbmcobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKG1ldGhvZC5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpO1xuICAgIGNvbnN0IHN0YXRpY1ByZWZpeCA9IG1ldGhvZC5pc1N0YXRpYyA/ICdzdGF0aWMgJyA6ICcnO1xuICAgIGNvbnN0IHNob3J0UGFyYW1zID0gbWV0aG9kLnBhcmFtZXRlcnMubWFwKChwLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwICYmIEVWRU5UX01FVEhPRFMuaGFzKG1ldGhvZC5uYW1lKSAmJiAocC50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgcC50eXBlLnN0YXJ0c1dpdGgoJ1xcJycpKSA/IHAudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKSA6IHAubmFtZTtcbiAgICB9KS5qb2luKCcsICcpO1xuICAgIGNvbnN0IHNob3J0U2lnID0gYCR7c3RhdGljUHJlZml4fSR7bWV0aG9kLm5hbWV9KCR7c2hvcnRQYXJhbXN9KWA7XG4gICAgY29uc3Qgc2lnID0gZXNjYXBlSnNTdHJpbmcoc2hvcnRTaWcpO1xuICAgIGNvbnN0IHNsdWcgPSBvdmVybG9hZFJvdXRlU2VnbWVudChtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSBtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKG1ldGhvZC5yZXR1cm5UeXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpO1xuICAgIGNvbnN0IGluaGVyaXRlZEF0dHJpYnV0ZSA9IG1ldGhvZC5pbmhlcml0ZWRGcm9tXG4gICAgICA/IGAsIGluaGVyaXRlZEZyb206IFwiJHtlc2NhcGVKc1N0cmluZyhtYXJrZG93blRvSHRtbCh0eXBlTGluayhtZXRob2QuaW5oZXJpdGVkRnJvbSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpfVwiYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBocmVmID0gbWVtYmVySHJlZihzbHVnLCBtZXRob2QuaW5oZXJpdGVkRnJvbSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKTtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgeyBzaWduYXR1cmU6IFwiJHtzaWd9XCIsIGhyZWY6IFwiJHtlc2NhcGVKc1N0cmluZyhocmVmKX1cIiwgcmV0dXJuczogXCIke2VzY2FwZUpzU3RyaW5nKHJldHVyblR5cGUpfVwiLCBkZXNjcmlwdGlvbjogXCIke2Rlc2N9XCIke2luaGVyaXRlZEF0dHJpYnV0ZX0gfSxgXG4gICAgKTtcbiAgfVxuICBsaW5lcy5wdXNoKCddfSAvPicsICcnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdHlwZSdzIHByb3BlcnR5IHRhYmxlLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclByb3BlcnR5VGFibGVNZHgobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gaW5mby5wcm9wZXJ0aWVzO1xuICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGluZXMucHVzaCgnPFByb3BlcnR5VGFibGUgcm93cz17WycpO1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBkZXNjID0gZXNjYXBlSnNTdHJpbmcobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKHByb3BlcnR5LmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSk7XG4gICAgY29uc3QgdHlwZSA9IG1hcmtkb3duVG9IdG1sKHJlbmRlclR5cGVXaXRoTGlua3MocHJvcGVydHkudHlwZSwgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKTtcbiAgICBjb25zdCBpbmhlcml0ZWRBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5pbmhlcml0ZWRGcm9tXG4gICAgICA/IGAsIGluaGVyaXRlZEZyb206IFwiJHtlc2NhcGVKc1N0cmluZyhtYXJrZG93blRvSHRtbCh0eXBlTGluayhwcm9wZXJ0eS5pbmhlcml0ZWRGcm9tLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGhyZWYgPSBtZW1iZXJIcmVmKG1lbWJlclJvdXRlU2VnbWVudChwcm9wZXJ0eS5uYW1lKSwgcHJvcGVydHkuaW5oZXJpdGVkRnJvbSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKTtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgeyBuYW1lOiBcIiR7ZXNjYXBlSnNTdHJpbmcocHJvcGVydHkubmFtZSl9XCIsIGhyZWY6IFwiJHtlc2NhcGVKc1N0cmluZyhocmVmKX1cIiwgdHlwZTogXCIke2VzY2FwZUpzU3RyaW5nKHR5cGUpfVwiLCBkZXNjcmlwdGlvbjogXCIke2Rlc2N9XCIke2luaGVyaXRlZEF0dHJpYnV0ZX0gfSxgXG4gICAgKTtcbiAgfVxuICBsaW5lcy5wdXNoKCddfSAvPicsICcnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdHlwZSBhbGlhcydzIHNpZ25hdHVyZS5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUeXBlQWxpYXNQYWdlKGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgdHlwZVBhcmFtc0F0dHJpYnV0ZSA9IGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCA/IGAgdHlwZVBhcmFtcz17JHtKU09OLnN0cmluZ2lmeShpbmZvLnR5cGVQYXJhbWV0ZXJzKX19YCA6ICcnO1xuICBsaW5lcy5wdXNoKGA8VHlwZVNpZ25hdHVyZSBraW5kPVwidHlwZVwiIG5hbWU9XCIke2luZm8ubmFtZX1cIiR7dHlwZVBhcmFtc0F0dHJpYnV0ZX0gLz5gLCAnJyk7XG5cbiAgY29uc3QgcmhzID0gaW5mby50eXBlQWxpYXNUZXh0ID8/ICd1bmtub3duJztcbiAgbGluZXMucHVzaChcbiAgICAnKipTaWduYXR1cmU6KionLFxuICAgICcnLFxuICAgICdgYGB0cycsXG4gICAgYHR5cGUgJHtnZXREaXNwbGF5TmFtZShpbmZvLm5hbWUsIGluZm8pfSA9ICR7cmhzfWAsXG4gICAgJ2BgYCcsXG4gICAgJycsXG4gICAgYCoqVHlwZToqKiAke2VzY2FwZU1keEJyYWNlcyhlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3MocmhzLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX1gLFxuICAgICcnXG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHZhcmlhYmxlJ3MgZGVjbGFyYXRpb24gYW5kIHR5cGUuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJWYXJpYWJsZVBhZ2UobGluZXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IGtleXdvcmQgPSBpbmZvLnZhcmlhYmxlS2V5d29yZCA/PyAnbGV0JztcbiAgY29uc3QgdmFyaWFibGVUeXBlID0gaW5mby52YXJpYWJsZVR5cGUgPz8gJ3Vua25vd24nO1xuICBsaW5lcy5wdXNoKFxuICAgICcqKlNpZ25hdHVyZToqKicsXG4gICAgJycsXG4gICAgJ2BgYHRzJyxcbiAgICBgJHtrZXl3b3JkfSAke25hbWV9OiAke3ZhcmlhYmxlVHlwZX1gLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgIGAqKlR5cGU6KiogJHtlc2NhcGVNZHhCcmFjZXMoZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKHZhcmlhYmxlVHlwZSwgYWxsVHlwZXMsIG5hbWUsIGluZm8ubmFtZXNwYWNlKSkpfWAsXG4gICAgJydcbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIG5hbWVzcGFjZSB0cmVlIG5vZGUgaW50byBhIHNpZGViYXIgZ3JvdXAuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZS5cbiAqIEBwYXJhbSBsYWJlbCAtIFRoZSBncm91cCdzIGxhYmVsLlxuICogQHJldHVybnMgVGhlIHNpZGViYXIgZ3JvdXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWRlYmFyVHJlZVRvRW50cmllcyhub2RlOiBTaWRlYmFyVHJlZU5vZGUsIGxhYmVsOiBzdHJpbmcpOiBTaWRlYmFyRW50cnkge1xuICBjb25zdCBpdGVtczogKFNpZGViYXJFbnRyeSB8IFNpZGViYXJMaW5rKVtdID0gW107XG5cbiAgLy8gQ2hpbGQgZGlyZWN0b3J5IGdyb3VwcyBmaXJzdCAoYmVmb3JlIHRoaXMgbW9kdWxlJ3Mgb3duIHBhZ2VzKVxuICBjb25zdCBzb3J0ZWRDaGlsZHJlbiA9IFsuLi5ub2RlLmNoaWxkcmVuXS5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgZm9yIChjb25zdCBbY2hpbGROYW1lLCBjaGlsZF0gb2Ygc29ydGVkQ2hpbGRyZW4pIHtcbiAgICBpdGVtcy5wdXNoKHNpZGViYXJUcmVlVG9FbnRyaWVzKGNoaWxkLCBjaGlsZE5hbWUpKTtcbiAgfVxuXG4gIC8vIFRoaXMgbW9kdWxlJ3Mgb3duIG92ZXJ2aWV3IHBhZ2UgKyB0eXBlL2Z1bmN0aW9uIHBhZ2VzIChpbmRpdmlkdWFsIG1lbWJlcnMgYXJlIG5vdCBsaXN0ZWQpLlxuICAvLyBTaWRlYmFyIGBsaW5rYCBmaWVsZHMgbXVzdCBOT1QgZW1iZWQgQkFTRV9QQVRIOiBTdGFybGlnaHQgcHJlcGVuZHMgdGhlIGNvbmZpZyBgYmFzZWAgdG8gZXZlcnlcbiAgLy8gc2lkZWJhciBsaW5rIGl0c2VsZiwgc28gaW5jbHVkaW5nIGl0IGhlcmUgd291bGQgZG91YmxlIHRoZSBiYXNlIChlLmcuIGAvYmFzZS9iYXNlL2FwaS8uLi5gIOKGkiA0MDQpLlxuICAvLyBUaGlzIGRpZmZlcnMgZnJvbSBpbi1jb250ZW50IGxpbmtzLCB3aGljaCBhcmUgcmF3IGFuY2hvcnMgdGhhdCBTdGFybGlnaHQgZG9lcyBub3QgYmFzZS1wcmVwZW5kLlxuICBpZiAobm9kZS50eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgeyBuYW1lc3BhY2UgfSA9IGVuc3VyZU5vbk51bGxhYmxlKG5vZGUudHlwZXNbMF0pO1xuICAgIGl0ZW1zLnB1c2goeyBsYWJlbDogJ092ZXJ2aWV3JywgbGluazogYC9hcGkvJHtuYW1lc3BhY2V9L2AgfSk7XG4gICAgY29uc3Qgc29ydGVkVHlwZXMgPSBbLi4ubm9kZS50eXBlc10uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gICAgZm9yIChjb25zdCB0IG9mIHNvcnRlZFR5cGVzKSB7XG4gICAgICBpdGVtcy5wdXNoKHsgbGFiZWw6IHQubmFtZSwgbGluazogYC9hcGkvJHt0Lm5hbWVzcGFjZX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQodC5uYW1lc3BhY2UsIHQubmFtZSl9L2AgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY29sbGFwc2VkOiB0cnVlLCBpdGVtcywgbGFiZWwgfTtcbn1cblxuLy8gU2VydmVzIGJvdGggYXMgdGhlIHJvb3QgQVBJIHBhZ2UncyBwcm9zZSBhbmQgKHN0cmlwcGVkKSBhcyBpdHMgYGRlc2NyaXB0aW9uYCBmcm9udG1hdHRlci5cbi8vIFNoYXJpbmcgb25lIGZ1bmN0aW9uIGtlZXBzIHRoZSBwYWdlIGFuZCBpdHMgT0cgY2FyZCBmcm9tIGRyaWZ0aW5nIGFwYXJ0LlxuLy8gQW4gYGltcG9ydFN0YXRlbWVudGAgaG9vaywgbm90IHRoZSBtb2R1bGUgcGF0aCBvciB0aGUgYmFycmVsLCBkZWNpZGVzIHdoZXJlIGFuIGV4cG9ydCBpcyBpbXBvcnRlZCBmcm9tLCBzbyB0aGVcbi8vIGdlbmVyYXRlZCBwcm9zZSBjbGFpbXMgbmVpdGhlciB1bmRlciBvbmUuXG5mdW5jdGlvbiBnZXRBcGlJbmRleEludHJvKG5hbWVzcGFjZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcGlJbmRleEludHJvLCBpbXBvcnRTdGF0ZW1lbnQsIHBhY2thZ2VOYW1lLCBwdWJsaWNBcGlFbnRyeSB9ID0gZ2V0QXBpRG9jU2V0dGluZ3MoKTtcbiAgaWYgKGFwaUluZGV4SW50cm8gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcGlJbmRleEludHJvO1xuICB9XG4gIGNvbnN0IGludHJvID0gYFRoZSBjb21wbGV0ZSBBUEkgcmVmZXJlbmNlIGZvciBcXGAke3BhY2thZ2VOYW1lfVxcYCwgZ2VuZXJhdGVkIGZyb20gaXRzIFRTRG9jLiBgO1xuICBpZiAoaW1wb3J0U3RhdGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7aW50cm99VGhlIG1vZHVsZXMgYmVsb3cgZ3JvdXAgdGhlIGV4cG9ydHMgYnkgc291cmNlIG1vZHVsZTsgZWFjaCBleHBvcnQncyBwYWdlIHNob3dzIHRoZSBzdGF0ZW1lbnQgaXQgaXMgaW1wb3J0ZWQgd2l0aC5gO1xuICB9XG4gIGlmIChwdWJsaWNBcGlFbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGAke2ludHJvfUV2ZXJ5IGV4cG9ydCBpcyBpbXBvcnRlZCBmcm9tIHRoZSBwYWNrYWdlIHJvb3QsIFxcYCR7cGFja2FnZU5hbWV9XFxgOyB0aGUgbW9kdWxlcyBiZWxvdyBncm91cCB0aGVtIGJ5IHNvdXJjZSBtb2R1bGUuYDtcbiAgfVxuICBjb25zdCBbZXhhbXBsZU5hbWVzcGFjZSA9ICdtb2R1bGUnXSA9IG5hbWVzcGFjZXM7XG4gIHJldHVybiBgJHtpbnRyb31FYWNoIG1vZHVsZSBiZWxvdyBtYXBzIHRvIGFuIGltcG9ydCBzdWJwYXRoIChlLmcuIHRoZSBcXGAke2V4YW1wbGVOYW1lc3BhY2V9XFxgIG1vZHVsZSBpcyBcXGAke3BhY2thZ2VOYW1lfS8ke2V4YW1wbGVOYW1lc3BhY2V9XFxgKS5gO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRJbXBvcnRzKGNvbXBvbmVudE5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGNvbXBvbmVudE5hbWVzLm1hcCgoY29tcG9uZW50TmFtZSkgPT4gYGltcG9ydCAke2NvbXBvbmVudE5hbWV9IGZyb20gXCIke0FQSV9DT01QT05FTlRTX0lNUE9SVF9QUkVGSVh9LyR7Y29tcG9uZW50TmFtZX0uYXN0cm9cIjtgKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTmFtZXNwYWNlVGFibGUoXG4gIGxpbmVzOiBzdHJpbmdbXSxcbiAgaGVhZGluZzogc3RyaW5nLFxuICBjb2x1bW5MYWJlbDogc3RyaW5nLFxuICBlbnRyaWVzOiBUeXBlSW5mb1tdLFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBuYW1lc3BhY2U6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzb3J0ZWQgPSBbLi4uZW50cmllc10uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIGxpbmVzLnB1c2goYCMjICR7aGVhZGluZ31gLCAnJywgYHwgJHtjb2x1bW5MYWJlbH0gfCBEZXNjcmlwdGlvbiB8YCwgJ3wgOi0tIHwgOi0tIHwnKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBzb3J0ZWQpIHtcbiAgICBsaW5lcy5wdXNoKGB8IFske2VudHJ5Lm5hbWV9XSguLyR7dG9UeXBlUm91dGVTZWdtZW50KGVudHJ5Lm5hbWVzcGFjZSwgZW50cnkubmFtZSl9LykgfCAke2VzY2FwZU1hcmtkb3duKHJlc29sdmVMaW5rcyhlbnRyeS5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIG5hbWVzcGFjZSkpfSB8YCk7XG4gIH1cbiAgbGluZXMucHVzaCgnJyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQSxxQkFBdUM7QUFDdkMseUJBQWtDO0FBQ2xDLHNCQUEwQjtBQUMxQix1QkFBcUI7QUFZckIsK0JBQThCO0FBQzlCLG9DQVdPO0FBQ1AsOEJBQWtDO0FBQ2xDLGdDQWtCTztBQUNQLDhCQUE2QztBQUU3QyxNQUFNLGNBQWM7QUFRcEIsZUFBc0Isd0JBQ3BCLGNBQ0EsVUFDZTtBQUNmLFFBQU0sWUFBWSwwQkFBMEIsY0FBYyxRQUFRO0FBRWxFLGFBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxTQUFTLENBQUMsS0FBSyxjQUFjO0FBQ3ZELFVBQU0sZ0JBQWdCLFVBQVUsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM3QyxVQUFNLFFBQVEsQ0FBQyxPQUFPO0FBQ3RCLFFBQUksY0FBYyxTQUFTLEdBQUc7QUFDNUIsWUFBTSxrQkFBa0IsQ0FBQyxHQUFHLGFBQWEsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDNUUsWUFBTSxL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
|
|
@@ -44,4 +44,4 @@ function getApiDocSettings() {
|
|
|
44
44
|
configureApiDocs,
|
|
45
45
|
getApiDocSettings
|
|
46
46
|
});
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9hcGktZG9jLXNldHRpbmdzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHBlci1zaXRlIHNldHRpbmdzIG9mIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdoZXJlIGl0IHdyaXRlcywgd2hpY2ggcGFja2FnZSBpdCBkb2N1bWVudHMsIHRoZSBiYXNlXG4gKiBwYXRoIGl0cyBsaW5rcyBjYXJyeSwgYW5kIHRoZSBleHRlcm5hbCBsaW5rcyBhIHNpdGUgYWRkcyB0byB0aGUgZ2VuZXJpYyBvbmVzLlxuICovXG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgcmVhZHMgd2hpbGUgaXQgcmVuZGVycyBwYWdlcyBhbmQgbGlua3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRG9jU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHJvb3QgQVBJIHBhZ2UncyBpbnRybywgYXMgTWFya2Rvd24sIGluIHBsYWNlIG9mIHRoZSBnZW5lcmF0ZWQgb25lOyBzdHJpcHBlZCBvZiBpdHMgTWFya2Rvd24sIGl0IGlzIGFsc28gdGhlXG4gICAqIHBhZ2UncyBgZGVzY3JpcHRpb25gLiBGb3IgYSBwYWNrYWdlIHdob3NlIGFycmFuZ2VtZW50IHRoZSBnZW5lcmF0ZWQgaW50cm8gY2Fubm90IGV4cGxhaW4uXG4gICAqL1xuICByZWFkb25seSBhcGlJbmRleEludHJvPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIGJhc2UgcGF0aCwgd2l0aCBhIGxlYWRpbmcgc2xhc2ggYW5kIG5vIHRyYWlsaW5nIG9uZSwgZS5nLiBgL3R5cGVzY3JpcHQtbGliYC4gRXZlcnkgaW4tY29udGVudCBsaW5rXG4gICAqIHRoZSBnZW5lcmF0b3IgZW1pdHMgc3RhcnRzIHdpdGggaXQuXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb2xkZXIgbmFtZXMgd2hvc2Ugc3VidHJlZSBpcyBub3QgZG9jdW1lbnRlZCwgaW4gYWRkaXRpb24gdG8gYEB0eXBlc2AsIGBzdHlsZXNgIGFuZCBgdGVzdC1oZWxwZXJzYC4gQXBwbGllc1xuICAgKiB0byB0aGlzIHNpdGUncyBzb3VyY2Ugd2FsayBvbmx5OiBhIGxpbmsgaW50byBhbm90aGVyIHBhY2thZ2UncyBzaXRlIGFzc3VtZXMgdGhhdCBzaXRlJ3MgZ2VuZXJhdG9yIHNraXBwZWQgdGhlXG4gICAqIGRlZmF1bHQgZm9sZGVycyBhbG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRGlyZWN0b3JpZXM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVHlwZSBuYW1lcyBtYXBwZWQgdG8gdGhlIFVSTCB0aGVpciByZWZlcmVuY2VzIGxpbmsgdG8sIGZvciB0eXBlcyBuZWl0aGVyIHRoaXMgcGFja2FnZSBub3IgYSB7QGxpbmsgcGFja2FnZVNpdGVzfVxuICAgKiBwYWNrYWdlIGRlY2xhcmVzLCBlLmcuIGFuIGVjb3N5c3RlbSdzIG93biBBUEkgcmVmZXJlbmNlLiBDb25zdWx0ZWQgYmVmb3JlIHRoZSBnZW5lcmljIFR5cGVTY3JpcHQsIEphdmFTY3JpcHQgYW5kXG4gICAqIFdlYiBBUEkgbGlua3MsIHNvIGFuIGVudHJ5IGhlcmUgd2lucyBvdmVyIHRoZW0uXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbFR5cGVMaW5rczogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGF0IGFyZSBuZXZlciBsaW5rZWQgYXMgdHlwZXMsIGluIGFkZGl0aW9uIHRvIHRoZSBidWlsdC1pbiBnZW5lcmljIHBhcmFtZXRlciBuYW1lcyBhbmQgZXZlcnkgdHlwZVxuICAgKiBwYXJhbWV0ZXIgYSBkb2N1bWVudGVkIHR5cGUgZGVjbGFyZXM6IHR5cGUgcGFyYW1ldGVycyB0aGUgc2NhbiBkb2VzIG5vdCBmaW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJpY1R5cGVQYXJhbWV0ZXJzPzogcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBlYWNoIGV4cG9ydCdzIGltcG9ydCBzdGF0ZW1lbnQsIGZvciBhIHBhY2thZ2Ugd2hvc2UgZXhwb3J0cyBhcmUgbm90IGltcG9ydGVkIGZyb21cbiAgICogYDxwYWNrYWdlTmFtZT4vPG5hbWVzcGFjZT5gLCBlLmcuIG9uZSBwdWJsaXNoaW5nIGJhcnJlbCBlbnRyeSBwb2ludHMuIFJldHVybmluZyBgdW5kZWZpbmVkYCBzaG93cyBubyBzdGF0ZW1lbnQuXG4gICAqIFVuc2V0LCBldmVyeSBzdGF0ZW1lbnQgaXMgdGhlIHtAbGluayBJbXBvcnRTdGF0ZW1lbnRDb250ZXh0LmRlZmF1bHRJbXBvcnRTdGF0ZW1lbnR9LlxuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0U3RhdGVtZW50PzogSW1wb3J0U3RhdGVtZW50UHJvdmlkZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY2FzZS1wcmVzZXJ2ZWQgcm91dGUgc2VnbWVudCBvZiBhIG1lbWJlcidzIHBhZ2UsIG92ZXJyaWRpbmcgdGhlIGdlbmVyYXRvcidzIHNsdWcgd2hlcmUgaXQgcmV0dXJucyBhXG4gICAqIHN0cmluZy4gVGhlIGZpbGUgaXMgd3JpdHRlbiB1bmRlciB0aGUgc2VnbWVudCBsb3dlcmNhc2VkLiBUaGUgZ2VuZXJhdG9yJ3Mgb3duIHNsdWcgYWxyZWFkeSBrZWVwcyBhIG5hbWUnc1xuICAgKiB0cmFpbGluZyB1bmRlcnNjb3Jlcywgc28gYGNyZWF0ZV9fYCBhbmQgYGNyZWF0ZWAgbmV2ZXIgc2hhcmUgYSBwYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyUm91dGVTZWdtZW50PzogTWVtYmVyUm91dGVTZWdtZW50UHJvdmlkZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdGhlIGdlbmVyYXRlZCBBUEkgcGFnZXMgYXJlIHdyaXR0ZW4gdG8sIG5vcm1hbGx5IGA8ZG9jcz4vc3JjL2NvbnRlbnQvZG9jcy9hcGlgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UncyBuYW1lLCBlLmcuIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgLiBJbXBvcnQgc3RhdGVtZW50cyBhcmUgYnVpbHQgZnJvbSBpdCwgdW5sZXNzXG4gICAqIHtAbGluayBpbXBvcnRTdGF0ZW1lbnR9IGJ1aWxkcyB0aGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUGFja2FnZSBuYW1lcyBtYXBwZWQgdG8gdGhlIHJvb3QgVVJMIG9mIHRoZWlyIGRvY3VtZW50YXRpb24gc2l0ZSwgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLiBBIHR5cGUgd2hvc2VcbiAgICogZGVjbGFyYXRpb24gcmVzb2x2ZXMgaW50byBvbmUgb2YgdGhlc2UgcGFja2FnZXMgbGlua3MgdG8gaXRzIHBhZ2Ugb24gdGhhdCBzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVNpdGVzOiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBwYWNrYWdlJ3Mgb25lIHB1YmxpYyBlbnRyeSBwb2ludCwgZm9yIGEgcGFja2FnZSB0aGF0IHB1Ymxpc2hlcyBpdHMgQVBJIGZyb20gYSBiYXJyZWxcbiAgICogcmF0aGVyIHRoYW4gb25lIGltcG9ydCBzdWJwYXRoIHBlciBtb2R1bGUuIFNldCwgdGhlIHJlZmVyZW5jZSBkb2N1bWVudHMgb25seSB0aGUgZXhwb3J0cyB0aGF0IGJhcnJlbCByZS1leHBvcnRzLFxuICAgKiBmb3VuZCBieSBmb2xsb3dpbmcgaXRzIGBleHBvcnQgLi4uIGZyb21gIHN0YXRlbWVudHMgcmF0aGVyIHRoYW4gYnkgd2Fsa2luZyB0aGUgc291cmNlIGZvbGRlciwgYW5kIGV2ZXJ5IGltcG9ydFxuICAgKiBzdGF0ZW1lbnQgaW1wb3J0cyBmcm9tIHRoZSBwYWNrYWdlIHJvb3QuIEEgbmFtZXNwYWNlIHN0aWxsIGdyb3VwcyB0aGUgcmVmZXJlbmNlIGJ5IHNvdXJjZSBtb2R1bGUuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBcGlFbnRyeT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIEpTT04gZmlsZSB0aGUgZ2VuZXJhdGVkIFN0YXJsaWdodCBzaWRlYmFyIGlzIHdyaXR0ZW4gdG8uXG4gICAqL1xuICByZWFkb25seSBzaWRlYmFyRmlsZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQge0BsaW5rIEFwaURvY1NldHRpbmdzLmltcG9ydFN0YXRlbWVudH0gaXMgdG9sZCBhYm91dCB0aGUgZXhwb3J0IHdob3NlIGltcG9ydCBzdGF0ZW1lbnQgaXQgYnVpbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFN0YXRlbWVudENvbnRleHQge1xuICAvKipcbiAgICogVGhlIHN0YXRlbWVudCB0aGUgZ2VuZXJhdG9yIHdyaXRlcyB3aGVuIG5vIGhvb2sgaXMgc2V0LCBlLmcuXG4gICAqIGBpbXBvcnQgdHlwZSB7IEFscGhhIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FscGhhJztgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEltcG9ydFN0YXRlbWVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBleHBvcnQgaXMgYSB0eXBlIG9ubHkgKGFuIGludGVyZmFjZSwgYSB0eXBlIGFsaWFzIG9yIGFuIGVudW0pLCBpbXBvcnRlZCB3aXRoIGBpbXBvcnQgdHlwZWAuXG4gICAqL1xuICByZWFkb25seSBpc1R5cGVPbmx5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhwb3J0J3Mga2luZCwgZS5nLiBgY2xhc3NgLCBgZnVuY3Rpb25gLCBgaW50ZXJmYWNlYC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV4cG9ydCdzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleHBvcnQncyBuYW1lc3BhY2U6IGl0cyBzb3VyY2UgcGF0aCByZWxhdGl2ZSB0byB0aGUgc291cmNlIGZvbGRlciwgd2l0aG91dCBpdHMgZXh0ZW5zaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBpbXBvcnQgc3RhdGVtZW50IG9mIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgZXhwb3J0LlxuICogQHJldHVybnMgVGhlIHN0YXRlbWVudCwgb3IgYHVuZGVmaW5lZGAgdG8gc2hvdyBub25lLlxuICovXG5leHBvcnQgdHlwZSBJbXBvcnRTdGF0ZW1lbnRQcm92aWRlciA9IChjb250ZXh0OiBJbXBvcnRTdGF0ZW1lbnRDb250ZXh0KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjYXNlLXByZXNlcnZlZCByb3V0ZSBzZWdtZW50IG9mIGEgbWVtYmVyJ3MgcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIEEgcHJvcGVydHkncyBuYW1lLCBvciBhIG1ldGhvZCdzIG92ZXJsb2FkIGtleTogaXRzIG5hbWUsIG9yIGBvbignY2hhbmdlZCcpYCBmb3IgYW4gZXZlbnQgbWV0aG9kXG4gKiBrZXllZCBieSBpdHMgZmlyc3QgYXJndW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudCwgb3IgYHVuZGVmaW5lZGAgZm9yIHRoZSBnZW5lcmF0b3IncyBvd24uXG4gKi9cbmV4cG9ydCB0eXBlIE1lbWJlclJvdXRlU2VnbWVudFByb3ZpZGVyID0gKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICBzZXR0aW5nczogQXBpRG9jU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgc2V0dGluZ3M6IHVuZGVmaW5lZFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBzZXR0aW5ncyBldmVyeSBsYXRlciBwYWdlIGFuZCBsaW5rIHJlYWRzLlxuICpcbiAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZUFwaURvY3Moc2V0dGluZ3M6IEFwaURvY1NldHRpbmdzKTogdm9pZCB7XG4gIG1vZHVsZVN0YXRlLnNldHRpbmdzID0gc2V0dGluZ3M7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgc2V0dGluZ3Mgc2V0IGJ5IHtAbGluayBjb25maWd1cmVBcGlEb2NzfS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2V0dGluZ3MuXG4gKiBAdGhyb3dzIElmIHtAbGluayBjb25maWd1cmVBcGlEb2NzfSBoYXMgbm90IGJlZW4gY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBpRG9jU2V0dGluZ3MoKTogQXBpRG9jU2V0dGluZ3Mge1xuICBpZiAobW9kdWxlU3RhdGUuc2V0dGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFQSSBkb2N1bWVudGF0aW9uIGdlbmVyYXRvciBpcyBub3QgY29uZmlndXJlZDogY2FsbCBjb25maWd1cmVBcGlEb2NzKCkgZmlyc3QuJyk7XG4gIH1cblxuICByZXR1cm4gbW9kdWxlU3RhdGUuc2V0dGluZ3M7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTRJQSxNQUFNLGNBQTJCO0FBQUEsRUFDL0IsVUFBVTtBQUNaO0FBT08sU0FBUyxpQkFBaUIsVUFBZ0M7QUFDL0QsY0FBWSxXQUFXO0FBQ3pCO0FBUU8sU0FBUyxvQkFBb0M7QUFDbEQsTUFBSSxZQUFZLGFBQWEsUUFBVztBQUN0QyxVQUFNLElBQUksTUFBTSxtRkFBbUY7QUFBQSxFQUNyRztBQUVBLFNBQU8sWUFBWTtBQUNyQjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
* The settings the API documentation generator reads while it renders pages and links.
|
|
10
10
|
*/
|
|
11
11
|
export interface ApiDocSettings {
|
|
12
|
+
/**
|
|
13
|
+
* The root API page's intro, as Markdown, in place of the generated one; stripped of its Markdown, it is also the
|
|
14
|
+
* page's `description`. For a package whose arrangement the generated intro cannot explain.
|
|
15
|
+
*/
|
|
16
|
+
readonly apiIndexIntro?: string | undefined;
|
|
12
17
|
/**
|
|
13
18
|
* The site's base path, with a leading slash and no trailing one, e.g. `/typescript-lib`. Every in-content link
|
|
14
19
|
* the generator emits starts with it.
|