@magic-xpa/engine 4.900.0-dev491.7 → 4.901.0-ang15-dev491.310

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/esm2020/src/ClientManager.mjs +56 -15
  2. package/esm2020/src/CurrentClientVersion.mjs +2 -2
  3. package/esm2020/src/bridge/MagicBridge.mjs +3 -3
  4. package/esm2020/src/commands/ClientToServer/DataviewCommand.mjs +6 -6
  5. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +4 -4
  6. package/esm2020/src/commands/ClientToServer/EventCommand.mjs +8 -8
  7. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +4 -4
  8. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +5 -5
  9. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +7 -7
  10. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +6 -6
  11. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +8 -8
  12. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +7 -7
  13. package/esm2020/src/data/DataView.mjs +34 -34
  14. package/esm2020/src/data/DataviewManager.mjs +7 -7
  15. package/esm2020/src/data/Field.mjs +3 -2
  16. package/esm2020/src/data/Record.mjs +10 -10
  17. package/esm2020/src/data/TaskTransactionManager.mjs +4 -4
  18. package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +5 -5
  19. package/esm2020/src/env/Environment.mjs +7 -7
  20. package/esm2020/src/env/LanguageData.mjs +10 -5
  21. package/esm2020/src/event/EventsManager.mjs +2 -2
  22. package/esm2020/src/event/RunTimeEvent.mjs +16 -16
  23. package/esm2020/src/exp/ExpressionEvaluator.mjs +2 -2
  24. package/esm2020/src/gui/FormsTable.mjs +8 -8
  25. package/esm2020/src/gui/MgControl.mjs +12 -11
  26. package/esm2020/src/gui/MgForm.mjs +4 -22
  27. package/esm2020/src/http/HttpManager.mjs +8 -8
  28. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +22 -22
  29. package/esm2020/src/rt/DataviewHeaderBase.mjs +16 -16
  30. package/esm2020/src/rt/Operation.mjs +3 -3
  31. package/esm2020/src/rt/RecomputeTable.mjs +12 -4
  32. package/esm2020/src/rt/RemoteDataviewHeader.mjs +10 -7
  33. package/esm2020/src/security/UserDetails.mjs +12 -12
  34. package/esm2020/src/tasks/MGData.mjs +4 -4
  35. package/esm2020/src/tasks/RCTimer.mjs +10 -10
  36. package/esm2020/src/tasks/RemoteTaskService.mjs +3 -3
  37. package/esm2020/src/tasks/Task.mjs +56 -48
  38. package/esm2020/src/util/PrmMap.mjs +5 -5
  39. package/esm2020/src/util/ReturnResult.mjs +7 -7
  40. package/esm2020/src/util/Scrambler.mjs +3 -2
  41. package/esm2020/src/util/cookie.service.mjs +2 -2
  42. package/fesm2015/magic-xpa-engine.mjs +375 -325
  43. package/fesm2015/magic-xpa-engine.mjs.map +1 -1
  44. package/fesm2020/magic-xpa-engine.mjs +368 -318
  45. package/fesm2020/magic-xpa-engine.mjs.map +1 -1
  46. package/package.json +6 -6
  47. package/src/ClientManager.d.ts +2 -1
  48. package/src/bridge/MagicBridge.d.ts +1 -1
  49. package/src/gui/MgForm.d.ts +1 -3
  50. package/src/tasks/RemoteTaskService.d.ts +1 -1
  51. package/src/tasks/Task.d.ts +1 -1
  52. package/magic-xpa-engine.d.ts +0 -2
@@ -1,5 +1,5 @@
1
- import { ApplicationException, NString } from "@magic-xpa/mscorelib";
2
- import { Logger, XMLConstants, XmlParser } from "@magic-xpa/utils";
1
+ import { NString } from "@magic-xpa/mscorelib";
2
+ import { Base64, Logger, XMLConstants, XmlParser } from "@magic-xpa/utils";
3
3
  import { Recompute } from "./Recompute";
4
4
  import { AccessHelper } from "../AccessHelper";
5
5
  export class RecomputeTable {
@@ -26,9 +26,17 @@ export class RecomputeTable {
26
26
  this.fillData_1(task.DataView, task, parser);
27
27
  }
28
28
  else
29
- throw new ApplicationException("in RecomputeTable.fillData() invalid task id: ");
29
+ parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1);
30
30
  }
31
31
  fillData_1(dataView, task, parser) {
32
+ if (parser.getNextTag() == XMLConstants.MG_TAG_RECOMPUTE) {
33
+ let currrentIndex = parser.getCurrIndex();
34
+ let encoded = parser.ReadContentOfCurrentElement().trim();
35
+ let decoded = Base64.decode(encoded.substr(0, encoded.length).trim());
36
+ let newXmlData = parser.getXMLdata().replace(encoded.trim(), decoded);
37
+ parser.setXMLdata(newXmlData);
38
+ parser.setCurrIndex(currrentIndex);
39
+ }
32
40
  while (this.initInnerObjects(parser, parser.getNextTag(), dataView, task)) {
33
41
  }
34
42
  }
@@ -52,4 +60,4 @@ export class RecomputeTable {
52
60
  return true;
53
61
  }
