@kontur.candy/tools 2.155.0 → 2.157.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/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
<a name="2.157.0"></a>
|
|
2
|
+
# [2.157.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.156.0...release/tools/v2.157.0) (2023-07-19)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* **Tools:** Исправление тестов для форм с флагом useHeavyErrorLog ([6ac19d0](https://git.skbkontur.ru/ke/candy-utils/commit/6ac19d0)), see [#8111](https://yt.skbkontur.ru/issue/FS-8111)
|
|
8
|
+
|
|
9
|
+
<a name="2.156.0"></a>
|
|
10
|
+
# [2.156.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.155.0...release/tools/v2.156.0) (2023-07-18)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **Tools:** перекладываем внешние конвертеры в candy.resourses при билде формы ([31a9d51](https://git.skbkontur.ru/ke/candy-utils/commit/31a9d51)), see [#8067](https://yt.skbkontur.ru/issue/fs-8067)
|
|
16
|
+
|
|
1
17
|
<a name="2.155.0"></a>
|
|
2
18
|
# [2.155.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.154.0...release/tools/v2.155.0) (2023-07-12)
|
|
3
19
|
|
|
@@ -8,6 +8,9 @@ exports.getRngSchemaFilename = void 0;
|
|
|
8
8
|
var _fs = require("fs");
|
|
9
9
|
var _path = _interopRequireDefault(require("path"));
|
|
10
10
|
const getRngSchemaFilename = (formSchemasDirPath, gfv) => {
|
|
11
|
+
if (!Boolean(Number(gfv))) {
|
|
12
|
+
return ".rng.xml";
|
|
13
|
+
}
|
|
11
14
|
const maxSubversion = (0, _fs.readdirSync)(formSchemasDirPath).map(fileName => fileName.includes(".rng.xml") && !fileName.includes("схема.rng.xml")).filter(i => i === true).length - 1;
|
|
12
15
|
if (maxSubversion === undefined || !(0, _fs.existsSync)(_path.default.join(formSchemasDirPath, `${gfv}.${maxSubversion}.rng.xml`))) {
|
|
13
16
|
return ".rng.xml";
|
|
@@ -15,4 +18,4 @@ const getRngSchemaFilename = (formSchemasDirPath, gfv) => {
|
|
|
15
18
|
return `.${maxSubversion}.rng.xml`;
|
|
16
19
|
};
|
|
17
20
|
exports.getRngSchemaFilename = getRngSchemaFilename;
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwiX3BhdGgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZ2V0Um5nU2NoZW1hRmlsZW5hbWUiLCJmb3JtU2NoZW1hc0RpclBhdGgiLCJnZnYiLCJCb29sZWFuIiwiTnVtYmVyIiwibWF4U3VidmVyc2lvbiIsInJlYWRkaXJTeW5jIiwibWFwIiwiZmlsZU5hbWUiLCJpbmNsdWRlcyIsImZpbHRlciIsImkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJleGlzdHNTeW5jIiwicGF0aCIsImpvaW4iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vQ29tbW9uL2dldFJuZ1NjaGVtYUZpbGVuYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0Um5nU2NoZW1hRmlsZW5hbWUgPSAoZm9ybVNjaGVtYXNEaXJQYXRoOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIUJvb2xlYW4oTnVtYmVyKGdmdikpKSB7XG4gICAgICAgIHJldHVybiBcIi5ybmcueG1sXCI7XG4gICAgfVxuICAgIGNvbnN0IG1heFN1YnZlcnNpb246IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHJlYWRkaXJTeW5jKGZvcm1TY2hlbWFzRGlyUGF0aClcbiAgICAgICAgICAgIC5tYXAoZmlsZU5hbWUgPT4gZmlsZU5hbWUuaW5jbHVkZXMoXCIucm5nLnhtbFwiKSAmJiAhZmlsZU5hbWUuaW5jbHVkZXMoXCLRgdGF0LXQvNCwLnJuZy54bWxcIikpXG4gICAgICAgICAgICAuZmlsdGVyKGkgPT4gaSA9PT0gdHJ1ZSkubGVuZ3RoIC0gMTtcblxuICAgIGlmIChtYXhTdWJ2ZXJzaW9uID09PSB1bmRlZmluZWQgfHwgIWV4aXN0c1N5bmMocGF0aC5qb2luKGZvcm1TY2hlbWFzRGlyUGF0aCwgYCR7Z2Z2fS4ke21heFN1YnZlcnNpb259LnJuZy54bWxgKSkpIHtcbiAgICAgICAgcmV0dXJuIFwiLnJuZy54bWxcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gYC4ke21heFN1YnZlcnNpb259LnJuZy54bWxgO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEdBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUVPLE1BQU1HLG9CQUFvQixHQUFHQSxDQUFDQyxrQkFBMEIsRUFBRUMsR0FBVyxLQUFhO0VBQ3JGLElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxNQUFNLENBQUNGLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdkIsT0FBTyxVQUFVO0VBQ3JCO0VBQ0EsTUFBTUcsYUFBaUMsR0FDbkMsSUFBQUMsZUFBVyxFQUFDTCxrQkFBa0IsQ0FBQyxDQUMxQk0sR0FBRyxDQUFDQyxRQUFRLElBQUlBLFFBQVEsQ0FBQ0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUNELFFBQVEsQ0FBQ0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQ3JGQyxNQUFNLENBQUNDLENBQUMsSUFBSUEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDQyxNQUFNLEdBQUcsQ0FBQztFQUUzQyxJQUFJUCxhQUFhLEtBQUtRLFNBQVMsSUFBSSxDQUFDLElBQUFDLGNBQVUsRUFBQ0MsYUFBSSxDQUFDQyxJQUFJLENBQUNmLGtCQUFrQixFQUFHLEdBQUVDLEdBQUksSUFBR0csYUFBYyxVQUFTLENBQUMsQ0FBQyxFQUFFO0lBQzlHLE9BQU8sVUFBVTtFQUNyQjtFQUVBLE9BQVEsSUFBR0EsYUFBYyxVQUFTO0FBQ3RDLENBQUM7QUFBQ1ksT0FBQSxDQUFBakIsb0JBQUEsR0FBQUEsb0JBQUEifQ==
|
|
@@ -42,6 +42,14 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
|
|
|
42
42
|
const formGlobs = await _FormGlobsUtils.FormGlobs.validateGlobs(await _FormGlobsUtils.FormGlobs.resolveSpecifiers(buildOptions.formGlobs, farmDirectory), farmDirectory);
|
|
43
43
|
const staticResourcesForProductionChain = _Observe.Observe.files(_path.default.join(__dirname, "..", "..", "StaticFilesForProductionResourcesDir"), "*.js", "*.js.map").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("STATICS"), x, _path.default.join(resourcesDirectory, "public", "scripts")));
|
|
44
44
|
const resourcesNuSpecChain = _Observe.Observe.files(_path.default.join(farmDirectory), "*.nuspec").do(x => _FSTask.FSTask.copyByMasks((0, _StaticLogger.getLogger)().withPrefix("NUSPEC"), x, ["*.nuspec"], _path.default.join(resourcesDirectory)));
|
|
45
|
+
|
|
46
|
+
/** Конвертеры описи для форм, которые пока не реализованы на кенди, сама механика описи перенесена в формы в кенди апи, поэтому они должны быть в candy.resources
|
|
47
|
+
* Реализуется только при общем билде форм: candy build *
|
|
48
|
+
* */
|
|
49
|
+
let resourcesExternalConvertersChain = _Observe.Observe.empty();
|
|
50
|
+
if (formGlobs[0] === "*") {
|
|
51
|
+
resourcesExternalConvertersChain = _Observe.Observe.files(_path.default.join(farmDirectory, "externalConverters"), "*.xslt").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("EXTERNAL-CONVERTERS"), x, _path.default.join(resourcesDirectory, "converters")));
|
|
52
|
+
}
|
|
45
53
|
const copiedEngines = new Set();
|
|
46
54
|
const buildCache = new _CacheAssetsPlugin.BuildCache(farmDirectory, options.buildCacheMode);
|
|
47
55
|
const buildFormsChain = _Observe.Observe.directory(_path.default.join(farmDirectory, "forms"), formGlobs).splitToParallelChains(x => x, x => x, async gfv => {
|
|
@@ -186,6 +194,7 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
|
|
|
186
194
|
const stopObserve2 = await buildFormsChain.observe();
|
|
187
195
|
const stopObserve3 = await staticResourcesForProductionChain.observe();
|
|
188
196
|
const stopObserve4 = await resourcesNuSpecChain.observe();
|
|
197
|
+
const stopObserve5 = await resourcesExternalConvertersChain.observe();
|
|
189
198
|
await context.waitForExit();
|
|
190
199
|
if (stopObserve3 != undefined) {
|
|
191
200
|
await stopObserve3();
|
|
@@ -193,6 +202,9 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
|
|
|
193
202
|
if (stopObserve4 != undefined) {
|
|
194
203
|
await stopObserve4();
|
|
195
204
|
}
|
|
205
|
+
if (stopObserve5 != undefined) {
|
|
206
|
+
await stopObserve5();
|
|
207
|
+
}
|
|
196
208
|
await stopObserve2();
|
|
197
209
|
await stopObserve1();
|
|
198
210
|
} else {
|
|
@@ -204,6 +216,7 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
|
|
|
204
216
|
await pickListsChain.currentValue;
|
|
205
217
|
await staticResourcesForProductionChain.currentValue;
|
|
206
218
|
await resourcesNuSpecChain.currentValue;
|
|
219
|
+
await resourcesExternalConvertersChain.currentValue;
|
|
207
220
|
await buildFormsChain.currentValue;
|
|
208
221
|
// eslint-disable-next-line no-console
|
|
209
222
|
console.log(_chalk.default.greenBright("Build success"));
|
|
@@ -219,4 +232,4 @@ async function cleanTargetDirectory(resourcesDirectory, logger) {
|
|
|
219
232
|
await (0, _fsExtra.emptyDir)(resourcesDirectory);
|
|
220
233
|
logger.log("Resource directory clean");
|
|
221
234
|
}
|
|
222
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NoYWxrIiwiX2ZzRXh0cmEiLCJfbm9kZU5vdGlmaWVyIiwiX0FjcXVpcmVGb3JtRW5naW5lIiwiX0VuZ2luZVNvdXJjZSIsIl9Db21waWxlRm9ybSIsIl9HZW5lcmF0ZUZvcm0iLCJfTnVsbEZvcm1HZW5lcmF0b3IiLCJfV3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyIsIl9GU1Rhc2siLCJfQWNxdWlyZUZvcm1HZW5lcmF0b3IiLCJfUHVibGlzaGVkVmVyc2lvblV0aWxzIiwiX1Jlc29sdmVGb3JtSW5mbyIsIl9Xcml0ZUZvcm1NZXRhIiwiX0Zvcm1HbG9ic1V0aWxzIiwiX1N0YXRpY0xvZ2dlciIsIl9PYnNlcnZlIiwiX1NpbmdsZVZhbHVlUHJvZHVjZXIiLCJfVGltaW5nVXRpbHMiLCJfQ2FjaGVBc3NldHNQbHVnaW4iLCJfVHlwaW5nVXRpbHMiLCJfV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiX2dldFJuZ1NjaGVtYUZpbGVuYW1lIiwiZ2V0R2VuZXJhdG9yVmVyc2lvbiIsImdlbmVyYXRvclNvdXJjZSIsInR5cGUiLCJ2ZXJzaW9uIiwiRXJyb3IiLCJydW5CdWlsZEZvcm1zIiwiY29udGV4dCIsIm9wdGlvbnMiLCJmYXJtRGlyZWN0b3J5IiwicmVzb3VyY2VzRGlyZWN0b3J5IiwiZW5naW5lRGlyZWN0b3J5IiwiY2FuZHlNb2R1bGVzRGlyZWN0b3J5IiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsImJ1aWxkT3B0aW9ucyIsInBpY2tMaXN0c0NoYWluIiwiT2JzZXJ2ZSIsImZpbGVzIiwicGF0aCIsImpvaW4iLCJkbyIsIngiLCJGU1Rhc2siLCJjb3B5UmVjdXJzaXZlbHkiLCJsb2dnZXIiLCJ3aXRoUHJlZml4IiwiZm9ybUdsb2JzIiwiRm9ybUdsb2JzIiwidmFsaWRhdGVHbG9icyIsInJlc29sdmVTcGVjaWZpZXJzIiwic3RhdGljUmVzb3VyY2VzRm9yUHJvZHVjdGlvbkNoYWluIiwiX19kaXJuYW1lIiwiZ2V0TG9nZ2VyIiwicmVzb3VyY2VzTnVTcGVjQ2hhaW4iLCJjb3B5QnlNYXNrcyIsImNvcGllZEVuZ2luZXMiLCJTZXQiLCJidWlsZENhY2hlIiwiQnVpbGRDYWNoZSIsImJ1aWxkQ2FjaGVNb2RlIiwiYnVpbGRGb3Jtc0NoYWluIiwiZGlyZWN0b3J5Iiwic3BsaXRUb1BhcmFsbGVsQ2hhaW5zIiwiZ2Z2IiwiZm9ybURpclBhdGgiLCJwYXRoRXhpc3RzIiwid2FybmluZyIsInZhbHVlIiwiZm9ybVNjaGVtYXNEaXJQYXRoIiwicm5nU2NoZW1hTWFzayIsImdldFJuZ1NjaGVtYUZpbGVuYW1lIiwiZmlsZSIsInRyYW5zZm9ybSIsImZvcm1Kc29uRmlsZSIsInJlc29sdmVGb3JtSW5mbyIsInVwZ3JhZGVGb3JtSnNvbiIsInVzZUxhc3RTdGFibGVWZXJzaW9uIiwidXNlUHJlcmVsZWFzZVZlcnNpb24iLCJmaSIsIm1vZGUiLCJGb3JtQnVpbGRNb2RlIiwiTm9ybWFsQnVpbGQiLCJnZW5lcmF0b3JWZXJzaW9uIiwidW5kZWZpbmVkIiwiZW5naW5lVmVyc2lvbiIsInJlc29sdmVHZW5lcmF0b3JWZXJzaW9uIiwiZW5naW5lU291cmNlIiwicmVzb2x2ZUVuZ2luZVZlcnNpb24iLCJhdHRhY2giLCJTaW5nbGVWYWx1ZVByb2R1Y2VyIiwiTnVsbEZvcm1HZW5lcmF0b3IiLCJnZW5lcmF0b3JGYWN0b3J5IiwidXNlVmVyc2lvbkZyb21DYWNoZSIsInkiLCJnZW5lcmF0b3IiLCJnZXRHZW5lcmF0b3JTb3VyY2VLZXkiLCJlbmdpbmVGYWN0b3J5IiwiaGFzIiwiZ2V0RW5naW5lU291cmNlS2V5IiwiYWRkIiwiZm9ybVNvdXJjZXNQYXRoIiwiZGVwZW5kZW5jaWVzSGFzaCIsInN1cHBvcnRzRGVwZW5kZW5jaWVzRXh0cmFjdGlvbiIsImdldEFsbERlcGVuZGVuY2llc0hhc2giLCJidWlsZENhY2hlRXhpc3QiLCJleGlzdHMiLCJfZmkkZGVwZW5kZW5jaWVzSGFzaCIsImxvZyIsImdlbmVyYXRlRm9ybSIsInNraXBDb2RlUmVmb3JtYXR0aW5nIiwic2tpcEdlbmVyYXRlZENvZGVSZWZvcm1hdHRpbmciLCJyZXNvdXJjZXNIYXNoIiwiX2ZpJGRlcGVuZGVuY2llc0hhc2gyIiwiX2ZpJGRlcGVuZGVuY2llc0hhc2gzIiwiZXh0cmFjdCIsImJ1aWxkQ2FjaGVPcHRpb25zIiwiZGVwc0hhc2giLCJjb21waWxlRm9ybSIsImZvcm1OYW1lIiwidGhlbWVzIiwicmVqZWN0Iiwid3JpdGVGb3JtTWV0YSIsIndyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXMiLCJ3cml0ZUF0dGFjaG1lbnRQYXRoRmlsZXMiLCJDb3B5TGVnYWN5UHJlYnVpbHRSZXNvdXJjZXMiLCJtb2RpZmllciIsImNvbnRlbnQiLCJyZXBsYWNlIiwibW9kaWZ5RmlsZXNDb250ZW50Iiwid2F0Y2giLCJub3RpZmllciIsIm5vdGlmeSIsInRpdGxlIiwibWVzc2FnZSIsImNsZWFuIiwiY2xlYW5UYXJnZXREaXJlY3RvcnkiLCJzdG9wT2JzZXJ2ZTEiLCJvYnNlcnZlIiwic3RvcE9ic2VydmUyIiwic3RvcE9ic2VydmUzIiwic3RvcE9ic2VydmU0Iiwid2FpdEZvckV4aXQiLCJzdGFydERhdGUiLCJEYXRlIiwibm93IiwiY3VycmVudFZhbHVlIiwiY29uc29sZSIsImNoYWxrIiwiZ3JlZW5CcmlnaHQiLCJ0b3RhbFRpbWUiLCJwcmludFRpbWUiLCJlbXB0eURpciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZEZvcm1zL1J1bkJ1aWxkRm9ybXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgZW1wdHlEaXIsIHBhdGhFeGlzdHMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBub3RpZmllciBmcm9tIFwibm9kZS1ub3RpZmllclwiO1xuXG5pbXBvcnQgeyBlbmdpbmVGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRW5naW5lL0FjcXVpcmVGb3JtRW5naW5lXCI7XG5pbXBvcnQgeyBnZXRFbmdpbmVTb3VyY2VLZXkgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9FbmdpbmUvRW5naW5lU291cmNlXCI7XG5pbXBvcnQgeyBjb21waWxlRm9ybSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vQ29tcGlsZUZvcm1cIjtcbmltcG9ydCB7IGdlbmVyYXRlRm9ybSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBOdWxsRm9ybUdlbmVyYXRvciB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vTnVsbEZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IHdyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXMgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL1dyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXNcIjtcbmltcG9ydCB7IEZTVGFzayB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0ZTVGFza1wiO1xuaW1wb3J0IHtcbiAgICBnZW5lcmF0b3JGYWN0b3J5LFxuICAgIEdlbmVyYXRvclNvdXJjZSxcbiAgICBnZXRHZW5lcmF0b3JTb3VyY2VLZXksXG59IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0dlbmVyYXRvci9BY3F1aXJlRm9ybUdlbmVyYXRvclwiO1xuaW1wb3J0IHsgcmVzb2x2ZUVuZ2luZVZlcnNpb24sIHJlc29sdmVHZW5lcmF0b3JWZXJzaW9uIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUHVibGlzaGVkVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyBGb3JtQnVpbGRNb2RlLCByZXNvbHZlRm9ybUluZm8gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9SZXNvbHZlRm9ybUluZm9cIjtcbmltcG9ydCB7IHdyaXRlRm9ybU1ldGEgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Xcml0ZUZvcm1NZXRhXCI7XG5pbXBvcnQgeyBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvQ29uc29sZUFwcGxpY2F0aW9uL0NvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1HbG9icyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0Zvcm1HbG9ic1V0aWxzXCI7XG5pbXBvcnQgeyBJTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9JTG9nZ2VyXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9PYnNlcnZlXCI7XG5pbXBvcnQgeyBTaW5nbGVWYWx1ZVByb2R1Y2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL1NpbmdsZVZhbHVlUHJvZHVjZXJcIjtcbmltcG9ydCB7IHByaW50VGltZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1RpbWluZ1V0aWxzXCI7XG5pbXBvcnQgeyBCdWlsZENhY2hlIH0gZnJvbSBcIi4uLy4uL0Zvcm1XZWJwYWNrQ29uZmlndXJhdGlvbi9DYWNoZUFzc2V0c1BsdWdpblwiO1xuaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUF0dGFjaG1lbnRQYXRoRmlsZXNcIjtcbmltcG9ydCB7IGdldFJuZ1NjaGVtYUZpbGVuYW1lIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9nZXRSbmdTY2hlbWFGaWxlbmFtZVwiO1xuXG5pbXBvcnQgeyBCdWlsZEZvcm1zT3B0aW9ucyB9IGZyb20gXCIuL0J1aWxkRm9ybXNPcHRpb25zXCI7XG5cbmZ1bmN0aW9uIGdldEdlbmVyYXRvclZlcnNpb24oZ2VuZXJhdG9yU291cmNlOiBHZW5lcmF0b3JTb3VyY2UpOiBzdHJpbmcge1xuICAgIGlmIChnZW5lcmF0b3JTb3VyY2UudHlwZSA9PT0gXCJQdWJsaXNoZWRHZW5lcmF0b3JcIikge1xuICAgICAgICByZXR1cm4gZ2VuZXJhdG9yU291cmNlLnZlcnNpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZFByb2dyYW1TdGF0ZVwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5CdWlsZEZvcm1zKFxuICAgIGNvbnRleHQ6IENvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHQsXG4gICAgb3B0aW9uczogQnVpbGRGb3Jtc09wdGlvbnMsXG4gICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgIHJlc291cmNlc0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGVuZ2luZURpcmVjdG9yeTogc3RyaW5nLFxuICAgIGNhbmR5TW9kdWxlc0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnVpbGRPcHRpb25zID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHBpY2tMaXN0c0NoYWluID0gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJwaWNrbGlzdHNcIiksIFwiKi5qc29uXCIpLmRvKHggPT5cbiAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KFwiUElDS0xJU1RTXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInBpY2tsaXN0c1wiKSlcbiAgICApO1xuXG4gICAgY29uc3QgZm9ybUdsb2JzID0gYXdhaXQgRm9ybUdsb2JzLnZhbGlkYXRlR2xvYnMoXG4gICAgICAgIGF3YWl0IEZvcm1HbG9icy5yZXNvbHZlU3BlY2lmaWVycyhidWlsZE9wdGlvbnMuZm9ybUdsb2JzLCBmYXJtRGlyZWN0b3J5KSxcbiAgICAgICAgZmFybURpcmVjdG9yeVxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0aWNSZXNvdXJjZXNGb3JQcm9kdWN0aW9uQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCJTdGF0aWNGaWxlc0ZvclByb2R1Y3Rpb25SZXNvdXJjZXNEaXJcIiksXG4gICAgICAgIFwiKi5qc1wiLFxuICAgICAgICBcIiouanMubWFwXCJcbiAgICApLmRvKHggPT5cbiAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiU1RBVElDU1wiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwdWJsaWNcIiwgXCJzY3JpcHRzXCIpKVxuICAgICk7XG5cbiAgICBjb25zdCByZXNvdXJjZXNOdVNwZWNDaGFpbiA9IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZhcm1EaXJlY3RvcnkpLCBcIioubnVzcGVjXCIpLmRvKHggPT5cbiAgICAgICAgRlNUYXNrLmNvcHlCeU1hc2tzKGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJOVVNQRUNcIiksIHgsIFtcIioubnVzcGVjXCJdLCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5KSlcbiAgICApO1xuXG4gICAgY29uc3QgY29waWVkRW5naW5lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgY29uc3QgYnVpbGRDYWNoZSA9IG5ldyBCdWlsZENhY2hlKGZhcm1EaXJlY3RvcnksIG9wdGlvbnMuYnVpbGRDYWNoZU1vZGUpO1xuICAgIGNvbnN0IGJ1aWxkRm9ybXNDaGFpbiA9IE9ic2VydmUuZGlyZWN0b3J5KHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIpLCBmb3JtR2xvYnMpLnNwbGl0VG9QYXJhbGxlbENoYWlucyhcbiAgICAgICAgeCA9PiB4LFxuICAgICAgICB4ID0+IHgsXG4gICAgICAgIGFzeW5jIGdmdiA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtRGlyUGF0aCA9IHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdik7XG5cbiAgICAgICAgICAgIGlmICghKGF3YWl0IHBhdGhFeGlzdHMocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBcImZvcm0uanNvblwiKSkpKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXIud2FybmluZyhcbiAgICAgICAgICAgICAgICAgICAgYEZvcm0gJHtnZnZ9IGRvZXMgbm90IGhhdmUgZm9ybS5qc29uIGZpbGUuIFRvIGluY2x1ZGUgdGhpcyBmb3JtIHRvIGJ1aWxkIHByb2Nlc3MgcmVzdGFydCBidWlsZGBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZlLnZhbHVlKHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvcm1TY2hlbWFzRGlyUGF0aCA9IHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdiwgXCJzY2hlbWFzXCIpO1xuICAgICAgICAgICAgY29uc3Qgcm5nU2NoZW1hTWFzayA9IGAqJHtnZXRSbmdTY2hlbWFGaWxlbmFtZShmb3JtU2NoZW1hc0RpclBhdGgsIGdmdil9YDtcblxuICAgICAgICAgICAgcmV0dXJuIE9ic2VydmUuZmlsZShwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybS5qc29uXCIpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oZm9ybUpzb25GaWxlID0+XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVGb3JtSW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Kc29uRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EaXJQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChgRk9STToke2dmdn1gKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXBncmFkZUZvcm1Kc29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2VMYXN0U3RhYmxlVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNlUHJlcmVsZWFzZVZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLm1vZGUgPT09IEZvcm1CdWlsZE1vZGUuTm9ybWFsQnVpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaS5nZW5lcmF0b3JWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImdlbmVyYXRvclZlcnNpb24gaXMgbm90IGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbmdpbmVWZXJzaW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IGF3YWl0IHJlc29sdmVHZW5lcmF0b3JWZXJzaW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5nZW5lcmF0b3JWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGdmdilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZTogYXdhaXQgcmVzb2x2ZUVuZ2luZVZlcnNpb24oZmkuZW5naW5lVmVyc2lvbiwgY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChnZnYpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclNvdXJjZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmdlbmVyYXRvclNvdXJjZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZVZhbHVlUHJvZHVjZXIobmV3IE51bGxGb3JtR2VuZXJhdG9yKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yRmFjdG9yeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5keU1vZHVsZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNlVmVyc2lvbkZyb21DYWNoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIChmaSwgeSkgPT4gKHsgLi4uZmksIGdlbmVyYXRvcjogeSB9KSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvclNvdXJjZSAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdldEdlbmVyYXRvclNvdXJjZUtleShmaS5nZW5lcmF0b3JTb3VyY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIk51bGxGb3JtR2VuZXJhdG9yXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmVuZ2luZVNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVWYWx1ZVByb2R1Y2VyKFwiTnVsbEVuZ2luZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmdpbmVGYWN0b3J5KGZpLmVuZ2luZVNvdXJjZSwgY2FuZHlNb2R1bGVzRGlyZWN0b3J5LCBvcHRpb25zLnVzZVZlcnNpb25Gcm9tQ2FjaGUpLmRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIHggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvcGllZEVuZ2luZXMuaGFzKGdldEVuZ2luZVNvdXJjZUtleShmaS5lbmdpbmVTb3VyY2UpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiRU5HSU5FXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwdWJsaWNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRFbmdpbmVzLmFkZChnZXRFbmdpbmVTb3VyY2VLZXkoZmkuZW5naW5lU291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiBmaSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gKGZpLmVuZ2luZVNvdXJjZSAhPSB1bmRlZmluZWQgPyBnZXRFbmdpbmVTb3VyY2VLZXkoZmkuZW5naW5lU291cmNlKSA6IFwiTnVsbEVuZ2luZVwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi4uLy4uL2NvbnRyb2xzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4veHNsdFRlbXBsYXRlcy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi4uLy4uL2pzSGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNjaGVtYXMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdWdhci8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXV0b2NhbGMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWxwZXJzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsaWRhdGlvbnMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsb2NhbGl6YXRpb24vKiovKlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXBlbmRlbmNpZXNIYXNoOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5tb2RlICE9PSBGb3JtQnVpbGRNb2RlLk5vcm1hbEJ1aWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc0hhc2g6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGF3YWl0IGZpLmdlbmVyYXRvci5zdXBwb3J0c0RlcGVuZGVuY2llc0V4dHJhY3Rpb24oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzSGFzaCA9IGF3YWl0IGZpLmdlbmVyYXRvci5nZXRBbGxEZXBlbmRlbmNpZXNIYXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EaXJQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXNIYXNoOiBkZXBlbmRlbmNpZXNIYXNoLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWlsZENhY2hlRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmRlcGVuZGVuY2llc0hhc2ggIT0gdW5kZWZpbmVkICYmIGZpLmdlbmVyYXRvclNvdXJjZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVFeGlzdCA9IGF3YWl0IGJ1aWxkQ2FjaGUuZXhpc3RzKGZpLmdlbmVyYXRvclNvdXJjZSwgZ2Z2LCBmaS5kZXBlbmRlbmNpZXNIYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlRXhpc3Q6IGJ1aWxkQ2FjaGVFeGlzdCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5nZW5lcmF0b3JTb3VyY2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5idWlsZENhY2hlRXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoYEdFTkVSQVRFOiR7Z2Z2fWApLmxvZyhcIlNraXBwZWQgZHVlIGJ1aWxkIGNhY2hlIGV4aXRzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogb3B0aW9ucy5za2lwR2VuZXJhdGVkQ29kZVJlZm9ybWF0dGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNIYXNoOiBmaS5kZXBlbmRlbmNpZXNIYXNoID8/IFwiVW5kZWZpbmVkUmVzb3VyY2VzSGFzaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtXCIpLCBcIioqLypcIikpXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmdlbmVyYXRvclNvdXJjZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWQgJiYgZmkuYnVpbGRDYWNoZUV4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGBDT01QSUxFOiR7Z2Z2fWApLmxvZyhcIlNraXBwZWQgZHVlIGJ1aWxkIGNhY2hlIGV4aXN0c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGJ1aWxkQ2FjaGUuZXh0cmFjdChmaS5nZW5lcmF0b3JTb3VyY2UsIGdmdiwgZmkuZGVwZW5kZW5jaWVzSGFzaCwgcmVzb3VyY2VzRGlyZWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZENhY2hlT3B0aW9ucyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHNIYXNoOiBmaS5kZXBlbmRlbmNpZXNIYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclZlcnNpb246IGdldEdlbmVyYXRvclZlcnNpb24oZmkuZ2VuZXJhdG9yU291cmNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBvcHRpb25zLmJ1aWxkQ2FjaGVNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3Rvcnk6IGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29tcGlsZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLnRoZW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoaXMgdmVyc2lvbiBvZiBnZW5lcmF0b3IgaXMgbm90IHN1cHBvcnRlZCBkdWUgdG8gZGVwZW5kZW5jaWVzIGV4dHJhY3Rpb24gaXMgbm90IHN1cHBvcnRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZUZvcm1NZXRhKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2Z2LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZW5naW5lU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGlzIHZlcnNpb24gb2YgZ2VuZXJhdG9yIGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIGRlcGVuZGVuY2llcyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS50aGVtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5nZW5lcmF0b3JTb3VyY2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRDYWNoZU9wdGlvbnMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzSGFzaDogZmkuZGVwZW5kZW5jaWVzSGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JWZXJzaW9uOiBnZXRHZW5lcmF0b3JWZXJzaW9uKGZpLmdlbmVyYXRvclNvdXJjZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogb3B0aW9ucy5idWlsZENhY2hlTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5OiBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuYnVpbGRDYWNoZUV4aXN0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlQXR0YWNobWVudFBhdGhGaWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5tb2RlID09PSBGb3JtQnVpbGRNb2RlLkNvcHlMZWdhY3lQcmVidWlsdFJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJsZWdhY3ktcHJlYnVpbHRcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkxFR0FDWS1QUkVCVUlMVFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVWYWx1ZVByb2R1Y2VyKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJzY2hlbWFzXCIpLCBybmdTY2hlbWFNYXNrKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJTQ0hFTUFTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJzY2hlbWFzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwiY29udmVydGVyc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkNPTlZFUlRFUlNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJtZXJnZXJzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTUVSR0VSU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibWVyZ2Vyc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2RpZmllciA9IChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQucmVwbGFjZSgvPHg6aW5jbHVkZSBocmVmPVwiWy4vXSsvZywgJzx4OmluY2x1ZGUgaHJlZj1cIicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcImNvbnZlcnRlcnNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2subW9kaWZ5RmlsZXNDb250ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJGSVgtWFNMVC1JTkNMVURFXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJjb252ZXJ0ZXJzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiKiovKi54c2x0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIi4uXCIsIFwiLi5cIiwgXCJ4c2x0VGVtcGxhdGVzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiWFNMVC1URU1QTEFURVNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIiwgXCJ4c2x0VGVtcGxhdGVzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibm9ybWFsaXplXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk5PUk1BTElaRVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibm9ybWFsaXplXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwicGF0Y2hcIiksIFwiKi54c2x0XCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlBBVENIXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwYXRjaFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIm1hcFwiKSwgXCIqLnhtbFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJNQVBcIiksIHgsIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibWFwXCIpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcInVubWFwXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlVOTUFQXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJ1bm1hcFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWlsZE9wdGlvbnMud2F0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGAke2ZpLmZvcm1OYW1lfTog0YHQsdC+0YDQutCwINC30LDQstC10YDRiNC10L3QsGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEVuZ2luZTogJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkuZW5naW5lU291cmNlID09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIltOb0VuZ2luZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaS5lbmdpbmVTb3VyY2UudHlwZSA9PT0gXCJMb2NhbEVuZ2luZVNvdXJjZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmkuZW5naW5lU291cmNlLnZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGJ1aWxkT3B0aW9ucy53YXRjaCkge1xuICAgICAgICBpZiAob3B0aW9ucy5jbGVhbikge1xuICAgICAgICAgICAgYXdhaXQgY2xlYW5UYXJnZXREaXJlY3RvcnkocmVzb3VyY2VzRGlyZWN0b3J5LCBjb250ZXh0LmxvZ2dlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmUxID0gYXdhaXQgcGlja0xpc3RzQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTIgPSBhd2FpdCBidWlsZEZvcm1zQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTMgPSBhd2FpdCBzdGF0aWNSZXNvdXJjZXNGb3JQcm9kdWN0aW9uQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTQgPSBhd2FpdCByZXNvdXJjZXNOdVNwZWNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGF3YWl0IGNvbnRleHQud2FpdEZvckV4aXQoKTtcbiAgICAgICAgaWYgKHN0b3BPYnNlcnZlMyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9wT2JzZXJ2ZTQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTIoKTtcbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmUxKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNsZWFuKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY2xlYW5UYXJnZXREaXJlY3RvcnkocmVzb3VyY2VzRGlyZWN0b3J5LCBjb250ZXh0LmxvZ2dlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBwaWNrTGlzdHNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCBzdGF0aWNSZXNvdXJjZXNGb3JQcm9kdWN0aW9uQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgcmVzb3VyY2VzTnVTcGVjQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgYnVpbGRGb3Jtc0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbkJyaWdodChcIkJ1aWxkIHN1Y2Nlc3NcIikpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgY29uc3QgdG90YWxUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0RGF0ZTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVG90YWwgdGltZTogJHtwcmludFRpbWUodG90YWxUaW1lKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW5UYXJnZXREaXJlY3RvcnkocmVzb3VyY2VzRGlyZWN0b3J5OiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5sb2coXCJDbGVhbmluZyByZXNvdXJjZSBkaXJlY3RvcnkuIFwiICsgcmVzb3VyY2VzRGlyZWN0b3J5KTtcbiAgICBhd2FpdCBlbXB0eURpcihyZXNvdXJjZXNEaXJlY3RvcnkpO1xuICAgIGxvZ2dlci5sb2coXCJSZXNvdXJjZSBkaXJlY3RvcnkgY2xlYW5cIik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBSSxrQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sYUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsa0JBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLDZCQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxPQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxxQkFBQSxHQUFBWCxPQUFBO0FBS0EsSUFBQVksc0JBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLGdCQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxjQUFBLEdBQUFkLE9BQUE7QUFFQSxJQUFBZSxlQUFBLEdBQUFmLE9BQUE7QUFFQSxJQUFBZ0IsYUFBQSxHQUFBaEIsT0FBQTtBQUNBLElBQUFpQixRQUFBLEdBQUFqQixPQUFBO0FBQ0EsSUFBQWtCLG9CQUFBLEdBQUFsQixPQUFBO0FBQ0EsSUFBQW1CLFlBQUEsR0FBQW5CLE9BQUE7QUFDQSxJQUFBb0Isa0JBQUEsR0FBQXBCLE9BQUE7QUFDQSxJQUFBcUIsWUFBQSxHQUFBckIsT0FBQTtBQUNBLElBQUFzQix5QkFBQSxHQUFBdEIsT0FBQTtBQUNBLElBQUF1QixxQkFBQSxHQUFBdkIsT0FBQTtBQUlBLFNBQVN3QixtQkFBbUJBLENBQUNDLGVBQWdDLEVBQVU7RUFDbkUsSUFBSUEsZUFBZSxDQUFDQyxJQUFJLEtBQUssb0JBQW9CLEVBQUU7SUFDL0Ms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
|
|
235
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NoYWxrIiwiX2ZzRXh0cmEiLCJfbm9kZU5vdGlmaWVyIiwiX0FjcXVpcmVGb3JtRW5naW5lIiwiX0VuZ2luZVNvdXJjZSIsIl9Db21waWxlRm9ybSIsIl9HZW5lcmF0ZUZvcm0iLCJfTnVsbEZvcm1HZW5lcmF0b3IiLCJfV3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyIsIl9GU1Rhc2siLCJfQWNxdWlyZUZvcm1HZW5lcmF0b3IiLCJfUHVibGlzaGVkVmVyc2lvblV0aWxzIiwiX1Jlc29sdmVGb3JtSW5mbyIsIl9Xcml0ZUZvcm1NZXRhIiwiX0Zvcm1HbG9ic1V0aWxzIiwiX1N0YXRpY0xvZ2dlciIsIl9PYnNlcnZlIiwiX1NpbmdsZVZhbHVlUHJvZHVjZXIiLCJfVGltaW5nVXRpbHMiLCJfQ2FjaGVBc3NldHNQbHVnaW4iLCJfVHlwaW5nVXRpbHMiLCJfV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiX2dldFJuZ1NjaGVtYUZpbGVuYW1lIiwiZ2V0R2VuZXJhdG9yVmVyc2lvbiIsImdlbmVyYXRvclNvdXJjZSIsInR5cGUiLCJ2ZXJzaW9uIiwiRXJyb3IiLCJydW5CdWlsZEZvcm1zIiwiY29udGV4dCIsIm9wdGlvbnMiLCJmYXJtRGlyZWN0b3J5IiwicmVzb3VyY2VzRGlyZWN0b3J5IiwiZW5naW5lRGlyZWN0b3J5IiwiY2FuZHlNb2R1bGVzRGlyZWN0b3J5IiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsImJ1aWxkT3B0aW9ucyIsInBpY2tMaXN0c0NoYWluIiwiT2JzZXJ2ZSIsImZpbGVzIiwicGF0aCIsImpvaW4iLCJkbyIsIngiLCJGU1Rhc2siLCJjb3B5UmVjdXJzaXZlbHkiLCJsb2dnZXIiLCJ3aXRoUHJlZml4IiwiZm9ybUdsb2JzIiwiRm9ybUdsb2JzIiwidmFsaWRhdGVHbG9icyIsInJlc29sdmVTcGVjaWZpZXJzIiwic3RhdGljUmVzb3VyY2VzRm9yUHJvZHVjdGlvbkNoYWluIiwiX19kaXJuYW1lIiwiZ2V0TG9nZ2VyIiwicmVzb3VyY2VzTnVTcGVjQ2hhaW4iLCJjb3B5QnlNYXNrcyIsInJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluIiwiZW1wdHkiLCJjb3BpZWRFbmdpbmVzIiwiU2V0IiwiYnVpbGRDYWNoZSIsIkJ1aWxkQ2FjaGUiLCJidWlsZENhY2hlTW9kZSIsImJ1aWxkRm9ybXNDaGFpbiIsImRpcmVjdG9yeSIsInNwbGl0VG9QYXJhbGxlbENoYWlucyIsImdmdiIsImZvcm1EaXJQYXRoIiwicGF0aEV4aXN0cyIsIndhcm5pbmciLCJ2YWx1ZSIsImZvcm1TY2hlbWFzRGlyUGF0aCIsInJuZ1NjaGVtYU1hc2siLCJnZXRSbmdTY2hlbWFGaWxlbmFtZSIsImZpbGUiLCJ0cmFuc2Zvcm0iLCJmb3JtSnNvbkZpbGUiLCJyZXNvbHZlRm9ybUluZm8iLCJ1cGdyYWRlRm9ybUpzb24iLCJ1c2VMYXN0U3RhYmxlVmVyc2lvbiIsInVzZVByZXJlbGVhc2VWZXJzaW9uIiwiZmkiLCJtb2RlIiwiRm9ybUJ1aWxkTW9kZSIsIk5vcm1hbEJ1aWxkIiwiZ2VuZXJhdG9yVmVyc2lvbiIsInVuZGVmaW5lZCIsImVuZ2luZVZlcnNpb24iLCJyZXNvbHZlR2VuZXJhdG9yVmVyc2lvbiIsImVuZ2luZVNvdXJjZSIsInJlc29sdmVFbmdpbmVWZXJzaW9uIiwiYXR0YWNoIiwiU2luZ2xlVmFsdWVQcm9kdWNlciIsIk51bGxGb3JtR2VuZXJhdG9yIiwiZ2VuZXJhdG9yRmFjdG9yeSIsInVzZVZlcnNpb25Gcm9tQ2FjaGUiLCJ5IiwiZ2VuZXJhdG9yIiwiZ2V0R2VuZXJhdG9yU291cmNlS2V5IiwiZW5naW5lRmFjdG9yeSIsImhhcyIsImdldEVuZ2luZVNvdXJjZUtleSIsImFkZCIsImZvcm1Tb3VyY2VzUGF0aCIsImRlcGVuZGVuY2llc0hhc2giLCJzdXBwb3J0c0RlcGVuZGVuY2llc0V4dHJhY3Rpb24iLCJnZXRBbGxEZXBlbmRlbmNpZXNIYXNoIiwiYnVpbGRDYWNoZUV4aXN0IiwiZXhpc3RzIiwiX2ZpJGRlcGVuZGVuY2llc0hhc2giLCJsb2ciLCJnZW5lcmF0ZUZvcm0iLCJza2lwQ29kZVJlZm9ybWF0dGluZyIsInNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nIiwicmVzb3VyY2VzSGFzaCIsIl9maSRkZXBlbmRlbmNpZXNIYXNoMiIsIl9maSRkZXBlbmRlbmNpZXNIYXNoMyIsImV4dHJhY3QiLCJidWlsZENhY2hlT3B0aW9ucyIsImRlcHNIYXNoIiwiY29tcGlsZUZvcm0iLCJmb3JtTmFtZSIsInRoZW1lcyIsInJlamVjdCIsIndyaXRlRm9ybU1ldGEiLCJ3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwid3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiQ29weUxlZ2FjeVByZWJ1aWx0UmVzb3VyY2VzIiwibW9kaWZpZXIiLCJjb250ZW50IiwicmVwbGFjZSIsIm1vZGlmeUZpbGVzQ29udGVudCIsIndhdGNoIiwibm90aWZpZXIiLCJub3RpZnkiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJjbGVhbiIsImNsZWFuVGFyZ2V0RGlyZWN0b3J5Iiwic3RvcE9ic2VydmUxIiwib2JzZXJ2ZSIsInN0b3BPYnNlcnZlMiIsInN0b3BPYnNlcnZlMyIsInN0b3BPYnNlcnZlNCIsInN0b3BPYnNlcnZlNSIsIndhaXRGb3JFeGl0Iiwic3RhcnREYXRlIiwiRGF0ZSIsIm5vdyIsImN1cnJlbnRWYWx1ZSIsImNvbnNvbGUiLCJjaGFsayIsImdyZWVuQnJpZ2h0IiwidG90YWxUaW1lIiwicHJpbnRUaW1lIiwiZW1wdHlEaXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRGb3Jtcy9SdW5CdWlsZEZvcm1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IGVtcHR5RGlyLCBwYXRoRXhpc3RzIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgbm90aWZpZXIgZnJvbSBcIm5vZGUtbm90aWZpZXJcIjtcblxuaW1wb3J0IHsgZW5naW5lRmFjdG9yeSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0VuZ2luZS9BY3F1aXJlRm9ybUVuZ2luZVwiO1xuaW1wb3J0IHsgZ2V0RW5naW5lU291cmNlS2V5IH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRW5naW5lL0VuZ2luZVNvdXJjZVwiO1xuaW1wb3J0IHsgY29tcGlsZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0NvbXBpbGVGb3JtXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0dlbmVyYXRlRm9ybVwiO1xuaW1wb3J0IHsgTnVsbEZvcm1HZW5lcmF0b3IgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL051bGxGb3JtR2VuZXJhdG9yXCI7XG5pbXBvcnQgeyB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzXCI7XG5pbXBvcnQgeyBGU1Rhc2sgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9GU1Rhc2tcIjtcbmltcG9ydCB7XG4gICAgZ2VuZXJhdG9yRmFjdG9yeSxcbiAgICBHZW5lcmF0b3JTb3VyY2UsXG4gICAgZ2V0R2VuZXJhdG9yU291cmNlS2V5LFxufSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IHJlc29sdmVFbmdpbmVWZXJzaW9uLCByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbiB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgRm9ybUJ1aWxkTW9kZSwgcmVzb2x2ZUZvcm1JbmZvIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyB3cml0ZUZvcm1NZXRhIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvV3JpdGVGb3JtTWV0YVwiO1xuaW1wb3J0IHsgQ29uc29sZUFwcGxpY2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi8uLi9Db21tb25zL0NvbnNvbGVBcHBsaWNhdGlvbi9Db25zb2xlQXBwbGljYXRpb25Db250ZXh0XCI7XG5pbXBvcnQgeyBGb3JtR2xvYnMgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Gb3JtR2xvYnNVdGlsc1wiO1xuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcbmltcG9ydCB7IE9ic2VydmUgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvT2JzZXJ2ZVwiO1xuaW1wb3J0IHsgU2luZ2xlVmFsdWVQcm9kdWNlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9TaW5nbGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBwcmludFRpbWUgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UaW1pbmdVdGlsc1wiO1xuaW1wb3J0IHsgQnVpbGRDYWNoZSB9IGZyb20gXCIuLi8uLi9Gb3JtV2VicGFja0NvbmZpZ3VyYXRpb24vQ2FjaGVBc3NldHNQbHVnaW5cIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IHdyaXRlQXR0YWNobWVudFBhdGhGaWxlcyB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzXCI7XG5pbXBvcnQgeyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL0NoYWluYWJsZVZhbHVlUHJvZHVjZXJcIjtcbmltcG9ydCB7IEVtcHR5UHJvZHVjZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvRW1wdHlQcm9kdWNlclwiO1xuaW1wb3J0IHsgZ2V0Um5nU2NoZW1hRmlsZW5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL2dldFJuZ1NjaGVtYUZpbGVuYW1lXCI7XG5cbmltcG9ydCB7IEJ1aWxkRm9ybXNPcHRpb25zIH0gZnJvbSBcIi4vQnVpbGRGb3Jtc09wdGlvbnNcIjtcblxuZnVuY3Rpb24gZ2V0R2VuZXJhdG9yVmVyc2lvbihnZW5lcmF0b3JTb3VyY2U6IEdlbmVyYXRvclNvdXJjZSk6IHN0cmluZyB7XG4gICAgaWYgKGdlbmVyYXRvclNvdXJjZS50eXBlID09PSBcIlB1Ymxpc2hlZEdlbmVyYXRvclwiKSB7XG4gICAgICAgIHJldHVybiBnZW5lcmF0b3JTb3VyY2UudmVyc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkRm9ybXMoXG4gICAgY29udGV4dDogQ29uc29sZUFwcGxpY2F0aW9uQ29udGV4dCxcbiAgICBvcHRpb25zOiBCdWlsZEZvcm1zT3B0aW9ucyxcbiAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgcmVzb3VyY2VzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgY2FuZHlNb2R1bGVzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBidWlsZE9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgY29uc3QgcGlja0xpc3RzQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcInBpY2tsaXN0c1wiKSwgXCIqLmpzb25cIikuZG8oeCA9PlxuICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoXCJQSUNLTElTVFNcIiksIHgsIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicGlja2xpc3RzXCIpKVxuICAgICk7XG5cbiAgICBjb25zdCBmb3JtR2xvYnMgPSBhd2FpdCBGb3JtR2xvYnMudmFsaWRhdGVHbG9icyhcbiAgICAgICAgYXdhaXQgRm9ybUdsb2JzLnJlc29sdmVTcGVjaWZpZXJzKGJ1aWxkT3B0aW9ucy5mb3JtR2xvYnMsIGZhcm1EaXJlY3RvcnkpLFxuICAgICAgICBmYXJtRGlyZWN0b3J5XG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXRpY1Jlc291cmNlc0ZvclByb2R1Y3Rpb25DaGFpbiA9IE9ic2VydmUuZmlsZXMoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIlN0YXRpY0ZpbGVzRm9yUHJvZHVjdGlvblJlc291cmNlc0RpclwiKSxcbiAgICAgICAgXCIqLmpzXCIsXG4gICAgICAgIFwiKi5qcy5tYXBcIlxuICAgICkuZG8oeCA9PlxuICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJTVEFUSUNTXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInB1YmxpY1wiLCBcInNjcmlwdHNcIikpXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc291cmNlc051U3BlY0NoYWluID0gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSksIFwiKi5udXNwZWNcIikuZG8oeCA9PlxuICAgICAgICBGU1Rhc2suY29weUJ5TWFza3MoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk5VU1BFQ1wiKSwgeCwgW1wiKi5udXNwZWNcIl0sIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnkpKVxuICAgICk7XG5cbiAgICAvKiog0JrQvtC90LLQtdGA0YLQtdGA0Ysg0L7Qv9C40YHQuCDQtNC70Y8g0YTQvtGA0LwsINC60L7RgtC+0YDRi9C1INC/0L7QutCwINC90LUg0YDQtdCw0LvQuNC30L7QstCw0L3RiyDQvdCwINC60LXQvdC00LgsINGB0LDQvNCwINC80LXRhdCw0L3QuNC60LAg0L7Qv9C40YHQuCDQv9C10YDQtdC90LXRgdC10L3QsCDQsiDRhNC+0YDQvNGLINCyINC60LXQvdC00Lgg0LDQv9C4LCDQv9C+0Y3RgtC+0LzRgyDQvtC90Lgg0LTQvtC70LbQvdGLINCx0YvRgtGMINCyIGNhbmR5LnJlc291cmNlc1xuICAgICAqICDQoNC10LDQu9C40LfRg9C10YLRgdGPINGC0L7Qu9GM0LrQviDQv9GA0Lgg0L7QsdGJ0LXQvCDQsdC40LvQtNC1INGE0L7RgNC8OiBjYW5keSBidWlsZCAqXG4gICAgICogKi9cbiAgICBsZXQgcmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW46IENoYWluYWJsZVZhbHVlUHJvZHVjZXI8c3RyaW5nPiB8IEVtcHR5UHJvZHVjZXIgPSBPYnNlcnZlLmVtcHR5KCk7XG4gICAgaWYgKGZvcm1HbG9ic1swXSA9PT0gXCIqXCIpIHtcbiAgICAgICAgcmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcImV4dGVybmFsQ29udmVydGVyc1wiKSwgXCIqLnhzbHRcIikuZG8oXG4gICAgICAgICAgICB4ID0+XG4gICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkVYVEVSTkFMLUNPTlZFUlRFUlNcIiksXG4gICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3BpZWRFbmdpbmVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBjb25zdCBidWlsZENhY2hlID0gbmV3IEJ1aWxkQ2FjaGUoZmFybURpcmVjdG9yeSwgb3B0aW9ucy5idWlsZENhY2hlTW9kZSk7XG4gICAgY29uc3QgYnVpbGRGb3Jtc0NoYWluID0gT2JzZXJ2ZS5kaXJlY3RvcnkocGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiksIGZvcm1HbG9icykuc3BsaXRUb1BhcmFsbGVsQ2hhaW5zKFxuICAgICAgICB4ID0+IHgsXG4gICAgICAgIHggPT4geCxcbiAgICAgICAgYXN5bmMgZ2Z2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EaXJQYXRoID0gcGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgZ2Z2KTtcblxuICAgICAgICAgICAgaWYgKCEoYXdhaXQgcGF0aEV4aXN0cyhwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybS5qc29uXCIpKSkpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci53YXJuaW5nKFxuICAgICAgICAgICAgICAgICAgICBgRm9ybSAke2dmdn0gZG9lcyBub3QgaGF2ZSBmb3JtLmpzb24gZmlsZS4gVG8gaW5jbHVkZSB0aGlzIGZvcm0gdG8gYnVpbGQgcHJvY2VzcyByZXN0YXJ0IGJ1aWxkYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmUudmFsdWUoe30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9ybVNjaGVtYXNEaXJQYXRoID0gcGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgZ2Z2LCBcInNjaGVtYXNcIik7XG4gICAgICAgICAgICBjb25zdCBybmdTY2hlbWFNYXNrID0gYCoke2dldFJuZ1NjaGVtYUZpbGVuYW1lKGZvcm1TY2hlbWFzRGlyUGF0aCwgZ2Z2KX1gO1xuXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS5maWxlKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtLmpzb25cIikpXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShmb3JtSnNvbkZpbGUgPT5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZvcm1JbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUpzb25GaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGBGT1JNOiR7Z2Z2fWApLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cGdyYWRlRm9ybUpzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzZUxhc3RTdGFibGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2VQcmVyZWxlYXNlVmVyc2lvblxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkubW9kZSA9PT0gRm9ybUJ1aWxkTW9kZS5Ob3JtYWxCdWlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmdlbmVyYXRvclZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VuZXJhdG9yVmVyc2lvbiBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaS5lbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVuZ2luZVZlcnNpb24gaXMgbm90IGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclNvdXJjZTogYXdhaXQgcmVzb2x2ZUdlbmVyYXRvclZlcnNpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvclZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoZ2Z2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiBhd2FpdCByZXNvbHZlRW5naW5lVmVyc2lvbihmaS5lbmdpbmVWZXJzaW9uLCBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGdmdikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yU291cmNlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlVmFsdWVQcm9kdWNlcihuZXcgTnVsbEZvcm1HZW5lcmF0b3IoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3JGYWN0b3J5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5nZW5lcmF0b3JTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmR5TW9kdWxlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2VWZXJzaW9uRnJvbUNhY2hlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgKGZpLCB5KSA9PiAoeyAuLi5maSwgZ2VuZXJhdG9yOiB5IH0pLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yU291cmNlICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0R2VuZXJhdG9yU291cmNlS2V5KGZpLmdlbmVyYXRvclNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiTnVsbEZvcm1HZW5lcmF0b3JcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZW5naW5lU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZVZhbHVlUHJvZHVjZXIoXCJOdWxsRW5naW5lXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuZ2luZUZhY3RvcnkoZmkuZW5naW5lU291cmNlLCBjYW5keU1vZHVsZXNEaXJlY3RvcnksIG9wdGlvbnMudXNlVmVyc2lvbkZyb21DYWNoZSkuZG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29waWVkRW5naW5lcy5oYXMoZ2V0RW5naW5lU291cmNlS2V5KGZpLmVuZ2luZVNvdXJjZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJFTkdJTkVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInB1YmxpY1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZEVuZ2luZXMuYWRkKGdldEVuZ2luZVNvdXJjZUtleShmaS5lbmdpbmVTb3VyY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGZpLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiAoZmkuZW5naW5lU291cmNlICE9IHVuZGVmaW5lZCA/IGdldEVuZ2luZVNvdXJjZUtleShmaS5lbmdpbmVTb3VyY2UpIDogXCJOdWxsRW5naW5lXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi94c2x0VGVtcGxhdGVzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vanNIZWxwZXJzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1hcy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN1Z2FyLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvY2FsYy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlbHBlcnMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YWxpZGF0aW9ucy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxvY2FsaXphdGlvbi8qKi8qXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlcGVuZGVuY2llc0hhc2g6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLm1vZGUgIT09IEZvcm1CdWlsZE1vZGUuTm9ybWFsQnVpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzSGFzaDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgZmkuZ2VuZXJhdG9yLnN1cHBvcnRzRGVwZW5kZW5jaWVzRXh0cmFjdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXNIYXNoID0gYXdhaXQgZmkuZ2VuZXJhdG9yLmdldEFsbERlcGVuZGVuY2llc0hhc2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc0hhc2g6IGRlcGVuZGVuY2llc0hhc2gsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1aWxkQ2FjaGVFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWQgJiYgZmkuZ2VuZXJhdG9yU291cmNlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZUV4aXN0ID0gYXdhaXQgYnVpbGRDYWNoZS5leGlzdHMoZmkuZ2VuZXJhdG9yU291cmNlLCBnZnYsIGZpLmRlcGVuZGVuY2llc0hhc2gpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVFeGlzdDogYnVpbGRDYWNoZUV4aXN0LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmdlbmVyYXRvclNvdXJjZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmJ1aWxkQ2FjaGVFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChgR0VORVJBVEU6JHtnZnZ9YCkubG9nKFwiU2tpcHBlZCBkdWUgYnVpbGQgY2FjaGUgZXhpdHNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBDb2RlUmVmb3JtYXR0aW5nOiBvcHRpb25zLnNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0hhc2g6IGZpLmRlcGVuZGVuY2llc0hhc2ggPz8gXCJVbmRlZmluZWRSZXNvdXJjZXNIYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBcImZvcm1cIiksIFwiKiovKlwiKSlcbiAgICAgICAgICAgICAgICAuZG8oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yU291cmNlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5kZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZCAmJiBmaS5idWlsZENhY2hlRXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoYENPTVBJTEU6JHtnZnZ9YCkubG9nKFwiU2tpcHBlZCBkdWUgYnVpbGQgY2FjaGUgZXhpc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYnVpbGRDYWNoZS5leHRyYWN0KGZpLmdlbmVyYXRvclNvdXJjZSwgZ2Z2LCBmaS5kZXBlbmRlbmNpZXNIYXNoLCByZXNvdXJjZXNEaXJlY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkQ2FjaGVPcHRpb25zID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmRlcGVuZGVuY2llc0hhc2ggIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwc0hhc2g6IGZpLmRlcGVuZGVuY2llc0hhc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yVmVyc2lvbjogZ2V0R2VuZXJhdG9yVmVyc2lvbihmaS5nZW5lcmF0b3JTb3VyY2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IG9wdGlvbnMuYnVpbGRDYWNoZU1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeTogZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb21waWxlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkudGhlbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmRlcGVuZGVuY2llc0hhc2ggPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhpcyB2ZXJzaW9uIG9mIGdlbmVyYXRvciBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBkZXBlbmRlbmNpZXMgZXh0cmFjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlRm9ybU1ldGEoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBnZnYsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5lbmdpbmVTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoaXMgdmVyc2lvbiBvZiBnZW5lcmF0b3IgaXMgbm90IHN1cHBvcnRlZCBkdWUgdG8gZGVwZW5kZW5jaWVzIGV4dHJhY3Rpb24gaXMgbm90IHN1cHBvcnRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLnRoZW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmdlbmVyYXRvclNvdXJjZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZENhY2hlT3B0aW9ucyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHNIYXNoOiBmaS5kZXBlbmRlbmNpZXNIYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclZlcnNpb246IGdldEdlbmVyYXRvclZlcnNpb24oZmkuZ2VuZXJhdG9yU291cmNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBvcHRpb25zLmJ1aWxkQ2FjaGVNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3Rvcnk6IGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5idWlsZENhY2hlRXhpc3RcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLm1vZGUgPT09IEZvcm1CdWlsZE1vZGUuQ29weUxlZ2FjeVByZWJ1aWx0UmVzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcImxlZ2FjeS1wcmVidWlsdFwiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTEVHQUNZLVBSRUJVSUxUXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZVZhbHVlUHJvZHVjZXIoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcInNjaGVtYXNcIiksIHJuZ1NjaGVtYU1hc2spLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlNDSEVNQVNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInNjaGVtYXNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJjb252ZXJ0ZXJzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiQ09OVkVSVEVSU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIm1lcmdlcnNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJNRVJHRVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJtZXJnZXJzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC5yZXBsYWNlKC88eDppbmNsdWRlIGhyZWY9XCJbLi9dKy9nLCAnPHg6aW5jbHVkZSBocmVmPVwiJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwiY29udmVydGVyc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5tb2RpZnlGaWxlc0NvbnRlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkZJWC1YU0xULUlOQ0xVREVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIqKi8qLnhzbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwiLi5cIiwgXCIuLlwiLCBcInhzbHRUZW1wbGF0ZXNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJYU0xULVRFTVBMQVRFU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiLCBcInhzbHRUZW1wbGF0ZXNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJub3JtYWxpemVcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTk9STUFMSVpFXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJub3JtYWxpemVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJwYXRjaFwiKSwgXCIqLnhzbHRcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiUEFUQ0hcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInBhdGNoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibWFwXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk1BUFwiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJtYXBcIikpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwidW5tYXBcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiVU5NQVBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInVubWFwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkT3B0aW9ucy53YXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIubm90aWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYCR7ZmkuZm9ybU5hbWV9OiDRgdCx0L7RgNC60LAg0LfQsNCy0LXRgNGI0LXQvdCwYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRW5naW5lOiAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5lbmdpbmVTb3VyY2UgPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiW05vRW5naW5lXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZpLmVuZ2luZVNvdXJjZS50eXBlID09PSBcIkxvY2FsRW5naW5lU291cmNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwibG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaS5lbmdpbmVTb3VyY2UudmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoYnVpbGRPcHRpb25zLndhdGNoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNsZWFuKSB7XG4gICAgICAgICAgICBhd2FpdCBjbGVhblRhcmdldERpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3RvcnksIGNvbnRleHQubG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTEgPSBhd2FpdCBwaWNrTGlzdHNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMiA9IGF3YWl0IGJ1aWxkRm9ybXNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMyA9IGF3YWl0IHN0YXRpY1Jlc291cmNlc0ZvclByb2R1Y3Rpb25DaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlNCA9IGF3YWl0IHJlc291cmNlc051U3BlY0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmU1ID0gYXdhaXQgcmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBhd2FpdCBjb250ZXh0LndhaXRGb3JFeGl0KCk7XG4gICAgICAgIGlmIChzdG9wT2JzZXJ2ZTMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RvcE9ic2VydmU0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgc3RvcE9ic2VydmU0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0b3BPYnNlcnZlNSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlNSgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMigpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlLm5vdygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2xlYW4pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjbGVhblRhcmdldERpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3RvcnksIGNvbnRleHQubG9nZ2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHBpY2tMaXN0c0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHN0YXRpY1Jlc291cmNlc0ZvclByb2R1Y3Rpb25DaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCByZXNvdXJjZXNOdVNwZWNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCByZXNvdXJjZXNFeHRlcm5hbENvbnZlcnRlcnNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCBidWlsZEZvcm1zQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuQnJpZ2h0KFwiQnVpbGQgc3VjY2Vzc1wiKSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnREYXRlO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUb3RhbCB0aW1lOiAke3ByaW50VGltZSh0b3RhbFRpbWUpfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhblRhcmdldERpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmxvZyhcIkNsZWFuaW5nIHJlc291cmNlIGRpcmVjdG9yeS4gXCIgKyByZXNvdXJjZXNEaXJlY3RvcnkpO1xuICAgIGF3YWl0IGVtcHR5RGlyKHJlc291cmNlc0RpcmVjdG9yeSk7XG4gICAgbG9nZ2VyLmxvZyhcIlJlc291cmNlIGRpcmVjdG9yeSBjbGVhblwiKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFJLGtCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxhQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxhQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxrQkFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsNkJBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFV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
|
|
@@ -33,6 +33,14 @@ async function runDevBuild(context, options, engineDirectory, resourcesDirectory
|
|
|
33
33
|
const staticResourcesChain = _Observe.Observe.files(_path.default.join(__dirname, "..", "..", "StaticFilesForResourcesDir"), "*.js").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("STATICS"), x, _path.default.join(resourcesDirectory, "public", "scripts")));
|
|
34
34
|
const pickListsChain = _Observe.Observe.files(_path.default.join(farmDirectory, "picklists"), "*.json").do(x => _FSTask.FSTask.copyRecursively(context.logger.withPrefix("PICKLISTS"), x, _path.default.join(resourcesDirectory, "picklists")));
|
|
35
35
|
const formGlobs = await _FormGlobsUtils.FormGlobs.validateGlobs(await _FormGlobsUtils.FormGlobs.resolveSpecifiers(options.formGlobs, farmDirectory), farmDirectory);
|
|
36
|
+
|
|
37
|
+
/** Конвертеры описи для форм, которые пока не реализованы на кенди, сама механика описи перенесена в формы в кенди апи, поэтому они должны быть в candy.resources
|
|
38
|
+
* Реализуется только при общем билде форм: candy build *
|
|
39
|
+
* */
|
|
40
|
+
let resourcesExternalConvertersChain = _Observe.Observe.empty();
|
|
41
|
+
if (formGlobs[0] === "*") {
|
|
42
|
+
resourcesExternalConvertersChain = _Observe.Observe.files(_path.default.join(farmDirectory, "externalConverters"), "*.xslt").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("EXTERNAL-CONVERTERS"), x, _path.default.join(resourcesDirectory, "converters")));
|
|
43
|
+
}
|
|
36
44
|
const buildFormsChain = _Observe.Observe.directory(_path.default.join(farmDirectory, "forms"), formGlobs).splitToParallelChains(x => x, x => x, gfv => {
|
|
37
45
|
const formDirPath = _path.default.join(farmDirectory, "forms", gfv);
|
|
38
46
|
const formSchemasDirPath = _path.default.join(farmDirectory, "forms", gfv, "schemas");
|
|
@@ -63,15 +71,17 @@ async function runDevBuild(context, options, engineDirectory, resourcesDirectory
|
|
|
63
71
|
const stopObserve3 = await staticResourcesChain.observe();
|
|
64
72
|
const stopObserve4 = await buildFormsChain.observe();
|
|
65
73
|
const stopObserve5 = await pickListsChain.observe();
|
|
74
|
+
const stopObserve6 = await resourcesExternalConvertersChain.observe();
|
|
66
75
|
await context.waitForExit();
|
|
67
76
|
await stopObserve1();
|
|
68
77
|
await stopObserve2();
|
|
69
78
|
await stopObserve3();
|
|
70
79
|
await stopObserve4();
|
|
71
80
|
await stopObserve5();
|
|
81
|
+
await stopObserve6();
|
|
72
82
|
} else {
|
|
73
83
|
const startDate = Date.now();
|
|
74
|
-
await Promise.all([buildEngineChain.currentValue, buildClientJsChain.currentValue, staticResourcesChain.currentValue, (async () => {
|
|
84
|
+
await Promise.all([buildEngineChain.currentValue, buildClientJsChain.currentValue, staticResourcesChain.currentValue, resourcesExternalConvertersChain.currentValue, (async () => {
|
|
75
85
|
try {
|
|
76
86
|
await pickListsChain.currentValue;
|
|
77
87
|
await buildFormsChain.currentValue;
|
|
@@ -88,4 +98,4 @@ async function runDevBuild(context, options, engineDirectory, resourcesDirectory
|
|
|
88
98
|
console.log(`${_chalk.default.greenBright("Build success")} Total time: ${(0, _TimingUtils.printTime)(totalTime)}`);
|
|
89
99
|
}
|
|
90
100
|
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NoYWxrIiwiX0J1aWxkQ2xpZW50SnNUYXNrIiwiX0J1aWxkTG9jYWxFbmdpbmVUYXNrIiwiX0VuZ2luZVN0cnVjdHVyZVV0aWxzIiwiX0NvbXBpbGVGb3JtIiwiX0dlbmVyYXRlRm9ybSIsIl9Xcml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwiX0ZTVGFzayIsIl9BY3F1aXJlRm9ybUdlbmVyYXRvciIsIl9QdWJsaXNoZWRWZXJzaW9uVXRpbHMiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX1dyaXRlRm9ybU1ldGEiLCJfRm9ybUdsb2JzVXRpbHMiLCJfU3RhdGljTG9nZ2VyIiwiX09ic2VydmUiLCJfVGltaW5nVXRpbHMiLCJfV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiX2dldFJuZ1NjaGVtYUZpbGVuYW1lIiwicnVuRGV2QnVpbGQiLCJjb250ZXh0Iiwib3B0aW9ucyIsImVuZ2luZURpcmVjdG9yeSIsInJlc291cmNlc0RpcmVjdG9yeSIsImZhcm1EaXJlY3RvcnkiLCJjYW5keU1vZHVsZXNEaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwiZGV2QnVpbGRPcHRpb25zIiwiZW5naW5lV2VicGFja0NvbmZpZ1Rhc2siLCJjcmVhdGVFbmdpbmVXZWJwYWNrQ29uZmlnVGFzayIsImJ1aWxkRW5naW5lQ2hhaW4iLCJjaGFpbldpdGgiLCJwIiwiQnVpbGRMb2NhbEVuZ2luZVRhc2siLCJidWlsZERlYnVnT25seSIsImNsaWVudFdlYnBhY2tDb25maWdUYXNrIiwiY3JlYXRlQ2xpZW50V2VicGFja0NvbmZpZ1Rhc2siLCJidWlsZENsaWVudEpzQ2hhaW4iLCJCdWlsZENsaWVudEpzVGFzayIsInN0YXRpY1Jlc291cmNlc0NoYWluIiwiT2JzZXJ2ZSIsImZpbGVzIiwicGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJkbyIsIngiLCJGU1Rhc2siLCJjb3B5UmVjdXJzaXZlbHkiLCJnZXRMb2dnZXIiLCJ3aXRoUHJlZml4IiwicGlja0xpc3RzQ2hhaW4iLCJsb2dnZXIiLCJmb3JtR2xvYnMiLCJGb3JtR2xvYnMiLCJ2YWxpZGF0ZUdsb2JzIiwicmVzb2x2ZVNwZWNpZmllcnMiLCJidWlsZEZvcm1zQ2hhaW4iLCJkaXJlY3RvcnkiLCJzcGxpdFRvUGFyYWxsZWxDaGFpbnMiLCJnZnYiLCJmb3JtRGlyUGF0aCIsImZvcm1TY2hlbWFzRGlyUGF0aCIsInJuZ1NjaGVtYU1hc2siLCJnZXRSbmdTY2hlbWFGaWxlbmFtZSIsImZpbGUiLCJ0cmFuc2Zvcm0iLCJmb3JtSnNvbkZpbGUiLCJyZXNvbHZlRm9ybUluZm8iLCJnZW5lcmF0b3JTb3VyY2UiLCJyZXNvbHZlTG9jYWxHZW5lcmF0b3JTb3VyY2UiLCJlbmdpbmVTb3VyY2UiLCJyZXNvbHZlTG9jYWxFbmdpbmVTb3VyY2UiLCJhdHRhY2giLCJmaSIsImdlbmVyYXRvckZhY3RvcnkiLCJ1bmRlZmluZWQiLCJ5IiwiZ2VuZXJhdG9yIiwiZ2V0R2VuZXJhdG9yU291cmNlS2V5IiwiZm9ybVNvdXJjZXNQYXRoIiwiZGVwZW5kZW5jaWVzSGFzaCIsImdldEFsbERlcGVuZGVuY2llc0hhc2giLCJza2lwR2VuZXJhdGlvbiIsImdlbmVyYXRlRm9ybSIsInNraXBDb2RlUmVmb3JtYXR0aW5nIiwic2tpcEdlbmVyYXRlZENvZGVSZWZvcm1hdHRpbmciLCJyZXNvdXJjZXNIYXNoIiwiY29tcGlsZUZvcm0iLCJmb3JtTmFtZSIsInRoZW1lcyIsIndyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXMiLCJ3cml0ZUF0dGFjaG1lbnRQYXRoRmlsZXMiLCJ3cml0ZUZvcm1NZXRhIiwid2F0Y2giLCJzdG9wT2JzZXJ2ZTEiLCJvYnNlcnZlIiwic3RvcE9ic2VydmUyIiwic3RvcE9ic2VydmUzIiwic3RvcE9ic2VydmU0Iiwic3RvcE9ic2VydmU1Iiwid2FpdEZvckV4aXQiLCJzdGFydERhdGUiLCJEYXRlIiwibm93IiwiUHJvbWlzZSIsImFsbCIsImN1cnJlbnRWYWx1ZSIsImUiLCJjb250aW51ZU9uRXJyb3IiLCJlcnJvciIsInRvdGFsVGltZSIsImNvbnNvbGUiLCJsb2ciLCJjaGFsayIsImdyZWVuQnJpZ2h0IiwicHJpbnRUaW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0RldkJ1aWxkL1J1bkRldkJ1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcblxuaW1wb3J0IHsgQnVpbGRDbGllbnRKc1Rhc2sgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9DbGllbnRKUy9CdWlsZENsaWVudEpzVGFza1wiO1xuaW1wb3J0IHsgQnVpbGRMb2NhbEVuZ2luZVRhc2sgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9FbmdpbmUvQnVpbGRMb2NhbEVuZ2luZVRhc2tcIjtcbmltcG9ydCB7IGNyZWF0ZUNsaWVudFdlYnBhY2tDb25maWdUYXNrLCBjcmVhdGVFbmdpbmVXZWJwYWNrQ29uZmlnVGFzayB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0VuZ2luZVN0cnVjdHVyZVV0aWxzXCI7XG5pbXBvcnQgeyBjb21waWxlRm9ybSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vQ29tcGlsZUZvcm1cIjtcbmltcG9ydCB7IGdlbmVyYXRlRm9ybSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzXCI7XG5pbXBvcnQgeyBGU1Rhc2sgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9GU1Rhc2tcIjtcbmltcG9ydCB7IGdlbmVyYXRvckZhY3RvcnksIGdldEdlbmVyYXRvclNvdXJjZUtleSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0dlbmVyYXRvci9BY3F1aXJlRm9ybUdlbmVyYXRvclwiO1xuaW1wb3J0IHsgcmVzb2x2ZUxvY2FsRW5naW5lU291cmNlLCByZXNvbHZlTG9jYWxHZW5lcmF0b3JTb3VyY2UgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9QdWJsaXNoZWRWZXJzaW9uVXRpbHNcIjtcbmltcG9ydCB7IHJlc29sdmVGb3JtSW5mbyB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL1Jlc29sdmVGb3JtSW5mb1wiO1xuaW1wb3J0IHsgd3JpdGVGb3JtTWV0YSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL1dyaXRlRm9ybU1ldGFcIjtcbmltcG9ydCB7IENvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Db25zb2xlQXBwbGljYXRpb24vQ29uc29sZUFwcGxpY2F0aW9uQ29udGV4dFwiO1xuaW1wb3J0IHsgRm9ybUdsb2JzIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvRm9ybUdsb2JzVXRpbHNcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL0xvZ2dpbmcvU3RhdGljTG9nZ2VyXCI7XG5pbXBvcnQgeyBPYnNlcnZlIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL09ic2VydmVcIjtcbmltcG9ydCB7IHByaW50VGltZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1RpbWluZ1V0aWxzXCI7XG5pbXBvcnQgeyB3cml0ZUF0dGFjaG1lbnRQYXRoRmlsZXMgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL1dyaXRlQXR0YWNobWVudFBhdGhGaWxlc1wiO1xuaW1wb3J0IHsgZ2V0Um5nU2NoZW1hRmlsZW5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL2dldFJuZ1NjaGVtYUZpbGVuYW1lXCI7XG5cbmltcG9ydCB7IERldmVsb3BtZW50QnVpbGRPcHRpb25zIH0gZnJvbSBcIi4vRGV2QnVpbGRPcHRpb25zXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5EZXZCdWlsZChcbiAgICBjb250ZXh0OiBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0LFxuICAgIG9wdGlvbnM6IERldmVsb3BtZW50QnVpbGRPcHRpb25zLFxuICAgIGVuZ2luZURpcmVjdG9yeTogc3RyaW5nLFxuICAgIHJlc291cmNlc0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRldkJ1aWxkT3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBlbmdpbmVXZWJwYWNrQ29uZmlnVGFzayA9IGF3YWl0IGNyZWF0ZUVuZ2luZVdlYnBhY2tDb25maWdUYXNrKGVuZ2luZURpcmVjdG9yeSk7XG4gICAgY29uc3QgYnVpbGRFbmdpbmVDaGFpbiA9IGVuZ2luZVdlYnBhY2tDb25maWdUYXNrLmNoYWluV2l0aChcbiAgICAgICAgcCA9PiBuZXcgQnVpbGRMb2NhbEVuZ2luZVRhc2socCwgcmVzb3VyY2VzRGlyZWN0b3J5LCBvcHRpb25zLmJ1aWxkRGVidWdPbmx5KVxuICAgICk7XG5cbiAgICBjb25zdCBjbGllbnRXZWJwYWNrQ29uZmlnVGFzayA9IGF3YWl0IGNyZWF0ZUNsaWVudFdlYnBhY2tDb25maWdUYXNrKGVuZ2luZURpcmVjdG9yeSk7XG4gICAgY29uc3QgYnVpbGRDbGllbnRKc0NoYWluID0gY2xpZW50V2VicGFja0NvbmZpZ1Rhc2suY2hhaW5XaXRoKHAgPT4gbmV3IEJ1aWxkQ2xpZW50SnNUYXNrKHAsIHJlc291cmNlc0RpcmVjdG9yeSkpO1xuXG4gICAgY29uc3Qgc3RhdGljUmVzb3VyY2VzQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCJTdGF0aWNGaWxlc0ZvclJlc291cmNlc0RpclwiKSxcbiAgICAgICAgXCIqLmpzXCJcbiAgICApLmRvKHggPT5cbiAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiU1RBVElDU1wiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwdWJsaWNcIiwgXCJzY3JpcHRzXCIpKVxuICAgICk7XG5cbiAgICBjb25zdCBwaWNrTGlzdHNDaGFpbiA9IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwicGlja2xpc3RzXCIpLCBcIiouanNvblwiKS5kbyh4ID0+XG4gICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChcIlBJQ0tMSVNUU1wiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwaWNrbGlzdHNcIikpXG4gICAgKTtcblxuICAgIGNvbnN0IGZvcm1HbG9icyA9IGF3YWl0IEZvcm1HbG9icy52YWxpZGF0ZUdsb2JzKFxuICAgICAgICBhd2FpdCBGb3JtR2xvYnMucmVzb2x2ZVNwZWNpZmllcnMob3B0aW9ucy5mb3JtR2xvYnMsIGZhcm1EaXJlY3RvcnkpLFxuICAgICAgICBmYXJtRGlyZWN0b3J5XG4gICAgKTtcbiAgICBjb25zdCBidWlsZEZvcm1zQ2hhaW4gPSBPYnNlcnZlLmRpcmVjdG9yeShwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiKSwgZm9ybUdsb2JzKS5zcGxpdFRvUGFyYWxsZWxDaGFpbnMoXG4gICAgICAgIHggPT4geCxcbiAgICAgICAgeCA9PiB4LFxuICAgICAgICBnZnYgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybURpclBhdGggPSBwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiLCBnZnYpO1xuICAgICAgICAgICAgY29uc3QgZm9ybVNjaGVtYXNEaXJQYXRoID0gcGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgZ2Z2LCBcInNjaGVtYXNcIik7XG4gICAgICAgICAgICBjb25zdCBybmdTY2hlbWFNYXNrID0gYCoke2dldFJuZ1NjaGVtYUZpbGVuYW1lKGZvcm1TY2hlbWFzRGlyUGF0aCwgZ2Z2KX1gO1xuXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS5maWxlKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtLmpzb25cIikpXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShmb3JtSnNvbkZpbGUgPT4gcmVzb2x2ZUZvcm1JbmZvKGZvcm1Kc29uRmlsZSwgZm9ybURpclBhdGgsIGVuZ2luZURpcmVjdG9yeSkpXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShhc3luYyB4ID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclNvdXJjZTogcmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlKGVuZ2luZURpcmVjdG9yeSksXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZTogcmVzb2x2ZUxvY2FsRW5naW5lU291cmNlKGVuZ2luZURpcmVjdG9yeSksXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgLmF0dGFjaChcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gZ2VuZXJhdG9yRmFjdG9yeShmaS5nZW5lcmF0b3JTb3VyY2UsIGNhbmR5TW9kdWxlc0RpcmVjdG9yeSwgZmFsc2UsIHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIChmaSwgeSkgPT4gKHsgLi4uZmksIGdlbmVyYXRvcjogeSB9KSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gZ2V0R2VuZXJhdG9yU291cmNlS2V5KGZpLmdlbmVyYXRvclNvdXJjZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi9jb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNjaGVtYXMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdWdhci8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXV0b2NhbGMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWxwZXJzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsaWRhdGlvbnMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsb2NhbGl6YXRpb24vKiovKlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShhc3luYyBmaSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzSGFzaDogYXdhaXQgZmkuZ2VuZXJhdG9yLmdldEFsbERlcGVuZGVuY2llc0hhc2goXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGlyUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2tpcEdlbmVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBDb2RlUmVmb3JtYXR0aW5nOiBvcHRpb25zLnNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0hhc2g6IGZpLmRlcGVuZGVuY2llc0hhc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBcImZvcm1cIiksIFwiKiovKlwiKSlcbiAgICAgICAgICAgICAgICAuZG8oZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLnRoZW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5idWlsZERlYnVnT25seVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5kbyhmaSA9PiB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzKGZpLmZvcm1OYW1lLCBmYXJtRGlyZWN0b3J5LCByZXNvdXJjZXNEaXJlY3RvcnkpKVxuICAgICAgICAgICAgICAgIC5kbyhmaSA9PiB3cml0ZUF0dGFjaG1lbnRQYXRoRmlsZXMoZmkuZm9ybU5hbWUsIGZhcm1EaXJlY3RvcnksIHJlc291cmNlc0RpcmVjdG9yeSkpXG4gICAgICAgICAgICAgICAgLmRvKGZpID0+IHdyaXRlRm9ybU1ldGEocmVzb3VyY2VzRGlyZWN0b3J5LCBnZnYsIGZpLmVuZ2luZVNvdXJjZSwgZmkuZGVwZW5kZW5jaWVzSGFzaCwgZmkudGhlbWVzKSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJzY2hlbWFzXCIpLCBybmdTY2hlbWFNYXNrKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJTQ0hFTUFTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJzY2hlbWFzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwiY29udmVydGVyc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkNPTlZFUlRFUlNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJtZXJnZXJzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTUVSR0VSU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibWVyZ2Vyc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIm5vcm1hbGl6ZVwiKSwgXCIqLnhtbFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJOT1JNQUxJWkVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcIm5vcm1hbGl6ZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcInBhdGNoXCIpLCBcIioueHNsdFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJQQVRDSFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicGF0Y2hcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJtYXBcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTUFQXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcIm1hcFwiKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJ1bm1hcFwiKSwgXCIqLnhtbFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJVTk1BUFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwidW5tYXBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGRldkJ1aWxkT3B0aW9ucy53YXRjaCkge1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTEgPSBhd2FpdCBidWlsZEVuZ2luZUNoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmUyID0gYXdhaXQgYnVpbGRDbGllbnRKc0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmUzID0gYXdhaXQgc3RhdGljUmVzb3VyY2VzQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTQgPSBhd2FpdCBidWlsZEZvcm1zQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTUgPSBhd2FpdCBwaWNrTGlzdHNDaGFpbi5vYnNlcnZlKCk7XG5cbiAgICAgICAgYXdhaXQgY29udGV4dC53YWl0Rm9yRXhpdCgpO1xuXG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMSgpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTIoKTtcbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmUzKCk7XG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlNCgpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlLm5vdygpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBidWlsZEVuZ2luZUNoYWluLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGJ1aWxkQ2xpZW50SnNDaGFpbi5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICBzdGF0aWNSZXNvdXJjZXNDaGFpbi5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHBpY2tMaXN0c0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYnVpbGRGb3Jtc0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbnRpbnVlT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IHRvdGFsVGltZSA9IERhdGUubm93KCkgLSBzdGFydERhdGU7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLmdyZWVuQnJpZ2h0KFwiQnVpbGQgc3VjY2Vzc1wiKX0gVG90YWwgdGltZTogJHtwcmludFRpbWUodG90YWxUaW1lKX1gKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxrQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcscUJBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLHFCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxhQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyw2QkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsT0FBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMscUJBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLHNCQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxnQkFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksY0FBQSxHQUFBWixPQUFBO0FBRUEsSUFBQWEsZUFBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMsYUFBQSxHQUFBZCxPQUFBO0FBQ0EsSUFBQWUsUUFBQSxHQUFBZixPQUFBO0FBQ0EsSUFBQWdCLFlBQUEsR0FBQWhCLE9BQUE7QUFDQSxJQUFBaUIseUJBQUEsR0FBQWpCLE9BQUE7QUFDQSxJQUFBa0IscUJBQUEsR0FBQWxCLE9BQUE7QUFJTyxlQUFlbUIsV0FBV0EsQ0FDN0JDLE9BQWtDLEVBQ2xDQyxPQUFnQyxFQUNoQ0MsZUFBdUIsRUFDdkJDLGtCQUEwQixFQUMxQkMsYUFBcUIsRUFDckJDLHFCQUE2QixFQUM3QkMsbUJBQTJCLEVBQ2Q7RUFDYixNQUFNQyxl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
|
|
101
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NoYWxrIiwiX0J1aWxkQ2xpZW50SnNUYXNrIiwiX0J1aWxkTG9jYWxFbmdpbmVUYXNrIiwiX0VuZ2luZVN0cnVjdHVyZVV0aWxzIiwiX0NvbXBpbGVGb3JtIiwiX0dlbmVyYXRlRm9ybSIsIl9Xcml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwiX0ZTVGFzayIsIl9BY3F1aXJlRm9ybUdlbmVyYXRvciIsIl9QdWJsaXNoZWRWZXJzaW9uVXRpbHMiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX1dyaXRlRm9ybU1ldGEiLCJfRm9ybUdsb2JzVXRpbHMiLCJfU3RhdGljTG9nZ2VyIiwiX09ic2VydmUiLCJfVGltaW5nVXRpbHMiLCJfV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiX2dldFJuZ1NjaGVtYUZpbGVuYW1lIiwicnVuRGV2QnVpbGQiLCJjb250ZXh0Iiwib3B0aW9ucyIsImVuZ2luZURpcmVjdG9yeSIsInJlc291cmNlc0RpcmVjdG9yeSIsImZhcm1EaXJlY3RvcnkiLCJjYW5keU1vZHVsZXNEaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwiZGV2QnVpbGRPcHRpb25zIiwiZW5naW5lV2VicGFja0NvbmZpZ1Rhc2siLCJjcmVhdGVFbmdpbmVXZWJwYWNrQ29uZmlnVGFzayIsImJ1aWxkRW5naW5lQ2hhaW4iLCJjaGFpbldpdGgiLCJwIiwiQnVpbGRMb2NhbEVuZ2luZVRhc2siLCJidWlsZERlYnVnT25seSIsImNsaWVudFdlYnBhY2tDb25maWdUYXNrIiwiY3JlYXRlQ2xpZW50V2VicGFja0NvbmZpZ1Rhc2siLCJidWlsZENsaWVudEpzQ2hhaW4iLCJCdWlsZENsaWVudEpzVGFzayIsInN0YXRpY1Jlc291cmNlc0NoYWluIiwiT2JzZXJ2ZSIsImZpbGVzIiwicGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJkbyIsIngiLCJGU1Rhc2siLCJjb3B5UmVjdXJzaXZlbHkiLCJnZXRMb2dnZXIiLCJ3aXRoUHJlZml4IiwicGlja0xpc3RzQ2hhaW4iLCJsb2dnZXIiLCJmb3JtR2xvYnMiLCJGb3JtR2xvYnMiLCJ2YWxpZGF0ZUdsb2JzIiwicmVzb2x2ZVNwZWNpZmllcnMiLCJyZXNvdXJjZXNFeHRlcm5hbENvbnZlcnRlcnNDaGFpbiIsImVtcHR5IiwiYnVpbGRGb3Jtc0NoYWluIiwiZGlyZWN0b3J5Iiwic3BsaXRUb1BhcmFsbGVsQ2hhaW5zIiwiZ2Z2IiwiZm9ybURpclBhdGgiLCJmb3JtU2NoZW1hc0RpclBhdGgiLCJybmdTY2hlbWFNYXNrIiwiZ2V0Um5nU2NoZW1hRmlsZW5hbWUiLCJmaWxlIiwidHJhbnNmb3JtIiwiZm9ybUpzb25GaWxlIiwicmVzb2x2ZUZvcm1JbmZvIiwiZ2VuZXJhdG9yU291cmNlIiwicmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIiwiZW5naW5lU291cmNlIiwicmVzb2x2ZUxvY2FsRW5naW5lU291cmNlIiwiYXR0YWNoIiwiZmkiLCJnZW5lcmF0b3JGYWN0b3J5IiwidW5kZWZpbmVkIiwieSIsImdlbmVyYXRvciIsImdldEdlbmVyYXRvclNvdXJjZUtleSIsImZvcm1Tb3VyY2VzUGF0aCIsImRlcGVuZGVuY2llc0hhc2giLCJnZXRBbGxEZXBlbmRlbmNpZXNIYXNoIiwic2tpcEdlbmVyYXRpb24iLCJnZW5lcmF0ZUZvcm0iLCJza2lwQ29kZVJlZm9ybWF0dGluZyIsInNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nIiwicmVzb3VyY2VzSGFzaCIsImNvbXBpbGVGb3JtIiwiZm9ybU5hbWUiLCJ0aGVtZXMiLCJ3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwid3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwid3JpdGVGb3JtTWV0YSIsIndhdGNoIiwic3RvcE9ic2VydmUxIiwib2JzZXJ2ZSIsInN0b3BPYnNlcnZlMiIsInN0b3BPYnNlcnZlMyIsInN0b3BPYnNlcnZlNCIsInN0b3BPYnNlcnZlNSIsInN0b3BPYnNlcnZlNiIsIndhaXRGb3JFeGl0Iiwic3RhcnREYXRlIiwiRGF0ZSIsIm5vdyIsIlByb21pc2UiLCJhbGwiLCJjdXJyZW50VmFsdWUiLCJlIiwiY29udGludWVPbkVycm9yIiwiZXJyb3IiLCJ0b3RhbFRpbWUiLCJjb25zb2xlIiwibG9nIiwiY2hhbGsiLCJncmVlbkJyaWdodCIsInByaW50VGltZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9EZXZCdWlsZC9SdW5EZXZCdWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IEJ1aWxkQ2xpZW50SnNUYXNrIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvQ2xpZW50SlMvQnVpbGRDbGllbnRKc1Rhc2tcIjtcbmltcG9ydCB7IEJ1aWxkTG9jYWxFbmdpbmVUYXNrIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRW5naW5lL0J1aWxkTG9jYWxFbmdpbmVUYXNrXCI7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRXZWJwYWNrQ29uZmlnVGFzaywgY3JlYXRlRW5naW5lV2VicGFja0NvbmZpZ1Rhc2sgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9FbmdpbmVTdHJ1Y3R1cmVVdGlsc1wiO1xuaW1wb3J0IHsgY29tcGlsZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0NvbXBpbGVGb3JtXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0dlbmVyYXRlRm9ybVwiO1xuaW1wb3J0IHsgd3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vV3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlc1wiO1xuaW1wb3J0IHsgRlNUYXNrIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRlNUYXNrXCI7XG5pbXBvcnQgeyBnZW5lcmF0b3JGYWN0b3J5LCBnZXRHZW5lcmF0b3JTb3VyY2VLZXkgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZSwgcmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUHVibGlzaGVkVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyByZXNvbHZlRm9ybUluZm8gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9SZXNvbHZlRm9ybUluZm9cIjtcbmltcG9ydCB7IHdyaXRlRm9ybU1ldGEgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Xcml0ZUZvcm1NZXRhXCI7XG5pbXBvcnQgeyBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvQ29uc29sZUFwcGxpY2F0aW9uL0NvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1HbG9icyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0Zvcm1HbG9ic1V0aWxzXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9PYnNlcnZlXCI7XG5pbXBvcnQgeyBwcmludFRpbWUgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UaW1pbmdVdGlsc1wiO1xuaW1wb3J0IHsgd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUF0dGFjaG1lbnRQYXRoRmlsZXNcIjtcbmltcG9ydCB7IENoYWluYWJsZVZhbHVlUHJvZHVjZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvQ2hhaW5hYmxlVmFsdWVQcm9kdWNlclwiO1xuaW1wb3J0IHsgRW1wdHlQcm9kdWNlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9FbXB0eVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBnZXRSbmdTY2hlbWFGaWxlbmFtZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vZ2V0Um5nU2NoZW1hRmlsZW5hbWVcIjtcblxuaW1wb3J0IHsgRGV2ZWxvcG1lbnRCdWlsZE9wdGlvbnMgfSBmcm9tIFwiLi9EZXZCdWlsZE9wdGlvbnNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkRldkJ1aWxkKFxuICAgIGNvbnRleHQ6IENvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHQsXG4gICAgb3B0aW9uczogRGV2ZWxvcG1lbnRCdWlsZE9wdGlvbnMsXG4gICAgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgcmVzb3VyY2VzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgIGNhbmR5TW9kdWxlc0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGV2QnVpbGRPcHRpb25zID0gb3B0aW9ucztcblxuICAgIGNvbnN0IGVuZ2luZVdlYnBhY2tDb25maWdUYXNrID0gYXdhaXQgY3JlYXRlRW5naW5lV2VicGFja0NvbmZpZ1Rhc2soZW5naW5lRGlyZWN0b3J5KTtcbiAgICBjb25zdCBidWlsZEVuZ2luZUNoYWluID0gZW5naW5lV2VicGFja0NvbmZpZ1Rhc2suY2hhaW5XaXRoKFxuICAgICAgICBwID0+IG5ldyBCdWlsZExvY2FsRW5naW5lVGFzayhwLCByZXNvdXJjZXNEaXJlY3RvcnksIG9wdGlvbnMuYnVpbGREZWJ1Z09ubHkpXG4gICAgKTtcblxuICAgIGNvbnN0IGNsaWVudFdlYnBhY2tDb25maWdUYXNrID0gYXdhaXQgY3JlYXRlQ2xpZW50V2VicGFja0NvbmZpZ1Rhc2soZW5naW5lRGlyZWN0b3J5KTtcbiAgICBjb25zdCBidWlsZENsaWVudEpzQ2hhaW4gPSBjbGllbnRXZWJwYWNrQ29uZmlnVGFzay5jaGFpbldpdGgocCA9PiBuZXcgQnVpbGRDbGllbnRKc1Rhc2socCwgcmVzb3VyY2VzRGlyZWN0b3J5KSk7XG5cbiAgICBjb25zdCBzdGF0aWNSZXNvdXJjZXNDaGFpbiA9IE9ic2VydmUuZmlsZXMoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIlN0YXRpY0ZpbGVzRm9yUmVzb3VyY2VzRGlyXCIpLFxuICAgICAgICBcIiouanNcIlxuICAgICkuZG8oeCA9PlxuICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJTVEFUSUNTXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInB1YmxpY1wiLCBcInNjcmlwdHNcIikpXG4gICAgKTtcblxuICAgIGNvbnN0IHBpY2tMaXN0c0NoYWluID0gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJwaWNrbGlzdHNcIiksIFwiKi5qc29uXCIpLmRvKHggPT5cbiAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KFwiUElDS0xJU1RTXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInBpY2tsaXN0c1wiKSlcbiAgICApO1xuXG4gICAgY29uc3QgZm9ybUdsb2JzID0gYXdhaXQgRm9ybUdsb2JzLnZhbGlkYXRlR2xvYnMoXG4gICAgICAgIGF3YWl0IEZvcm1HbG9icy5yZXNvbHZlU3BlY2lmaWVycyhvcHRpb25zLmZvcm1HbG9icywgZmFybURpcmVjdG9yeSksXG4gICAgICAgIGZhcm1EaXJlY3RvcnlcbiAgICApO1xuXG4gICAgLyoqINCa0L7QvdCy0LXRgNGC0LXRgNGLINC+0L/QuNGB0Lgg0LTQu9GPINGE0L7RgNC8LCDQutC+0YLQvtGA0YvQtSDQv9C+0LrQsCDQvdC1INGA0LXQsNC70LjQt9C+0LLQsNC90Ysg0L3QsCDQutC10L3QtNC4LCDRgdCw0LzQsCDQvNC10YXQsNC90LjQutCwINC+0L/QuNGB0Lgg0L/QtdGA0LXQvdC10YHQtdC90LAg0LIg0YTQvtGA0LzRiyDQsiDQutC10L3QtNC4INCw0L/QuCwg0L/QvtGN0YLQvtC80YMg0L7QvdC4INC00L7Qu9C20L3RiyDQsdGL0YLRjCDQsiBjYW5keS5yZXNvdXJjZXNcbiAgICAgKiAg0KDQtdCw0LvQuNC30YPQtdGC0YHRjyDRgtC+0LvRjNC60L4g0L/RgNC4INC+0LHRidC10Lwg0LHQuNC70LTQtSDRhNC+0YDQvDogY2FuZHkgYnVpbGQgKlxuICAgICAqICovXG4gICAgbGV0IHJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluOiBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPHN0cmluZz4gfCBFbXB0eVByb2R1Y2VyID0gT2JzZXJ2ZS5lbXB0eSgpO1xuICAgIGlmIChmb3JtR2xvYnNbMF0gPT09IFwiKlwiKSB7XG4gICAgICAgIHJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluID0gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJleHRlcm5hbENvbnZlcnRlcnNcIiksIFwiKi54c2x0XCIpLmRvKFxuICAgICAgICAgICAgeCA9PlxuICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJFWFRFUk5BTC1DT05WRVJURVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRGb3Jtc0NoYWluID0gT2JzZXJ2ZS5kaXJlY3RvcnkocGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiksIGZvcm1HbG9icykuc3BsaXRUb1BhcmFsbGVsQ2hhaW5zKFxuICAgICAgICB4ID0+IHgsXG4gICAgICAgIHggPT4geCxcbiAgICAgICAgZ2Z2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EaXJQYXRoID0gcGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgZ2Z2KTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1TY2hlbWFzRGlyUGF0aCA9IHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdiwgXCJzY2hlbWFzXCIpO1xuICAgICAgICAgICAgY29uc3Qgcm5nU2NoZW1hTWFzayA9IGAqJHtnZXRSbmdTY2hlbWFGaWxlbmFtZShmb3JtU2NoZW1hc0RpclBhdGgsIGdmdil9YDtcblxuICAgICAgICAgICAgcmV0dXJuIE9ic2VydmUuZmlsZShwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybS5qc29uXCIpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oZm9ybUpzb25GaWxlID0+IHJlc29sdmVGb3JtSW5mbyhmb3JtSnNvbkZpbGUsIGZvcm1EaXJQYXRoLCBlbmdpbmVEaXJlY3RvcnkpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgeCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IHJlc29sdmVMb2NhbEdlbmVyYXRvclNvdXJjZShlbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2U6IHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZShlbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdlbmVyYXRvckZhY3RvcnkoZmkuZ2VuZXJhdG9yU291cmNlLCBjYW5keU1vZHVsZXNEaXJlY3RvcnksIGZhbHNlLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyAoZmksIHkpID0+ICh7IC4uLmZpLCBnZW5lcmF0b3I6IHkgfSksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdldEdlbmVyYXRvclNvdXJjZUtleShmaS5nZW5lcmF0b3JTb3VyY2UpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VnYXIvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF1dG9jYWxjLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25zLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG9jYWxpemF0aW9uLyoqLypcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgZmkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc0hhc2g6IGF3YWl0IGZpLmdlbmVyYXRvci5nZXRBbGxEZXBlbmRlbmNpZXNIYXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNraXBHZW5lcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogb3B0aW9ucy5za2lwR2VuZXJhdGVkQ29kZVJlZm9ybWF0dGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNIYXNoOiBmaS5kZXBlbmRlbmNpZXNIYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtXCIpLCBcIioqLypcIikpXG4gICAgICAgICAgICAgICAgLmRvKGZpID0+XG4gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS50aGVtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYnVpbGREZWJ1Z09ubHlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZG8oZmkgPT4gd3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyhmaS5mb3JtTmFtZSwgZmFybURpcmVjdG9yeSwgcmVzb3VyY2VzRGlyZWN0b3J5KSlcbiAgICAgICAgICAgICAgICAuZG8oZmkgPT4gd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzKGZpLmZvcm1OYW1lLCBmYXJtRGlyZWN0b3J5LCByZXNvdXJjZXNEaXJlY3RvcnkpKVxuICAgICAgICAgICAgICAgIC5kbyhmaSA9PiB3cml0ZUZvcm1NZXRhKHJlc291cmNlc0RpcmVjdG9yeSwgZ2Z2LCBmaS5lbmdpbmVTb3VyY2UsIGZpLmRlcGVuZGVuY2llc0hhc2gsIGZpLnRoZW1lcykpXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwic2NoZW1hc1wiKSwgcm5nU2NoZW1hTWFzaykuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiU0NIRU1BU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwic2NoZW1hc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcImNvbnZlcnRlcnNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJDT05WRVJURVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJjb252ZXJ0ZXJzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibWVyZ2Vyc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk1FUkdFUlNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcIm1lcmdlcnNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJub3JtYWxpemVcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTk9STUFMSVpFXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJub3JtYWxpemVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJwYXRjaFwiKSwgXCIqLnhzbHRcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiUEFUQ0hcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInBhdGNoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibWFwXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk1BUFwiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJtYXBcIikpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwidW5tYXBcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiVU5NQVBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInVubWFwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGlmIChkZXZCdWlsZE9wdGlvbnMud2F0Y2gpIHtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmUxID0gYXdhaXQgYnVpbGRFbmdpbmVDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMiA9IGF3YWl0IGJ1aWxkQ2xpZW50SnNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMyA9IGF3YWl0IHN0YXRpY1Jlc291cmNlc0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmU0ID0gYXdhaXQgYnVpbGRGb3Jtc0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmU1ID0gYXdhaXQgcGlja0xpc3RzQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTYgPSBhd2FpdCByZXNvdXJjZXNFeHRlcm5hbENvbnZlcnRlcnNDaGFpbi5vYnNlcnZlKCk7XG5cbiAgICAgICAgYXdhaXQgY29udGV4dC53YWl0Rm9yRXhpdCgpO1xuXG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMSgpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTIoKTtcbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmUzKCk7XG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlNCgpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTUoKTtcbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmU2KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gRGF0ZS5ub3coKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgYnVpbGRFbmdpbmVDaGFpbi5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICBidWlsZENsaWVudEpzQ2hhaW4uY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgc3RhdGljUmVzb3VyY2VzQ2hhaW4uY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgcmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW4uY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwaWNrTGlzdHNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJ1aWxkRm9ybXNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb250aW51ZU9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCksXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCB0b3RhbFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnREYXRlO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5ncmVlbkJyaWdodChcIkJ1aWxkIHN1Y2Nlc3NcIil9IFRvdGFsIHRpbWU6ICR7cHJpbnRUaW1lKHRvdGFsVGltZSl9YCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsa0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLHFCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxxQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sYUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sNkJBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLE9BQUEsR0FB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
|