@magic-xpa/engine 4.801.0-dev481.241 → 4.801.0-dev481.245
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/bundles/magic-xpa-engine.umd.js +49 -47
- package/bundles/magic-xpa-engine.umd.js.map +1 -1
- package/bundles/magic-xpa-engine.umd.min.js +2 -2
- package/bundles/magic-xpa-engine.umd.min.js.map +1 -1
- package/esm2015/index.js +3 -1
- package/esm2015/src/AccessHelper.js +1 -1
- package/esm2015/src/CommandsProcessorBase.js +2 -2
- package/esm2015/src/CurrentClientVersion.js +2 -2
- package/esm2015/src/commands/ClientToServer/BrowserEscEventCommand.js +2 -3
- package/esm2015/src/data/DataView.js +2 -3
- package/esm2015/src/data/Field.js +2 -3
- package/esm2015/src/data/Record.js +2 -3
- package/esm2015/src/env/EnvVariablesTable.js +4 -65
- package/esm2015/src/env/LanguageData.js +2 -3
- package/esm2015/src/env/MirrorString.js +66 -0
- package/esm2015/src/event/EventHandler.js +2 -3
- package/esm2015/src/event/EventHandlerPosition.js +2 -2
- package/esm2015/src/event/EventsManager.js +2 -3
- package/esm2015/src/exp/ExpressionEvaluator.js +2 -3
- package/esm2015/src/exp/GlobalParamsTable.js +3 -2
- package/esm2015/src/gui/MgForm.js +2 -3
- package/esm2015/src/http/client/HttpClientBase.js +2 -3
- package/esm2015/src/remote/RemoteCommandsProcessor.js +2 -3
- package/esm2015/src/remote/ServerError.js +2 -3
- package/esm2015/src/rt/DataviewHeadersSaxHandler.js +2 -3
- package/esm2015/src/tasks/Task.js +2 -3
- package/esm2015/src/util/IMirrorXML.js +1 -1
- package/esm2015/src/util/ParamParseResult.js +8 -0
- package/esm2015/src/util/PrmMap.js +2 -8
- package/fesm2015/magic-xpa-engine.js +6 -5
- package/fesm2015/magic-xpa-engine.js.map +1 -1
- package/index.d.ts +2 -0
- package/package.json +4 -4
- package/src/AccessHelper.d.ts +1 -1
- package/src/env/EnvVariablesTable.d.ts +2 -15
- package/src/env/MirrorString.d.ts +15 -0
- package/src/exp/GlobalParamsTable.d.ts +2 -1
- package/src/util/IMirrorXML.d.ts +1 -1
- package/src/util/ParamParseResult.d.ts +6 -0
- package/src/util/PrmMap.d.ts +0 -6
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { XmlParser } from "@magic-xpa/utils";
|
|
3
2
|
import { CommandsProcessorBase_SendingInstruction } from "../CommandsProcessorBase";
|
|
4
|
-
import { MirrorPrmMap
|
|
5
|
-
import {
|
|
3
|
+
import { MirrorPrmMap } from "../util/PrmMap";
|
|
4
|
+
import { NNumber, NString, StringBuilder } from "@magic-xpa/mscorelib";
|
|
6
5
|
import { DisplayConvertor } from "@magic-xpa/gui";
|
|
7
6
|
import { ConstInterface } from "../ConstInterface";
|
|
8
7
|
import { CommandFactory } from "../commands/ClientToServer/CommandFactory";
|
|
@@ -10,67 +9,7 @@ import { RemoteCommandsProcessor } from "../remote/RemoteCommandsProcessor";
|
|
|
10
9
|
import { Environment } from "./Environment";
|
|
11
10
|
import { LastFocusedManager } from "../rt/LastFocusedManager";
|
|
12
11
|
import { AccessHelper } from "../AccessHelper";
|
|
13
|
-
|
|
14
|
-
constructor(s) {
|
|
15
|
-
this._reserved = false;
|
|
16
|
-
this._value = null;
|
|
17
|
-
if (arguments.length === 0) {
|
|
18
|
-
this.constructor_0();
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
this.constructor_1(s);
|
|
22
|
-
}
|
|
23
|
-
constructor_0() {
|
|
24
|
-
this._reserved = false;
|
|
25
|
-
}
|
|
26
|
-
constructor_1(s) {
|
|
27
|
-
this._value = s;
|
|
28
|
-
this._reserved = false;
|
|
29
|
-
}
|
|
30
|
-
mirrorToXML() {
|
|
31
|
-
return ConstInterface.MG_ATTR_ENV_VALUE + "=\"" + XmlParser.escape(this._value) + "\" " +
|
|
32
|
-
ConstInterface.MG_ATTR_ENV_WRITEINI + "=F";
|
|
33
|
-
}
|
|
34
|
-
init(name, xmlParser) {
|
|
35
|
-
let valueStart, valueEnd, reserveStart, paramEnd;
|
|
36
|
-
let xmlData = xmlParser.getXMLdata();
|
|
37
|
-
let valueAttr = ConstInterface.MG_ATTR_ENV_VALUE + "=\"";
|
|
38
|
-
paramEnd = xmlData.indexOf("/>", xmlParser.getCurrIndex());
|
|
39
|
-
valueStart = NString.IndexOf(xmlData, valueAttr, xmlParser.getCurrIndex(), paramEnd - xmlParser.getCurrIndex());
|
|
40
|
-
if (valueStart !== -1) {
|
|
41
|
-
valueStart += valueAttr.length;
|
|
42
|
-
reserveStart = NString.IndexOf(xmlData, ConstInterface.MG_ATTR_ENV_RESERVED + "=\"", xmlParser.getCurrIndex(), paramEnd - xmlParser.getCurrIndex());
|
|
43
|
-
valueEnd = reserveStart !== -1
|
|
44
|
-
? xmlData.indexOf(ConstInterface.MG_ATTR_ENV_RESERVED + "=\"", valueStart) - 2
|
|
45
|
-
: paramEnd - 1;
|
|
46
|
-
this._value = xmlData.substr(valueStart, valueEnd - valueStart).trim();
|
|
47
|
-
if (reserveStart !== -1) {
|
|
48
|
-
reserveStart += ConstInterface.MG_ATTR_ENV_RESERVED.length + 2;
|
|
49
|
-
this._reserved = (xmlData[reserveStart] === 'Y');
|
|
50
|
-
}
|
|
51
|
-
else
|
|
52
|
-
this._reserved = false;
|
|
53
|
-
xmlParser.setCurrIndex(valueEnd);
|
|
54
|
-
if (name.startsWith(ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS))
|
|
55
|
-
return ParamParseResult.OK;
|
|
56
|
-
else
|
|
57
|
-
return ParamParseResult.TOUPPER;
|
|
58
|
-
}
|
|
59
|
-
else if (NString.IndexOf(xmlData, ConstInterface.MG_ATTR_ENV_REMOVED, xmlParser.getCurrIndex(), paramEnd - xmlParser.getCurrIndex()) !== -1) {
|
|
60
|
-
return ParamParseResult.DELETE;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
Debug.Assert(false, "bad XML parsing");
|
|
64
|
-
return ParamParseResult.FAILED;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
ToString() {
|
|
68
|
-
return this._value;
|
|
69
|
-
}
|
|
70
|
-
isReserved() {
|
|
71
|
-
return this._reserved;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
12
|
+
import { MirrorString } from "./MirrorString";
|
|
74
13
|
export class EnvParamsTable extends MirrorPrmMap {
|
|
75
14
|
constructor() {
|
|
76
15
|
super(MirrorString);
|
|
@@ -405,4 +344,4 @@ export class EnvParamsTable extends MirrorPrmMap {
|
|
|
405
344
|
}
|
|
406
345
|
}
|
|
407
346
|
EnvParamsTable.Instance = new EnvParamsTable();
|
|
408
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW52VmFyaWFibGVzVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2Vudi9FbnZWYXJpYWJsZXNUYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBQyx3Q0FBd0MsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFNUUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUkvQyxNQUFNLE9BQU8sWUFBWTtJQU12QixZQUFZLENBQVU7UUFMZCxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLFdBQU0sR0FBVyxJQUFJLENBQUM7UUFLNUIsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4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RVgsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixJQUFJLEdBQUcsR0FBVyxjQUFjLENBQUMsa0NBQWtDO2dCQUNqRSxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLEtBQUssR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBR2xDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDbEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztnQkFDdEcsTUFBTSxJQUFJLENBQUMsQ0FBQzthQUNiO2lCQUNJO2dCQUNILFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUN0RixNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO2FBQzFCO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQXpkTSx1QkFBUSxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJTWlycm9yWE1MfSBmcm9tIFwiLi4vdXRpbC9JTWlycm9yWE1MXCI7XHJcbmltcG9ydCB7WG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb259IGZyb20gXCIuLi9Db21tYW5kc1Byb2Nlc3NvckJhc2VcIjtcclxuaW1wb3J0IHtNaXJyb3JQcm1NYXAsIFBhcmFtUGFyc2VSZXN1bHR9IGZyb20gXCIuLi91dGlsL1BybU1hcFwiO1xyXG5pbXBvcnQge0RlYnVnLCBOTnVtYmVyLCBOU3RyaW5nLCBTdHJpbmdCdWlsZGVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuXHJcbmltcG9ydCB7RGlzcGxheUNvbnZlcnRvcn0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tIFwiLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmRcIjtcclxuaW1wb3J0IHtDb21tYW5kRmFjdG9yeX0gZnJvbSBcIi4uL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbW1hbmRGYWN0b3J5XCI7XHJcbmltcG9ydCB7UmVtb3RlQ29tbWFuZHNQcm9jZXNzb3J9IGZyb20gXCIuLi9yZW1vdGUvUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3JcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi9FbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyBMYXN0Rm9jdXNlZE1hbmFnZXIgfSBmcm9tIFwiLi4vcnQvTGFzdEZvY3VzZWRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuXHJcbi8vIG1pcnJvcmluZyBhIHNpbmdsZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cclxuLy8gKFNpbmNlIFwiU3RyaW5nXCIgaXMgYSBzZWFsZWQgY2xhc3MsIGl0IGlzIGEgbWVtYmVyIGFuZCBub3QgdGhlIGJhc2UgY2xhc3MpXHJcbmV4cG9ydCBjbGFzcyBNaXJyb3JTdHJpbmcgaW1wbGVtZW50cyBJTWlycm9yWE1MIHtcclxuICBwcml2YXRlIF9yZXNlcnZlZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBJcyB0aGlzIHZhcmlhYmxlIHJlc2VydmVkIC0gY2FuIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyXHJcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3Ioczogc3RyaW5nKTtcclxuICBjb25zdHJ1Y3RvcihzPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKHMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Jlc2VydmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKHM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdmFsdWUgPSBzO1xyXG4gICAgdGhpcy5fcmVzZXJ2ZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhcmlhYmxlLCBmb3IgdGhlIFhNTFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgbWlycm9yVG9YTUwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBDb25zdEludGVyZmFjZS5NR19BVFRSX0VOVl9WQUxVRSArIFwiPVxcXCJcIiArIFhtbFBhcnNlci5lc2NhcGUodGhpcy5fdmFsdWUpICsgXCJcXFwiIFwiICtcclxuICAgICAgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTlZfV1JJVEVJTkkgKyBcIj1GXCI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5pdGlhbGl6ZSB0aGUgb2JqZWN0IGZyb20gdGhlIFhNTCBhdHRyaWJ1dGVzIG9mIGEgc2luZ2xlIHBhcmFtLiBUaGUgZXhwZWN0ZWRcclxuICAvLy8gICBmb3JtYXQgaXM6IFwidmFsdWU9XCIuLi5cIiByZXNlcnZlZD1cIi5cIi8+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInhtbFBhcnNlclwiPjwvcGFyYW0+XHJcbiAgcHVibGljIGluaXQobmFtZTogU3RyaW5nLCB4bWxQYXJzZXI6IFhtbFBhcnNlcik6IFBhcmFtUGFyc2VSZXN1bHQge1xyXG4gICAgbGV0IHZhbHVlU3RhcnQ6IG51bWJlciwgdmFsdWVFbmQsIHJlc2VydmVTdGFydCwgcGFyYW1FbmQ7XHJcbiAgICBsZXQgeG1sRGF0YTogc3RyaW5nID0geG1sUGFyc2VyLmdldFhNTGRhdGEoKTtcclxuICAgIGxldCB2YWx1ZUF0dHI6IHN0cmluZyA9IENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU5WX1ZBTFVFICsgXCI9XFxcIlwiO1xyXG5cclxuICAgIHBhcmFtRW5kID0geG1sRGF0YS5pbmRleE9mKFwiLz5cIiwgeG1sUGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICAvLyBnZXQgdGhlIG9mZnNldHMgaW50byB0aGUgWE1MIGRhdGE6IHN0YXJ0IG9mIHZhbHVlLCBlbmQgb2YgdmFsdWUsIGxvY2F0aW9uIG9mIHJlc2VydmVkIGNoYXJcclxuICAgIHZhbHVlU3RhcnQgPSBOU3RyaW5nLkluZGV4T2YoeG1sRGF0YSwgdmFsdWVBdHRyLCB4bWxQYXJzZXIuZ2V0Q3VyckluZGV4KCksIHBhcmFtRW5kIC0geG1sUGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmICh2YWx1ZVN0YXJ0ICE9PSAtMSkge1xyXG4gICAgICB2YWx1ZVN0YXJ0ICs9IHZhbHVlQXR0ci5sZW5ndGg7XHJcbiAgICAgIHJlc2VydmVTdGFydCA9IE5TdHJpbmcuSW5kZXhPZih4bWxEYXRhLCBDb25zdEludGVyZmFjZS5NR19BVFRSX0VOVl9SRVNFUlZFRCArIFwiPVxcXCJcIiwgeG1sUGFyc2VyLmdldEN1cnJJbmRleCgpLFxyXG4gICAgICAgIHBhcmFtRW5kIC0geG1sUGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICAgIHZhbHVlRW5kID0gcmVzZXJ2ZVN0YXJ0ICE9PSAtMVxyXG4gICAgICAgID8geG1sRGF0YS5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU5WX1JFU0VSVkVEICsgXCI9XFxcIlwiLCB2YWx1ZVN0YXJ0KSAtIDJcclxuICAgICAgICA6IHBhcmFtRW5kIC0gMTtcclxuXHJcbiAgICAgIC8vIGZpbGwgdGhlIG9iamVjdCdzIGRhdGFcclxuICAgICAgdGhpcy5fdmFsdWUgPSB4bWxEYXRhLnN1YnN0cih2YWx1ZVN0YXJ0LCB2YWx1ZUVuZCAtIHZhbHVlU3RhcnQpLnRyaW0oKTtcclxuICAgICAgaWYgKHJlc2VydmVTdGFydCAhPT0gLTEpIHtcclxuICAgICAgICByZXNlcnZlU3RhcnQgKz0gQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTlZfUkVTRVJWRUQubGVuZ3RoICsgMjsgLy8gc2tpcCA9J1xyXG4gICAgICAgIHRoaXMuX3Jlc2VydmVkID0gKHhtbERhdGFbcmVzZXJ2ZVN0YXJ0XSA9PT0gJ1knKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVzZXJ2ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIHhtbFBhcnNlci5zZXRDdXJySW5kZXgodmFsdWVFbmQpO1xyXG5cclxuICAgICAgLy8gTG9naWNhbCBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUuIG90aGVycyB2YXJpYWJsZXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8gdXBwZXIgY2FzZVxyXG4gICAgICBpZiAobmFtZS5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX0xPR0lDQUxfTkFNRVNfQlJBQ0tFVFMpKVxyXG4gICAgICAgIHJldHVybiBQYXJhbVBhcnNlUmVzdWx0Lk9LO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIFBhcmFtUGFyc2VSZXN1bHQuVE9VUFBFUjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKE5TdHJpbmcuSW5kZXhPZih4bWxEYXRhLCBDb25zdEludGVyZmFjZS5NR19BVFRSX0VOVl9SRU1PVkVELCB4bWxQYXJzZXIuZ2V0Q3VyckluZGV4KCksIHBhcmFtRW5kIC0geG1sUGFyc2VyLmdldEN1cnJJbmRleCgpKSAhPT0gLTEpIHtcclxuXHJcbiAgICAgIC8vIHJlbW92ZSB0aGlzIHZhcmlhYmxlIGZyb20gdGhlIHRhYmxlXHJcbiAgICAgIHJldHVybiBQYXJhbVBhcnNlUmVzdWx0LkRFTEVURTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBEZWJ1Zy5Bc3NlcnQoZmFsc2UsIFwiYmFkIFhNTCBwYXJzaW5nXCIpO1xyXG4gICAgICByZXR1cm4gUGFyYW1QYXJzZVJlc3VsdC5GQUlMRUQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgVG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpcyB0aGUgdmFyaWFibGUgcmVzZXJ2ZWQ/XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzUmVzZXJ2ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzZXJ2ZWQ7XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIG1hbmFnZXIgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFbnZQYXJhbXNUYWJsZSBleHRlbmRzIE1pcnJvclBybU1hcDxNaXJyb3JTdHJpbmc+IHtcclxuXHJcbiAgc3RhdGljIEluc3RhbmNlOiBFbnZQYXJhbXNUYWJsZSA9IG5ldyBFbnZQYXJhbXNUYWJsZSgpO1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoTWlycm9yU3RyaW5nKTtcclxuICAgIHRoaXMubWlycm9yZWRJRCA9IENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU07XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkIGZyb20gdGhlIGVudmlyb25tZW50LlxyXG4gIC8vIFZlcmlmeSB0aGUgc2VjdGlvbiBuYW1lIGV4aXN0cyBiZWZvcmUgZ2V0dGluZyB0aGUgdmFsdWUgZnJvbSB0aGUgYmFzZSBjbGFzcy5cclxuICAvLyBSZXR1cm4gbnVsbCBpZiB0aGUgdmFsdWUgZG9lcyBub3QgZXhpc3QuXHJcbiAgZ2V0KHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCByZXQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgLy8gSWYgc2VjdGlvbiBpcyBub3QgZGVmaW5lZCwgYWRkIHRoZSBkZWZhdWx0IHNlY3Rpb25cclxuICAgIGlmIChzLmNoYXJBdCgwKSAhPT0gJ1snKSB7XHJcbiAgICAgIHZhbE5hbWUgPSBzO1xyXG4gICAgICBzID0gTlN0cmluZy5JbnNlcnQocywgMCwgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfRU5WX0JSQUNLRVRTKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB3ZSBkbyBoYXZlIHRoZSBzZWN0aW9uIG5hbWUsYWFuZCBpdCBpcyBNQUdJQ19FTlYsIHdlIG5lZWQgdGhlIHZhcmlhYmxlJ3MgbmFtZVxyXG4gICAgZWxzZSBpZiAocy5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUykpXHJcbiAgICAgIHZhbE5hbWUgPSBzLnN1YnN0cihDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMubGVuZ3RoKTtcclxuXHJcbiAgICAvLyBpZiBpdCBpcyBub3QgYSBsb2dpY2FsIG5hbWUsIGl0IGlzIGNhc2UgaW5zZW5zaXRpdmVcclxuICAgIGlmICghcy5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX0xPR0lDQUxfTkFNRVNfQlJBQ0tFVFMpKVxyXG4gICAgICBzID0gcy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgLy8gY2hlY2sgdGhlIHZhbHVlJ3MgbmFtZSB0byBzZWUgaWYgd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgcnVudGltZSBlbnZpcm9ubWVudFxyXG4gICAgaWYgKHZhbE5hbWUgIT09IG51bGwpXHJcbiAgICAgIHJldCA9IHRoaXMuZ2V0RnJvbUVudmlyb25tZW50KHZhbE5hbWUpO1xyXG5cclxuICAgIGlmIChyZXQgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiByZXQ7XHJcblxyXG4gICAgLy8gdmFsdWUgbm90IGluIHJ1bnRpbWUgZW52aXJvbm1lbnQgLSBnZXQgaXQgZnJvbSB0aGUgdGFibGVcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCByZXN1bHRPYmplY3Q6IE1pcnJvclN0cmluZyA9IHN1cGVyLmdldHZhbHVlKHMpO1xyXG5cclxuICAgICAgaWYgKHJlc3VsdE9iamVjdCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldCA9IHJlc3VsdE9iamVjdC5Ub1N0cmluZygpO1xyXG5cclxuICAgICAgICAvLyBJZiBpdCBtYXkgYmUgYSB2YXJpYWJsZSB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNlcnZlcidzIGNvbnRleHQvY29tcG9uZW50LCBwcm9jZXNzIGl0XHJcbiAgICAgICAgaWYgKHZhbE5hbWUgIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldCA9IHRoaXMuZ2V0UHJvY2Vzc2VkVmFsdWUodmFsTmFtZSwgcmV0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleF9CRSkge1xyXG4gICAgICAvLyBpZiBzdHJpbmcgbm90IGluIGRpY3Rpb25hcnlcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBwbGFjZSBcIm51bWJlclwiIGluIHNlY3Rpb24gXCJzZWN0aW9uXCJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2VjdGlvblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1iZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0bG4oc2VjdGlvbjogc3RyaW5nLCBudW1iZXI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBzZWN0aW9uID0gc2VjdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTtcclxuICAgIGxldCBzZWN0aW9uRm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBsZXQga2V5czogc3RyaW5nW10gPSB0aGlzLnZhbHVlcy5LZXlzO1xyXG5cclxuICAgIC8vIExvb3Agb3ZlciBrZXlzLCBmaW5kIHRob3NlIHRoYXQgc3RhcnQgd2l0aCBvdXIgc2VjdGlvbiBuYW1lXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGtleTogc3RyaW5nID0ga2V5c1tpXTtcclxuXHJcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChzZWN0aW9uKSkge1xyXG4gICAgICAgIHNlY3Rpb25Gb3VuZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChudW1iZXIgPiAxKVxyXG4gICAgICAgICAgbnVtYmVyLS07XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIC8vIGZvdW5kIHdoYXQgd2UgbmVlZGVkLCBidWlsZCB0aGUgXCJuYW1lPXZhbHVlXCIgc3RyaW5nXHJcbiAgICAgICAgICByZXR1cm4ga2V5LnN1YnN0cihzZWN0aW9uLmxlbmd0aCkgKyBcIj1cIiArIHRoaXMudmFsdWVzLmdldF9JdGVtKGtleSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgd2UgZ290IHRvIHRoZSByaWdodCBzZWN0aW9uIGFuZCBwYXNzZWQgaXQsIG5vIG5lZWQgdG8gY29udGludWUgbG9va2luZ1xyXG4gICAgICBlbHNlIGlmIChzZWN0aW9uRm91bmQpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJ5IGFuZCBnZXQgdGhlIGVudiB2YXJpYWJsZSdzIHZhbHVlIGZyb20gdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldEZyb21FbnZpcm9ubWVudCh2YWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh2YWxOYW1lLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFQ0lNQUxfU0VQQVJBVE9SOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREZWNpbWFsKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFOlxyXG4gICAgICAgIHJldHVybiBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldERhdGVDaGFyKCkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJTUU6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLkdldFRpbWUoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09XTkVSOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRPd25lcigpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREFURU1PREU6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLkdldERhdGVNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5UVVJZOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXRDZW50dXJ5KExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lETEVUSU1FOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRJZGxlVGltZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VUERfSU5fUVVFUlk6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmFsbG93VXBkYXRlSW5RdWVyeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ1JFX0lOX01PRElGWTpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVQ6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmdldENvbnRleHRJbmFjdGl2aXR5VGltZW91dCgpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX1VOTE9BRF9USU1FT1VUOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRDb250ZXh0VW5sb2FkVGltZW91dCgpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URVJNSU5BTDpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0VGVybWluYWwoKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfV0VCQ0xJRU5UX1JFSU5JVF9TRVNTSU9OOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRXZWJDbGllbnRSZWluaXRTZXNzaW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUaGUgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSdzIHZhbHVlLCB0byByZXR1cm4gaXQgaW4gdGhlIHJpZ2h0XHJcbiAgLy8vICAgZm9ybWF0IGZvciBjb250ZXh0L2NvbXBvbmVudCB2YWx1ZXMgdGhhdCBhcmUgbm90IHVzZWQgYnkgdGhlIGNsaWVudC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldFByb2Nlc3NlZFZhbHVlKHZhbE5hbWU6IHN0cmluZywgdmFsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIC8vIFRoZSBsaXN0IG9mIHZhcmlhYmxlcyBpcyBzaW1pbGFyIHRvIHRoYXQgaW4gdGhlIHNlcnZlciwgaW4gZW52X2NvbXAuY3BwLCBFTlY6OmVudl92YWxfdG9fc3RyXHJcbiAgICBzd2l0Y2ggKHZhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xyXG5cclxuICAgICAgLy8gdmFyaWFibGUgaXMgaW50ZWdlclxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSFRUUF9USU1FT1VUOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUlRGX0JVRkZFUl9TSVpFOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUkFOR0VfUE9QX1RJTUU6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URU1QX1BPUF9USU1FOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQkFUQ0hfUEFJTlRfVElNRTpcclxuICAgICAgICByZXR1cm4gTk51bWJlci5QYXJzZSh2YWwpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAvLyB2YXJpYWJsZSBpcyBib29sZWFuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VfU0lHTkVEX0JST1dTRVJfQ0xJRU5UOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0xPU0VfUFJJTlRFRF9UQUJMRVNfSU5fU1VCVEFTS1M6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9HRU5FUklDX1RFWFRfUFJJTlRJTkc6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ISUdIX1JFU09MVVRJT05fUFJJTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9NRVJHRV9UUklNOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfT1JJR0lOQUxfSU1BR0VfTE9BRDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BSSU5UX0RBVEFfVFJJTTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BTQ1JJUFRfUFJJTlRfTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0NPTlZfQUREX1NMQVNIOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9GVUxMX0VYUEFORF9QUklOVDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfRlVMTF9URVhUOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9MQVNUX0xJTkVfUFJJTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1BSSU5URVJfT0VNOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU1CRURfRk9OVFM6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5URVJfU0NSRUVOX0lOX09OTElORTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFUE9TSVRJT05fQUZURVJfTU9ESUZZOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSVNBTV9UUkFOU0FDVElPTjpcclxuICAgICAgICByZXR1cm4gKHZhbFswXSA9PT0gJ1knIHx8IHZhbFswXSA9PT0gJzEnKSA/IFwiWVwiIDogXCJOXCI7XHJcblxyXG4gICAgICAvLyB2YXJpYWJsZSBpcyBhIGNoYXJhY3RlclxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElNRV9TRVBBUkFUT1I6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JT1RJTUlORzpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RIT1VTQU5EX1NFUEFSQVRPUjpcclxuICAgICAgICByZXR1cm4gdmFsWzBdLnRvU3RyaW5nKCk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIHZhcmlhYmxlOlxyXG4gIC8vLyAgIDEuIHBhcnNlIHRoZSBzdHJpbmdcclxuICAvLy8gICAyLiBjcmVhdGUgdGhlIHBhcmFtL3ZhbHVlIGNvdXBsZXNcclxuICAvLy8gICAzLiBmb3IgZWFjaCBjb3VwbGU6XHJcbiAgLy8vICAgM2EuIHZlcmlmeSB0aGUgc2VjdGlvbiBuYW1lIGV4aXN0c1xyXG4gIC8vLyAgIDNiLiB2ZXJpZnkgdGhlIHZhcmlhYmxlIGlzIG5vdCB1bm1vZGlmaWVhYmxlXHJcbiAgLy8vICAgM2MuIHNldCB0aGUgdmFyaWFibGUgaW4gdGhlIGJhc2UgY2xhc3NcclxuICAvLy8gICAzZC4gY2hlY2sgYW5kIGNoYW5nZSB0aGUgZW52aXJvbm1lbnQgZGF0YSBpZiBuZWVkZWRcclxuICAvLy8gICA0LiBJZiByZXF1aXJlZCwgc2VuZCB0aGUgZGF0YSB0byB0aGUgc2VydmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlSW5pXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBhc3luYyBzZXQoczogc3RyaW5nLCB1cGRhdGVJbmk6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBhbGxPSzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgc2VuZFRvU2VydmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgbmFtZTogc3RyaW5nLCB2YWw7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHNlcnZlclZhbDogc3RyaW5nID0gcztcclxuXHJcbiAgICAvLyBTdHJpbmcgcGFyc2luZzogZXZlcnkgbnVtYmVyIGluICdvZmZzZXRzJyBzaG93cyB0aGUgb2Zmc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBuYW1lIG9yIHZhbHVlXHJcbiAgICAvLyAxc3Qgb2Zmc2V0IGlzIGFsd2F5cyAwXHJcbiAgICBsZXQgb2Zmc2V0czogbnVtYmVyW10gPSBuZXcgQXJyYXkocy5sZW5ndGggKyAxKTtcclxuICAgIGxldCBvZmZzZXRzQ2hhcnM6IHN0cmluZ1tdID0gbmV3IEFycmF5KHMubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgb2Zmc2V0c1swXSA9IDA7XHJcbiAgICBvZmZzZXRzQ2hhcnNbMF0gPSAncyc7XHJcbiAgICBsZXQgbmV4dE9mZnNldDogbnVtYmVyID0gMTtcclxuXHJcbiAgICAvLyBMb29wIG92ZXIgc3RyaW5nLCBmaW5kIGFsbCB0aGUgJz0nLCAnLCcgYW5kICcqJyB0aGF0IGFyZSBub3QgcHJlY2VlZGVkIGJ5IGEgJ1xcJy5cclxuICAgIGZvciAoaSA9IDE7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICgoc1tpXSA9PT0gJz0nIHx8IHNbaV0gPT09ICcsJykgJiYgc1tpIC0gMV0gIT09ICdcXFxcJykge1xyXG4gICAgICAgIG9mZnNldHNbbmV4dE9mZnNldF0gPSBpICsgMTtcclxuICAgICAgICBvZmZzZXRzQ2hhcnNbbmV4dE9mZnNldF0gPSBzW2ldO1xyXG4gICAgICAgIG5leHRPZmZzZXQrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc1tpXSA9PT0gJyonKSB7XHJcbiAgICAgICAgcyA9IE5TdHJpbmcuUmVtb3ZlKHMsIGksIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzW2ldID09PSAnXFxcXCcpIHtcclxuICAgICAgICBzID0gTlN0cmluZy5SZW1vdmUocywgaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgdGhlIGZpbmFsIG9mZnNldCBmb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nXHJcbiAgICBvZmZzZXRzW25leHRPZmZzZXRdID0gcy5sZW5ndGggKyAxO1xyXG4gICAgb2Zmc2V0c0NoYXJzW25leHRPZmZzZXRdID0gJ1xcMCc7XHJcbiAgICBuZXh0T2Zmc2V0Kys7XHJcblxyXG4gICAgLy8gZ28gb3ZlciB0aGUgY2FsY3VsYXRlZCBvZmZzZXRzLiB0aGUgbGFzdCBvbmUgaXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzbyBpdCBpcyBpZ25vcmVkXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dE9mZnNldCAtIDE7IGkrKykge1xyXG4gICAgICAvLyBnZXQgdGhlIHZhcmlhYmxlIG5hbWVcclxuICAgICAgbmFtZSA9IHMuc3Vic3RyKG9mZnNldHNbaV0sIG9mZnNldHNbaSArIDFdIC0gb2Zmc2V0c1tpXSAtIDEpO1xyXG5cclxuICAgICAgLy8gaXMgdGhlcmUgYSB2YWx1ZSwgb3IgaXMgaXQgYW4gZW1wdHkgdmFyaWFibGU/XHJcbiAgICAgIGlmIChzW29mZnNldHNbaSArIDFdIC0gMV0gPT09ICc9Jykge1xyXG4gICAgICAgIGkrKztcclxuICAgICAgICBsZXQgdmFsSW5pdDogbnVtYmVyID0gaTtcclxuICAgICAgICBsZXQgYWxsb3dlZFNlcGFyYXRvcnM6IG51bWJlciA9IHRoaXMuZ2V0QWxsb3dlZFNlcGFyYXRvcnMobmFtZSk7XHJcbiAgICAgICAgZm9yIChsZXQgc2VwOiBudW1iZXIgPSAwOyBzZXAgPCBhbGxvd2VkU2VwYXJhdG9yczsgc2VwKyspIHtcclxuICAgICAgICAgIGlmIChvZmZzZXRzQ2hhcnNbaSArIDFdID09PSAnLCcpXHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdldCB0aGUgdmFsdWVcclxuICAgICAgICB2YWwgPSBzLnN1YnN0cihvZmZzZXRzW3ZhbEluaXRdLCBvZmZzZXRzW2kgKyAxXSAtIG9mZnNldHNbdmFsSW5pdF0gLSAxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdmFsID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIGlzIGl0IGEgcmVzZXJ2ZWQgdmFyaWFibGU/XHJcbiAgICAgIGlmICh0aGlzLmlzUmVzZXJ2ZWRMb2dpY2FsTmFtZShuYW1lKSkge1xyXG4gICAgICAgIGFsbE9LID0gZmFsc2U7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc2VjdGlvbiBuYW1lLCBhZGQgdGhlIGRlZmF1bHQgb25lXHJcbiAgICAgIGlmIChuYW1lWzBdICE9PSAnWycpXHJcbiAgICAgICAgbmFtZSA9IE5TdHJpbmcuSW5zZXJ0KG5hbWUsIDAsIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUyk7XHJcblxyXG4gICAgICAvLyBJZiBpdCdzIG5vdCBhIGxvZ2ljYWwgbmFtZSwgaXQgaXMgY2FzZSBpbnNlbnNpdGl2ZVxyXG4gICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9MT0dJQ0FMX05BTUVTX0JSQUNLRVRTKSlcclxuICAgICAgICBuYW1lID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBuYW1lID0gbmFtZS50cmltKCk7XHJcbiAgICAgIHZhbCA9IHZhbC50cmltKCk7XHJcbiAgICAgIHNlbmRUb1NlcnZlciA9IHRydWU7XHJcbiAgICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHZhbCkgfHxcclxuICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUykpIHtcclxuICAgICAgICAvLyBJZiB3ZSdyZSBnb2luZyB0byBzZW5kIGl0IHRvIHRoZSBzZXJ2ZXIgTk9XLCB3ZSBkb24ndCBuZWVkIGl0IGluIHRoZSBjaGFuZ2VzIGxpc3RcclxuICAgICAgICBzdXBlci5zZXRWYWx1ZShuYW1lLCBuZXcgTWlycm9yU3RyaW5nKHZhbCksICF1cGRhdGVJbmkpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tTZXRJbkVudmlyb25tZW50KG5hbWUsIHZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHN1cGVyLnJlbW92ZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBzaG91bGQgdXBkYXRlIHRoZSBpbmkgZmlsZSwgYW5kIHdlIGhhdmUgbW9kaWZpZWQgdmFyaWFibGVzLCB1cGRhdGUgdGhlIHNlcnZlci5cclxuICAgIGlmICh1cGRhdGVJbmkgJiYgc2VuZFRvU2VydmVyKSB7XHJcbiAgICAgIGxldCBjbWQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlSW5pcHV0Rm9yY2VXcml0ZUNvbW1hbmQoc2VydmVyVmFsKTtcclxuICAgICAgQWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLmdldE1HRGF0YSgwKS5DbWRzVG9TZXJ2ZXIuQWRkKGNtZCk7XHJcblxyXG4gICAgICAvLyBleGVjdXRlIGNsaWVudCB0byBzZXJ2ZXIgY29tbWFuZHNcclxuICAgICAgYXdhaXQgUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuR2V0SW5zdGFuY2UoKS5FeGVjdXRlKENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24uT05MWV9DT01NQU5EUyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWxsT0s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2tzIGlmIHRoZSB2YXJpYWJsZSBpcyBhIHJlc2VydmVkIGxvZ2ljYWwgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+IGVudiB2YXJpYWJsZSBuYW1lIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIGl0IGlzIHJlc2VydmVkIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGlzUmVzZXJ2ZWRMb2dpY2FsTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcbiAgICAvLyBSZXNlcnZlZCBsb2dpY2FsIG5hbWVzIG1heSBiZSBhY2Nlc3NlZCB3aXRob3V0IGEgc2VjdGlvbiBuYW1lLCBidXQgYXJlIHN0b3JlZCBhcyBsb2dpY2FsIG5hbWVzLFxyXG4gICAgLy8gc28gaWYgd2UgZG9uJ3QgaGF2ZSBhIHNlY3Rpb24gbmFtZSwgaW5zZXJ0IHRoZSBsb2dpY2FsIHNlY3Rpb24gYW5kIHNlYXJjaCB0aGUgdGFibGVcclxuICAgIGlmICghbmFtZS5zdGFydHNXaXRoKFwiW1wiKSkge1xyXG4gICAgICBuYW1lID0gTlN0cmluZy5JbnNlcnQobmFtZSwgMCwgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUyk7XHJcbiAgICAgIGlmICh0aGlzLnZhbHVlcy5Db250YWluc0tleShuYW1lKSAmJiB0aGlzLnZhbHVlcy5nZXRfSXRlbShuYW1lKS5pc1Jlc2VydmVkKCkpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlcGVyYXRvcnMgYWxsb3dlZCBmb3IgZW50cmllcyBvZiB0aGlzIHNlY3Rpb24uIG51bWJlciBhcmUgYmFzZWQgb25cclxuICAvLy8gICBkYXRhIGluIGVudl9rZXJuLmNwcDogZW52X2RlZl9wYXJzZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0QWxsb3dlZFNlcGFyYXRvcnMobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmIChuYW1lLmNoYXJBdCgwKSAhPT0gJ1snKVxyXG4gICAgICByZXR1cm4gMDtcclxuXHJcbiAgICBsZXQgc2VjdGlvbjogc3RyaW5nID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5pbmRleE9mKCddJykgLyonXScqLyAtIDEpO1xyXG4gICAgbGV0IHBhcmFtOiBzdHJpbmcgPSBuYW1lLnN1YnN0cihuYW1lLmluZGV4T2YoJ10nKSAvKiddJyovICsgMSk7XHJcblxyXG4gICAgc3dpdGNoIChzZWN0aW9uLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlY6XHJcbiAgICAgICAgaWYgKHBhcmFtLnRvVXBwZXJDYXNlKCkgPT09IENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTEFOR1VBR0UudG9VcHBlckNhc2UoKSlcclxuICAgICAgICAgIHJldHVybiA5OTk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfU1lTVEVNUzpcclxuICAgICAgICByZXR1cm4gODtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19EQk1TOlxyXG4gICAgICAgIHJldHVybiAxMztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19TRVJWRVJTOlxyXG4gICAgICAgIHJldHVybiA2O1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0NPTU1TOlxyXG4gICAgICAgIHJldHVybiAyO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1BSSU5URVJTOlxyXG4gICAgICAgIHJldHVybiAzO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1NZU1RFTV9NRU5VOlxyXG4gICAgICAgIHJldHVybiAxMTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19EQVRBQkFTRVM6XHJcbiAgICAgICAgcmV0dXJuIDIxO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0xBTkdVQUdFOlxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1NFUlZJQ0VTOlxyXG4gICAgICAgIHJldHVybiA4O1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX1RPT0xTX01FTlU6XHJcbiAgICAgICAgcmV0dXJuIDc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2sgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGNoYW5nZSBhZmZlY3RzIHRoZSBlbnZpcm9ubWVudCB2YWx1ZXMsXHJcbiAgLy8vICAgYW5kIGNoYW5nZSB0aGUgZW52aXJvbm1lbnQgZGF0YSBhY2NvcmRpbmdseVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjaGVja1NldEluRW52aXJvbm1lbnQobmFtZTogc3RyaW5nLCB2YWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKG5hbWUuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMpKSB7XHJcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cihDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMubGVuZ3RoKTtcclxuXHJcbiAgICAgIHN3aXRjaCAobmFtZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFQ0lNQUxfU0VQQVJBVE9SOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0RGVjaW1hbFNlcGFyYXRvcih2YWxbMF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RBVEU6XHJcbiAgICAgICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLnNldERhdGVDaGFyKHZhbFswXS5jaGFyQ29kZUF0KDApKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USU1FOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0VGltZVNlcGFyYXRvcih2YWxbMF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09XTkVSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0T3duZXIodmFsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFTU9ERTpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldERhdGVNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSwgdmFsWzBdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5UVVJZOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0Q2VudHVyeShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksIE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSURMRVRJTUU6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRJZGxlVGltZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksIE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVBEX0lOX1FVRVJZX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0QWxsb3dVcGRhdGVJblF1ZXJ5TW9kZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksXHJcbiAgICAgICAgICAgIHZhbFswXSA9PT0gJzEnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DUkVfSU5fTU9ESUZZX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0QWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpLFxyXG4gICAgICAgICAgICB2YWxbMF0gPT09ICcxJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVRfTE9XRVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQoTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX0lOQUNUSVZJVFlfV0FSTklOR19USU1FX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0Q29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZShOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfVU5MT0FEX1RJTUVPVVRfTE9XRVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRDb250ZXh0VW5sb2FkVGltZW91dChOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RFUk1JTkFMOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0VGVybWluYWwoTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIGxvZ2ljYWwgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj5pbmRleCBvZiB0aGUgbG9naWNhbCBuYW1lPC9wYXJhbT5cclxuICB0cmFuc2xhdGUobG9naWNhbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGxvZ2ljYWxOYW1lKTtcclxuICAgIHRoaXMubG9nKHN0cmluZ0J1aWxkZXIpO1xyXG4gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJpbmdCbGRyXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGxvZyhzdHJpbmdCbGRyOiBTdHJpbmdCdWlsZGVyKTogdm9pZCB7XHJcbiAgICBsZXQgZmluaXNoZWQ6IGJvb2xlYW47XHJcbiAgICBkbyB7XHJcbiAgICAgIGxldCBvZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcclxuICAgICAgd2hpbGUgKG9mZnNldCA8IHN0cmluZ0JsZHIuTGVuZ3RoICYmIHN0cmluZ0JsZHIuZ2V0X0l0ZW0ob2Zmc2V0KSA+ICdcXDAnLyonXHUwMDAwJyovKSB7XHJcblxyXG4gICAgICAgIC8vICckJyB3YXMgZGVmaW5lIHRoZSBsb2dpY2FsIG5hbWUsIG5vdCB1c2VkIGFueSBtb3JlXHJcbiAgICAgICAgaWYgKHN0cmluZ0JsZHIuZ2V0X0l0ZW0ob2Zmc2V0KSA9PT0gJyUnKSB7XHJcbiAgICAgICAgICBsZXQgb2xkTGVuZ3RoOiBudW1iZXIgPSBzdHJpbmdCbGRyLkxlbmd0aDtcclxuICAgICAgICAgIG9mZnNldCA9IHRoaXMubG9nX3RyYW5zKHN0cmluZ0JsZHIsIG9mZnNldCk7XHJcbiAgICAgICAgICBpZiAob2xkTGVuZ3RoICE9PSBzdHJpbmdCbGRyLkxlbmd0aClcclxuICAgICAgICAgICAgZmluaXNoZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2hpbGUgKCFmaW5pc2hlZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+PC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyaW5nQmxkclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvZmZzZXRcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgbG9nX3RyYW5zKHN0cmluZ0JsZHI6IFN0cmluZ0J1aWxkZXIsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBpZ25vcmVUcmFuczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHN0YXJ0U3ltOiBudW1iZXIgPSBvZmZzZXQ7XHJcbiAgICBsZXQgZW5kU3ltOiBudW1iZXIgPSBvZmZzZXQgKyAxO1xyXG5cclxuICAgIC8vIGZpbmQgdGhlIGVuZCBvZiB0aGUgc3ltYm9sXHJcbiAgICB3aGlsZSAoZW5kU3ltIDwgc3RyaW5nQmxkci5MZW5ndGgpIHtcclxuICAgICAgaWYgKHN0cmluZ0JsZHIuZ2V0X0l0ZW0oZW5kU3ltKSA9PT0gJyUnKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBlbmRTeW0rKztcclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgMSB0byB0aGUgbGVuIHRvIGdldCB0byB0aGUgZW5kIG9mIHRoZSBzeW1ib2wgb3IgaWYgbm8gZW5kIHN5bWJvbCB3YXMgZm91bmQgYWRkXHJcbiAgICBpZiAoZW5kU3ltID49IHN0cmluZ0JsZHIuTGVuZ3RoKSB7XHJcbiAgICAgIG9mZnNldCA9IGVuZFN5bTtcclxuICAgICAgaWdub3JlVHJhbnMgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc3RyaW5nQmxkci5nZXRfSXRlbShlbmRTeW0pICE9PSAnJScpXHJcbiAgICAgIG9mZnNldCsrO1xyXG5cclxuICAgIGlmICghaWdub3JlVHJhbnMpIHtcclxuICAgICAgbGV0IHN5bTogc3RyaW5nID0gQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUyArXHJcbiAgICAgICAgc3RyaW5nQmxkci5Ub1N0cmluZyhzdGFydFN5bSArIDEsIGVuZFN5bSAtIHN0YXJ0U3ltIC0gMSk7XHJcbiAgICAgIGxldCB0cmFuczogc3RyaW5nID0gdGhpcy5nZXQoc3ltKTtcclxuXHJcbiAgICAgIC8vIHNldCB0aGUgb2Zmc2V0IHRvIHRoZSBuZXh0IGNoYXIgYWZ0ZXIgdGhlIGVuZGluZyAlIG9mIHRoZSBuYW1lXHJcbiAgICAgIGlmICh0cmFucyA9PT0gbnVsbCkge1xyXG4gICAgICAgIHN0cmluZ0JsZHIuUmVwbGFjZShzdHJpbmdCbGRyLlRvU3RyaW5nKG9mZnNldCwgZW5kU3ltICsgMSAtIG9mZnNldCksIFwiXCIsIG9mZnNldCwgZW5kU3ltICsgMSAtIG9mZnNldCk7XHJcbiAgICAgICAgb2Zmc2V0ICs9IDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3RyaW5nQmxkci5SZXBsYWNlKHN0cmluZ0JsZHIuVG9TdHJpbmcoc3RhcnRTeW0sIGVuZFN5bSArIDEgLSBzdGFydFN5bSksIHRyYW5zLCBzdGFydFN5bSxcclxuICAgICAgICAgIGVuZFN5bSArIDEgLSBzdGFydFN5bSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW52VmFyaWFibGVzVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2Vudi9FbnZWYXJpYWJsZXNUYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLHdDQUF3QyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSzVDLE1BQU0sT0FBTyxjQUFlLFNBQVEsWUFBMEI7SUFNNUQ7UUFDRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7SUFDcEQsQ0FBQztJQUtELEdBQUcsQ0FBQyxDQUFTO1FBQ1gsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDO1FBQzNCLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQztRQUd2QixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FB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QUFNLElBQUksQ0FBQyxDQUFDO2FBQ2I7aUJBQ0k7Z0JBQ0gsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQ3RGLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7YUFDMUI7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O0FBemRNLHVCQUFRLEdBQW1CLElBQUksY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb259IGZyb20gXCIuLi9Db21tYW5kc1Byb2Nlc3NvckJhc2VcIjtcclxuaW1wb3J0IHtNaXJyb3JQcm1NYXB9IGZyb20gXCIuLi91dGlsL1BybU1hcFwiO1xyXG5pbXBvcnQge05OdW1iZXIsIE5TdHJpbmcsIFN0cmluZ0J1aWxkZXJ9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5cclxuaW1wb3J0IHtEaXNwbGF5Q29udmVydG9yfSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7SUNsaWVudENvbW1hbmR9IGZyb20gXCIuLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZFwiO1xyXG5pbXBvcnQge0NvbW1hbmRGYWN0b3J5fSBmcm9tIFwiLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvQ29tbWFuZEZhY3RvcnlcIjtcclxuaW1wb3J0IHtSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvcn0gZnJvbSBcIi4uL3JlbW90ZS9SZW1vdGVDb21tYW5kc1Byb2Nlc3NvclwiO1xyXG5pbXBvcnQge0Vudmlyb25tZW50fSBmcm9tIFwiLi9FbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQge0xhc3RGb2N1c2VkTWFuYWdlcn0gZnJvbSBcIi4uL3J0L0xhc3RGb2N1c2VkTWFuYWdlclwiO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5pbXBvcnQge01pcnJvclN0cmluZ30gZnJvbSBcIi4vTWlycm9yU3RyaW5nXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIG1hbmFnZXIgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFbnZQYXJhbXNUYWJsZSBleHRlbmRzIE1pcnJvclBybU1hcDxNaXJyb3JTdHJpbmc+IHtcclxuXHJcbiAgc3RhdGljIEluc3RhbmNlOiBFbnZQYXJhbXNUYWJsZSA9IG5ldyBFbnZQYXJhbXNUYWJsZSgpO1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoTWlycm9yU3RyaW5nKTtcclxuICAgIHRoaXMubWlycm9yZWRJRCA9IENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU07XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkIGZyb20gdGhlIGVudmlyb25tZW50LlxyXG4gIC8vIFZlcmlmeSB0aGUgc2VjdGlvbiBuYW1lIGV4aXN0cyBiZWZvcmUgZ2V0dGluZyB0aGUgdmFsdWUgZnJvbSB0aGUgYmFzZSBjbGFzcy5cclxuICAvLyBSZXR1cm4gbnVsbCBpZiB0aGUgdmFsdWUgZG9lcyBub3QgZXhpc3QuXHJcbiAgZ2V0KHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCByZXQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgLy8gSWYgc2VjdGlvbiBpcyBub3QgZGVmaW5lZCwgYWRkIHRoZSBkZWZhdWx0IHNlY3Rpb25cclxuICAgIGlmIChzLmNoYXJBdCgwKSAhPT0gJ1snKSB7XHJcbiAgICAgIHZhbE5hbWUgPSBzO1xyXG4gICAgICBzID0gTlN0cmluZy5JbnNlcnQocywgMCwgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfRU5WX0JSQUNLRVRTKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB3ZSBkbyBoYXZlIHRoZSBzZWN0aW9uIG5hbWUsYWFuZCBpdCBpcyBNQUdJQ19FTlYsIHdlIG5lZWQgdGhlIHZhcmlhYmxlJ3MgbmFtZVxyXG4gICAgZWxzZSBpZiAocy5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUykpXHJcbiAgICAgIHZhbE5hbWUgPSBzLnN1YnN0cihDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMubGVuZ3RoKTtcclxuXHJcbiAgICAvLyBpZiBpdCBpcyBub3QgYSBsb2dpY2FsIG5hbWUsIGl0IGlzIGNhc2UgaW5zZW5zaXRpdmVcclxuICAgIGlmICghcy5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX0xPR0lDQUxfTkFNRVNfQlJBQ0tFVFMpKVxyXG4gICAgICBzID0gcy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgLy8gY2hlY2sgdGhlIHZhbHVlJ3MgbmFtZSB0byBzZWUgaWYgd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgcnVudGltZSBlbnZpcm9ubWVudFxyXG4gICAgaWYgKHZhbE5hbWUgIT09IG51bGwpXHJcbiAgICAgIHJldCA9IHRoaXMuZ2V0RnJvbUVudmlyb25tZW50KHZhbE5hbWUpO1xyXG5cclxuICAgIGlmIChyZXQgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiByZXQ7XHJcblxyXG4gICAgLy8gdmFsdWUgbm90IGluIHJ1bnRpbWUgZW52aXJvbm1lbnQgLSBnZXQgaXQgZnJvbSB0aGUgdGFibGVcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCByZXN1bHRPYmplY3Q6IE1pcnJvclN0cmluZyA9IHN1cGVyLmdldHZhbHVlKHMpO1xyXG5cclxuICAgICAgaWYgKHJlc3VsdE9iamVjdCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldCA9IHJlc3VsdE9iamVjdC5Ub1N0cmluZygpO1xyXG5cclxuICAgICAgICAvLyBJZiBpdCBtYXkgYmUgYSB2YXJpYWJsZSB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNlcnZlcidzIGNvbnRleHQvY29tcG9uZW50LCBwcm9jZXNzIGl0XHJcbiAgICAgICAgaWYgKHZhbE5hbWUgIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldCA9IHRoaXMuZ2V0UHJvY2Vzc2VkVmFsdWUodmFsTmFtZSwgcmV0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleF9CRSkge1xyXG4gICAgICAvLyBpZiBzdHJpbmcgbm90IGluIGRpY3Rpb25hcnlcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBwbGFjZSBcIm51bWJlclwiIGluIHNlY3Rpb24gXCJzZWN0aW9uXCJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2VjdGlvblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1iZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0bG4oc2VjdGlvbjogc3RyaW5nLCBudW1iZXI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBzZWN0aW9uID0gc2VjdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTtcclxuICAgIGxldCBzZWN0aW9uRm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBsZXQga2V5czogc3RyaW5nW10gPSB0aGlzLnZhbHVlcy5LZXlzO1xyXG5cclxuICAgIC8vIExvb3Agb3ZlciBrZXlzLCBmaW5kIHRob3NlIHRoYXQgc3RhcnQgd2l0aCBvdXIgc2VjdGlvbiBuYW1lXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGtleTogc3RyaW5nID0ga2V5c1tpXTtcclxuXHJcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChzZWN0aW9uKSkge1xyXG4gICAgICAgIHNlY3Rpb25Gb3VuZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChudW1iZXIgPiAxKVxyXG4gICAgICAgICAgbnVtYmVyLS07XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIC8vIGZvdW5kIHdoYXQgd2UgbmVlZGVkLCBidWlsZCB0aGUgXCJuYW1lPXZhbHVlXCIgc3RyaW5nXHJcbiAgICAgICAgICByZXR1cm4ga2V5LnN1YnN0cihzZWN0aW9uLmxlbmd0aCkgKyBcIj1cIiArIHRoaXMudmFsdWVzLmdldF9JdGVtKGtleSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgd2UgZ290IHRvIHRoZSByaWdodCBzZWN0aW9uIGFuZCBwYXNzZWQgaXQsIG5vIG5lZWQgdG8gY29udGludWUgbG9va2luZ1xyXG4gICAgICBlbHNlIGlmIChzZWN0aW9uRm91bmQpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJ5IGFuZCBnZXQgdGhlIGVudiB2YXJpYWJsZSdzIHZhbHVlIGZyb20gdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldEZyb21FbnZpcm9ubWVudCh2YWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh2YWxOYW1lLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFQ0lNQUxfU0VQQVJBVE9SOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREZWNpbWFsKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFOlxyXG4gICAgICAgIHJldHVybiBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldERhdGVDaGFyKCkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJTUU6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLkdldFRpbWUoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09XTkVSOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRPd25lcigpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREFURU1PREU6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLkdldERhdGVNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5UVVJZOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXRDZW50dXJ5KExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lETEVUSU1FOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRJZGxlVGltZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VUERfSU5fUVVFUlk6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmFsbG93VXBkYXRlSW5RdWVyeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ1JFX0lOX01PRElGWTpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVQ6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmdldENvbnRleHRJbmFjdGl2aXR5VGltZW91dCgpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX1VOTE9BRF9USU1FT1VUOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRDb250ZXh0VW5sb2FkVGltZW91dCgpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URVJNSU5BTDpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0VGVybWluYWwoKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfV0VCQ0xJRU5UX1JFSU5JVF9TRVNTSU9OOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRXZWJDbGllbnRSZWluaXRTZXNzaW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUaGUgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSdzIHZhbHVlLCB0byByZXR1cm4gaXQgaW4gdGhlIHJpZ2h0XHJcbiAgLy8vICAgZm9ybWF0IGZvciBjb250ZXh0L2NvbXBvbmVudCB2YWx1ZXMgdGhhdCBhcmUgbm90IHVzZWQgYnkgdGhlIGNsaWVudC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldFByb2Nlc3NlZFZhbHVlKHZhbE5hbWU6IHN0cmluZywgdmFsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIC8vIFRoZSBsaXN0IG9mIHZhcmlhYmxlcyBpcyBzaW1pbGFyIHRvIHRoYXQgaW4gdGhlIHNlcnZlciwgaW4gZW52X2NvbXAuY3BwLCBFTlY6OmVudl92YWxfdG9fc3RyXHJcbiAgICBzd2l0Y2ggKHZhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xyXG5cclxuICAgICAgLy8gdmFyaWFibGUgaXMgaW50ZWdlclxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSFRUUF9USU1FT1VUOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUlRGX0JVRkZFUl9TSVpFOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUkFOR0VfUE9QX1RJTUU6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URU1QX1BPUF9USU1FOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQkFUQ0hfUEFJTlRfVElNRTpcclxuICAgICAgICByZXR1cm4gTk51bWJlci5QYXJzZSh2YWwpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAvLyB2YXJpYWJsZSBpcyBib29sZWFuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VfU0lHTkVEX0JST1dTRVJfQ0xJRU5UOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0xPU0VfUFJJTlRFRF9UQUJMRVNfSU5fU1VCVEFTS1M6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9HRU5FUklDX1RFWFRfUFJJTlRJTkc6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ISUdIX1JFU09MVVRJT05fUFJJTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9NRVJHRV9UUklNOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfT1JJR0lOQUxfSU1BR0VfTE9BRDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BSSU5UX0RBVEFfVFJJTTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BTQ1JJUFRfUFJJTlRfTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0NPTlZfQUREX1NMQVNIOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9GVUxMX0VYUEFORF9QUklOVDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfRlVMTF9URVhUOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9MQVNUX0xJTkVfUFJJTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1BSSU5URVJfT0VNOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU1CRURfRk9OVFM6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5URVJfU0NSRUVOX0lOX09OTElORTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFUE9TSVRJT05fQUZURVJfTU9ESUZZOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSVNBTV9UUkFOU0FDVElPTjpcclxuICAgICAgICByZXR1cm4gKHZhbFswXSA9PT0gJ1knIHx8IHZhbFswXSA9PT0gJzEnKSA/IFwiWVwiIDogXCJOXCI7XHJcblxyXG4gICAgICAvLyB2YXJpYWJsZSBpcyBhIGNoYXJhY3RlclxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElNRV9TRVBBUkFUT1I6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JT1RJTUlORzpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RIT1VTQU5EX1NFUEFSQVRPUjpcclxuICAgICAgICByZXR1cm4gdmFsWzBdLnRvU3RyaW5nKCk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIHZhcmlhYmxlOlxyXG4gIC8vLyAgIDEuIHBhcnNlIHRoZSBzdHJpbmdcclxuICAvLy8gICAyLiBjcmVhdGUgdGhlIHBhcmFtL3ZhbHVlIGNvdXBsZXNcclxuICAvLy8gICAzLiBmb3IgZWFjaCBjb3VwbGU6XHJcbiAgLy8vICAgM2EuIHZlcmlmeSB0aGUgc2VjdGlvbiBuYW1lIGV4aXN0c1xyXG4gIC8vLyAgIDNiLiB2ZXJpZnkgdGhlIHZhcmlhYmxlIGlzIG5vdCB1bm1vZGlmaWVhYmxlXHJcbiAgLy8vICAgM2MuIHNldCB0aGUgdmFyaWFibGUgaW4gdGhlIGJhc2UgY2xhc3NcclxuICAvLy8gICAzZC4gY2hlY2sgYW5kIGNoYW5nZSB0aGUgZW52aXJvbm1lbnQgZGF0YSBpZiBuZWVkZWRcclxuICAvLy8gICA0LiBJZiByZXF1aXJlZCwgc2VuZCB0aGUgZGF0YSB0byB0aGUgc2VydmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlSW5pXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBhc3luYyBzZXQoczogc3RyaW5nLCB1cGRhdGVJbmk6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBhbGxPSzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgc2VuZFRvU2VydmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgbmFtZTogc3RyaW5nLCB2YWw7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHNlcnZlclZhbDogc3RyaW5nID0gcztcclxuXHJcbiAgICAvLyBTdHJpbmcgcGFyc2luZzogZXZlcnkgbnVtYmVyIGluICdvZmZzZXRzJyBzaG93cyB0aGUgb2Zmc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBuYW1lIG9yIHZhbHVlXHJcbiAgICAvLyAxc3Qgb2Zmc2V0IGlzIGFsd2F5cyAwXHJcbiAgICBsZXQgb2Zmc2V0czogbnVtYmVyW10gPSBuZXcgQXJyYXkocy5sZW5ndGggKyAxKTtcclxuICAgIGxldCBvZmZzZXRzQ2hhcnM6IHN0cmluZ1tdID0gbmV3IEFycmF5KHMubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgb2Zmc2V0c1swXSA9IDA7XHJcbiAgICBvZmZzZXRzQ2hhcnNbMF0gPSAncyc7XHJcbiAgICBsZXQgbmV4dE9mZnNldDogbnVtYmVyID0gMTtcclxuXHJcbiAgICAvLyBMb29wIG92ZXIgc3RyaW5nLCBmaW5kIGFsbCB0aGUgJz0nLCAnLCcgYW5kICcqJyB0aGF0IGFyZSBub3QgcHJlY2VlZGVkIGJ5IGEgJ1xcJy5cclxuICAgIGZvciAoaSA9IDE7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICgoc1tpXSA9PT0gJz0nIHx8IHNbaV0gPT09ICcsJykgJiYgc1tpIC0gMV0gIT09ICdcXFxcJykge1xyXG4gICAgICAgIG9mZnNldHNbbmV4dE9mZnNldF0gPSBpICsgMTtcclxuICAgICAgICBvZmZzZXRzQ2hhcnNbbmV4dE9mZnNldF0gPSBzW2ldO1xyXG4gICAgICAgIG5leHRPZmZzZXQrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc1tpXSA9PT0gJyonKSB7XHJcbiAgICAgICAgcyA9IE5TdHJpbmcuUmVtb3ZlKHMsIGksIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzW2ldID09PSAnXFxcXCcpIHtcclxuICAgICAgICBzID0gTlN0cmluZy5SZW1vdmUocywgaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgdGhlIGZpbmFsIG9mZnNldCBmb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nXHJcbiAgICBvZmZzZXRzW25leHRPZmZzZXRdID0gcy5sZW5ndGggKyAxO1xyXG4gICAgb2Zmc2V0c0NoYXJzW25leHRPZmZzZXRdID0gJ1xcMCc7XHJcbiAgICBuZXh0T2Zmc2V0Kys7XHJcblxyXG4gICAgLy8gZ28gb3ZlciB0aGUgY2FsY3VsYXRlZCBvZmZzZXRzLiB0aGUgbGFzdCBvbmUgaXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzbyBpdCBpcyBpZ25vcmVkXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dE9mZnNldCAtIDE7IGkrKykge1xyXG4gICAgICAvLyBnZXQgdGhlIHZhcmlhYmxlIG5hbWVcclxuICAgICAgbmFtZSA9IHMuc3Vic3RyKG9mZnNldHNbaV0sIG9mZnNldHNbaSArIDFdIC0gb2Zmc2V0c1tpXSAtIDEpO1xyXG5cclxuICAgICAgLy8gaXMgdGhlcmUgYSB2YWx1ZSwgb3IgaXMgaXQgYW4gZW1wdHkgdmFyaWFibGU/XHJcbiAgICAgIGlmIChzW29mZnNldHNbaSArIDFdIC0gMV0gPT09ICc9Jykge1xyXG4gICAgICAgIGkrKztcclxuICAgICAgICBsZXQgdmFsSW5pdDogbnVtYmVyID0gaTtcclxuICAgICAgICBsZXQgYWxsb3dlZFNlcGFyYXRvcnM6IG51bWJlciA9IHRoaXMuZ2V0QWxsb3dlZFNlcGFyYXRvcnMobmFtZSk7XHJcbiAgICAgICAgZm9yIChsZXQgc2VwOiBudW1iZXIgPSAwOyBzZXAgPCBhbGxvd2VkU2VwYXJhdG9yczsgc2VwKyspIHtcclxuICAgICAgICAgIGlmIChvZmZzZXRzQ2hhcnNbaSArIDFdID09PSAnLCcpXHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdldCB0aGUgdmFsdWVcclxuICAgICAgICB2YWwgPSBzLnN1YnN0cihvZmZzZXRzW3ZhbEluaXRdLCBvZmZzZXRzW2kgKyAxXSAtIG9mZnNldHNbdmFsSW5pdF0gLSAxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdmFsID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIGlzIGl0IGEgcmVzZXJ2ZWQgdmFyaWFibGU/XHJcbiAgICAgIGlmICh0aGlzLmlzUmVzZXJ2ZWRMb2dpY2FsTmFtZShuYW1lKSkge1xyXG4gICAgICAgIGFsbE9LID0gZmFsc2U7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc2VjdGlvbiBuYW1lLCBhZGQgdGhlIGRlZmF1bHQgb25lXHJcbiAgICAgIGlmIChuYW1lWzBdICE9PSAnWycpXHJcbiAgICAgICAgbmFtZSA9IE5TdHJpbmcuSW5zZXJ0KG5hbWUsIDAsIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUyk7XHJcblxyXG4gICAgICAvLyBJZiBpdCdzIG5vdCBhIGxvZ2ljYWwgbmFtZSwgaXQgaXMgY2FzZSBpbnNlbnNpdGl2ZVxyXG4gICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9MT0dJQ0FMX05BTUVTX0JSQUNLRVRTKSlcclxuICAgICAgICBuYW1lID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBuYW1lID0gbmFtZS50cmltKCk7XHJcbiAgICAgIHZhbCA9IHZhbC50cmltKCk7XHJcbiAgICAgIHNlbmRUb1NlcnZlciA9IHRydWU7XHJcbiAgICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHZhbCkgfHxcclxuICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUykpIHtcclxuICAgICAgICAvLyBJZiB3ZSdyZSBnb2luZyB0byBzZW5kIGl0IHRvIHRoZSBzZXJ2ZXIgTk9XLCB3ZSBkb24ndCBuZWVkIGl0IGluIHRoZSBjaGFuZ2VzIGxpc3RcclxuICAgICAgICBzdXBlci5zZXRWYWx1ZShuYW1lLCBuZXcgTWlycm9yU3RyaW5nKHZhbCksICF1cGRhdGVJbmkpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tTZXRJbkVudmlyb25tZW50KG5hbWUsIHZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHN1cGVyLnJlbW92ZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBzaG91bGQgdXBkYXRlIHRoZSBpbmkgZmlsZSwgYW5kIHdlIGhhdmUgbW9kaWZpZWQgdmFyaWFibGVzLCB1cGRhdGUgdGhlIHNlcnZlci5cclxuICAgIGlmICh1cGRhdGVJbmkgJiYgc2VuZFRvU2VydmVyKSB7XHJcbiAgICAgIGxldCBjbWQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlSW5pcHV0Rm9yY2VXcml0ZUNvbW1hbmQoc2VydmVyVmFsKTtcclxuICAgICAgQWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLmdldE1HRGF0YSgwKS5DbWRzVG9TZXJ2ZXIuQWRkKGNtZCk7XHJcblxyXG4gICAgICAvLyBleGVjdXRlIGNsaWVudCB0byBzZXJ2ZXIgY29tbWFuZHNcclxuICAgICAgYXdhaXQgUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuR2V0SW5zdGFuY2UoKS5FeGVjdXRlKENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24uT05MWV9DT01NQU5EUyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWxsT0s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2tzIGlmIHRoZSB2YXJpYWJsZSBpcyBhIHJlc2VydmVkIGxvZ2ljYWwgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+IGVudiB2YXJpYWJsZSBuYW1lIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIGl0IGlzIHJlc2VydmVkIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGlzUmVzZXJ2ZWRMb2dpY2FsTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcbiAgICAvLyBSZXNlcnZlZCBsb2dpY2FsIG5hbWVzIG1heSBiZSBhY2Nlc3NlZCB3aXRob3V0IGEgc2VjdGlvbiBuYW1lLCBidXQgYXJlIHN0b3JlZCBhcyBsb2dpY2FsIG5hbWVzLFxyXG4gICAgLy8gc28gaWYgd2UgZG9uJ3QgaGF2ZSBhIHNlY3Rpb24gbmFtZSwgaW5zZXJ0IHRoZSBsb2dpY2FsIHNlY3Rpb24gYW5kIHNlYXJjaCB0aGUgdGFibGVcclxuICAgIGlmICghbmFtZS5zdGFydHNXaXRoKFwiW1wiKSkge1xyXG4gICAgICBuYW1lID0gTlN0cmluZy5JbnNlcnQobmFtZSwgMCwgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUyk7XHJcbiAgICAgIGlmICh0aGlzLnZhbHVlcy5Db250YWluc0tleShuYW1lKSAmJiB0aGlzLnZhbHVlcy5nZXRfSXRlbShuYW1lKS5pc1Jlc2VydmVkKCkpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlcGVyYXRvcnMgYWxsb3dlZCBmb3IgZW50cmllcyBvZiB0aGlzIHNlY3Rpb24uIG51bWJlciBhcmUgYmFzZWQgb25cclxuICAvLy8gICBkYXRhIGluIGVudl9rZXJuLmNwcDogZW52X2RlZl9wYXJzZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0QWxsb3dlZFNlcGFyYXRvcnMobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmIChuYW1lLmNoYXJBdCgwKSAhPT0gJ1snKVxyXG4gICAgICByZXR1cm4gMDtcclxuXHJcbiAgICBsZXQgc2VjdGlvbjogc3RyaW5nID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5pbmRleE9mKCddJykgLyonXScqLyAtIDEpO1xyXG4gICAgbGV0IHBhcmFtOiBzdHJpbmcgPSBuYW1lLnN1YnN0cihuYW1lLmluZGV4T2YoJ10nKSAvKiddJyovICsgMSk7XHJcblxyXG4gICAgc3dpdGNoIChzZWN0aW9uLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlY6XHJcbiAgICAgICAgaWYgKHBhcmFtLnRvVXBwZXJDYXNlKCkgPT09IENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTEFOR1VBR0UudG9VcHBlckNhc2UoKSlcclxuICAgICAgICAgIHJldHVybiA5OTk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfU1lTVEVNUzpcclxuICAgICAgICByZXR1cm4gODtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19EQk1TOlxyXG4gICAgICAgIHJldHVybiAxMztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19TRVJWRVJTOlxyXG4gICAgICAgIHJldHVybiA2O1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0NPTU1TOlxyXG4gICAgICAgIHJldHVybiAyO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1BSSU5URVJTOlxyXG4gICAgICAgIHJldHVybiAzO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1NZU1RFTV9NRU5VOlxyXG4gICAgICAgIHJldHVybiAxMTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19EQVRBQkFTRVM6XHJcbiAgICAgICAgcmV0dXJuIDIxO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0xBTkdVQUdFOlxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1NFUlZJQ0VTOlxyXG4gICAgICAgIHJldHVybiA4O1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX1RPT0xTX01FTlU6XHJcbiAgICAgICAgcmV0dXJuIDc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2sgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGNoYW5nZSBhZmZlY3RzIHRoZSBlbnZpcm9ubWVudCB2YWx1ZXMsXHJcbiAgLy8vICAgYW5kIGNoYW5nZSB0aGUgZW52aXJvbm1lbnQgZGF0YSBhY2NvcmRpbmdseVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjaGVja1NldEluRW52aXJvbm1lbnQobmFtZTogc3RyaW5nLCB2YWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKG5hbWUuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMpKSB7XHJcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cihDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMubGVuZ3RoKTtcclxuXHJcbiAgICAgIHN3aXRjaCAobmFtZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFQ0lNQUxfU0VQQVJBVE9SOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0RGVjaW1hbFNlcGFyYXRvcih2YWxbMF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RBVEU6XHJcbiAgICAgICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLnNldERhdGVDaGFyKHZhbFswXS5jaGFyQ29kZUF0KDApKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USU1FOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0VGltZVNlcGFyYXRvcih2YWxbMF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09XTkVSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0T3duZXIodmFsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFTU9ERTpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldERhdGVNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSwgdmFsWzBdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5UVVJZOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0Q2VudHVyeShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksIE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSURMRVRJTUU6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRJZGxlVGltZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksIE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVBEX0lOX1FVRVJZX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0QWxsb3dVcGRhdGVJblF1ZXJ5TW9kZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksXHJcbiAgICAgICAgICAgIHZhbFswXSA9PT0gJzEnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DUkVfSU5fTU9ESUZZX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0QWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpLFxyXG4gICAgICAgICAgICB2YWxbMF0gPT09ICcxJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVRfTE9XRVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQoTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX0lOQUNUSVZJVFlfV0FSTklOR19USU1FX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0Q29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZShOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfVU5MT0FEX1RJTUVPVVRfTE9XRVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRDb250ZXh0VW5sb2FkVGltZW91dChOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RFUk1JTkFMOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0VGVybWluYWwoTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIGxvZ2ljYWwgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj5pbmRleCBvZiB0aGUgbG9naWNhbCBuYW1lPC9wYXJhbT5cclxuICB0cmFuc2xhdGUobG9naWNhbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGxvZ2ljYWxOYW1lKTtcclxuICAgIHRoaXMubG9nKHN0cmluZ0J1aWxkZXIpO1xyXG4gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJpbmdCbGRyXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGxvZyhzdHJpbmdCbGRyOiBTdHJpbmdCdWlsZGVyKTogdm9pZCB7XHJcbiAgICBsZXQgZmluaXNoZWQ6IGJvb2xlYW47XHJcbiAgICBkbyB7XHJcbiAgICAgIGxldCBvZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcclxuICAgICAgd2hpbGUgKG9mZnNldCA8IHN0cmluZ0JsZHIuTGVuZ3RoICYmIHN0cmluZ0JsZHIuZ2V0X0l0ZW0ob2Zmc2V0KSA+ICdcXDAnLyonXHUwMDAwJyovKSB7XHJcblxyXG4gICAgICAgIC8vICckJyB3YXMgZGVmaW5lIHRoZSBsb2dpY2FsIG5hbWUsIG5vdCB1c2VkIGFueSBtb3JlXHJcbiAgICAgICAgaWYgKHN0cmluZ0JsZHIuZ2V0X0l0ZW0ob2Zmc2V0KSA9PT0gJyUnKSB7XHJcbiAgICAgICAgICBsZXQgb2xkTGVuZ3RoOiBudW1iZXIgPSBzdHJpbmdCbGRyLkxlbmd0aDtcclxuICAgICAgICAgIG9mZnNldCA9IHRoaXMubG9nX3RyYW5zKHN0cmluZ0JsZHIsIG9mZnNldCk7XHJcbiAgICAgICAgICBpZiAob2xkTGVuZ3RoICE9PSBzdHJpbmdCbGRyLkxlbmd0aClcclxuICAgICAgICAgICAgZmluaXNoZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2hpbGUgKCFmaW5pc2hlZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+PC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyaW5nQmxkclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvZmZzZXRcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgbG9nX3RyYW5zKHN0cmluZ0JsZHI6IFN0cmluZ0J1aWxkZXIsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBpZ25vcmVUcmFuczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHN0YXJ0U3ltOiBudW1iZXIgPSBvZmZzZXQ7XHJcbiAgICBsZXQgZW5kU3ltOiBudW1iZXIgPSBvZmZzZXQgKyAxO1xyXG5cclxuICAgIC8vIGZpbmQgdGhlIGVuZCBvZiB0aGUgc3ltYm9sXHJcbiAgICB3aGlsZSAoZW5kU3ltIDwgc3RyaW5nQmxkci5MZW5ndGgpIHtcclxuICAgICAgaWYgKHN0cmluZ0JsZHIuZ2V0X0l0ZW0oZW5kU3ltKSA9PT0gJyUnKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBlbmRTeW0rKztcclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgMSB0byB0aGUgbGVuIHRvIGdldCB0byB0aGUgZW5kIG9mIHRoZSBzeW1ib2wgb3IgaWYgbm8gZW5kIHN5bWJvbCB3YXMgZm91bmQgYWRkXHJcbiAgICBpZiAoZW5kU3ltID49IHN0cmluZ0JsZHIuTGVuZ3RoKSB7XHJcbiAgICAgIG9mZnNldCA9IGVuZFN5bTtcclxuICAgICAgaWdub3JlVHJhbnMgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc3RyaW5nQmxkci5nZXRfSXRlbShlbmRTeW0pICE9PSAnJScpXHJcbiAgICAgIG9mZnNldCsrO1xyXG5cclxuICAgIGlmICghaWdub3JlVHJhbnMpIHtcclxuICAgICAgbGV0IHN5bTogc3RyaW5nID0gQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUyArXHJcbiAgICAgICAgc3RyaW5nQmxkci5Ub1N0cmluZyhzdGFydFN5bSArIDEsIGVuZFN5bSAtIHN0YXJ0U3ltIC0gMSk7XHJcbiAgICAgIGxldCB0cmFuczogc3RyaW5nID0gdGhpcy5nZXQoc3ltKTtcclxuXHJcbiAgICAgIC8vIHNldCB0aGUgb2Zmc2V0IHRvIHRoZSBuZXh0IGNoYXIgYWZ0ZXIgdGhlIGVuZGluZyAlIG9mIHRoZSBuYW1lXHJcbiAgICAgIGlmICh0cmFucyA9PT0gbnVsbCkge1xyXG4gICAgICAgIHN0cmluZ0JsZHIuUmVwbGFjZShzdHJpbmdCbGRyLlRvU3RyaW5nKG9mZnNldCwgZW5kU3ltICsgMSAtIG9mZnNldCksIFwiXCIsIG9mZnNldCwgZW5kU3ltICsgMSAtIG9mZnNldCk7XHJcbiAgICAgICAgb2Zmc2V0ICs9IDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3RyaW5nQmxkci5SZXBsYWNlKHN0cmluZ0JsZHIuVG9TdHJpbmcoc3RhcnRTeW0sIGVuZFN5bSArIDEgLSBzdGFydFN5bSksIHRyYW5zLCBzdGFydFN5bSxcclxuICAgICAgICAgIGVuZFN5bSArIDEgLSBzdGFydFN5bSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { Hashtable, NString } from "@magic-xpa/mscorelib";
|
|
2
|
+
import { Hashtable, NString, isUndefined } from "@magic-xpa/mscorelib";
|
|
3
3
|
import { JSON_Utils, Logger, Misc, MsgInterface, StrUtil, XMLConstants } from "@magic-xpa/utils";
|
|
4
4
|
import { ConstInterface } from "../ConstInterface";
|
|
5
5
|
import { CommandsProcessorManager } from "../CommandsProcessorManager";
|
|
6
|
-
import { isUndefined } from "util";
|
|
7
6
|
const MLS_EOF_CHARS_TO_READ = 10;
|
|
8
7
|
const START_TAG = "<ErrorCodes>";
|
|
9
8
|
const END_TAG = "</ErrorCodes>";
|
|
@@ -227,4 +226,4 @@ export class LanguageData {
|
|
|
227
226
|
}
|
|
228
227
|
}
|
|
229
228
|
LanguageData.Instance = new LanguageData();
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGFuZ3VhZ2VEYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9lbnYvTGFuZ3VhZ2VEYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBQzFHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR2pDLE1BQU0scUJBQXFCLEdBQVcsRUFBRSxDQUFDO0FBQ3pDLE1BQU0sU0FBUyxHQUFXLGNBQWMsQ0FBQztBQUN6QyxNQUFNLE9BQU8sR0FBVyxlQUFlLENBQUM7QUFFeEMsTUFBTSxPQUFPLFlBQVk7SUFVdkI7UUFUUSxtQkFBYyxHQUE4QixJQUFJLENBQUM7UUFDakQsMEJBQXFCLEdBQVcsSUFBSSxDQUFDO1FBQ3JDLHNCQUFpQixHQUFXLElBQUksQ0FBQztRQUNqQyxnQkFBVyxHQUFXLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUFXLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUE4QixJQUFJLENBQUM7SUFLdEQsQ0FBQztJQUtLLFFBQVEsQ0FBQyxNQUFpQjs7WUFFOUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFO2FBQzFEO1lBRUQsTUFBTSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FB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LEdBQWEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ2pFLEtBQUssSUFBSSxPQUFPLEdBQVcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUU7NEJBQ25FLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNoRSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUMxRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUk7Z0NBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQzt5QkFDakQ7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE1BQU0sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekI7UUFDSCxDQUFDO0tBQUE7O0FBaFNNLHFCQUFRLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0hhc2h0YWJsZSwgTlN0cmluZ30gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7SlNPTl9VdGlscywgTG9nZ2VyLCBNaXNjLCBNc2dJbnRlcmZhY2UsIFN0clV0aWwsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tIFwiLi4vQ29uc3RJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXJ9IGZyb20gXCIuLi9Db21tYW5kc1Byb2Nlc3Nvck1hbmFnZXJcIjtcclxuaW1wb3J0IHtpc1VuZGVmaW5lZH0gZnJvbSBcInV0aWxcIjtcclxuaW1wb3J0IHtJTGFuZ3VhZ2VEYXRhfSBmcm9tIFwiLi9JTGFuZ3VhZ2VEYXRhXCI7XHJcblxyXG5jb25zdCBNTFNfRU9GX0NIQVJTX1RPX1JFQUQ6IG51bWJlciA9IDEwO1xyXG5jb25zdCBTVEFSVF9UQUc6IHN0cmluZyA9IFwiPEVycm9yQ29kZXM+XCI7XHJcbmNvbnN0IEVORF9UQUc6IHN0cmluZyA9IFwiPC9FcnJvckNvZGVzPlwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIExhbmd1YWdlRGF0YSBpbXBsZW1lbnRzIElMYW5ndWFnZURhdGEge1xyXG4gIHByaXZhdGUgX2NvbnN0TWVzc2FnZXM6IEhhc2h0YWJsZTxzdHJpbmcsIHN0cmluZz4gPSBudWxsO1xyXG4gIHByaXZhdGUgX2NvbnN0TWVzc2FnZXNDb250ZW50OiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2NvbnN0TWVzc2FnZXNVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbWxzQ29udGVudDogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9tbHNGaWxlVXJsOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX21sc1N0cmluZ3M6IEhhc2h0YWJsZTxzdHJpbmcsIHN0cmluZz4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgSW5zdGFuY2U6IExhbmd1YWdlRGF0YSA9IG5ldyBMYW5ndWFnZURhdGEoKTtcclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyByZXRyaWV2ZSB0aGUgY29udGVudCBvZiB0aGUgJ2xhbmd1YWdlJyBlbGVtZW50IDxsYW5ndWFnZT4uLi4uLjwvbGFuZ3VhZ2U+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBmaWxsRGF0YShwYXJzZXI6IFhtbFBhcnNlcik6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpKSkge1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHRoaXMuSW5pdENvbnN0TWVzc2FnZXNUYWJsZSgpO1xyXG4gICAgYXdhaXQgdGhpcy5maWxsTWxzTWVzc2FnZXNUYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRvIGV4dHJhY3QgdGhlIHVybCBvZiB0aGUgY29uc3QgbWVzc2FnZXMgZnJvbSB0aGUgeG1sIGZyb20gPGxhbmd1YWdlPjxjb25zdG1lc3NhZ2VzPioqKjwvY29uc3RtZXNzYWdlcz48L2xhbmd1YWdlPlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb3VuZFRhZ05hbWVcIj5wb3NzaWJsZSB0YWcgbmFtZSwgbmFtZSBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkPC9wYXJhbT5cclxuICBwcml2YXRlIGluaXRJbm5lck9iamVjdHMocGFyc2VyOiBYbWxQYXJzZXIsIGZvdW5kVGFnTmFtZTogU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBzd2l0Y2ggKGZvdW5kVGFnTmFtZSkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19MQU5HVUFHRTpcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05TVE1FU1NBR0VTOiB7XHJcbiAgICAgICAgbGV0IGVuZFVybFZhbHVlOiBudW1iZXI7XHJcblxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICAgICAgICBlbmRVcmxWYWx1ZSA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgdGhpcy5fY29uc3RNZXNzYWdlc1VybCA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kVXJsVmFsdWUpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kVXJsVmFsdWUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfQ09OU1RNRVNTQUdFU0NPTlRFTlQ6IHtcclxuICAgICAgICBsZXQgZW5kVXJsVmFsdWU6IG51bWJlcjtcclxuXHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIGVuZFVybFZhbHVlID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05TVE1FU1NBR0VTQ09OVEVOVCwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSAtIDI7XHJcbiAgICAgICAgdGhpcy5fY29uc3RNZXNzYWdlc0NvbnRlbnQgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZFVybFZhbHVlKTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZFVybFZhbHVlKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX01MU19DT05URU5UOiB7XHJcbiAgICAgICAgbGV0IGVuZFVybFZhbHVlOiBudW1iZXI7XHJcblxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICAgICAgICBlbmRVcmxWYWx1ZSA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfTUxTX0NPTlRFTlQsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgLSAyO1xyXG4gICAgICAgIHRoaXMuX21sc0NvbnRlbnQgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZFVybFZhbHVlKTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZFVybFZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gQSBuZXcgTUxTIGhhcyBhcnJpdmVkLCBpZiBtbHNTdHJpbmdzIGhhcyB2YWx1ZXMsIGNsZWFuIGl0LlxyXG4gICAgICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHRoaXMuX21sc0NvbnRlbnQpKSB7XHJcbiAgICAgICAgICAvLyBjbGVhciB0aGUgZXhpc3RpbmcgbWxzIChpZiBpdCBleGlzdHMpXHJcbiAgICAgICAgICBpZiAodGhpcy5fbWxzU3RyaW5ncyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MuQ2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5fbWxzU3RyaW5ncyA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiBuZXcgTUxTIGlzIGFuIGVtcHR5IHN0cmluZywgY2xlYW4gdGhlIE1MUyBkYXRhXHJcbiAgICAgICAgaWYgKE5TdHJpbmcuSXNOdWxsT3JFbXB0eSh0aGlzLl9tbHNDb250ZW50KSAmJiB0aGlzLl9tbHNDb250ZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuX21sc0NvbnRlbnQgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX21sc1N0cmluZ3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzLkNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX01MU19GSUxFX1VSTDoge1xyXG4gICAgICAgIGxldCBlbmRVcmxWYWx1ZTogbnVtYmVyO1xyXG5cclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAgICAgZW5kVXJsVmFsdWUgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgIHRoaXMuX21sc0ZpbGVVcmwgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZFVybFZhbHVlKS50cmltKCk7XHJcblxyXG4gICAgICAgIC8vIEEgbmV3IE1MUyBoYXMgYXJyaXZlZCwgaWYgbWxzU3RyaW5ncyBoYXMgdmFsdWVzLCBjbGVhbiBpdC5cclxuICAgICAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh0aGlzLl9tbHNGaWxlVXJsKSkge1xyXG4gICAgICAgICAgLy8gY2xlYXIgdGhlIGV4aXN0aW5nIG1scyAoaWYgaXQgZXhpc3RzKVxyXG4gICAgICAgICAgaWYgKHRoaXMuX21sc1N0cmluZ3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzLkNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBuZXcgTUxTIGlzIGFuIGVtcHR5IHN0cmluZywgY2xlYW4gdGhlIE1MUyBkYXRhXHJcbiAgICAgICAgZWxzZSBpZiAoTlN0cmluZy5Jc051bGxPckVtcHR5KHRoaXMuX21sc0ZpbGVVcmwpICYmIHRoaXMuX21sc0ZpbGVVcmwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5fbWxzRmlsZVVybCA9IG51bGw7XHJcbiAgICAgICAgICBpZiAodGhpcy5fbWxzU3RyaW5ncyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MuQ2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5fbWxzU3RyaW5ncyA9IG51bGw7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRVcmxWYWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTlNUTUVTU0FHRVNfRU5EOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19NTFNfRklMRV9VUkxfRU5EOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05TVE1FU1NBR0VTQ09OVEVOVF9FTkQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX01MU19DT05URU5UX0VORDpcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19MQU5HVUFHRV9FTkQ6XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gTGFuZ3VhZ2VEYXRhLmluaXRJbm5lck9iamVjdHMoKTogXCIgKyBmb3VuZFRhZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gUmV0dXJucyB0aGUgY29uc3QgbXNnIGJ5IG1zZ0lkLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibXNnSWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0Q29uc3RNZXNzYWdlKG1zZ0lkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gTWFwIGRlZmF1bHQgbWVzc2FnZSBJRCB0byBjb3JyZXNwb25kaW5nIG1lc3NhZ2Ugc3RyaW5nLlxyXG4gICAgaWYgKHRoaXMuX2NvbnN0TWVzc2FnZXMgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fY29uc3RNZXNzYWdlcyA9IG5ldyBIYXNodGFibGU8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPD0gTXNnSW50ZXJmYWNlLkRlZmF1bHRNZXNzYWdlcy5sZW5ndGggLSAxOyBpID0gaSArIDEpIHtcclxuICAgICAgICB0aGlzLl9jb25zdE1lc3NhZ2VzLnNldF9JdGVtKE1zZ0ludGVyZmFjZS5EZWZhdWx0TWVzc2FnZXNbaV0uTXNnSUQsIE1zZ0ludGVyZmFjZS5EZWZhdWx0TWVzc2FnZXNbaV0uTXNnU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiA8c3RyaW5nPnRoaXMuX2NvbnN0TWVzc2FnZXMuZ2V0X0l0ZW0obXNnSWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBJbml0aWFsaXplIHRoZSBjb25zdCBtc2cgdGFibGUgZnJvbSBlaXRoZXIgdGhlIFVSTCBvciB0aGUgWE1MIGNvbnRlbnRzLiA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBJbml0Q29uc3RNZXNzYWdlc1RhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IG1zZ3NJbkNvbW1lbnRTdHJpbmc6IFN0cmluZyA9IG51bGw7XHJcbiAgICAgIGlmICh0aGlzLl9jb25zdE1lc3NhZ2VzVXJsICE9IG51bGwgfHwgdGhpcy5fY29uc3RNZXNzYWdlc0NvbnRlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25zdE1lc3NhZ2VzVXJsICE9IG51bGwpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGdldCB0aGUgY29udGVudCBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgICAgbXNnc0luQ29tbWVudFN0cmluZyA9IGF3YWl0IENvbW1hbmRzUHJvY2Vzc29yTWFuYWdlci5HZXRDb250ZW50KHRoaXMuX2NvbnN0TWVzc2FnZXNVcmwsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJVbmtub3duIG1lc3NhZ2UgZmlsZTogXFxcInswfVxcXCJcIiwgdGhpcy5fY29uc3RNZXNzYWdlc1VybCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vIE5vIGNhY2hlIC0gd2UgaGF2ZSBhbGwgdGhlIGRhdGEgaGVyZVxyXG4gICAgICAgICAgbXNnc0luQ29tbWVudFN0cmluZyA9IHRoaXMuX2NvbnN0TWVzc2FnZXNDb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1zZ3NJbkNvbW1lbnRTdHJpbmcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjb21tZW50IHdyYXBwZXJcclxuICAgICAgICAgIGxldCBzdGFydERhdGE6IG51bWJlciA9IG1zZ3NJbkNvbW1lbnRTdHJpbmcuaW5kZXhPZihTVEFSVF9UQUcpO1xyXG4gICAgICAgICAgbGV0IGVuZERhdGE6IG51bWJlciA9IG1zZ3NJbkNvbW1lbnRTdHJpbmcuaW5kZXhPZihFTkRfVEFHKSArIEVORF9UQUcubGVuZ3RoO1xyXG4gICAgICAgICAgbGV0IHJldHJpZXZlZENvbnN0TWVzc2FnZXM6IHN0cmluZyA9IG1zZ3NJbkNvbW1lbnRTdHJpbmcuc3Vic3RyKHN0YXJ0RGF0YSwgKGVuZERhdGEpIC0gKHN0YXJ0RGF0YSkpO1xyXG5cclxuICAgICAgICAgIC8vIHBhcnNlICdjb25zdE1lc3NhZ2VzJyBpbnRvICdsYW5ndWFnZU1lc3NhZ2VzJ1xyXG4gICAgICAgICAgdGhpcy5maWxsQ29uc3RNZXNzYWdlc1RhYmxlKHJldHJpZXZlZENvbnN0TWVzc2FnZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcIidjb25zdE1lc3NhZ2VzVXJsJyBhbmQgJ2NvbnN0TWVzc2FnZXNDb250ZW50JyB3ZXJlIG5vdCBpbml0aWFsaXplZC5cIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleCkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmVhZCB0aGUgY29uc3QgbXNncyBmcm9tIHRoZSB4bWwgYW5kIGZpbGwgdGhlIGNvbnN0IG1zZyB0YWJsZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29uc3RNZXNzYWdlc1wiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBmaWxsQ29uc3RNZXNzYWdlc1RhYmxlKGNvbnN0TWVzc2FnZXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGNvbnN0TWVzc2FnZXMgIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9jb25zdE1lc3NhZ2VzID0gbmV3IEhhc2h0YWJsZSgpO1xyXG4gICAgICAgIEpTT05fVXRpbHMuSlNPTkZyb21YTUwoY29uc3RNZXNzYWdlcywgdGhpcy5GaWxsQ29uc3RNZXNzYWdlc0Zyb21KU09OLmJpbmQodGhpcykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2coZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBGaWxsQ29uc3RNZXNzYWdlc0Zyb21KU09OKGVycm9yLCByZXN1bHQpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gcGFyc2luZyB0aGUgWE1MLFxyXG4gICAgaWYgKGVycm9yICE9IG51bGwpIHtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVycm9yTWVzc2FnZXMgPSByZXN1bHRbJ0Vycm9yQ29kZXMnXVsnRXJyb3JNZXNzYWdlJ107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlcnJvck1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBlcnJvcklkID0gZXJyb3JNZXNzYWdlc1tpXVsnJCddWydpZCddO1xyXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlc1tpXVsnXyddO1xyXG5cclxuICAgICAgdGhpcy5fY29uc3RNZXNzYWdlcy5zZXRfSXRlbShlcnJvcklkLCAoaXNVbmRlZmluZWQoZXJyb3JNZXNzYWdlKSA/IFwiXCIgOiBlcnJvck1lc3NhZ2UudHJpbSgpKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJuIHRoZSB0cmFuc2xhdGlvbiBvbiB0aGUgZnJvbVN0cmluZy4gSWYgdGhlIG1sc1N0cmluZ3NfIHRhYmxlIGlzIGVtcHR5LCByZWFkIGl0IGZyb20gdGhlIGZpbGUgYSBhbmQgZmlsbCBpdC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZnJvbVN0cmluZ1wiPjwvcGFyYW0+XHJcbiAgdHJhbnNsYXRlKGZyb21TdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9TdHJpbmc6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX21sc1N0cmluZ3MgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZyb21TdHJpbmc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdG9TdHJpbmcgPSB0aGlzLl9tbHNTdHJpbmdzLmdldF9JdGVtKGZyb21TdHJpbmcpO1xyXG5cclxuICAgICAgaWYgKHRvU3RyaW5nID09IG51bGwpXHJcbiAgICAgICAgdG9TdHJpbmcgPSBmcm9tU3RyaW5nO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZpbGwgdGhlIG1sc1N0cmluZ3NfIHRhYmxlLiBHZXQgdGhlIGZpbGUsIHJlYWQgdGhlIG51bWJlciBvZiB0cmFuc2xhdGlvbiBmcm9tIGl0cyBsb2NhdGlvbiBhdCB0aGUgbGFzdFxyXG4gIC8vLyAgIGxpbmUgb2YgdGhlIGZpbGUuIFRoZW4gbG9vcCBvbiB0aGUgZmlsZSBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGZpbGwgdGhlIHRhYmxlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgZmlsbE1sc01lc3NhZ2VzVGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5fbWxzQ29udGVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21sc0NvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGNvbnRlbnRMZW46IG51bWJlciA9IHRoaXMuX21sc0NvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgbGV0IGxpbmVQYWlyczogbnVtYmVyID0gMDtcclxuICAgICAgICAgIGxldCBzcmNMaW5lOiBTdHJpbmcgPSB0aGlzLl9tbHNDb250ZW50ICsgMztcclxuICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MgPSBuZXcgSGFzaHRhYmxlPHN0cmluZywgc3RyaW5nPigpO1xyXG4gICAgICAgICAgLy8gcmVhZCB0aGUgbGFzdCBsaW5lXHJcbiAgICAgICAgICBsZXQgbGluZXNTdHI6IFN0cmluZyA9IHRoaXMuX21sc0NvbnRlbnQuc3Vic3RyaW5nKHRoaXMuX21sc0NvbnRlbnQubGVuZ3RoIC0gTUxTX0VPRl9DSEFSU19UT19SRUFELCA4KTtcclxuICAgICAgICAgIC8vIHRoZSBudW1iZXIgb2YgcGFpcnMgaXMgaW4gaGV4LCBzbyBjb252ZXJ0IGl0IHRvIGludC5cclxuICAgICAgICAgIGxpbmVQYWlycyA9IHBhcnNlSW50KGxpbmVzU3RyLnRvU3RyaW5nKCksIDE2KTtcclxuICAgICAgICAgIGxldCB0b2tlbnM6IFN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShzcmNMaW5lLnRvU3RyaW5nKCksIFwiXFxuXCIpO1xyXG4gICAgICAgICAgZm9yIChsZXQgbGluZTogbnVtYmVyID0gMDsgbGluZSA8IGxpbmVQYWlycyAqIDI7IGxpbmUgKz0gMikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbWxzU3RyaW5ncy5nZXRfSXRlbSh0b2tlbnNbbGluZV0udG9TdHJpbmcoKSkgPT0gbnVsbClcclxuICAgICAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzLnNldF9JdGVtKHRva2Vuc1tsaW5lXS50b1N0cmluZygpLCB0b2tlbnNbbGluZSArIDFdLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKHRoaXMuX21sc0ZpbGVVcmwgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBjb250ZW50U3RyOiBzdHJpbmcgPSBhd2FpdCBDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXIuR2V0Q29udGVudCh0aGlzLl9tbHNGaWxlVXJsLCB0cnVlKTtcclxuICAgICAgICBsZXQgYnVmZmVyOiBTdHJpbmcgPSBjb250ZW50U3RyO1xyXG4gICAgICAgIGlmIChidWZmZXIgIT0gbnVsbCAmJiBidWZmZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGNvbnRlbnRMZW46IG51bWJlciA9IGJ1ZmZlci5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzID0gbmV3IEhhc2h0YWJsZTxzdHJpbmcsIHN0cmluZz4oKTtcclxuICAgICAgICAgIC8vIHJlYWQgdGhlIGxhc3QgbGluZVxyXG4gICAgICAgICAgbGV0IGxpbmVzU3RyID0gYnVmZmVyLnN1YnN0cihjb250ZW50TGVuIC0gTUxTX0VPRl9DSEFSU19UT19SRUFELCA4KTtcclxuICAgICAgICAgIC8vIHRoZSBudW1iZXIgb2YgcGFpcnMgaXMgaW4gaGV4LCBzbyBjb252ZXJ0IGl0IHRvIGludC5cclxuICAgICAgICAgIGxldCBsaW5lUGFpcnMgPSBwYXJzZUludChsaW5lc1N0ciwgMTYpO1xyXG4gICAgICAgICAgLy8gbm93IGZyb20gdGhlIGJlZ2luaW5nIChza2lwcGluZyB0aGUgVVRGIEJPTSBieXRlcyksIGxvb3Agb24gdGhlIHBhaXJzIGFuZCBmaWxsIHRoZSBoYXNoIG1hcFxyXG4gICAgICAgICAgbGV0IHNyY0xpbmU6IHN0cmluZztcclxuICAgICAgICAgIGxldCB0cmFuc0xpbmU6IHN0cmluZztcclxuICAgICAgICAgIGxldCB0b2tlbnM6IHN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShidWZmZXIudG9TdHJpbmcoKSwgXCJcXG5cIik7XHJcbiAgICAgICAgICBmb3IgKGxldCBwYWlyTnVtOiBudW1iZXIgPSAwOyBwYWlyTnVtIDwgbGluZVBhaXJzICogMjsgcGFpck51bSArPSAyKSB7XHJcbiAgICAgICAgICAgIHNyY0xpbmUgPSB0b2tlbnNbcGFpck51bV0uc3Vic3RyKDAsIHRva2Vuc1twYWlyTnVtXS5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgdHJhbnNMaW5lID0gdG9rZW5zW3BhaXJOdW0gKyAxXS5zdWJzdHIoMCwgdG9rZW5zW3BhaXJOdW0gKyAxXS5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX21sc1N0cmluZ3MuZ2V0X0l0ZW0oc3JjTGluZSkgPT0gbnVsbClcclxuICAgICAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzLnNldF9JdGVtKHNyY0xpbmUsIHRyYW5zTGluZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhlKTtcclxuICAgICAgTWlzYy5Xcml0ZVN0YWNrVHJhY2UoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGFuZ3VhZ2VEYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9lbnYvTGFuZ3VhZ2VEYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUMxRyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFHckUsTUFBTSxxQkFBcUIsR0FBVyxFQUFFLENBQUM7QUFDekMsTUFBTSxTQUFTLEdBQVcsY0FBYyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFXLGVBQWUsQ0FBQztBQUV4QyxNQUFNLE9BQU8sWUFBWTtJQVV2QjtRQVRRLG1CQUFjLEdBQThCLElBQUksQ0FBQztRQUNqRCwwQkFBcUIsR0FBVyxJQUFJLENBQUM7UUFDckMsc0JBQWlCLEdBQVcsSUFBSSxDQUFDO1FBQ2pDLGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBQzNCLGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBQzNCLGdCQUFXLEdBQThCLElBQUksQ0FBQztJQUt0RCxDQUFDO0lBS0ssUUFBUSxDQUFDLE1BQWlCOztZQUU5QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUU7YUFDMUQ7WUFFRCxNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDcEMsQ0FBQztLQUFBO0lBTU8sZ0JBQWdCLENBQUMs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Q0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDakUsS0FBSyxJQUFJLE9BQU8sR0FBVyxDQUFDLEVBQUUsT0FBTyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRTs0QkFDbkUsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7NEJBQ2hFLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7NEJBQzFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSTtnQ0FDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3lCQUNqRDtxQkFDRjtpQkFDRjthQUNGO1lBQ0QsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6QjtRQUNILENBQUM7S0FBQTs7QUFoU00scUJBQVEsR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SGFzaHRhYmxlLCBOU3RyaW5nLCBpc1VuZGVmaW5lZH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7SlNPTl9VdGlscywgTG9nZ2VyLCBNaXNjLCBNc2dJbnRlcmZhY2UsIFN0clV0aWwsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tIFwiLi4vQ29uc3RJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXJ9IGZyb20gXCIuLi9Db21tYW5kc1Byb2Nlc3Nvck1hbmFnZXJcIjtcclxuaW1wb3J0IHtJTGFuZ3VhZ2VEYXRhfSBmcm9tIFwiLi9JTGFuZ3VhZ2VEYXRhXCI7XHJcblxyXG5jb25zdCBNTFNfRU9GX0NIQVJTX1RPX1JFQUQ6IG51bWJlciA9IDEwO1xyXG5jb25zdCBTVEFSVF9UQUc6IHN0cmluZyA9IFwiPEVycm9yQ29kZXM+XCI7XHJcbmNvbnN0IEVORF9UQUc6IHN0cmluZyA9IFwiPC9FcnJvckNvZGVzPlwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIExhbmd1YWdlRGF0YSBpbXBsZW1lbnRzIElMYW5ndWFnZURhdGEge1xyXG4gIHByaXZhdGUgX2NvbnN0TWVzc2FnZXM6IEhhc2h0YWJsZTxzdHJpbmcsIHN0cmluZz4gPSBudWxsO1xyXG4gIHByaXZhdGUgX2NvbnN0TWVzc2FnZXNDb250ZW50OiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2NvbnN0TWVzc2FnZXNVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbWxzQ29udGVudDogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9tbHNGaWxlVXJsOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX21sc1N0cmluZ3M6IEhhc2h0YWJsZTxzdHJpbmcsIHN0cmluZz4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgSW5zdGFuY2U6IExhbmd1YWdlRGF0YSA9IG5ldyBMYW5ndWFnZURhdGEoKTtcclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyByZXRyaWV2ZSB0aGUgY29udGVudCBvZiB0aGUgJ2xhbmd1YWdlJyBlbGVtZW50IDxsYW5ndWFnZT4uLi4uLjwvbGFuZ3VhZ2U+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBmaWxsRGF0YShwYXJzZXI6IFhtbFBhcnNlcik6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpKSkge1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHRoaXMuSW5pdENvbnN0TWVzc2FnZXNUYWJsZSgpO1xyXG4gICAgYXdhaXQgdGhpcy5maWxsTWxzTWVzc2FnZXNUYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRvIGV4dHJhY3QgdGhlIHVybCBvZiB0aGUgY29uc3QgbWVzc2FnZXMgZnJvbSB0aGUgeG1sIGZyb20gPGxhbmd1YWdlPjxjb25zdG1lc3NhZ2VzPioqKjwvY29uc3RtZXNzYWdlcz48L2xhbmd1YWdlPlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb3VuZFRhZ05hbWVcIj5wb3NzaWJsZSB0YWcgbmFtZSwgbmFtZSBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkPC9wYXJhbT5cclxuICBwcml2YXRlIGluaXRJbm5lck9iamVjdHMocGFyc2VyOiBYbWxQYXJzZXIsIGZvdW5kVGFnTmFtZTogU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBzd2l0Y2ggKGZvdW5kVGFnTmFtZSkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19MQU5HVUFHRTpcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05TVE1FU1NBR0VTOiB7XHJcbiAgICAgICAgbGV0IGVuZFVybFZhbHVlOiBudW1iZXI7XHJcblxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICAgICAgICBlbmRVcmxWYWx1ZSA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgdGhpcy5fY29uc3RNZXNzYWdlc1VybCA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kVXJsVmFsdWUpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kVXJsVmFsdWUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfQ09OU1RNRVNTQUdFU0NPTlRFTlQ6IHtcclxuICAgICAgICBsZXQgZW5kVXJsVmFsdWU6IG51bWJlcjtcclxuXHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIGVuZFVybFZhbHVlID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05TVE1FU1NBR0VTQ09OVEVOVCwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSAtIDI7XHJcbiAgICAgICAgdGhpcy5fY29uc3RNZXNzYWdlc0NvbnRlbnQgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZFVybFZhbHVlKTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZFVybFZhbHVlKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX01MU19DT05URU5UOiB7XHJcbiAgICAgICAgbGV0IGVuZFVybFZhbHVlOiBudW1iZXI7XHJcblxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICAgICAgICBlbmRVcmxWYWx1ZSA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfTUxTX0NPTlRFTlQsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgLSAyO1xyXG4gICAgICAgIHRoaXMuX21sc0NvbnRlbnQgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZFVybFZhbHVlKTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZFVybFZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gQSBuZXcgTUxTIGhhcyBhcnJpdmVkLCBpZiBtbHNTdHJpbmdzIGhhcyB2YWx1ZXMsIGNsZWFuIGl0LlxyXG4gICAgICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHRoaXMuX21sc0NvbnRlbnQpKSB7XHJcbiAgICAgICAgICAvLyBjbGVhciB0aGUgZXhpc3RpbmcgbWxzIChpZiBpdCBleGlzdHMpXHJcbiAgICAgICAgICBpZiAodGhpcy5fbWxzU3RyaW5ncyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MuQ2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5fbWxzU3RyaW5ncyA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiBuZXcgTUxTIGlzIGFuIGVtcHR5IHN0cmluZywgY2xlYW4gdGhlIE1MUyBkYXRhXHJcbiAgICAgICAgaWYgKE5TdHJpbmcuSXNOdWxsT3JFbXB0eSh0aGlzLl9tbHNDb250ZW50KSAmJiB0aGlzLl9tbHNDb250ZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuX21sc0NvbnRlbnQgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX21sc1N0cmluZ3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzLkNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX01MU19GSUxFX1VSTDoge1xyXG4gICAgICAgIGxldCBlbmRVcmxWYWx1ZTogbnVtYmVyO1xyXG5cclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAgICAgZW5kVXJsVmFsdWUgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgIHRoaXMuX21sc0ZpbGVVcmwgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZFVybFZhbHVlKS50cmltKCk7XHJcblxyXG4gICAgICAgIC8vIEEgbmV3IE1MUyBoYXMgYXJyaXZlZCwgaWYgbWxzU3RyaW5ncyBoYXMgdmFsdWVzLCBjbGVhbiBpdC5cclxuICAgICAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh0aGlzLl9tbHNGaWxlVXJsKSkge1xyXG4gICAgICAgICAgLy8gY2xlYXIgdGhlIGV4aXN0aW5nIG1scyAoaWYgaXQgZXhpc3RzKVxyXG4gICAgICAgICAgaWYgKHRoaXMuX21sc1N0cmluZ3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzLkNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBuZXcgTUxTIGlzIGFuIGVtcHR5IHN0cmluZywgY2xlYW4gdGhlIE1MUyBkYXRhXHJcbiAgICAgICAgZWxzZSBpZiAoTlN0cmluZy5Jc051bGxPckVtcHR5KHRoaXMuX21sc0ZpbGVVcmwpICYmIHRoaXMuX21sc0ZpbGVVcmwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5fbWxzRmlsZVVybCA9IG51bGw7XHJcbiAgICAgICAgICBpZiAodGhpcy5fbWxzU3RyaW5ncyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MuQ2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5fbWxzU3RyaW5ncyA9IG51bGw7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRVcmxWYWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTlNUTUVTU0FHRVNfRU5EOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19NTFNfRklMRV9VUkxfRU5EOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05TVE1FU1NBR0VTQ09OVEVOVF9FTkQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX01MU19DT05URU5UX0VORDpcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19MQU5HVUFHRV9FTkQ6XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gTGFuZ3VhZ2VEYXRhLmluaXRJbm5lck9iamVjdHMoKTogXCIgKyBmb3VuZFRhZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gUmV0dXJucyB0aGUgY29uc3QgbXNnIGJ5IG1zZ0lkLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibXNnSWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0Q29uc3RNZXNzYWdlKG1zZ0lkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gTWFwIGRlZmF1bHQgbWVzc2FnZSBJRCB0byBjb3JyZXNwb25kaW5nIG1lc3NhZ2Ugc3RyaW5nLlxyXG4gICAgaWYgKHRoaXMuX2NvbnN0TWVzc2FnZXMgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fY29uc3RNZXNzYWdlcyA9IG5ldyBIYXNodGFibGU8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPD0gTXNnSW50ZXJmYWNlLkRlZmF1bHRNZXNzYWdlcy5sZW5ndGggLSAxOyBpID0gaSArIDEpIHtcclxuICAgICAgICB0aGlzLl9jb25zdE1lc3NhZ2VzLnNldF9JdGVtKE1zZ0ludGVyZmFjZS5EZWZhdWx0TWVzc2FnZXNbaV0uTXNnSUQsIE1zZ0ludGVyZmFjZS5EZWZhdWx0TWVzc2FnZXNbaV0uTXNnU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiA8c3RyaW5nPnRoaXMuX2NvbnN0TWVzc2FnZXMuZ2V0X0l0ZW0obXNnSWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBJbml0aWFsaXplIHRoZSBjb25zdCBtc2cgdGFibGUgZnJvbSBlaXRoZXIgdGhlIFVSTCBvciB0aGUgWE1MIGNvbnRlbnRzLiA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBJbml0Q29uc3RNZXNzYWdlc1RhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IG1zZ3NJbkNvbW1lbnRTdHJpbmc6IFN0cmluZyA9IG51bGw7XHJcbiAgICAgIGlmICh0aGlzLl9jb25zdE1lc3NhZ2VzVXJsICE9IG51bGwgfHwgdGhpcy5fY29uc3RNZXNzYWdlc0NvbnRlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25zdE1lc3NhZ2VzVXJsICE9IG51bGwpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGdldCB0aGUgY29udGVudCBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgICAgbXNnc0luQ29tbWVudFN0cmluZyA9IGF3YWl0IENvbW1hbmRzUHJvY2Vzc29yTWFuYWdlci5HZXRDb250ZW50KHRoaXMuX2NvbnN0TWVzc2FnZXNVcmwsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJVbmtub3duIG1lc3NhZ2UgZmlsZTogXFxcInswfVxcXCJcIiwgdGhpcy5fY29uc3RNZXNzYWdlc1VybCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vIE5vIGNhY2hlIC0gd2UgaGF2ZSBhbGwgdGhlIGRhdGEgaGVyZVxyXG4gICAgICAgICAgbXNnc0luQ29tbWVudFN0cmluZyA9IHRoaXMuX2NvbnN0TWVzc2FnZXNDb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1zZ3NJbkNvbW1lbnRTdHJpbmcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjb21tZW50IHdyYXBwZXJcclxuICAgICAgICAgIGxldCBzdGFydERhdGE6IG51bWJlciA9IG1zZ3NJbkNvbW1lbnRTdHJpbmcuaW5kZXhPZihTVEFSVF9UQUcpO1xyXG4gICAgICAgICAgbGV0IGVuZERhdGE6IG51bWJlciA9IG1zZ3NJbkNvbW1lbnRTdHJpbmcuaW5kZXhPZihFTkRfVEFHKSArIEVORF9UQUcubGVuZ3RoO1xyXG4gICAgICAgICAgbGV0IHJldHJpZXZlZENvbnN0TWVzc2FnZXM6IHN0cmluZyA9IG1zZ3NJbkNvbW1lbnRTdHJpbmcuc3Vic3RyKHN0YXJ0RGF0YSwgKGVuZERhdGEpIC0gKHN0YXJ0RGF0YSkpO1xyXG5cclxuICAgICAgICAgIC8vIHBhcnNlICdjb25zdE1lc3NhZ2VzJyBpbnRvICdsYW5ndWFnZU1lc3NhZ2VzJ1xyXG4gICAgICAgICAgdGhpcy5maWxsQ29uc3RNZXNzYWdlc1RhYmxlKHJldHJpZXZlZENvbnN0TWVzc2FnZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcIidjb25zdE1lc3NhZ2VzVXJsJyBhbmQgJ2NvbnN0TWVzc2FnZXNDb250ZW50JyB3ZXJlIG5vdCBpbml0aWFsaXplZC5cIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleCkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmVhZCB0aGUgY29uc3QgbXNncyBmcm9tIHRoZSB4bWwgYW5kIGZpbGwgdGhlIGNvbnN0IG1zZyB0YWJsZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29uc3RNZXNzYWdlc1wiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBmaWxsQ29uc3RNZXNzYWdlc1RhYmxlKGNvbnN0TWVzc2FnZXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGNvbnN0TWVzc2FnZXMgIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9jb25zdE1lc3NhZ2VzID0gbmV3IEhhc2h0YWJsZSgpO1xyXG4gICAgICAgIEpTT05fVXRpbHMuSlNPTkZyb21YTUwoY29uc3RNZXNzYWdlcywgdGhpcy5GaWxsQ29uc3RNZXNzYWdlc0Zyb21KU09OLmJpbmQodGhpcykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2coZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBGaWxsQ29uc3RNZXNzYWdlc0Zyb21KU09OKGVycm9yLCByZXN1bHQpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gcGFyc2luZyB0aGUgWE1MLFxyXG4gICAgaWYgKGVycm9yICE9IG51bGwpIHtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVycm9yTWVzc2FnZXMgPSByZXN1bHRbJ0Vycm9yQ29kZXMnXVsnRXJyb3JNZXNzYWdlJ107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlcnJvck1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBlcnJvcklkID0gZXJyb3JNZXNzYWdlc1tpXVsnJCddWydpZCddO1xyXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlc1tpXVsnXyddO1xyXG5cclxuICAgICAgdGhpcy5fY29uc3RNZXNzYWdlcy5zZXRfSXRlbShlcnJvcklkLCAoaXNVbmRlZmluZWQoZXJyb3JNZXNzYWdlKSA/IFwiXCIgOiBlcnJvck1lc3NhZ2UudHJpbSgpKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJuIHRoZSB0cmFuc2xhdGlvbiBvbiB0aGUgZnJvbVN0cmluZy4gSWYgdGhlIG1sc1N0cmluZ3NfIHRhYmxlIGlzIGVtcHR5LCByZWFkIGl0IGZyb20gdGhlIGZpbGUgYSBhbmQgZmlsbCBpdC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZnJvbVN0cmluZ1wiPjwvcGFyYW0+XHJcbiAgdHJhbnNsYXRlKGZyb21TdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9TdHJpbmc6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX21sc1N0cmluZ3MgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZyb21TdHJpbmc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdG9TdHJpbmcgPSB0aGlzLl9tbHNTdHJpbmdzLmdldF9JdGVtKGZyb21TdHJpbmcpO1xyXG5cclxuICAgICAgaWYgKHRvU3RyaW5nID09IG51bGwpXHJcbiAgICAgICAgdG9TdHJpbmcgPSBmcm9tU3RyaW5nO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZpbGwgdGhlIG1sc1N0cmluZ3NfIHRhYmxlLiBHZXQgdGhlIGZpbGUsIHJlYWQgdGhlIG51bWJlciBvZiB0cmFuc2xhdGlvbiBmcm9tIGl0cyBsb2NhdGlvbiBhdCB0aGUgbGFzdFxyXG4gIC8vLyAgIGxpbmUgb2YgdGhlIGZpbGUuIFRoZW4gbG9vcCBvbiB0aGUgZmlsZSBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGZpbGwgdGhlIHRhYmxlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgZmlsbE1sc01lc3NhZ2VzVGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5fbWxzQ29udGVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21sc0NvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGNvbnRlbnRMZW46IG51bWJlciA9IHRoaXMuX21sc0NvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgbGV0IGxpbmVQYWlyczogbnVtYmVyID0gMDtcclxuICAgICAgICAgIGxldCBzcmNMaW5lOiBTdHJpbmcgPSB0aGlzLl9tbHNDb250ZW50ICsgMztcclxuICAgICAgICAgIHRoaXMuX21sc1N0cmluZ3MgPSBuZXcgSGFzaHRhYmxlPHN0cmluZywgc3RyaW5nPigpO1xyXG4gICAgICAgICAgLy8gcmVhZCB0aGUgbGFzdCBsaW5lXHJcbiAgICAgICAgICBsZXQgbGluZXNTdHI6IFN0cmluZyA9IHRoaXMuX21sc0NvbnRlbnQuc3Vic3RyaW5nKHRoaXMuX21sc0NvbnRlbnQubGVuZ3RoIC0gTUxTX0VPRl9DSEFSU19UT19SRUFELCA4KTtcclxuICAgICAgICAgIC8vIHRoZSBudW1iZXIgb2YgcGFpcnMgaXMgaW4gaGV4LCBzbyBjb252ZXJ0IGl0IHRvIGludC5cclxuICAgICAgICAgIGxpbmVQYWlycyA9IHBhcnNlSW50KGxpbmVzU3RyLnRvU3RyaW5nKCksIDE2KTtcclxuICAgICAgICAgIGxldCB0b2tlbnM6IFN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShzcmNMaW5lLnRvU3RyaW5nKCksIFwiXFxuXCIpO1xyXG4gICAgICAgICAgZm9yIChsZXQgbGluZTogbnVtYmVyID0gMDsgbGluZSA8IGxpbmVQYWlycyAqIDI7IGxpbmUgKz0gMikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbWxzU3RyaW5ncy5nZXRfSXRlbSh0b2tlbnNbbGluZV0udG9TdHJpbmcoKSkgPT0gbnVsbClcclxuICAgICAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzLnNldF9JdGVtKHRva2Vuc1tsaW5lXS50b1N0cmluZygpLCB0b2tlbnNbbGluZSArIDFdLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKHRoaXMuX21sc0ZpbGVVcmwgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBjb250ZW50U3RyOiBzdHJpbmcgPSBhd2FpdCBDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXIuR2V0Q29udGVudCh0aGlzLl9tbHNGaWxlVXJsLCB0cnVlKTtcclxuICAgICAgICBsZXQgYnVmZmVyOiBTdHJpbmcgPSBjb250ZW50U3RyO1xyXG4gICAgICAgIGlmIChidWZmZXIgIT0gbnVsbCAmJiBidWZmZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGNvbnRlbnRMZW46IG51bWJlciA9IGJ1ZmZlci5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzID0gbmV3IEhhc2h0YWJsZTxzdHJpbmcsIHN0cmluZz4oKTtcclxuICAgICAgICAgIC8vIHJlYWQgdGhlIGxhc3QgbGluZVxyXG4gICAgICAgICAgbGV0IGxpbmVzU3RyID0gYnVmZmVyLnN1YnN0cihjb250ZW50TGVuIC0gTUxTX0VPRl9DSEFSU19UT19SRUFELCA4KTtcclxuICAgICAgICAgIC8vIHRoZSBudW1iZXIgb2YgcGFpcnMgaXMgaW4gaGV4LCBzbyBjb252ZXJ0IGl0IHRvIGludC5cclxuICAgICAgICAgIGxldCBsaW5lUGFpcnMgPSBwYXJzZUludChsaW5lc1N0ciwgMTYpO1xyXG4gICAgICAgICAgLy8gbm93IGZyb20gdGhlIGJlZ2luaW5nIChza2lwcGluZyB0aGUgVVRGIEJPTSBieXRlcyksIGxvb3Agb24gdGhlIHBhaXJzIGFuZCBmaWxsIHRoZSBoYXNoIG1hcFxyXG4gICAgICAgICAgbGV0IHNyY0xpbmU6IHN0cmluZztcclxuICAgICAgICAgIGxldCB0cmFuc0xpbmU6IHN0cmluZztcclxuICAgICAgICAgIGxldCB0b2tlbnM6IHN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShidWZmZXIudG9TdHJpbmcoKSwgXCJcXG5cIik7XHJcbiAgICAgICAgICBmb3IgKGxldCBwYWlyTnVtOiBudW1iZXIgPSAwOyBwYWlyTnVtIDwgbGluZVBhaXJzICogMjsgcGFpck51bSArPSAyKSB7XHJcbiAgICAgICAgICAgIHNyY0xpbmUgPSB0b2tlbnNbcGFpck51bV0uc3Vic3RyKDAsIHRva2Vuc1twYWlyTnVtXS5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgdHJhbnNMaW5lID0gdG9rZW5zW3BhaXJOdW0gKyAxXS5zdWJzdHIoMCwgdG9rZW5zW3BhaXJOdW0gKyAxXS5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX21sc1N0cmluZ3MuZ2V0X0l0ZW0oc3JjTGluZSkgPT0gbnVsbClcclxuICAgICAgICAgICAgICB0aGlzLl9tbHNTdHJpbmdzLnNldF9JdGVtKHNyY0xpbmUsIHRyYW5zTGluZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhlKTtcclxuICAgICAgTWlzYy5Xcml0ZVN0YWNrVHJhY2UoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ConstInterface } from "../ConstInterface";
|
|
2
|
+
import { ParamParseResult } from "../util/ParamParseResult";
|
|
3
|
+
import { XmlParser } from "@magic-xpa/utils";
|
|
4
|
+
import { Debug, NString } from "@magic-xpa/mscorelib";
|
|
5
|
+
export class MirrorString {
|
|
6
|
+
constructor(s) {
|
|
7
|
+
this._reserved = false;
|
|
8
|
+
this._value = null;
|
|
9
|
+
if (arguments.length === 0) {
|
|
10
|
+
this.constructor_0();
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
this.constructor_1(s);
|
|
14
|
+
}
|
|
15
|
+
constructor_0() {
|
|
16
|
+
this._reserved = false;
|
|
17
|
+
}
|
|
18
|
+
constructor_1(s) {
|
|
19
|
+
this._value = s;
|
|
20
|
+
this._reserved = false;
|
|
21
|
+
}
|
|
22
|
+
mirrorToXML() {
|
|
23
|
+
return ConstInterface.MG_ATTR_ENV_VALUE + "=\"" + XmlParser.escape(this._value) + "\" " +
|
|
24
|
+
ConstInterface.MG_ATTR_ENV_WRITEINI + "=F";
|
|
25
|
+
}
|
|
26
|
+
init(name, xmlParser) {
|
|
27
|
+
let valueStart, valueEnd, reserveStart, paramEnd;
|
|
28
|
+
let xmlData = xmlParser.getXMLdata();
|
|
29
|
+
let valueAttr = ConstInterface.MG_ATTR_ENV_VALUE + "=\"";
|
|
30
|
+
paramEnd = xmlData.indexOf("/>", xmlParser.getCurrIndex());
|
|
31
|
+
valueStart = NString.IndexOf(xmlData, valueAttr, xmlParser.getCurrIndex(), paramEnd - xmlParser.getCurrIndex());
|
|
32
|
+
if (valueStart !== -1) {
|
|
33
|
+
valueStart += valueAttr.length;
|
|
34
|
+
reserveStart = NString.IndexOf(xmlData, ConstInterface.MG_ATTR_ENV_RESERVED + "=\"", xmlParser.getCurrIndex(), paramEnd - xmlParser.getCurrIndex());
|
|
35
|
+
valueEnd = reserveStart !== -1
|
|
36
|
+
? xmlData.indexOf(ConstInterface.MG_ATTR_ENV_RESERVED + "=\"", valueStart) - 2
|
|
37
|
+
: paramEnd - 1;
|
|
38
|
+
this._value = xmlData.substr(valueStart, valueEnd - valueStart).trim();
|
|
39
|
+
if (reserveStart !== -1) {
|
|
40
|
+
reserveStart += ConstInterface.MG_ATTR_ENV_RESERVED.length + 2;
|
|
41
|
+
this._reserved = (xmlData[reserveStart] === 'Y');
|
|
42
|
+
}
|
|
43
|
+
else
|
|
44
|
+
this._reserved = false;
|
|
45
|
+
xmlParser.setCurrIndex(valueEnd);
|
|
46
|
+
if (name.startsWith(ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS))
|
|
47
|
+
return ParamParseResult.OK;
|
|
48
|
+
else
|
|
49
|
+
return ParamParseResult.TOUPPER;
|
|
50
|
+
}
|
|
51
|
+
else if (NString.IndexOf(xmlData, ConstInterface.MG_ATTR_ENV_REMOVED, xmlParser.getCurrIndex(), paramEnd - xmlParser.getCurrIndex()) !== -1) {
|
|
52
|
+
return ParamParseResult.DELETE;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
Debug.Assert(false, "bad XML parsing");
|
|
56
|
+
return ParamParseResult.FAILED;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
ToString() {
|
|
60
|
+
return this._value;
|
|
61
|
+
}
|
|
62
|
+
isReserved() {
|
|
63
|
+
return this._reserved;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlycm9yU3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9lbnYvTWlycm9yU3RyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE9BQU8sWUFBWTtJQU12QixZQUFZLENBQVU7UUFMZCxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLFdBQU0sR0FBVyxJQUFJLENBQUM7UUFLNUIsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBS08sYUFBYTtRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBS08sYUFBYSxDQUFDLENBQVM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUtELFdBQVc7UUFDVCxPQUFPLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSztZQUNyRixjQUFjLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFPTSxJQUFJLENBQUMsSUFBWSxFQUFFLFNBQW9CO1FBQzVDLElBQUksVUFBa0IsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQztRQUN6RCxJQUFJLE9BQU8sR0FBVyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsSUFBSSxTQUFTLEdBQVcsY0FBYyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUVqRSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFHM0QsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLFVBQVUsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQy9CLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFDM0csUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBRXZDLFFBQVEsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0JBQzlFLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBR2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZFLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN2QixZQUFZLElBQUksY0FBYyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7YUFDbEQ7O2dCQUVDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBRXpCLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFHakMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxrQ0FBa0MsQ0FBQztnQkFDcEUsT0FBTyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7O2dCQUUzQixPQUFPLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztTQUNuQzthQUNJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxRQUFRLEdBQUcsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFHM0ksT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7U0FDaEM7YUFDSTtZQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDdkMsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBTUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBTUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lNaXJyb3JYTUx9IGZyb20gXCIuLi91dGlsL0lNaXJyb3JYTUxcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7UGFyYW1QYXJzZVJlc3VsdH0gZnJvbSBcIi4uL3V0aWwvUGFyYW1QYXJzZVJlc3VsdFwiO1xyXG5pbXBvcnQge1htbFBhcnNlcn0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtEZWJ1ZywgTlN0cmluZ30gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWlycm9yU3RyaW5nIGltcGxlbWVudHMgSU1pcnJvclhNTCB7XHJcbiAgcHJpdmF0ZSBfcmVzZXJ2ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSXMgdGhpcyB2YXJpYWJsZSByZXNlcnZlZCAtIGNhbiBub3QgYmUgY2hhbmdlZCBieSB0aGUgdXNlclxyXG4gIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHM6IHN0cmluZyk7XHJcbiAgY29uc3RydWN0b3Iocz86IHN0cmluZykge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0b3JfMShzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZXNlcnZlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMShzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gcztcclxuICAgIHRoaXMuX3Jlc2VydmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YXJpYWJsZSwgZm9yIHRoZSBYTUxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIG1pcnJvclRvWE1MKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTlZfVkFMVUUgKyBcIj1cXFwiXCIgKyBYbWxQYXJzZXIuZXNjYXBlKHRoaXMuX3ZhbHVlKSArIFwiXFxcIiBcIiArXHJcbiAgICAgIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU5WX1dSSVRFSU5JICsgXCI9RlwiO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluaXRpYWxpemUgdGhlIG9iamVjdCBmcm9tIHRoZSBYTUwgYXR0cmlidXRlcyBvZiBhIHNpbmdsZSBwYXJhbS4gVGhlIGV4cGVjdGVkXHJcbiAgLy8vICAgZm9ybWF0IGlzOiBcInZhbHVlPVwiLi4uXCIgcmVzZXJ2ZWQ9XCIuXCIvPlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ4bWxQYXJzZXJcIj48L3BhcmFtPlxyXG4gIHB1YmxpYyBpbml0KG5hbWU6IFN0cmluZywgeG1sUGFyc2VyOiBYbWxQYXJzZXIpOiBQYXJhbVBhcnNlUmVzdWx0IHtcclxuICAgIGxldCB2YWx1ZVN0YXJ0OiBudW1iZXIsIHZhbHVlRW5kLCByZXNlcnZlU3RhcnQsIHBhcmFtRW5kO1xyXG4gICAgbGV0IHhtbERhdGE6IHN0cmluZyA9IHhtbFBhcnNlci5nZXRYTUxkYXRhKCk7XHJcbiAgICBsZXQgdmFsdWVBdHRyOiBzdHJpbmcgPSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VOVl9WQUxVRSArIFwiPVxcXCJcIjtcclxuXHJcbiAgICBwYXJhbUVuZCA9IHhtbERhdGEuaW5kZXhPZihcIi8+XCIsIHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcblxyXG4gICAgLy8gZ2V0IHRoZSBvZmZzZXRzIGludG8gdGhlIFhNTCBkYXRhOiBzdGFydCBvZiB2YWx1ZSwgZW5kIG9mIHZhbHVlLCBsb2NhdGlvbiBvZiByZXNlcnZlZCBjaGFyXHJcbiAgICB2YWx1ZVN0YXJ0ID0gTlN0cmluZy5JbmRleE9mKHhtbERhdGEsIHZhbHVlQXR0ciwgeG1sUGFyc2VyLmdldEN1cnJJbmRleCgpLCBwYXJhbUVuZCAtIHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAodmFsdWVTdGFydCAhPT0gLTEpIHtcclxuICAgICAgdmFsdWVTdGFydCArPSB2YWx1ZUF0dHIubGVuZ3RoO1xyXG4gICAgICByZXNlcnZlU3RhcnQgPSBOU3RyaW5nLkluZGV4T2YoeG1sRGF0YSwgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTlZfUkVTRVJWRUQgKyBcIj1cXFwiXCIsIHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSxcclxuICAgICAgICBwYXJhbUVuZCAtIHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcblxyXG4gICAgICB2YWx1ZUVuZCA9IHJlc2VydmVTdGFydCAhPT0gLTFcclxuICAgICAgICA/IHhtbERhdGEuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19BVFRSX0VOVl9SRVNFUlZFRCArIFwiPVxcXCJcIiwgdmFsdWVTdGFydCkgLSAyXHJcbiAgICAgICAgOiBwYXJhbUVuZCAtIDE7XHJcblxyXG4gICAgICAvLyBmaWxsIHRoZSBvYmplY3QncyBkYXRhXHJcbiAgICAgIHRoaXMuX3ZhbHVlID0geG1sRGF0YS5zdWJzdHIodmFsdWVTdGFydCwgdmFsdWVFbmQgLSB2YWx1ZVN0YXJ0KS50cmltKCk7XHJcbiAgICAgIGlmIChyZXNlcnZlU3RhcnQgIT09IC0xKSB7XHJcbiAgICAgICAgcmVzZXJ2ZVN0YXJ0ICs9IENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU5WX1JFU0VSVkVELmxlbmd0aCArIDI7IC8vIHNraXAgPSdcclxuICAgICAgICB0aGlzLl9yZXNlcnZlZCA9ICh4bWxEYXRhW3Jlc2VydmVTdGFydF0gPT09ICdZJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3Jlc2VydmVkID0gZmFsc2U7XHJcblxyXG4gICAgICB4bWxQYXJzZXIuc2V0Q3VyckluZGV4KHZhbHVlRW5kKTtcclxuXHJcbiAgICAgIC8vIExvZ2ljYWwgbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLiBvdGhlcnMgdmFyaWFibGVzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIHVwcGVyIGNhc2VcclxuICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9MT0dJQ0FMX05BTUVTX0JSQUNLRVRTKSlcclxuICAgICAgICByZXR1cm4gUGFyYW1QYXJzZVJlc3VsdC5PSztcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJldHVybiBQYXJhbVBhcnNlUmVzdWx0LlRPVVBQRVI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChOU3RyaW5nLkluZGV4T2YoeG1sRGF0YSwgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTlZfUkVNT1ZFRCwgeG1sUGFyc2VyLmdldEN1cnJJbmRleCgpLCBwYXJhbUVuZCAtIHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSkgIT09IC0xKSB7XHJcblxyXG4gICAgICAvLyByZW1vdmUgdGhpcyB2YXJpYWJsZSBmcm9tIHRoZSB0YWJsZVxyXG4gICAgICByZXR1cm4gUGFyYW1QYXJzZVJlc3VsdC5ERUxFVEU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgRGVidWcuQXNzZXJ0KGZhbHNlLCBcImJhZCBYTUwgcGFyc2luZ1wiKTtcclxuICAgICAgcmV0dXJuIFBhcmFtUGFyc2VSZXN1bHQuRkFJTEVEO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIFRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaXMgdGhlIHZhcmlhYmxlIHJlc2VydmVkP1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc1Jlc2VydmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc2VydmVkO1xyXG4gIH1cclxufVxyXG4iXX0=
|