54
62
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21wdXRlVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3J0L1JlY29tcHV0ZVRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxvQkFBb0IsRUFBUSxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU8vQyxNQUFNLE9BQU8sY0FBYztJQUtqQixjQUFjLENBQUMsTUFBaUI7UUFDdEMsSUFBSSxVQUFVLEdBQVcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLElBQUksS0FBSyxHQUFXLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFFN0ksSUFBSSxJQUFJLEdBQVMsSUFBSSxDQUFDO1FBQ3RCLElBQUksWUFBWSxHQUFpQixTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVqSCxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZELElBQUksU0FBUyxHQUFXLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25ELElBQUksUUFBUSxHQUFXLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0RCxJQUFJLFNBQVMsS0FBSyxZQUFZLENBQUMsY0FBYztnQkFDM0MsSUFBSSxHQUFTLFlBQVksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztnQkFFNUQsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLCtCQUErQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDMUc7UUFDRCxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUdwRyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBaUI7UUFDeEIsSUFBSSxJQUFJLEdBQVMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3hEOztZQUVDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFLRCxVQUFVLENBQUMsUUFBa0IsRUFBRSxJQUFVLEVBQUUsTUFBaUI7UUFDMUQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDMUU7SUFDSCxDQUFDO0lBS08sZ0JBQWdCLENBQUMsTUFBaUIsRUFBRSxXQUFtQixFQUFFLFFBQWtCLEVBQUUsSUFBVTtRQUM3RixJQUFJLFdBQVcsS0FBSyxJQUFJO1lBQ3RCLE9BQU8sS0FBSyxDQUFDO1FBRWYsSUFBSSxXQUFXLEtBQUssWUFBWSxDQUFDLGdCQUFnQjtZQUMvQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUVqRyxJQUFJLFdBQVcsS0FBSyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQ2hELElBQUksU0FBUyxHQUFjLElBQUksU0FBUyxFQUFFLENBQUM7WUFDM0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBRTVDO2FBQ0ksSUFBSSxXQUFXLEtBQUssR0FBRyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRTtZQUM1RCxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO2FBQ0k7WUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUN4Qyx1RkFBdUYsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN6RyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FwcGxpY2F0aW9uRXhjZXB0aW9uLCBMaXN0LCBOU3RyaW5nfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtMb2dnZXIsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gXCIuLi9kYXRhL0RhdGFWaWV3XCI7XHJcbmltcG9ydCB7UmVjb21wdXRlfSBmcm9tIFwiLi9SZWNvbXB1dGVcIjtcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBEYXRhIGZvciA8cmVjb21wdXRlPi4uLi48L3JlY29tcHV0ZT5cclxuLy8vICAgdGhpcyBjbGFzcyBpcyB1c2VkIG9ubHkgdG8gY3JlYXRlIHRoZSBSZWNvbXB1dGUgb2JqZWN0cyBidXQgZG8gbm90XHJcbi8vLyAgIGhvbGQgYW55IGRhdGFcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIFJlY29tcHV0ZVRhYmxlIHtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgcmVjb21wdXRlIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZmlsbEF0dHJpYnV0ZXMocGFyc2VyOiBYbWxQYXJzZXIpOiBUYXNrIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGxldCBJbmRleDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgWE1MQ29uc3RhbnRzLk1HX1RBR19SRUNPTVBVVEUubGVuZ3RoO1xyXG5cclxuICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTGRhdGEoKS5zdWJzdHIoSW5kZXgsIGVuZENvbnRleHQgLSBJbmRleCksICdcIicpO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gWE1MQ29uc3RhbnRzLk1HX0FUVFJfVEFTS0lEKVxyXG4gICAgICAgIHRhc2sgPSA8VGFzaz5BY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0VGFza0J5SUQodmFsdWVTdHIpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiVW5yZWNvZ25pemVkIGF0dHJpYnV0ZTogJ3swfSdcIiwgYXR0cmlidXRlKSk7XHJcbiAgICB9XHJcbiAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAvLyBzdGFydCBvZiA8ZmxkIC4uLj5cclxuXHJcbiAgICByZXR1cm4gdGFzaztcclxuICB9XHJcblxyXG4gIGZpbGxEYXRhKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IHRoaXMuZmlsbEF0dHJpYnV0ZXMocGFyc2VyKTtcclxuXHJcbiAgICBpZiAodGFzayAhPT0gbnVsbCkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8gcmVmaWxsIHJlY29tcHV0ZVwiKTtcclxuICAgICAgdGhpcy5maWxsRGF0YV8xKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3LCB0YXNrLCBwYXJzZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvbXB1dGVUYWJsZS5maWxsRGF0YSgpIGludmFsaWQgdGFzayBpZDogXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRvIHBhcnNlIGlucHV0IHN0cmluZyBhbmQgZmlsbCBpbm5lciBkYXRhIDogVmVjdG9yIHByb3BzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBmaWxsRGF0YV8xKGRhdGFWaWV3OiBEYXRhVmlldywgdGFzazogVGFzaywgcGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpLCBkYXRhVmlldywgdGFzaykpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGaWxsIFJlY29tcHV0ZSBPYmplY3QsIGdpdmVzIGl0cyByZWZlcmVuY2UgdG8gRmllbGQgYW5kIHJlZmVyZW5jZSBvZiBGaWVsZCB0byBoaW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaW5pdElubmVyT2JqZWN0cyhwYXJzZXI6IFhtbFBhcnNlciwgbmFtZU9mRm91bmQ6IFN0cmluZywgZGF0YVZpZXc6IERhdGFWaWV3LCB0YXNrOiBUYXNrKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFKVxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAvLyBzdGFydCBvZiA8ZmxkIC4uLj5cclxuICAgIGVsc2UgaWYgKG5hbWVPZkZvdW5kID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0ZMRCkge1xyXG4gICAgICBsZXQgcmVjb21wdXRlOiBSZWNvbXB1dGUgPSBuZXcgUmVjb21wdXRlKCk7XHJcbiAgICAgIHJlY29tcHV0ZS5maWxsRGF0YShkYXRhVmlldywgdGFzaywgcGFyc2VyKTsgLy8gZ2V0IHJlZmVyZW5jZSB0byBEYXRhVmlldywgdG8gbWFrZSBsaW5rZWQgcmVmLiA6IFJlY29tcHV0ZTwtRmllbGRcclxuICAgICAgLy8gdGFza1JlZmVyZW5jZSBmb3IgUmVjb21wdXRlLnByb3BzPT4gQ29udHJvbFRhYmxlLkNvbnRyb2wudGFza1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobmFtZU9mRm91bmQgPT09ICcvJyArIFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcclxuICAgICAgICBcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIDxyZWNvbXB1dGU+LCBhZGQgY2FzZSB0byBSZWNvbXB1dGVUYWJsZS5pbml0SW5uZXJPYmplY3RzIGZvciBcIiArIG5hbWVPZkZvdW5kKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21wdXRlVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3J0L1JlY29tcHV0ZVRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHekUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFPL0MsTUFBTSxPQUFPLGNBQWM7SUFLakIsY0FBYyxDQUFDLE1BQWlCO1FBQ3RDLElBQUksVUFBVSxHQUFXLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNwRyxJQUFJLEtBQUssR0FBVyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1FBRTdJLElBQUksSUFBSSxHQUFTLElBQUksQ0FBQztRQUN0QixJQUFJLFlBQVksR0FBaUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFakgsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RCxJQUFJLFNBQVMs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SSxTQUFTLEVBQUUsQ0FBQztZQUMzQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FFNUM7YUFDSSxJQUFJLFdBQVcsS0FBSyxHQUFHLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixFQUFFO1lBQzVELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFDSTtZQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQ3hDLHVGQUF1RixHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ3pHLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdCwgTlN0cmluZ30gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7QmFzZTY0LCBMb2dnZXIsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gXCIuLi9kYXRhL0RhdGFWaWV3XCI7XHJcbmltcG9ydCB7UmVjb21wdXRlfSBmcm9tIFwiLi9SZWNvbXB1dGVcIjtcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBEYXRhIGZvciA8cmVjb21wdXRlPi4uLi48L3JlY29tcHV0ZT5cclxuLy8vICAgdGhpcyBjbGFzcyBpcyB1c2VkIG9ubHkgdG8gY3JlYXRlIHRoZSBSZWNvbXB1dGUgb2JqZWN0cyBidXQgZG8gbm90XHJcbi8vLyAgIGhvbGQgYW55IGRhdGFcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIFJlY29tcHV0ZVRhYmxlIHtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgcmVjb21wdXRlIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZmlsbEF0dHJpYnV0ZXMocGFyc2VyOiBYbWxQYXJzZXIpOiBUYXNrIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGxldCBJbmRleDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgWE1MQ29uc3RhbnRzLk1HX1RBR19SRUNPTVBVVEUubGVuZ3RoO1xyXG5cclxuICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTGRhdGEoKS5zdWJzdHIoSW5kZXgsIGVuZENvbnRleHQgLSBJbmRleCksICdcIicpO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gWE1MQ29uc3RhbnRzLk1HX0FUVFJfVEFTS0lEKVxyXG4gICAgICAgICAgdGFzayA9IDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh2YWx1ZVN0cik7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIlVucmVjb2duaXplZCBhdHRyaWJ1dGU6ICd7MH0nXCIsIGF0dHJpYnV0ZSkpO1xyXG4gICAgfVxyXG4gICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgLy8gc3RhcnQgb2YgPGZsZCAuLi4+XHJcblxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICBmaWxsRGF0YShwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSB0aGlzLmZpbGxBdHRyaWJ1dGVzKHBhcnNlcik7XHJcblxyXG4gICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIHJlZmlsbCByZWNvbXB1dGVcIik7XHJcbiAgICAgIHRoaXMuZmlsbERhdGFfMSg8RGF0YVZpZXc+dGFzay5EYXRhVmlldywgdGFzaywgcGFyc2VyKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyBwYXJzZSBpbnB1dCBzdHJpbmcgYW5kIGZpbGwgaW5uZXIgZGF0YSA6IFZlY3RvciBwcm9wc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGFfMShkYXRhVmlldzogRGF0YVZpZXcsIHRhc2s6IFRhc2ssIHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICAgaWYgKHBhcnNlci5nZXROZXh0VGFnKCkgPT0gWE1MQ29uc3RhbnRzLk1HX1RBR19SRUNPTVBVVEUpIHtcclxuICAgICAgbGV0IGN1cnJyZW50SW5kZXggPSBwYXJzZXIuZ2V0Q3VyckluZGV4KCk7IC8vIGdldCB0aGUgY3VycmVudEluZGV4IG9mIFJlY29tcHV0ZSB0YWdcclxuICAgICAgbGV0IGVuY29kZWQgPSBwYXJzZXIuUmVhZENvbnRlbnRPZkN1cnJlbnRFbGVtZW50KCkudHJpbSgpOyAvLyBnZXQgdmFsdWUgb2YgZW5jb2RlZCB2YWx1ZSBvZiBSZWNvbXB1dGVcclxuICAgICAgbGV0IGRlY29kZWQgPSBCYXNlNjQuZGVjb2RlKGVuY29kZWQuc3Vic3RyKDAsIGVuY29kZWQubGVuZ3RoKS50cmltKCkpOyAvL2RlY29kZSB0aGUgdmFsdWUgb2YgcmVjb21wdXRlXHJcbiAgICAgIGxldCBuZXdYbWxEYXRhID0gcGFyc2VyLmdldFhNTGRhdGEoKS5yZXBsYWNlKGVuY29kZWQudHJpbSgpLCBkZWNvZGVkKTsgLy8gcmVwbGFjZSB0aGUgZW5jb2RlZCB2YWx1ZSB3aXRoIGRlY29kZWQgdmFsdWVcclxuICAgICAgcGFyc2VyLnNldFhNTGRhdGEobmV3WG1sRGF0YSk7IC8vY3JlYXRlIGEgcGFyc2VyIHdpdGggbmV3WE1MXHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoY3VycnJlbnRJbmRleCk7IC8vIHNldCB0aGUgY3VycmVudCBpbmRleCBvZiBwYXJzZXIgdG8gcmVjb21wdXRlIHRhZ1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpLCBkYXRhVmlldywgdGFzaykpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGaWxsIFJlY29tcHV0ZSBPYmplY3QsIGdpdmVzIGl0cyByZWZlcmVuY2UgdG8gRmllbGQgYW5kIHJlZmVyZW5jZSBvZiBGaWVsZCB0byBoaW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaW5pdElubmVyT2JqZWN0cyhwYXJzZXI6IFhtbFBhcnNlciwgbmFtZU9mRm91bmQ6IFN0cmluZywgZGF0YVZpZXc6IERhdGFWaWV3LCB0YXNrOiBUYXNrKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFKVxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAvLyBzdGFydCBvZiA8ZmxkIC4uLj5cclxuICAgIGVsc2UgaWYgKG5hbWVPZkZvdW5kID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0ZMRCkge1xyXG4gICAgICBsZXQgcmVjb21wdXRlOiBSZWNvbXB1dGUgPSBuZXcgUmVjb21wdXRlKCk7XHJcbiAgICAgIHJlY29tcHV0ZS5maWxsRGF0YShkYXRhVmlldywgdGFzaywgcGFyc2VyKTsgLy8gZ2V0IHJlZmVyZW5jZSB0byBEYXRhVmlldywgdG8gbWFrZSBsaW5rZWQgcmVmLiA6IFJlY29tcHV0ZTwtRmllbGRcclxuICAgICAgLy8gdGFza1JlZmVyZW5jZSBmb3IgUmVjb21wdXRlLnByb3BzPT4gQ29udHJvbFRhYmxlLkNvbnRyb2wudGFza1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobmFtZU9mRm91bmQgPT09ICcvJyArIFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcclxuICAgICAgICBcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIDxyZWNvbXB1dGU+LCBhZGQgY2FzZSB0byBSZWNvbXB1dGVUYWJsZS5pbml0SW5uZXJPYmplY3RzIGZvciBcIiArIG5hbWVPZkZvdW5kKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -16,15 +16,18 @@ export class RemoteDataviewHeader extends DataviewHeaderBase {
16
16
  setAttribute(attribute, valueStr) {
17
17
  switch (attribute) {
18
18
  case ConstInterface.MG_ATTR_CACHED_TABLE:
19
- if (TableCacheManager.Instance.TableExists(valueStr))
20
- this._table = TableCacheManager.Instance.GetTableById(valueStr);
21
- else {
22
- this._table = new TableCache(valueStr);
23
- TableCacheManager.Instance.InsertTable(this._table);
19
+ if (valueStr != "") {
20
+ if (TableCacheManager.Instance.TableExists(valueStr))
21
+ this._table = TableCacheManager.Instance.GetTableById(valueStr);
22
+ else {
23
+ this._table = new TableCache(valueStr);
24
+ TableCacheManager.Instance.InsertTable(this._table);
25
+ }
24
26
  }
25
27
  break;
26
28
  case ConstInterface.MG_ATTR_IDENT:
27
- this._table.SetTableIdent(valueStr);
29
+ if (valueStr != "")
30
+ this._table.SetTableIdent(valueStr);
28
31
  break;
29
32
  default:
30
33
  super.setAttribute(attribute, valueStr);
@@ -102,4 +105,4 @@ export class RemoteDataviewHeader extends DataviewHeaderBase {
102
105
  }
103
106
  }
104
107
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVtb3RlRGF0YXZpZXdIZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3J0L1JlbW90ZURhdGF2aWV3SGVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUs3QyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsa0JBQWtCO0lBSTFELFlBQVksSUFBVTtRQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFKTixXQUFNLEdBQWUsSUFBSSxDQUFDO1FBQzFCLHFCQUFnQixHQUFXLElBQUksQ0FBQztJQUl4QyxDQUFDO0lBRVMsWUFBWSxDQUFDLFNBQWlCLEVBQUUsUUFBZ0I7UUFDeEQsUUFBUSxTQUFTLEVBQUU7WUFFakIsS0FBSyxjQUFjLENBQUMsb0JBQW9CO2dCQUN0QyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO29CQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzdEO29CQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyRDtnQkFDRCxNQUFNO1lBRVIsS0FBSyxjQUFjLENBQUMsYUFBYTtnQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07WUFFUjtnQkFDRSxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDeEMsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQU1NLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBYztRQUN6QyxJQUFJLE9BQU8sR0FBa0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFHLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RixJQUFJLEdBQUcsR0FBWSxLQUFLLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBR3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQVksQ0FBQztnQkFDaEMsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQy9DLElBQUksT0FBTyxHQUFhLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUNuRCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7d0JBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUN2QixNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQzlCO2lCQUNGO2FBQ0Y7aUJBQ0k7Z0JBRUgsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtvQkFDOUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0M7WUFFRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXJELElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLEdBQUcsSUFBSSxJQUFJO2dCQUViLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQy9CO2dCQUNILEdBQUcsR0FBRyxJQUFJLENBQUM7Z0JBQ1gsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDekQ7U0FDRjs7WUFHQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFHLEtBQUssQ0FBQyxDQUFDO1FBTXJDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQU1PLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsUUFBcUIsRUFBRSxRQUFnQixFQUFFLEdBQVk7UUFHbEcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUUvQyxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoRCxJQUFJLE1BQU0sR0FBVSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFHN0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBS08sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFlLEVBQUUsR0FBWTtRQUdqRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBRTVCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUduQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzlCLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtZQUNsQixPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoRSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFLTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQU9ELEtBQUssQ0FBQyxjQUFjLENBQUUsR0FBWSxFQUFFLFNBQWtCO1FBQ3BELElBQUksV0FBVyxHQUFVLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFMUMsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQ3hCLElBQUkscUJBQXFCLEdBQVksV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7WUFHekUsWUFBWSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBSS9DLElBQUksTUFBTSxHQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDckMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDcEQsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFdEgsTUFBTSxXQUFXLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBRTNHLFlBQVksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUU5QyxJQUFJLENBQUMsU0FBUztnQkFDWixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFNUIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFHcEMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUk7Z0JBQ3JDLE1BQU0sV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtTdG9yYWdlQXR0cmlidXRlfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0Rpc3BsYXlDb252ZXJ0b3IsIFBJQ30gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7RGF0YXZpZXdIZWFkZXJCYXNlfSBmcm9tIFwiLi9EYXRhdmlld0hlYWRlckJhc2VcIjtcclxuaW1wb3J0IHtUYWJsZUNhY2hlfSBmcm9tIFwiLi9UYWJsZUNhY2hlXCI7XHJcbmltcG9ydCB7VGFza30gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tcIjtcclxuaW1wb3J0IHtSZWNvcmR9IGZyb20gXCIuLi9kYXRhL1JlY29yZFwiO1xyXG5pbXBvcnQge0ZpZWxkfSBmcm9tIFwiLi4vZGF0YS9GaWVsZFwiO1xyXG5pbXBvcnQge0ZpZWxkc1RhYmxlRXh0IGFzIEZpZWxkc1RhYmxlfSBmcm9tIFwiLi4vZGF0YS9GaWVsZHNUYWJsZVwiO1xyXG5pbXBvcnQge0JvdW5kYXJ5fSBmcm9tIFwiLi9Cb3VuZGFyeVwiO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tIFwiLi4vQ29uc3RJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtUYWJsZUNhY2hlTWFuYWdlcn0gZnJvbSBcIi4vVGFibGVDYWNoZU1hbmFnZXJcIjtcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIGxpbmsgdG8gUmVtb3RlIHRhYmxlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBSZW1vdGVEYXRhdmlld0hlYWRlciBleHRlbmRzIERhdGF2aWV3SGVhZGVyQmFzZSB7XHJcbiAgcHJpdmF0ZSBfdGFibGU6IFRhYmxlQ2FjaGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xhc3RGZXRjaFJlY1Bvczogc3RyaW5nID0gbnVsbDsgLy8gdGhlIGRiIHBvcyBvZiB0aGUgbGFzdCBmZXRjaGVkIHJlY29yZCBmcm9tIHRoZSB0YWJsZSBjYWNoZVxyXG5cclxuICBjb25zdHJ1Y3Rvcih0YXNrOiBUYXNrKSB7XHJcbiAgICBzdXBlcih0YXNrKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcsIHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0FDSEVEX1RBQkxFOlxyXG4gICAgICAgIGlmIChUYWJsZUNhY2hlTWFuYWdlci5JbnN0YW5jZS5UYWJsZUV4aXN0cyh2YWx1ZVN0cikpXHJcbiAgICAgICAgICB0aGlzLl90YWJsZSA9IFRhYmxlQ2FjaGVNYW5hZ2VyLkluc3RhbmNlLkdldFRhYmxlQnlJZCh2YWx1ZVN0cik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl90YWJsZSA9IG5ldyBUYWJsZUNhY2hlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIFRhYmxlQ2FjaGVNYW5hZ2VyLkluc3RhbmNlLkluc2VydFRhYmxlKHRoaXMuX3RhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSURFTlQ6XHJcbiAgICAgICAgdGhpcy5fdGFibGUuU2V0VGFibGVJZGVudCh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHN1cGVyLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlU3RyKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB3aWxsIHJldHVybiB0aGUgbGlua2VkIHJlY29yZCBhY2NvcmRpbmcgdG8gdGhlIGxpbmsgcHJvcGVydGllcyBhbmQgdGhlIGN1cnJlbnQgcmVjb3JkXHJcbiAgLy8vICAgdGhpcyBtZXRob2Qgd2lsbCBjaGFuZ2UgdGhlIGN1cnJlbnQgcmVjb3JkIGZpZWxkcyB2YWx1ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBhc3luYyBnZXRMaW5rZWRSZWNvcmQoY3VyUmVjOiBSZWNvcmQpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBsbmtGbGRzID0gKDxGaWVsZHNUYWJsZT4gdGhpcy5fdGFzay5EYXRhVmlldy5HZXRGaWVsZHNUYWIoKSkuZ2V0TGlua0ZpZWxkcyh0aGlzLl9pZCk7XHJcbiAgICBsZXQgcmV0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbmQuZ2V0VmFsKCkpIHtcclxuXHJcbiAgICAgIC8vIGJ1aWxkIGxvY2F0ZSBhbmQgcmFuZ2UgdmVjdG9yc1xyXG4gICAgICBpZiAodGhpcy5Mb2MgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuTG9jID0gbmV3IExpc3Q8Qm91bmRhcnk+KCk7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxua0ZsZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBjdXJyTG9jOiBCb3VuZGFyeSA9IGxua0ZsZHMuZ2V0X0l0ZW0oaSkuTG9jYXRlO1xyXG4gICAgICAgICAgaWYgKGN1cnJMb2MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLkxvYy5wdXNoKGN1cnJMb2MpO1xyXG4gICAgICAgICAgICBhd2FpdCBjdXJyTG9jLmNvbXB1dGUoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyBjb21wdXRlIHRoZSByYW5nZSBhbmQgbG9jYXRlIGV4cHJlc3Npb25zIGFuZXdcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5Mb2MubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLkxvYy5nZXRfSXRlbShpKS5jb21wdXRlKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzb3J0IHRoZSB0YWJsZSAoaWYgdGhlIHRhYmxlIHdhcyBub3QgbG9hZGVkIHlldCBpdCB3aWxsIGFsc28gbG9hZCBpdFxyXG4gICAgICBhd2FpdCB0aGlzLl90YWJsZS5Tb3J0VGFibGUodGhpcy5fa2V5SWR4LCB0aGlzLl9kaXIpO1xyXG4gICAgICAvLyBwZXJmb3JtIHRoZSBsaW5rXHJcbiAgICAgIGxldCByZXM6IFJlY29yZCA9IHRoaXMuX3RhYmxlLkZldGNoKHRoaXMuTG9jKTtcclxuICAgICAgaWYgKHJlcyA9PSBudWxsKVxyXG4gICAgICAvLyBsaW5rIGZhaWxkXHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0UmVjKGN1clJlYywgZmFsc2UpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXQgPSB0cnVlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29weUxpbmtGbGRUb1JlYyhjdXJSZWMsIGxua0ZsZHMsIHJlcywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBpbml0IGV4cHJlc3Npb25zIGlmIHRoZXJlIGFyZSBhbnkgb3IgZGVmYXVsdCB2YWx1ZXNcclxuICAgIGVsc2VcclxuICAgICAgYXdhaXQgdGhpcy5pbml0UmVjKGN1clJlYywgIGZhbHNlKTsgLy8gZXZlcnkgc2NlbmFyaW8gd2hlcmUgdGhlIGxpbmtlZCBkaWQgbm90XHJcbiAgICAvLyByZXR1cm5lZCBhbnkgcmVjb3JkIGZybyBleGFtcGxlIGhlcmUgd2hlblxyXG4gICAgLy8gdGhlIGxpbmsgY29uZGl0aW9uIGlzIGZhbHNlIHRoZW4gdGhlIGxpbmsgaXNcclxuICAgIC8vIGNvbnNpZGVyZWQgdG8gaGFzIGZhaWxlZCBhbmQgc2hvdWxkIHJldHVyblxyXG4gICAgLy8gZmFsc2UgYXMgcmV0dXJuIHZhbHVlXHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpZiB0aGUgbGluayBzdWNjZWVkZWQgY29waWVzIHRoZSB2YWx1ZXMgcmV0dXJuIGZyb20gdGhlIGxpbmtlZCB0YWJsZSByZWNvcmRcclxuICAvLy8gICB0byB0aGUgY3VycmVudCBkYXRhIHZpZXcgcmVjb3JkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGNvcHlMaW5rRmxkVG9SZWMoY3VyUmVjOiBSZWNvcmQsIGxpbmtGbGRzOiBMaXN0PEZpZWxkPiwgdGFibGVSZWM6IFJlY29yZCwgcmV0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBpZiB3ZSBnb3QgaGVyZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGZldGNoIGEgcmVjb3JkIGZyb20gdGhlIGxpbmtcclxuICAgIC8vIHNldCB0aGUgbGFzdEZldGNoUmVjUG9zIHRvIGJlIHRoZSBwb3Mgb2YgdGhlIGZldGNoZWQgcmVjb3JkXHJcbiAgICB0aGlzLl9sYXN0RmV0Y2hSZWNQb3MgPSB0YWJsZVJlYy5nZXREYlBvc1ZhbCgpO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsaW5rRmxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY3VyRmxkOiBGaWVsZCA9IGxpbmtGbGRzLmdldF9JdGVtKGkpO1xyXG4gICAgICBjdXJSZWMuc2V0RmllbGRWYWx1ZShjdXJGbGQuZ2V0SWQoKSwgdGFibGVSZWMuR2V0RmllbGRWYWx1ZShjdXJGbGQuQ2FjaGVUYWJsZUZsZElkeCksIGZhbHNlKTtcclxuXHJcbiAgICAgIC8vIGNsZWFyIHRoZSBpbnZhbGlkIGZsYWcgaW4gY2FzZSBpdCB3YXMgc2V0XHJcbiAgICAgIGN1clJlYy5jbGVhckZsYWcoY3VyRmxkLmdldElkKCksIFJlY29yZC5GTEFHX0lOVkFMSUQpO1xyXG4gICAgICBjdXJGbGQuaW52YWxpZGF0ZSh0cnVlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICAvLyBzZXQgdGhlIHJldCB2YWx1ZVxyXG4gICAgYXdhaXQgdGhpcy5TZXRSZXR1cm5WYWx1ZShyZXQsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluIGNhc2UgdGhlIGxpbmsgZmFpbHMgc2V0IHRoZSB2YWx1ZSB0byBkZWZhdWx0IG9yIHRvIHRoZSB2YWx1ZSBvZiB0aGUgaW5pdCBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGluaXRSZWMoY3VyclJlYzogUmVjb3JkLCByZXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGlmIHdlIGFyZSBoZXJlIGl0IG1lYW5zIHRoYXQgd2UgdHJpZWQgdG8gZmV0Y2ggYSByZWNvcmQgYnV0IGZhaWxlZCB0byBmaW5kIG9uZSB0aGVyZWZvclxyXG4gICAgLy8gdGhlIGxhc3RGZXRjaFJlY1BvcyBzaG91bGQgYmUgbWFya2VkIGFjY29yZGluZ2x5XHJcbiAgICB0aGlzLl9sYXN0RmV0Y2hSZWNQb3MgPSBcIiNcIjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLkluaXRMaW5rRmllbGRzKGN1cnJSZWMpO1xyXG5cclxuICAgIC8vIHNldCB0aGUgcmV0IHZhbHVlXHJcbiAgICBsZXQgcmV0RmxkID0gdGhpcy5SZXR1cm5GaWVsZDtcclxuICAgIGlmIChyZXRGbGQgIT0gbnVsbCkge1xyXG4gICAgICBjdXJyUmVjLnNldEZpZWxkVmFsdWUocmV0RmxkLmdldElkKCksIChyZXQgPyBcIjFcIiA6IFwiMFwiKSwgZmFsc2UpO1xyXG4gICAgICByZXRGbGQuaW52YWxpZGF0ZSh0cnVlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbGFzdCBmZXRjaCByZWNvcmQgZGIgcG9zIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0TGFzdEZldGNoZWREYlBvcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhc3RGZXRjaFJlY1BvcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gdXBkYXRlIGxpbmsgcmVzdWx0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdXJSZWNcIj5jdXJyZW50IHJlY29yZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmV0XCI+bGluayBzdWNjZXNzPC9wYXJhbT5cclxuICBhc3luYyBTZXRSZXR1cm5WYWx1ZSggcmV0OiBib29sZWFuLCByZWNvbXB1dGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCByZXR1cm5GaWVsZDogRmllbGQgPSB0aGlzLlJldHVybkZpZWxkO1xyXG5cclxuICAgIGlmIChyZXR1cm5GaWVsZCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgZW5mb3JjZVZhcmlhYmxlQ2hhbmdlOiBib29sZWFuID0gcmV0dXJuRmllbGQuZ2V0VGFzaygpICE9PSB0aGlzLlRhc2s7XHJcblxyXG4gICAgICAvLyBpZiB3ZSBhcmUgZmV0Y2hpbmcgZmlyc3QgY2h1bmsgd2UgZGlkbid0IHVwZGF0ZWQgdGhlIGV4ZWN1dHVpb24gc3RhY2sgeWV0XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLnB1c2hOZXdFeGVjU3RhY2tzKCk7XHJcbiAgICAgIC8vIHNhbWUgYXMgTm9uUmVjb21wdXRlVmFyQ2hhbmdlRXZlbnQgb24gc2VydmVyIGZldGNoLmNwcFxyXG5cclxuICAgICAgLy8gaWYgdGhlIHJldHVybiBmaWVsZCBpcyBudW1lcmljLCB0aGVuIGNvbnZlcnQgcmVzdWx0IHZhbHVlIHRvTnVtKCkgYmVmb3JlIHBhc3NpbmcgdG8gc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSgpLlxyXG4gICAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSByZXQgPyBcIjFcIiA6IFwiMFwiO1xyXG4gICAgICBpZiAocmV0dXJuRmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpXHJcbiAgICAgICAgcmVzdWx0ID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS50b051bShyZXN1bHQsIG5ldyBQSUMocmV0dXJuRmllbGQuZ2V0UGljdHVyZSgpLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIDApLCAwKTtcclxuXHJcbiAgICAgIGF3YWl0IHJldHVybkZpZWxkLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUocmVzdWx0LCBmYWxzZSwgcmVjb21wdXRlLCBmYWxzZSwgZmFsc2UsIGVuZm9yY2VWYXJpYWJsZUNoYW5nZSk7XHJcblxyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wb3BOZXdFeGVjU3RhY2tzKCk7XHJcblxyXG4gICAgICBpZiAoIXJlY29tcHV0ZSlcclxuICAgICAgICByZXR1cm5GaWVsZC5zZXRNb2RpZmllZCgpO1xyXG5cclxuICAgICAgcmV0dXJuRmllbGQuaW52YWxpZGF0ZSh0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAvLyBJZiBmaWVsZCBpcyBmcm9tIGFub3RoZXIgdGFzaywgbmVlZCB0byB1cGRhdGUgdGhlIGRpc3BsYXkgYXMgd2VsbFxyXG4gICAgICBpZiAocmV0dXJuRmllbGQuZ2V0VGFzaygpICE9PSB0aGlzLlRhc2spXHJcbiAgICAgICAgYXdhaXQgcmV0dXJuRmllbGQudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVtb3RlRGF0YXZpZXdIZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3J0L1JlbW90ZURhdGF2aWV3SGVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUs3QyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsa0JBQWtCO0lBSTFELFlBQVksSUFBVTtRQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFKTixXQUFNLEdBQWUsSUFBSSxDQUFDO1FBQzFCLHFCQUFnQixHQUFXLElBQUksQ0FBQztJQUl4QyxDQUFDO0lBRVMsWUFBWSxDQUFDLFNBQWlCLEVBQUUsUUFBZ0I7UUFDeEQsUUFBUSxTQUFTLEVBQUU7WUFFakIsS0FBSyxjQUFjLENBQUMsb0JBQW9CO2dCQUN0QyxJQUFJLFFBQVEsSUFBSSxFQUFFLEVBQUU7b0JBQ2xCLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7d0JBQ2xELElBQUksQ0FBQyxNQUFN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QVUsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUUxQyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDeEIsSUFBSSxxQkFBcUIsR0FBWSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQztZQUd6RSxZQUFZLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFJL0MsSUFBSSxNQUFNLEdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNyQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUNwRCxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV0SCxNQUFNLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFFM0csWUFBWSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRTlDLElBQUksQ0FBQyxTQUFTO2dCQUNaLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUU1QixXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUdwQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSTtnQkFDckMsTUFBTSxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDckM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1N0b3JhZ2VBdHRyaWJ1dGV9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7RGlzcGxheUNvbnZlcnRvciwgUElDfSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHtEYXRhdmlld0hlYWRlckJhc2V9IGZyb20gXCIuL0RhdGF2aWV3SGVhZGVyQmFzZVwiO1xyXG5pbXBvcnQge1RhYmxlQ2FjaGV9IGZyb20gXCIuL1RhYmxlQ2FjaGVcIjtcclxuaW1wb3J0IHtUYXNrfSBmcm9tIFwiLi4vdGFza3MvVGFza1wiO1xyXG5pbXBvcnQge1JlY29yZH0gZnJvbSBcIi4uL2RhdGEvUmVjb3JkXCI7XHJcbmltcG9ydCB7RmllbGR9IGZyb20gXCIuLi9kYXRhL0ZpZWxkXCI7XHJcbmltcG9ydCB7RmllbGRzVGFibGVFeHQgYXMgRmllbGRzVGFibGV9IGZyb20gXCIuLi9kYXRhL0ZpZWxkc1RhYmxlXCI7XHJcbmltcG9ydCB7Qm91bmRhcnl9IGZyb20gXCIuL0JvdW5kYXJ5XCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5pbXBvcnQge1RhYmxlQ2FjaGVNYW5hZ2VyfSBmcm9tIFwiLi9UYWJsZUNhY2hlTWFuYWdlclwiO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gbGluayB0byBSZW1vdGUgdGFibGVcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIFJlbW90ZURhdGF2aWV3SGVhZGVyIGV4dGVuZHMgRGF0YXZpZXdIZWFkZXJCYXNlIHtcclxuICBwcml2YXRlIF90YWJsZTogVGFibGVDYWNoZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbGFzdEZldGNoUmVjUG9zOiBzdHJpbmcgPSBudWxsOyAvLyB0aGUgZGIgcG9zIG9mIHRoZSBsYXN0IGZldGNoZWQgcmVjb3JkIGZyb20gdGhlIHRhYmxlIGNhY2hlXHJcblxyXG4gIGNvbnN0cnVjdG9yKHRhc2s6IFRhc2spIHtcclxuICAgIHN1cGVyKHRhc2spO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IHN0cmluZywgdmFsdWVTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DQUNIRURfVEFCTEU6XHJcbiAgICAgICAgaWYgKHZhbHVlU3RyICE9IFwiXCIpIHtcclxuICAgICAgICAgIGlmIChUYWJsZUNhY2hlTWFuYWdlci5JbnN0YW5jZS5UYWJsZUV4aXN0cyh2YWx1ZVN0cikpXHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlID0gVGFibGVDYWNoZU1hbmFnZXIuSW5zdGFuY2UuR2V0VGFibGVCeUlkKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl90YWJsZSA9IG5ldyBUYWJsZUNhY2hlKHZhbHVlU3RyKTtcclxuICAgICAgICAgICAgVGFibGVDYWNoZU1hbmFnZXIuSW5zdGFuY2UuSW5zZXJ0VGFibGUodGhpcy5fdGFibGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JREVOVDpcclxuICAgICAgICBpZiAodmFsdWVTdHIgIT0gXCJcIilcclxuICAgICAgICAgIHRoaXMuX3RhYmxlLlNldFRhYmxlSWRlbnQodmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBzdXBlci5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgd2lsbCByZXR1cm4gdGhlIGxpbmtlZCByZWNvcmQgYWNjb3JkaW5nIHRvIHRoZSBsaW5rIHByb3BlcnRpZXMgYW5kIHRoZSBjdXJyZW50IHJlY29yZFxyXG4gIC8vLyAgIHRoaXMgbWV0aG9kIHdpbGwgY2hhbmdlIHRoZSBjdXJyZW50IHJlY29yZCBmaWVsZHMgdmFsdWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgYXN5bmMgZ2V0TGlua2VkUmVjb3JkKGN1clJlYzogUmVjb3JkKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgbG5rRmxkcyA9ICg8RmllbGRzVGFibGU+IHRoaXMuX3Rhc2suRGF0YVZpZXcuR2V0RmllbGRzVGFiKCkpLmdldExpbmtGaWVsZHModGhpcy5faWQpO1xyXG4gICAgbGV0IHJldDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLl9jb25kLmdldFZhbCgpKSB7XHJcblxyXG4gICAgICAvLyBidWlsZCBsb2NhdGUgYW5kIHJhbmdlIHZlY3RvcnNcclxuICAgICAgaWYgKHRoaXMuTG9jID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLkxvYyA9IG5ldyBMaXN0PEJvdW5kYXJ5PigpO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsbmtGbGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgY3VyckxvYzogQm91bmRhcnkgPSBsbmtGbGRzLmdldF9JdGVtKGkpLkxvY2F0ZTtcclxuICAgICAgICAgIGlmIChjdXJyTG9jICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5Mb2MucHVzaChjdXJyTG9jKTtcclxuICAgICAgICAgICAgYXdhaXQgY3VyckxvYy5jb21wdXRlKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy8gY29tcHV0ZSB0aGUgcmFuZ2UgYW5kIGxvY2F0ZSBleHByZXNzaW9ucyBhbmV3XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuTG9jLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5Mb2MuZ2V0X0l0ZW0oaSkuY29tcHV0ZShmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gc29ydCB0aGUgdGFibGUgKGlmIHRoZSB0YWJsZSB3YXMgbm90IGxvYWRlZCB5ZXQgaXQgd2lsbCBhbHNvIGxvYWQgaXRcclxuICAgICAgYXdhaXQgdGhpcy5fdGFibGUuU29ydFRhYmxlKHRoaXMuX2tleUlkeCwgdGhpcy5fZGlyKTtcclxuICAgICAgLy8gcGVyZm9ybSB0aGUgbGlua1xyXG4gICAgICBsZXQgcmVzOiBSZWNvcmQgPSB0aGlzLl90YWJsZS5GZXRjaCh0aGlzLkxvYyk7XHJcbiAgICAgIGlmIChyZXMgPT0gbnVsbClcclxuICAgICAgLy8gbGluayBmYWlsZFxyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdFJlYyhjdXJSZWMsIGZhbHNlKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0ID0gdHJ1ZTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvcHlMaW5rRmxkVG9SZWMoY3VyUmVjLCBsbmtGbGRzLCByZXMsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgaW5pdCBleHByZXNzaW9ucyBpZiB0aGVyZSBhcmUgYW55IG9yIGRlZmF1bHQgdmFsdWVzXHJcbiAgICBlbHNlXHJcbiAgICAgIGF3YWl0IHRoaXMuaW5pdFJlYyhjdXJSZWMsICBmYWxzZSk7IC8vIGV2ZXJ5IHNjZW5hcmlvIHdoZXJlIHRoZSBsaW5rZWQgZGlkIG5vdFxyXG4gICAgLy8gcmV0dXJuZWQgYW55IHJlY29yZCBmcm8gZXhhbXBsZSBoZXJlIHdoZW5cclxuICAgIC8vIHRoZSBsaW5rIGNvbmRpdGlvbiBpcyBmYWxzZSB0aGVuIHRoZSBsaW5rIGlzXHJcbiAgICAvLyBjb25zaWRlcmVkIHRvIGhhcyBmYWlsZWQgYW5kIHNob3VsZCByZXR1cm5cclxuICAgIC8vIGZhbHNlIGFzIHJldHVybiB2YWx1ZVxyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaWYgdGhlIGxpbmsgc3VjY2VlZGVkIGNvcGllcyB0aGUgdmFsdWVzIHJldHVybiBmcm9tIHRoZSBsaW5rZWQgdGFibGUgcmVjb3JkXHJcbiAgLy8vICAgdG8gdGhlIGN1cnJlbnQgZGF0YSB2aWV3IHJlY29yZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBjb3B5TGlua0ZsZFRvUmVjKGN1clJlYzogUmVjb3JkLCBsaW5rRmxkczogTGlzdDxGaWVsZD4sIHRhYmxlUmVjOiBSZWNvcmQsIHJldDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gaWYgd2UgZ290IGhlcmUgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBmZXRjaCBhIHJlY29yZCBmcm9tIHRoZSBsaW5rXHJcbiAgICAvLyBzZXQgdGhlIGxhc3RGZXRjaFJlY1BvcyB0byBiZSB0aGUgcG9zIG9mIHRoZSBmZXRjaGVkIHJlY29yZFxyXG4gICAgdGhpcy5fbGFzdEZldGNoUmVjUG9zID0gdGFibGVSZWMuZ2V0RGJQb3NWYWwoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGlua0ZsZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGN1ckZsZDogRmllbGQgPSBsaW5rRmxkcy5nZXRfSXRlbShpKTtcclxuICAgICAgY3VyUmVjLnNldEZpZWxkVmFsdWUoY3VyRmxkLmdldElkKCksIHRhYmxlUmVjLkdldEZpZWxkVmFsdWUoY3VyRmxkLkNhY2hlVGFibGVGbGRJZHgpLCBmYWxzZSk7XHJcblxyXG4gICAgICAvLyBjbGVhciB0aGUgaW52YWxpZCBmbGFnIGluIGNhc2UgaXQgd2FzIHNldFxyXG4gICAgICBjdXJSZWMuY2xlYXJGbGFnKGN1ckZsZC5nZXRJZCgpLCBSZWNvcmQuRkxBR19JTlZBTElEKTtcclxuICAgICAgY3VyRmxkLmludmFsaWRhdGUodHJ1ZSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgLy8gc2V0IHRoZSByZXQgdmFsdWVcclxuICAgIGF3YWl0IHRoaXMuU2V0UmV0dXJuVmFsdWUocmV0LCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbiBjYXNlIHRoZSBsaW5rIGZhaWxzIHNldCB0aGUgdmFsdWUgdG8gZGVmYXVsdCBvciB0byB0aGUgdmFsdWUgb2YgdGhlIGluaXQgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0UmVjKGN1cnJSZWM6IFJlY29yZCwgcmV0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBpZiB3ZSBhcmUgaGVyZSBpdCBtZWFucyB0aGF0IHdlIHRyaWVkIHRvIGZldGNoIGEgcmVjb3JkIGJ1dCBmYWlsZWQgdG8gZmluZCBvbmUgdGhlcmVmb3JcclxuICAgIC8vIHRoZSBsYXN0RmV0Y2hSZWNQb3Mgc2hvdWxkIGJlIG1hcmtlZCBhY2NvcmRpbmdseVxyXG4gICAgdGhpcy5fbGFzdEZldGNoUmVjUG9zID0gXCIjXCI7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5Jbml0TGlua0ZpZWxkcyhjdXJyUmVjKTtcclxuXHJcbiAgICAvLyBzZXQgdGhlIHJldCB2YWx1ZVxyXG4gICAgbGV0IHJldEZsZCA9IHRoaXMuUmV0dXJuRmllbGQ7XHJcbiAgICBpZiAocmV0RmxkICE9IG51bGwpIHtcclxuICAgICAgY3VyclJlYy5zZXRGaWVsZFZhbHVlKHJldEZsZC5nZXRJZCgpLCAocmV0ID8gXCIxXCIgOiBcIjBcIiksIGZhbHNlKTtcclxuICAgICAgcmV0RmxkLmludmFsaWRhdGUodHJ1ZSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGxhc3QgZmV0Y2ggcmVjb3JkIGRiIHBvcyB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGdldExhc3RGZXRjaGVkRGJQb3MoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXN0RmV0Y2hSZWNQb3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHVwZGF0ZSBsaW5rIHJlc3VsdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3VyUmVjXCI+Y3VycmVudCByZWNvcmQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJldFwiPmxpbmsgc3VjY2VzczwvcGFyYW0+XHJcbiAgYXN5bmMgU2V0UmV0dXJuVmFsdWUoIHJldDogYm9vbGVhbiwgcmVjb21wdXRlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgcmV0dXJuRmllbGQ6IEZpZWxkID0gdGhpcy5SZXR1cm5GaWVsZDtcclxuXHJcbiAgICBpZiAocmV0dXJuRmllbGQgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGVuZm9yY2VWYXJpYWJsZUNoYW5nZTogYm9vbGVhbiA9IHJldHVybkZpZWxkLmdldFRhc2soKSAhPT0gdGhpcy5UYXNrO1xyXG5cclxuICAgICAgLy8gaWYgd2UgYXJlIGZldGNoaW5nIGZpcnN0IGNodW5rIHdlIGRpZG4ndCB1cGRhdGVkIHRoZSBleGVjdXR1aW9uIHN0YWNrIHlldFxyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wdXNoTmV3RXhlY1N0YWNrcygpO1xyXG4gICAgICAvLyBzYW1lIGFzIE5vblJlY29tcHV0ZVZhckNoYW5nZUV2ZW50IG9uIHNlcnZlciBmZXRjaC5jcHBcclxuXHJcbiAgICAgIC8vIGlmIHRoZSByZXR1cm4gZmllbGQgaXMgbnVtZXJpYywgdGhlbiBjb252ZXJ0IHJlc3VsdCB2YWx1ZSB0b051bSgpIGJlZm9yZSBwYXNzaW5nIHRvIHNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUoKS5cclxuICAgICAgbGV0IHJlc3VsdDogc3RyaW5nID0gcmV0ID8gXCIxXCIgOiBcIjBcIjtcclxuICAgICAgaWYgKHJldHVybkZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKVxyXG4gICAgICAgIHJlc3VsdCA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UudG9OdW0ocmVzdWx0LCBuZXcgUElDKHJldHVybkZpZWxkLmdldFBpY3R1cmUoKSwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDLCAwKSwgMCk7XHJcblxyXG4gICAgICBhd2FpdCByZXR1cm5GaWVsZC5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKHJlc3VsdCwgZmFsc2UsIHJlY29tcHV0ZSwgZmFsc2UsIGZhbHNlLCBlbmZvcmNlVmFyaWFibGVDaGFuZ2UpO1xyXG5cclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIucG9wTmV3RXhlY1N0YWNrcygpO1xyXG5cclxuICAgICAgaWYgKCFyZWNvbXB1dGUpXHJcbiAgICAgICAgcmV0dXJuRmllbGQuc2V0TW9kaWZpZWQoKTtcclxuXHJcbiAgICAgIHJldHVybkZpZWxkLmludmFsaWRhdGUodHJ1ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgLy8gSWYgZmllbGQgaXMgZnJvbSBhbm90aGVyIHRhc2ssIG5lZWQgdG8gdXBkYXRlIHRoZSBkaXNwbGF5IGFzIHdlbGxcclxuICAgICAgaWYgKHJldHVybkZpZWxkLmdldFRhc2soKSAhPT0gdGhpcy5UYXNrKVxyXG4gICAgICAgIGF3YWl0IHJldHVybkZpZWxkLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -3,17 +3,6 @@ import { Logger, XMLConstants, XmlParser } from '@magic-xpa/utils';
3
3
  import { ConstInterface } from '../ConstInterface';
4
4
  import { Commands } from '@magic-xpa/gui';
5
5
  export class UserDetails {
6
- constructor() {
7
- this.UserName = null;
8
- this.UserID = null;
9
- this.UserInfo = null;
10
- this.Password = null;
11
- this.IsLoggedIn = false;
12
- this.UserName = NString.Empty;
13
- this.UserInfo = NString.Empty;
14
- this.IsLoggedIn = false;
15
- this.setUserID(NString.Empty);
16
- }
17
6
  setIsLoggedIn(value) {
18
7
  this.IsLoggedIn = value;
19
8
  }
@@ -33,6 +22,17 @@ export class UserDetails {
33
22
  UserDetails._instance = new UserDetails();
34
23
  return UserDetails._instance;
35
24
  }
25
+ constructor() {
26
+ this.UserName = null;
27
+ this.UserID = null;
28
+ this.UserInfo = null;
29
+ this.Password = null;
30
+ this.IsLoggedIn = false;
31
+ this.UserName = NString.Empty;
32
+ this.UserInfo = NString.Empty;
33
+ this.IsLoggedIn = false;
34
+ this.setUserID(NString.Empty);
35
+ }
36
36
  fillData(parser) {
37
37
  let tokensVector;
38
38
  let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
@@ -68,4 +68,4 @@ export class UserDetails {
68
68
  }
69
69
  }
70
70
  UserDetails._instance = null;
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlckRldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3NlY3VyaXR5L1VzZXJEZXRhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzFDLE1BQU0sT0FBTyxXQUFXO0lBZ0N0QjtRQTlCQSxhQUFRLEdBQVcsSUFBSSxDQUFDO1FBQ3hCLFdBQU0sR0FBVyxJQUFJLENBQUM7UUFDdEIsYUFBUSxHQUFXLElBQUksQ0FBQztRQUN4QixhQUFRLEdBQVcsSUFBSSxDQUFDO1FBQ3hCLGVBQVUsR0FBVyxLQUFLLENBQUM7UUEyQnpCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQTdCTyxhQUFhLENBQUMsS0FBYztRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQWU7UUFFL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFDO1lBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7O1lBRUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsTUFBTSxLQUFLLFFBQVE7UUFDakIsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLElBQUk7WUFDaEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBYU0sUUFBUSxDQUFDLE1BQWlCO1FBRS9CLElBQUksWUFBMEIsQ0FBQztRQUUvQixJQUFJLFVBQVUsR0FBVyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkcsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFFaEUsSUFBSSxHQUFHLEdBQVcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xILFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRTs7WUFFQyxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQU9PLFlBQVksQ0FBQyxZQUEwQjtRQUM3QyxJQUFJLFNBQWlCLEVBQUUsUUFBUSxDQUFDO1FBQ2hDLElBQUksU0FBUyxHQUFZLElBQUksQ0FBQztRQUM5QixJQUFJLENBQVMsQ0FBQztRQUVkLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNDLFNBQVMsR0FBWSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxDQUFDO1lBQy9DLFFBQVEsR0FBWSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUUsQ0FBQztZQUVsRCxRQUFRLFNBQVMsRUFBRTtnQkFDakIsS0FBSyxjQUFjLENBQUMsbUJBQW1CO29CQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztvQkFDeEMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztvQkFFN0MsTUFBTTtnQkEwQlI7b0JBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxvREFBb0QsR0FBRyxTQUFTLENBQUMsQ0FBQztvQkFDN0csU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDbEIsTUFBTTthQUNUO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOztBQTlHYyxxQkFBUyxHQUFpQixJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaXN0LCBOU3RyaW5nIH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQgeyBMb2dnZXIsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IENvbnN0SW50ZXJmYWNlIH0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDb21tYW5kcyB9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuXHJcbi8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIHVzZXIgZGV0YWlscyBvbiB0aGUgY2xpZW50IHNpZGUuXHJcbi8vIFRoZSB1c2VyIGRldGFpbHMgYXJlIHNlbnQgZnJvbSB0aGUgc2VydmVyLlxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgVXNlckRldGFpbHMge1xyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXNlckRldGFpbHMgID0gbnVsbDtcclxuICBVc2VyTmFtZTogc3RyaW5nID0gbnVsbDsgIC8vIHVzZXIgbmFtZSBvYnRhaW5lZCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgVXNlcklEOiBzdHJpbmcgPSBudWxsOyAvLyB1c2VySUQgb2J0YWluZWQgZnJvbSB0aGUgc2VydmVyXHJcbiAgVXNlckluZm86IHN0cmluZyA9IG51bGw7IC8vIHVzZXIgaW5mbyBvYnRhaW5lZCBmcm9tIHRoZSBzZXJ2ZXJcclxuICBQYXNzd29yZDogc3RyaW5nID0gbnVsbDsgLy8gUGFzc3dvcmQgb2J0YWluZWQgZnJvbSBzZXJ2ZXIuXHJcbiAgSXNMb2dnZWRJbjogYm9vbGVhbj0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgc2V0SXNMb2dnZWRJbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5Jc0xvZ2dlZEluID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRJc0xvZ2dlZEluKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSXNMb2dnZWRJbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXNlcklEKHVzZXJJZCA6IHN0cmluZylcclxuICB7XHJcbiAgICB0aGlzLlVzZXJJRCA9IHVzZXJJZDtcclxuICAgIGlmICggdGhpcy5Vc2VySUQubGVuZ3RoID09IDAgfHwgdGhpcy5Vc2VySUQgPT09IE5TdHJpbmcuRW1wdHkpe1xyXG4gICAgICB0aGlzLnNldElzTG9nZ2VkSW4oZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnNldElzTG9nZ2VkSW4odHJ1ZSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogVXNlckRldGFpbHMge1xyXG4gICAgaWYgKFVzZXJEZXRhaWxzLl9pbnN0YW5jZSA9PT0gbnVsbClcclxuICAgICAgVXNlckRldGFpbHMuX2luc3RhbmNlID0gbmV3IFVzZXJEZXRhaWxzKCk7XHJcbiAgICByZXR1cm4gVXNlckRldGFpbHMuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlByaXZhdGUgQ1RPUiBhcyBwYXJ0IG9mIG1ha2luZyB0aGlzIGNsYXNzIGEgc2luZ2xldG9uLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuVXNlck5hbWUgPSBOU3RyaW5nLkVtcHR5O1xyXG4gICAgdGhpcy5Vc2VySW5mbyA9IE5TdHJpbmcuRW1wdHk7XHJcbiAgICB0aGlzLklzTG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2V0VXNlcklEKE5TdHJpbmcuRW1wdHkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHhtbCB0YWcgY29udGFpbmluZyB1c2VyIGluZm8uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZmlsbERhdGEocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIC8vbGV0IHBhcnNlcjogWG1sUGFyc2VyID0gQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5SdW50aW1lQ3R4LlBhcnNlcjtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPjtcclxuXHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IFN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU0VSX0RFVEFJTFMpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1VTRVJfREVUQUlMUy5sZW5ndGgpO1xyXG4gICAgICB0b2tlbnNWZWN0b3IgPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3Rvcik7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpOyAvLyB0byBkZWxldGUgXCI+XCIgdG9vXHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIFVzZXJEZXRhaWxzLmZpbGxEYXRhKCk6IG91dCBvZiBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0b2tlbnNWZWN0b3JcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PFN0cmluZz4pOiBib29sZWFuIHtcclxuICAgIGxldCBhdHRyaWJ1dGU6IFN0cmluZywgdmFsdWVTdHI7XHJcbiAgICBsZXQgaXNTdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcblxyXG4gICAgZm9yIChqID0gMDsgaiA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGogKz0gMikge1xyXG4gICAgICBhdHRyaWJ1dGUgPSAoPFN0cmluZz50b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaikpO1xyXG4gICAgICB2YWx1ZVN0ciA9ICg8U3RyaW5nPnRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19JU19MT0dHRURfSU46XHJcbiAgICAgICAgICB0aGlzLnNldElzTG9nZ2VkSW4odmFsdWVTdHJbMF0gPT09ICcxJyk7XHJcbiAgICAgICAgICBDb21tYW5kcy5hZGRJc0xvZ2dlZEluKHRoaXMuZ2V0SXNMb2dnZWRJbigpKTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRJc0xvZ2dlZEluKFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU0VSTkFNRTpcclxuICAgICAgICAvLyAgIHRoaXMuVXNlck5hbWUgPSB2YWx1ZVN0cjtcclxuICAgICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSSUQ6XHJcbiAgICAgICAgLy8gICB2YWx1ZVN0ciA9IFN0clV0aWwucnRyaW0odmFsdWVTdHIpO1xyXG4gICAgICAgIC8vICAgdGhpcy5zZXRVc2VySUQodmFsdWVTdHIpO1xyXG4gICAgICAgIC8vICAgLy9DbGllbnRNYW5hZ2VyLkluc3RhbmNlLnNldFVzZXJuYW1lKHRoaXMuVXNlcklEKTtcclxuICAgICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSSU5GTzpcclxuICAgICAgICAvLyAgIHRoaXMuVXNlckluZm8gPSB2YWx1ZVN0cjtcclxuICAgICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1BBU1NXT1JEOlxyXG4gICAgICAgIC8vICAgdGhpcy5QYXNzd29yZCA9IHZhbHVlU3RyO1xyXG4gICAgICAgIC8vICAgbGV0IHBhc3N3b3JkRGVjb2RlZDogVWludDhBcnJheSA9IEJhc2U2NC5kZWNvZGVUb0J5dGUodGhpcy5QYXNzd29yZCk7XHJcbiAgICAgICAgLy8gICBsZXQgZW5jcnlwdGVkUGFzc3dvcmQ6IHN0cmluZyA9IEVuY29kaW5nLlVURjguR2V0U3RyaW5nKHBhc3N3b3JkRGVjb2RlZCwgMCwgcGFzc3dvcmREZWNvZGVkLmxlbmd0aCk7XHJcbiAgICAgICAgLy8gICBsZXQgZGVjcnlwdGVkUGFzc3dvcmQ6IHN0cmluZyA9IFNjcmFtYmxlci5VblNjcmFtYmxlKGVuY3J5cHRlZFBhc3N3b3JkLCAwLCBlbmNyeXB0ZWRQYXNzd29yZC5sZW5ndGggLSAxKTtcclxuICAgICAgICAvLyAgIC8vIEF0IHNlcnZlciBzaWRlIHNwYWNlcyBhcmUgYWRkZWQgYXQgdGhlIGVuZCBpZiB0aGUgbGVuZ3RoIG9mIHBhc3N3b3JkIGlzIGxlc3MgdGhhbiA0IGNoYXJhY3RlcnMuXHJcbiAgICAgICAgLy8gICAvLyBSZW1vdmUgdGhlc2UgZXh0cmEgc3BhY2VzIGJlZm9yZSBzZXR0aW5nIHRoZSBwYXNzd29yZC5cclxuICAgICAgICAvLyAgIGRlY3J5cHRlZFBhc3N3b3JkID0gU3RyVXRpbC5ydHJpbShkZWNyeXB0ZWRQYXNzd29yZCk7XHJcbiAgICAgICAgLy8gICAvLyBpZiB0aGUgcGFzc3dvcmQgaXMgZW1wdHkgc2V0IGEgcGFzc3dvcmQgY29udGFpbmluZyBvbmUgXCIgXCIsIGFzIGZvciB1c2VySWQsIHdoZXJlIGlmIG5vIHVzZXJJZFxyXG4gICAgICAgIC8vICAgLy8gdGhlbiBhIFwiIFwiIHNldCB0byB1c2VySWQuXHJcbiAgICAgICAgLy8gICBpZiAoTlN0cmluZy5Jc051bGxPckVtcHR5KGRlY3J5cHRlZFBhc3N3b3JkKSlcclxuICAgICAgICAvLyAgICAgZGVjcnlwdGVkUGFzc3dvcmQgPSBcIiBcIjtcclxuICAgICAgICAvLyAgIC8vQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5zZXRQYXNzd29yZChkZWNyeXB0ZWRQYXNzd29yZCk7XHJcbiAgICAgICAgLy8gICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gVXNlckRldGFpbHMuaW5pdEVsZW1lbnRzKCk6IHVua25vd24gYXR0cmlidXRlOiBcIiArIGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNTdWNjZXNzO1xyXG4gIH1cclxufVxyXG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlckRldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3NlY3VyaXR5L1VzZXJEZXRhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzFDLE1BQU0sT0FBTyxXQUFXO0lBUWQsYUFBYSxDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVPLFNBQVMsQ0FBQyxNQUFlO1FBRS9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBQztZQUM1RCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCOztZQUVDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELE1BQU0sS0FBSyxRQUFRO1FBQ2pCLElBQUksV0FBVyxDQUFDLFNBQVMsS0FBSyxJQUFJO1lBQ2hDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QyxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUdEO1FBOUJBLGFBQVEsR0FBVyxJQUFJLENBQUM7UUFDeEIsV0FBTSxHQUFXLElBQUksQ0FBQztRQUN0QixhQUFRLEdBQVcsSUFBSSxDQUFDO1FBQ3hCLGFBQVEsR0FBVyxJQUFJLENBQUM7UUFDeEIsZUFBVSxHQUFXLEtBQUssQ0FBQztRQTJCekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBS00sUUFBUSxDQUFDLE1BQWlCO1FBRS9CLElBQUksWUFBMEIsQ0FBQztRQUUvQixJQUFJLFVBQVUsR0FBVyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkcsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFFaEUsSUFBSSxHQUFHLEdBQVcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xILFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRTs7WUFFQyxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQU9PLFlBQVksQ0FBQyxZQUEwQjtRQUM3QyxJQUFJLFNBQWlCLEVBQUUsUUFBUSxDQUFDO1FBQ2hDLElBQUksU0FBUyxHQUFZLElBQUksQ0FBQztRQUM5QixJQUFJLENBQVMsQ0FBQztRQUVkLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNDLFNBQVMsR0FBWSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxDQUFDO1lBQy9DLFFBQVEsR0FBWSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUUsQ0FBQztZQUVsRCxRQUFRLFNBQVMsRUFBRTtnQkFDakIsS0FBSyxjQUFjLENBQUMsbUJBQW1CO29CQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztvQkFDeEMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztvQkFFN0MsTUFBTTtnQkEwQlI7b0JBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxvREFBb0QsR0FBRyxTQUFTLENBQUMsQ0FBQztvQkFDN0csU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDbEIsTUFBTTthQUNUO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOztBQTlHYyxxQkFBUyxHQUFpQixJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaXN0LCBOU3RyaW5nIH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQgeyBMb2dnZXIsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IENvbnN0SW50ZXJmYWNlIH0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDb21tYW5kcyB9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuXHJcbi8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIHVzZXIgZGV0YWlscyBvbiB0aGUgY2xpZW50IHNpZGUuXHJcbi8vIFRoZSB1c2VyIGRldGFpbHMgYXJlIHNlbnQgZnJvbSB0aGUgc2VydmVyLlxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgVXNlckRldGFpbHMge1xyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXNlckRldGFpbHMgID0gbnVsbDtcclxuICBVc2VyTmFtZTogc3RyaW5nID0gbnVsbDsgIC8vIHVzZXIgbmFtZSBvYnRhaW5lZCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgVXNlcklEOiBzdHJpbmcgPSBudWxsOyAvLyB1c2VySUQgb2J0YWluZWQgZnJvbSB0aGUgc2VydmVyXHJcbiAgVXNlckluZm86IHN0cmluZyA9IG51bGw7IC8vIHVzZXIgaW5mbyBvYnRhaW5lZCBmcm9tIHRoZSBzZXJ2ZXJcclxuICBQYXNzd29yZDogc3RyaW5nID0gbnVsbDsgLy8gUGFzc3dvcmQgb2J0YWluZWQgZnJvbSBzZXJ2ZXIuXHJcbiAgSXNMb2dnZWRJbjogYm9vbGVhbj0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgc2V0SXNMb2dnZWRJbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5Jc0xvZ2dlZEluID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRJc0xvZ2dlZEluKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSXNMb2dnZWRJbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXNlcklEKHVzZXJJZCA6IHN0cmluZylcclxuICB7XHJcbiAgICB0aGlzLlVzZXJJRCA9IHVzZXJJZDtcclxuICAgIGlmICggdGhpcy5Vc2VySUQubGVuZ3RoID09IDAgfHwgdGhpcy5Vc2VySUQgPT09IE5TdHJpbmcuRW1wdHkpe1xyXG4gICAgICB0aGlzLnNldElzTG9nZ2VkSW4oZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnNldElzTG9nZ2VkSW4odHJ1ZSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogVXNlckRldGFpbHMge1xyXG4gICAgaWYgKFVzZXJEZXRhaWxzLl9pbnN0YW5jZSA9PT0gbnVsbClcclxuICAgICAgVXNlckRldGFpbHMuX2luc3RhbmNlID0gbmV3IFVzZXJEZXRhaWxzKCk7XHJcbiAgICByZXR1cm4gVXNlckRldGFpbHMuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlByaXZhdGUgQ1RPUiBhcyBwYXJ0IG9mIG1ha2luZyB0aGlzIGNsYXNzIGEgc2luZ2xldG9uLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuVXNlck5hbWUgPSBOU3RyaW5nLkVtcHR5O1xyXG4gICAgdGhpcy5Vc2VySW5mbyA9IE5TdHJpbmcuRW1wdHk7XHJcbiAgICB0aGlzLklzTG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2V0VXNlcklEKE5TdHJpbmcuRW1wdHkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHhtbCB0YWcgY29udGFpbmluZyB1c2VyIGluZm8uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZmlsbERhdGEocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIC8vbGV0IHBhcnNlcjogWG1sUGFyc2VyID0gQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5SdW50aW1lQ3R4LlBhcnNlcjtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPjtcclxuXHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IFN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU0VSX0RFVEFJTFMpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1VTRVJfREVUQUlMUy5sZW5ndGgpO1xyXG4gICAgICB0b2tlbnNWZWN0b3IgPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3Rvcik7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpOyAvLyB0byBkZWxldGUgXCI+XCIgdG9vXHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIFVzZXJEZXRhaWxzLmZpbGxEYXRhKCk6IG91dCBvZiBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0b2tlbnNWZWN0b3JcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PFN0cmluZz4pOiBib29sZWFuIHtcclxuICAgIGxldCBhdHRyaWJ1dGU6IFN0cmluZywgdmFsdWVTdHI7XHJcbiAgICBsZXQgaXNTdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcblxyXG4gICAgZm9yIChqID0gMDsgaiA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGogKz0gMikge1xyXG4gICAgICBhdHRyaWJ1dGUgPSAoPFN0cmluZz50b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaikpO1xyXG4gICAgICB2YWx1ZVN0ciA9ICg8U3RyaW5nPnRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19JU19MT0dHRURfSU46XHJcbiAgICAgICAgICB0aGlzLnNldElzTG9nZ2VkSW4odmFsdWVTdHJbMF0gPT09ICcxJyk7XHJcbiAgICAgICAgICBDb21tYW5kcy5hZGRJc0xvZ2dlZEluKHRoaXMuZ2V0SXNMb2dnZWRJbigpKTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRJc0xvZ2dlZEluKFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU0VSTkFNRTpcclxuICAgICAgICAvLyAgIHRoaXMuVXNlck5hbWUgPSB2YWx1ZVN0cjtcclxuICAgICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSSUQ6XHJcbiAgICAgICAgLy8gICB2YWx1ZVN0ciA9IFN0clV0aWwucnRyaW0odmFsdWVTdHIpO1xyXG4gICAgICAgIC8vICAgdGhpcy5zZXRVc2VySUQodmFsdWVTdHIpO1xyXG4gICAgICAgIC8vICAgLy9DbGllbnRNYW5hZ2VyLkluc3RhbmNlLnNldFVzZXJuYW1lKHRoaXMuVXNlcklEKTtcclxuICAgICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSSU5GTzpcclxuICAgICAgICAvLyAgIHRoaXMuVXNlckluZm8gPSB2YWx1ZVN0cjtcclxuICAgICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1BBU1NXT1JEOlxyXG4gICAgICAgIC8vICAgdGhpcy5QYXNzd29yZCA9IHZhbHVlU3RyO1xyXG4gICAgICAgIC8vICAgbGV0IHBhc3N3b3JkRGVjb2RlZDogVWludDhBcnJheSA9IEJhc2U2NC5kZWNvZGVUb0J5dGUodGhpcy5QYXNzd29yZCk7XHJcbiAgICAgICAgLy8gICBsZXQgZW5jcnlwdGVkUGFzc3dvcmQ6IHN0cmluZyA9IEVuY29kaW5nLlVURjguR2V0U3RyaW5nKHBhc3N3b3JkRGVjb2RlZCwgMCwgcGFzc3dvcmREZWNvZGVkLmxlbmd0aCk7XHJcbiAgICAgICAgLy8gICBsZXQgZGVjcnlwdGVkUGFzc3dvcmQ6IHN0cmluZyA9IFNjcmFtYmxlci5VblNjcmFtYmxlKGVuY3J5cHRlZFBhc3N3b3JkLCAwLCBlbmNyeXB0ZWRQYXNzd29yZC5sZW5ndGggLSAxKTtcclxuICAgICAgICAvLyAgIC8vIEF0IHNlcnZlciBzaWRlIHNwYWNlcyBhcmUgYWRkZWQgYXQgdGhlIGVuZCBpZiB0aGUgbGVuZ3RoIG9mIHBhc3N3b3JkIGlzIGxlc3MgdGhhbiA0IGNoYXJhY3RlcnMuXHJcbiAgICAgICAgLy8gICAvLyBSZW1vdmUgdGhlc2UgZXh0cmEgc3BhY2VzIGJlZm9yZSBzZXR0aW5nIHRoZSBwYXNzd29yZC5cclxuICAgICAgICAvLyAgIGRlY3J5cHRlZFBhc3N3b3JkID0gU3RyVXRpbC5ydHJpbShkZWNyeXB0ZWRQYXNzd29yZCk7XHJcbiAgICAgICAgLy8gICAvLyBpZiB0aGUgcGFzc3dvcmQgaXMgZW1wdHkgc2V0IGEgcGFzc3dvcmQgY29udGFpbmluZyBvbmUgXCIgXCIsIGFzIGZvciB1c2VySWQsIHdoZXJlIGlmIG5vIHVzZXJJZFxyXG4gICAgICAgIC8vICAgLy8gdGhlbiBhIFwiIFwiIHNldCB0byB1c2VySWQuXHJcbiAgICAgICAgLy8gICBpZiAoTlN0cmluZy5Jc051bGxPckVtcHR5KGRlY3J5cHRlZFBhc3N3b3JkKSlcclxuICAgICAgICAvLyAgICAgZGVjcnlwdGVkUGFzc3dvcmQgPSBcIiBcIjtcclxuICAgICAgICAvLyAgIC8vQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5zZXRQYXNzd29yZChkZWNyeXB0ZWRQYXNzd29yZCk7XHJcbiAgICAgICAgLy8gICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gVXNlckRldGFpbHMuaW5pdEVsZW1lbnRzKCk6IHVua25vd24gYXR0cmlidXRlOiBcIiArIGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNTdWNjZXNzO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -21,6 +21,9 @@ import { AccessHelper } from "../AccessHelper";
21
21
  import { UserDetails } from "../security/UserDetails";
22
22
  import { RemoteCommandsProcessor } from "../remote/RemoteCommandsProcessor";
23
23
  export class MGData {
24
+ get ForceModal() {
25
+ return this.forceModal;
26
+ }
24
27
  constructor(toClient, toServer, id, parent, isModal, forceModal) {
25
28
  this._expHandlers = null;
26
29
  this._id = 0;
@@ -41,9 +44,6 @@ export class MGData {
41
44
  else
42
45
  this.constructor_1(id, parent, isModal, forceModal);
43
46
  }
44
- get ForceModal() {
45
- return this.forceModal;
46
- }
47
47
  constructor_0(id, parent, isModal) {
48
48
  this._timerHandlers = new HandlersTable();
49
49
  this._expHandlers = new HandlersTable();
@@ -549,4 +549,4 @@ export class MGData {
549
549
  }
550
550
  }
551
551
  }
552
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUdEYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy90YXNrcy9NR0RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFeEQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBUSxPQUFPLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFDLGtCQUFrQixFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9CQUFvQixDQUFD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QyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFNUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoRSxZQUFZLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFMUQsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoRSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBRTlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0hhbmRsZXJzVGFibGV9IGZyb20gXCIuLi9ydC9IYW5kbGVyc1RhYmxlXCI7XHJcbmltcG9ydCB7VGFza3NUYWJsZX0gZnJvbSBcIi4vVGFza3NUYWJsZVwiO1xyXG5pbXBvcnQge0lDb21tYW5kc1RhYmxlfSBmcm9tIFwiLi4vSUNvbW1hbmRzVGFibGVcIjtcclxuaW1wb3J0IHtDb21wTWFpblByZ1RhYmxlfSBmcm9tIFwiLi4vcnQvQ29tcE1haW5QcmdUYWJsZVwiO1xyXG5pbXBvcnQge01nRm9ybX0gZnJvbSBcIi4uL2d1aS9NZ0Zvcm1cIjtcclxuaW1wb3J0IHtUYXNrfSBmcm9tIFwiLi9UYXNrXCI7XHJcbmltcG9ydCB7T3BlbmluZ1Rhc2tEZXRhaWxzfSBmcm9tIFwiLi9UYXNrQmFzZVwiO1xyXG5pbXBvcnQge0xvZ2dlciwgWE1MQ29uc3RhbnRzLCBYbWxQYXJzZXJ9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7UmVjb21wdXRlVGFibGV9IGZyb20gXCIuLi9ydC9SZWNvbXB1dGVUYWJsZVwiO1xyXG5pbXBvcnQge0RlYnVnLCBMaXN0LCBOTnVtYmVyLCBTdHJpbmdCdWlsZGVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtSdW50aW1lQ29udGV4dEJhc2UsIFRhc2tEZWZpbml0aW9uSWR9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge0V2ZW50SGFuZGxlcn0gZnJvbSBcIi4uL2V2ZW50L0V2ZW50SGFuZGxlclwiO1xyXG5pbXBvcnQge0dVSU1hbmFnZXJ9IGZyb20gXCIuLi9HVUlNYW5hZ2VyXCI7XHJcbmltcG9ydCB7SUNsaWVudENvbW1hbmR9IGZyb20gXCIuLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZFwiO1xyXG5pbXBvcnQge0h0dHBNYW5hZ2VyfSBmcm9tIFwiLi4vaHR0cC9IdHRwTWFuYWdlclwiO1xyXG5pbXBvcnQge0Zsb3dNb25pdG9yUXVldWV9IGZyb20gXCIuLi91dGlsL0Zsb3dNb25pdG9yUXVldWVcIjtcclxuaW1wb3J0IHtSdW5UaW1lRXZlbnR9IGZyb20gXCIuLi9ldmVudC9SdW5UaW1lRXZlbnRcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7TGFuZ3VhZ2VEYXRhfSBmcm9tIFwiLi4vZW52L0xhbmd1YWdlRGF0YVwiO1xyXG5pbXBvcnQge0VudlBhcmFtc1RhYmxlfSBmcm9tIFwiLi4vZW52L0VudlZhcmlhYmxlc1RhYmxlXCI7XHJcbmltcG9ydCB7R2xvYmFsUGFyYW1zfSBmcm9tIFwiLi4vZXhwL0dsb2JhbFBhcmFtc1RhYmxlXCI7XHJcbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gXCIuLi9lbnYvRW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHtHbG9iYWxDb21tYW5kc01hbmFnZXJ9IGZyb20gXCIuLi9HbG9iYWxDb21tYW5kc01hbmFnZXJcIjtcclxuaW1wb3J0IHtTZXJ2ZXJDb25maWd9IGZyb20gXCIuLi9TZXJ2ZXJDb25maWdcIjtcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuaW1wb3J0IHtVc2VyRGV0YWlsc30gZnJvbSBcIi4uL3NlY3VyaXR5L1VzZXJEZXRhaWxzXCI7XHJcbmltcG9ydCB7UmVtb3RlQ29tbWFuZHNQcm9jZXNzb3J9IGZyb20gXCIuLi9yZW1vdGUvUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtEYXRhVmlld30gZnJvbSBcIi4uLy4uXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFJlcHJlc2VudHMgYWxsIGRldGFpbHMgcmVsZXZhbnQgdG8gYSBzcGVjaWZpYyB0YXNrIC0gcmVsYXRlZCB0YXNrcywgY29tbWFuZHMsIGhhbmRsZXJzLCBldGMuLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgTUdEYXRhIHtcclxuICBwcml2YXRlIF9leHBIYW5kbGVyczogSGFuZGxlcnNUYWJsZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfcGFyZW50OiBNR0RhdGEgPSBudWxsO1xyXG4gIHByaXZhdGUgX21wcmdUYWI6IFRhc2tzVGFibGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX3Rhc2tzVGFiOiBUYXNrc1RhYmxlID0gbnVsbDtcclxuICBwcml2YXRlIF90aW1lckhhbmRsZXJzOiBIYW5kbGVyc1RhYmxlID0gbnVsbDtcclxuICBwcml2YXRlIF90aW1lcnNTdGFydGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBmb3JjZU1vZGFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQ21kc1RvQ2xpZW50OiBJQ29tbWFuZHNUYWJsZSA9IG51bGw7XHJcbiAgQ21kc1RvU2VydmVyOiBJQ29tbWFuZHNUYWJsZSA9IG51bGw7XHJcbiAgSXNNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIElzQWJvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IEZvcmNlTW9kYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JjZU1vZGFsO1xyXG4gIH1cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHRvQ2xpZW50OiBJQ29tbWFuZHNUYWJsZSwgdG9TZXJ2ZXI6IElDb21tYW5kc1RhYmxlLCBpZDogbnVtYmVyLCBwYXJlbnQ6IE1HRGF0YSwgaXNNb2RhbDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IodG9DbGllbnQ6IElDb21tYW5kc1RhYmxlLCB0b1NlcnZlcjogSUNvbW1hbmRzVGFibGUsIGlkOiBudW1iZXIsIHBhcmVudDogTUdEYXRhLCBpc01vZGFsOiBib29sZWFuLCBmb3JjZU1vZGFsOiBib29sZWFuKTtcclxuICBjb25zdHJ1Y3Rvcih0b0NsaWVudDogSUNvbW1hbmRzVGFibGUsIHRvU2VydmVyOiBJQ29tbWFuZHNUYWJsZSwgaWQ6IG51bWJlciwgcGFyZW50OiBNR0RhdGEsIGlzTW9kYWw6IGJvb2xlYW4sIGZvcmNlTW9kYWw/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLkNtZHNUb1NlcnZlciA9IHRvQ2xpZW50O1xyXG4gICAgdGhpcy5DbWRzVG9DbGllbnQgPSB0b1NlcnZlcjtcclxuXHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKGlkLCBwYXJlbnQsIGlzTW9kYWwpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzEoaWQsIHBhcmVudCwgaXNNb2RhbCwgZm9yY2VNb2RhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPnRoZSBpZCBvZiB0aGlzIG1nZGF0YSBvYmplY3Q8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50XCI+dGhlIHBhcmVudCBNR0RhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXNNb2RhbFwiPnRydWUgZm9yIG1vZGFsIHdpbmRvd3M8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMChpZDogbnVtYmVyLCBwYXJlbnQ6IE1HRGF0YSwgaXNNb2RhbDogYm9vbGVhbik6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuX3RpbWVySGFuZGxlcnMgPSBuZXcgSGFuZGxlcnNUYWJsZSgpO1xyXG4gICAgdGhpcy5fZXhwSGFuZGxlcnMgPSBuZXcgSGFuZGxlcnNUYWJsZSgpO1xyXG4gICAgdGhpcy5fbXByZ1RhYiA9IG5ldyBUYXNrc1RhYmxlKCk7XHJcbiAgICB0aGlzLl90YXNrc1RhYiA9IG5ldyBUYXNrc1RhYmxlKCk7XHJcbiAgICB0aGlzLl9pZCA9IGlkO1xyXG4gICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xyXG4gICAgaWYgKEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldENvbXBNYWluUHJnVGFiKCkgPT09IG51bGwpIHtcclxuICAgICAgbGV0IGNvbXBNYWluUHJnVGFiOiBDb21wTWFpblByZ1RhYmxlID0gbmV3IENvbXBNYWluUHJnVGFibGUoKTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuc2V0Q29tcE1haW5QcmdUYWIoY29tcE1haW5QcmdUYWIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5Jc01vZGFsID0gaXNNb2RhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ1RPUiB0byBiZSB1c2VkIHdoZW4gcnVubmluZyBvZmZsaW5lIHRhc2tzIC0gaG9sZCB0aGUgY29tbWFuZCB0byBlbmFibGUgcmlnaHQgc2V0dGluZyBvZiBtb2RhbGl0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhcmVudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNNb2RhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm9yY2VNb2RhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKGlkOiBudW1iZXIsIHBhcmVudDogTUdEYXRhLCBpc01vZGFsOiBib29sZWFuLCBmb3JjZU1vZGFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzAoaWQsIHBhcmVudCwgaXNNb2RhbCk7XHJcbiAgICB0aGlzLmZvcmNlTW9kYWwgPSBmb3JjZU1vZGFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGlkIG9mIHRoaXMgTUdEYXRhIG9iamVjdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgR2V0SWQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZXR1cm5zIHRydWUgaWYgYWxyZWFkeSBtb3ZlZCB0byB0aGUgZmlyc3QgY29udHJvbCBvbiBvbmUgb2YgdGhlIE1nRGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgQWxyZWFkeU1vdmVkVG9GaXJzdENvbnRyb2woKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYWxyZWFkeU1vdmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgdGFza3NDb3VudDogbnVtYmVyID0gdGhpcy5nZXRUYXNrc0NvdW50KCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGFza3NDb3VudDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBtZ0Zvcm06IE1nRm9ybSA9IDxNZ0Zvcm0+dGhpcy5nZXRUYXNrKGkpLmdldEZvcm0oKTtcclxuICAgICAgaWYgKG1nRm9ybSAhPT0gbnVsbCAmJiBtZ0Zvcm0uTW92ZWRUb0ZpcnN0Q29udHJvbCkge1xyXG4gICAgICAgIGFscmVhZHlNb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhbHJlYWR5TW92ZWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc3RhcnQgdGhlIHRpbWVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgU3RhcnRUaW1lcnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdGltZXJIYW5kbGVycyAhPT0gbnVsbCAmJiAhdGhpcy5fdGltZXJzU3RhcnRlZCkge1xyXG4gICAgICB0aGlzLl90aW1lckhhbmRsZXJzLnN0YXJ0VGltZXJzKHRoaXMpO1xyXG4gICAgICB0aGlzLl90aW1lcnNTdGFydGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGdW5jdGlvbiBmb3IgZmlsbGluZyBvd24gZmllbGRzLCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlubmVyIG9iamVjdHMuIFBhcnNpbmcgdGhlIGlucHV0IFN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIGZpbGxEYXRhKG9wZW5pbmdUYXNrRGV0YWlsczogT3BlbmluZ1Rhc2tEZXRhaWxzLCBwYXJzZXI6IFhtbFBhcnNlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gVG8gYXZvaWQgdGhlIG5lZWQgdG8gc2VuZCBkYXRhIHRoYXQgc2V0cyBkZWZhdWx0IHZhbHVlcywgd2UnbGwgYXNzdW1lIHdlIHdhbnQgdGhlIGRlZmF1bHQgdmFsdWVzXHJcbiAgICAvLyB1bmxlc3MgZGlmZmVyZW50IGluZm8gd2FzIHNlbnQuIGkuZS4gaWYgdGhlIHJlbGV2YW50IHRhZ3MgYXJlIG5vdCBpbiB0aGUgWE1MLCBzZXQgdGhlIGRlZmF1bHQgdmFsdWVzLlxyXG4gICAgbGV0IGNhbkNvbnRpbnVlOiBib29sZWFuO1xyXG4gICAgZG8ge1xyXG4gICAgICBsZXQgbmV4dFRhZzogc3RyaW5nID0gcGFyc2VyLmdldE5leHRUYWcoKTtcclxuICAgICAgY2FuQ29udGludWUgPSBhd2FpdCB0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBuZXh0VGFnLCBvcGVuaW5nVGFza0RldGFpbHMpO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGNhbkNvbnRpbnVlKTtcclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiTUdEYXRhLkZpbGxEYXRhKCk6IFRIRSBFTkQgb2YgdGhlIHBhcnNpbmcgXCIgKyBwYXJzZXIuZ2V0Q3VyckluZGV4KCkgKyBcIiBjaGFyYWN0ZXJzXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRvIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvdW5kVGFnTmFtZVwiPnBvc3NpYmxlIHRhZyBuYW1lLCBuYW1lIG9mIG9iamVjdCwgd2hpY2ggbmVlZCBiZSBhbGxvY2F0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm9wZW5pbmdUYXNrRGV0YWlsc1wiPmFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2Ygb3BlbmluZyB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSwgdGhlIGZvdW5kIG9iamVjdCB0YWcgYW5kIEFMTCBpdHMgc3VidGFncyBmaW5pc2g8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0SW5uZXJPYmplY3RzKHBhcnNlcjogWG1sUGFyc2VyLCBmb3VuZFRhZ05hbWU6IHN0cmluZywgb3BlbmluZ1Rhc2tEZXRhaWxzOiBPcGVuaW5nVGFza0RldGFpbHMpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgc3dpdGNoIChmb3VuZFRhZ05hbWUpIHtcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX1hNTDpcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7IC8vIGRvXHJcbiAgICAgICAgLy8gbm90aGluZ1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBVklFVzpcclxuICAgICAgICBpZiAoISBhd2FpdCB0aGlzLmluc2VydERhdGFWaWV3KHBhcnNlcikpIHtcclxuICAgICAgICAgIC8vIHRoZSB0YXNrIG9mIGluc2VydCBkYXRhIHZpZXcgbm90IGZvdW5kIC0+IHNldCBwYXJzZXJzIGNvdW50ZXIgdG8gdGhlXHJcbiAgICAgICAgICAvLyBlbmQgb2YgdGhlIGRhdGEgdmlld1xyXG4gICAgICAgICAgLy8gdGhlIGRhdGEgdmlldywgZ290IGZyb20gc2VydmVyIGFuZCB0aGVyZSBpcyBubyB0YXNrIHRvIHRoZSBkYXRhIHZpZXcgLCB5ZXQuXHJcbiAgICAgICAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKCcvJyArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBVklFVyxcclxuICAgICAgICAgICAgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCk7XHJcbiAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT01QTEVURV9EVjoge1xyXG4gICAgICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuICAgICAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTVBMRVRFX0RWLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTVBMRVRFX0RWLmxlbmd0aDtcclxuICAgICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxkYXRhKCkuc3Vic3RyKGluZGV4LCBlbmRDb250ZXh0IC0gaW5kZXgpLCAnXCInKTtcclxuICAgICAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmcgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKDApKTtcclxuICAgICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZztcclxuICAgICAgICBpZiAoYXR0cmlidXRlID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9UQVNLSUQpIHtcclxuICAgICAgICAgIHZhbHVlU3RyID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbSgxKSk7XHJcbiAgICAgICAgICBsZXQgdGFza0lkOiBzdHJpbmcgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGlmICh0aGlzLmdldFRhc2sodGFza0lkKSA9PT0gbnVsbClcclxuICAgICAgICAgICAgdGFzayA9IDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh0YXNrSWQpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0YXNrID0gdGhpcy5nZXRUYXNrKHRhc2tJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdGFydDogbnVtYmVyID0gZW5kQ29udGV4dCArIDE7XHJcbiAgICAgICAgZW5kQ29udGV4dCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuRU5EX1RBRyArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT01QTEVURV9EVixcclxuICAgICAgICAgIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgbGV0IGRhdGFWaWV3Q29udGVudDogc3RyaW5nID0gcGFyc2VyLmdldFhNTGRhdGEoKS5zdWJzdHIoc3RhcnQsIGVuZENvbnRleHQgLSBzdGFydCk7XHJcbiAgICAgICAgdGFzay5kYXRhVmlld0NvbnRlbnQgPSBkYXRhVmlld0NvbnRlbnQ7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0KTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfQ09OVEVYVDoge1xyXG4gICAgICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19URVJNLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCB0YWc6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfQ09OVEVYVCkgKyBDb25zdEludGVyZmFjZS5NR19UQUdfQ09OVEVYVC5sZW5ndGgpO1xyXG4gICAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19URVJNLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19SRUNPTVBVVEU6XHJcbiAgICAgICAgbGV0IHJlY29tcFRhYiA9IG5ldyBSZWNvbXB1dGVUYWJsZSgpO1xyXG4gICAgICAgIHJlY29tcFRhYi5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT01NQU5EOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBjb21tYW5kXCIpO1xyXG4gICAgICAgIHRoaXMuQ21kc1RvQ2xpZW50LmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0xBTkdVQUdFOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBsYW5ndWFnZSBkYXRhXCIpO1xyXG4gICAgICAgIGF3YWl0IExhbmd1YWdlRGF0YS5JbnN0YW5jZS5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19LQkRNQVBfVVJMOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBrZXlCb2FyZFwiKTtcclxuICAgICAgICBhd2FpdCBFbnZpcm9ubWVudC5JbnN0YW5jZS5maWxsRnJvbVVybChmb3VuZFRhZ05hbWUsIHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0tCRE1BUDpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfQ09NUE1BSU5QUkc6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGNvbXBtYWlucHJnXCIpO1xyXG4gICAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldENvbXBNYWluUHJnVGFiKCkuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlRTX1FVRVVFOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBldmVudHNxdWV1ZVwiKTtcclxuICAgICAgICB0aGlzLmZpbGxFdmVudHNRdWV1ZShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19UQVNLVVJMOlxyXG4gICAgICAgIGF3YWl0IFRhc2suUHJvY2Vzc1Rhc2tVUkwoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX1RBU0s6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIHRhc2tcIik7XHJcbiAgICAgICAgbGV0IHRhc2tDb3VudEJlZm9yZTogbnVtYmVyID0gdGhpcy5fbXByZ1RhYi5nZXRTaXplKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbXByZ1RhYi5maWxsRGF0YSh0aGlzLCBvcGVuaW5nVGFza0RldGFpbHMsIHBhcnNlcik7XHJcbiAgICAgICAgLy8gUUNSICM3NTk5MTE6IG1wcmcgbXVzdCBiZWxvbmcgdG8gdGhlIG1haW4gYXBwbGljYXRpb24ncyBNR0RhdGEuXHJcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIGl0IHdpbGwgbm90IGJlIGRpc2NhcmRlZCB1bnRpbCB0aGUgZW5kIG9mIGV4ZWN1dGlvbi5cclxuICAgICAgICAvLyBUaGVyZSBjb3VsZCBiZSBtb3JlIHRoZW4gMSBtcHJncyB0aGF0IGFyZSBhZGRlZCAoUWNyICMxNjg1NDkpXHJcbiAgICAgICAgaWYgKHRoaXMuX2lkICE9PSAwKSB7XHJcbiAgICAgICAgICBsZXQgdGFza0NvdW50QWZ0ZXI6IG51bWJlciA9IHRoaXMuX21wcmdUYWIuZ2V0U2l6ZSgpO1xyXG4gICAgICAgICAgbGV0IG1nZDA6IE1HRGF0YSA9IEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5nZXRNR0RhdGEoMCk7XHJcbiAgICAgICAgICAvLyBjaGVjayBhbGwgdGhlIG5ldyBtYWluIHByZ3MuXHJcbiAgICAgICAgICBmb3IgKGxldCB0YXNrSW5kZXg6IG51bWJlciA9IHRhc2tDb3VudEJlZm9yZTsgdGFza0luZGV4IDwgdGFza0NvdW50QWZ0ZXI7IHRhc2tJbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdUYXNrOiBUYXNrID0gPFRhc2s+dGhpcy5fbXByZ1RhYi5nZXRUYXNrKHRhc2tJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChuZXdUYXNrLmlzTWFpblByb2coKSAmJiBtZ2QwLl9tcHJnVGFiLmdldFRhc2sobmV3VGFzay5nZXRUYXNrVGFnKCkpID09IG51bGwpIHtcclxuICAgICAgICAgICAgICBtZ2QwLl9tcHJnVGFiLmFkZFRhc2sobmV3VGFzayk7XHJcbiAgICAgICAgICAgICAgbWdkMC5hZGRUYXNrKG5ld1Rhc2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlY6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGVudmlyb25tZW50XCIpO1xyXG4gICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0ZMV01UUl9DT05GSUc6XHJcbiAgICAgICAgRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZS5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfWE1MX0VORDpcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNFUl9ERVRBSUxTOlxyXG4gICAgICAgIFVzZXJEZXRhaWxzLkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQkhfUkVBTF9JRFhTOlxyXG4gICAgICAgIC8vIFdlYmNsaWVudCBUT0RPIDogcmVtb3ZlIHNlcmlhbGl6YXRpb24gb2YgdGhpcyBmcm9tIHNlcnZlclxyXG4gICAgICAgIHBhcnNlci5Ta2lwWE1MRWxlbWVudCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19HTE9CQUxQQVJBTVNDSEFOR0VTOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiYXBwbHlpbmcgZ2xvYmFsIHBhcmFtcyBjaGFuZ2VzIGZyb20gdGhlIHNlcnZlciAoU2V0L0dldFBhcmFtcylcIik7XHJcbiAgICAgICAgR2xvYmFsUGFyYW1zLkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0dMT0JBTFBBUkFNUzpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcInByb2Nlc3NpbmcgYmFzZTY0IGVuY29kZWQgaW1hZ2Ugb2YgYWxsIGdsb2JhbCBwYXJhbXMgZnJvbSB0aGUgc2VydmVyXCIpO1xyXG4gICAgICAgIHRoaXMuZmlsbEdsb2JhbFBhcmFtcyhwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU1fVVJMOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBlbnYgcGFyYW1zIG5hbWUgXCIpO1xyXG4gICAgICAgIGF3YWl0IEVudmlyb25tZW50Lkluc3RhbmNlLmZpbGxGcm9tVXJsKGZvdW5kVGFnTmFtZSwgcGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRU5WX1BBUkFNOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBlbnYgcGFyYW1zIG5hbWUgXCIpO1xyXG4gICAgICAgIEVudlBhcmFtc1RhYmxlLkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTlRFWFRfSUQ6IHtcclxuICAgICAgICBsZXQgY3R4SWQ6IHN0cmluZztcclxuICAgICAgICBsZXQgY3R4RW5kSWR4OiBudW1iZXI7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIGN0eEVuZElkeCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgY3R4SWQgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGN0eEVuZElkeCkudHJpbSgpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoY3R4RW5kSWR4KTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLkNvbnRleHRJRCA9IGN0eElkO1xyXG4gICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1NFU1NJT05fSUQ6XHJcbiAgICAgICAgLy8gcGFyc2Ugc2Vzc2lvbiBpZCByZWNlaXZlZCBpbiAxc3QgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgZm9yIG9mZmxpbmUgY2xpZW50XHJcbiAgICAgICAgLy8gYW5kIHNhdmUgc2Vzc2lvbmlkIG9uIGNsaWVudC5cclxuICAgICAgICBsZXQgc2Vzc2lvbklkRW5kSWR4OiBudW1iZXI7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIHNlc3Npb25JZEVuZElkeCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuR2V0SW5zdGFuY2UoKS5TZXNzaW9uSWQgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKHNlc3Npb25JZEVuZElkeCkudHJpbSgpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoc2Vzc2lvbklkRW5kSWR4KTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0hUVFBfQ09NTVVOSUNBVElPTl9USU1FT1VUOiB7XHJcbiAgICAgICAgbGV0IGh0dHBDb21tdW5pY2F0aW9uVGltZW91dDogbnVtYmVyOyAvLyBjb21tdW5pY2F0aW9uLWxldmVsIHRpbWVvdXQgKGkuZS4gdGhlIGFjY2VzcyB0byB0aGUgd2ViIHNlcnZlciwgTk9UIHRoZSBlbnRpcmUgcmVxdWVzdC9yZXNwb25zZSByb3VuZC10cmlwKSwgaW4gc2Vjb25kcy5cclxuICAgICAgICBsZXQgaHR0cENvbW11bmljYXRpb25UaW1lb3V0SWR4OiBudW1iZXI7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIGh0dHBDb21tdW5pY2F0aW9uVGltZW91dElkeCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgaHR0cENvbW11bmljYXRpb25UaW1lb3V0ID0gTk51bWJlci5QYXJzZShwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGh0dHBDb21tdW5pY2F0aW9uVGltZW91dElkeCkpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoaHR0cENvbW11bmljYXRpb25UaW1lb3V0SWR4KTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgSHR0cE1hbmFnZXIuR2V0SW5zdGFuY2UoKS5IdHRwQ29tbXVuaWNhdGlvblRpbWVvdXRNUyA9IGh0dHBDb21tdW5pY2F0aW9uVGltZW91dCAqIDEwMDA7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREFUQUJBU0VfVVJMOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBQkFTRVNfSEVBREVSOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19UQVNLREVGSU5JVElPTl9JRFNfVVJMOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQkhfREFUQV9JRFNfVVJMOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQkhTX0VORDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfT0ZGTElORV9TTklQUEVUU19VUkw6XHJcbiAgICAgICAgLy8gVE9ETzogc2VydmVyIHNob3VsZCBub3Qgc2VyaWFsaXplIHRoZXNlIGVsZW1lbnRzLlxyXG4gICAgICAgIHBhcnNlci5Ta2lwWE1MRWxlbWVudCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREJIUzpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfU1RBUlRVUF9QUk9HUkFNOlxyXG4gICAgICAgIC8vIFRPRE86IHNlcnZlciBzaG91bGQgbm90IHNlcmlhbGl6ZSB0aGVzZSBlbGVtZW50cy5cclxuICAgICAgICBwYXJzZXIuUmVhZENvbnRlbnRPZkN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfTUVOVVNfT1BFTjpcclxuICAgICAgICAvLyBUT0RPIC0gbm90IHRvIHNlcmlhbGl6ZSBbU3RvcnkgMTU0NTQ3XVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBuYW1lIGluIE1HRGF0YSwgYWRkIGNhc2UgdG8gTUdEYXRhLmluaXRJbm5lck9iamVjdHMgYW5kIGNhc2UgdG8gd2hpbGUgb2YgTUdEYXRhLkZpbGxEYXRhICBcIiArIGZvdW5kVGFnTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSW5zZXJ0IFJlY29yZHMgVGFibGUgdG8gRGF0YVZpZXcgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gaWYgdGhlIHRhc2sgb2YgZGF0YXZpZXcgZm91bmQ8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBpbnNlcnREYXRhVmlldyhwYXJzZXI6IFhtbFBhcnNlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSBudWxsO1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgbGV0IGluZGV4OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RBVEFWSUVXLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RBVEFWSUVXLmxlbmd0aDtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTGRhdGEoKS5zdWJzdHIoaW5kZXgsIGVuZENvbnRleHQgLSBpbmRleCksICdcIicpLyonXCInKi87XHJcbiAgICBsZXQgaW52YWxpZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLy8gbG9vayBmb3IgdGhlIHRhc2sgaWRcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBpID0gaSArIDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gdG9rZW5zVmVjdG9yLmdldF9JdGVtKGkpO1xyXG4gICAgICBpZiAoYXR0cmlidXRlID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9UQVNLSUQpIHtcclxuICAgICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9IHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShpICsgMSk7XHJcbiAgICAgICAgbGV0IHRhc2tJZDogc3RyaW5nID0gdmFsdWVTdHI7XHJcbiAgICAgICAgdGFzayA9ICh0aGlzLmdldFRhc2sodGFza0lkKSB8fCAoPFRhc2s+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldFRhc2tCeUlEKHRhc2tJZCkpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXR0cmlidXRlID09PSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lOVkFMSURBVEUpIHtcclxuICAgICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9IHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShpICsgMSk7XHJcbiAgICAgICAgaW52YWxpZGF0ZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbjtcclxuICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgIC8vIGFkZCB0aGUgcmVjb3JkcyBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHJlY29yZCBpbiB0aGUgZGF0YXZpZXdcclxuICAgICAgYXdhaXQgdGFzay5pbnNlcnRSZWNvcmRUYWJsZShpbnZhbGlkYXRlLCBwYXJzZXIpO1xyXG4gICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IGZhbHNlOyAvLyB0aGUgdGFzayBub3QgZm91bmRcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIHRhc2sgdG8gdGFza1RhYlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdUYXNrXCI+dG8gYmUgYWRkZWQ8L3BhcmFtPlxyXG4gIGFkZFRhc2sobmV3VGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFza3NUYWIuYWRkVGFzayhuZXdUYXNrKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1vdmUgYSB0YXNrIGZyb20gdGhlIHRhc2tzIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj48L3BhcmFtPlxyXG4gIHJlbW92ZVRhc2sodGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFza3NUYWIucmVtb3ZlVGFzayh0YXNrKTtcclxuICAgIHRoaXMuX21wcmdUYWIucmVtb3ZlVGFzayh0YXNrKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGFza3MgaW4gdGhlIHRhc2tzIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFRhc2tzQ291bnQoKTogbnVtYmVyIHtcclxuICAgIGxldCByZXN1bHQ6IG51bWJlcjtcclxuICAgIGlmICh0aGlzLl90YXNrc1RhYiAhPT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLl90YXNrc1RhYi5nZXRTaXplKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRUYXNrKHRhc2tJZDogc3RyaW5nKTogVGFzaztcclxuICBnZXRUYXNrKGlkeDogbnVtYmVyKTogVGFzaztcclxuICBnZXRUYXNrKHRhc2tJZE9ySWR4OiBhbnkpOiBUYXNrIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmICh0YXNrSWRPcklkeCA9PT0gbnVsbCB8fCB0eXBlb2YgdGFza0lkT3JJZHggPT09IFwidW5kZWZpbmVkXCIgfHwgdGFza0lkT3JJZHguY29uc3RydWN0b3IgPT09IFN0cmluZykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFza18wKHRhc2tJZE9ySWR4KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdldFRhc2tfMSh0YXNrSWRPcklkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhIHRhc2sgYnkgaXRzIGlkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tJZFwiPnRhc2sgSUQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgZ2V0VGFza18wKHRhc2tJZDogc3RyaW5nKTogVGFzayB7XHJcbiAgICBsZXQgcmVzdWx0OiBUYXNrO1xyXG4gICAgaWYgKHRoaXMuX3Rhc2tzVGFiICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLl90YXNrc1RhYiAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICByZXN1bHQgPSA8VGFzaz50aGlzLl90YXNrc1RhYi5nZXRUYXNrKHRhc2tJZCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhIHRhc2sgYnkgaXRzIGluZGV4IGluIHRoZSB0YXNrcyB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj5pbmRleCBvZiB0aGUgdGFzayBpbiB0aGUgdGFza3MgdGFibGU8L3BhcmFtPlxyXG4gIHByaXZhdGUgZ2V0VGFza18xKGlkeDogbnVtYmVyKTogVGFzayB7XHJcbiAgICByZXR1cm4gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGJ1aWxkIFhNTCBzdHJpbmcgb2YgdGhlIE1HRGF0YSBvYmplY3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1lc3NhZ2VcIj5hIG1lc3NhZ2UgYmVpbmcgcHJlcGFyZWQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzZXJpYWxpemVUYXNrc1wiPmlmIHRydWUsIHRhc2tzIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiB3aWxsIGFsc28gYmUgc2VyaWFsaXplZC48L3BhcmFtPlxyXG4gIGFzeW5jIGJ1aWxkWE1MKG1lc3NhZ2U6IFN0cmluZ0J1aWxkZXIsIHNlcmlhbGl6ZVRhc2tzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5DbWRzVG9TZXJ2ZXIgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5DbWRzVG9TZXJ2ZXIuYnVpbGRYTUwobWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VyaWFsaXplVGFza3MgJiYgdGhpcy5fdGFza3NUYWIgIT09IG51bGwpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fdGFza3NUYWIuYnVpbGRYTUwobWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBmaXJzdCB0YXNrIHdoaWNoIGlzIG5vdCBhIG1haW4gcHJvZ3JhbSBpbiB0aGUgdGFzayB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Rmlyc3RUYXNrKCk6IFRhc2sge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSBudWxsO1xyXG4gICAgbGV0IE1ESUZyYW1lVGFzazogVGFzayA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fdGFza3NUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgdGFzayA9IDxUYXNrPnRoaXMuX3Rhc2tzVGFiLmdldFRhc2soaSk7XHJcbiAgICAgIGlmICghdGFzay5pc01haW5Qcm9nKCkpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgdGFzayA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGFzayA9PT0gbnVsbCAmJiB0aGlzLl9pZCA9PT0gMCkge1xyXG4gICAgICB0YXNrID0gTURJRnJhbWVUYXNrOyAvLyByZXR1cm4gTURJIGZyYW1lIHByb2dyYW1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhIG1haW4gcHJvZ3JhbSBvZiBhIGNvbXBvbmVudCBieSBpdHMgY3RsIGlkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdGxJZHhcIj50aGUgY3RsIGlkeDwvcGFyYW0+XHJcbiAgZ2V0TWFpblByb2coY3RsSWR4OiBudW1iZXIpOiBUYXNrIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9tcHJnVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrID0gPFRhc2s+dGhpcy5fbXByZ1RhYi5nZXRUYXNrKGkpO1xyXG4gICAgICBpZiAodGFzay5nZXRDdGxJZHgoKSA9PT0gY3RsSWR4ICYmIHRhc2suaXNNYWluUHJvZygpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhc2s7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG5leHQgbWFpbiBwcm9ncmFtIGluIHRoZSBzZWFyY2ggb3JkZXIgQUZURVIgdGhlIGN0bElkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdGxJZHhcIj50aGUgY3VycmVudCBjdGwgaWR4PC9wYXJhbT5cclxuICBnZXROZXh0TWFpblByb2coY3RsSWR4OiBudW1iZXIpOiBUYXNrIHtcclxuICAgIGxldCBjb21wTWFpblByZ1RhYjogQ29tcE1haW5QcmdUYWJsZSA9IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldENvbXBNYWluUHJnVGFiKCk7XHJcbiAgICBsZXQgY3VyclNlYXJjaEluZGV4OiBudW1iZXIgPSBjb21wTWFpblByZ1RhYi5nZXRJbmRleE9mKGN0bElkeCk7XHJcbiAgICBsZXQgbmV4dEN0bElkeDogbnVtYmVyID0gY29tcE1haW5QcmdUYWIuZ2V0Q3RsSWR4KGN1cnJTZWFyY2hJbmRleCArIDEpO1xyXG4gICAgbGV0IHJlc3VsdDogVGFzaztcclxuICAgIGlmIChuZXh0Q3RsSWR4ID09PSAtMSkge1xyXG4gICAgICByZXN1bHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMuZ2V0TWFpblByb2cobmV4dEN0bElkeCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgd2hldGhlciBhbnkgb2YgdGhlIHRhc2sgaGFzIHBlbmRpbmcgY2xpZW50IHNpZGUgdHJhbnNhY3Rpb24gY2FjaGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNsaWVudFRyYW5zYWN0aW9uQ2FjaGVFeGlzdHMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFzazogVGFzaztcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrc1RhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICB0YXNrID0gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpKTtcclxuICAgICAgaWYgKCF0YXNrLmlzTWFpblByb2coKSAmJiAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLm1vZGlmaWVkUmVjb3Jkc051bWJlcigpID4gMCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHdoZXRoZXIgYW55IG9mIHRoZSB0YXNrIGhhcyBwZW5kaW5nIHNlcnZlciBzaWRlXHJcbiAgLy8vICAgdHJhbnNhY3Rpb24gY2FjaGUgd2hpY2ggaXMgbm90IHlldCBjb21taXR0ZWQgdG8gREJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNlcnZlclRyYW5zYWN0aW9uQ2FjaGVFeGlzdHMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFzazogVGFzaztcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrc1RhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICB0YXNrID0gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpKTtcclxuICAgICAgaWYgKCF0YXNrLmlzTWFpblByb2coKSAmJiAhKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5TZXJ2ZXJUcmFuc2FjdGlvbkNhY2hlRW1wdHkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZWFyY2ggdGFzayB0aGF0IG1hdGNoZXMgYnkgVGFza0RlZmluaXRpb25JZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFRhc2tCeVRhc2tEZWZpbml0aW9uSUQodGFza0RlZmluaXRpb25JRDogVGFza0RlZmluaXRpb25JZCk6IFRhc2sge1xyXG4gICAgbGV0IHRhc2s6IFRhc2s7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fdGFza3NUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgdGFzayA9IDxUYXNrPnRoaXMuX3Rhc2tzVGFiLmdldFRhc2soaSk7XHJcbiAgICAgIGlmICh0YXNrLlRhc2tEZWZpbml0aW9uSWQuRXF1YWxzKHRhc2tEZWZpbml0aW9uSUQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhc2s7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgdGltZXIgZXZlbnQgaGFuZGxlcnNcclxuICBnZXRUaW1lckhhbmRsZXJzKCk6IEhhbmRsZXJzVGFibGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVySGFuZGxlcnM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIGEgdGltZXIgZXZlbnQgaGFuZGxlciB0byB0aGUgdGltZXIgZXZlbnQgaGFuZGxlcnMgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaGFuZGxlclwiPmEgcmVmZXJlbmNlIHRvIGEgdGltZXIgZXZlbnQgaGFuZGxlcjwvcGFyYW0+XHJcbiAgYWRkVGltZXJIYW5kbGVyKGhhbmRsZXI6IEV2ZW50SGFuZGxlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fdGltZXJIYW5kbGVycy5hZGQoaGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVtb3ZlcyB0aW1lciBoYW5kbGVycyBmb3IgdGhlIHNwZWNpZmljIHRhc2tcclxuICAvLy8gICBpdCBpcyBuZWVkZWQgZm9yIGRlc3RpbmF0aW9uIGNhbGwgZm9yIGV4aXQgZnJvbSB0aGUgcHJldmlvdXMgc3ViZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVtb3ZlVGltZXJIYW5kbGVyKHRhc2s6IFRhc2spOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdGltZXJIYW5kbGVycy5nZXRTaXplKCk7KSB7XHJcbiAgICAgIGxldCB0aW1lclRhc2s6IFRhc2sgPSB0aGlzLl90aW1lckhhbmRsZXJzLmdldEhhbmRsZXIoaSkuZ2V0VGFzaygpO1xyXG4gICAgICBpZiAodGltZXJUYXNrLmlzRGVzY2VuZGVudE9mKHRhc2spICYmIHRpbWVyVGFzay5nZXRNR0RhdGEoKSA9PT0gdGhpcylcclxuICAgICAgICB0aGlzLl90aW1lckhhbmRsZXJzLnJlbW92ZShpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1vdmVzIGV4cHJlc3Npb24gaGFuZGxlcnMgZm9yIHRoZSBzcGVjaWZpYyB0YXNrXHJcbiAgLy8vICAgaXQgaXMgbmVlZGVkIGZvciBkZXN0aW5hdGlvbiBjYWxsIGZvciBleGl0IGZyb20gdGhlIHByZXZpb3VzIHN1YmZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlbW92ZUV4cHJlc3Npb25IYW5kbGVyKHRhc2s6IFRhc2spOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZXhwSGFuZGxlcnMuZ2V0U2l6ZSgpOykge1xyXG4gICAgICBsZXQgdGltZXJUYXNrOiBUYXNrID0gdGhpcy5fZXhwSGFuZGxlcnMuZ2V0SGFuZGxlcihpKS5nZXRUYXNrKCk7XHJcbiAgICAgIGlmICh0aW1lclRhc2suaXNEZXNjZW5kZW50T2YodGFzaykgJiYgdGltZXJUYXNrLmdldE1HRGF0YSgpID09PSB0aGlzKVxyXG4gICAgICAgIHRoaXMuX2V4cEhhbmRsZXJzLnJlbW92ZShpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGV4cHJlc3Npb24gZXZlbnQgaGFuZGxlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEV4cEhhbmRsZXJzKCk6IEhhbmRsZXJzVGFibGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V4cEhhbmRsZXJzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBhIGV4cHJlc3Npb24gZXZlbnQgaGFuZGxlciB0byB0aGUgZXhwcmVzc2lvbiBldmVudCBoYW5kbGVycyB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJoYW5kbGVyXCI+YSByZWZlcmVuY2UgdG8gYW4gZXhwcmVzc2lvbiBldmVudCBoYW5kbGVyPC9wYXJhbT5cclxuICBhZGRFeHBIYW5kbGVyKGhhbmRsZXI6IEV2ZW50SGFuZGxlciwgaWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2V4cEhhbmRsZXJzLmluc2VydEFmdGVyKGhhbmRsZXIsIGlkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc3RvcHMgdGltZXJzIHRoYXQgYWxyZWFkeSBubyBuZWVkZWQgYW5kIHN0YXJ0IG5ldyB0aW1lcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib2xkVGltZXJzXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1RpbWVyc1wiPjwvcGFyYW0+XHJcbiAgY2hhbmdlVGltZXJzKG9sZFRpbWVyczogTGlzdDxudW1iZXI+LCBuZXdUaW1lcnM6IExpc3Q8bnVtYmVyPik6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgajogbnVtYmVyID0gMDtcclxuICAgIGxldCBndWlNYW5hZ2VyOiBHVUlNYW5hZ2VyID0gR1VJTWFuYWdlci5JbnN0YW5jZTtcclxuICAgIG9sZFRpbWVycy5zb3J0KCk7XHJcbiAgICBuZXdUaW1lcnMuc29ydCgpO1xyXG4gICAgd2hpbGUgKGkgPCBvbGRUaW1lcnMubGVuZ3RoICYmIGogPCBuZXdUaW1lcnMubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChvbGRUaW1lcnMuZ2V0X0l0ZW0oaSkgPiBuZXdUaW1lcnMuZ2V0X0l0ZW0oaikpIHtcclxuICAgICAgICBndWlNYW5hZ2VyLnN0YXJ0VGltZXIodGhpcywgbmV3VGltZXJzLmdldF9JdGVtKGopLCBmYWxzZSk7XHJcbiAgICAgICAgaiA9IGogKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChvbGRUaW1lcnMuZ2V0X0l0ZW0oaSkgPCBuZXdUaW1lcnMuZ2V0X0l0ZW0oaikpIHtcclxuICAgICAgICAgIGd1aU1hbmFnZXIuc3RvcFRpbWVyKHRoaXMsIG9sZFRpbWVycy5nZXRfSXRlbShpKSwgZmFsc2UpO1xyXG4gICAgICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgICAgIGogPSBqICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdoaWxlIChpIDwgb2xkVGltZXJzLmxlbmd0aCkge1xyXG4gICAgICBndWlNYW5hZ2VyLnN0b3BUaW1lcih0aGlzLCBvbGRUaW1lcnMuZ2V0X0l0ZW0oaSksIGZhbHNlKTtcclxuICAgICAgaSA9IGkgKyAxO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGogPCBuZXdUaW1lcnMubGVuZ3RoKSB7XHJcbiAgICAgIGd1aU1hbmFnZXIuc3RhcnRUaW1lcih0aGlzLCBuZXdUaW1lcnMuZ2V0X0l0ZW0oaiksIGZhbHNlKTtcclxuICAgICAgaiA9IGogKyAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBkYXRhIGZyb20gPGV2ZW50c3F1ZXVlPiB0YWcgdG8gdGhlIGV2ZW50cyBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBmaWxsRXZlbnRzUXVldWUocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIHdoaWxlICh0aGlzLmluaXRFdmVudHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBSdW4gVGltZSBFdmVudHMgdG8gdGhlIGV2ZW50cyBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb3VuZFRhZ05hbWVcIj5wb3NzaWJsZSB0YWcgbmFtZSwgbmFtZSBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkPC9wYXJhbT5cclxuICBwcml2YXRlIGluaXRFdmVudHMocGFyc2VyOiBYbWxQYXJzZXIsIGZvdW5kVGFnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuO1xyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZm91bmRUYWdOYW1lID09PSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQpIHtcclxuICAgICAgICBsZXQgZXZ0OiBSdW5UaW1lRXZlbnQgPSBuZXcgUnVuVGltZUV2ZW50KG51bGwpO1xyXG4gICAgICAgIGV2dC5maWxsRGF0YShwYXJzZXIsIG51bGwpO1xyXG4gICAgICAgIGV2dC5jb252ZXJ0UGFyYW1zVG9BcmdzKCk7XHJcbiAgICAgICAgZXZ0LnNldFRhc2sobnVsbCk7XHJcbiAgICAgICAgZXZ0LnNldEZyb21TZXJ2ZXIoKTtcclxuICAgICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5hZGRUb1RhaWwoZXZ0KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZm91bmRUYWdOYW1lID09PSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlRTX1FVRVVFKSB7XHJcbiAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihcIj5cIiwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IFwiL1wiICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UU19RVUVVRSkge1xyXG4gICAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gRXZlbnRzUXVldWU6IFwiICsgZm91bmRUYWdOYW1lKTtcclxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGZvciB0aGUgbWFpbiB3aW5kb3dzIE1HRGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNNYWluV2luZG93KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudCA9PT0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBwYXJlbnQgTUdEZGF0YSBvZiB0aGlzIE1HRGF0YSAobWlnaHQgYmUgbnVsbClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFBhcmVudE1HZGF0YSgpOiBNR0RhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGFib3J0aW5nIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFib3J0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5Jc0Fib3J0aW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgYWxsIGNvbW1hbmRzIHdoaWNoIGFyZSBub3QgYXR0YWNoZWQgdG8gYW55IHdpbmRvdyBpbnRvIHRoZSBjdXJyZW50IHdpbmRvd1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29weVVuZnJhbWVkQ21kcygpOiB2b2lkIHtcclxuICAgIGxldCB1bmZyYW1lZENtZHM6IExpc3Q8SUNsaWVudENvbW1hbmQ+ID0gR2xvYmFsQ29tbWFuZHNNYW5hZ2VyLkluc3RhbmNlLmdldFVuZnJhbWVkQ21kcygpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHVuZnJhbWVkQ21kcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICB0aGlzLkNtZHNUb0NsaWVudC5BZGQodW5mcmFtZWRDbWRzLmdldF9JdGVtKGkpKTtcclxuICAgIH1cclxuICAgIHVuZnJhbWVkQ21kcy5TZXRTaXplKDApO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgYW4gYW5jZXN0b3Igb2YgdGhpcyBNR0RhdGEgb2JqZWN0IHdoaWNoIGlzIG5vdCBwZW5kaW5nIHVubG9hZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VmFsaWRBbmNlc3RvcigpOiBNR0RhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICB9XHJcblxyXG4gIGdldE1heEN0bElkeCgpOiBudW1iZXIge1xyXG4gICAgbGV0IHJjOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3Rhc2tzVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrID0gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpKTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICByYyA9IE1hdGgubWF4KHJjLCB0YXNrLmdldEN0bElkeCgpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJjO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBzYXZlIHRoZSBnbG9iYWwgcGFyYW1zIChvbmUgYmFzZTY0IGVuY29kZWQgdmFsdWUpIHRoYXQgd2FzIHBhc3NlZCBmcm9tIHRoZSBydW50aW1lLWVuZ2luZSB0byB0aGUgcmljaC1jbGllbnQ8L3N1bW1hcnk+XHJcbiAgZmlsbEdsb2JhbFBhcmFtcyhwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IFhNTGRhdGE6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxkYXRhKCk7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IFhNTGRhdGEubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGZpbmQgbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19HTE9CQUxQQVJBTVMpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0dMT0JBTFBBUkFNUy5sZW5ndGgpO1xyXG5cclxuICAgICAgbGV0IHRva2VuczogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuUGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuXHJcbiAgICAgIERlYnVnLkFzc2VydCh0b2tlbnMuZ2V0X0l0ZW0oMCkgPT09IFhNTENvbnN0YW50cy5NR19BVFRSX1ZBTFVFKTtcclxuICAgICAgU2VydmVyQ29uZmlnLkluc3RhbmNlLnNldEdsb2JhbFBhcmFtcyh0b2tlbnMuZ2V0X0l0ZW0oMSkpO1xyXG5cclxuICAgICAgZW5kQ29udGV4dCA9IFhNTGRhdGEuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIGVuZENvbnRleHQpO1xyXG4gICAgICBpZiAoZW5kQ29udGV4dCA9PT0gLTEpXHJcbiAgICAgICAgZW5kQ29udGV4dCA9IFhNTGRhdGEubGVuZ3RoO1xyXG5cclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
552
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUdEYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy90YXNrcy9NR0RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFeEQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBUSxPQUFPLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFDLGtCQUFrQixFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9CQUFvQixDQUFD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UUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRTVJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTFELFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDaEUsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUU5QixNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIYW5kbGVyc1RhYmxlfSBmcm9tIFwiLi4vcnQvSGFuZGxlcnNUYWJsZVwiO1xyXG5pbXBvcnQge1Rhc2tzVGFibGV9IGZyb20gXCIuL1Rhc2tzVGFibGVcIjtcclxuaW1wb3J0IHtJQ29tbWFuZHNUYWJsZX0gZnJvbSBcIi4uL0lDb21tYW5kc1RhYmxlXCI7XHJcbmltcG9ydCB7Q29tcE1haW5QcmdUYWJsZX0gZnJvbSBcIi4uL3J0L0NvbXBNYWluUHJnVGFibGVcIjtcclxuaW1wb3J0IHtNZ0Zvcm19IGZyb20gXCIuLi9ndWkvTWdGb3JtXCI7XHJcbmltcG9ydCB7VGFza30gZnJvbSBcIi4vVGFza1wiO1xyXG5pbXBvcnQge09wZW5pbmdUYXNrRGV0YWlsc30gZnJvbSBcIi4vVGFza0Jhc2VcIjtcclxuaW1wb3J0IHtMb2dnZXIsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge1JlY29tcHV0ZVRhYmxlfSBmcm9tIFwiLi4vcnQvUmVjb21wdXRlVGFibGVcIjtcclxuaW1wb3J0IHtEZWJ1ZywgTGlzdCwgTk51bWJlciwgU3RyaW5nQnVpbGRlcn0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7UnVudGltZUNvbnRleHRCYXNlLCBUYXNrRGVmaW5pdGlvbklkfSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHtFdmVudEhhbmRsZXJ9IGZyb20gXCIuLi9ldmVudC9FdmVudEhhbmRsZXJcIjtcclxuaW1wb3J0IHtHVUlNYW5hZ2VyfSBmcm9tIFwiLi4vR1VJTWFuYWdlclwiO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tIFwiLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmRcIjtcclxuaW1wb3J0IHtIdHRwTWFuYWdlcn0gZnJvbSBcIi4uL2h0dHAvSHR0cE1hbmFnZXJcIjtcclxuaW1wb3J0IHtGbG93TW9uaXRvclF1ZXVlfSBmcm9tIFwiLi4vdXRpbC9GbG93TW9uaXRvclF1ZXVlXCI7XHJcbmltcG9ydCB7UnVuVGltZUV2ZW50fSBmcm9tIFwiLi4vZXZlbnQvUnVuVGltZUV2ZW50XCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5pbXBvcnQge0xhbmd1YWdlRGF0YX0gZnJvbSBcIi4uL2Vudi9MYW5ndWFnZURhdGFcIjtcclxuaW1wb3J0IHtFbnZQYXJhbXNUYWJsZX0gZnJvbSBcIi4uL2Vudi9FbnZWYXJpYWJsZXNUYWJsZVwiO1xyXG5pbXBvcnQge0dsb2JhbFBhcmFtc30gZnJvbSBcIi4uL2V4cC9HbG9iYWxQYXJhbXNUYWJsZVwiO1xyXG5pbXBvcnQge0Vudmlyb25tZW50fSBmcm9tIFwiLi4vZW52L0Vudmlyb25tZW50XCI7XHJcbmltcG9ydCB7R2xvYmFsQ29tbWFuZHNNYW5hZ2VyfSBmcm9tIFwiLi4vR2xvYmFsQ29tbWFuZHNNYW5hZ2VyXCI7XHJcbmltcG9ydCB7U2VydmVyQ29uZmlnfSBmcm9tIFwiLi4vU2VydmVyQ29uZmlnXCI7XHJcbmltcG9ydCB7QWNjZXNzSGVscGVyfSBmcm9tIFwiLi4vQWNjZXNzSGVscGVyXCI7XHJcbmltcG9ydCB7VXNlckRldGFpbHN9IGZyb20gXCIuLi9zZWN1cml0eS9Vc2VyRGV0YWlsc1wiO1xyXG5pbXBvcnQge1JlbW90ZUNvbW1hbmRzUHJvY2Vzc29yfSBmcm9tIFwiLi4vcmVtb3RlL1JlbW90ZUNvbW1hbmRzUHJvY2Vzc29yXCI7XHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gXCIuLi8uLlwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBSZXByZXNlbnRzIGFsbCBkZXRhaWxzIHJlbGV2YW50IHRvIGEgc3BlY2lmaWMgdGFzayAtIHJlbGF0ZWQgdGFza3MsIGNvbW1hbmRzLCBoYW5kbGVycywgZXRjLi5cclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIE1HRGF0YSB7XHJcbiAgcHJpdmF0ZSBfZXhwSGFuZGxlcnM6IEhhbmRsZXJzVGFibGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3BhcmVudDogTUdEYXRhID0gbnVsbDtcclxuICBwcml2YXRlIF9tcHJnVGFiOiBUYXNrc1RhYmxlID0gbnVsbDtcclxuICBwcml2YXRlIF90YXNrc1RhYjogVGFza3NUYWJsZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdGltZXJIYW5kbGVyczogSGFuZGxlcnNUYWJsZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdGltZXJzU3RhcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZm9yY2VNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIENtZHNUb0NsaWVudDogSUNvbW1hbmRzVGFibGUgPSBudWxsO1xyXG4gIENtZHNUb1NlcnZlcjogSUNvbW1hbmRzVGFibGUgPSBudWxsO1xyXG4gIElzTW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0Fib3J0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBGb3JjZU1vZGFsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9yY2VNb2RhbDtcclxuICB9XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcih0b0NsaWVudDogSUNvbW1hbmRzVGFibGUsIHRvU2VydmVyOiBJQ29tbWFuZHNUYWJsZSwgaWQ6IG51bWJlciwgcGFyZW50OiBNR0RhdGEsIGlzTW9kYWw6IGJvb2xlYW4pO1xyXG4gIGNvbnN0cnVjdG9yKHRvQ2xpZW50OiBJQ29tbWFuZHNUYWJsZSwgdG9TZXJ2ZXI6IElDb21tYW5kc1RhYmxlLCBpZDogbnVtYmVyLCBwYXJlbnQ6IE1HRGF0YSwgaXNNb2RhbDogYm9vbGVhbiwgZm9yY2VNb2RhbDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IodG9DbGllbnQ6IElDb21tYW5kc1RhYmxlLCB0b1NlcnZlcjogSUNvbW1hbmRzVGFibGUsIGlkOiBudW1iZXIsIHBhcmVudDogTUdEYXRhLCBpc01vZGFsOiBib29sZWFuLCBmb3JjZU1vZGFsPzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5DbWRzVG9TZXJ2ZXIgPSB0b0NsaWVudDtcclxuICAgIHRoaXMuQ21kc1RvQ2xpZW50ID0gdG9TZXJ2ZXI7XHJcblxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDUpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMChpZCwgcGFyZW50LCBpc01vZGFsKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKGlkLCBwYXJlbnQsIGlzTW9kYWwsIGZvcmNlTW9kYWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj50aGUgaWQgb2YgdGhpcyBtZ2RhdGEgb2JqZWN0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFwiPnRoZSBwYXJlbnQgTUdEYXRhPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlzTW9kYWxcIj50cnVlIGZvciBtb2RhbCB3aW5kb3dzPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoaWQ6IG51bWJlciwgcGFyZW50OiBNR0RhdGEsIGlzTW9kYWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLl90aW1lckhhbmRsZXJzID0gbmV3IEhhbmRsZXJzVGFibGUoKTtcclxuICAgIHRoaXMuX2V4cEhhbmRsZXJzID0gbmV3IEhhbmRsZXJzVGFibGUoKTtcclxuICAgIHRoaXMuX21wcmdUYWIgPSBuZXcgVGFza3NUYWJsZSgpO1xyXG4gICAgdGhpcy5fdGFza3NUYWIgPSBuZXcgVGFza3NUYWJsZSgpO1xyXG4gICAgdGhpcy5faWQgPSBpZDtcclxuICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcclxuICAgIGlmIChBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRDb21wTWFpblByZ1RhYigpID09PSBudWxsKSB7XHJcbiAgICAgIGxldCBjb21wTWFpblByZ1RhYjogQ29tcE1haW5QcmdUYWJsZSA9IG5ldyBDb21wTWFpblByZ1RhYmxlKCk7XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLnNldENvbXBNYWluUHJnVGFiKGNvbXBNYWluUHJnVGFiKTtcclxuICAgIH1cclxuICAgIHRoaXMuSXNNb2RhbCA9IGlzTW9kYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENUT1IgdG8gYmUgdXNlZCB3aGVuIHJ1bm5pbmcgb2ZmbGluZSB0YXNrcyAtIGhvbGQgdGhlIGNvbW1hbmQgdG8gZW5hYmxlIHJpZ2h0IHNldHRpbmcgb2YgbW9kYWxpdHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlkXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJlbnRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzTW9kYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvcmNlTW9kYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMShpZDogbnVtYmVyLCBwYXJlbnQ6IE1HRGF0YSwgaXNNb2RhbDogYm9vbGVhbiwgZm9yY2VNb2RhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKGlkLCBwYXJlbnQsIGlzTW9kYWwpO1xyXG4gICAgdGhpcy5mb3JjZU1vZGFsID0gZm9yY2VNb2RhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBpZCBvZiB0aGlzIE1HRGF0YSBvYmplY3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldElkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJucyB0cnVlIGlmIGFscmVhZHkgbW92ZWQgdG8gdGhlIGZpcnN0IGNvbnRyb2wgb24gb25lIG9mIHRoZSBNZ0RhdGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEFscmVhZHlNb3ZlZFRvRmlyc3RDb250cm9sKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFscmVhZHlNb3ZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHRhc2tzQ291bnQ6IG51bWJlciA9IHRoaXMuZ2V0VGFza3NDb3VudCgpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRhc2tzQ291bnQ7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgbWdGb3JtOiBNZ0Zvcm0gPSA8TWdGb3JtPnRoaXMuZ2V0VGFzayhpKS5nZXRGb3JtKCk7XHJcbiAgICAgIGlmIChtZ0Zvcm0gIT09IG51bGwgJiYgbWdGb3JtLk1vdmVkVG9GaXJzdENvbnRyb2wpIHtcclxuICAgICAgICBhbHJlYWR5TW92ZWQgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWxyZWFkeU1vdmVkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHN0YXJ0IHRoZSB0aW1lcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFN0YXJ0VGltZXJzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlcnMgIT09IG51bGwgJiYgIXRoaXMuX3RpbWVyc1N0YXJ0ZWQpIHtcclxuICAgICAgdGhpcy5fdGltZXJIYW5kbGVycy5zdGFydFRpbWVycyh0aGlzKTtcclxuICAgICAgdGhpcy5fdGltZXJzU3RhcnRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnVuY3Rpb24gZm9yIGZpbGxpbmcgb3duIGZpZWxkcywgYWxsb2NhdGUgbWVtb3J5IGZvciBpbm5lciBvYmplY3RzLiBQYXJzaW5nIHRoZSBpbnB1dCBTdHJpbmcuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBmaWxsRGF0YShvcGVuaW5nVGFza0RldGFpbHM6IE9wZW5pbmdUYXNrRGV0YWlscywgcGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIFRvIGF2b2lkIHRoZSBuZWVkIHRvIHNlbmQgZGF0YSB0aGF0IHNldHMgZGVmYXVsdCB2YWx1ZXMsIHdlJ2xsIGFzc3VtZSB3ZSB3YW50IHRoZSBkZWZhdWx0IHZhbHVlc1xyXG4gICAgLy8gdW5sZXNzIGRpZmZlcmVudCBpbmZvIHdhcyBzZW50LiBpLmUuIGlmIHRoZSByZWxldmFudCB0YWdzIGFyZSBub3QgaW4gdGhlIFhNTCwgc2V0IHRoZSBkZWZhdWx0IHZhbHVlcy5cclxuICAgIGxldCBjYW5Db250aW51ZTogYm9vbGVhbjtcclxuICAgIGRvIHtcclxuICAgICAgbGV0IG5leHRUYWc6IHN0cmluZyA9IHBhcnNlci5nZXROZXh0VGFnKCk7XHJcbiAgICAgIGNhbkNvbnRpbnVlID0gYXdhaXQgdGhpcy5pbml0SW5uZXJPYmplY3RzKHBhcnNlciwgbmV4dFRhZywgb3BlbmluZ1Rhc2tEZXRhaWxzKTtcclxuICAgIH1cclxuICAgIHdoaWxlIChjYW5Db250aW51ZSk7XHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcIk1HRGF0YS5GaWxsRGF0YSgpOiBUSEUgRU5EIG9mIHRoZSBwYXJzaW5nIFwiICsgcGFyc2VyLmdldEN1cnJJbmRleCgpICsgXCIgY2hhcmFjdGVyc1wiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyBhbGxvY2F0ZSBhbmQgZmlsbCBpbm5lciBvYmplY3RzIG9mIHRoZSBjbGFzc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb3VuZFRhZ05hbWVcIj5wb3NzaWJsZSB0YWcgbmFtZSwgbmFtZSBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvcGVuaW5nVGFza0RldGFpbHNcIj5hZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIG9wZW5pbmcgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB4bWxQYXJzZXIuZ2V0Q3VyckluZGV4KCksIHRoZSBmb3VuZCBvYmplY3QgdGFnIGFuZCBBTEwgaXRzIHN1YnRhZ3MgZmluaXNoPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYXN5bmMgaW5pdElubmVyT2JqZWN0cyhwYXJzZXI6IFhtbFBhcnNlciwgZm91bmRUYWdOYW1lOiBzdHJpbmcsIG9wZW5pbmdUYXNrRGV0YWlsczogT3BlbmluZ1Rhc2tEZXRhaWxzKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHN3aXRjaCAoZm91bmRUYWdOYW1lKSB7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19YTUw6XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpOyAvLyBkb1xyXG4gICAgICAgIC8vIG5vdGhpbmdcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREFUQVZJRVc6XHJcbiAgICAgICAgaWYgKCEgYXdhaXQgdGhpcy5pbnNlcnREYXRhVmlldyhwYXJzZXIpKSB7XHJcbiAgICAgICAgICAvLyB0aGUgdGFzayBvZiBpbnNlcnQgZGF0YSB2aWV3IG5vdCBmb3VuZCAtPiBzZXQgcGFyc2VycyBjb3VudGVyIHRvIHRoZVxyXG4gICAgICAgICAgLy8gZW5kIG9mIHRoZSBkYXRhIHZpZXdcclxuICAgICAgICAgIC8vIHRoZSBkYXRhIHZpZXcsIGdvdCBmcm9tIHNlcnZlciBhbmQgdGhlcmUgaXMgbm8gdGFzayB0byB0aGUgZGF0YSB2aWV3ICwgeWV0LlxyXG4gICAgICAgICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZignLycgKyBDb25zdEludGVyZmFjZS5NR19UQUdfREFUQVZJRVcsXHJcbiAgICAgICAgICAgIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQpO1xyXG4gICAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfQ09NUExFVEVfRFY6IHtcclxuICAgICAgICBsZXQgdGFzazogVGFzayA9IG51bGw7XHJcbiAgICAgICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT01QTEVURV9EViwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT01QTEVURV9EVi5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1MZGF0YSgpLnN1YnN0cihpbmRleCwgZW5kQ29udGV4dCAtIGluZGV4KSwgJ1wiJyk7XHJcbiAgICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbSgwKSk7XHJcbiAgICAgICAgbGV0IHZhbHVlU3RyOiBzdHJpbmc7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gWE1MQ29uc3RhbnRzLk1HX0FUVFJfVEFTS0lEKSB7XHJcbiAgICAgICAgICB2YWx1ZVN0ciA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oMSkpO1xyXG4gICAgICAgICAgbGV0IHRhc2tJZDogc3RyaW5nID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBpZiAodGhpcy5nZXRUYXNrKHRhc2tJZCkgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHRhc2sgPSA8VGFzaz5BY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0VGFza0J5SUQodGFza0lkKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGFzayA9IHRoaXMuZ2V0VGFzayh0YXNrSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RhcnQ6IG51bWJlciA9IGVuZENvbnRleHQgKyAxO1xyXG4gICAgICAgIGVuZENvbnRleHQgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLkVORF9UQUcgKyBDb25zdEludGVyZmFjZS5NR19UQUdfQ09NUExFVEVfRFYsXHJcbiAgICAgICAgICBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgIGxldCBkYXRhVmlld0NvbnRlbnQ6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxkYXRhKCkuc3Vic3RyKHN0YXJ0LCBlbmRDb250ZXh0IC0gc3RhcnQpO1xyXG4gICAgICAgIHRhc2suZGF0YVZpZXdDb250ZW50ID0gZGF0YVZpZXdDb250ZW50O1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCk7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTlRFWFQ6IHtcclxuICAgICAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQgdGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTlRFWFQpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTlRFWFQubGVuZ3RoKTtcclxuICAgICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFOlxyXG4gICAgICAgIGxldCByZWNvbXBUYWIgPSBuZXcgUmVjb21wdXRlVGFibGUoKTtcclxuICAgICAgICByZWNvbXBUYWIuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfQ09NTUFORDpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8gY29tbWFuZFwiKTtcclxuICAgICAgICB0aGlzLkNtZHNUb0NsaWVudC5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19MQU5HVUFHRTpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8gbGFuZ3VhZ2UgZGF0YVwiKTtcclxuICAgICAgICBhd2FpdCBMYW5ndWFnZURhdGEuSW5zdGFuY2UuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfS0JETUFQX1VSTDpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8ga2V5Qm9hcmRcIik7XHJcbiAgICAgICAgYXdhaXQgRW52aXJvbm1lbnQuSW5zdGFuY2UuZmlsbEZyb21VcmwoZm91bmRUYWdOYW1lLCBwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19LQkRNQVA6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTVBNQUlOUFJHOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBjb21wbWFpbnByZ1wiKTtcclxuICAgICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRDb21wTWFpblByZ1RhYigpLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UU19RVUVVRTpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8gZXZlbnRzcXVldWVcIik7XHJcbiAgICAgICAgdGhpcy5maWxsRXZlbnRzUXVldWUocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVEFTS1VSTDpcclxuICAgICAgICBhd2FpdCBUYXNrLlByb2Nlc3NUYXNrVVJMKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19UQVNLOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byB0YXNrXCIpO1xyXG4gICAgICAgIGxldCB0YXNrQ291bnRCZWZvcmU6IG51bWJlciA9IHRoaXMuX21wcmdUYWIuZ2V0U2l6ZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX21wcmdUYWIuZmlsbERhdGEodGhpcywgb3BlbmluZ1Rhc2tEZXRhaWxzLCBwYXJzZXIpO1xyXG4gICAgICAgIC8vIFFDUiAjNzU5OTExOiBtcHJnIG11c3QgYmVsb25nIHRvIHRoZSBtYWluIGFwcGxpY2F0aW9uJ3MgTUdEYXRhLlxyXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyBpdCB3aWxsIG5vdCBiZSBkaXNjYXJkZWQgdW50aWwgdGhlIGVuZCBvZiBleGVjdXRpb24uXHJcbiAgICAgICAgLy8gVGhlcmUgY291bGQgYmUgbW9yZSB0aGVuIDEgbXByZ3MgdGhhdCBhcmUgYWRkZWQgKFFjciAjMTY4NTQ5KVxyXG4gICAgICAgIGlmICh0aGlzLl9pZCAhPT0gMCkge1xyXG4gICAgICAgICAgbGV0IHRhc2tDb3VudEFmdGVyOiBudW1iZXIgPSB0aGlzLl9tcHJnVGFiLmdldFNpemUoKTtcclxuICAgICAgICAgIGxldCBtZ2QwOiBNR0RhdGEgPSBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuZ2V0TUdEYXRhKDApO1xyXG4gICAgICAgICAgLy8gY2hlY2sgYWxsIHRoZSBuZXcgbWFpbiBwcmdzLlxyXG4gICAgICAgICAgZm9yIChsZXQgdGFza0luZGV4OiBudW1iZXIgPSB0YXNrQ291bnRCZWZvcmU7IHRhc2tJbmRleCA8IHRhc2tDb3VudEFmdGVyOyB0YXNrSW5kZXgrKykge1xyXG4gICAgICAgICAgICBsZXQgbmV3VGFzazogVGFzayA9IDxUYXNrPnRoaXMuX21wcmdUYWIuZ2V0VGFzayh0YXNrSW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAobmV3VGFzay5pc01haW5Qcm9nKCkgJiYgbWdkMC5fbXByZ1RhYi5nZXRUYXNrKG5ld1Rhc2suZ2V0VGFza1RhZygpKSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgbWdkMC5fbXByZ1RhYi5hZGRUYXNrKG5ld1Rhc2spO1xyXG4gICAgICAgICAgICAgIG1nZDAuYWRkVGFzayhuZXdUYXNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRU5WOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBlbnZpcm9ubWVudFwiKTtcclxuICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19GTFdNVFJfQ09ORklHOlxyXG4gICAgICAgIEZsb3dNb25pdG9yUXVldWUuSW5zdGFuY2UuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX1hNTF9FTkQ6XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1VTRVJfREVUQUlMUzpcclxuICAgICAgICBVc2VyRGV0YWlscy5JbnN0YW5jZS5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREJIX1JFQUxfSURYUzpcclxuICAgICAgICAvLyBXZWJjbGllbnQgVE9ETyA6IHJlbW92ZSBzZXJpYWxpemF0aW9uIG9mIHRoaXMgZnJvbSBzZXJ2ZXJcclxuICAgICAgICBwYXJzZXIuU2tpcFhNTEVsZW1lbnQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfR0xPQkFMUEFSQU1TQ0hBTkdFUzpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImFwcGx5aW5nIGdsb2JhbCBwYXJhbXMgY2hhbmdlcyBmcm9tIHRoZSBzZXJ2ZXIgKFNldC9HZXRQYXJhbXMpXCIpO1xyXG4gICAgICAgIEdsb2JhbFBhcmFtcy5JbnN0YW5jZS5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19HTE9CQUxQQVJBTVM6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJwcm9jZXNzaW5nIGJhc2U2NCBlbmNvZGVkIGltYWdlIG9mIGFsbCBnbG9iYWwgcGFyYW1zIGZyb20gdGhlIHNlcnZlclwiKTtcclxuICAgICAgICB0aGlzLmZpbGxHbG9iYWxQYXJhbXMocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRU5WX1BBUkFNX1VSTDpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8gZW52IHBhcmFtcyBuYW1lIFwiKTtcclxuICAgICAgICBhd2FpdCBFbnZpcm9ubWVudC5JbnN0YW5jZS5maWxsRnJvbVVybChmb3VuZFRhZ05hbWUsIHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VOVl9QQVJBTTpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8gZW52IHBhcmFtcyBuYW1lIFwiKTtcclxuICAgICAgICBFbnZQYXJhbXNUYWJsZS5JbnN0YW5jZS5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05URVhUX0lEOiB7XHJcbiAgICAgICAgbGV0IGN0eElkOiBzdHJpbmc7XHJcbiAgICAgICAgbGV0IGN0eEVuZElkeDogbnVtYmVyO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICAgICAgICBjdHhFbmRJZHggPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgIGN0eElkID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhjdHhFbmRJZHgpLnRyaW0oKTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGN0eEVuZElkeCk7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5Db250ZXh0SUQgPSBjdHhJZDtcclxuICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19TRVNTSU9OX0lEOlxyXG4gICAgICAgIC8vIHBhcnNlIHNlc3Npb24gaWQgcmVjZWl2ZWQgaW4gMXN0IHJlc3BvbnNlIGZyb20gc2VydmVyIGZvciBvZmZsaW5lIGNsaWVudFxyXG4gICAgICAgIC8vIGFuZCBzYXZlIHNlc3Npb25pZCBvbiBjbGllbnQuXHJcbiAgICAgICAgbGV0IHNlc3Npb25JZEVuZElkeDogbnVtYmVyO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICAgICAgICBzZXNzaW9uSWRFbmRJZHggPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgIFJlbW90ZUNvbW1hbmRzUHJvY2Vzc29yLkdldEluc3RhbmNlKCkuU2Vzc2lvbklkID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhzZXNzaW9uSWRFbmRJZHgpLnRyaW0oKTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHNlc3Npb25JZEVuZElkeCk7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19IVFRQX0NPTU1VTklDQVRJT05fVElNRU9VVDoge1xyXG4gICAgICAgIGxldCBodHRwQ29tbXVuaWNhdGlvblRpbWVvdXQ6IG51bWJlcjsgLy8gY29tbXVuaWNhdGlvbi1sZXZlbCB0aW1lb3V0IChpLmUuIHRoZSBhY2Nlc3MgdG8gdGhlIHdlYiBzZXJ2ZXIsIE5PVCB0aGUgZW50aXJlIHJlcXVlc3QvcmVzcG9uc2Ugcm91bmQtdHJpcCksIGluIHNlY29uZHMuXHJcbiAgICAgICAgbGV0IGh0dHBDb21tdW5pY2F0aW9uVGltZW91dElkeDogbnVtYmVyO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICAgICAgICBodHRwQ29tbXVuaWNhdGlvblRpbWVvdXRJZHggPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgIGh0dHBDb21tdW5pY2F0aW9uVGltZW91dCA9IE5OdW1iZXIuUGFyc2UocGFyc2VyLmdldFhNTHN1YnN0cmluZyhodHRwQ29tbXVuaWNhdGlvblRpbWVvdXRJZHgpKTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGh0dHBDb21tdW5pY2F0aW9uVGltZW91dElkeCk7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgIEh0dHBNYW5hZ2VyLkdldEluc3RhbmNlKCkuSHR0cENvbW11bmljYXRpb25UaW1lb3V0TVMgPSBodHRwQ29tbXVuaWNhdGlvblRpbWVvdXQgKiAxMDAwO1xyXG4gICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RBVEFCQVNFX1VSTDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREFUQUJBU0VTX0hFQURFUjpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVEFTS0RFRklOSVRJT05fSURTX1VSTDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREJIX0RBVEFfSURTX1VSTDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREJIU19FTkQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX09GRkxJTkVfU05JUFBFVFNfVVJMOlxyXG4gICAgICAgIC8vIFRPRE86IHNlcnZlciBzaG91bGQgbm90IHNlcmlhbGl6ZSB0aGVzZSBlbGVtZW50cy5cclxuICAgICAgICBwYXJzZXIuU2tpcFhNTEVsZW1lbnQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RCSFM6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1NUQVJUVVBfUFJPR1JBTTpcclxuICAgICAgICAvLyBUT0RPOiBzZXJ2ZXIgc2hvdWxkIG5vdCBzZXJpYWxpemUgdGhlc2UgZWxlbWVudHMuXHJcbiAgICAgICAgcGFyc2VyLlJlYWRDb250ZW50T2ZDdXJyZW50RWxlbWVudCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX01FTlVTX09QRU46XHJcbiAgICAgICAgLy8gVE9ETyAtIG5vdCB0byBzZXJpYWxpemUgW1N0b3J5IDE1NDU0N11cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgbmFtZSBpbiBNR0RhdGEsIGFkZCBjYXNlIHRvIE1HRGF0YS5pbml0SW5uZXJPYmplY3RzIGFuZCBjYXNlIHRvIHdoaWxlIG9mIE1HRGF0YS5GaWxsRGF0YSAgXCIgKyBmb3VuZFRhZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEluc2VydCBSZWNvcmRzIFRhYmxlIHRvIERhdGFWaWV3IG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IGlmIHRoZSB0YXNrIG9mIGRhdGF2aWV3IGZvdW5kPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYXN5bmMgaW5zZXJ0RGF0YVZpZXcocGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGxldCBpbmRleDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBVklFVywgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBVklFVy5sZW5ndGg7XHJcbiAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxkYXRhKCkuc3Vic3RyKGluZGV4LCBlbmRDb250ZXh0IC0gaW5kZXgpLCAnXCInKS8qJ1wiJyovO1xyXG4gICAgbGV0IGludmFsaWRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8vIGxvb2sgZm9yIHRoZSB0YXNrIGlkXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdG9rZW5zVmVjdG9yLmxlbmd0aDsgaSA9IGkgKyAyKSB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9IHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShpKTtcclxuICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gWE1MQ29uc3RhbnRzLk1HX0FUVFJfVEFTS0lEKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlU3RyOiBzdHJpbmcgPSB0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaSArIDEpO1xyXG4gICAgICAgIGxldCB0YXNrSWQ6IHN0cmluZyA9IHZhbHVlU3RyO1xyXG4gICAgICAgIHRhc2sgPSAodGhpcy5nZXRUYXNrKHRhc2tJZCkgfHwgKDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh0YXNrSWQpKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JTlZBTElEQVRFKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlU3RyOiBzdHJpbmcgPSB0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaSArIDEpO1xyXG4gICAgICAgIGludmFsaWRhdGUgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAvLyBhZGQgdGhlIHJlY29yZHMgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCByZWNvcmQgaW4gdGhlIGRhdGF2aWV3XHJcbiAgICAgIGF3YWl0IHRhc2suaW5zZXJ0UmVjb3JkVGFibGUoaW52YWxpZGF0ZSwgcGFyc2VyKTtcclxuICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXN1bHQgPSBmYWxzZTsgLy8gdGhlIHRhc2sgbm90IGZvdW5kXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCB0YXNrIHRvIHRhc2tUYWJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VGFza1wiPnRvIGJlIGFkZGVkPC9wYXJhbT5cclxuICBhZGRUYXNrKG5ld1Rhc2s6IFRhc2spOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rhc2tzVGFiLmFkZFRhc2sobmV3VGFzayk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVtb3ZlIGEgdGFzayBmcm9tIHRoZSB0YXNrcyB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrXCI+PC9wYXJhbT5cclxuICByZW1vdmVUYXNrKHRhc2s6IFRhc2spOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rhc2tzVGFiLnJlbW92ZVRhc2sodGFzayk7XHJcbiAgICB0aGlzLl9tcHJnVGFiLnJlbW92ZVRhc2sodGFzayk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRhc2tzIGluIHRoZSB0YXNrcyB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRUYXNrc0NvdW50KCk6IG51bWJlciB7XHJcbiAgICBsZXQgcmVzdWx0OiBudW1iZXI7XHJcbiAgICBpZiAodGhpcy5fdGFza3NUYWIgIT09IG51bGwpIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5fdGFza3NUYWIuZ2V0U2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFzayh0YXNrSWQ6IHN0cmluZyk6IFRhc2s7XHJcbiAgZ2V0VGFzayhpZHg6IG51bWJlcik6IFRhc2s7XHJcbiAgZ2V0VGFzayh0YXNrSWRPcklkeDogYW55KTogVGFzayB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAodGFza0lkT3JJZHggPT09IG51bGwgfHwgdHlwZW9mIHRhc2tJZE9ySWR4ID09PSBcInVuZGVmaW5lZFwiIHx8IHRhc2tJZE9ySWR4LmNvbnN0cnVjdG9yID09PSBTdHJpbmcpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFRhc2tfMCh0YXNrSWRPcklkeCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUYXNrXzEodGFza0lkT3JJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgYSB0YXNrIGJ5IGl0cyBpZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrSWRcIj50YXNrIElEPC9wYXJhbT5cclxuICBwcml2YXRlIGdldFRhc2tfMCh0YXNrSWQ6IHN0cmluZyk6IFRhc2sge1xyXG4gICAgbGV0IHJlc3VsdDogVGFzaztcclxuICAgIGlmICh0aGlzLl90YXNrc1RhYiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5fdGFza3NUYWIgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgcmVzdWx0ID0gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayh0YXNrSWQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgYSB0YXNrIGJ5IGl0cyBpbmRleCBpbiB0aGUgdGFza3MgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+aW5kZXggb2YgdGhlIHRhc2sgaW4gdGhlIHRhc2tzIHRhYmxlPC9wYXJhbT5cclxuICBwcml2YXRlIGdldFRhc2tfMShpZHg6IG51bWJlcik6IFRhc2sge1xyXG4gICAgcmV0dXJuIDxUYXNrPnRoaXMuX3Rhc2tzVGFiLmdldFRhc2soaWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZCBYTUwgc3RyaW5nIG9mIHRoZSBNR0RhdGEgb2JqZWN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZXNzYWdlXCI+YSBtZXNzYWdlIGJlaW5nIHByZXBhcmVkLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2VyaWFsaXplVGFza3NcIj5pZiB0cnVlLCB0YXNrcyBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gd2lsbCBhbHNvIGJlIHNlcmlhbGl6ZWQuPC9wYXJhbT5cclxuICBhc3luYyBidWlsZFhNTChtZXNzYWdlOiBTdHJpbmdCdWlsZGVyLCBzZXJpYWxpemVUYXNrczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuQ21kc1RvU2VydmVyICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQ21kc1RvU2VydmVyLmJ1aWxkWE1MKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlcmlhbGl6ZVRhc2tzICYmIHRoaXMuX3Rhc2tzVGFiICE9PSBudWxsKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3Rhc2tzVGFiLmJ1aWxkWE1MKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgZmlyc3QgdGFzayB3aGljaCBpcyBub3QgYSBtYWluIHByb2dyYW0gaW4gdGhlIHRhc2sgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEZpcnN0VGFzaygpOiBUYXNrIHtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuICAgIGxldCBNRElGcmFtZVRhc2s6IFRhc2sgPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3Rhc2tzVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIHRhc2sgPSA8VGFzaz50aGlzLl90YXNrc1RhYi5nZXRUYXNrKGkpO1xyXG4gICAgICBpZiAoIXRhc2suaXNNYWluUHJvZygpKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRhc2sgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhc2sgPT09IG51bGwgJiYgdGhpcy5faWQgPT09IDApIHtcclxuICAgICAgdGFzayA9IE1ESUZyYW1lVGFzazsgLy8gcmV0dXJuIE1ESSBmcmFtZSBwcm9ncmFtXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYSBtYWluIHByb2dyYW0gb2YgYSBjb21wb25lbnQgYnkgaXRzIGN0bCBpZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RsSWR4XCI+dGhlIGN0bCBpZHg8L3BhcmFtPlxyXG4gIGdldE1haW5Qcm9nKGN0bElkeDogbnVtYmVyKTogVGFzayB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fbXByZ1RhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPnRoaXMuX21wcmdUYWIuZ2V0VGFzayhpKTtcclxuICAgICAgaWYgKHRhc2suZ2V0Q3RsSWR4KCkgPT09IGN0bElkeCAmJiB0YXNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICAgIHJldHVybiB0YXNrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBuZXh0IG1haW4gcHJvZ3JhbSBpbiB0aGUgc2VhcmNoIG9yZGVyIEFGVEVSIHRoZSBjdGxJZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RsSWR4XCI+dGhlIGN1cnJlbnQgY3RsIGlkeDwvcGFyYW0+XHJcbiAgZ2V0TmV4dE1haW5Qcm9nKGN0bElkeDogbnVtYmVyKTogVGFzayB7XHJcbiAgICBsZXQgY29tcE1haW5QcmdUYWI6IENvbXBNYWluUHJnVGFibGUgPSBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRDb21wTWFpblByZ1RhYigpO1xyXG4gICAgbGV0IGN1cnJTZWFyY2hJbmRleDogbnVtYmVyID0gY29tcE1haW5QcmdUYWIuZ2V0SW5kZXhPZihjdGxJZHgpO1xyXG4gICAgbGV0IG5leHRDdGxJZHg6IG51bWJlciA9IGNvbXBNYWluUHJnVGFiLmdldEN0bElkeChjdXJyU2VhcmNoSW5kZXggKyAxKTtcclxuICAgIGxldCByZXN1bHQ6IFRhc2s7XHJcbiAgICBpZiAobmV4dEN0bElkeCA9PT0gLTEpIHtcclxuICAgICAgcmVzdWx0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLmdldE1haW5Qcm9nKG5leHRDdGxJZHgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHdoZXRoZXIgYW55IG9mIHRoZSB0YXNrIGhhcyBwZW5kaW5nIGNsaWVudCBzaWRlIHRyYW5zYWN0aW9uIGNhY2hlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjbGllbnRUcmFuc2FjdGlvbkNhY2hlRXhpc3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHRhc2s6IFRhc2s7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fdGFza3NUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgdGFzayA9IDxUYXNrPnRoaXMuX3Rhc2tzVGFiLmdldFRhc2soaSk7XHJcbiAgICAgIGlmICghdGFzay5pc01haW5Qcm9nKCkgJiYgKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5tb2RpZmllZFJlY29yZHNOdW1iZXIoKSA+IDApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB3aGV0aGVyIGFueSBvZiB0aGUgdGFzayBoYXMgcGVuZGluZyBzZXJ2ZXIgc2lkZVxyXG4gIC8vLyAgIHRyYW5zYWN0aW9uIGNhY2hlIHdoaWNoIGlzIG5vdCB5ZXQgY29tbWl0dGVkIHRvIERCXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXJ2ZXJUcmFuc2FjdGlvbkNhY2hlRXhpc3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHRhc2s6IFRhc2s7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fdGFza3NUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgdGFzayA9IDxUYXNrPnRoaXMuX3Rhc2tzVGFiLmdldFRhc2soaSk7XHJcbiAgICAgIGlmICghdGFzay5pc01haW5Qcm9nKCkgJiYgISg8RGF0YVZpZXc+dGFzay5EYXRhVmlldykuU2VydmVyVHJhbnNhY3Rpb25DYWNoZUVtcHR5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2VhcmNoIHRhc2sgdGhhdCBtYXRjaGVzIGJ5IFRhc2tEZWZpbml0aW9uSWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRUYXNrQnlUYXNrRGVmaW5pdGlvbklEKHRhc2tEZWZpbml0aW9uSUQ6IFRhc2tEZWZpbml0aW9uSWQpOiBUYXNrIHtcclxuICAgIGxldCB0YXNrOiBUYXNrO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3Rhc2tzVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIHRhc2sgPSA8VGFzaz50aGlzLl90YXNrc1RhYi5nZXRUYXNrKGkpO1xyXG4gICAgICBpZiAodGFzay5UYXNrRGVmaW5pdGlvbklkLkVxdWFscyh0YXNrRGVmaW5pdGlvbklEKSkge1xyXG4gICAgICAgIHJldHVybiB0YXNrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIHRpbWVyIGV2ZW50IGhhbmRsZXJzXHJcbiAgZ2V0VGltZXJIYW5kbGVycygpOiBIYW5kbGVyc1RhYmxlIHtcclxuICAgIHJldHVybiB0aGlzLl90aW1lckhhbmRsZXJzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBhIHRpbWVyIGV2ZW50IGhhbmRsZXIgdG8gdGhlIHRpbWVyIGV2ZW50IGhhbmRsZXJzIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImhhbmRsZXJcIj5hIHJlZmVyZW5jZSB0byBhIHRpbWVyIGV2ZW50IGhhbmRsZXI8L3BhcmFtPlxyXG4gIGFkZFRpbWVySGFuZGxlcihoYW5kbGVyOiBFdmVudEhhbmRsZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RpbWVySGFuZGxlcnMuYWRkKGhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlbW92ZXMgdGltZXIgaGFuZGxlcnMgZm9yIHRoZSBzcGVjaWZpYyB0YXNrXHJcbiAgLy8vICAgaXQgaXMgbmVlZGVkIGZvciBkZXN0aW5hdGlvbiBjYWxsIGZvciBleGl0IGZyb20gdGhlIHByZXZpb3VzIHN1YmZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlbW92ZVRpbWVySGFuZGxlcih0YXNrOiBUYXNrKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3RpbWVySGFuZGxlcnMuZ2V0U2l6ZSgpOykge1xyXG4gICAgICBsZXQgdGltZXJUYXNrOiBUYXNrID0gdGhpcy5fdGltZXJIYW5kbGVycy5nZXRIYW5kbGVyKGkpLmdldFRhc2soKTtcclxuICAgICAgaWYgKHRpbWVyVGFzay5pc0Rlc2NlbmRlbnRPZih0YXNrKSAmJiB0aW1lclRhc2suZ2V0TUdEYXRhKCkgPT09IHRoaXMpXHJcbiAgICAgICAgdGhpcy5fdGltZXJIYW5kbGVycy5yZW1vdmUoaSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVtb3ZlcyBleHByZXNzaW9uIGhhbmRsZXJzIGZvciB0aGUgc3BlY2lmaWMgdGFza1xyXG4gIC8vLyAgIGl0IGlzIG5lZWRlZCBmb3IgZGVzdGluYXRpb24gY2FsbCBmb3IgZXhpdCBmcm9tIHRoZSBwcmV2aW91cyBzdWJmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICByZW1vdmVFeHByZXNzaW9uSGFuZGxlcih0YXNrOiBUYXNrKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2V4cEhhbmRsZXJzLmdldFNpemUoKTspIHtcclxuICAgICAgbGV0IHRpbWVyVGFzazogVGFzayA9IHRoaXMuX2V4cEhhbmRsZXJzLmdldEhhbmRsZXIoaSkuZ2V0VGFzaygpO1xyXG4gICAgICBpZiAodGltZXJUYXNrLmlzRGVzY2VuZGVudE9mKHRhc2spICYmIHRpbWVyVGFzay5nZXRNR0RhdGEoKSA9PT0gdGhpcylcclxuICAgICAgICB0aGlzLl9leHBIYW5kbGVycy5yZW1vdmUoaSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBleHByZXNzaW9uIGV2ZW50IGhhbmRsZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRFeHBIYW5kbGVycygpOiBIYW5kbGVyc1RhYmxlIHtcclxuICAgIHJldHVybiB0aGlzLl9leHBIYW5kbGVycztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgYSBleHByZXNzaW9uIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGV4cHJlc3Npb24gZXZlbnQgaGFuZGxlcnMgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaGFuZGxlclwiPmEgcmVmZXJlbmNlIHRvIGFuIGV4cHJlc3Npb24gZXZlbnQgaGFuZGxlcjwvcGFyYW0+XHJcbiAgYWRkRXhwSGFuZGxlcihoYW5kbGVyOiBFdmVudEhhbmRsZXIsIGlkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9leHBIYW5kbGVycy5pbnNlcnRBZnRlcihoYW5kbGVyLCBpZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHN0b3BzIHRpbWVycyB0aGF0IGFscmVhZHkgbm8gbmVlZGVkIGFuZCBzdGFydCBuZXcgdGltZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9sZFRpbWVyc1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdUaW1lcnNcIj48L3BhcmFtPlxyXG4gIGNoYW5nZVRpbWVycyhvbGRUaW1lcnM6IExpc3Q8bnVtYmVyPiwgbmV3VGltZXJzOiBMaXN0PG51bWJlcj4pOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGo6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZ3VpTWFuYWdlcjogR1VJTWFuYWdlciA9IEdVSU1hbmFnZXIuSW5zdGFuY2U7XHJcbiAgICBvbGRUaW1lcnMuc29ydCgpO1xyXG4gICAgbmV3VGltZXJzLnNvcnQoKTtcclxuICAgIHdoaWxlIChpIDwgb2xkVGltZXJzLmxlbmd0aCAmJiBqIDwgbmV3VGltZXJzLmxlbmd0aCkge1xyXG4gICAgICBpZiAob2xkVGltZXJzLmdldF9JdGVtKGkpID4gbmV3VGltZXJzLmdldF9JdGVtKGopKSB7XHJcbiAgICAgICAgZ3VpTWFuYWdlci5zdGFydFRpbWVyKHRoaXMsIG5ld1RpbWVycy5nZXRfSXRlbShqKSwgZmFsc2UpO1xyXG4gICAgICAgIGogPSBqICsgMTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAob2xkVGltZXJzLmdldF9JdGVtKGkpIDwgbmV3VGltZXJzLmdldF9JdGVtKGopKSB7XHJcbiAgICAgICAgICBndWlNYW5hZ2VyLnN0b3BUaW1lcih0aGlzLCBvbGRUaW1lcnMuZ2V0X0l0ZW0oaSksIGZhbHNlKTtcclxuICAgICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgICAgICBqID0gaiArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaSA8IG9sZFRpbWVycy5sZW5ndGgpIHtcclxuICAgICAgZ3VpTWFuYWdlci5zdG9wVGltZXIodGhpcywgb2xkVGltZXJzLmdldF9JdGVtKGkpLCBmYWxzZSk7XHJcbiAgICAgIGkgPSBpICsgMTtcclxuICAgIH1cclxuICAgIHdoaWxlIChqIDwgbmV3VGltZXJzLmxlbmd0aCkge1xyXG4gICAgICBndWlNYW5hZ2VyLnN0YXJ0VGltZXIodGhpcywgbmV3VGltZXJzLmdldF9JdGVtKGopLCBmYWxzZSk7XHJcbiAgICAgIGogPSBqICsgMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgZGF0YSBmcm9tIDxldmVudHNxdWV1ZT4gdGFnIHRvIHRoZSBldmVudHMgcXVldWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZmlsbEV2ZW50c1F1ZXVlKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICB3aGlsZSAodGhpcy5pbml0RXZlbnRzKHBhcnNlciwgcGFyc2VyLmdldE5leHRUYWcoKSkpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgUnVuIFRpbWUgRXZlbnRzIHRvIHRoZSBldmVudHMgcXVldWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm91bmRUYWdOYW1lXCI+cG9zc2libGUgdGFnIG5hbWUsIG5hbWUgb2Ygb2JqZWN0LCB3aGljaCBuZWVkIGJlIGFsbG9jYXRlZDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0RXZlbnRzKHBhcnNlcjogWG1sUGFyc2VyLCBmb3VuZFRhZ05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbjtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IG51bGwpIHtcclxuICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UKSB7XHJcbiAgICAgICAgbGV0IGV2dDogUnVuVGltZUV2ZW50ID0gbmV3IFJ1blRpbWVFdmVudChudWxsKTtcclxuICAgICAgICBldnQuZmlsbERhdGEocGFyc2VyLCBudWxsKTtcclxuICAgICAgICBldnQuY29udmVydFBhcmFtc1RvQXJncygpO1xyXG4gICAgICAgIGV2dC5zZXRUYXNrKG51bGwpO1xyXG4gICAgICAgIGV2dC5zZXRGcm9tU2VydmVyKCk7XHJcbiAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkVG9UYWlsKGV2dCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UU19RVUVVRSkge1xyXG4gICAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoXCI+XCIsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoZm91bmRUYWdOYW1lID09PSBcIi9cIiArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FVkVOVFNfUVVFVUUpIHtcclxuICAgICAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIEV2ZW50c1F1ZXVlOiBcIiArIGZvdW5kVGFnTmFtZSk7XHJcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBmb3IgdGhlIG1haW4gd2luZG93cyBNR0RhdGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzTWFpbldpbmRvdygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJlbnQgPT09IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgcGFyZW50IE1HRGRhdGEgb2YgdGhpcyBNR0RhdGEgKG1pZ2h0IGJlIG51bGwpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRQYXJlbnRNR2RhdGEoKTogTUdEYXRhIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBhYm9ydGluZyBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhYm9ydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuSXNBYm9ydGluZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIGFsbCBjb21tYW5kcyB3aGljaCBhcmUgbm90IGF0dGFjaGVkIHRvIGFueSB3aW5kb3cgaW50byB0aGUgY3VycmVudCB3aW5kb3dcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvcHlVbmZyYW1lZENtZHMoKTogdm9pZCB7XHJcbiAgICBsZXQgdW5mcmFtZWRDbWRzOiBMaXN0PElDbGllbnRDb21tYW5kPiA9IEdsb2JhbENvbW1hbmRzTWFuYWdlci5JbnN0YW5jZS5nZXRVbmZyYW1lZENtZHMoKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB1bmZyYW1lZENtZHMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgdGhpcy5DbWRzVG9DbGllbnQuQWRkKHVuZnJhbWVkQ21kcy5nZXRfSXRlbShpKSk7XHJcbiAgICB9XHJcbiAgICB1bmZyYW1lZENtZHMuU2V0U2l6ZSgwKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGFuIGFuY2VzdG9yIG9mIHRoaXMgTUdEYXRhIG9iamVjdCB3aGljaCBpcyBub3QgcGVuZGluZyB1bmxvYWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFZhbGlkQW5jZXN0b3IoKTogTUdEYXRhIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRNYXhDdGxJZHgoKTogbnVtYmVyIHtcclxuICAgIGxldCByYzogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrc1RhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPnRoaXMuX3Rhc2tzVGFiLmdldFRhc2soaSk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmMgPSBNYXRoLm1heChyYywgdGFzay5nZXRDdGxJZHgoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByYztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gc2F2ZSB0aGUgZ2xvYmFsIHBhcmFtcyAob25lIGJhc2U2NCBlbmNvZGVkIHZhbHVlKSB0aGF0IHdhcyBwYXNzZWQgZnJvbSB0aGUgcnVudGltZS1lbmdpbmUgdG8gdGhlIHJpY2gtY2xpZW50PC9zdW1tYXJ5PlxyXG4gIGZpbGxHbG9iYWxQYXJhbXMocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIGxldCBYTUxkYXRhOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpO1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcblxyXG4gICAgaWYgKGVuZENvbnRleHQgIT09IC0xICYmIGVuZENvbnRleHQgPCBYTUxkYXRhLmxlbmd0aCkge1xyXG4gICAgICAvLyBmaW5kIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfR0xPQkFMUEFSQU1TKSArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19HTE9CQUxQQVJBTVMubGVuZ3RoKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbnM6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMoUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLlBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcblxyXG4gICAgICBEZWJ1Zy5Bc3NlcnQodG9rZW5zLmdldF9JdGVtKDApID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9WQUxVRSk7XHJcbiAgICAgIFNlcnZlckNvbmZpZy5JbnN0YW5jZS5zZXRHbG9iYWxQYXJhbXModG9rZW5zLmdldF9JdGVtKDEpKTtcclxuXHJcbiAgICAgIGVuZENvbnRleHQgPSBYTUxkYXRhLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOLCBlbmRDb250ZXh0KTtcclxuICAgICAgaWYgKGVuZENvbnRleHQgPT09IC0xKVxyXG4gICAgICAgIGVuZENvbnRleHQgPSBYTUxkYXRhLmxlbmd0aDtcclxuXHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==