@magic-xpa/gui 4.1100.0-dev4110.253 → 4.1100.0-dev4110.256

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 (47) hide show
  1. package/esm2022/src/Commands.mjs +1 -1
  2. package/esm2022/src/Events.mjs +1 -1
  3. package/esm2022/src/EventsProcessor.mjs +1 -1
  4. package/esm2022/src/FocusManager.mjs +1 -1
  5. package/esm2022/src/Manager.mjs +1 -1
  6. package/esm2022/src/UIBridge.mjs +1 -1
  7. package/esm2022/src/gui/GuiMgControl.mjs +1 -1
  8. package/esm2022/src/gui/KeyboardItem.mjs +1 -1
  9. package/esm2022/src/gui/low/GuiCommand.mjs +1 -1
  10. package/esm2022/src/gui/low/GuiCommandQueue.mjs +1 -1
  11. package/esm2022/src/gui/low/GuiInteractive.mjs +1 -1
  12. package/esm2022/src/management/RuntimeContextBase.mjs +1 -1
  13. package/esm2022/src/management/data/BlobType.mjs +1 -1
  14. package/esm2022/src/management/data/DcValues.mjs +1 -1
  15. package/esm2022/src/management/data/DcValuesBuilderBase.mjs +1 -1
  16. package/esm2022/src/management/data/FieldDef.mjs +1 -1
  17. package/esm2022/src/management/data/FieldsTable.mjs +1 -1
  18. package/esm2022/src/management/data/GuiDataViewBase.mjs +1 -1
  19. package/esm2022/src/management/data/GuiFieldBase.mjs +1 -1
  20. package/esm2022/src/management/data/NUM_TYPE.mjs +1 -1
  21. package/esm2022/src/management/data/ObjectReferenceBase.mjs +1 -1
  22. package/esm2022/src/management/data/ObjectReferencesCollection.mjs +1 -1
  23. package/esm2022/src/management/data/RecordUtils.mjs +1 -1
  24. package/esm2022/src/management/data/VectorType.mjs +1 -1
  25. package/esm2022/src/management/data/VectorTypeBase.mjs +1 -1
  26. package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +1 -1
  27. package/esm2022/src/management/gui/ControlTable.mjs +1 -1
  28. package/esm2022/src/management/gui/DisplayConvertor.mjs +1 -1
  29. package/esm2022/src/management/gui/FieldValidator.mjs +1 -1
  30. package/esm2022/src/management/gui/HebrewDate.mjs +1 -1
  31. package/esm2022/src/management/gui/Helps.mjs +1 -1
  32. package/esm2022/src/management/gui/MgControlBase.mjs +1 -1
  33. package/esm2022/src/management/gui/MgFormBase.mjs +1 -1
  34. package/esm2022/src/management/gui/PIC.mjs +1 -1
  35. package/esm2022/src/management/gui/PropDefaults.mjs +1 -1
  36. package/esm2022/src/management/gui/PropTable.mjs +1 -1
  37. package/esm2022/src/management/gui/Property.mjs +1 -1
  38. package/esm2022/src/management/gui/ValidationDetails.mjs +1 -1
  39. package/esm2022/src/management/gui/ValidationDetailsBase.mjs +1 -1
  40. package/esm2022/src/management/gui/WrongFormatException.mjs +1 -1
  41. package/esm2022/src/management/tasks/GuiTaskBase.mjs +1 -1
  42. package/esm2022/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +1 -1
  43. package/esm2022/src/util/MemoryUtil.mjs +1 -1
  44. package/esm2022/src/util/ObjectReference.mjs +1 -1
  45. package/esm2022/src/util/UsernamePasswordCredentials.mjs +1 -1
  46. package/fesm2022/magic-xpa-gui.mjs.map +1 -1
  47. package/package.json +2 -2
@@ -45,4 +45,4 @@ export class ObjectReferenceBase {
45
45
  return "{Reference " + this.id + " to: " + this.Referent + "}";
46
46
  }
47
47
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JqZWN0UmVmZXJlbmNlQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9kYXRhL09iamVjdFJlZmVyZW5jZUJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFMUQsTUFBTSxPQUFnQixtQkFBbUI7SUFDL0IsTUFBTSxDQUFDLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFDM0IsUUFBUSxHQUFzQixJQUFJLENBQUM7SUFDbEMsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixFQUFFLEdBQVcsQ0FBQyxDQUFDO0lBRXZCLG1CQUFtQixHQUFlLElBQUksQ0FBQztJQUV2QyxZQUFZLFFBQTJCO1FBQ3JDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFDRCxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQVVELE9BQU8sQ0FBQyxXQUFxQjtRQUMzQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTyxTQUFTO1FBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBSW5ELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM3RCxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLDhDQUE4QyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3pHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDeEYsQ0FBQztnQkFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxnRUFBZ0UsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7O2dCQUVDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFJRCxRQUFRO1FBQ04sT0FBTyxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVidWcsIFN0YWNrVHJhY2V9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge0lSZWZlcmVuY2VkT2JqZWN0fSBmcm9tIFwiLi9JUmVmZXJlbmNlZE9iamVjdFwiO1xyXG5pbXBvcnQge0xvZ2dlciwgTG9nZ2VyX0xvZ0xldmVsc30gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPYmplY3RSZWZlcmVuY2VCYXNlIHtcclxuICBwcml2YXRlIHN0YXRpYyBMYXN0SWQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIFJlZmVyZW50OiBJUmVmZXJlbmNlZE9iamVjdCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpc0Rpc3Bvc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpZDogbnVtYmVyID0gMDtcclxuXHJcbiAgX2luc3RhbnRpYXRpb25UcmFjZTogU3RhY2tUcmFjZSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHJlZmVyZW50OiBJUmVmZXJlbmNlZE9iamVjdCkge1xyXG4gICAgdGhpcy5pZCA9IChPYmplY3RSZWZlcmVuY2VCYXNlLkxhc3RJZCA9IE9iamVjdFJlZmVyZW5jZUJhc2UuTGFzdElkICsgMSk7XHJcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuUmVmZXJlbnQgPSByZWZlcmVudDtcclxuICAgIGlmIChMb2dnZXIuSW5zdGFuY2UuTG9nTGV2ZWwgPj0gTG9nZ2VyX0xvZ0xldmVscy5EZXZlbG9wbWVudCkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcIkNyZWF0aW5nIFwiICsgdGhpcy50b1N0cmluZygpKTtcclxuICAgICAgdGhpcy5faW5zdGFudGlhdGlvblRyYWNlID0gbmV3IFN0YWNrVHJhY2UoKTtcclxuICAgIH1cclxuICAgIHJlZmVyZW50LkFkZFJlZmVyZW5jZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETyA6IEltcGxlbWVudCBkZXN0cnVjdG9yXHJcbi8vIH5PYmplY3RSZWZlcmVuY2VCYXNlKCkge1xyXG4vLyAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJGaW5hbGl6aW5nIFwiICsgdGhpcyk7XHJcbi8vICAgICB0aGlzLkRpc3Bvc2UoZmFsc2UpO1xyXG4vLyAgIH1cclxuXHJcbiAgRGlzcG9zZSgpOiB2b2lkO1xyXG4gIERpc3Bvc2UoaXNEaXNwb3Npbmc6IGJvb2xlYW4pOiB2b2lkO1xyXG4gIERpc3Bvc2UoaXNEaXNwb3Npbmc/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLkRpc3Bvc2VfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRpc3Bvc2VfMSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBEaXNwb3NlXzAoKTogdm9pZCB7XHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcIkRpc3Bvc2luZyBcIiArIHRoaXMpO1xyXG5cclxuICAgIC8vIFRPRE9cclxuICAgIC8vIEdDLlN1cHByZXNzRmluYWxpemUodGhpcyk7XHJcbiAgICB0aGlzLkRpc3Bvc2UodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIERpc3Bvc2VfMSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc0Rpc3Bvc2VkKSB7XHJcbiAgICAgIGlmICghdGhpcy5SZWZlcmVudC5IYXNSZWZlcmVuY2VzKSB7XHJcbiAgICAgICAgaWYgKExvZ2dlci5JbnN0YW5jZS5Mb2dMZXZlbCA+PSBMb2dnZXJfTG9nTGV2ZWxzLkRldmVsb3BtZW50KSB7XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2coXCJSZWZlcmVudCBkb2VzIG5vdCBoYXZlIGFueSBtb3JlIHJlZmVyZW5jZXM6IFwiICsgdGhpcy5SZWZlcmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3RhY2tUcmFjZSh0aGlzLl9pbnN0YW50aWF0aW9uVHJhY2UsIDE1LCBcIkluc3RhbnRpYXRpb24gdHJhY2U6XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBEZWJ1Zy5Bc3NlcnQoZmFsc2UsIFwiUmVmZXJlbnQgZG9lcyBub3QgaGF2ZSBhbnkgbW9yZSByZWZlcmVuY2VzLiBTZWUgREVWIGxldmVsIGxvZy5cIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuUmVmZXJlbnQuUmVtb3ZlUmVmZXJlbmNlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWJzdHJhY3QgQ2xvbmUoKTogT2JqZWN0UmVmZXJlbmNlQmFzZTtcclxuXHJcbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBcIntSZWZlcmVuY2UgXCIgKyB0aGlzLmlkICsgXCIgdG86IFwiICsgdGhpcy5SZWZlcmVudCArIFwifVwiO1xyXG4gIH1cclxufVxyXG4iXX0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JqZWN0UmVmZXJlbmNlQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9kYXRhL09iamVjdFJlZmVyZW5jZUJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFMUQsTUFBTSxPQUFnQixtQkFBbUI7SUFDL0IsTUFBTSxDQUFDLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFDM0IsUUFBUSxHQUFzQixJQUFJLENBQUM7SUFDbEMsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixFQUFFLEdBQVcsQ0FBQyxDQUFDO0lBRXZCLG1CQUFtQixHQUFlLElBQUksQ0FBQztJQUV2QyxZQUFZLFFBQTJCO1FBQ3JDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsV0FBVyxFQUFFO1lBQzVELE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztTQUM3QztRQUNELFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBVUQsT0FBTyxDQUFDLFdBQXFCO1FBQzNCLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU8sU0FBUztRQUNmLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUluRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUNoQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsRUFBRTtvQkFDNUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyw4Q0FBOEMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUN6RyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUM7aUJBQ3ZGO2dCQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGdFQUFnRSxDQUFDLENBQUM7YUFDdkY7O2dCQUVDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBSUQsUUFBUTtRQUNOLE9BQU8sYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RlYnVnLCBTdGFja1RyYWNlfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtJUmVmZXJlbmNlZE9iamVjdH0gZnJvbSBcIi4vSVJlZmVyZW5jZWRPYmplY3RcIjtcclxuaW1wb3J0IHtMb2dnZXIsIExvZ2dlcl9Mb2dMZXZlbHN9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT2JqZWN0UmVmZXJlbmNlQmFzZSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTGFzdElkOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBSZWZlcmVudDogSVJlZmVyZW5jZWRPYmplY3QgPSBudWxsO1xyXG4gIHByaXZhdGUgaXNEaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIF9pbnN0YW50aWF0aW9uVHJhY2U6IFN0YWNrVHJhY2UgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihyZWZlcmVudDogSVJlZmVyZW5jZWRPYmplY3QpIHtcclxuICAgIHRoaXMuaWQgPSAoT2JqZWN0UmVmZXJlbmNlQmFzZS5MYXN0SWQgPSBPYmplY3RSZWZlcmVuY2VCYXNlLkxhc3RJZCArIDEpO1xyXG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLlJlZmVyZW50ID0gcmVmZXJlbnQ7XHJcbiAgICBpZiAoTG9nZ2VyLkluc3RhbmNlLkxvZ0xldmVsID49IExvZ2dlcl9Mb2dMZXZlbHMuRGV2ZWxvcG1lbnQpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJDcmVhdGluZyBcIiArIHRoaXMudG9TdHJpbmcoKSk7XHJcbiAgICAgIHRoaXMuX2luc3RhbnRpYXRpb25UcmFjZSA9IG5ldyBTdGFja1RyYWNlKCk7XHJcbiAgICB9XHJcbiAgICByZWZlcmVudC5BZGRSZWZlcmVuY2UoKTtcclxuICB9XHJcblxyXG4gIC8vIFRPRE8gOiBJbXBsZW1lbnQgZGVzdHJ1Y3RvclxyXG4vLyB+T2JqZWN0UmVmZXJlbmNlQmFzZSgpIHtcclxuLy8gICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiRmluYWxpemluZyBcIiArIHRoaXMpO1xyXG4vLyAgICAgdGhpcy5EaXNwb3NlKGZhbHNlKTtcclxuLy8gICB9XHJcblxyXG4gIERpc3Bvc2UoKTogdm9pZDtcclxuICBEaXNwb3NlKGlzRGlzcG9zaW5nOiBib29sZWFuKTogdm9pZDtcclxuICBEaXNwb3NlKGlzRGlzcG9zaW5nPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5EaXNwb3NlXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EaXNwb3NlXzEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgRGlzcG9zZV8wKCk6IHZvaWQge1xyXG4gICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJEaXNwb3NpbmcgXCIgKyB0aGlzKTtcclxuXHJcbiAgICAvLyBUT0RPXHJcbiAgICAvLyBHQy5TdXBwcmVzc0ZpbmFsaXplKHRoaXMpO1xyXG4gICAgdGhpcy5EaXNwb3NlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBEaXNwb3NlXzEoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNEaXNwb3NlZCkge1xyXG4gICAgICBpZiAoIXRoaXMuUmVmZXJlbnQuSGFzUmVmZXJlbmNlcykge1xyXG4gICAgICAgIGlmIChMb2dnZXIuSW5zdGFuY2UuTG9nTGV2ZWwgPj0gTG9nZ2VyX0xvZ0xldmVscy5EZXZlbG9wbWVudCkge1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKFwiUmVmZXJlbnQgZG9lcyBub3QgaGF2ZSBhbnkgbW9yZSByZWZlcmVuY2VzOiBcIiArIHRoaXMuUmVmZXJlbnQsIGZhbHNlKTtcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN0YWNrVHJhY2UodGhpcy5faW5zdGFudGlhdGlvblRyYWNlLCAxNSwgXCJJbnN0YW50aWF0aW9uIHRyYWNlOlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgRGVidWcuQXNzZXJ0KGZhbHNlLCBcIlJlZmVyZW50IGRvZXMgbm90IGhhdmUgYW55IG1vcmUgcmVmZXJlbmNlcy4gU2VlIERFViBsZXZlbCBsb2cuXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLlJlZmVyZW50LlJlbW92ZVJlZmVyZW5jZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFic3RyYWN0IENsb25lKCk6IE9iamVjdFJlZmVyZW5jZUJhc2U7XHJcblxyXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJ7UmVmZXJlbmNlIFwiICsgdGhpcy5pZCArIFwiIHRvOiBcIiArIHRoaXMuUmVmZXJlbnQgKyBcIn1cIjtcclxuICB9XHJcbn1cclxuIl19
@@ -24,4 +24,4 @@ export class ObjectReferencesCollection {
24
24
  return this._refs;
25
25
  }
