@magic-xpa/engine 4.801.0-dev481.242 → 4.801.0-dev481.243

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.
@@ -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==