26
26
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JqZWN0UmVmZXJlbmNlc0NvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9PYmplY3RSZWZlcmVuY2VzQ29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFMUMsTUFBTSxPQUFPLDBCQUEwQjtJQUM3QixLQUFLLEdBQThCLElBQUksSUFBSSxFQUFFLENBQUM7SUFFdEQsUUFBUSxDQUFDLENBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQTJCO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPO1FBQ0wsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekQsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksMEJBQTBCLEdBQStCLElBQUksMEJBQTBCLEVBQUUsQ0FBQztRQUM5RixLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxJQUFJLE1BQU0sR0FBd0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzRCwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sMEJBQTBCLENBQUM7SUFDcEMsQ0FBQztJQUdELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09iamVjdFJlZmVyZW5jZUJhc2V9IGZyb20gXCIuL09iamVjdFJlZmVyZW5jZUJhc2VcIjtcclxuaW1wb3J0IHtMaXN0fSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBPYmplY3RSZWZlcmVuY2VzQ29sbGVjdGlvbiB7XHJcbiAgcHJpdmF0ZSBfcmVmczogTGlzdDxPYmplY3RSZWZlcmVuY2VCYXNlPiA9IG5ldyBMaXN0KCk7XHJcblxyXG4gIGdldF9JdGVtKGk6IG51bWJlcik6IE9iamVjdFJlZmVyZW5jZUJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlZnMuZ2V0X0l0ZW0oaSk7XHJcbiAgfVxyXG5cclxuICBBZGQob2JqUmVmOiBPYmplY3RSZWZlcmVuY2VCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZWZzLnB1c2gob2JqUmVmKTtcclxuICB9XHJcblxyXG4gIERpc3Bvc2UoKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fcmVmcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAodGhpcy5fcmVmcy5nZXRfSXRlbShpKSkuRGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQ2xvbmUoKTogT2JqZWN0UmVmZXJlbmNlc0NvbGxlY3Rpb24ge1xyXG4gICAgbGV0IG9iamVjdFJlZmVyZW5jZXNDb2xsZWN0aW9uOiBPYmplY3RSZWZlcmVuY2VzQ29sbGVjdGlvbiA9IG5ldyBPYmplY3RSZWZlcmVuY2VzQ29sbGVjdGlvbigpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3JlZnMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IG9ialJlZjogT2JqZWN0UmVmZXJlbmNlQmFzZSA9IHRoaXMuZ2V0X0l0ZW0oaSkuQ2xvbmUoKTtcclxuICAgICAgb2JqZWN0UmVmZXJlbmNlc0NvbGxlY3Rpb24uQWRkKG9ialJlZik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0UmVmZXJlbmNlc0NvbGxlY3Rpb247XHJcbiAgfVxyXG5cclxuICAvLyBmb3IgaXRlcmF0aW9uIHB1cnBvc2VcclxuICBnZXQgUmVmcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWZzO1xyXG4gIH1cclxufVxyXG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JqZWN0UmVmZXJlbmNlc0NvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9PYmplY3RSZWZlcmVuY2VzQ29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFMUMsTUFBTSxPQUFPLDBCQUEwQjtJQUM3QixLQUFLLEdBQThCLElBQUksSUFBSSxFQUFFLENBQUM7SUFFdEQsUUFBUSxDQUFDLENBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQTJCO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPO1FBQ0wsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hELENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSwwQkFBMEIsR0FBK0IsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1FBQzlGLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4RCxJQUFJLE1BQU0sR0FBd0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzRCwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLDBCQUEwQixDQUFDO0lBQ3BDLENBQUM7SUFHRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYmplY3RSZWZlcmVuY2VCYXNlfSBmcm9tIFwiLi9PYmplY3RSZWZlcmVuY2VCYXNlXCI7XHJcbmltcG9ydCB7TGlzdH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgT2JqZWN0UmVmZXJlbmNlc0NvbGxlY3Rpb24ge1xyXG4gIHByaXZhdGUgX3JlZnM6IExpc3Q8T2JqZWN0UmVmZXJlbmNlQmFzZT4gPSBuZXcgTGlzdCgpO1xyXG5cclxuICBnZXRfSXRlbShpOiBudW1iZXIpOiBPYmplY3RSZWZlcmVuY2VCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWZzLmdldF9JdGVtKGkpO1xyXG4gIH1cclxuXHJcbiAgQWRkKG9ialJlZjogT2JqZWN0UmVmZXJlbmNlQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVmcy5wdXNoKG9ialJlZik7XHJcbiAgfVxyXG5cclxuICBEaXNwb3NlKCk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3JlZnMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgKHRoaXMuX3JlZnMuZ2V0X0l0ZW0oaSkpLkRpc3Bvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIENsb25lKCk6IE9iamVjdFJlZmVyZW5jZXNDb2xsZWN0aW9uIHtcclxuICAgIGxldCBvYmplY3RSZWZlcmVuY2VzQ29sbGVjdGlvbjogT2JqZWN0UmVmZXJlbmNlc0NvbGxlY3Rpb24gPSBuZXcgT2JqZWN0UmVmZXJlbmNlc0NvbGxlY3Rpb24oKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9yZWZzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBvYmpSZWY6IE9iamVjdFJlZmVyZW5jZUJhc2UgPSB0aGlzLmdldF9JdGVtKGkpLkNsb25lKCk7XHJcbiAgICAgIG9iamVjdFJlZmVyZW5jZXNDb2xsZWN0aW9uLkFkZChvYmpSZWYpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iamVjdFJlZmVyZW5jZXNDb2xsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8gZm9yIGl0ZXJhdGlvbiBwdXJwb3NlXHJcbiAgZ2V0IFJlZnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVmcztcclxuICB9XHJcbn1cclxuIl19
@@ -358,4 +358,4 @@ export class RecordUtils {
358
358
  return RecordUtils.getString(tmp, type, useHex);
359
359
  }
360
360
  }
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9SZWNvcmRVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLEtBQUssRUFFTCxtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLFlBQVksRUFFWixhQUFhLEVBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsT0FBTyxFQUNQLGVBQWUsRUFDZixTQUFTLEVBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE1BQU0sT0FBTyxXQUFXO0lBR3RCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFXO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sWUFBWSxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ25GLE9BQU8sV0FBVyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBT08sTUFBTSxDQUFDLG9CQUFvQixDQUFDLE1BQXFCO1FBQ3ZELElBQUksT0FBZSxDQUFDO1FBQ3BCLElBQUksUUFBZ0IsQ0FBQztRQUNyQixJQUFJLE1BQU0sR0FBa0IsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0UsS0FBSyxJQUFJLElB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QUFDO0lBVUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFlLEVBQUUsUUFBMEIsRUFBRSxRQUEwQixFQUFFLFFBQWlCO1FBQzVHLElBQUksTUFBTSxHQUFXLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6RixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUdELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBVyxFQUFFLElBQXNCO1FBQ3BELElBQUksTUFBTSxHQUFZLGNBQWMsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLO2VBQ2xHLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUkscUJBQXFCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBR3BGLElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTztZQUN0RSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixDQUFDOztZQUVDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFFWixPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uRXhjZXB0aW9uLFxyXG4gIERlYnVnLFxyXG4gIEVuY29kaW5nLFxyXG4gIElTT184ODU5XzFfRW5jb2RpbmcsXHJcbiAgTk51bWJlcixcclxuICBOdW1iZXJTdHlsZXMsXHJcbiAgUmVmUGFyYW0sXHJcbiAgU3RyaW5nQnVpbGRlclxyXG59IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1xyXG4gIEJhc2U2NCxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjayxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxTdHJCeXRlTW9kZSxcclxuICBYbWxQYXJzZXJcclxufSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0d1aUVudmlyb25tZW50fSBmcm9tIFwiLi4vLi4vR3VpRW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHtWZWN0b3JUeXBlQmFzZX0gZnJvbSBcIi4vVmVjdG9yVHlwZUJhc2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRVdGlscyB7XHJcbiAgc3RhdGljIGJ5dGVTdHJlYW1Ub1N0cmluZyhzdHJlYW06IFN0cmluZ0J1aWxkZXIpOiBzdHJpbmc7XHJcbiAgc3RhdGljIGJ5dGVTdHJlYW1Ub1N0cmluZyhzdHJlYW06IHN0cmluZyk6IHN0cmluZztcclxuICBzdGF0aWMgYnl0ZVN0cmVhbVRvU3RyaW5nKHN0cmVhbTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtIGluc3RhbmNlb2YgU3RyaW5nQnVpbGRlcikpIHtcclxuICAgICAgcmV0dXJuIFJlY29yZFV0aWxzLmJ5dGVTdHJlYW1Ub1N0cmluZ18wKHN0cmVhbSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVjb3JkVXRpbHMuYnl0ZVN0cmVhbVRvU3RyaW5nXzEoc3RyZWFtKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgYnl0ZSBzdHJlYW0gdG8gU3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc3VsdFwiPm9mIHRoZSB0cmFuc2xhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJlYW1cIj4oaW4gU3RyaW5nQnVmZmVyIGZvcm0pIHRvIHRyYW5zbGF0ZSBmcm9tPC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyBieXRlU3RyZWFtVG9TdHJpbmdfMChzdHJlYW06IFN0cmluZ0J1aWxkZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGN1cnJTdHI6IHN0cmluZztcclxuICAgIGxldCBjdXJyQ2hhcjogc3RyaW5nO1xyXG4gICAgbGV0IHJlc3VsdDogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKE1hdGguZmxvb3Ioc3RyZWFtLkxlbmd0aCAvIDIpKTtcclxuXHJcbiAgICBmb3IgKGxldCBpbmR4OiBudW1iZXIgPSAwOyBpbmR4IDwgc3RyZWFtLkxlbmd0aDsgaW5keCA9IGluZHggKyAyKSB7XHJcbiAgICAgIGN1cnJTdHIgPSBzdHJlYW0uZ2V0X0l0ZW0oaW5keCkgKyBzdHJlYW0uZ2V0X0l0ZW0oaW5keCArIDEpO1xyXG4gICAgICBjdXJyQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoTk51bWJlci5QYXJzZShjdXJyU3RyLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKSk7XHJcbiAgICAgIHJlc3VsdC5BcHBlbmQoY3VyckNoYXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdC5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBieXRlIHN0cmVhbSB0byBTdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc3RhdGljIGJ5dGVTdHJlYW1Ub1N0cmluZ18xKHN0cmVhbTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBSZWNvcmRVdGlscy5ieXRlU3RyZWFtVG9TdHJpbmcobmV3IFN0cmluZ0J1aWxkZXIoc3RyZWFtKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2VyaWFsaXplIGFuIGl0ZW0gKGZpZWxkL2dsb2JhbCBwYXJhbS8uLi4pIHRvIGFuIFhNTCBmb3JtYXQgKGFwcGxpY2FibGUgdG8gYmUgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpdGVtVmFsXCI+aXRlbSdzIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIml0ZW1BdHRyXCI+aXRlbSdzIGF0dHJpYnV0ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjZWxsQXR0clwiPmNlbGwncyBhdHRyaWJ1dGUgLSByZWxldmFudCBvbmx5IGlmICdpdGVtQXR0cicgaXMgdmVjdG9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRvQmFzZTY0XCI+ZGVjaWRlIEJhc2U2NCBlbmNvZGluZyBpcyB0byBiZSBkb25lPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+c2VyaWFsaXplZCBidWZmZXI8L3JldHVybnM+XHJcbiAgc3RhdGljIHNlcmlhbGl6ZUl0ZW1WYWwoaXRlbVZhbDogc3RyaW5nLCBpdGVtQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgY2VsbEF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIHRvQmFzZTY0OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIERlYnVnLkFzc2VydChpdGVtVmFsICE9IG51bGwpO1xyXG5cclxuICAgIGxldCBzaWduaWZpY2FudE51bVNpemU6IG51bWJlciA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpICogMjtcclxuXHJcbiAgICBsZXQgdmFsdWVTaXplOiBzdHJpbmc7XHJcbiAgICBsZXQgajogbnVtYmVyO1xyXG4gICAgbGV0IHRtcEJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgZmxkVmFsTGVuOiBudW1iZXIgO1xyXG5cclxuICAgIC8vIGZvciBhbHBoYSB0eXBlIGFkZCB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBhcyBoZXggbnVtYmVyIG9mIDQgZGlnaXRzXHJcbiAgICBzd2l0Y2ggKGl0ZW1BdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgaXRlbVZhbCA9ICF0b0Jhc2U2NFxyXG4gICAgICAgICAgPyBpdGVtVmFsLnN1YnN0cigwLCBzaWduaWZpY2FudE51bVNpemUpXHJcbiAgICAgICAgICA6IEJhc2U2NC5lbmNvZGUodGhpcy5ieXRlU3RyZWFtVG9TdHJpbmcoaXRlbVZhbC5zdWJzdHIoMCwgc2lnbmlmaWNhbnROdW1TaXplKSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBpdGVtVmFsID0gU3RyVXRpbC5ydHJpbShpdGVtVmFsKTtcclxuICAgICAgICBwb3MgPSAwO1xyXG4gICAgICAgIGZsZFZhbExlbiA9IGl0ZW1WYWwubGVuZ3RoO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICBsZXQgbnVsbENoclBvczogbnVtYmVyID0gaXRlbVZhbC5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoMCksIHBvcyk7XHJcbiAgICAgICAgICBpZiAobnVsbENoclBvcyA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdmFsdWVTaXplID0gKGZsZFZhbExlbiAtIHBvcykudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIC8vIGFkZCBsZWFkaW5nIHplcm9zIChpZiBuZWVkZWQpXHJcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA0IC0gdmFsdWVTaXplLmxlbmd0aDsgaisrKVxyXG4gICAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoJzAnKTtcclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCh2YWx1ZVNpemUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBvcyA+IDApXHJcbiAgICAgICAgICAgICAgaXRlbVZhbCA9IGl0ZW1WYWwuc3Vic3RyKHBvcywgKGZsZFZhbExlbikgLSAocG9zKSk7XHJcblxyXG4gICAgICAgICAgICBwb3MgPSBmbGRWYWxMZW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gSWYgTlVMTCBjaGFycyBleGlzdCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB2YWx1ZSAtIGNyZWF0ZSBhIHNwYW5uZWQgcmVjb3JkXHJcbiAgICAgICAgICAgIC8vIFR1cm4gb24gdGhlIGhpZ2ggbW9zdCBiaXQgaW4gdGhlIGxlbmd0aCAodG8gaW5kaWNhdGUgYSBzZWdtZW50KVxyXG4gICAgICAgICAgICB2YWx1ZVNpemUgPSAobnVsbENoclBvcyAtIHBvcyArIDB4ODAwMCkudG9TdHJpbmcgKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoaXRlbVZhbC5zdWJzdHIocG9zLCAobnVsbENoclBvcykgLSAocG9zKSkpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ291bnQgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIE5VTEwgY2hhcnMsIGFuZCBhZGQgdGhlaXIgY291bnQgdG8gWE1MXHJcbiAgICAgICAgICAgIGZvciAoaiA9IDE7IGogPCBmbGRWYWxMZW4gLSBudWxsQ2hyUG9zICYmIGl0ZW1WYWwuY2hhckNvZGVBdChudWxsQ2hyUG9zICsgaikgPT09IDA7IGorKykge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGFkZCBsZWFkaW5nIHplcm9zIChpZiBuZWVkZWQpXHJcbiAgICAgICAgICAgIHZhbHVlU2l6ZSA9IFwiMDAwMFwiICsgKGoudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZS5zdWJzdHIodmFsdWVTaXplLmxlbmd0aCAtIDQpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFwcGVuZCBhIGhleCBkdW1wIG9mIHNwZWNpYWwgY2hhcnNcclxuICAgICAgICAgICAgZm9yIChwb3MgPSBudWxsQ2hyUG9zOyBqID4gMDsgai0tLCBwb3MrKykge1xyXG4gICAgICAgICAgICAgIGxldCB0bXBTdHI6IHN0cmluZyA9IFwiMFwiICsgaXRlbVZhbC5jaGFyQ29kZUF0KG51bGxDaHJQb3MpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHRtcFN0ci5zdWJzdHIodG1wU3RyLmxlbmd0aCAtIDIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgc3BlY2lhbCBjaGFycyB3ZXJlIGxhc3QsIGFkZCB0aGUgbGVuZ3RoIG9mIHRoZSBsYXN0IHNlZ21lbnQgKHplcm8pXHJcbiAgICAgICAgICAgIGlmIChwb3MgPj0gZmxkVmFsTGVuKSB7XHJcbiAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChcIjAwMDBcIik7XHJcbiAgICAgICAgICAgICAgaXRlbVZhbCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChwb3MgPCBmbGRWYWxMZW4pO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVDpcclxuICAgICAgICBwb3MgPSAwO1xyXG5cclxuICAgICAgICBmbGRWYWxMZW4gPSBpdGVtVmFsLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiYgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgICAgIGlmIChjZWxsQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBjZWxsQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PKSB7XHJcbiAgICAgICAgICAgIGl0ZW1WYWwgPSBWZWN0b3JUeXBlQmFzZS5hZGp1c3RBbHBoYVN0cmluZ3NJbkZsYXREYXRhKGl0ZW1WYWwpO1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIGZsYXQgZGF0YSB3aWxsIGJlIGRpdmlkZWQgYnkgMHgzRkZGIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgICAgIC8vIEVhY2ggc2VnbWVudCB3aWxsIGJlIHNpemUgaW4gMHgzRkZGIH4gMHg3RkZGIGJ5dGVzLlxyXG4gICAgICAgICAgICAvLyBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgREJDUyBjaGFyYWN0ZXJzLCBub3QgZml4ZWQgaW4gMHg3RkZGLlxyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW1WYWwubGVuZ3RoIDwgcG9zICsgMHgzRkZGKVxyXG4gICAgICAgICAgICAgIC8vICgweDgwMDAgLSAxKSAvIDIgPSAweDNGRkZcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zID4gMClcclxuICAgICAgICAgICAgICAgICAgaXRlbVZhbCA9IGl0ZW1WYWwuc3Vic3RyKHBvcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFsdWVTaXplID0gKFV0aWxTdHJCeXRlTW9kZS5sZW5CKGl0ZW1WYWwpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCBsZWFkaW5nIHplcm9zIChpZiBuZWVkZWQpXHJcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNCAtIHZhbHVlU2l6ZS5sZW5ndGg7IGorKylcclxuICAgICAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCgnMCcpO1xyXG4gICAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCh2YWx1ZVNpemUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGhleCBlbmNvZGluZ1xyXG4gICAgICAgICAgICAgICAgaXRlbVZhbCA9ICF0b0Jhc2U2NFxyXG4gICAgICAgICAgICAgICAgICA/IFN0clV0aWwuc3RyaW5nVG9IZXhhRHVtcChpdGVtVmFsLCA0KVxyXG4gICAgICAgICAgICAgICAgICA6IEJhc2U2NC5lbmNvZGUoaXRlbVZhbCwgdHJ1ZSwgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zID0gZmxkVmFsTGVuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBzdHJTdWI6IHN0cmluZyA9IGl0ZW1WYWwuc3Vic3RyKHBvcywgMHgzRkZGKTtcclxuICAgICAgICAgICAgICAgIC8vICsgMHg4MDAwIC4uLiB0byBpbmRpY2F0ZSBub3QgdGhlIGxhc3Qgc2VnbWVudFxyXG4gICAgICAgICAgICAgICAgdmFsdWVTaXplID0gKChVdGlsU3RyQnl0ZU1vZGUubGVuQihzdHJTdWIpICsgMHg4MDAwKS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaGV4IG9yIGJhc2U2NCBlbmNvZGluZ1xyXG4gICAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCghdG9CYXNlNjRcclxuICAgICAgICAgICAgICAgICAgPyBTdHJVdGlsLnN0cmluZ1RvSGV4YUR1bXAoc3RyU3ViLCA0KVxyXG4gICAgICAgICAgICAgICAgICA6IEJhc2U2NC5lbmNvZGUoc3RyU3ViLCB0cnVlLCBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRFbmNvZGluZygpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChcIjAwMDBcIik7XHJcbiAgICAgICAgICAgICAgICBwb3MgKz0gMHgzRkZGO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAocG9zIDwgZmxkVmFsTGVuKSA7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgIGlmIChmbGRWYWxMZW4gPCBwb3MgKyAweDdGRkYpXHJcbiAgICAgICAgICAvLyAweDgwMDAgLTEgPSAweDdGRkZcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdmFsdWVTaXplID0gKChmbGRWYWxMZW4gLSBwb3MpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgLy8gYWRkIGxlYWRpbmcgemVyb3MgKGlmIG5lZWRlZClcclxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDQgLSB2YWx1ZVNpemUubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCgnMCcpO1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zID4gMClcclxuICAgICAgICAgICAgICBpdGVtVmFsID0gaXRlbVZhbC5zdWJzdHIocG9zLCAoZmxkVmFsTGVuKSAtIChwb3MpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGhleCBlbmNvZGluZ1xyXG4gICAgICAgICAgICBpdGVtVmFsID0gIXRvQmFzZTY0XHJcbiAgICAgICAgICAgICAgPyBTdHJVdGlsLnN0cmluZ1RvSGV4YUR1bXAoaXRlbVZhbCwgNClcclxuICAgICAgICAgICAgICA6IEJhc2U2NC5lbmNvZGUoaXRlbVZhbCk7XHJcblxyXG4gICAgICAgICAgICBwb3MgPSBmbGRWYWxMZW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdG8gaW5kaWNhdGUgdGhlIGZ1bGwgc2VnbWVudFxyXG4gICAgICAgICAgICB2YWx1ZVNpemUgPSBcIkZGRkZcIjsgLy8gKEludGVnZXIudG9IZXhTdHJpbmcgKDB4RkZGRikpLnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCh2YWx1ZVNpemUpO1xyXG5cclxuICAgICAgICAgICAgLy8gaGV4IG9yIGJhc2U2NCBlbmNvZGluZ1xyXG4gICAgICAgICAgICBpZiAoIXRvQmFzZTY0KVxyXG4gICAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoU3RyVXRpbC5zdHJpbmdUb0hleGFEdW1wKGl0ZW1WYWwuc3Vic3RyKHBvcywgMHg3RkZGKSwgNCkpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChCYXNlNjQuZW5jb2RlKGl0ZW1WYWwuc3Vic3RyKHBvcywgMHg3RkZGKSkpO1xyXG5cclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChcIjAwMDBcIik7XHJcbiAgICAgICAgICAgIHBvcyArPSAweDdGRkY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSB3aGlsZSAocG9zIDwgZmxkVmFsTGVuKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH0gLy8gZW5kIG9mIHRoZSB0eXBlIGNhc2UgYmxvY2tcclxuICAgIHRtcEJ1Zi5BcHBlbmQoaXRlbVZhbCk7XHJcbiAgICByZXR1cm4gdG1wQnVmLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IERlc2VyaWFsaXplcyBhbiBpdGVtJ3MgKGZpZWxkL2dsb2JhbCBwYXJhbS8uLi4pIHZhbHVlIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpdGVtVmFsXCI+aXRlbSdzIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpdGVtQXR0clwiPml0ZW0ncyBhdHRyaWJ1dGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIml0ZW1MZW5cIj5pdGVtJ3MgbGVuZ3RoPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VIZXhcIj5pbmRpY2F0ZXMgd2hldGhlciB0aGUgaXRlbVZhbCBpcyBpbiBIZXggb3IgQmFzZTY0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjZWxsQXR0clwiPmNlbGwncyBhdHRyaWJ1dGUgLSByZWxldmFudCBvbmx5IGlmICdpdGVtQXR0cicgaXMgdmVjdG9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJzZWRMZW5cIj5vdXQgcGFyYW1ldGVyLiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgaXRlbVZhbCBwYXJzZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIGRlU2VyaWFsaXplSXRlbVZhbChpdGVtVmFsOiBzdHJpbmcsIGl0ZW1BdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBpdGVtTGVuOiBudW1iZXIsIHVzZUhleDogYm9vbGVhbiwgY2VsbEF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIHBhcnNlZExlbjogUmVmUGFyYW08bnVtYmVyPik6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgbGV0IGlkeDogbnVtYmVyID0gMDtcclxuICAgIGxldCBsZW46IG51bWJlciwgZW5kSWR4OiBudW1iZXI7XHJcbiAgICBsZXQgc3VmZml4QnVmOiBTdHJpbmdCdWlsZGVyID0gbnVsbDtcclxuICAgIGxldCB0bXA6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgaWYgKGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBXHJcbiAgICAgIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREVcclxuICAgICAgfHwgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQlxyXG4gICAgICB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUlxyXG4gICAgICB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5ET1RORVRcclxuICAgICkge1xyXG4gICAgICAvLyBmaXJzdCA0IGNoYXJhY3RlcnMgYXJlIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAoaGV4IG51bWJlcilcclxuICAgICAgZW5kSWR4ID0gaWR4ICsgNDtcclxuICAgICAgdG1wID0gaXRlbVZhbC5zdWJzdHIoaWR4LCAoZW5kSWR4KSAtIChpZHgpKTtcclxuICAgICAgbGVuID0gTk51bWJlci5QYXJzZSh0bXAsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpO1xyXG4gICAgICBpZHggPSBlbmRJZHg7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKVxyXG4gICAgICBsZW4gPSAxO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBzaWduaWZpY2FudE51bVNpemU6IG51bWJlciA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG4gICAgICBpZiAodXNlSGV4KVxyXG4gICAgICAgIGxlbiA9IHNpZ25pZmljYW50TnVtU2l6ZSAqIDI7XHJcbiAgICAgIGVsc2VcclxuICAgICAgLy8gaWYgd29ya2luZyBpbiBiYXNlNjRcclxuICAgICAgICBsZW4gPSAoTWF0aC5mbG9vcigoc2lnbmlmaWNhbnROdW1TaXplICsgMikgLyAzKSAqIDQpO1xyXG4gICAgfVxyXG4gICAgLy8gT29wcywgZGlkIHdlIGJ1bXBlZCBpbnRvIGEgc3Bhbm5lZCByZWNvcmQgKFdlIGlkZW50aWZ5IGl0IHdoZW4gdGhlIGhpZ2gtbW9zdCBiaXQgaXMgb24pP1xyXG4gICAgaWYgKChsZW4gJiAweDgwMDApID4gMCkge1xyXG4gICAgICBzdWZmaXhCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICBsZW4gPSAobGVuICYgMHg3RkZGKTtcclxuXHJcbiAgICAgIGlmIChpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SXHJcbiAgICAgICAgfHwgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUKVxyXG4gICAgICAgIGlmICh1c2VIZXgpXHJcbiAgICAgICAgICBsZW4gKj0gMjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBsZW4gPSAoTWF0aC5mbG9vcigobGVuICsgMikgLyAzKSAqIDQpO1xyXG5cclxuICAgICAgcGFyc2VkTGVuLnZhbHVlID0gdGhpcy5nZXRTcGFubmVkRmllbGQoaXRlbVZhbCwgbGVuLCBpZHgsIGl0ZW1BdHRyLCBzdWZmaXhCdWYsIHVzZUhleCk7XHJcbiAgICAgIHZhbCA9IHN1ZmZpeEJ1Zi5Ub1N0cmluZygpO1xyXG4gICAgICBlbmRJZHggPSBpZHggKyBwYXJzZWRMZW4udmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JcclxuICAgICAgICB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUlxyXG4gICAgICAgIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVFxyXG4gICAgICApXHJcbiAgICAgICAgaWYgKHVzZUhleClcclxuICAgICAgICAgIGxlbiAqPSAyO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGxlbiA9IChNYXRoLmZsb29yKChsZW4gKyAyKSAvIDMpICogNCk7XHJcblxyXG4gICAgICBlbmRJZHggPSBpZHggKyBsZW47XHJcbiAgICAgIGlmIChlbmRJZHggPiBpdGVtVmFsLmxlbmd0aClcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZmlsbEZpZWxkc0RhdGEoKSBkYXRhIHN0cmluZyB0b28gc2hvcnQ6XFxuXCIgKyBpdGVtVmFsKTtcclxuXHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmIGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgIHZhbCA9IHRoaXMuZ2V0U3RyaW5nKGl0ZW1WYWwuc3Vic3RyKGlkeCwgKGVuZElkeCkgLSAoaWR4KSksIGl0ZW1BdHRyLCB1c2VIZXgsIChjZWxsQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSkpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdmFsID0gdGhpcy5nZXRTdHJpbmcoaXRlbVZhbC5zdWJzdHIoaWR4LCAoZW5kSWR4KSAtIChpZHgpKSwgaXRlbUF0dHIsIHVzZUhleCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWR4ID0gZW5kSWR4O1xyXG5cclxuICAgIGlmIChpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgIGxlbiA9IGl0ZW1MZW47XHJcbiAgICAgIHZhbCA9IFN0clV0aWwucGFkU3RyKHZhbCwgbGVuKTtcclxuXHJcbiAgICAgIGlmIChpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKVxyXG4gICAgICAgIHZhbCA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0Qih2YWwsIGxlbik7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VkTGVuLnZhbHVlID0gZW5kSWR4O1xyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcbiAgc3RhdGljIGdldFN0cmluZyhzdHI6IHN0cmluZywgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IHN0cmluZztcclxuICBzdGF0aWMgZ2V0U3RyaW5nKHN0cjogc3RyaW5nLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCB1c2VIZXg6IGJvb2xlYW4pOiBzdHJpbmc7XHJcbiAgc3RhdGljIGdldFN0cmluZyhzdHI6IHN0cmluZywgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdXNlSGV4OiBib29sZWFuLCB1c2VFbnZDaGFyc2V0OiBib29sZWFuKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBnZXRTdHJpbmcoc3RyOiBzdHJpbmcsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHVzZUhleD86IGJvb2xlYW4sIHVzZUVudkNoYXJzZXQ/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKVxyXG4gICAgICByZXR1cm4gUmVjb3JkVXRpbHMuZ2V0U3RyaW5nXzAoc3RyLCB0eXBlLCB1c2VIZXgpO1xyXG5cclxuICAgIGlmKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpXHJcbiAgICAgIHJldHVybiBSZWNvcmRVdGlscy5nZXRTdHJpbmdfMihzdHIsIHR5cGUpO1xyXG5cclxuICAgIHJldHVybiBSZWNvcmRVdGlscy5nZXRTdHJpbmdfMShzdHIsIHR5cGUsIHVzZUhleCwgdXNlRW52Q2hhcnNldCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+IHJpZ2h0IHN0cmluZyBpbiBjb25maWRlbmNlIHdpdGggdGhlIHR5cGU8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3RyaW5nXzAoc3RyOiBzdHJpbmcsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHVzZUhleDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gUmVjb3JkVXRpbHMuZ2V0U3RyaW5nKHN0ciwgdHlwZSwgdXNlSGV4LCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+IHJpZ2h0IHN0cmluZyBpbiBjb25maWRlbmNlIHdpdGggdGhlIHR5cGU8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3RyaW5nXzEoc3RyOiBzdHJpbmcsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHVzZUhleDogYm9vbGVhbiwgdXNlRW52Q2hhcnNldDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBpZiAodXNlSGV4KSB7XHJcbiAgICAgIGlmICh0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUlxyXG4gICAgICAgIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUKVxyXG4gICAgICAgIHJlc3VsdCA9IFJlY29yZFV0aWxzLmJ5dGVTdHJlYW1Ub1N0cmluZyhzdHIpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUlxyXG4gICAgICAgIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUKVxyXG4gICAgICAgIHJlc3VsdCA9IEJhc2U2NC5kZWNvZGUoc3RyLCB1c2VFbnZDaGFyc2V0ID8gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKSA6IG51bGwpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmVzdWx0ID0gQmFzZTY0LmRlY29kZVRvSGV4KHN0cik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFNwYW5uZWRGaWVsZChmbGRzVmFsOiBzdHJpbmcsIGZpcnN0U2VnTGVuOiBudW1iZXIsIGlkeDogbnVtYmVyLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCByZXN1bHQ6IFN0cmluZ0J1aWxkZXIsIHVzZUhleDogYm9vbGVhbik6IG51bWJlcjtcclxuICBzdGF0aWMgZ2V0U3Bhbm5lZEZpZWxkKGZsZHNWYWw6IFVpbnQ4QXJyYXksIGZpcnN0U2VnTGVuOiBudW1iZXIsIGlkeDogbnVtYmVyLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCByZXN1bHQ6IFN0cmluZ0J1aWxkZXIsIHVzZUhleDogYm9vbGVhbiwgbm9PZlBhY2tldHM6IG51bWJlcik6IG51bWJlcjtcclxuICBzdGF0aWMgZ2V0U3Bhbm5lZEZpZWxkKGZsZHNWYWw6IGFueSwgZmlyc3RTZWdMZW46IG51bWJlciwgaWR4OiBudW1iZXIsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHJlc3VsdDogU3RyaW5nQnVpbGRlciwgdXNlSGV4OiBib29sZWFuLCBub09mUGFja2V0cz86IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNilcclxuICAgICAgcmV0dXJuIFJlY29yZFV0aWxzLmdldFNwYW5uZWRGaWVsZF8wKGZsZHNWYWwsIGZpcnN0U2VnTGVuLCBpZHgsIHR5cGUsIHJlc3VsdCwgdXNlSGV4KTtcclxuXHJcbiAgICByZXR1cm4gUmVjb3JkVXRpbHMuZ2V0U3Bhbm5lZEZpZWxkXzEoZmxkc1ZhbCwgZmlyc3RTZWdMZW4sIGlkeCwgdHlwZSwgcmVzdWx0LCB1c2VIZXgsIG5vT2ZQYWNrZXRzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGUgWE1MIC0+IGZpZWxkIHZhbHVlIGZvciBhIHNwYW5uZWQgQUxQSEEgZmllbGQsIGFuZCByZXR1cm4gdGhlIGFjdHVhbFxyXG4gIC8vLyAgIGZpZWxkJ3MgbGVuZ3RoLiBBIHNwYW5uZWQgZmllbGQgbWF5IGJlIGFjY2VwdGVkIGZyb20gdGhlIHNlcnZlciB3aGVuIGFuXHJcbiAgLy8vICAgQUxQSEEgaW5jbHVkZXMgc3BlY2lhbCBjaGFycyBzdWNoIGFzIE5VTEwgd2hpY2ggY2Fubm90IGJlIGVzY2FwZWQgdXNpbmcgYSAnXFwnIChsaWtlLFxyXG4gIC8vLyAgIGZvciBleGFtcGxlLCAnXFxcIicpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmbGRzVmFsXCI+c3RyaW5nIGZvciBwYXJzaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZpcnN0U2VnTGVuXCI+bGVuZ3RoIChpbiBjaGFycykgb2YgZmlyc3Qgc2VnbWVudC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+aW5kZXggaW4gc3RyaW5nLCBmcm9tIHdoaWNoIHRoZSBmaXJzdCBzZWdtZW50cyBkYXRhIHN0YXJ0cy48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPm9mIHZhcmlhYmxlIGlzIGxvb2tpbmcgZm9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc3VsdFwiPnRoZSByZXN1bHQgc3RyaW5nLCB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIHBhcnNlZCBmaWVsZCBjb250ZW50LjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3Bhbm5lZEZpZWxkXzAoZmxkc1ZhbDogc3RyaW5nLCBmaXJzdFNlZ0xlbjogbnVtYmVyLCBpZHg6IG51bWJlciwgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgcmVzdWx0OiBTdHJpbmdCdWlsZGVyLCB1c2VIZXg6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgbGV0IGVuZElkeDogbnVtYmVyID0gaWR4ICsgZmlyc3RTZWdMZW47XHJcbiAgICBsZXQgbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgYmVnaW46IG51bWJlciA9IGlkeDtcclxuICAgIGxldCBhc2NpaUNvZGU6IHN0cmluZztcclxuICAgIGxldCB0bXA6IHN0cmluZztcclxuICAgIGxldCBzdWZmaXhCdWY6IFN0cmluZ0J1aWxkZXIgPSBudWxsO1xyXG4gICAgbGV0IHBhcnNlZExlbjogbnVtYmVyO1xyXG5cclxuICAgIGlmIChlbmRJZHggPiBmbGRzVmFsLmxlbmd0aCkge1xyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZ2V0U3Bhbm5lZEZpZWxkKCkgZGF0YSBzdHJpbmcgdG9vIHNob3J0OlxcblwiICsgZmxkc1ZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXBwZW5kIGZpcnN0IHNlZ21lbnRcclxuICAgIHJlc3VsdC5SZW1vdmUoMCwgcmVzdWx0Lkxlbmd0aCk7XHJcbiAgICByZXN1bHQuQXBwZW5kKFJlY29yZFV0aWxzLmdldFN0cmluZyhmbGRzVmFsLnN1YnN0cihpZHgsIGVuZElkeCAtIGlkeCksIHR5cGUsIHVzZUhleCkpO1xyXG5cclxuICAgIGlkeCA9IGlkeCArIGZpcnN0U2VnTGVuO1xyXG5cclxuICAgIC8vIG5leHQgNCBjaGFyYWN0ZXJzIGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKGhleCBudW1iZXIpIG9mIHNwZWNpYWwgYnl0ZXMuXHJcbiAgICBlbmRJZHggPSBpZHggKyA0O1xyXG4gICAgdG1wID0gZmxkc1ZhbC5zdWJzdHIoaWR4LCBlbmRJZHggLSBpZHgpO1xyXG4gICAgbGVuID0gTk51bWJlci5QYXJzZSh0bXAsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpO1xyXG4gICAgaWR4ID0gZW5kSWR4O1xyXG5cclxuICAgIC8vIGlmIHdvcmtpbmcgaW4gaGV4XHJcbiAgICBpZiAodXNlSGV4KVxyXG4gICAgICBlbmRJZHggPSBpZHggKyBsZW4gKiAyO1xyXG4gICAgZWxzZVxyXG4gICAgICBlbmRJZHggPSBpZHggKyBNYXRoLmZsb29yKChsZW4gKyAyKSAvIDMgKSAqIDQ7XHJcblxyXG4gICAgaWYgKGVuZElkeCA+IGZsZHNWYWwubGVuZ3RoKVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZ2V0U3Bhbm5lZEZpZWxkKCkgZGF0YSBzdHJpbmcgdG9vIHNob3J0OlxcblwiICsgZmxkc1ZhbCk7XHJcblxyXG4gICAgLy8gYXBwZW5kIHNwZWNpYWwgY2hhcnMsIG9uZSBieSBvbmVcclxuICAgIHdoaWxlIChpZHggPCBlbmRJZHgpIHtcclxuICAgICAgdG1wID0gZmxkc1ZhbC5zdWJzdHIoaWR4LCAyKTtcclxuICAgICAgYXNjaWlDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZShOTnVtYmVyLlBhcnNlKHRtcCwgTnVtYmVyU3R5bGVzLkhleE51bWJlcikpO1xyXG4gICAgICByZXN1bHQuQXBwZW5kKGFzY2lpQ29kZSk7XHJcbiAgICAgIGlkeCA9IGlkeCArIDI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbmV4dCA0IGNoYXJzIGFyZSB0aGUgbGVuZ3RoIG9mIG5leHQgc2VnbWVudFxyXG4gICAgZW5kSWR4ID0gaWR4ICsgNDtcclxuICAgIHRtcCA9IGZsZHNWYWwuc3Vic3RyKGlkeCwgZW5kSWR4IC0gaWR4KTtcclxuICAgIGxlbiA9IE5OdW1iZXIuUGFyc2UodG1wLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKTtcclxuICAgIGlkeCA9IGVuZElkeDtcclxuXHJcbiAgICBpZiAoKGxlbiAmIDB4ODAwMCkgPiAwKSB7XHJcbiAgICAgIC8vIE9vcHMsIG5leHQgc2VnbWVudCBtYXkgYWxzbyBiZSBzcGFubmVkXHJcbiAgICAgIHN1ZmZpeEJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgIGxlbiA9IChsZW4gJiAweDdGRkYpO1xyXG5cclxuICAgICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgIGlmICh1c2VIZXgpXHJcbiAgICAgICAgICBsZW4gPSBsZW4gKiAyO1xyXG4gICAgICAgIC8vIHdvcmtpbmcgaW4gYmFzZTY0XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgbGVuID0gTWF0aC5mbG9vcigobGVuICsgMikgLyAzKSAqIDQ7XHJcblxyXG4gICAgICBwYXJzZWRMZW4gPSBSZWNvcmRVdGlscy5nZXRTcGFubmVkRmllbGQoZmxkc1ZhbCwgbGVuLCBpZHgsIHR5cGUsIHN1ZmZpeEJ1ZiwgdXNlSGV4KTtcclxuICAgICAgLy8gYWZ0ZXIgdXNpbmcgcmVjdXJzaXZlIGZ1bmN0aW9uIHRlaCBzdWZmaXhCdWYgaXMgaW4gdGhlIHJpZ2h0IHRyYW5zZm9ybWVkIGZvcm1cclxuICAgICAgcmVzdWx0LkFwcGVuZChzdWZmaXhCdWYuVG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICBpZHggPSBpZHggKyBwYXJzZWRMZW47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgIGlmICh1c2VIZXgpXHJcbiAgICAgICAgICBsZW4gPSBsZW4gKiAyO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGxlbiA9IE1hdGguZmxvb3IoKGxlbiArIDIpIC8gMykgKiA0O1xyXG5cclxuICAgICAgLy8gbmV4dCBzZWdtZW50IGlzbid0IHNwYW5uZWQuIEl0IG11c3QgYmUgdGhlIGxhc3Qgb25lLlxyXG4gICAgICBlbmRJZHggPSBpZHggKyBsZW47XHJcbiAgICAgIGlmIChlbmRJZHggPiBmbGRzVmFsLmxlbmd0aClcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZmlsbEZpZWxkc0RhdGEoKSBkYXRhIHN0cmluZyB0b28gc2hvcnQ6XFxuXCIgKyBmbGRzVmFsKTtcclxuXHJcbiAgICAgIHJlc3VsdC5BcHBlbmQoUmVjb3JkVXRpbHMuZ2V0U3RyaW5nKGZsZHNWYWwuc3Vic3RyKGlkeCwgZW5kSWR4IC0gaWR4KSwgdHlwZSwgdXNlSGV4KSk7XHJcbiAgICAgIGlkeCA9IGVuZElkeDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaWR4IC0gYmVnaW47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRyYW5zbGF0ZSB2YWx1ZSBvZiB0aGUgc3Bhbm5lZCBmaWVsZCB0byBhY3R1YWwgdmFsdWUuIEZpZWxkIHZhbHVlIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBvZiBsZW5ndGggYW5kIGRhdGFcclxuICAvLy8gWyAoTGVuZ3RoIHwgZGF0YSkgKChMZW5ndGggfCBkYXRhKSkuLi4uLl1cclxuICAvLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgbGVuZ3RoIGFuZCBkYXRhIG9mIGVhY2ggcGFja2V0IGFuZCByZXR1cm4gYWN0dWFsIHZhbHVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmxkc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmlyc3RTZWdMZW5cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlkeFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidHlwZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzdWx0XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VIZXhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5vT2ZQYWNrZXRzXCI+IFRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgZnJvbSB0aGUgc2VydmVyPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGdldFNwYW5uZWRGaWVsZF8xKGZsZHNWYWw6IFVpbnQ4QXJyYXksIGZpcnN0U2VnTGVuOiBudW1iZXIsIGlkeDogbnVtYmVyLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCByZXN1bHQ6IFN0cmluZ0J1aWxkZXIsIHVzZUhleDogYm9vbGVhbiwgbm9PZlBhY2tldHM6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgZW5kSWR4OiBudW1iZXIgPSBpZHggKyBmaXJzdFNlZ0xlbjtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBiZWdpbjogbnVtYmVyID0gaWR4O1xyXG4gICAgbGV0IHRtcDogc3RyaW5nO1xyXG4gICAgbGV0IHN1ZmZpeEJ1ZjogU3RyaW5nQnVpbGRlciA9IG51bGw7XHJcbiAgICBsZXQgcGFyc2VkTGVuOiBudW1iZXI7XHJcbiAgICBsZXQgdG1wRW5jOiBFbmNvZGluZztcclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKVxyXG4gICAgICB0bXBFbmMgPSBJU09fODg1OV8xX0VuY29kaW5nLklTT184ODU5XzE7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRtcEVuYyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldEVuY29kaW5nKCk7XHJcblxyXG4gICAgaWYgKGVuZElkeCA+IGZsZHNWYWwubGVuZ3RoKVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZ2V0U3Bhbm5lZEZpZWxkKCkgZGF0YSBzdHJpbmcgdG9vIHNob3J0OlxcblwiICsgZmxkc1ZhbCk7XHJcblxyXG4gICAgLy8gYXBwZW5kIGZpcnN0IHNlZ21lbnRcclxuICAgIHJlc3VsdC5SZW1vdmUoMCwgcmVzdWx0Lkxlbmd0aCk7XHJcbiAgICByZXN1bHQuQXBwZW5kKHRtcEVuYy5HZXRTdHJpbmcoZmxkc1ZhbCwgaWR4LCBmaXJzdFNlZ0xlbikpO1xyXG4gICAgbm9PZlBhY2tldHMgPSBub09mUGFja2V0cyAtIDE7XHJcblxyXG4gICAgaWYgKG5vT2ZQYWNrZXRzIDw9IDApXHJcbiAgICAgIHJldHVybiAwO1xyXG5cclxuICAgIGlkeCA9IGlkeCArIGZpcnN0U2VnTGVuO1xyXG5cclxuICAgIC8vIG5leHQgNCBjaGFyYWN0ZXJzIGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKGhleCBudW1iZXIpIG9mIHNwZWNpYWwgYnl0ZXMuXHJcbiAgICBlbmRJZHggPSBpZHggKyA0O1xyXG4gICAgdG1wID0gdG1wRW5jLkdldFN0cmluZyhmbGRzVmFsLCBpZHgsIDQpO1xyXG4gICAgbGVuID0gTk51bWJlci5QYXJzZSh0bXAsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpO1xyXG4gICAgaWR4ID0gZW5kSWR4O1xyXG5cclxuICAgIGlmIChlbmRJZHggPiBmbGRzVmFsLmxlbmd0aClcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUmVjb3JkLmdldFNwYW5uZWRGaWVsZCgpIGRhdGEgc3RyaW5nIHRvbyBzaG9ydDpcXG5cIiArIGZsZHNWYWwpO1xyXG5cclxuICAgIC8vIG5leHQgNCBjaGFycyBhcmUgdGhlIGxlbmd0aCBvZiBuZXh0IHNlZ21lbnRcclxuICAgIGVuZElkeCA9IGlkeCArIDQ7XHJcbiAgICB0bXAgPSB0bXBFbmMuR2V0U3RyaW5nKGZsZHNWYWwsIGlkeCwgNCk7XHJcbiAgICBsZW4gPSBOTnVtYmVyLlBhcnNlKHRtcCwgTnVtYmVyU3R5bGVzLkhleE51bWJlcik7XHJcbiAgICBpZHggPSBlbmRJZHg7XHJcblxyXG4gICAgaWYgKChsZW4gJiAweDgwMDApID4gMCkge1xyXG4gICAgICAvLyBPb3BzLCBuZXh0IHNlZ21lbnQgbWF5IGFsc28gYmUgc3Bhbm5lZFxyXG4gICAgICBzdWZmaXhCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG5cclxuICAgICAgcGFyc2VkTGVuID0gUmVjb3JkVXRpbHMuZ2V0U3Bhbm5lZEZpZWxkKGZsZHNWYWwsIGxlbiwgaWR4LCB0eXBlLCBzdWZmaXhCdWYsIHVzZUhleCwgbm9PZlBhY2tldHMpO1xyXG4gICAgICAvLyBhZnRlciB1c2luZyByZWN1cnNpdmUgZnVuY3Rpb24gdGVoIHN1ZmZpeEJ1ZiBpcyBpbiB0aGUgcmlnaHQgdHJhbnNmb3JtZWQgZm9ybVxyXG4gICAgICByZXN1bHQuQXBwZW5kKHN1ZmZpeEJ1Zi5Ub1N0cmluZygpKTtcclxuICAgICAgaWR4ID0gaWR4ICsgcGFyc2VkTGVuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIG5leHQgc2VnbWVudCBpc24ndCBzcGFubmVkLiBJdCBtdXN0IGJlIHRoZSBsYXN0IG9uZS5cclxuICAgICAgZW5kSWR4ID0gaWR4ICsgbGVuO1xyXG4gICAgICBpZiAoZW5kSWR4ID4gZmxkc1ZhbC5sZW5ndGgpXHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUmVjb3JkLmZpbGxGaWVsZHNEYXRhKCkgZGF0YSBzdHJpbmcgdG9vIHNob3J0OlxcblwiICsgZmxkc1ZhbCk7XHJcblxyXG4gICAgICByZXN1bHQuQXBwZW5kKHRtcEVuYy5HZXRTdHJpbmcoZmxkc1ZhbCwgaWR4LCBsZW4pKTtcclxuICAgICAgaWR4ID0gZW5kSWR4O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpZHggLSBiZWdpbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXJpYWxpemUgYW4gaXRlbSAoZmllbGQvZ2xvYmFsIHBhcmFtLy4uLikgdG8gYW4gWE1MIGZvcm1hdCAoYXBwbGljYWJsZSB0byBiZSBwYXNzZWQgdG8gdGhlIHNlcnZlcikuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPml0ZW0ncyB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpdGVtQXR0clwiPml0ZW0ncyBhdHRyaWJ1dGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2VsbEF0dHJcIj5jZWxsJ3MgYXR0cmlidXRlIC0gcmVsZXZhbnQgb25seSBpZiAnaXRlbUF0dHInIGlzIHZlY3RvcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJUb0Jhc2U2NFwiPj5kZWNpZGUgQmFzZTY0IGVuY29kaW5nIGlzIHRvIGJlIGRvbmU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5zZXJpYWxpemVkIFhNTCBmb3JtYXQ8L3JldHVybnM+XHJcbiAgc3RhdGljIGl0ZW1WYWxUb1hNTChpdGVtVmFsOiBzdHJpbmcsIGl0ZW1BdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBjZWxsQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgVG9CYXNlNjQ6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IHRtcEJ1Zjogc3RyaW5nID0gUmVjb3JkVXRpbHMuc2VyaWFsaXplSXRlbVZhbChpdGVtVmFsLCBpdGVtQXR0ciwgY2VsbEF0dHIsIFRvQmFzZTY0KTtcclxuICAgIHJldHVybiBYbWxQYXJzZXIuZXNjYXBlKHRtcEJ1ZikudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gZ2V0IHRoZSBhY3R1YWwgc3RyaW5nIGFjY29yZGluZyB0byAndHlwZSc8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldFN0cmluZ18yKHN0cjogc3RyaW5nLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlKTogc3RyaW5nIHtcclxuICAgIGxldCB1c2VIZXg6IGJvb2xlYW4gPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWJ1Z0xldmVsKCkgPiAxIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEFcclxuICAgICAgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8IFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVMb2dpY2FsKHR5cGUpO1xyXG5cclxuICAgIC8vIGZpcnN0IDQgY2hhcmFjdGVycyBhcmUgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIChoZXggbnVtYmVyKVxyXG4gICAgbGV0IHRtcDogc3RyaW5nO1xyXG4gICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8XHJcbiAgICAgIHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIHRtcCA9IHN0ci5zdWJzdHIoNCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRtcCA9IHN0cjtcclxuXHJcbiAgICByZXR1cm4gUmVjb3JkVXRpbHMuZ2V0U3RyaW5nKHRtcCwgdHlwZSwgdXNlSGV4KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9SZWNvcmRVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLEtBQUssRUFFTCxtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLFlBQVksRUFFWixhQUFhLEVBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsT0FBTyxFQUNQLGVBQWUsRUFDZixTQUFTLEVBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE1BQU0sT0FBTyxXQUFXO0lBR3RCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFXO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sWUFBWSxhQUFhLENBQUMsRUFBRTtZQUNsRixPQUFPLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sV0FBVyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFPTyxNQUFNLENBQUMsb0JBQW9CLENBQUMsTUFBcUI7UUFDdkQsSUFBSSxPQUFlLENBQUM7UUFDcEIsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksTUFBTSxHQUFrQixJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RSxLQUFLLElBQUksSUFBSSxHQUFXLENB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LENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLO2VBQ2xHLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUkscUJBQXFCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBR3BGLElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTztZQUN0RSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7WUFDekUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckI7O1lBRUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUVaLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQXBwbGljYXRpb25FeGNlcHRpb24sXHJcbiAgRGVidWcsXHJcbiAgRW5jb2RpbmcsXHJcbiAgSVNPXzg4NTlfMV9FbmNvZGluZyxcclxuICBOTnVtYmVyLFxyXG4gIE51bWJlclN0eWxlcyxcclxuICBSZWZQYXJhbSxcclxuICBTdHJpbmdCdWlsZGVyXHJcbn0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7XHJcbiAgQmFzZTY0LFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGUsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLFxyXG4gIFN0clV0aWwsXHJcbiAgVXRpbFN0ckJ5dGVNb2RlLFxyXG4gIFhtbFBhcnNlclxyXG59IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7R3VpRW52aXJvbm1lbnR9IGZyb20gXCIuLi8uLi9HdWlFbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQge1ZlY3RvclR5cGVCYXNlfSBmcm9tIFwiLi9WZWN0b3JUeXBlQmFzZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlY29yZFV0aWxzIHtcclxuICBzdGF0aWMgYnl0ZVN0cmVhbVRvU3RyaW5nKHN0cmVhbTogU3RyaW5nQnVpbGRlcik6IHN0cmluZztcclxuICBzdGF0aWMgYnl0ZVN0cmVhbVRvU3RyaW5nKHN0cmVhbTogc3RyaW5nKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBieXRlU3RyZWFtVG9TdHJpbmcoc3RyZWFtOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKHN0cmVhbSA9PT0gbnVsbCB8fCBzdHJlYW0gaW5zdGFuY2VvZiBTdHJpbmdCdWlsZGVyKSkge1xyXG4gICAgICByZXR1cm4gUmVjb3JkVXRpbHMuYnl0ZVN0cmVhbVRvU3RyaW5nXzAoc3RyZWFtKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZWNvcmRVdGlscy5ieXRlU3RyZWFtVG9TdHJpbmdfMShzdHJlYW0pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBieXRlIHN0cmVhbSB0byBTdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzdWx0XCI+b2YgdGhlIHRyYW5zbGF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cmVhbVwiPihpbiBTdHJpbmdCdWZmZXIgZm9ybSkgdG8gdHJhbnNsYXRlIGZyb208L3BhcmFtPlxyXG4gIHByaXZhdGUgc3RhdGljIGJ5dGVTdHJlYW1Ub1N0cmluZ18wKHN0cmVhbTogU3RyaW5nQnVpbGRlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgY3VyclN0cjogc3RyaW5nO1xyXG4gICAgbGV0IGN1cnJDaGFyOiBzdHJpbmc7XHJcbiAgICBsZXQgcmVzdWx0OiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoTWF0aC5mbG9vcihzdHJlYW0uTGVuZ3RoIC8gMikpO1xyXG5cclxuICAgIGZvciAobGV0IGluZHg6IG51bWJlciA9IDA7IGluZHggPCBzdHJlYW0uTGVuZ3RoOyBpbmR4ID0gaW5keCArIDIpIHtcclxuICAgICAgY3VyclN0ciA9IHN0cmVhbS5nZXRfSXRlbShpbmR4KSArIHN0cmVhbS5nZXRfSXRlbShpbmR4ICsgMSk7XHJcbiAgICAgIGN1cnJDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShOTnVtYmVyLlBhcnNlKGN1cnJTdHIsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpKTtcclxuICAgICAgcmVzdWx0LkFwcGVuZChjdXJyQ2hhcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIGJ5dGUgc3RyZWFtIHRvIFN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgYnl0ZVN0cmVhbVRvU3RyaW5nXzEoc3RyZWFtOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFJlY29yZFV0aWxzLmJ5dGVTdHJlYW1Ub1N0cmluZyhuZXcgU3RyaW5nQnVpbGRlcihzdHJlYW0pKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXJpYWxpemUgYW4gaXRlbSAoZmllbGQvZ2xvYmFsIHBhcmFtLy4uLikgdG8gYW4gWE1MIGZvcm1hdCAoYXBwbGljYWJsZSB0byBiZSBwYXNzZWQgdG8gdGhlIHNlcnZlcikuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIml0ZW1WYWxcIj5pdGVtJ3MgdmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXRlbUF0dHJcIj5pdGVtJ3MgYXR0cmlidXRlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNlbGxBdHRyXCI+Y2VsbCdzIGF0dHJpYnV0ZSAtIHJlbGV2YW50IG9ubHkgaWYgJ2l0ZW1BdHRyJyBpcyB2ZWN0b3I8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9CYXNlNjRcIj5kZWNpZGUgQmFzZTY0IGVuY29kaW5nIGlzIHRvIGJlIGRvbmU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5zZXJpYWxpemVkIGJ1ZmZlcjwvcmV0dXJucz5cclxuICBzdGF0aWMgc2VyaWFsaXplSXRlbVZhbChpdGVtVmFsOiBzdHJpbmcsIGl0ZW1BdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBjZWxsQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgdG9CYXNlNjQ6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgRGVidWcuQXNzZXJ0KGl0ZW1WYWwgIT0gbnVsbCk7XHJcblxyXG4gICAgbGV0IHNpZ25pZmljYW50TnVtU2l6ZTogbnVtYmVyID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U2lnbmlmaWNhbnROdW1TaXplKCkgKiAyO1xyXG5cclxuICAgIGxldCB2YWx1ZVNpemU6IHN0cmluZztcclxuICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICBsZXQgdG1wQnVmID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBmbGRWYWxMZW46IG51bWJlciA7XHJcblxyXG4gICAgLy8gZm9yIGFscGhhIHR5cGUgYWRkIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIGFzIGhleCBudW1iZXIgb2YgNCBkaWdpdHNcclxuICAgIHN3aXRjaCAoaXRlbUF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICBpdGVtVmFsID0gIXRvQmFzZTY0XHJcbiAgICAgICAgICA/IGl0ZW1WYWwuc3Vic3RyKDAsIHNpZ25pZmljYW50TnVtU2l6ZSlcclxuICAgICAgICAgIDogQmFzZTY0LmVuY29kZSh0aGlzLmJ5dGVTdHJlYW1Ub1N0cmluZyhpdGVtVmFsLnN1YnN0cigwLCBzaWduaWZpY2FudE51bVNpemUpKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIGl0ZW1WYWwgPSBTdHJVdGlsLnJ0cmltKGl0ZW1WYWwpO1xyXG4gICAgICAgIHBvcyA9IDA7XHJcbiAgICAgICAgZmxkVmFsTGVuID0gaXRlbVZhbC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgIGxldCBudWxsQ2hyUG9zOiBudW1iZXIgPSBpdGVtVmFsLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSgwKSwgcG9zKTtcclxuICAgICAgICAgIGlmIChudWxsQ2hyUG9zID09PSAtMSkge1xyXG4gICAgICAgICAgICB2YWx1ZVNpemUgPSAoZmxkVmFsTGVuIC0gcG9zKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgLy8gYWRkIGxlYWRpbmcgemVyb3MgKGlmIG5lZWRlZClcclxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDQgLSB2YWx1ZVNpemUubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZCgnMCcpO1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zID4gMClcclxuICAgICAgICAgICAgICBpdGVtVmFsID0gaXRlbVZhbC5zdWJzdHIocG9zLCAoZmxkVmFsTGVuKSAtIChwb3MpKTtcclxuXHJcbiAgICAgICAgICAgIHBvcyA9IGZsZFZhbExlbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBJZiBOVUxMIGNoYXJzIGV4aXN0IGluIHRoZSBtaWRkbGUgb2YgdGhlIHZhbHVlIC0gY3JlYXRlIGEgc3Bhbm5lZCByZWNvcmRcclxuICAgICAgICAgICAgLy8gVHVybiBvbiB0aGUgaGlnaCBtb3N0IGJpdCBpbiB0aGUgbGVuZ3RoICh0byBpbmRpY2F0ZSBhIHNlZ21lbnQpXHJcbiAgICAgICAgICAgIHZhbHVlU2l6ZSA9IChudWxsQ2hyUG9zIC0gcG9zICsgMHg4MDAwKS50b1N0cmluZyAoMTYpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQodmFsdWVTaXplKTtcclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChpdGVtVmFsLnN1YnN0cihwb3MsIChudWxsQ2hyUG9zKSAtIChwb3MpKSk7XHJcblxyXG4gICAgICAgICAgICAvLyBDb3VudCBudW1iZXIgb2YgY29uc2VjdXRpdmUgTlVMTCBjaGFycywgYW5kIGFkZCB0aGVpciBjb3VudCB0byBYTUxcclxuICAgICAgICAgICAgZm9yIChqID0gMTsgaiA8IGZsZFZhbExlbiAtIG51bGxDaHJQb3MgJiYgaXRlbVZhbC5jaGFyQ29kZUF0KG51bGxDaHJQb3MgKyBqKSA9PT0gMDsgaisrKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYWRkIGxlYWRpbmcgemVyb3MgKGlmIG5lZWRlZClcclxuICAgICAgICAgICAgdmFsdWVTaXplID0gXCIwMDAwXCIgKyAoai50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQodmFsdWVTaXplLnN1YnN0cih2YWx1ZVNpemUubGVuZ3RoIC0gNCkpO1xyXG5cclxuICAgICAgICAgICAgLy8gQXBwZW5kIGEgaGV4IGR1bXAgb2Ygc3BlY2lhbCBjaGFyc1xyXG4gICAgICAgICAgICBmb3IgKHBvcyA9IG51bGxDaHJQb3M7IGogPiAwOyBqLS0sIHBvcysrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRtcFN0cjogc3RyaW5nID0gXCIwXCIgKyBpdGVtVmFsLmNoYXJDb2RlQXQobnVsbENoclBvcykudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQodG1wU3RyLnN1YnN0cih0bXBTdHIubGVuZ3RoIC0gMikpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBzcGVjaWFsIGNoYXJzIHdlcmUgbGFzdCwgYWRkIHRoZSBsZW5ndGggb2YgdGhlIGxhc3Qgc2VnbWVudCAoemVybylcclxuICAgICAgICAgICAgaWYgKHBvcyA+PSBmbGRWYWxMZW4pIHtcclxuICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKFwiMDAwMFwiKTtcclxuICAgICAgICAgICAgICBpdGVtVmFsID0gXCJcIjtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gd2hpbGUgKHBvcyA8IGZsZFZhbExlbik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUOlxyXG4gICAgICAgIHBvcyA9IDA7XHJcblxyXG4gICAgICAgIGZsZFZhbExlbiA9IGl0ZW1WYWwubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAgICAgaWYgKGNlbGxBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGNlbGxBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk1FTU8pIHtcclxuICAgICAgICAgICAgaXRlbVZhbCA9IFZlY3RvclR5cGVCYXNlLmFkanVzdEFscGhhU3RyaW5nc0luRmxhdERhdGEoaXRlbVZhbCk7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgZmxhdCBkYXRhIHdpbGwgYmUgZGl2aWRlZCBieSAweDNGRkYgY2hhcmFjdGVycy5cclxuICAgICAgICAgICAgLy8gRWFjaCBzZWdtZW50IHdpbGwgYmUgc2l6ZSBpbiAweDNGRkYgfiAweDdGRkYgYnl0ZXMuXHJcbiAgICAgICAgICAgIC8vIFRoZSBzaXplIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBEQkNTIGNoYXJhY3RlcnMsIG5vdCBmaXhlZCBpbiAweDdGRkYuXHJcbiAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbVZhbC5sZW5ndGggPCBwb3MgKyAweDNGRkYpXHJcbiAgICAgICAgICAgICAgLy8gKDB4ODAwMCAtIDEpIC8gMiA9IDB4M0ZGRlxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmIChwb3MgPiAwKVxyXG4gICAgICAgICAgICAgICAgICBpdGVtVmFsID0gaXRlbVZhbC5zdWJzdHIocG9zKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVNpemUgPSAoVXRpbFN0ckJ5dGVNb2RlLmxlbkIoaXRlbVZhbCkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIGxlYWRpbmcgemVyb3MgKGlmIG5lZWRlZClcclxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA0IC0gdmFsdWVTaXplLmxlbmd0aDsgaisrKVxyXG4gICAgICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKCcwJyk7XHJcbiAgICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaGV4IGVuY29kaW5nXHJcbiAgICAgICAgICAgICAgICBpdGVtVmFsID0gIXRvQmFzZTY0XHJcbiAgICAgICAgICAgICAgICAgID8gU3RyVXRpbC5zdHJpbmdUb0hleGFEdW1wKGl0ZW1WYWwsIDQpXHJcbiAgICAgICAgICAgICAgICAgIDogQmFzZTY0LmVuY29kZShpdGVtVmFsLCB0cnVlLCBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRFbmNvZGluZygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBwb3MgPSBmbGRWYWxMZW47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0clN1Yjogc3RyaW5nID0gaXRlbVZhbC5zdWJzdHIocG9zLCAweDNGRkYpO1xyXG4gICAgICAgICAgICAgICAgLy8gKyAweDgwMDAgLi4uIHRvIGluZGljYXRlIG5vdCB0aGUgbGFzdCBzZWdtZW50XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVNpemUgPSAoKFV0aWxTdHJCeXRlTW9kZS5sZW5CKHN0clN1YikgKyAweDgwMDApLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQodmFsdWVTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBoZXggb3IgYmFzZTY0IGVuY29kaW5nXHJcbiAgICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKCF0b0Jhc2U2NFxyXG4gICAgICAgICAgICAgICAgICA/IFN0clV0aWwuc3RyaW5nVG9IZXhhRHVtcChzdHJTdWIsIDQpXHJcbiAgICAgICAgICAgICAgICAgIDogQmFzZTY0LmVuY29kZShzdHJTdWIsIHRydWUsIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldEVuY29kaW5nKCkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKFwiMDAwMFwiKTtcclxuICAgICAgICAgICAgICAgIHBvcyArPSAweDNGRkY7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IHdoaWxlIChwb3MgPCBmbGRWYWxMZW4pIDtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgaWYgKGZsZFZhbExlbiA8IHBvcyArIDB4N0ZGRilcclxuICAgICAgICAgIC8vIDB4ODAwMCAtMSA9IDB4N0ZGRlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZVNpemUgPSAoKGZsZFZhbExlbiAtIHBvcykudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICAvLyBhZGQgbGVhZGluZyB6ZXJvcyAoaWYgbmVlZGVkKVxyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNCAtIHZhbHVlU2l6ZS5sZW5ndGg7IGorKylcclxuICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKCcwJyk7XHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQodmFsdWVTaXplKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwb3MgPiAwKVxyXG4gICAgICAgICAgICAgIGl0ZW1WYWwgPSBpdGVtVmFsLnN1YnN0cihwb3MsIChmbGRWYWxMZW4pIC0gKHBvcykpO1xyXG5cclxuICAgICAgICAgICAgLy8gaGV4IGVuY29kaW5nXHJcbiAgICAgICAgICAgIGl0ZW1WYWwgPSAhdG9CYXNlNjRcclxuICAgICAgICAgICAgICA/IFN0clV0aWwuc3RyaW5nVG9IZXhhRHVtcChpdGVtVmFsLCA0KVxyXG4gICAgICAgICAgICAgIDogQmFzZTY0LmVuY29kZShpdGVtVmFsKTtcclxuXHJcbiAgICAgICAgICAgIHBvcyA9IGZsZFZhbExlbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB0byBpbmRpY2F0ZSB0aGUgZnVsbCBzZWdtZW50XHJcbiAgICAgICAgICAgIHZhbHVlU2l6ZSA9IFwiRkZGRlwiOyAvLyAoSW50ZWdlci50b0hleFN0cmluZyAoMHhGRkZGKSkudG9VcHBlckNhc2UoKVxyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKHZhbHVlU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBoZXggb3IgYmFzZTY0IGVuY29kaW5nXHJcbiAgICAgICAgICAgIGlmICghdG9CYXNlNjQpXHJcbiAgICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChTdHJVdGlsLnN0cmluZ1RvSGV4YUR1bXAoaXRlbVZhbC5zdWJzdHIocG9zLCAweDdGRkYpLCA0KSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB0bXBCdWYuQXBwZW5kKEJhc2U2NC5lbmNvZGUoaXRlbVZhbC5zdWJzdHIocG9zLCAweDdGRkYpKSk7XHJcblxyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKFwiMDAwMFwiKTtcclxuICAgICAgICAgICAgcG9zICs9IDB4N0ZGRjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChwb3MgPCBmbGRWYWxMZW4pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfSAvLyBlbmQgb2YgdGhlIHR5cGUgY2FzZSBibG9ja1xyXG4gICAgdG1wQnVmLkFwcGVuZChpdGVtVmFsKTtcclxuICAgIHJldHVybiB0bXBCdWYuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gRGVzZXJpYWxpemVzIGFuIGl0ZW0ncyAoZmllbGQvZ2xvYmFsIHBhcmFtLy4uLikgdmFsdWUgPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIml0ZW1WYWxcIj5pdGVtJ3MgdmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIml0ZW1BdHRyXCI+aXRlbSdzIGF0dHJpYnV0ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXRlbUxlblwiPml0ZW0ncyBsZW5ndGg8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInVzZUhleFwiPmluZGljYXRlcyB3aGV0aGVyIHRoZSBpdGVtVmFsIGlzIGluIEhleCBvciBCYXNlNjQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNlbGxBdHRyXCI+Y2VsbCdzIGF0dHJpYnV0ZSAtIHJlbGV2YW50IG9ubHkgaWYgJ2l0ZW1BdHRyJyBpcyB2ZWN0b3I8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhcnNlZExlblwiPm91dCBwYXJhbWV0ZXIuIFJldHVybnMgdGhlIGxlbmd0aCBvZiBpdGVtVmFsIHBhcnNlZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgZGVTZXJpYWxpemVJdGVtVmFsKGl0ZW1WYWw6IHN0cmluZywgaXRlbUF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGl0ZW1MZW46IG51bWJlciwgdXNlSGV4OiBib29sZWFuLCBjZWxsQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgcGFyc2VkTGVuOiBSZWZQYXJhbTxudW1iZXI+KTogc3RyaW5nIHtcclxuICAgIGxldCB2YWw6IHN0cmluZyA9IG51bGw7XHJcbiAgICBsZXQgaWR4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyLCBlbmRJZHg6IG51bWJlcjtcclxuICAgIGxldCBzdWZmaXhCdWY6IFN0cmluZ0J1aWxkZXIgPSBudWxsO1xyXG4gICAgbGV0IHRtcDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBpZiAoaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEFcclxuICAgICAgfHwgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERVxyXG4gICAgICB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CXHJcbiAgICAgIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SXHJcbiAgICAgIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIGZpcnN0IDQgY2hhcmFjdGVycyBhcmUgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIChoZXggbnVtYmVyKVxyXG4gICAgICBlbmRJZHggPSBpZHggKyA0O1xyXG4gICAgICB0bXAgPSBpdGVtVmFsLnN1YnN0cihpZHgsIChlbmRJZHgpIC0gKGlkeCkpO1xyXG4gICAgICBsZW4gPSBOTnVtYmVyLlBhcnNlKHRtcCwgTnVtYmVyU3R5bGVzLkhleE51bWJlcik7XHJcbiAgICAgIGlkeCA9IGVuZElkeDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pXHJcbiAgICAgIGxlbiA9IDE7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHNpZ25pZmljYW50TnVtU2l6ZTogbnVtYmVyID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U2lnbmlmaWNhbnROdW1TaXplKCk7XHJcbiAgICAgIGlmICh1c2VIZXgpXHJcbiAgICAgICAgbGVuID0gc2lnbmlmaWNhbnROdW1TaXplICogMjtcclxuICAgICAgZWxzZVxyXG4gICAgICAvLyBpZiB3b3JraW5nIGluIGJhc2U2NFxyXG4gICAgICAgIGxlbiA9IChNYXRoLmZsb29yKChzaWduaWZpY2FudE51bVNpemUgKyAyKSAvIDMpICogNCk7XHJcbiAgICB9XHJcbiAgICAvLyBPb3BzLCBkaWQgd2UgYnVtcGVkIGludG8gYSBzcGFubmVkIHJlY29yZCAoV2UgaWRlbnRpZnkgaXQgd2hlbiB0aGUgaGlnaC1tb3N0IGJpdCBpcyBvbik/XHJcbiAgICBpZiAoKGxlbiAmIDB4ODAwMCkgPiAwKSB7XHJcbiAgICAgIHN1ZmZpeEJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgIGxlbiA9IChsZW4gJiAweDdGRkYpO1xyXG5cclxuICAgICAgaWYgKGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1JcclxuICAgICAgICB8fCBpdGVtQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5ET1RORVQpXHJcbiAgICAgICAgaWYgKHVzZUhleClcclxuICAgICAgICAgIGxlbiAqPSAyO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGxlbiA9IChNYXRoLmZsb29yKChsZW4gKyAyKSAvIDMpICogNCk7XHJcblxyXG4gICAgICBwYXJzZWRMZW4udmFsdWUgPSB0aGlzLmdldFNwYW5uZWRGaWVsZChpdGVtVmFsLCBsZW4sIGlkeCwgaXRlbUF0dHIsIHN1ZmZpeEJ1ZiwgdXNlSGV4KTtcclxuICAgICAgdmFsID0gc3VmZml4QnVmLlRvU3RyaW5nKCk7XHJcbiAgICAgIGVuZElkeCA9IGlkeCArIHBhcnNlZExlbi52YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQlxyXG4gICAgICAgIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SXHJcbiAgICAgICAgfHwgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUXHJcbiAgICAgIClcclxuICAgICAgICBpZiAodXNlSGV4KVxyXG4gICAgICAgICAgbGVuICo9IDI7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgbGVuID0gKE1hdGguZmxvb3IoKGxlbiArIDIpIC8gMykgKiA0KTtcclxuXHJcbiAgICAgIGVuZElkeCA9IGlkeCArIGxlbjtcclxuICAgICAgaWYgKGVuZElkeCA+IGl0ZW1WYWwubGVuZ3RoKVxyXG4gICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFJlY29yZC5maWxsRmllbGRzRGF0YSgpIGRhdGEgc3RyaW5nIHRvbyBzaG9ydDpcXG5cIiArIGl0ZW1WYWwpO1xyXG5cclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiYgaXRlbUF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgdmFsID0gdGhpcy5nZXRTdHJpbmcoaXRlbVZhbC5zdWJzdHIoaWR4LCAoZW5kSWR4KSAtIChpZHgpKSwgaXRlbUF0dHIsIHVzZUhleCwgKGNlbGxBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB2YWwgPSB0aGlzLmdldFN0cmluZyhpdGVtVmFsLnN1YnN0cihpZHgsIChlbmRJZHgpIC0gKGlkeCkpLCBpdGVtQXR0ciwgdXNlSGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBpZHggPSBlbmRJZHg7XHJcblxyXG4gICAgaWYgKGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpIHtcclxuICAgICAgbGVuID0gaXRlbUxlbjtcclxuICAgICAgdmFsID0gU3RyVXRpbC5wYWRTdHIodmFsLCBsZW4pO1xyXG5cclxuICAgICAgaWYgKGl0ZW1BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBICYmIFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpXHJcbiAgICAgICAgdmFsID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHZhbCwgbGVuKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZWRMZW4udmFsdWUgPSBlbmRJZHg7XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0U3RyaW5nKHN0cjogc3RyaW5nLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBnZXRTdHJpbmcoc3RyOiBzdHJpbmcsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHVzZUhleDogYm9vbGVhbik6IHN0cmluZztcclxuICBzdGF0aWMgZ2V0U3RyaW5nKHN0cjogc3RyaW5nLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCB1c2VIZXg6IGJvb2xlYW4sIHVzZUVudkNoYXJzZXQ6IGJvb2xlYW4pOiBzdHJpbmc7XHJcbiAgc3RhdGljIGdldFN0cmluZyhzdHI6IHN0cmluZywgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdXNlSGV4PzogYm9vbGVhbiwgdXNlRW52Q2hhcnNldD86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpXHJcbiAgICAgIHJldHVybiBSZWNvcmRVdGlscy5nZXRTdHJpbmdfMChzdHIsIHR5cGUsIHVzZUhleCk7XHJcblxyXG4gICAgaWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMilcclxuICAgICAgcmV0dXJuIFJlY29yZFV0aWxzLmdldFN0cmluZ18yKHN0ciwgdHlwZSk7XHJcblxyXG4gICAgcmV0dXJuIFJlY29yZFV0aWxzLmdldFN0cmluZ18xKHN0ciwgdHlwZSwgdXNlSGV4LCB1c2VFbnZDaGFyc2V0KTtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gcmlnaHQgc3RyaW5nIGluIGNvbmZpZGVuY2Ugd2l0aCB0aGUgdHlwZTwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRTdHJpbmdfMChzdHI6IHN0cmluZywgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdXNlSGV4OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBSZWNvcmRVdGlscy5nZXRTdHJpbmcoc3RyLCB0eXBlLCB1c2VIZXgsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gcmlnaHQgc3RyaW5nIGluIGNvbmZpZGVuY2Ugd2l0aCB0aGUgdHlwZTwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRTdHJpbmdfMShzdHI6IHN0cmluZywgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdXNlSGV4OiBib29sZWFuLCB1c2VFbnZDaGFyc2V0OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmICh1c2VIZXgpIHtcclxuICAgICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SXHJcbiAgICAgICAgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5ET1RORVQpXHJcbiAgICAgICAgcmVzdWx0ID0gUmVjb3JkVXRpbHMuYnl0ZVN0cmVhbVRvU3RyaW5nKHN0cik7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SXHJcbiAgICAgICAgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5ET1RORVQpXHJcbiAgICAgICAgcmVzdWx0ID0gQmFzZTY0LmRlY29kZShzdHIsIHVzZUVudkNoYXJzZXQgPyBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRFbmNvZGluZygpIDogbnVsbCk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXN1bHQgPSBCYXNlNjQuZGVjb2RlVG9IZXgoc3RyKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0U3Bhbm5lZEZpZWxkKGZsZHNWYWw6IHN0cmluZywgZmlyc3RTZWdMZW46IG51bWJlciwgaWR4OiBudW1iZXIsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHJlc3VsdDogU3RyaW5nQnVpbGRlciwgdXNlSGV4OiBib29sZWFuKTogbnVtYmVyO1xyXG4gIHN0YXRpYyBnZXRTcGFubmVkRmllbGQoZmxkc1ZhbDogVWludDhBcnJheSwgZmlyc3RTZWdMZW46IG51bWJlciwgaWR4OiBudW1iZXIsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHJlc3VsdDogU3RyaW5nQnVpbGRlciwgdXNlSGV4OiBib29sZWFuLCBub09mUGFja2V0czogbnVtYmVyKTogbnVtYmVyO1xyXG4gIHN0YXRpYyBnZXRTcGFubmVkRmllbGQoZmxkc1ZhbDogYW55LCBmaXJzdFNlZ0xlbjogbnVtYmVyLCBpZHg6IG51bWJlciwgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgcmVzdWx0OiBTdHJpbmdCdWlsZGVyLCB1c2VIZXg6IGJvb2xlYW4sIG5vT2ZQYWNrZXRzPzogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA2KVxyXG4gICAgICByZXR1cm4gUmVjb3JkVXRpbHMuZ2V0U3Bhbm5lZEZpZWxkXzAoZmxkc1ZhbCwgZmlyc3RTZWdMZW4sIGlkeCwgdHlwZSwgcmVzdWx0LCB1c2VIZXgpO1xyXG5cclxuICAgIHJldHVybiBSZWNvcmRVdGlscy5nZXRTcGFubmVkRmllbGRfMShmbGRzVmFsLCBmaXJzdFNlZ0xlbiwgaWR4LCB0eXBlLCByZXN1bHQsIHVzZUhleCwgbm9PZlBhY2tldHMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0ZSBYTUwgLT4gZmllbGQgdmFsdWUgZm9yIGEgc3Bhbm5lZCBBTFBIQSBmaWVsZCwgYW5kIHJldHVybiB0aGUgYWN0dWFsXHJcbiAgLy8vICAgZmllbGQncyBsZW5ndGguIEEgc3Bhbm5lZCBmaWVsZCBtYXkgYmUgYWNjZXB0ZWQgZnJvbSB0aGUgc2VydmVyIHdoZW4gYW5cclxuICAvLy8gICBBTFBIQSBpbmNsdWRlcyBzcGVjaWFsIGNoYXJzIHN1Y2ggYXMgTlVMTCB3aGljaCBjYW5ub3QgYmUgZXNjYXBlZCB1c2luZyBhICdcXCcgKGxpa2UsXHJcbiAgLy8vICAgZm9yIGV4YW1wbGUsICdcXFwiJykuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZsZHNWYWxcIj5zdHJpbmcgZm9yIHBhcnNpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmlyc3RTZWdMZW5cIj5sZW5ndGggKGluIGNoYXJzKSBvZiBmaXJzdCBzZWdtZW50LjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj5pbmRleCBpbiBzdHJpbmcsIGZyb20gd2hpY2ggdGhlIGZpcnN0IHNlZ21lbnRzIGRhdGEgc3RhcnRzLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+b2YgdmFyaWFibGUgaXMgbG9va2luZyBmb3I8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzdWx0XCI+dGhlIHJlc3VsdCBzdHJpbmcsIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgcGFyc2VkIGZpZWxkIGNvbnRlbnQuPC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRTcGFubmVkRmllbGRfMChmbGRzVmFsOiBzdHJpbmcsIGZpcnN0U2VnTGVuOiBudW1iZXIsIGlkeDogbnVtYmVyLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCByZXN1bHQ6IFN0cmluZ0J1aWxkZXIsIHVzZUhleDogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgZW5kSWR4OiBudW1iZXIgPSBpZHggKyBmaXJzdFNlZ0xlbjtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBiZWdpbjogbnVtYmVyID0gaWR4O1xyXG4gICAgbGV0IGFzY2lpQ29kZTogc3RyaW5nO1xyXG4gICAgbGV0IHRtcDogc3RyaW5nO1xyXG4gICAgbGV0IHN1ZmZpeEJ1ZjogU3RyaW5nQnVpbGRlciA9IG51bGw7XHJcbiAgICBsZXQgcGFyc2VkTGVuOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKGVuZElkeCA+IGZsZHNWYWwubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFJlY29yZC5nZXRTcGFubmVkRmllbGQoKSBkYXRhIHN0cmluZyB0b28gc2hvcnQ6XFxuXCIgKyBmbGRzVmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhcHBlbmQgZmlyc3Qgc2VnbWVudFxyXG4gICAgcmVzdWx0LlJlbW92ZSgwLCByZXN1bHQuTGVuZ3RoKTtcclxuICAgIHJlc3VsdC5BcHBlbmQoUmVjb3JkVXRpbHMuZ2V0U3RyaW5nKGZsZHNWYWwuc3Vic3RyKGlkeCwgZW5kSWR4IC0gaWR4KSwgdHlwZSwgdXNlSGV4KSk7XHJcblxyXG4gICAgaWR4ID0gaWR4ICsgZmlyc3RTZWdMZW47XHJcblxyXG4gICAgLy8gbmV4dCA0IGNoYXJhY3RlcnMgYXJlIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAoaGV4IG51bWJlcikgb2Ygc3BlY2lhbCBieXRlcy5cclxuICAgIGVuZElkeCA9IGlkeCArIDQ7XHJcbiAgICB0bXAgPSBmbGRzVmFsLnN1YnN0cihpZHgsIGVuZElkeCAtIGlkeCk7XHJcbiAgICBsZW4gPSBOTnVtYmVyLlBhcnNlKHRtcCwgTnVtYmVyU3R5bGVzLkhleE51bWJlcik7XHJcbiAgICBpZHggPSBlbmRJZHg7XHJcblxyXG4gICAgLy8gaWYgd29ya2luZyBpbiBoZXhcclxuICAgIGlmICh1c2VIZXgpXHJcbiAgICAgIGVuZElkeCA9IGlkeCArIGxlbiAqIDI7XHJcbiAgICBlbHNlXHJcbiAgICAgIGVuZElkeCA9IGlkeCArIE1hdGguZmxvb3IoKGxlbiArIDIpIC8gMyApICogNDtcclxuXHJcbiAgICBpZiAoZW5kSWR4ID4gZmxkc1ZhbC5sZW5ndGgpXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFJlY29yZC5nZXRTcGFubmVkRmllbGQoKSBkYXRhIHN0cmluZyB0b28gc2hvcnQ6XFxuXCIgKyBmbGRzVmFsKTtcclxuXHJcbiAgICAvLyBhcHBlbmQgc3BlY2lhbCBjaGFycywgb25lIGJ5IG9uZVxyXG4gICAgd2hpbGUgKGlkeCA8IGVuZElkeCkge1xyXG4gICAgICB0bXAgPSBmbGRzVmFsLnN1YnN0cihpZHgsIDIpO1xyXG4gICAgICBhc2NpaUNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKE5OdW1iZXIuUGFyc2UodG1wLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKSk7XHJcbiAgICAgIHJlc3VsdC5BcHBlbmQoYXNjaWlDb2RlKTtcclxuICAgICAgaWR4ID0gaWR4ICsgMjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBuZXh0IDQgY2hhcnMgYXJlIHRoZSBsZW5ndGggb2YgbmV4dCBzZWdtZW50XHJcbiAgICBlbmRJZHggPSBpZHggKyA0O1xyXG4gICAgdG1wID0gZmxkc1ZhbC5zdWJzdHIoaWR4LCBlbmRJZHggLSBpZHgpO1xyXG4gICAgbGVuID0gTk51bWJlci5QYXJzZSh0bXAsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpO1xyXG4gICAgaWR4ID0gZW5kSWR4O1xyXG5cclxuICAgIGlmICgobGVuICYgMHg4MDAwKSA+IDApIHtcclxuICAgICAgLy8gT29wcywgbmV4dCBzZWdtZW50IG1heSBhbHNvIGJlIHNwYW5uZWRcclxuICAgICAgc3VmZml4QnVmID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgbGVuID0gKGxlbiAmIDB4N0ZGRik7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgaWYgKHVzZUhleClcclxuICAgICAgICAgIGxlbiA9IGxlbiAqIDI7XHJcbiAgICAgICAgLy8gd29ya2luZyBpbiBiYXNlNjRcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBsZW4gPSBNYXRoLmZsb29yKChsZW4gKyAyKSAvIDMpICogNDtcclxuXHJcbiAgICAgIHBhcnNlZExlbiA9IFJlY29yZFV0aWxzLmdldFNwYW5uZWRGaWVsZChmbGRzVmFsLCBsZW4sIGlkeCwgdHlwZSwgc3VmZml4QnVmLCB1c2VIZXgpO1xyXG4gICAgICAvLyBhZnRlciB1c2luZyByZWN1cnNpdmUgZnVuY3Rpb24gdGVoIHN1ZmZpeEJ1ZiBpcyBpbiB0aGUgcmlnaHQgdHJhbnNmb3JtZWQgZm9ybVxyXG4gICAgICByZXN1bHQuQXBwZW5kKHN1ZmZpeEJ1Zi5Ub1N0cmluZygpKTtcclxuXHJcbiAgICAgIGlkeCA9IGlkeCArIHBhcnNlZExlbjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgaWYgKHVzZUhleClcclxuICAgICAgICAgIGxlbiA9IGxlbiAqIDI7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgbGVuID0gTWF0aC5mbG9vcigobGVuICsgMikgLyAzKSAqIDQ7XHJcblxyXG4gICAgICAvLyBuZXh0IHNlZ21lbnQgaXNuJ3Qgc3Bhbm5lZC4gSXQgbXVzdCBiZSB0aGUgbGFzdCBvbmUuXHJcbiAgICAgIGVuZElkeCA9IGlkeCArIGxlbjtcclxuICAgICAgaWYgKGVuZElkeCA+IGZsZHNWYWwubGVuZ3RoKVxyXG4gICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFJlY29yZC5maWxsRmllbGRzRGF0YSgpIGRhdGEgc3RyaW5nIHRvbyBzaG9ydDpcXG5cIiArIGZsZHNWYWwpO1xyXG5cclxuICAgICAgcmVzdWx0LkFwcGVuZChSZWNvcmRVdGlscy5nZXRTdHJpbmcoZmxkc1ZhbC5zdWJzdHIoaWR4LCBlbmRJZHggLSBpZHgpLCB0eXBlLCB1c2VIZXgpKTtcclxuICAgICAgaWR4ID0gZW5kSWR4O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpZHggLSBiZWdpbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gVHJhbnNsYXRlIHZhbHVlIG9mIHRoZSBzcGFubmVkIGZpZWxkIHRvIGFjdHVhbCB2YWx1ZS4gRmllbGQgdmFsdWUgd2lsbCBiZSBpbiB0aGUgZm9ybWF0IG9mIGxlbmd0aCBhbmQgZGF0YVxyXG4gIC8vLyBbIChMZW5ndGggfCBkYXRhKSAoKExlbmd0aCB8IGRhdGEpKS4uLi4uXVxyXG4gIC8vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBsZW5ndGggYW5kIGRhdGEgb2YgZWFjaCBwYWNrZXQgYW5kIHJldHVybiBhY3R1YWwgdmFsdWUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmbGRzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmaXJzdFNlZ0xlblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaWR4XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0eXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXN1bHRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInVzZUhleFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibm9PZlBhY2tldHNcIj4gVG90YWwgbnVtYmVyIG9mIHBhY2tldHMgc2VudCBmcm9tIHRoZSBzZXJ2ZXI8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3Bhbm5lZEZpZWxkXzEoZmxkc1ZhbDogVWludDhBcnJheSwgZmlyc3RTZWdMZW46IG51bWJlciwgaWR4OiBudW1iZXIsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHJlc3VsdDogU3RyaW5nQnVpbGRlciwgdXNlSGV4OiBib29sZWFuLCBub09mUGFja2V0czogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBlbmRJZHg6IG51bWJlciA9IGlkeCArIGZpcnN0U2VnTGVuO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IGJlZ2luOiBudW1iZXIgPSBpZHg7XHJcbiAgICBsZXQgdG1wOiBzdHJpbmc7XHJcbiAgICBsZXQgc3VmZml4QnVmOiBTdHJpbmdCdWlsZGVyID0gbnVsbDtcclxuICAgIGxldCBwYXJzZWRMZW46IG51bWJlcjtcclxuICAgIGxldCB0bXBFbmM6IEVuY29kaW5nO1xyXG4gICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpXHJcbiAgICAgIHRtcEVuYyA9IElTT184ODU5XzFfRW5jb2RpbmcuSVNPXzg4NTlfMTtcclxuICAgIGVsc2VcclxuICAgICAgdG1wRW5jID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKTtcclxuXHJcbiAgICBpZiAoZW5kSWR4ID4gZmxkc1ZhbC5sZW5ndGgpXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFJlY29yZC5nZXRTcGFubmVkRmllbGQoKSBkYXRhIHN0cmluZyB0b28gc2hvcnQ6XFxuXCIgKyBmbGRzVmFsKTtcclxuXHJcbiAgICAvLyBhcHBlbmQgZmlyc3Qgc2VnbWVudFxyXG4gICAgcmVzdWx0LlJlbW92ZSgwLCByZXN1bHQuTGVuZ3RoKTtcclxuICAgIHJlc3VsdC5BcHBlbmQodG1wRW5jLkdldFN0cmluZyhmbGRzVmFsLCBpZHgsIGZpcnN0U2VnTGVuKSk7XHJcbiAgICBub09mUGFja2V0cyA9IG5vT2ZQYWNrZXRzIC0gMTtcclxuXHJcbiAgICBpZiAobm9PZlBhY2tldHMgPD0gMClcclxuICAgICAgcmV0dXJuIDA7XHJcblxyXG4gICAgaWR4ID0gaWR4ICsgZmlyc3RTZWdMZW47XHJcblxyXG4gICAgLy8gbmV4dCA0IGNoYXJhY3RlcnMgYXJlIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAoaGV4IG51bWJlcikgb2Ygc3BlY2lhbCBieXRlcy5cclxuICAgIGVuZElkeCA9IGlkeCArIDQ7XHJcbiAgICB0bXAgPSB0bXBFbmMuR2V0U3RyaW5nKGZsZHNWYWwsIGlkeCwgNCk7XHJcbiAgICBsZW4gPSBOTnVtYmVyLlBhcnNlKHRtcCwgTnVtYmVyU3R5bGVzLkhleE51bWJlcik7XHJcbiAgICBpZHggPSBlbmRJZHg7XHJcblxyXG4gICAgaWYgKGVuZElkeCA+IGZsZHNWYWwubGVuZ3RoKVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZ2V0U3Bhbm5lZEZpZWxkKCkgZGF0YSBzdHJpbmcgdG9vIHNob3J0OlxcblwiICsgZmxkc1ZhbCk7XHJcblxyXG4gICAgLy8gbmV4dCA0IGNoYXJzIGFyZSB0aGUgbGVuZ3RoIG9mIG5leHQgc2VnbWVudFxyXG4gICAgZW5kSWR4ID0gaWR4ICsgNDtcclxuICAgIHRtcCA9IHRtcEVuYy5HZXRTdHJpbmcoZmxkc1ZhbCwgaWR4LCA0KTtcclxuICAgIGxlbiA9IE5OdW1iZXIuUGFyc2UodG1wLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKTtcclxuICAgIGlkeCA9IGVuZElkeDtcclxuXHJcbiAgICBpZiAoKGxlbiAmIDB4ODAwMCkgPiAwKSB7XHJcbiAgICAgIC8vIE9vcHMsIG5leHQgc2VnbWVudCBtYXkgYWxzbyBiZSBzcGFubmVkXHJcbiAgICAgIHN1ZmZpeEJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcblxyXG4gICAgICBwYXJzZWRMZW4gPSBSZWNvcmRVdGlscy5nZXRTcGFubmVkRmllbGQoZmxkc1ZhbCwgbGVuLCBpZHgsIHR5cGUsIHN1ZmZpeEJ1ZiwgdXNlSGV4LCBub09mUGFja2V0cyk7XHJcbiAgICAgIC8vIGFmdGVyIHVzaW5nIHJlY3Vyc2l2ZSBmdW5jdGlvbiB0ZWggc3VmZml4QnVmIGlzIGluIHRoZSByaWdodCB0cmFuc2Zvcm1lZCBmb3JtXHJcbiAgICAgIHJlc3VsdC5BcHBlbmQoc3VmZml4QnVmLlRvU3RyaW5nKCkpO1xyXG4gICAgICBpZHggPSBpZHggKyBwYXJzZWRMZW47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gbmV4dCBzZWdtZW50IGlzbid0IHNwYW5uZWQuIEl0IG11c3QgYmUgdGhlIGxhc3Qgb25lLlxyXG4gICAgICBlbmRJZHggPSBpZHggKyBsZW47XHJcbiAgICAgIGlmIChlbmRJZHggPiBmbGRzVmFsLmxlbmd0aClcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBSZWNvcmQuZmlsbEZpZWxkc0RhdGEoKSBkYXRhIHN0cmluZyB0b28gc2hvcnQ6XFxuXCIgKyBmbGRzVmFsKTtcclxuXHJcbiAgICAgIHJlc3VsdC5BcHBlbmQodG1wRW5jLkdldFN0cmluZyhmbGRzVmFsLCBpZHgsIGxlbikpO1xyXG4gICAgICBpZHggPSBlbmRJZHg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlkeCAtIGJlZ2luO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNlcmlhbGl6ZSBhbiBpdGVtIChmaWVsZC9nbG9iYWwgcGFyYW0vLi4uKSB0byBhbiBYTUwgZm9ybWF0IChhcHBsaWNhYmxlIHRvIGJlIHBhc3NlZCB0byB0aGUgc2VydmVyKS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+aXRlbSdzIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIml0ZW1BdHRyXCI+aXRlbSdzIGF0dHJpYnV0ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjZWxsQXR0clwiPmNlbGwncyBhdHRyaWJ1dGUgLSByZWxldmFudCBvbmx5IGlmICdpdGVtQXR0cicgaXMgdmVjdG9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIlRvQmFzZTY0XCI+PmRlY2lkZSBCYXNlNjQgZW5jb2RpbmcgaXMgdG8gYmUgZG9uZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnNlcmlhbGl6ZWQgWE1MIGZvcm1hdDwvcmV0dXJucz5cclxuICBzdGF0aWMgaXRlbVZhbFRvWE1MKGl0ZW1WYWw6IHN0cmluZywgaXRlbUF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGNlbGxBdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBUb0Jhc2U2NDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgdG1wQnVmOiBzdHJpbmcgPSBSZWNvcmRVdGlscy5zZXJpYWxpemVJdGVtVmFsKGl0ZW1WYWwsIGl0ZW1BdHRyLCBjZWxsQXR0ciwgVG9CYXNlNjQpO1xyXG4gICAgcmV0dXJuIFhtbFBhcnNlci5lc2NhcGUodG1wQnVmKS50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiBnZXQgdGhlIGFjdHVhbCBzdHJpbmcgYWNjb3JkaW5nIHRvICd0eXBlJzwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0U3RyaW5nXzIoc3RyOiBzdHJpbmcsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IHVzZUhleDogYm9vbGVhbiA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERlYnVnTGV2ZWwoKSA+IDEgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQVxyXG4gICAgICB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHwgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUxvZ2ljYWwodHlwZSk7XHJcblxyXG4gICAgLy8gZmlyc3QgNCBjaGFyYWN0ZXJzIGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKGhleCBudW1iZXIpXHJcbiAgICBsZXQgdG1wOiBzdHJpbmc7XHJcbiAgICBpZiAodHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHxcclxuICAgICAgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgdG1wID0gc3RyLnN1YnN0cig0KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdG1wID0gc3RyO1xyXG5cclxuICAgIHJldHVybiBSZWNvcmRVdGlscy5nZXRTdHJpbmcodG1wLCB0eXBlLCB1c2VIZXgpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19