@magic-xpa/gui 4.1100.0-dev4110.252 → 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
@@ -609,4 +609,4 @@ export class CellElement {
609
609
  this.blobFieldPrefix = ctrlData;
610
610
  }
611
611
  }
612
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9kYXRhL1ZlY3RvclR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixRQUFRLEVBQ1IsbUJBQW1CLEVBQ25CLElBQUksRUFDSixPQUFPLEVBQ1AsT0FBTyxFQUNQLGFBQWEsRUFDZCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBTWxELE1BQU0sT0FBTyxVQUFXLFNBQVEsY0FBYztJQUU1QyxNQUFNLENBQUMsT0FBTyxHQUFXLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMscUJBQXFCLEdBQVcsQ0FBQyxDQUFDO0lBR3pDLE1BQU0sQ0FBQyxxQkFBcUIsR0FBVyxFQUFFLENBQUM7SUFFbEMsTUFBTSxHQUFzQixJQUFJLENBQUM7SUFDakMsU0FBUyxHQUFhLElBQUksQ0FBQztJQUMzQixVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLGdCQUFnQixHQUFXLElBQUksQ0FBQztJQUNoQyxTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3RCLFVBQVUsR0FBcUIsSUFBSSxDQUFD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QUFNLEdBQVksS0FBSyxDQUFDO0lBTXhCLFlBQVksR0FBVyxFQUFFLE9BQWdCLEVBQUUsUUFBaUI7UUFDMUQsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFHTyxhQUFhLENBQUMsR0FBVyxFQUFFLE9BQWdCO1FBQ2pELElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFHTyxhQUFhLENBQUMsR0FBVyxFQUFFLE9BQWdCLEVBQUUsUUFBZ0I7UUFDbkUsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBcHBsaWNhdGlvbkV4Y2VwdGlvbixcclxuICBFbmNvZGluZyxcclxuICBJU09fODg1OV8xX0VuY29kaW5nLFxyXG4gIExpc3QsXHJcbiAgTk51bWJlcixcclxuICBOU3RyaW5nLFxyXG4gIFN0cmluZ0J1aWxkZXJcclxufSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IEZpZWxkRGVmIH0gZnJvbSAnLi9GaWVsZERlZic7XHJcbmltcG9ydCB7IEJsb2JUeXBlIH0gZnJvbSAnLi9CbG9iVHlwZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VBdHRyaWJ1dGUsIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjaywgU3RyVXRpbCwgVXRpbFN0ckJ5dGVNb2RlIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IERpc3BsYXlDb252ZXJ0b3IgfSBmcm9tICcuLi9ndWkvRGlzcGxheUNvbnZlcnRvcic7XHJcbmltcG9ydCB7IFJlY29yZFV0aWxzIH0gZnJvbSAnLi9SZWNvcmRVdGlscyc7XHJcbmltcG9ydCB7IEd1aUNvbnN0YW50cyB9IGZyb20gJy4uLy4uL0d1aUNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEd1aUVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vR3VpRW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgeyBWZWN0b3JUeXBlQmFzZSB9IGZyb20gJy4vVmVjdG9yVHlwZUJhc2UnO1xyXG5cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgcmVwcmVzZW50cyB0aGUgbWFnaWMgdmVjdG9yIHR5cGVcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIFZlY3RvclR5cGUgZXh0ZW5kcyBWZWN0b3JUeXBlQmFzZSB7XHJcblxyXG4gIHN0YXRpYyBWRVJTSU9OOiBudW1iZXIgPSA1OyAvLyB2ZXJzaW9uIG5vIDUgaW5jbHVkZXMgdGhlIGNvbnRlbnQgZmllbGRcclxuICBzdGF0aWMgRU1QVFlfQkxPQl9QUkVGSVhfTEVOOiBudW1iZXIgPSA3O1xyXG5cclxuICAvLyBGT1IgRVhQTEFOQVRJT05TIFJFR0FSRElORyBUSElTIE5VTUJFUiBQTEVBUyBTRUUgRE9DVU1FTlRBVElPTiBJTlNJREUgaW5pdCBNRVRIT0RcclxuICBzdGF0aWMgQkxPQl9UWVBFX1NUUlVDVF9TSVpFOiBudW1iZXIgPSAyODtcclxuXHJcbiAgcHJpdmF0ZSBfY2VsbHM6IExpc3Q8Q2VsbEVsZW1lbnQ+ID0gbnVsbDsgLy8gYSB2ZWN0b3IgY29udGFpbmluZyBDZWxsRWxlbWVudHNcclxuICBwcml2YXRlIF9lbmNvZGluZzogRW5jb2RpbmcgPSBudWxsOyAvLyB0byBiZSB1c2VkIG9ubHkgd2l0aCBhbHBoYSBvciBtZW1vXHJcbiAgcHJpdmF0ZSBfYWxsb3dOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY2VsbENvbnRlbnRUeXBlOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2NlbGxTaXplOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NlbGxzQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IG51bGw7IC8vIGFsbCBjZWxscyBpbiB0aGUgdmVjdG9yIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZVxyXG4gIHByaXZhdGUgX2NlbGxzRGVmYXVsdFZhbDogc3RyaW5nID0gbnVsbDsgLy8gYWxsIGNlbGxzIGluIHRoZSBtYWdpYyB2ZWN0b3IgaGFzIHRoZSBzYW1lIGRlZmF1bHQgdmFsdWVcclxuICBwcml2YXRlIF9jZWxsc0lzTnVsbERlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gbnVsbCBkZWZhdWx0IGRlZmluaXRpb24gZm9yIGFsbCBjZWxscyBpbiB0aGUgbWFnaWMgdmVjdG9yXHJcblxyXG4gIC8vIGRhdGEgYnVmZmVycyB0aGF0IHdlIGNoYW5nZSBEeW5hbWljYWxseSB0byBmYWNpbGl0YXRlXHJcbiAgLy8gdGhlIGNyZWF0aW9uIG9mIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICBwcml2YXRlIF9kYXRhQnVmOiBTdHJpbmdCdWlsZGVyID0gbnVsbDtcclxuICBwcml2YXRlIF9pbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBtYXJrcyB3aGV0aGVyIHRoZSB2ZWN0b3Igd2FzIGluaXRpYWxpemVkIGlmIGl0IHdhcyBub3QgdGhhdCBpdCBpcyBhbiBpbnZhbGlkIHZlY3RvclxyXG4gIHByaXZhdGUgX251bGxCdWY6IFN0cmluZ0J1aWxkZXIgPSBudWxsO1xyXG4gIHByaXZhdGUgX29yaWdpbmFsZmxhdERhdGE6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNlbGxzVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgY29udGVudFR5cGU6IHN0cmluZywgZGVmdWFsdDogc3RyaW5nLCBpc0RlZk51bGw6IGJvb2xlYW4sIG51bGxBbG93ZWQ6IGJvb2xlYW4sIGxlbmd0aDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihibG9iU3RyaW5nOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKGZsZDogRmllbGREZWYpO1xyXG4gIGNvbnN0cnVjdG9yKGNlbGxzVHlwZU9yQmxvYlN0cmluZ09yRmxkOiBhbnksIGNvbnRlbnRUeXBlPzogc3RyaW5nLCBkZWZ1YWx0Pzogc3RyaW5nLCBpc0RlZk51bGw/OiBib29sZWFuLCBudWxsQWxvd2VkPzogYm9vbGVhbiwgbGVuZ3RoPzogbnVtYmVyKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDYpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMChjZWxsc1R5cGVPckJsb2JTdHJpbmdPckZsZCwgY29udGVudFR5cGUsIGRlZnVhbHQsIGlzRGVmTnVsbCwgbnVsbEFsb3dlZCwgbGVuZ3RoKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIChjZWxsc1R5cGVPckJsb2JTdHJpbmdPckZsZCA9PT0gbnVsbCB8fCBjZWxsc1R5cGVPckJsb2JTdHJpbmdPckZsZC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKGNlbGxzVHlwZU9yQmxvYlN0cmluZ09yRmxkKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMihjZWxsc1R5cGVPckJsb2JTdHJpbmdPckZsZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29uc3RydWN0IHRoZSBvYmplY3QgYnV0IGRvZXMgbm90IGZpbGwgaXQgd2l0aCBkYXRhIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIFZlY3RvciB3ZSBtdXN0IGludm9rZSBvblxyXG4gIC8vLyAgIGl0IHRoZSBpdHMgaW5pdCBtZXRob2QgYSBWZWN0b3JUeXBlIHdoaWNoIHdhcyBub3QgaW5pdGlhbGl6ZWQgaXMgYW4gdW52YWxpZCB2ZWN0b3IuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoY2VsbHNUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBjb250ZW50VHlwZTogc3RyaW5nLCBkZWZ1YWx0OiBzdHJpbmcsIGlzRGVmTnVsbDogYm9vbGVhbiwgbnVsbEFsb3dlZDogYm9vbGVhbiwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NlbGxzID0gbmV3IExpc3Q8Q2VsbEVsZW1lbnQ+KCk7XHJcbiAgICB0aGlzLl9jZWxsc0F0dHIgPSBjZWxsc1R5cGU7XHJcbiAgICB0aGlzLl9jZWxsQ29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcclxuICAgIHRoaXMuX2NlbGxzRGVmYXVsdFZhbCA9IGRlZnVhbHQ7XHJcbiAgICB0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQgPSBpc0RlZk51bGw7XHJcbiAgICB0aGlzLl9jZWxsU2l6ZSA9ICgodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpID8gKGxlbmd0aCAqIDIpIDogbGVuZ3RoKTtcclxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2FsbG93TnVsbCA9IG51bGxBbG93ZWQ7XHJcbiAgICB0aGlzLl9udWxsQnVmID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgIHRoaXMuX2RhdGFCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxmbGF0RGF0YSA9IHRoaXMudG9TdHJpbmcoKTtcclxuICAgIHRoaXMuX2VuY29kaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb25zdHJ1Y3QgdGhlIG9iamVjdCBidXQgZG9lcyBub3QgZmlsbCBpdCB3aXRoIGRhdGEgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgVmVjdG9yIHdlIG11c3QgaW52b2tlIG9uXHJcbiAgLy8vICAgaXQgdGhlIGl0cyBpbml0IG1ldGhvZCBhIFZlY3RvclR5cGUgd2hpY2ggd2FzIG5vdCBpbml0aWFsaXplZCBpcyBhbiBpbnZhbGlkIHZlY3Rvci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYmxvYlN0cmluZ1wiPmEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBibG9iJ3MgZGF0YSBieXRlczwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKGJsb2JTdHJpbmc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2VsbHMgPSBuZXcgTGlzdDxDZWxsRWxlbWVudD4oKTtcclxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9vcmlnaW5hbGZsYXREYXRhID0gYmxvYlN0cmluZztcclxuICAgIHRoaXMuX2VuY29kaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb25zdHJ1Y3QgdGhlIG9iamVjdCB3aXRoIGEgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNoYXJzXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzIoZmxkOiBGaWVsZERlZik6IHZvaWQge1xyXG4gICAgdGhpcy5fY2VsbHMgPSBuZXcgTGlzdDxDZWxsRWxlbWVudD4oKTtcclxuICAgIHRoaXMuX2NlbGxzQXR0ciA9IGZsZC5nZXRDZWxsc1R5cGUoKTtcclxuICAgIHRoaXMuX2NlbGxDb250ZW50VHlwZSA9IGZsZC5nZXRWZWNDZWxsc0NvbnRlbnRUeXBlKCk7XHJcbiAgICB0aGlzLl9jZWxsc0RlZmF1bHRWYWwgPSBmbGQuZ2V0Q2VsbERlZnVhbHRWYWx1ZSgpO1xyXG4gICAgdGhpcy5fY2VsbHNJc051bGxEZWZhdWx0ID0gZmxkLmlzTnVsbERlZmF1bHQoKTtcclxuICAgIHRoaXMuX2NlbGxTaXplID0gPG51bWJlcj4oKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSA/IChmbGQuZ2V0VmVjQ2VsbHNTaXplKCkgKiAyKSA6IGZsZC5nZXRWZWNDZWxsc1NpemUoKSk7XHJcbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB0aGlzLl9hbGxvd051bGwgPSBmbGQuTnVsbEFsbG93ZWQ7XHJcbiAgICB0aGlzLl9udWxsQnVmID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgIHRoaXMuX2RhdGFCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxmbGF0RGF0YSA9IHRoaXMudG9TdHJpbmcoKTtcclxuICAgIHRoaXMuX2VuY29kaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZHMgYSBWZWN0b3JUeXBlIGZyb20gaXRzIGZsYXR0ZW5lZCBibG9iIHJlcHJlc2VudGF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJsb2JTdHJpbmdcIj5hIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmxvYidzIGRhdGEgYnl0ZXM8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gZmFsc2UgaXMgdGhlIGdpdmVuIGJsb2IgaXMgbm90IGEgdmVjdG9yICh0aGUgZmxhdHRlbiBmb3JtYXQgaXMgd3JvbmcpPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcclxuICAgIGxldCB0b2tlbnM6IHN0cmluZ1tdID0gbnVsbDtcclxuICAgIGxldCB0b2tlbklkeDogbnVtYmVyID0gMDtcclxuICAgIGxldCBjdXJyZW50VG9rZW46IHN0cmluZyA9IG51bGw7IC8vIHRoZSBjdXJyZW50IHRva2VuIHdlIGFyZSBwYXJpbmdcclxuICAgIGxldCBpc0ZsYXREYXRhVHJhbnNsYXRlZDogYm9vbGVhbiA9IHRoaXMuaXNVbmljb2RlKHRoaXMuX29yaWdpbmFsZmxhdERhdGEpO1xyXG4gICAgbGV0IGlzRGJjc0FscGhhOiBib29sZWFuID0gZmFsc2U7IC8vIEpQTjogREJDUyBzdXBwb3J0XHJcblxyXG4gICAgLy8gcG9zIGlzIHBvc2l0aW9uIGluIHRoZSBvcmlnaW5hbGZsYXREYXRhIHN0cmluZ1xyXG4gICAgbGV0IHBvczogbnVtYmVyID0gQmxvYlR5cGUuYmxvYlByZWZpeExlbmd0aCh0aGlzLl9vcmlnaW5hbGZsYXREYXRhKTtcclxuICAgIC8vIGJsb2JcclxuICAgIHRva2VucyA9IFN0clV0aWwudG9rZW5pemUodGhpcy5fb3JpZ2luYWxmbGF0RGF0YS5zdWJzdHIocG9zKSwgXCIsXCIpO1xyXG4gICAgbGV0IHZlY1NpemU6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICBpZiAoVmVjdG9yVHlwZS52YWxpZGF0ZUJsb2JDb250ZW50cyh0aGlzLl9vcmlnaW5hbGZsYXREYXRhKSkge1xyXG4gICAgICAgIGxldCBibG9iUHJlZml4OiBzdHJpbmcgPSBCbG9iVHlwZS5nZXRQcmVmaXgodGhpcy5fb3JpZ2luYWxmbGF0RGF0YSk7XHJcbiAgICAgICAgdGhpcy5fY2VsbENvbnRlbnRUeXBlID0gQmxvYlR5cGUuZ2V0Q29udGVudFR5cGUoYmxvYlByZWZpeCk7XHJcblxyXG4gICAgICAgIC8vIHNraXAgdGhlIHRoZSBoZWFkZXJzIG9mIHRoZSB0YWJsZSBhbmQgdGhlIHZlY3RvciBhbmQgdGhlIGZpcnN0ICcsJztcclxuICAgICAgICBwb3MgPSA8bnVtYmVyPig8bnVtYmVyPnBvcyArIDQgKyA1ICsgMSk7XHJcblxyXG4gICAgICAgIC8vIHNraXAgdGhlIHZlcnNpb25cclxuICAgICAgICB0b2tlbklkeCsrO1xyXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgICAgcG9zID0gcG9zICsgKGN1cnJlbnRUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgICAgLy8gc2tpcCB0aGUgQ29sdW1uc0NvdW50XyBpbiB2ZWN0b3JzIGFsd2F5cyBjb250YWluIHZhbHVlIG9mIDFcclxuICAgICAgICB0b2tlbklkeCsrO1xyXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgICAgcG9zID0gcG9zICsgKGN1cnJlbnRUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgICAgLy8gcGFyc2UgdGhlIGNlbGwgYXR0cmlidXRlIGluIHZlY3RvciB0aGVyZSBpcyBvbmx5IG9uZSBhdHRyaWJ1dGUgZm8gdGhlIGVudGlyZSB2ZWN0b3JcclxuICAgICAgICB0b2tlbklkeCsrO1xyXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgICAgdGhpcy5fY2VsbHNBdHRyID0gPFN0b3JhZ2VBdHRyaWJ1dGU+Y3VycmVudFRva2VuLmNoYXJBdCgwKTtcclxuICAgICAgICBwb3MgPSBwb3MgKyAyO1xyXG5cclxuICAgICAgICAvLyBwYXJzZSB0aGUgQ29sdW1uc0xlbl8gdGhhdCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGNlbGxzIGluIHRoZSB2ZWN0b3JcclxuICAgICAgICAvLyBzaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSBjb2x1bW4gd2UgaW5jcmVhc2UgcG9zIGJ5IGN1cnJlbnRUb2tlbi5sZW5ndGgoKVxyXG4gICAgICAgIC8vIHRoaXMgbnVtYmVyIGlzIHNhbWUgYXMgdGhlIENvbHVtbnNUb3RhbExlbl8gZm9yIHZlY3RvcnNcclxuICAgICAgICB0b2tlbklkeCsrO1xyXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgICAgdGhpcy5fY2VsbFNpemUgPSA8bnVtYmVyPk5OdW1iZXIuUGFyc2UoY3VycmVudFRva2VuKTtcclxuICAgICAgICBwb3MgPSBwb3MgKyAoY3VycmVudFRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgICAvLyBwYXJzZSB0aGUgY2VsbCBkZWZhdWx0IHZhbHVlIGlzIGl0IGlzIG51bWVyaWMgaXQgaXMgc2VudCBhcyBOVU1fVFlQRVxyXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIG1heSBjb250YWluIGFzIHZhbHVlIGNoYXJjdGVycyBhcyB0aGUgZGVsaW1ldGVyXHJcbiAgICAgICAgLy8gd2UgY2FuIG5vdCB1c2UgdGhlIFN0cmluZ1Rva2VuaXplci5cclxuICAgICAgICBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpXHJcbiAgICAgICAgICB0aGlzLl9jZWxsc0RlZmF1bHRWYWwgPSBTdHJVdGlsLnN0cmluZ1RvSGV4YUR1bXAodGhpcy5fb3JpZ2luYWxmbGF0RGF0YS5zdWJzdHIocG9zLCA8bnVtYmVyPnRoaXMuX2NlbGxTaXplKSwgMik7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PKSB7XHJcbiAgICAgICAgICAvLyBRQ1IgNDI5NDQ1IHNpbmNlIHRoZSB2ZWN0b3IgaXMgZW5jb2RlZCB0byBiYXNlNjQvaGV4IHdoZW4gaXQgaXMgcmVjaXZlZCBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgIC8vIHdlIG11c3QgdXNlIHRoZSBjb3JyZWN0IGNoYXItc2V0IHdoZW4gcmVjaXZpbmcgdmVjdG9yIG9mIGFscGhhIG9yIG1lbW8gZnJvbSB0aGUgc2VydmVyXHJcbiAgICAgICAgICAvLyBpbiB2ZWN0b3JzIHdlIG11c3QgY29uY2lkZXIgdGhlIGNoYXIgc2V0IHNpbmNlIHdoZW4gd2UgZ290IGl0IGZyb20gdGhlIHNlcnZlciBpdCB3YXMgZW5jb2RlZFxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgICAgICAgaXNEYmNzQWxwaGEgPSB0cnVlO1xyXG4gICAgICAgICAgICBpc0ZsYXREYXRhVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2NlbGxzRGVmYXVsdFZhbCA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0Qih0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MpLCA8bnVtYmVyPnRoaXMuX2NlbGxTaXplKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5fY2VsbHNEZWZhdWx0VmFsID0gdGhpcy5fb3JpZ2luYWxmbGF0RGF0YS5zdWJzdHIocG9zLCA8bnVtYmVyPnRoaXMuX2NlbGxTaXplKTtcclxuICAgICAgICAgIGlmICh0aGlzLl9lbmNvZGluZyAhPT0gbnVsbCAmJiAhaXNGbGF0RGF0YVRyYW5zbGF0ZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBsZXQgYmE6IFVpbnQ4QXJyYXkgPSBJU09fODg1OV8xX0VuY29kaW5nLklTT184ODU5XzEuR2V0Qnl0ZXModGhpcy5fY2VsbHNEZWZhdWx0VmFsKTtcclxuICAgICAgICAgICAgICB0aGlzLl9jZWxsc0RlZmF1bHRWYWwgPSB0aGlzLl9lbmNvZGluZy5HZXRTdHJpbmcoYmEsIDAsIGJhLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICB0aGlzLl9jZWxsc0RlZmF1bHRWYWwgPSB0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MsIDxudW1iZXI+dGhpcy5fY2VsbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBiYTogVWludDhBcnJheSA9IElTT184ODU5XzFfRW5jb2RpbmcuSVNPXzg4NTlfMS5HZXRCeXRlcyh0aGlzLl9jZWxsc0RlZmF1bHRWYWwpO1xyXG4gICAgICAgICAgICB0aGlzLl9jZWxsc0RlZmF1bHRWYWwgPSBFbmNvZGluZy5Vbmljb2RlLkdldFN0cmluZyhiYSwgMCwgYmEubGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24pIHtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5fY2VsbHNEZWZhdWx0VmFsID0gdGhpcy5fb3JpZ2luYWxmbGF0RGF0YS5zdWJzdHIocG9zLCA8bnVtYmVyPnRoaXMuX2NlbGxTaXplKTtcclxuICAgICAgICBpZiAoaXNEYmNzQWxwaGEpXHJcbiAgICAgICAgICBwb3MgPSBwb3MgKyB0aGlzLl9jZWxsc0RlZmF1bHRWYWwubGVuZ3RoICsgMTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBwb3MgPSA8bnVtYmVyPig8bnVtYmVyPnBvcyArIHRoaXMuX2NlbGxTaXplICsgMSk7IC8vIHNpa3AgdGhlIGVuZGluZyAnLCdcclxuXHJcbiAgICAgICAgLy8gaW5yb3JkZXIgdG8gY29udGludWUgdXNpbmcgdGhlIHRva2VuaXplciBmb3IgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlcnMgcGFyc2luZ1xyXG4gICAgICAgIC8vIHJlaW5pdCBpdFxyXG4gICAgICAgIHRva2VucyA9IFN0clV0aWwudG9rZW5pemUodGhpcy5fb3JpZ2luYWxmbGF0RGF0YS5zdWJzdHIocG9zKSwgXCIsXCIpO1xyXG4gICAgICAgIHRva2VuSWR4ID0gMDtcclxuXHJcbiAgICAgICAgLy8gcGFyc2UgdGhlIGNlbGxzIG51bGwgZGVmYXVsdCBmbGFnXHJcbiAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICB0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQgPSBEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbihjdXJyZW50VG9rZW4pO1xyXG4gICAgICAgIHBvcyA9IHBvcyArIChjdXJyZW50VG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAgIC8vIHBhcnNlIHRoZSBjZWxscyBudWxsIGFsbG93ZWQgZmxhZ1xyXG4gICAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICB0aGlzLl9hbGxvd051bGwgPSBEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbihjdXJyZW50VG9rZW4pO1xyXG4gICAgICAgIHBvcyA9IHBvcyArIChjdXJyZW50VG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAgIC8vIHNraXAgdGhlIHBhcnNpbmcgb2YgQ29sdW1uc1RvdGFsTGVuX1xyXG4gICAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICBwb3MgPSBwb3MgKyAoY3VycmVudFRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgICAvLyBwYXJzZSB0aGUgc2l6ZSBvZiB0aGUgdmVjdG9yICggUmVjb3Jkc0NvdW50XylcclxuICAgICAgICB0b2tlbklkeCsrO1xyXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgICAgdmVjU2l6ZSA9IDxudW1iZXI+Tk51bWJlci5QYXJzZShjdXJyZW50VG9rZW4pO1xyXG4gICAgICAgIHBvcyA9IHBvcyArIChjdXJyZW50VG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAgIC8vIHRoZSBibG9ic18gd2lsbCBhbHdheXMgY29udGFpbiB2YWx1ZSBvZiAxIHNpbmUgd2UgaGF2ZSBpbiB2ZWN0b3JzIG9ubHkgb25lIGNvbG1uXHJcbiAgICAgICAgdG9rZW5JZHgrKztcclxuICAgICAgICBjdXJyZW50VG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICAgIHBvcyA9IHBvcyArIChjdXJyZW50VG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAgIC8vIGJsb2JzIG9mZnNldCB0YWJsZSBpbiB0aGUgdmVjdG9yIGNhc2Ugd2lsbCBhbHdheSBjb250YWluIG9ubHkgb25lIHZhbHVlIGVxdWFscyB0byAwXHJcbiAgICAgICAgLy8gc2luY2UgdGhlcmUgaXMgb25seSBvbmUgY29sbXMgaW4gdGhlIHZlY3RvclxyXG4gICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgICAgICBjdXJyZW50VG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICAgICAgcG9zID0gcG9zICsgKGN1cnJlbnRUb2tlbi5sZW5ndGggKyAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBhcnNlIHRoZSBkYXRhIGFycmF5XHJcbiAgICAgICAgbGV0IGRhdGE6IHN0cmluZztcclxuICAgICAgICBpZiAoaXNEYmNzQWxwaGEpIHtcclxuICAgICAgICAgIGRhdGEgPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIodGhpcy5fb3JpZ2luYWxmbGF0RGF0YS5zdWJzdHIocG9zKSwgPG51bWJlcj4odmVjU2l6ZSAqIHRoaXMuX2NlbGxTaXplKSk7XHJcbiAgICAgICAgICBwb3MgPSBwb3MgKyBkYXRhLmxlbmd0aCArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGF0YSA9IHRoaXMuX29yaWdpbmFsZmxhdERhdGEuc3Vic3RyKHBvcywgPG51bWJlcj4odmVjU2l6ZSAqIHRoaXMuX2NlbGxTaXplKSk7XHJcbiAgICAgICAgICBwb3MgPSA8bnVtYmVyPig8bnVtYmVyPnBvcyArIHZlY1NpemUgKiB0aGlzLl9jZWxsU2l6ZSArIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWxsb2NhdGUgdGhlIGRhdGFCdWZcclxuICAgICAgICB0aGlzLl9kYXRhQnVmID0gbmV3IFN0cmluZ0J1aWxkZXIoZGF0YS5sZW5ndGgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2VsbHNBdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBICYmIHRoaXMuX2NlbGxzQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PICYmIHRoaXMuX2NlbGxzQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKVxyXG4gICAgICAgICAgdGhpcy5fZGF0YUJ1Zi5BcHBlbmQoZGF0YSk7XHJcblxyXG4gICAgICAgIC8vIHBhcnNlIHRoZSBudWxsIGJ1ZlxyXG4gICAgICAgIGxldCBudWxsQnVmOiBzdHJpbmcgPSB0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MsIDxudW1iZXI+dmVjU2l6ZSk7XHJcbiAgICAgICAgcG9zID0gPG51bWJlcj4oPG51bWJlcj5wb3MgKyB2ZWNTaXplICsgMSk7XHJcblxyXG4gICAgICAgIC8vIHNhdmUgdGhlIG51bGxCdWZcclxuICAgICAgICB0aGlzLl9udWxsQnVmID0gbmV3IFN0cmluZ0J1aWxkZXIobnVsbEJ1Zik7XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBjZWxsc1xyXG4gICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiB0aGlzLl9jZWxsc0F0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2ZWNTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGlzTnVsbDogYm9vbGVhbiA9IG51bGxCdWYuY2hhckF0KGkpID4gJ1xcMCc7XHJcbiAgICAgICAgICAgIC8vIG51bWVyaWMgdHlwZSBhcmUgc2VudCBhcyBOVU1fVFlQRSBzbyB3ZSB0cmFuc2xhdGUgdGhlbSB0byBoZXhcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2NlbGxzLnB1c2gobmV3IENlbGxFbGVtZW50KFN0clV0aWwuc3RyaW5nVG9IZXhhRHVtcChkYXRhLnN1YnN0cig8bnVtYmVyPig8bnVtYmVyPmkgKiB0aGlzLl9jZWxsU2l6ZSksIDxudW1iZXI+dGhpcy5fY2VsbFNpemUpLCAyKSwgaXNOdWxsKSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTykge1xyXG4gICAgICAgICAgICAgIC8vIFFDUiA0Mjk0NDUgc2luY2UgdGhlIHZlY3RvciBpcyBlbmNvZGVkIHRvIGJhc2U2NC9oZXggd2hlbiBpdCBpcyByZWNpdmVkIGZyb20gdGhlXHJcbiAgICAgICAgICAgICAgLy8gc2VydmVyIHdlIG11c3QgdXNlIHRoZSBjb3JyZWN0IGNoYXItc2V0IHdoZW4gcmVjaXZpbmcgdmVjdG9yIG9mIGFscGhhIG9yIG1lbW8gZnJvbSB0aGUgc2VydmVyXHJcbiAgICAgICAgICAgICAgbGV0IGNlbGxEYXRhOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgaWYgKGlzRGJjc0FscGhhKVxyXG4gICAgICAgICAgICAgICAgY2VsbERhdGEgPSBVdGlsU3RyQnl0ZU1vZGUubWlkQihkYXRhLCA8bnVtYmVyPig8bnVtYmVyPmkgKiB0aGlzLl9jZWxsU2l6ZSksIDxudW1iZXI+dGhpcy5fY2VsbFNpemUpO1xyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNlbGxEYXRhID0gZGF0YS5zdWJzdHIoPG51bWJlcj4oPG51bWJlcj5pICogdGhpcy5fY2VsbFNpemUpLCA8bnVtYmVyPnRoaXMuX2NlbGxTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2VuY29kaW5nICE9PSBudWxsICYmICFpc0ZsYXREYXRhVHJhbnNsYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGJhOiBVaW50OEFycmF5ID0gSVNPXzg4NTlfMV9FbmNvZGluZy5JU09fODg1OV8xLkdldEJ5dGVzKGNlbGxEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgY2VsbERhdGEgPSB0aGlzLl9lbmNvZGluZy5HZXRTdHJpbmcoYmEsIDAsIGJhLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoU3lzdGVtRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX2RhdGFCdWYuQXBwZW5kKGNlbGxEYXRhKTtcclxuICAgICAgICAgICAgICB0aGlzLl9jZWxscy5wdXNoKG5ldyBDZWxsRWxlbWVudChjZWxsRGF0YSwgaXNOdWxsKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpIHtcclxuICAgICAgICAgICAgICBsZXQgY2VsbERhdGE6IHN0cmluZyA9IGRhdGEuc3Vic3RyKDxudW1iZXI+KDxudW1iZXI+aSAqIHRoaXMuX2NlbGxTaXplKSwgPG51bWJlcj50aGlzLl9jZWxsU2l6ZSk7XHJcbiAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxldCBiYTogVWludDhBcnJheSA9IElTT184ODU5XzFfRW5jb2RpbmcuSVNPXzg4NTlfMS5HZXRCeXRlcyhjZWxsRGF0YSk7XHJcbiAgICAgICAgICAgICAgICBjZWxsRGF0YSA9IEVuY29kaW5nLlVuaWNvZGUuR2V0U3RyaW5nKGJhLCAwLCBiYS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjYXRjaCAoU3lzdGVtRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX2RhdGFCdWYuQXBwZW5kKGNlbGxEYXRhKTtcclxuICAgICAgICAgICAgICB0aGlzLl9jZWxscy5wdXNoKG5ldyBDZWxsRWxlbWVudChjZWxsRGF0YSwgaXNOdWxsKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRoaXMuX2NlbGxzLnB1c2gobmV3IENlbGxFbGVtZW50KGRhdGEuc3Vic3RyKDxudW1iZXI+KDxudW1iZXI+aSAqIHRoaXMuX2NlbGxTaXplKSwgPG51bWJlcj50aGlzLl9jZWxsU2l6ZSksIGlzTnVsbCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vIGluIGNhc2Ugb2YgdmVjdG9ycyBvcmYgdmVjdG9ycyBvciB2ZWN0b3JzIG9mIGJsb2JzIHdlIG5lZWQgdG8gdHJlYXQgdGhlbSBkaWZmZXJlbnRsbHlcclxuICAgICAgICAgIC8vIGVhY2ggYmxvYiBvciB2ZWN0b3IgaXMgXCJmbGF0dGVuZWQgaW4gdGhlIGVuZCBvZiB0aGUgbnVsbCBidWZmXHJcbiAgICAgICAgICAvLyBhcyBhIHN0cmluZyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDpcclxuICAgICAgICAgIC8vIEJsb2JfU2l6ZSxPYmpIYW5kbGUsVmFyaWFudElkeCxUeXBlLFZlY0NlbGxBdHRyLC4uLi5kYXRhLi4uLjtuZXh0X2Jsb2I7XHJcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgZXIgYSBibG9iIGNvbWUgdG8gdGhlIGNsaWVudCBub3kgdmlhIHZlY3RvciBpdHMgZm9ybWF0IGlzOlxyXG4gICAgICAgICAgLy8gT2JqSGFuZGxlLFZhcmlhbnRJZHgsVHlwZSxWZWNDZWxsQXR0cjtkYXRhIHRoZXJlIGZvciB3ZSBuZWVkIHRvIG1ha2UgdGhlIGFkanVzdG1lbnRzXHJcbiAgICAgICAgICAvLyBpbiB0aGUgcGFyc2luZyBwcm9jZXNzIGFuZCBpbiB2ZWNHZXQgYW5kIGluIHRvU3RyaW5nXHJcbiAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdmVjU2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRva2VucyA9IFN0clV0aWwudG9rZW5pemUodGhpcy5fb3JpZ2luYWxmbGF0RGF0YS5zdWJzdHIocG9zKSwgXCIsXCIpO1xyXG4gICAgICAgICAgICB0b2tlbklkeCA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBwYXJzZSBibG9iIHNpemVcclxuICAgICAgICAgICAgdG9rZW5JZHgrKztcclxuICAgICAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICAgICAgbGV0IHNpemU6IG51bWJlciA9IDxudW1iZXI+Tk51bWJlci5QYXJzZShjdXJyZW50VG9rZW4pO1xyXG4gICAgICAgICAgICBwb3MgPSBwb3MgKyAoY3VycmVudFRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gcGFyc2UgdGhlIHJlc3Qgb2YgdGhlIGJsb2IgaGVhZGVyXHJcbiAgICAgICAgICAgIGxldCBibG9iSGVhZGVyOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgR3VpQ29uc3RhbnRzLkJMT0JfUFJFRklYX0VMRU1FTlRTX0NPVU5UOyBqKyspIHtcclxuICAgICAgICAgICAgICB0b2tlbklkeCsrO1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgICAgICAgICAgYmxvYkhlYWRlciA9IGJsb2JIZWFkZXIgKyBjdXJyZW50VG9rZW47XHJcbiAgICAgICAgICAgICAgcG9zID0gcG9zICsgKGN1cnJlbnRUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGogIT09IEd1aUNvbnN0YW50cy5CTE9CX1BSRUZJWF9FTEVNRU5UU19DT1VOVCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGJsb2JIZWFkZXIgPSBibG9iSGVhZGVyICsgXCIsXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgY2VsbERhdGE6IHN0cmluZyA9IHRoaXMuX29yaWdpbmFsZmxhdERhdGEuc3Vic3RyKHBvcywgPG51bWJlcj5zaXplKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgY2VsbCB0byB0aGUgdmVjXHJcbiAgICAgICAgICAgIGxldCBpc051bGw6IGJvb2xlYW4gPSBudWxsQnVmLmNoYXJBdChpKSA+ICdcXDAnO1xyXG4gICAgICAgICAgICB0aGlzLl9jZWxscy5wdXNoKG5ldyBDZWxsRWxlbWVudChjZWxsRGF0YSwgaXNOdWxsLCBibG9iSGVhZGVyKSk7XHJcbiAgICAgICAgICAgIHBvcyA9IDxudW1iZXI+KDxudW1iZXI+cG9zICsgc2l6ZSArIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBkYXRhQnVmIHdhcyBub3QgYnVpbHQgZHVyaW5nIFwiY2VsbHMgZ3Jvd3RoXCIgLSBhbGxvY2F0ZSBpdCByaWdodCBub3csIGluIG9uZS1zaG90LlxyXG4gICAgICAgIGlmICh0aGlzLl9kYXRhQnVmLkxlbmd0aCA9PT0gMClcclxuICAgICAgICAgIHRoaXMuX2RhdGFCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcihkYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gVmVjdG9yVHlwZS5pbml0IHdyb25nIHZlY3RvciBmb3JtYXRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIGEgZmxhdHRlbiBibG9iIHN0cmluZyByZXByZXNlbnRhdGlvbiB3ZSBhc3N1bWUgaGVyZSB0aGF0IGFsbCBjaGFuZ2VzIGFyZSBkeW5hbWljYWxseSBzYXZlIGludG8gdGhlXHJcbiAgLy8vICAgYnVmZnMgZWFjaCB0aW1lIHRoZSB2ZWN0b3IgY2hhbmdlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIGxldCByZXM6IHN0cmluZyA9IFwiXCI7IC8vIHRha2VcclxuXHJcbiAgICAvLyBsYXp5IGV2YWx1YXRpb24gaWYgdGhlIHZlY3RvciB3YXMgbm90IGluaXRpYWxpemVkIGl0IHdhc24ndCBjaGFuZ2VkIHNvIHJldHVybiB0aGUgb3JpZ2luYWxcclxuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAvLyBidWlsZCB0aGUgaGVhZGVyc1xyXG4gICAgICByZXMgPSByZXMgKyAwICsgXCIsXCIgKyAwICsgXCIsXCIgKyBcIjBcIiArIFwiLFwiICsgPHN0cmluZz50aGlzLl9jZWxsc0F0dHIgKyBcIixcIiArIHRoaXMuX2NlbGxDb250ZW50VHlwZSArIFwiO1wiO1xyXG4gICAgICAvLyB0aGUgYmxvYiBoZWFkZXIgb2YgdGhpcyBibG9iXHJcbiAgICAgIHJlcyA9IHJlcyArIHRoaXMuYnVpbGRIZWFkZXJzU3RyaW5nKCk7XHJcbiAgICAgIC8vICsgZGF0YUJ1Zi50b1N0cmluZygpICsgXCIsXCIgKyBudWxsQnVmLnRvU3RyaW5nKCkgKyBcIixcIjtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgIGxldCBkYXRhQnVmQ2hhckFycnk6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4odGhpcy5fZGF0YUJ1Zi5MZW5ndGggKiAyKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX2RhdGFCdWYuTGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICAgIGRhdGFCdWZDaGFyQXJyeVtpICogMl0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh0aGlzLl9kYXRhQnVmLmdldF9JdGVtKGkpLmNoYXJDb2RlQXQoMCkpICUgMjU2KTtcclxuICAgICAgICAgIGRhdGFCdWZDaGFyQXJyeVtpICogMiArIDFdID0gU3RyaW5nLmZyb21DaGFyQ29kZSgodGhpcy5fZGF0YUJ1Zi5nZXRfSXRlbShpKS5jaGFyQ29kZUF0KDApKSAvIDI1Nik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcyA9IHJlcyArIE5TdHJpbmcuRnJvbUNoYXJzKGRhdGFCdWZDaGFyQXJyeSkgKyBcIixcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmVzID0gcmVzICsgdGhpcy5fZGF0YUJ1ZiArIFwiLFwiO1xyXG5cclxuICAgICAgcmVzID0gcmVzICsgdGhpcy5fbnVsbEJ1ZiArIFwiLFwiO1xyXG5cclxuICAgICAgLy8gaW4gYmxvYnMgYW5kIHZlY3RvciB3ZSBkbyBub3QgdXBkYXRlXHJcbiAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgcmVzID0gcmVzICsgdGhpcy5nZXRCbG9ic0J1ZigpO1xyXG5cclxuICAgICAgcmVzID0gcmVzICsgVmVjdG9yVHlwZS5CTE9CX1RBQkxFX1NUUjtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgcmVzID0gdGhpcy5fb3JpZ2luYWxmbGF0RGF0YTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGNlbGxzIGF0dHJpYnV0ZSAoIHRoZSBzYW5lIGZvciBhbGwgY2VsbHMgaW4gdGhlIHZlY3RvcilcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldENlbGxzQXR0cigpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpXHJcbiAgICAgIHJldHVybiBWZWN0b3JUeXBlLmdldENlbGxzQXR0cih0aGlzLl9vcmlnaW5hbGZsYXREYXRhKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuX2NlbGxzQXR0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBjZWxscyBzaXplICggc2FtZSBzaXplIGZvciBhbGwgY2VsbHMpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDZWxsU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgbGV0IHJldFZhbDogbnVtYmVyO1xyXG5cclxuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpXHJcbiAgICAgIHJldFZhbCA9IFZlY3RvclR5cGUuZ2V0Q2VsbFNpemUodGhpcy5fb3JpZ2luYWxmbGF0RGF0YSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldFZhbCA9IHRoaXMuX2NlbGxTaXplO1xyXG5cclxuICAgIC8vIHVuaWNvZGUgY2VsbCBzaXplIGlzIHNhdmVkIGludGVybmFsbHkgYXMgYnl0ZSBsZW5ndGggc2luY2UgdGhhdCBpcyB0aGUgd2F5IHRoZSBzZXJ2ZXIgc2F2ZSBpdFxyXG4gICAgaWYgKHRoaXMuZ2V0Q2VsbHNBdHRyKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSlcclxuICAgICAgcmV0VmFsID0gTWF0aC5mbG9vcihyZXRWYWwgLyAyKTtcclxuXHJcbiAgICByZXR1cm4gcmV0VmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHZlY3RvciBzaXplXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRWZWNTaXplKCk6IG51bWJlciB7XHJcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKVxyXG4gICAgICByZXR1cm4gVmVjdG9yVHlwZS5nZXRWZWNTaXplKHRoaXMuX29yaWdpbmFsZmxhdERhdGEpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gPG51bWJlcj50aGlzLl9jZWxscy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgYSBnaXZlIGNlbGwgY2VsbHMgaW5kZXhlcyBzdGFydCBmcm9tIDEgd3JvbmcgaW5kZXhlcyBvciBpbmRleGVzIHRoZSBkb2VzIG5vdCBleGlzdFxyXG4gIC8vLyAgIHdpbGwgcmV0dXJuIGRlZmF1bHQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+dGhlIGNlbGwgaW5kZXg8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNlbGwgdmFsdWUgVE9ETzogeWFyaXYgY2hlY2sgd2l0aCByaW5hIHdoYXQgd2Ugc2hvdWxkIGRvIHdpdGhcclxuICAvLy8gICBibG9icyBleHRyYSBmaWVsZHNcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldFZlY0NlbGwoaWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJldFZhbDogc3RyaW5nID0gbnVsbDtcclxuICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICBpZiAoPG51bWJlcj5pZHggPD0gdGhpcy5nZXRWZWNTaXplKCkpIHtcclxuICAgICAgICByZXRWYWwgPSB0aGlzLl9jZWxscy5nZXRfSXRlbShpZHggLSAxKS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgcmV0VmFsID0gdGhpcy5fY2VsbHMuZ2V0X0l0ZW0oaWR4IC0gMSkuYmxvYkZpZWxkUHJlZml4ICsgXCI7XCIgKyByZXRWYWw7XHJcblxyXG4gICAgICAgIC8vIFFDUiA1MDM2OTEgdGhlIHZhbHVlIG9mIHRydWUgb3IgZmFsc2UgaW4gdGhlIHNlcnZlciBhcmUgdGhlIG51bWVyaWMgdmFsdWVzIG9mIDEgYW5kIDBcclxuICAgICAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUxvZ2ljYWwodGhpcy5fY2VsbHNBdHRyKSlcclxuICAgICAgICAgIHJldFZhbCA9ICgocmV0VmFsLmNoYXJBdCgwKSA9PT0gJ1xcMCcpID8gXCIwXCIgOiBcIjFcIik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jZWxscy5nZXRfSXRlbShpZHggLSAxKS5pc051bGwpXHJcbiAgICAgICAgICByZXRWYWwgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCF0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQpXHJcbiAgICAgICAgcmV0VmFsID0gdGhpcy5fY2VsbHNEZWZhdWx0VmFsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJucyB0aGUgY2VsbCB2YWx1ZXMgb2YgYSB2ZWN0b3IgaW4gc3RyaW5nIGFycmF5LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRDZWxsVmFsdWVzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCByZXRWYWw6IHN0cmluZyA9IG51bGw7XHJcbiAgICBsZXQgY2VsbFZhbHVlczogc3RyaW5nW10gPSBudWxsO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmdldFZlY1NpemUoKSA+IDApXHJcbiAgICB7XHJcbiAgICAgIGNlbGxWYWx1ZXMgPSBuZXcgQXJyYXk8c3RyaW5nPih0aGlzLmdldFZlY1NpemUoKSk7XHJcblxyXG4gICAgICAvLyBHZXQgdGhlIHZlY3RvciB2YWx1ZVxyXG4gICAgICBmb3IgKGxldCBpZHg6IG51bWJlciA9IDA7IGlkeCA8IHRoaXMuZ2V0VmVjU2l6ZSgpOyBpZHgrKylcclxuICAgICAge1xyXG4gICAgICAgIHJldFZhbCA9IHRoaXMuX2NlbGxzLmdldF9JdGVtKGlkeCkuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUilcclxuICAgICAgICAgIHJldFZhbCA9IHRoaXMuX2NlbGxzLmdldF9JdGVtKGlkeCkuYmxvYkZpZWxkUHJlZml4ICsgXCI7XCIgKyByZXRWYWw7XHJcblxyXG4gICAgICAgIC8vIFFDUiA1MDM2OTEgdGhlIHZhbHVlIG9mIHRydWUgb3IgZmFsc2UgaW4gdGhlIHNlcnZlciBhcmUgdGhlIG51bWVyaWMgdmFsdWVzIG9mIDEgYW5kIDBcclxuICAgICAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUxvZ2ljYWwodGhpcy5fY2VsbHNBdHRyKSlcclxuICAgICAgICAgIHJldFZhbCA9ICgocmV0VmFsLmNoYXJBdCgwKSA9PT0gJ1xcMCcpID8gXCIwXCIgOiBcIjFcIik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jZWxscy5nZXRfSXRlbShpZHgpLmlzTnVsbClcclxuICAgICAgICAgIHJldFZhbCA9IG51bGw7XHJcblxyXG4gICAgICAgIGNlbGxWYWx1ZXNbaWR4XSA9IHJldFZhbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoIXRoaXMuX2NlbGxzSXNOdWxsRGVmYXVsdClcclxuICAgIHtcclxuICAgICAgICBjZWxsVmFsdWVzID0gW1xyXG4gICAgICAgICAgdGhpcy5fY2VsbHNEZWZhdWx0VmFsXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2VsbFZhbHVlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbnNlcnRzIG9yIGNoYW5nZXMgYSBjZWxscyB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj50aGUgY2VsbCBpbmRleCBpZiB0aGUgaW5kZXggaXMgbm90IHNlcXVlbnRpYWwgY3JlYXRzIGVtcHR5IGNlbGwgdGlsbCB0aGUgaW5kZXg8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VmFsdWVcIj50aGUgbmV3IHZhbHVlICggaWYgaXQgaXMgYSBibG9iIHR5cGUgb3IgdmVjdG9yIGl0IGNvbnRhaW5zIHRoZSBwcmVmaXggb2YgdGhlIGNvbnRyb2wgZGF0YTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1bnM+ICBmYWxzZSBpZiB0aGUgaW5kZXggaXMgd3Jvbmcgb3IgdGhlIHZlY3RvciBpbGxmb3JtZWQgPC9yZXR1bnM+XHJcbiAgc2V0VmVjQ2VsbChpZHg6IG51bWJlciwgbmV3VmFsdWU6IHN0cmluZywgaXNOdWxsOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgY3JlYXRlQnVmZmVyVmFsRm9yTnVtVHlwZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoaWR4ID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgICBsZXQgbG9jYWxDZWxsU2l6ZTogbnVtYmVyID0gKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSA/IE1hdGguZmxvb3IodGhpcy5fY2VsbFNpemUgLyAyKSA6IHRoaXMuX2NlbGxTaXplO1xyXG4gICAgICAgIC8vIHRyeWluZyB0byBzZXQgbnVsbCB2YWx1ZSB3aGVuIG5vdCBhbGxvd2VkXHJcbiAgICAgICAgaWYgKGlzTnVsbCAmJiAhdGhpcy5fYWxsb3dOdWxsKSB7XHJcbiAgICAgICAgICBpc051bGwgPSBmYWxzZTtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5fY2VsbHNEZWZhdWx0VmFsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkeCA8PSB0aGlzLl9jZWxscy5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCBjdXJyOiBDZWxsRWxlbWVudCA9IHRoaXMuX2NlbGxzLmdldF9JdGVtKGlkeCAtIDEpO1xyXG4gICAgICAgICAgLy8gaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgaWYgKCFpc051bGwpIHtcclxuICAgICAgICAgICAgLy8gc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGJsb2JzIGFuZCB2ZWN0b3JzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgICAgICAgICAvLyBzZXQgdGhlIGRhdGEgaW4gdGhlIGNlbGxcclxuICAgICAgICAgICAgICBsZXQgYmxvYlByZWZpeExlbmd0aDogbnVtYmVyID0gQmxvYlR5cGUuYmxvYlByZWZpeExlbmd0aChuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgY3Vyci5ibG9iRmllbGRQcmVmaXggPSBuZXdWYWx1ZS5zdWJzdHIoMCwgYmxvYlByZWZpeExlbmd0aCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAvLyB0cmVhdCBlbXB0eSBibG9iXHJcbiAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IGJsb2JQcmVmaXhMZW5ndGgpXHJcbiAgICAgICAgICAgICAgICBjdXJyLmRhdGEgPSBuZXdWYWx1ZS5zdWJzdHIoYmxvYlByZWZpeExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgY3Vyci5kYXRhID0gXCJcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzaW1wbGUgdHlwZVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBRQ1IgNTAzNjkxIHRoZSB2YWx1ZSBvZiB0cnVlIG9yIGZhbHNlIGluIHRoZSBzZXJ2ZXIgYXJlIHRoZSBudW1lcmljIHZhbHVlcyBvZiAxIGFuZCAwXHJcbiAgICAgICAgICAgICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVMb2dpY2FsKHRoaXMuX2NlbGxzQXR0cikpIHtcclxuICAgICAgICAgICAgICAgIGN1cnIuZGF0YSA9IChEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbihuZXdWYWx1ZSkgPyBuZXcgU3RyaW5nQnVpbGRlcigpLkFwcGVuZCgxKS5Ub1N0cmluZygpIDogbmV3IFN0cmluZ0J1aWxkZXIoKS5BcHBlbmQoJ1xcMCcpLlRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBjdXJyLmRhdGE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGN1cnIuZGF0YSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICAvLyBudW1lcmljIHR5cGVzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgZGF0YSBidWYgYXMgbnVtIHR5cGUgc28gd2VcclxuICAgICAgICAgICAgICAvLyB0cmFuc2xhdGUgdGhlbSBiZWZvcmUgaW5zZXJ0aW5nIHRoZW0gdG8gdGhlIGJ1ZlxyXG4gICAgICAgICAgICAgIGxldCBkYXRhQnVmVmFsOiBzdHJpbmcgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpXHJcbiAgICAgICAgICAgICAgICBkYXRhQnVmVmFsID0gUmVjb3JkVXRpbHMuYnl0ZVN0cmVhbVRvU3RyaW5nKGRhdGFCdWZWYWwpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGJhRGF0YUJ1ZjogVWludDhBcnJheSA9IHRoaXMuX2VuY29kaW5nLkdldEJ5dGVzKHRoaXMuX2RhdGFCdWYuVG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYmFEYXRhQnVmVmFsOiBVaW50OEFycmF5ID0gdGhpcy5fZW5jb2RpbmcuR2V0Qnl0ZXMoZGF0YUJ1ZlZhbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGRhdGEgYnVmXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgYmFEYXRhQnVmVmFsLmxlbmd0aCAmJiA8bnVtYmVyPmkgPCBsb2NhbENlbGxTaXplOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgIGJhRGF0YUJ1Zls8bnVtYmVyPig8bnVtYmVyPihpZHggLSAxKSAqIGxvY2FsQ2VsbFNpemUpICsgaV0gPSBiYURhdGFCdWZWYWxbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gd2UgZG8gbm90IGtlZXAgdGhlIHdob2xlIHNpemUgb2YgdGhlIGFscGhhXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBiYURhdGFCdWZWYWwubGVuZ3RoOyA8bnVtYmVyPmkgPCBsb2NhbENlbGxTaXplOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgIGJhRGF0YUJ1Zls8bnVtYmVyPig8bnVtYmVyPihpZHggLSAxKSAqIGxvY2FsQ2VsbFNpemUpICsgaV0gPSAoKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSkgPyAzMiA6IDApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcih0aGlzLl9lbmNvZGluZy5HZXRTdHJpbmcoYmFEYXRhQnVmLCAwLCBiYURhdGFCdWYubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgICAgICBjdXJyLmRhdGEgPSB0aGlzLl9lbmNvZGluZy5HZXRTdHJpbmcoYmFEYXRhQnVmLCA8bnVtYmVyPig8bnVtYmVyPihpZHggLSAxKSAqIGxvY2FsQ2VsbFNpemUpLCA8bnVtYmVyPmxvY2FsQ2VsbFNpemUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBkYXRhIGJ1ZlxyXG4gICAgICAgICAgICAgICAgLy8gUUNSIDk4Nzk0MyB0cmltIHRoZSB2YWx1ZSBpZiBpdCBpcyBsb25nZXIgdGhlIHRoZSBjZWxsIGxlbmd0aFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGRhdGFCdWZWYWwubGVuZ3RoICYmIDxudW1iZXI+aSA8IGxvY2FsQ2VsbFNpemU7IGkrKylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YUJ1Zi5zZXRfSXRlbSg8bnVtYmVyPig8bnVtYmVyPihpZHggLSAxKSAqIGxvY2FsQ2VsbFNpemUpICsgaSwgZGF0YUJ1ZlZhbC5jaGFyQXQoaSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGluIGFscGhhIGFuZCBudW0gdHlwZSB3ZSBkbyBub3Qga2VlcCB0aGUgd2hvbGUgc2l6ZSBvZiB0aGUgYWxwaGEvTlVNX1RZUEVcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IGRhdGFCdWZWYWwubGVuZ3RoOyA8bnVtYmVyPmkgPCBsb2NhbENlbGxTaXplOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFCdWYuc2V0X0l0ZW0oPG51bWJlcj4oPG51bWJlcj4oaWR4IC0gMSkgKiBsb2NhbENlbGxTaXplKSArIGksICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpID8gJyAnIDogJ1xcMCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFFDUiA5ODc5NDMgdHJpbSB0aGUgdmFsdWUgaWYgaXQgaXMgbG9uZ2VyIHRoZSB0aGUgY2VsbCBsZW5ndGhcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk1FTU8pXHJcbiAgICAgICAgICAgICAgICAgIGN1cnIuZGF0YSA9IHRoaXMuX2RhdGFCdWYuVG9TdHJpbmcoKS5zdWJzdHIoPG51bWJlcj4oPG51bWJlcj4oaWR4IC0gMSkgKiBsb2NhbENlbGxTaXplKSwgPG51bWJlcj5sb2NhbENlbGxTaXplKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBudWxsIGJ1ZlxyXG4gICAgICAgICAgICB0aGlzLl9udWxsQnVmLnNldF9JdGVtKGlkeCAtIDEsICdcXDAnKTtcclxuICAgICAgICAgICAgY3Vyci5pc051bGwgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgbnVsbFxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnIuZGF0YSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHByZWZpeCBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJsb2IgaXMgdmVjdG9yIG9yIG5vdFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgICAgIGN1cnIuYmxvYkZpZWxkUHJlZml4ID0gQmxvYlR5cGUuZ2V0RW1wdHlCbG9iUHJlZml4KCdcXHUwMDAxJyk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBjdXJyLmJsb2JGaWVsZFByZWZpeCA9IEJsb2JUeXBlLmdldEVtcHR5QmxvYlByZWZpeCgnXFwwJyk7XHJcbiAgICAgICAgICAgIGN1cnIuaXNOdWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fbnVsbEJ1Zi5zZXRfSXRlbShpZHggLSAxLCAnXFx1MDAwMScpO1xyXG5cclxuICAgICAgICAgICAgLy8gcmVsZXZhbnQgb25seSBmb3Igbm9uZSBibG9ic1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyA8bnVtYmVyPmkgPCBsb2NhbENlbGxTaXplOyBpKyspXHJcbiAgICAgICAgICAgICAgdGhpcy5fZGF0YUJ1Zi5zZXRfSXRlbSg8bnVtYmVyPig8bnVtYmVyPihpZHggLSAxKSAqIGxvY2FsQ2VsbFNpemUpICsgaSwgJ1xcMCcpO1xyXG5cclxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBudWxsIGJ1ZlxyXG4gICAgICAgICAgICB0aGlzLl9udWxsQnVmLnNldF9JdGVtKGlkeCAtIDEsICdcXHUwMDAxJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBuZXcgcmVjb3JkXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaW5zZXJ0VmFsOiBzdHJpbmc7XHJcbiAgICAgICAgICAvLyBjaG9vc2VzIHRoZSB2YWx1ZSBpbnNlcnRlZCB0byB0aGUgc2tpcHBlZCBjZWxsc1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAgICAgICAvLyBhcHBlbmQgdGhlIGlzIHZlY3RvciBmbGFnXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICAgICAgaW5zZXJ0VmFsID0gQmxvYlR5cGUuZ2V0RW1wdHlCbG9iUHJlZml4KCdcXHUwMDAxJyk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBpbnNlcnRWYWwgPSBCbG9iVHlwZS5nZXRFbXB0eUJsb2JQcmVmaXgoJ1xcMCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQpXHJcbiAgICAgICAgICAgICAgaW5zZXJ0VmFsID0gaW5zZXJ0VmFsICsgdGhpcy5fY2VsbHNEZWZhdWx0VmFsOyAvLyBjb25jYXQgcmVnb2xhciBibG9iIGNudHJvbCBkYXRhXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQpXHJcbiAgICAgICAgICAgIGluc2VydFZhbCA9IG51bGw7XHJcbiAgICAgICAgICAvLyBzaW1wbGUgbnVsbCB2YWx1ZVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBpbnNlcnRWYWwgPSB0aGlzLl9jZWxsc0RlZmF1bHRWYWw7IC8vIGRlZmF1bHQgc2ltcGxlIHZhbHVlXHJcblxyXG4gICAgICAgICAgLy8gUUNSIDUwMzY5MSB0aGUgdmFsdWUgb2YgdHJ1ZSBvciBmYWxzZSBpbiB0aGUgc2VydmVyIGFyZSB0aGUgbnVtZXJpYyB2YWx1ZXMgb2YgMSBhbmQgMFxyXG4gICAgICAgICAgaWYgKGluc2VydFZhbCAhPT0gbnVsbCAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlTG9naWNhbCh0aGlzLl9jZWxsc0F0dHIpKVxyXG4gICAgICAgICAgICBpbnNlcnRWYWwgPSAoRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4oaW5zZXJ0VmFsKSA/IG5ldyBTdHJpbmdCdWlsZGVyKCkuQXBwZW5kKCdcXHUwMDAxJykuVG9TdHJpbmcoKSA6IG5ldyBTdHJpbmdCdWlsZGVyKCkuQXBwZW5kKCdcXDAnKS5Ub1N0cmluZygpKTtcclxuXHJcbiAgICAgICAgICAvLyBjcmVhdGUgc2tpcHBlZCByZWNvcmRzXHJcbiAgICAgICAgICAvLyB3aGVuIGEgdmVjdG9yIGNlbGwgaXMgc2V0ICwgaWYgdGhlIGNlbGwgaXMgYmV5b25kIHRoZSBleGlzdGluZyB2ZWN0b3IuXHJcbiAgICAgICAgICAvLyB3ZSB3aWxsIGZpbGwgdGhlIGNlbGxzIGJldHdlZW4gdmVjdG9yIHNpemUgYW5kIHNldCBjZWxsIHdpdGggZGVmYXVsdCB2YWx1ZS5cclxuICAgICAgICAgIC8vIGZvciBleGFtcGxlIDogaWYgdmVjdG9yIHNpemUgaXMgMCwgYW5kIHdlIGRvIHZlY3NldCAodmVjWzVdKS4gY2VsbCA1IG5lZWRzIHRvIGJlIHNldFxyXG4gICAgICAgICAgLy8gd2l0aCB0aGUgdmFsdWUuIGNlbGxzIDEgdG8gNCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHNldCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlLlxyXG4gICAgICAgICAgbGV0IGRhdGFCdWZWYWw6IHN0cmluZyA9IGluc2VydFZhbDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAodGhpcy5fY2VsbHMubGVuZ3RoIDwgaWR4KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jZWxscy5wdXNoKG5ldyBDZWxsRWxlbWVudChpbnNlcnRWYWwuc3Vic3RyKFZlY3RvclR5cGUuRU1QVFlfQkxPQl9QUkVGSVhfTEVOKSwgdGhpcy5fY2VsbHNJc051bGxEZWZhdWx0LCBpbnNlcnRWYWwuc3Vic3RyKDAsIFZlY3RvclR5cGUuRU1QVFlfQkxPQl9QUkVGSVhfTEVOKSkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2RhdGFCdWYuQXBwZW5kKHRoaXMuZ2V0TnVsbFN0cmluZyhWZWN0b3JUeXBlLkJMT0JfVFlQRV9TVFJVQ1RfU0laRSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NlbGxzLnB1c2gobmV3IENlbGxFbGVtZW50KGluc2VydFZhbCwgdGhpcy5fY2VsbHNJc051bGxEZWZhdWx0KSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgZGF0YSBidWZcclxuICAgICAgICAgICAgICBpZiAoaW5zZXJ0VmFsICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBudW1lcmljIHR5cGVzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgZGF0YSBidWYgYXMgbnVtIHR5cGUgc28gd2VcclxuICAgICAgICAgICAgICAgIC8vIHRyYW5zbGF0ZSB0aGVtIGJlZm9yZSBpbnNlcnRpbmcgdGhlbSB0byB0aGUgYnVmXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZUJ1ZmZlclZhbEZvck51bVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYSBidWZmZXIgdmFsdWUgZm9yIG51bSB0eXBlIG9ubHkgb25jZSwgYW5kIHVzZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG92ZXIgYW5kIG92ZXIgYWdhaW4gZm9yIGFsbCB0aGUgY2VsbHMgdG8gYmUgaW5pdGlhbGl6ZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZG8gdGhlIHRyYW5zbGF0aW9uIG9ubHkgb25jZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLlxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUJ1ZmZlclZhbEZvck51bVR5cGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhQnVmVmFsID0gUmVjb3JkVXRpbHMuYnl0ZVN0cmVhbVRvU3RyaW5nKGluc2VydFZhbCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkYXRhQnVmVmFsIGVpdGhlciBjb250YWlucyBvcmlnaW5hbCBpbnNlcnRWYWwsIG9yIGEgc3RyaW5nIG9mXHJcbiAgICAgICAgICAgICAgICAvLyBieXRlU3RyZWFtIGZvciBudW0gdHlwZXMuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhQnVmLkFwcGVuZChkYXRhQnVmVmFsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBkb24ndCBhbHdheSBrZWVwIHRoZSB3aG9sZSBhbHBoYVxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbExlbjogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTykpXHJcbiAgICAgICAgICAgICAgICAgIHZhbExlbiA9IFV0aWxTdHJCeXRlTW9kZS5sZW5CKGRhdGFCdWZWYWwpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICB2YWxMZW4gPSBkYXRhQnVmVmFsLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSB2YWxMZW47IDxudW1iZXI+aSA8IGxvY2FsQ2VsbFNpemU7IGkrKylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YUJ1Zi5BcHBlbmQoKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkgPyAnICcgOiAnXFwwJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFCdWYuQXBwZW5kKHRoaXMuZ2V0TnVsbFN0cmluZyhsb2NhbENlbGxTaXplKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgbnVsbCBidWZcclxuICAgICAgICAgICAgdGhpcy5fbnVsbEJ1Zi5JbnNlcnQodGhpcy5fY2VsbHMubGVuZ3RoIC0gMSxcclxuICAgICAgICAgICAgICB0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQgPyAnXFx1MDAwMScgOiAnXFwwJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHZlY3RvciBoYXMgYmVlbiBmaWxsZWQgdGlsbCB0aGUgcmVxdWVzdGVkIGlkeC5cclxuICAgICAgICAgIC8vIG5vdyBpdHMgdGltZSB0byBzZXQgdGhlIHJlcXVlc3RlZCBjZWxsLlxyXG4gICAgICAgICAgcmVzID0gdGhpcy5zZXRWZWNDZWxsKGlkeCwgbmV3VmFsdWUsIGlzTnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoQXBwbGljYXRpb25FeGNlcHRpb24pIHtcclxuICAgICAgcmVzID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNoYW5nZSB0aGUgdmVjdG9yIHRvIGZpdCB0aGUgZGVmaW5pdGlvbnMgb2YgYSBkaWZmZXJlbnQgdmVjdG9yIGZpZWxkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmaWVsZFwiPnRoZSBuZXcgZmllbGQ8L3BhcmFtPlxyXG4gIGFkanVzdFRvRml0KGZpZWxkOiBGaWVsZERlZik6IHZvaWQge1xyXG4gICAgaWYgKGZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICBsZXQgc3JjQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IHRoaXMuZ2V0Q2VsbHNBdHRyKCk7XHJcbiAgICAgIGxldCBkc3RBdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gZmllbGQuZ2V0Q2VsbHNUeXBlKCk7XHJcblxyXG4gICAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVGhlU2FtZVR5cGUoc3JjQXR0ciwgZHN0QXR0cikpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgLy8gdHJpbSBkYXRhIGlmIG5lZWRlZCAoIG9ubHkgZm9yIGFscGhhIG9yIG1lbW8pXHJcbiAgICAgICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShzcmNBdHRyKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUoZHN0QXR0cikpIHtcclxuICAgICAgICAgICAgbGV0IGRzdFNpemVJbkNoYXJzOiBudW1iZXIgPSBmaWVsZC5nZXRWZWNDZWxsc1NpemUoKTtcclxuICAgICAgICAgICAgbGV0IHNyY1NpemVJbkNoYXJzOiBudW1iZXIgPSAoKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSA/IE1hdGguZmxvb3IodGhpcy5fY2VsbFNpemUgLyAyKSA6IHRoaXMuX2NlbGxTaXplKTtcclxuICAgICAgICAgIGxldCBpc0J5dGVNb2RlOiBib29sZWFuID0gVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlQWxwaGEoZHN0QXR0cik7XHJcblxyXG4gICAgICAgICAgaWYgKHNyY1NpemVJbkNoYXJzICE9PSBkc3RTaXplSW5DaGFycykge1xyXG4gICAgICAgICAgICBsZXQgYWRqRGF0YTogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBnb2VzIG92ZXIgYWxsIGNlbGxzIGluIHRoZSB2ZWN0b3JcclxuICAgICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGRzdFNpemVJbkNoYXJzOyBpID0gaSArIDEpIHtcclxuICAgICAgICAgICAgICBsZXQgY3VycjogQ2VsbEVsZW1lbnQgPSB0aGlzLl9jZWxscy5nZXRfSXRlbShpKTtcclxuICAgICAgICAgICAgICAvLyB0cmltIGlzIG5lZWRlZFxyXG4gICAgICAgICAgICAgIGlmICghY3Vyci5pc051bGwpIHsgLy8gdW5pY29kZSBjZWxsIHNpemUgYXJlIHNhdmVkIGludGVybmFsbHkgYXMgYnl0ZSBsZW5ndGggd2hpbGUgdGhlIGZpZWxkIHJldHVybnMgY2hhclxyXG4gICAgICAgICAgICAgICAgLy8gbGVuZ3RoXHJcbiAgICAgICAgICAgICAgICBpZiAoc3JjU2l6ZUluQ2hhcnMgPiBkc3RTaXplSW5DaGFycykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNCeXRlTW9kZSlcclxuICAgICAgICAgICAgICAgICAgICBjdXJyLmRhdGEgPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIoY3Vyci5kYXRhLCBkc3RTaXplSW5DaGFycyk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBjdXJyLmRhdGEgPSBjdXJyLmRhdGEuc3Vic3RyKDAsIGRzdFNpemVJbkNoYXJzKTtcclxuICAgICAgICAgICAgICAgICAgYWRqRGF0YS5BcHBlbmQoY3Vyci5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHBhZGRpbmcgaXMgbmVlZGVkXHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IHRtcERhdGE6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0bXBEYXRhLkFwcGVuZChjdXJyLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZGF0YUxlbjogbnVtYmVyID0gaXNCeXRlTW9kZSA/IFV0aWxTdHJCeXRlTW9kZS5sZW5CKGN1cnIuZGF0YSkgOiBjdXJyLmRhdGEubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gcGFkIHdpdGggYmxhbmtzXHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IGRhdGFMZW47IGogPCBkc3RTaXplSW5DaGFyczsgaiA9IGogKyAxKVxyXG4gICAgICAgICAgICAgICAgICAgIHRtcERhdGEuQXBwZW5kKCcgJyk7XHJcbiAgICAgICAgICAgICAgICAgIGFkakRhdGEuQXBwZW5kKHRtcERhdGEuVG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGRhdGEgaW4gdGhlIHZlY3RvciBjZWxsXHJcbiAgICAgICAgICAgICAgICAgIGN1cnIuZGF0YSA9IHRtcERhdGEuVG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG1wRGF0YTogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgZHN0U2l6ZUluQ2hhcnM7IGogPSBqICsgMSlcclxuICAgICAgICAgICAgICAgICAgdG1wRGF0YS5BcHBlbmQoJ1xcMCcpO1xyXG4gICAgICAgICAgICAgICAgYWRqRGF0YS5BcHBlbmQodG1wRGF0YS5Ub1N0cmluZygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGRhdGEgaW4gdGhlIHZlY3RvciBjZWxsXHJcbiAgICAgICAgICAgICAgICBjdXJyLmRhdGEgPSB0bXBEYXRhLlRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Ly8gZW5kIGxvb3BcclxuICAgICAgICAgICAgdGhpcy5fZGF0YUJ1ZiA9IGFkakRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBRQ1IgNzQ3ODAxIGluIHRoZSBmaWxlZCB0aGUgc2l6ZSBvZiBudW1lcmljL2RhdGUvdGltZSBpcyB0aGllciBoZXggc2l6ZVxyXG4gICAgICAgIC8vIHdoZXJlYXMgaGVyZSBpdCBpcyB0aGVpciBOVU1fVFlQRSBzaXplXHJcbiAgICAgICAgbGV0IG5ld1NpemU6IG51bWJlciA9IGZpZWxkLmdldFZlY0NlbGxzU2l6ZSgpO1xyXG5cclxuICAgICAgICAvLyBjaGFuZ2UgdGhlIGhlYWRlcnMgZGF0YSBzdWNoIGFzIGNlbGwgdHlwZSBhbmQgY2VsbHMgc2l6ZVxyXG4gICAgICAgIHRoaXMuX2NlbGxzQXR0ciA9IGZpZWxkLmdldENlbGxzVHlwZSgpO1xyXG4gICAgICAgIHRoaXMuX2NlbGxTaXplID0gPG51bWJlcj4oKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSA/IChuZXdTaXplICogMikgOiBuZXdTaXplKTtcclxuICAgICAgICB0aGlzLl9jZWxsc0RlZmF1bHRWYWwgPSBmaWVsZC5nZXRDZWxsRGVmdWFsdFZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5fY2VsbHNJc051bGxEZWZhdWx0ID0gZmllbGQuaXNOdWxsRGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuX2FsbG93TnVsbCA9IGZpZWxkLk51bGxBbGxvd2VkO1xyXG4gICAgICAgIHRoaXMuX29yaWdpbmFsZmxhdERhdGEgPSB0aGlzLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBWZWN0b3JUeXBlLmFkanVzdFRvRml0IHZlY3RvciBiYXNpYyB0eXBlcyBkb2VzIG5vdCBhZ3JlZVwiKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gIFZlY3RvclR5cGUuYWRqdXN0VG9GaXQgXCIgKyBmaWVsZC5nZXROYW1lKCkgKyBcIiBpcyBub3Qgb2YgdHlwZSB2ZWN0b3JcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXBkYXRlIHRoZSB2ZWMgc2l6ZSBpbiB0aGUgaGVhZGVycyBidWZcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+dGhlIG5ldyBzaXplPC9wYXJhbT5cclxuICBwcml2YXRlIGJ1aWxkSGVhZGVyc1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlczogc3RyaW5nID0gVmVjdG9yVHlwZS5CTE9CX1RBQkxFX1NUUiArIFZlY3RvclR5cGUuVkVDVE9SX1NUUiArIFwiLFwiICsgVmVjdG9yVHlwZS5WRVJTSU9OICsgXCIsXCIgKyAxICsgXCIsXCIgKyA8c3RyaW5nPnRoaXMuX2NlbGxzQXR0ciArIFwiLFwiO1xyXG4gICAgcmVzID0gcmVzICsgdGhpcy5fY2VsbFNpemUgKyBcIixcIjtcclxuXHJcbiAgICAvLyBhcHBlbmQgdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgIGxldCBkZWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBpZiAodGhpcy5fY2VsbHNEZWZhdWx0VmFsICE9PSBudWxsKVxyXG4gICAgICBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpXHJcbiAgICAgICAgZGVmID0gUmVjb3JkVXRpbHMuYnl0ZVN0cmVhbVRvU3RyaW5nKHRoaXMuX2NlbGxzRGVmYXVsdFZhbCk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBkZWYgPSB0aGlzLl9jZWxsc0RlZmF1bHRWYWw7XHJcblxyXG4gICAgLy8gaW4gc3RyaW5nIHdlIGRvIG5vdCBrZWVwIHRoZSBmdWxsIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGluIGJyd29zZXIgY2xpZW50XHJcbiAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PKSlcclxuICAgICAgZGVmID0gZGVmICsgdGhpcy5nZXRFbXB0eVN0cmluZyh0aGlzLl9jZWxsU2l6ZSAtIDxudW1iZXI+VXRpbFN0ckJ5dGVNb2RlLmxlbkIoZGVmKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIGRlZiA9IGRlZiArIHRoaXMuZ2V0RW1wdHlTdHJpbmcodGhpcy5fY2VsbFNpemUgLSA8bnVtYmVyPmRlZi5sZW5ndGgpO1xyXG5cclxuICAgIC8vIGNvbnRpbnVlIGJ1aWxkaW5nIHRoZSBoZWFkZXJzXHJcbiAgICByZXMgPSByZXMgKyBkZWYgKyBcIixcIiArICh0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQgPyBcIjFcIiA6IFwiMFwiKSArIFwiLFwiO1xyXG4gICAgcmVzID0gcmVzICsgKHRoaXMuX2FsbG93TnVsbCA/IFwiMVwiIDogXCIwXCIpICsgXCIsXCIgKyB0aGlzLl9jZWxsU2l6ZSArIFwiLFwiICsgdGhpcy5fY2VsbHMubGVuZ3RoICsgXCIsXCI7XHJcbiAgICByZXMgPSByZXMgKyAoKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikgPyBcIjFcIiA6IFwiMFwiKSArIFwiLFwiO1xyXG5cclxuICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgIHJlcyA9IHJlcyArIFwiMCxcIjtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8gcmV0dXJucyBhIHN0cmluZyB3aXRoIHNpemUgbnVsbCBjaGFyZWN0ZXJzXHJcbiAgcHJpdmF0ZSBnZXROdWxsU3RyaW5nKHNpemU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBzaXplOyBpID0gaSArIDEpXHJcbiAgICAgIHJlcy5BcHBlbmQoJ1xcMCcpO1xyXG4gICAgcmV0dXJuIHJlcy5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8gcmV0dXJucyBhIHN0cmluZyB3aXRoIHNpemUgYmxhbmsgY2hhcmVjdGVyc1xyXG4gIHByaXZhdGUgZ2V0RW1wdHlTdHJpbmcoc2l6ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCByZXM6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHNpemU7IGkgPSBpICsgMSlcclxuICAgICAgcmVzLkFwcGVuZCgnICcpO1xyXG4gICAgcmV0dXJuIHJlcy5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdvZXMgb3ZlciB0aGUgY2VsbHMgb2YgdGhlIHZlY3RvcnMgYW5kIGJ1aWxkcyB0aGUgZGF0YSBidWYgb2YgYmxvYnMgc2luY2UgaXQgaXMgdGhlIG9ubHkgdGhpbmcgbm90XHJcbiAgLy8vICAgdXBkYXRlZCBkeW5hbWljYWxseVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBnZXRCbG9ic0J1ZigpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlczogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fY2VsbHMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IGRhdGE6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgIGxldCBibG9iU2l6ZTogbnVtYmVyID0gMDtcclxuICAgICAgbGV0IGN1cnI6IENlbGxFbGVtZW50ID0gdGhpcy5fY2VsbHMuZ2V0X0l0ZW0oaSk7XHJcblxyXG4gICAgICBpZiAoY3Vyci5kYXRhICE9PSBudWxsKSB7XHJcbiAgICAgICAgZGF0YSA9IGN1cnIuZGF0YTtcclxuICAgICAgICBibG9iU2l6ZSA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXMuQXBwZW5kKGJsb2JTaXplKTtcclxuICAgICAgcmVzLkFwcGVuZChcIixcIiArIGN1cnIuYmxvYkZpZWxkUHJlZml4ICsgXCIsXCIgKyBkYXRhICsgXCI7XCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChyZXMgKyBcIixcIik7XHJcbiAgfVxyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgLyogc3RhdGljIHV0aWxpdHkgbWV0aG9kcyAqL1xyXG4gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZXMgdGhlIGNlbGwgYXR0cmlidXRlIG9mIHRoZSB2ZWN0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYmxvYlwiPmEgdmVjdG9yIGluIGEgZmxhdHRlbmVkIGZvcm1hdDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBhdHQgdGhlIHRoZSB2ZWN0b3IncyBjZWxscyBhdHRyaWJ1dGU8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldENlbGxzQXR0cihibG9iOiBzdHJpbmcpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIGlmIChWZWN0b3JUeXBlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKGJsb2IpKSB7XHJcbiAgICAgIGxldCB0b2tlbnM6IHN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShibG9iLnN1YnN0cihCbG9iVHlwZS5ibG9iUHJlZml4TGVuZ3RoKGJsb2IpKSwgXCIsXCIpO1xyXG5cclxuICAgICAgLy8gc2tpcCB0aGUgTUdCVE1HVkVDXHJcblxyXG4gICAgICAvLyBza2lwIHRoZSB2ZXJzaW9uXHJcblxyXG4gICAgICAvLyBza2lwIHRoZSBDb2x1bW5zQ291bnRfXHJcblxyXG4gICAgICAvLyB0aGUgbmV4dCB0b2tlbiBpcyB0aGUgY2VsbHMgYXR0cmlidXRlXHJcbiAgICAgIHJldHVybiA8U3RvcmFnZUF0dHJpYnV0ZT50b2tlbnNbM10uY2hhckF0KDApO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBzdGF0aWMgZ2V0Q2VsbHNBdHRyIHRoZSBibG9iIGlzIGluIHRoZSB3cm9uZyBmb3JtYXRcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2VzIHRoZSBzaXplIG9mIGVhY2ggY2VsbCBpbiB0aGUgdmVjdG9yIGFsbCBjZWxsIGhhcyB0aGUgc2FtZSBzaXplIGV4Y2VwdCB3aGVuIHRoZSB2ZWN0b3IgY2VsbHMgYXJlXHJcbiAgLy8vICAgb2YgdHlwZSBibG9iIG9yIHZlY3RvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJibG9iXCI+YSB2ZWN0b3IgaW4gYSBmbGF0dGVuZWQgZm9ybWF0PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBjZWxscyBzaXplIG9yIC0xIGlmIHRoZXJlIGlzIGVuY29kaW5nIHByb2JsZW08L3JldHVybnM+XHJcbiAgc3RhdGljIGdldENlbGxTaXplKGJsb2I6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgY2VsbHNUeXBlOiBTdG9yYWdlQXR0cmlidXRlID0gVmVjdG9yVHlwZS5nZXRDZWxsc0F0dHIoYmxvYik7XHJcbiAgICBpZiAoY2VsbHNUeXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgJiYgY2VsbHNUeXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIGxldCB0b2tlbnM6IHN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShibG9iLnN1YnN0cihCbG9iVHlwZS5ibG9iUHJlZml4TGVuZ3RoKGJsb2IpKSwgXCIsXCIpO1xyXG5cclxuICAgICAgLy8gc2tpcCB0aGUgTUdCVE1HVkVDXHJcblxyXG4gICAgICAvLyBza2lwIHRoZSB2ZXJzaW9uXHJcblxyXG4gICAgICAvLyBza2lwIHRoZSBDb2x1bW5zQ291bnRfXHJcblxyXG4gICAgICAvLyBza2lwIHRoZSBjZWxscyB0eXBlXHJcblxyXG4gICAgICAvLyB0aGUgbmV4dCBlbGVtZW50IGlzIHRoZSBjZWxscyBzaXplXHJcbiAgICAgIHJldHVybiBOTnVtYmVyLlBhcnNlKHRva2Vuc1s0XSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHsgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0+XHJcbiAgICAgIHJldHVybiAyMTQ3NDgzNjQ3O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlcyB0aGUgc2l6ZSBvZiB0aGUgdmVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJsb2JcIj5hIHZlY3RvciBpbiBhIGZsYXR0ZW5lZCBmb3JtYXQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHNpemUgb2YgdGhlIHZlY3RvcjwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0VmVjU2l6ZShibG9iOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cclxuICAgIGlmIChWZWN0b3JUeXBlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKGJsb2IpKSB7XHJcbiAgICAgIGxldCBwb3M6IG51bWJlciA9IEJsb2JUeXBlLmJsb2JQcmVmaXhMZW5ndGgoYmxvYik7XHJcbiAgICAgIGxldCB0b2tlbnM6IHN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShibG9iLnN1YnN0cihwb3MpLCBcIixcIik7XHJcblxyXG4gICAgICAvLyBza2lwIHRoZSBNR0JUTUdWRUNcclxuICAgICAgcG9zID0gcG9zICsgKHRva2Vuc1swXS5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIHZlcnNpb25cclxuICAgICAgcG9zID0gcG9zICsgKHRva2Vuc1sxXS5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIENvbHVtbnNDb3VudF9cclxuICAgICAgcG9zID0gcG9zICsgKHRva2Vuc1syXS5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIGNlbGxzIHR5cGVcclxuICAgICAgcG9zID0gcG9zICsgKHRva2Vuc1szXS5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIGNlbGxzIHNpemVcclxuICAgICAgbGV0IGNlbGxzU2l6ZTogc3RyaW5nID0gdG9rZW5zWzRdO1xyXG4gICAgICBwb3MgPSBwb3MgKyAoY2VsbHNTaXplLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgLy8gc2tpcCB0aGUgY2VsbCBkZWZhdWx0IHZhbHVlIGFuZCByZS1pbml0IHRoZSB0b2tlbml6ZXJcclxuICAgICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgbWF5IGNvbnRhaW4gdGhlIGRlbGltZXRlciBjaGFyZWN0ZXIgYXMgZGF0YVxyXG4gICAgICBwb3MgPSBwb3MgKyAoTk51bWJlci5QYXJzZShjZWxsc1NpemUpICsgMSk7XHJcbiAgICAgIHRva2VucyA9IFN0clV0aWwudG9rZW5pemUoYmxvYi5zdWJzdHIocG9zKSwgXCIsXCIpO1xyXG5cclxuICAgICAgLy8gc2tpcCBpcyBjZWxsIG51bGwgZGVmYXVsdFxyXG5cclxuICAgICAgLy8gc2tpcCBpcyBudWxsIGFsbG93ZWRcclxuXHJcbiAgICAgIC8vIHNraXAgY29sdW1ucyB0b3RhbCBsZW5ndGhcclxuXHJcbiAgICAgIC8vIHRoZSBuZXh0IGVsZW1lbnQgaXMgdGhlIHZlY3RvciBzaXplXHJcbiAgICAgIHJldHVybiBOTnVtYmVyLlBhcnNlKHRva2Vuc1szXSk7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBzdGF0aWMgZ2V0VmVjU2l6ZSB0aGUgYmxvYiBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0XCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNoZWNrIGlmIGZsYXREYXRhIGNvbnRlbnQgd2FzIHRyYW5zbGF0ZWQgdG8gdW5pY29kZSBvciBub3QuIGZsYXREYXRhIGNvbnRhaW5zIHRoZSB2ZWN0b3IncyBjZWxscyBpbiBmbGF0XHJcbiAgLy8vICAgKG5vbi1hcnJheSkgZm9ybWF0LiBUaGlzIGlzIGhvdyB0aGUgc2VydmVyIHNlbmRzIHVzIHRoZSBkYXRhLiBIb3dldmVyIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc2VuZCBpdCB0byB1c1xyXG4gIC8vLyAgIGluIGEgVU5JQ09ERSBmb3JtYXQuIFRodXMgd2UgdHJhbnNsYXRlIGl0IHRvIHVuaWNvZGUgZHVyaW5nIHRoZSBmaXJzdCB0aW1lIHdlIFwiZGUtc2VyaWFsaXplXCIgdGhlXHJcbiAgLy8vICAgZmxhdC1kYXRhIGludG8gYSB2ZWN0b3IuIER1cmluZyB0aGUgZGUtc2VyaWFsaXphdGlvbiBvcGVyYXRpb24gZHVyaW5nIHRoZSBmaXJzdCB0aW1lIHdlIFwiZGUtc2VyaWFsaXplXCJcclxuICAvLy8gICB0aGUgZmxhdC1kYXRhIGludG8gYSB2ZWN0b3IuIER1cmluZyB0aGUgZGUtc2VyaWFsaXphdGlvbiBvcGVyYXRpb24gd2UgbW9kaWZ5IHRoZSBCTE9CLVRBQkxlIGV5ZSBjYXRjaGVyXHJcbiAgLy8vICAgZnJvbSB1cHBlciBjYXNlIHRvIGxvd2VyIGNhc2UsIHRoaXMgd2F5IHdlIGtub3cgaWYgYSB0cmFuc2xhdGlvbiB3YXMgZG9uZSBvciBpcyBuZWVkZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5hbWVcIj5mbGF0RGF0YSBUaGUgdmVjdG9yJ3MgZmxhdCBkYXRhPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFRSVUUgaWYgdGhlIGZsYXQgZGF0YSBpcyBhbHJlYWR5IGluIHVuaWNvZGUgZm9ybWF0PC9yZXR1cm5zPlxyXG4gIGlzVW5pY29kZShmbGF0RGF0YTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc3RhcnQ6IG51bWJlciA9IEJsb2JUeXBlLmJsb2JQcmVmaXhMZW5ndGgoZmxhdERhdGEpO1xyXG4gICAgbGV0IGNhdGNoZXI6IHN0cmluZyA9IGZsYXREYXRhLnN1YnN0cihzdGFydCwgVmVjdG9yVHlwZS5CTE9CX1RBQkxFX1NUUl9MRU4pO1xyXG4gICAgcmV0dXJuIChjYXRjaGVyID09PSBWZWN0b3JUeXBlLkJMT0JfVEFCTEVfU1RSKTtcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgdGhpcyBpbm5lciBjbGFzcyByZXByZXNlbnRzIGEgY2VsbCBpbiB0aGUgbWFnaWMgdmVjdG9yIGVhY2ggZGF0YSB0aGF0IHRoZSBtYWdpYyB2ZWN0b3Iga2VlcHMgcGVyIGNlbGxcclxuLy8vICAgd2lsbCBiZSBrZXB0IGluIHRoZSBDZWxsRWxlbWVudFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgQ2VsbEVsZW1lbnQge1xyXG4gIGJsb2JGaWVsZFByZWZpeDogc3RyaW5nID0gbnVsbDtcclxuICBkYXRhOiBzdHJpbmcgPSBudWxsO1xyXG4gIGlzTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBhbGwgdGhpcyB2YXJpYWJsZXMgYXJlIHVzZWQgb25seSBpZiB0aGUgdmVjdG9yIGNlbGwgaXMgb2YgdHlwZSB2ZWN0b3Igb3IgYmxvYlxyXG5cclxuICBjb25zdHJ1Y3Rvcih2YWw6IHN0cmluZywgaXNfbnVsbDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IodmFsOiBzdHJpbmcsIGlzX251bGw6IGJvb2xlYW4sIGN0cmxEYXRhOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKHZhbDogc3RyaW5nLCBpc19udWxsOiBib29sZWFuLCBjdHJsRGF0YT86IHN0cmluZykge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCh2YWwsIGlzX251bGwpO1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKHZhbCwgaXNfbnVsbCwgY3RybERhdGEpO1xyXG4gIH1cclxuXHJcbiAgLy8gY29uc3RydWN0cyBhIG5ldyBjZWxsIGVsZW1lbnQgZm9yIHZlY3RvcnMgd2hvcyBjZWxscyBhcmUgbm90IG9mIHR5cGUgYmxvYiBvciB2ZWN0b3JcclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAodmFsOiBzdHJpbmcsIGlzX251bGw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YSA9IHZhbDtcclxuICAgIHRoaXMuaXNOdWxsID0gaXNfbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIGNvbnN0cnVjdHMgYSBuZXcgY2VsbCBlbGVtZW50IGZvciB2ZWN0b3JzIHdob3MgY2VsbHMgYXJlIG9mIHR5cGUgYmxvYiBvciB2ZWN0b3JcclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEodmFsOiBzdHJpbmcsIGlzX251bGw6IGJvb2xlYW4sIGN0cmxEYXRhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YSA9IHZhbDtcclxuICAgIHRoaXMuaXNOdWxsID0gaXNfbnVsbDtcclxuICAgIHRoaXMuYmxvYkZpZWxkUHJlZml4ID0gY3RybERhdGE7XHJcbiAgfVxyXG59XHJcbiJdfQ==
612
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9kYXRhL1ZlY3RvclR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixRQUFRLEVBQ1IsbUJBQW1CLEVBQ25CLElBQUksRUFDSixPQUFPLEVBQ1AsT0FBTyxFQUNQLGFBQWEsRUFDZCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBTWxELE1BQU0sT0FBTyxVQUFXLFNBQVEsY0FBYztJQUU1QyxNQUFNLENBQUMsT0FBTyxHQUFXLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMscUJBQXFCLEdBQVcsQ0FBQyxDQUFDO0lBR3pDLE1BQU0sQ0FBQyxxQkFBcUIsR0FBVyxFQUFFLENBQUM7SUFFbEMsTUFBTSxHQUFzQixJQUFJLENBQUM7SUFDakMsU0FBUyxHQUFhLElBQUksQ0FBQztJQUMzQixVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLGdCQUFnQixHQUFXLElBQUksQ0FBQztJQUNoQyxTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3RCLFVBQVUsR0FBcUIsSUFBSSxDQUFD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T0FBTyxHQUFXLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7O0FBT0gsTUFBTSxPQUFPLFdBQVc7SUFDdEIsZUFBZSxHQUFXLElBQUksQ0FBQztJQUMvQixJQUFJLEdBQVcsSUFBSSxDQUFDO0lBQ3BCLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFNeEIsWUFBWSxHQUFXLEVBQUUsT0FBZ0IsRUFBRSxRQUFpQjtRQUMxRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUdPLGFBQWEsQ0FBQyxHQUFXLEVBQUUsT0FBZ0I7UUFDakQsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUdPLGFBQWEsQ0FBQyxHQUFXLEVBQUUsT0FBZ0IsRUFBRSxRQUFnQjtRQUNuRSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uRXhjZXB0aW9uLFxyXG4gIEVuY29kaW5nLFxyXG4gIElTT184ODU5XzFfRW5jb2RpbmcsXHJcbiAgTGlzdCxcclxuICBOTnVtYmVyLFxyXG4gIE5TdHJpbmcsXHJcbiAgU3RyaW5nQnVpbGRlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgRmllbGREZWYgfSBmcm9tICcuL0ZpZWxkRGVmJztcclxuaW1wb3J0IHsgQmxvYlR5cGUgfSBmcm9tICcuL0Jsb2JUeXBlJztcclxuaW1wb3J0IHsgU3RvcmFnZUF0dHJpYnV0ZSwgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLCBTdHJVdGlsLCBVdGlsU3RyQnl0ZU1vZGUgfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgRGlzcGxheUNvbnZlcnRvciB9IGZyb20gJy4uL2d1aS9EaXNwbGF5Q29udmVydG9yJztcclxuaW1wb3J0IHsgUmVjb3JkVXRpbHMgfSBmcm9tICcuL1JlY29yZFV0aWxzJztcclxuaW1wb3J0IHsgR3VpQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vR3VpQ29uc3RhbnRzJztcclxuaW1wb3J0IHsgR3VpRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9HdWlFbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IFZlY3RvclR5cGVCYXNlIH0gZnJvbSAnLi9WZWN0b3JUeXBlQmFzZSc7XHJcblxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICByZXByZXNlbnRzIHRoZSBtYWdpYyB2ZWN0b3IgdHlwZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgVmVjdG9yVHlwZSBleHRlbmRzIFZlY3RvclR5cGVCYXNlIHtcclxuXHJcbiAgc3RhdGljIFZFUlNJT046IG51bWJlciA9IDU7IC8vIHZlcnNpb24gbm8gNSBpbmNsdWRlcyB0aGUgY29udGVudCBmaWVsZFxyXG4gIHN0YXRpYyBFTVBUWV9CTE9CX1BSRUZJWF9MRU46IG51bWJlciA9IDc7XHJcblxyXG4gIC8vIEZPUiBFWFBMQU5BVElPTlMgUkVHQVJESU5HIFRISVMgTlVNQkVSIFBMRUFTIFNFRSBET0NVTUVOVEFUSU9OIElOU0lERSBpbml0IE1FVEhPRFxyXG4gIHN0YXRpYyBCTE9CX1RZUEVfU1RSVUNUX1NJWkU6IG51bWJlciA9IDI4O1xyXG5cclxuICBwcml2YXRlIF9jZWxsczogTGlzdDxDZWxsRWxlbWVudD4gPSBudWxsOyAvLyBhIHZlY3RvciBjb250YWluaW5nIENlbGxFbGVtZW50c1xyXG4gIHByaXZhdGUgX2VuY29kaW5nOiBFbmNvZGluZyA9IG51bGw7IC8vIHRvIGJlIHVzZWQgb25seSB3aXRoIGFscGhhIG9yIG1lbW9cclxuICBwcml2YXRlIF9hbGxvd051bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9jZWxsQ29udGVudFR5cGU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY2VsbFNpemU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY2VsbHNBdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gbnVsbDsgLy8gYWxsIGNlbGxzIGluIHRoZSB2ZWN0b3IgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlXHJcbiAgcHJpdmF0ZSBfY2VsbHNEZWZhdWx0VmFsOiBzdHJpbmcgPSBudWxsOyAvLyBhbGwgY2VsbHMgaW4gdGhlIG1hZ2ljIHZlY3RvciBoYXMgdGhlIHNhbWUgZGVmYXVsdCB2YWx1ZVxyXG4gIHByaXZhdGUgX2NlbGxzSXNOdWxsRGVmYXVsdDogYm9vbGVhbiA9IGZhbHNlOyAvLyBudWxsIGRlZmF1bHQgZGVmaW5pdGlvbiBmb3IgYWxsIGNlbGxzIGluIHRoZSBtYWdpYyB2ZWN0b3JcclxuXHJcbiAgLy8gZGF0YSBidWZmZXJzIHRoYXQgd2UgY2hhbmdlIER5bmFtaWNhbGx5IHRvIGZhY2lsaXRhdGVcclxuICAvLyB0aGUgY3JlYXRpb24gb2YgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gIHByaXZhdGUgX2RhdGFCdWY6IFN0cmluZ0J1aWxkZXIgPSBudWxsO1xyXG4gIHByaXZhdGUgX2luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7IC8vIG1hcmtzIHdoZXRoZXIgdGhlIHZlY3RvciB3YXMgaW5pdGlhbGl6ZWQgaWYgaXQgd2FzIG5vdCB0aGF0IGl0IGlzIGFuIGludmFsaWQgdmVjdG9yXHJcbiAgcHJpdmF0ZSBfbnVsbEJ1ZjogU3RyaW5nQnVpbGRlciA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfb3JpZ2luYWxmbGF0RGF0YTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoY2VsbHNUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBjb250ZW50VHlwZTogc3RyaW5nLCBkZWZ1YWx0OiBzdHJpbmcsIGlzRGVmTnVsbDogYm9vbGVhbiwgbnVsbEFsb3dlZDogYm9vbGVhbiwgbGVuZ3RoOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKGJsb2JTdHJpbmc6IHN0cmluZyk7XHJcbiAgY29uc3RydWN0b3IoZmxkOiBGaWVsZERlZik7XHJcbiAgY29uc3RydWN0b3IoY2VsbHNUeXBlT3JCbG9iU3RyaW5nT3JGbGQ6IGFueSwgY29udGVudFR5cGU/OiBzdHJpbmcsIGRlZnVhbHQ/OiBzdHJpbmcsIGlzRGVmTnVsbD86IGJvb2xlYW4sIG51bGxBbG93ZWQ/OiBib29sZWFuLCBsZW5ndGg/OiBudW1iZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNilcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKGNlbGxzVHlwZU9yQmxvYlN0cmluZ09yRmxkLCBjb250ZW50VHlwZSwgZGVmdWFsdCwgaXNEZWZOdWxsLCBudWxsQWxvd2VkLCBsZW5ndGgpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKGNlbGxzVHlwZU9yQmxvYlN0cmluZ09yRmxkID09PSBudWxsIHx8IGNlbGxzVHlwZU9yQmxvYlN0cmluZ09yRmxkLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzEoY2VsbHNUeXBlT3JCbG9iU3RyaW5nT3JGbGQpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKGNlbGxzVHlwZU9yQmxvYlN0cmluZ09yRmxkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb25zdHJ1Y3QgdGhlIG9iamVjdCBidXQgZG9lcyBub3QgZmlsbCBpdCB3aXRoIGRhdGEgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgVmVjdG9yIHdlIG11c3QgaW52b2tlIG9uXHJcbiAgLy8vICAgaXQgdGhlIGl0cyBpbml0IG1ldGhvZCBhIFZlY3RvclR5cGUgd2hpY2ggd2FzIG5vdCBpbml0aWFsaXplZCBpcyBhbiB1bnZhbGlkIHZlY3Rvci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMChjZWxsc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIGNvbnRlbnRUeXBlOiBzdHJpbmcsIGRlZnVhbHQ6IHN0cmluZywgaXNEZWZOdWxsOiBib29sZWFuLCBudWxsQWxvd2VkOiBib29sZWFuLCBsZW5ndGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY2VsbHMgPSBuZXcgTGlzdDxDZWxsRWxlbWVudD4oKTtcclxuICAgIHRoaXMuX2NlbGxzQXR0ciA9IGNlbGxzVHlwZTtcclxuICAgIHRoaXMuX2NlbGxDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xyXG4gICAgdGhpcy5fY2VsbHNEZWZhdWx0VmFsID0gZGVmdWFsdDtcclxuICAgIHRoaXMuX2NlbGxzSXNOdWxsRGVmYXVsdCA9IGlzRGVmTnVsbDtcclxuICAgIHRoaXMuX2NlbGxTaXplID0gKCh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkgPyAobGVuZ3RoICogMikgOiBsZW5ndGgpO1xyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fYWxsb3dOdWxsID0gbnVsbEFsb3dlZDtcclxuICAgIHRoaXMuX251bGxCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgdGhpcy5fZGF0YUJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbGZsYXREYXRhID0gdGhpcy50b1N0cmluZygpO1xyXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRFbmNvZGluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnN0cnVjdCB0aGUgb2JqZWN0IGJ1dCBkb2VzIG5vdCBmaWxsIGl0IHdpdGggZGF0YSBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBWZWN0b3Igd2UgbXVzdCBpbnZva2Ugb25cclxuICAvLy8gICBpdCB0aGUgaXRzIGluaXQgbWV0aG9kIGEgVmVjdG9yVHlwZSB3aGljaCB3YXMgbm90IGluaXRpYWxpemVkIGlzIGFuIGludmFsaWQgdmVjdG9yLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJibG9iU3RyaW5nXCI+YSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJsb2IncyBkYXRhIGJ5dGVzPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEoYmxvYlN0cmluZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jZWxscyA9IG5ldyBMaXN0PENlbGxFbGVtZW50PigpO1xyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX29yaWdpbmFsZmxhdERhdGEgPSBibG9iU3RyaW5nO1xyXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRFbmNvZGluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnN0cnVjdCB0aGUgb2JqZWN0IHdpdGggYSBmaWVsZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmbGRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2hhcnNcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMihmbGQ6IEZpZWxkRGVmKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jZWxscyA9IG5ldyBMaXN0PENlbGxFbGVtZW50PigpO1xyXG4gICAgdGhpcy5fY2VsbHNBdHRyID0gZmxkLmdldENlbGxzVHlwZSgpO1xyXG4gICAgdGhpcy5fY2VsbENvbnRlbnRUeXBlID0gZmxkLmdldFZlY0NlbGxzQ29udGVudFR5cGUoKTtcclxuICAgIHRoaXMuX2NlbGxzRGVmYXVsdFZhbCA9IGZsZC5nZXRDZWxsRGVmdWFsdFZhbHVlKCk7XHJcbiAgICB0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQgPSBmbGQuaXNOdWxsRGVmYXVsdCgpO1xyXG4gICAgdGhpcy5fY2VsbFNpemUgPSA8bnVtYmVyPigodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpID8gKGZsZC5nZXRWZWNDZWxsc1NpemUoKSAqIDIpIDogZmxkLmdldFZlY0NlbGxzU2l6ZSgpKTtcclxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2FsbG93TnVsbCA9IGZsZC5OdWxsQWxsb3dlZDtcclxuICAgIHRoaXMuX251bGxCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgdGhpcy5fZGF0YUJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbGZsYXREYXRhID0gdGhpcy50b1N0cmluZygpO1xyXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRFbmNvZGluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGJ1aWxkcyBhIFZlY3RvclR5cGUgZnJvbSBpdHMgZmxhdHRlbmVkIGJsb2IgcmVwcmVzZW50YXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYmxvYlN0cmluZ1wiPmEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBibG9iJ3MgZGF0YSBieXRlczwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBmYWxzZSBpcyB0aGUgZ2l2ZW4gYmxvYiBpcyBub3QgYSB2ZWN0b3IgKHRoZSBmbGF0dGVuIGZvcm1hdCBpcyB3cm9uZyk8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xyXG4gICAgbGV0IHRva2Vuczogc3RyaW5nW10gPSBudWxsO1xyXG4gICAgbGV0IHRva2VuSWR4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGN1cnJlbnRUb2tlbjogc3RyaW5nID0gbnVsbDsgLy8gdGhlIGN1cnJlbnQgdG9rZW4gd2UgYXJlIHBhcmluZ1xyXG4gICAgbGV0IGlzRmxhdERhdGFUcmFuc2xhdGVkOiBib29sZWFuID0gdGhpcy5pc1VuaWNvZGUodGhpcy5fb3JpZ2luYWxmbGF0RGF0YSk7XHJcbiAgICBsZXQgaXNEYmNzQWxwaGE6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSlBOOiBEQkNTIHN1cHBvcnRcclxuXHJcbiAgICAvLyBwb3MgaXMgcG9zaXRpb24gaW4gdGhlIG9yaWdpbmFsZmxhdERhdGEgc3RyaW5nXHJcbiAgICBsZXQgcG9zOiBudW1iZXIgPSBCbG9iVHlwZS5ibG9iUHJlZml4TGVuZ3RoKHRoaXMuX29yaWdpbmFsZmxhdERhdGEpO1xyXG4gICAgLy8gYmxvYlxyXG4gICAgdG9rZW5zID0gU3RyVXRpbC50b2tlbml6ZSh0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MpLCBcIixcIik7XHJcbiAgICBsZXQgdmVjU2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIGlmIChWZWN0b3JUeXBlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKHRoaXMuX29yaWdpbmFsZmxhdERhdGEpKSB7XHJcbiAgICAgICAgbGV0IGJsb2JQcmVmaXg6IHN0cmluZyA9IEJsb2JUeXBlLmdldFByZWZpeCh0aGlzLl9vcmlnaW5hbGZsYXREYXRhKTtcclxuICAgICAgICB0aGlzLl9jZWxsQ29udGVudFR5cGUgPSBCbG9iVHlwZS5nZXRDb250ZW50VHlwZShibG9iUHJlZml4KTtcclxuXHJcbiAgICAgICAgLy8gc2tpcCB0aGUgdGhlIGhlYWRlcnMgb2YgdGhlIHRhYmxlIGFuZCB0aGUgdmVjdG9yIGFuZCB0aGUgZmlyc3QgJywnO1xyXG4gICAgICAgIHBvcyA9IDxudW1iZXI+KDxudW1iZXI+cG9zICsgNCArIDUgKyAxKTtcclxuXHJcbiAgICAgICAgLy8gc2tpcCB0aGUgdmVyc2lvblxyXG4gICAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICBwb3MgPSBwb3MgKyAoY3VycmVudFRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgICAvLyBza2lwIHRoZSBDb2x1bW5zQ291bnRfIGluIHZlY3RvcnMgYWx3YXlzIGNvbnRhaW4gdmFsdWUgb2YgMVxyXG4gICAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICBwb3MgPSBwb3MgKyAoY3VycmVudFRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgICAvLyBwYXJzZSB0aGUgY2VsbCBhdHRyaWJ1dGUgaW4gdmVjdG9yIHRoZXJlIGlzIG9ubHkgb25lIGF0dHJpYnV0ZSBmbyB0aGUgZW50aXJlIHZlY3RvclxyXG4gICAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICB0aGlzLl9jZWxsc0F0dHIgPSA8U3RvcmFnZUF0dHJpYnV0ZT5jdXJyZW50VG9rZW4uY2hhckF0KDApO1xyXG4gICAgICAgIHBvcyA9IHBvcyArIDI7XHJcblxyXG4gICAgICAgIC8vIHBhcnNlIHRoZSBDb2x1bW5zTGVuXyB0aGF0IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgY2VsbHMgaW4gdGhlIHZlY3RvclxyXG4gICAgICAgIC8vIHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIGNvbHVtbiB3ZSBpbmNyZWFzZSBwb3MgYnkgY3VycmVudFRva2VuLmxlbmd0aCgpXHJcbiAgICAgICAgLy8gdGhpcyBudW1iZXIgaXMgc2FtZSBhcyB0aGUgQ29sdW1uc1RvdGFsTGVuXyBmb3IgdmVjdG9yc1xyXG4gICAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICB0aGlzLl9jZWxsU2l6ZSA9IDxudW1iZXI+Tk51bWJlci5QYXJzZShjdXJyZW50VG9rZW4pO1xyXG4gICAgICAgIHBvcyA9IHBvcyArIChjdXJyZW50VG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAgIC8vIHBhcnNlIHRoZSBjZWxsIGRlZmF1bHQgdmFsdWUgaXMgaXQgaXMgbnVtZXJpYyBpdCBpcyBzZW50IGFzIE5VTV9UWVBFXHJcbiAgICAgICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgbWF5IGNvbnRhaW4gYXMgdmFsdWUgY2hhcmN0ZXJzIGFzIHRoZSBkZWxpbWV0ZXJcclxuICAgICAgICAvLyB3ZSBjYW4gbm90IHVzZSB0aGUgU3RyaW5nVG9rZW5pemVyLlxyXG4gICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSlcclxuICAgICAgICAgIHRoaXMuX2NlbGxzRGVmYXVsdFZhbCA9IFN0clV0aWwuc3RyaW5nVG9IZXhhRHVtcCh0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MsIDxudW1iZXI+dGhpcy5fY2VsbFNpemUpLCAyKTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk1FTU8pIHtcclxuICAgICAgICAgIC8vIFFDUiA0Mjk0NDUgc2luY2UgdGhlIHZlY3RvciBpcyBlbmNvZGVkIHRvIGJhc2U2NC9oZXggd2hlbiBpdCBpcyByZWNpdmVkIGZyb20gdGhlIHNlcnZlclxyXG4gICAgICAgICAgLy8gd2UgbXVzdCB1c2UgdGhlIGNvcnJlY3QgY2hhci1zZXQgd2hlbiByZWNpdmluZyB2ZWN0b3Igb2YgYWxwaGEgb3IgbWVtbyBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgIC8vIGluIHZlY3RvcnMgd2UgbXVzdCBjb25jaWRlciB0aGUgY2hhciBzZXQgc2luY2Ugd2hlbiB3ZSBnb3QgaXQgZnJvbSB0aGUgc2VydmVyIGl0IHdhcyBlbmNvZGVkXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSkge1xyXG4gICAgICAgICAgICBpc0RiY3NBbHBoYSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlzRmxhdERhdGFUcmFuc2xhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fY2VsbHNEZWZhdWx0VmFsID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHRoaXMuX29yaWdpbmFsZmxhdERhdGEuc3Vic3RyKHBvcyksIDxudW1iZXI+dGhpcy5fY2VsbFNpemUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLl9jZWxsc0RlZmF1bHRWYWwgPSB0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MsIDxudW1iZXI+dGhpcy5fY2VsbFNpemUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2VuY29kaW5nICE9PSBudWxsICYmICFpc0ZsYXREYXRhVHJhbnNsYXRlZCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGxldCBiYTogVWludDhBcnJheSA9IElTT184ODU5XzFfRW5jb2RpbmcuSVNPXzg4NTlfMS5HZXRCeXRlcyh0aGlzLl9jZWxsc0RlZmF1bHRWYWwpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NlbGxzRGVmYXVsdFZhbCA9IHRoaXMuX2VuY29kaW5nLkdldFN0cmluZyhiYSwgMCwgYmEubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpIHtcclxuICAgICAgICAgIHRoaXMuX2NlbGxzRGVmYXVsdFZhbCA9IHRoaXMuX29yaWdpbmFsZmxhdERhdGEuc3Vic3RyKHBvcywgPG51bWJlcj50aGlzLl9jZWxsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGJhOiBVaW50OEFycmF5ID0gSVNPXzg4NTlfMV9FbmNvZGluZy5JU09fODg1OV8xLkdldEJ5dGVzKHRoaXMuX2NlbGxzRGVmYXVsdFZhbCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NlbGxzRGVmYXVsdFZhbCA9IEVuY29kaW5nLlVuaWNvZGUuR2V0U3RyaW5nKGJhLCAwLCBiYS5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLl9jZWxsc0RlZmF1bHRWYWwgPSB0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MsIDxudW1iZXI+dGhpcy5fY2VsbFNpemUpO1xyXG4gICAgICAgIGlmIChpc0RiY3NBbHBoYSlcclxuICAgICAgICAgIHBvcyA9IHBvcyArIHRoaXMuX2NlbGxzRGVmYXVsdFZhbC5sZW5ndGggKyAxO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHBvcyA9IDxudW1iZXI+KDxudW1iZXI+cG9zICsgdGhpcy5fY2VsbFNpemUgKyAxKTsgLy8gc2lrcCB0aGUgZW5kaW5nICcsJ1xyXG5cclxuICAgICAgICAvLyBpbnJvcmRlciB0byBjb250aW51ZSB1c2luZyB0aGUgdG9rZW5pemVyIGZvciB0aGUgcmVzdCBvZiB0aGUgaGVhZGVycyBwYXJzaW5nXHJcbiAgICAgICAgLy8gcmVpbml0IGl0XHJcbiAgICAgICAgdG9rZW5zID0gU3RyVXRpbC50b2tlbml6ZSh0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MpLCBcIixcIik7XHJcbiAgICAgICAgdG9rZW5JZHggPSAwO1xyXG5cclxuICAgICAgICAvLyBwYXJzZSB0aGUgY2VsbHMgbnVsbCBkZWZhdWx0IGZsYWdcclxuICAgICAgICBjdXJyZW50VG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICAgIHRoaXMuX2NlbGxzSXNOdWxsRGVmYXVsdCA9IERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKGN1cnJlbnRUb2tlbik7XHJcbiAgICAgICAgcG9zID0gcG9zICsgKGN1cnJlbnRUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgICAgLy8gcGFyc2UgdGhlIGNlbGxzIG51bGwgYWxsb3dlZCBmbGFnXHJcbiAgICAgICAgdG9rZW5JZHgrKztcclxuICAgICAgICBjdXJyZW50VG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICAgIHRoaXMuX2FsbG93TnVsbCA9IERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKGN1cnJlbnRUb2tlbik7XHJcbiAgICAgICAgcG9zID0gcG9zICsgKGN1cnJlbnRUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgICAgLy8gc2tpcCB0aGUgcGFyc2luZyBvZiBDb2x1bW5zVG90YWxMZW5fXHJcbiAgICAgICAgdG9rZW5JZHgrKztcclxuICAgICAgICBjdXJyZW50VG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICAgIHBvcyA9IHBvcyArIChjdXJyZW50VG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAgIC8vIHBhcnNlIHRoZSBzaXplIG9mIHRoZSB2ZWN0b3IgKCBSZWNvcmRzQ291bnRfKVxyXG4gICAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICB2ZWNTaXplID0gPG51bWJlcj5OTnVtYmVyLlBhcnNlKGN1cnJlbnRUb2tlbik7XHJcbiAgICAgICAgcG9zID0gcG9zICsgKGN1cnJlbnRUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgICAgLy8gdGhlIGJsb2JzXyB3aWxsIGFsd2F5cyBjb250YWluIHZhbHVlIG9mIDEgc2luZSB3ZSBoYXZlIGluIHZlY3RvcnMgb25seSBvbmUgY29sbW5cclxuICAgICAgICB0b2tlbklkeCsrO1xyXG4gICAgICAgIGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgICAgcG9zID0gcG9zICsgKGN1cnJlbnRUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgICAgLy8gYmxvYnMgb2Zmc2V0IHRhYmxlIGluIHRoZSB2ZWN0b3IgY2FzZSB3aWxsIGFsd2F5IGNvbnRhaW4gb25seSBvbmUgdmFsdWUgZXF1YWxzIHRvIDBcclxuICAgICAgICAvLyBzaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSBjb2xtcyBpbiB0aGUgdmVjdG9yXHJcbiAgICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAgICAgdG9rZW5JZHgrKztcclxuICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgICAgICBwb3MgPSBwb3MgKyAoY3VycmVudFRva2VuLmxlbmd0aCArIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcGFyc2UgdGhlIGRhdGEgYXJyYXlcclxuICAgICAgICBsZXQgZGF0YTogc3RyaW5nO1xyXG4gICAgICAgIGlmIChpc0RiY3NBbHBoYSkge1xyXG4gICAgICAgICAgZGF0YSA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0Qih0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MpLCA8bnVtYmVyPih2ZWNTaXplICogdGhpcy5fY2VsbFNpemUpKTtcclxuICAgICAgICAgIHBvcyA9IHBvcyArIGRhdGEubGVuZ3RoICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBkYXRhID0gdGhpcy5fb3JpZ2luYWxmbGF0RGF0YS5zdWJzdHIocG9zLCA8bnVtYmVyPih2ZWNTaXplICogdGhpcy5fY2VsbFNpemUpKTtcclxuICAgICAgICAgIHBvcyA9IDxudW1iZXI+KDxudW1iZXI+cG9zICsgdmVjU2l6ZSAqIHRoaXMuX2NlbGxTaXplICsgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhbGxvY2F0ZSB0aGUgZGF0YUJ1ZlxyXG4gICAgICAgIHRoaXMuX2RhdGFCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcihkYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgJiYgdGhpcy5fY2VsbHNBdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLk1FTU8gJiYgdGhpcy5fY2VsbHNBdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpXHJcbiAgICAgICAgICB0aGlzLl9kYXRhQnVmLkFwcGVuZChkYXRhKTtcclxuXHJcbiAgICAgICAgLy8gcGFyc2UgdGhlIG51bGwgYnVmXHJcbiAgICAgICAgbGV0IG51bGxCdWY6IHN0cmluZyA9IHRoaXMuX29yaWdpbmFsZmxhdERhdGEuc3Vic3RyKHBvcywgPG51bWJlcj52ZWNTaXplKTtcclxuICAgICAgICBwb3MgPSA8bnVtYmVyPig8bnVtYmVyPnBvcyArIHZlY1NpemUgKyAxKTtcclxuXHJcbiAgICAgICAgLy8gc2F2ZSB0aGUgbnVsbEJ1ZlxyXG4gICAgICAgIHRoaXMuX251bGxCdWYgPSBuZXcgU3RyaW5nQnVpbGRlcihudWxsQnVmKTtcclxuXHJcbiAgICAgICAgLy8gY2hlY2sgdGhlIHR5cGUgb2YgdGhlIGNlbGxzXHJcbiAgICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmIHRoaXMuX2NlbGxzQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHZlY1NpemU7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXNOdWxsOiBib29sZWFuID0gbnVsbEJ1Zi5jaGFyQXQoaSkgPiAnXFwwJztcclxuICAgICAgICAgICAgLy8gbnVtZXJpYyB0eXBlIGFyZSBzZW50IGFzIE5VTV9UWVBFIHNvIHdlIHRyYW5zbGF0ZSB0aGVtIHRvIGhleFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpXHJcbiAgICAgICAgICAgICAgdGhpcy5fY2VsbHMucHVzaChuZXcgQ2VsbEVsZW1lbnQoU3RyVXRpbC5zdHJpbmdUb0hleGFEdW1wKGRhdGEuc3Vic3RyKDxudW1iZXI+KDxudW1iZXI+aSAqIHRoaXMuX2NlbGxTaXplKSwgPG51bWJlcj50aGlzLl9jZWxsU2l6ZSksIDIpLCBpc051bGwpKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PKSB7XHJcbiAgICAgICAgICAgICAgLy8gUUNSIDQyOTQ0NSBzaW5jZSB0aGUgdmVjdG9yIGlzIGVuY29kZWQgdG8gYmFzZTY0L2hleCB3aGVuIGl0IGlzIHJlY2l2ZWQgZnJvbSB0aGVcclxuICAgICAgICAgICAgICAvLyBzZXJ2ZXIgd2UgbXVzdCB1c2UgdGhlIGNvcnJlY3QgY2hhci1zZXQgd2hlbiByZWNpdmluZyB2ZWN0b3Igb2YgYWxwaGEgb3IgbWVtbyBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgICAgICBsZXQgY2VsbERhdGE6IHN0cmluZztcclxuICAgICAgICAgICAgICBpZiAoaXNEYmNzQWxwaGEpXHJcbiAgICAgICAgICAgICAgICBjZWxsRGF0YSA9IFV0aWxTdHJCeXRlTW9kZS5taWRCKGRhdGEsIDxudW1iZXI+KDxudW1iZXI+aSAqIHRoaXMuX2NlbGxTaXplKSwgPG51bWJlcj50aGlzLl9jZWxsU2l6ZSk7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgY2VsbERhdGEgPSBkYXRhLnN1YnN0cig8bnVtYmVyPig8bnVtYmVyPmkgKiB0aGlzLl9jZWxsU2l6ZSksIDxudW1iZXI+dGhpcy5fY2VsbFNpemUpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5fZW5jb2RpbmcgIT09IG51bGwgJiYgIWlzRmxhdERhdGFUcmFuc2xhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYmE6IFVpbnQ4QXJyYXkgPSBJU09fODg1OV8xX0VuY29kaW5nLklTT184ODU5XzEuR2V0Qnl0ZXMoY2VsbERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICBjZWxsRGF0YSA9IHRoaXMuX2VuY29kaW5nLkdldFN0cmluZyhiYSwgMCwgYmEubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChTeXN0ZW1FeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fZGF0YUJ1Zi5BcHBlbmQoY2VsbERhdGEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NlbGxzLnB1c2gobmV3IENlbGxFbGVtZW50KGNlbGxEYXRhLCBpc051bGwpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgICAgICAgIGxldCBjZWxsRGF0YTogc3RyaW5nID0gZGF0YS5zdWJzdHIoPG51bWJlcj4oPG51bWJlcj5pICogdGhpcy5fY2VsbFNpemUpLCA8bnVtYmVyPnRoaXMuX2NlbGxTaXplKTtcclxuICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGJhOiBVaW50OEFycmF5ID0gSVNPXzg4NTlfMV9FbmNvZGluZy5JU09fODg1OV8xLkdldEJ5dGVzKGNlbGxEYXRhKTtcclxuICAgICAgICAgICAgICAgIGNlbGxEYXRhID0gRW5jb2RpbmcuVW5pY29kZS5HZXRTdHJpbmcoYmEsIDAsIGJhLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNhdGNoIChTeXN0ZW1FeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fZGF0YUJ1Zi5BcHBlbmQoY2VsbERhdGEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NlbGxzLnB1c2gobmV3IENlbGxFbGVtZW50KGNlbGxEYXRhLCBpc051bGwpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy5fY2VsbHMucHVzaChuZXcgQ2VsbEVsZW1lbnQoZGF0YS5zdWJzdHIoPG51bWJlcj4oPG51bWJlcj5pICogdGhpcy5fY2VsbFNpemUpLCA8bnVtYmVyPnRoaXMuX2NlbGxTaXplKSwgaXNOdWxsKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gaW4gY2FzZSBvZiB2ZWN0b3JzIG9yZiB2ZWN0b3JzIG9yIHZlY3RvcnMgb2YgYmxvYnMgd2UgbmVlZCB0byB0cmVhdCB0aGVtIGRpZmZlcmVudGxseVxyXG4gICAgICAgICAgLy8gZWFjaCBibG9iIG9yIHZlY3RvciBpcyBcImZsYXR0ZW5lZCBpbiB0aGUgZW5kIG9mIHRoZSBudWxsIGJ1ZmZcclxuICAgICAgICAgIC8vIGFzIGEgc3RyaW5nIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxyXG4gICAgICAgICAgLy8gQmxvYl9TaXplLE9iakhhbmRsZSxWYXJpYW50SWR4LFR5cGUsVmVjQ2VsbEF0dHIsLi4uLmRhdGEuLi4uO25leHRfYmxvYjtcclxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBlciBhIGJsb2IgY29tZSB0byB0aGUgY2xpZW50IG5veSB2aWEgdmVjdG9yIGl0cyBmb3JtYXQgaXM6XHJcbiAgICAgICAgICAvLyBPYmpIYW5kbGUsVmFyaWFudElkeCxUeXBlLFZlY0NlbGxBdHRyO2RhdGEgdGhlcmUgZm9yIHdlIG5lZWQgdG8gbWFrZSB0aGUgYWRqdXN0bWVudHNcclxuICAgICAgICAgIC8vIGluIHRoZSBwYXJzaW5nIHByb2Nlc3MgYW5kIGluIHZlY0dldCBhbmQgaW4gdG9TdHJpbmdcclxuICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2ZWNTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgdG9rZW5zID0gU3RyVXRpbC50b2tlbml6ZSh0aGlzLl9vcmlnaW5hbGZsYXREYXRhLnN1YnN0cihwb3MpLCBcIixcIik7XHJcbiAgICAgICAgICAgIHRva2VuSWR4ID0gMDtcclxuXHJcbiAgICAgICAgICAgIC8vIHBhcnNlIGJsb2Igc2l6ZVxyXG4gICAgICAgICAgICB0b2tlbklkeCsrO1xyXG4gICAgICAgICAgICBjdXJyZW50VG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICAgICAgICBsZXQgc2l6ZTogbnVtYmVyID0gPG51bWJlcj5OTnVtYmVyLlBhcnNlKGN1cnJlbnRUb2tlbik7XHJcbiAgICAgICAgICAgIHBvcyA9IHBvcyArIChjdXJyZW50VG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAgICAgICAvLyBwYXJzZSB0aGUgcmVzdCBvZiB0aGUgYmxvYiBoZWFkZXJcclxuICAgICAgICAgICAgbGV0IGJsb2JIZWFkZXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCBHdWlDb25zdGFudHMuQkxPQl9QUkVGSVhfRUxFTUVOVFNfQ09VTlQ7IGorKykge1xyXG4gICAgICAgICAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgICAgICAgICBibG9iSGVhZGVyID0gYmxvYkhlYWRlciArIGN1cnJlbnRUb2tlbjtcclxuICAgICAgICAgICAgICBwb3MgPSBwb3MgKyAoY3VycmVudFRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoaiAhPT0gR3VpQ29uc3RhbnRzLkJMT0JfUFJFRklYX0VMRU1FTlRTX0NPVU5UIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgYmxvYkhlYWRlciA9IGJsb2JIZWFkZXIgKyBcIixcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBjZWxsRGF0YTogc3RyaW5nID0gdGhpcy5fb3JpZ2luYWxmbGF0RGF0YS5zdWJzdHIocG9zLCA8bnVtYmVyPnNpemUpO1xyXG5cclxuICAgICAgICAgICAgLy8gYWRkIHRoZSBjZWxsIHRvIHRoZSB2ZWNcclxuICAgICAgICAgICAgbGV0IGlzTnVsbDogYm9vbGVhbiA9IG51bGxCdWYuY2hhckF0KGkpID4gJ1xcMCc7XHJcbiAgICAgICAgICAgIHRoaXMuX2NlbGxzLnB1c2gobmV3IENlbGxFbGVtZW50KGNlbGxEYXRhLCBpc051bGwsIGJsb2JIZWFkZXIpKTtcclxuICAgICAgICAgICAgcG9zID0gPG51bWJlcj4oPG51bWJlcj5wb3MgKyBzaXplICsgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIGRhdGFCdWYgd2FzIG5vdCBidWlsdCBkdXJpbmcgXCJjZWxscyBncm93dGhcIiAtIGFsbG9jYXRlIGl0IHJpZ2h0IG5vdywgaW4gb25lLXNob3QuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RhdGFCdWYuTGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgdGhpcy5fZGF0YUJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKGRhdGEubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBWZWN0b3JUeXBlLmluaXQgd3JvbmcgdmVjdG9yIGZvcm1hdFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gYSBmbGF0dGVuIGJsb2Igc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdlIGFzc3VtZSBoZXJlIHRoYXQgYWxsIGNoYW5nZXMgYXJlIGR5bmFtaWNhbGx5IHNhdmUgaW50byB0aGVcclxuICAvLy8gICBidWZmcyBlYWNoIHRpbWUgdGhlIHZlY3RvciBjaGFuZ2VzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlczogc3RyaW5nID0gXCJcIjsgLy8gdGFrZVxyXG5cclxuICAgIC8vIGxhenkgZXZhbHVhdGlvbiBpZiB0aGUgdmVjdG9yIHdhcyBub3QgaW5pdGlhbGl6ZWQgaXQgd2Fzbid0IGNoYW5nZWQgc28gcmV0dXJuIHRoZSBvcmlnaW5hbFxyXG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIC8vIGJ1aWxkIHRoZSBoZWFkZXJzXHJcbiAgICAgIHJlcyA9IHJlcyArIDAgKyBcIixcIiArIDAgKyBcIixcIiArIFwiMFwiICsgXCIsXCIgKyA8c3RyaW5nPnRoaXMuX2NlbGxzQXR0ciArIFwiLFwiICsgdGhpcy5fY2VsbENvbnRlbnRUeXBlICsgXCI7XCI7XHJcbiAgICAgIC8vIHRoZSBibG9iIGhlYWRlciBvZiB0aGlzIGJsb2JcclxuICAgICAgcmVzID0gcmVzICsgdGhpcy5idWlsZEhlYWRlcnNTdHJpbmcoKTtcclxuICAgICAgLy8gKyBkYXRhQnVmLnRvU3RyaW5nKCkgKyBcIixcIiArIG51bGxCdWYudG9TdHJpbmcoKSArIFwiLFwiO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgbGV0IGRhdGFCdWZDaGFyQXJyeTogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPih0aGlzLl9kYXRhQnVmLkxlbmd0aCAqIDIpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fZGF0YUJ1Zi5MZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgICAgZGF0YUJ1ZkNoYXJBcnJ5W2kgKiAyXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHRoaXMuX2RhdGFCdWYuZ2V0X0l0ZW0oaSkuY2hhckNvZGVBdCgwKSkgJSAyNTYpO1xyXG4gICAgICAgICAgZGF0YUJ1ZkNoYXJBcnJ5W2kgKiAyICsgMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh0aGlzLl9kYXRhQnVmLmdldF9JdGVtKGkpLmNoYXJDb2RlQXQoMCkpIC8gMjU2KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzID0gcmVzICsgTlN0cmluZy5Gcm9tQ2hhcnMoZGF0YUJ1ZkNoYXJBcnJ5KSArIFwiLFwiO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXMgPSByZXMgKyB0aGlzLl9kYXRhQnVmICsgXCIsXCI7XHJcblxyXG4gICAgICByZXMgPSByZXMgKyB0aGlzLl9udWxsQnVmICsgXCIsXCI7XHJcblxyXG4gICAgICAvLyBpbiBibG9icyBhbmQgdmVjdG9yIHdlIGRvIG5vdCB1cGRhdGVcclxuICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUilcclxuICAgICAgICByZXMgPSByZXMgKyB0aGlzLmdldEJsb2JzQnVmKCk7XHJcblxyXG4gICAgICByZXMgPSByZXMgKyBWZWN0b3JUeXBlLkJMT0JfVEFCTEVfU1RSO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICByZXMgPSB0aGlzLl9vcmlnaW5hbGZsYXREYXRhO1xyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgY2VsbHMgYXR0cmlidXRlICggdGhlIHNhbmUgZm9yIGFsbCBjZWxscyBpbiB0aGUgdmVjdG9yKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q2VsbHNBdHRyKCk6IFN0b3JhZ2VBdHRyaWJ1dGUge1xyXG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZClcclxuICAgICAgcmV0dXJuIFZlY3RvclR5cGUuZ2V0Q2VsbHNBdHRyKHRoaXMuX29yaWdpbmFsZmxhdERhdGEpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5fY2VsbHNBdHRyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGNlbGxzIHNpemUgKCBzYW1lIHNpemUgZm9yIGFsbCBjZWxscylcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldENlbGxTaXplKCk6IG51bWJlciB7XHJcbiAgICBsZXQgcmV0VmFsOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZClcclxuICAgICAgcmV0VmFsID0gVmVjdG9yVHlwZS5nZXRDZWxsU2l6ZSh0aGlzLl9vcmlnaW5hbGZsYXREYXRhKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0VmFsID0gdGhpcy5fY2VsbFNpemU7XHJcblxyXG4gICAgLy8gdW5pY29kZSBjZWxsIHNpemUgaXMgc2F2ZWQgaW50ZXJuYWxseSBhcyBieXRlIGxlbmd0aCBzaW5jZSB0aGF0IGlzIHRoZSB3YXkgdGhlIHNlcnZlciBzYXZlIGl0XHJcbiAgICBpZiAodGhpcy5nZXRDZWxsc0F0dHIoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKVxyXG4gICAgICByZXRWYWwgPSBNYXRoLmZsb29yKHJldFZhbCAvIDIpO1xyXG5cclxuICAgIHJldHVybiByZXRWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmVjdG9yIHNpemVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFZlY1NpemUoKTogbnVtYmVyIHtcclxuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpXHJcbiAgICAgIHJldHVybiBWZWN0b3JUeXBlLmdldFZlY1NpemUodGhpcy5fb3JpZ2luYWxmbGF0RGF0YSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiA8bnVtYmVyPnRoaXMuX2NlbGxzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGdpdmUgY2VsbCBjZWxscyBpbmRleGVzIHN0YXJ0IGZyb20gMSB3cm9uZyBpbmRleGVzIG9yIGluZGV4ZXMgdGhlIGRvZXMgbm90IGV4aXN0XHJcbiAgLy8vICAgd2lsbCByZXR1cm4gZGVmYXVsdCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj50aGUgY2VsbCBpbmRleDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2VsbCB2YWx1ZSBUT0RPOiB5YXJpdiBjaGVjayB3aXRoIHJpbmEgd2hhdCB3ZSBzaG91bGQgZG8gd2l0aFxyXG4gIC8vLyAgIGJsb2JzIGV4dHJhIGZpZWxkc1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0VmVjQ2VsbChpZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcmV0VmFsOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKGlkeCA+IDApIHtcclxuICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgIGlmICg8bnVtYmVyPmlkeCA8PSB0aGlzLmdldFZlY1NpemUoKSkge1xyXG4gICAgICAgIHJldFZhbCA9IHRoaXMuX2NlbGxzLmdldF9JdGVtKGlkeCAtIDEpLmRhdGE7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICByZXRWYWwgPSB0aGlzLl9jZWxscy5nZXRfSXRlbShpZHggLSAxKS5ibG9iRmllbGRQcmVmaXggKyBcIjtcIiArIHJldFZhbDtcclxuXHJcbiAgICAgICAgLy8gUUNSIDUwMzY5MSB0aGUgdmFsdWUgb2YgdHJ1ZSBvciBmYWxzZSBpbiB0aGUgc2VydmVyIGFyZSB0aGUgbnVtZXJpYyB2YWx1ZXMgb2YgMSBhbmQgMFxyXG4gICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlTG9naWNhbCh0aGlzLl9jZWxsc0F0dHIpKVxyXG4gICAgICAgICAgcmV0VmFsID0gKChyZXRWYWwuY2hhckF0KDApID09PSAnXFwwJykgPyBcIjBcIiA6IFwiMVwiKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2NlbGxzLmdldF9JdGVtKGlkeCAtIDEpLmlzTnVsbClcclxuICAgICAgICAgIHJldFZhbCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoIXRoaXMuX2NlbGxzSXNOdWxsRGVmYXVsdClcclxuICAgICAgICByZXRWYWwgPSB0aGlzLl9jZWxsc0RlZmF1bHRWYWw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0VmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm5zIHRoZSBjZWxsIHZhbHVlcyBvZiBhIHZlY3RvciBpbiBzdHJpbmcgYXJyYXkuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldENlbGxWYWx1ZXMoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IHJldFZhbDogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCBjZWxsVmFsdWVzOiBzdHJpbmdbXSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0VmVjU2l6ZSgpID4gMClcclxuICAgIHtcclxuICAgICAgY2VsbFZhbHVlcyA9IG5ldyBBcnJheTxzdHJpbmc+KHRoaXMuZ2V0VmVjU2l6ZSgpKTtcclxuXHJcbiAgICAgIC8vIEdldCB0aGUgdmVjdG9yIHZhbHVlXHJcbiAgICAgIGZvciAobGV0IGlkeDogbnVtYmVyID0gMDsgaWR4IDwgdGhpcy5nZXRWZWNTaXplKCk7IGlkeCsrKVxyXG4gICAgICB7XHJcbiAgICAgICAgcmV0VmFsID0gdGhpcy5fY2VsbHMuZ2V0X0l0ZW0oaWR4KS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgcmV0VmFsID0gdGhpcy5fY2VsbHMuZ2V0X0l0ZW0oaWR4KS5ibG9iRmllbGRQcmVmaXggKyBcIjtcIiArIHJldFZhbDtcclxuXHJcbiAgICAgICAgLy8gUUNSIDUwMzY5MSB0aGUgdmFsdWUgb2YgdHJ1ZSBvciBmYWxzZSBpbiB0aGUgc2VydmVyIGFyZSB0aGUgbnVtZXJpYyB2YWx1ZXMgb2YgMSBhbmQgMFxyXG4gICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlTG9naWNhbCh0aGlzLl9jZWxsc0F0dHIpKVxyXG4gICAgICAgICAgcmV0VmFsID0gKChyZXRWYWwuY2hhckF0KDApID09PSAnXFwwJykgPyBcIjBcIiA6IFwiMVwiKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2NlbGxzLmdldF9JdGVtKGlkeCkuaXNOdWxsKVxyXG4gICAgICAgICAgcmV0VmFsID0gbnVsbDtcclxuXHJcbiAgICAgICAgY2VsbFZhbHVlc1tpZHhdID0gcmV0VmFsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghdGhpcy5fY2VsbHNJc051bGxEZWZhdWx0KVxyXG4gICAge1xyXG4gICAgICAgIGNlbGxWYWx1ZXMgPSBbXHJcbiAgICAgICAgICB0aGlzLl9jZWxsc0RlZmF1bHRWYWxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjZWxsVmFsdWVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluc2VydHMgb3IgY2hhbmdlcyBhIGNlbGxzIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBjZWxsIGluZGV4IGlmIHRoZSBpbmRleCBpcyBub3Qgc2VxdWVudGlhbCBjcmVhdHMgZW1wdHkgY2VsbCB0aWxsIHRoZSBpbmRleDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdWYWx1ZVwiPnRoZSBuZXcgdmFsdWUgKCBpZiBpdCBpcyBhIGJsb2IgdHlwZSBvciB2ZWN0b3IgaXQgY29udGFpbnMgdGhlIHByZWZpeCBvZiB0aGUgY29udHJvbCBkYXRhPC9wYXJhbT5cclxuICAvLy8gPHJldHVucz4gIGZhbHNlIGlmIHRoZSBpbmRleCBpcyB3cm9uZyBvciB0aGUgdmVjdG9yIGlsbGZvcm1lZCA8L3JldHVucz5cclxuICBzZXRWZWNDZWxsKGlkeDogbnVtYmVyLCBuZXdWYWx1ZTogc3RyaW5nLCBpc051bGw6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCByZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjcmVhdGVCdWZmZXJWYWxGb3JOdW1UeXBlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgIGxldCBsb2NhbENlbGxTaXplOiBudW1iZXIgPSAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpID8gTWF0aC5mbG9vcih0aGlzLl9jZWxsU2l6ZSAvIDIpIDogdGhpcy5fY2VsbFNpemU7XHJcbiAgICAgICAgLy8gdHJ5aW5nIHRvIHNldCBudWxsIHZhbHVlIHdoZW4gbm90IGFsbG93ZWRcclxuICAgICAgICBpZiAoaXNOdWxsICYmICF0aGlzLl9hbGxvd051bGwpIHtcclxuICAgICAgICAgIGlzTnVsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLl9jZWxsc0RlZmF1bHRWYWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWR4IDw9IHRoaXMuX2NlbGxzLmxlbmd0aCkge1xyXG4gICAgICAgICAgbGV0IGN1cnI6IENlbGxFbGVtZW50ID0gdGhpcy5fY2VsbHMuZ2V0X0l0ZW0oaWR4IC0gMSk7XHJcbiAgICAgICAgICAvLyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICBpZiAoIWlzTnVsbCkge1xyXG4gICAgICAgICAgICAvLyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgYmxvYnMgYW5kIHZlY3RvcnNcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAgICAgICAgIC8vIHNldCB0aGUgZGF0YSBpbiB0aGUgY2VsbFxyXG4gICAgICAgICAgICAgIGxldCBibG9iUHJlZml4TGVuZ3RoOiBudW1iZXIgPSBCbG9iVHlwZS5ibG9iUHJlZml4TGVuZ3RoKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgICBjdXJyLmJsb2JGaWVsZFByZWZpeCA9IG5ld1ZhbHVlLnN1YnN0cigwLCBibG9iUHJlZml4TGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIHRyZWF0IGVtcHR5IGJsb2JcclxuICAgICAgICAgICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID4gYmxvYlByZWZpeExlbmd0aClcclxuICAgICAgICAgICAgICAgIGN1cnIuZGF0YSA9IG5ld1ZhbHVlLnN1YnN0cihibG9iUHJlZml4TGVuZ3RoKTtcclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBjdXJyLmRhdGEgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNpbXBsZSB0eXBlXHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIFFDUiA1MDM2OTEgdGhlIHZhbHVlIG9mIHRydWUgb3IgZmFsc2UgaW4gdGhlIHNlcnZlciBhcmUgdGhlIG51bWVyaWMgdmFsdWVzIG9mIDEgYW5kIDBcclxuICAgICAgICAgICAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUxvZ2ljYWwodGhpcy5fY2VsbHNBdHRyKSkge1xyXG4gICAgICAgICAgICAgICAgY3Vyci5kYXRhID0gKERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKG5ld1ZhbHVlKSA/IG5ldyBTdHJpbmdCdWlsZGVyKCkuQXBwZW5kKDEpLlRvU3RyaW5nKCkgOiBuZXcgU3RyaW5nQnVpbGRlcigpLkFwcGVuZCgnXFwwJykuVG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGN1cnIuZGF0YTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgY3Vyci5kYXRhID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgIC8vIG51bWVyaWMgdHlwZXMgYXJlIHJlcHJlc2VudGVkIGluIHRoZSBkYXRhIGJ1ZiBhcyBudW0gdHlwZSBzbyB3ZVxyXG4gICAgICAgICAgICAgIC8vIHRyYW5zbGF0ZSB0aGVtIGJlZm9yZSBpbnNlcnRpbmcgdGhlbSB0byB0aGUgYnVmXHJcbiAgICAgICAgICAgICAgbGV0IGRhdGFCdWZWYWw6IHN0cmluZyA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSlcclxuICAgICAgICAgICAgICAgIGRhdGFCdWZWYWwgPSBSZWNvcmRVdGlscy5ieXRlU3RyZWFtVG9TdHJpbmcoZGF0YUJ1ZlZhbCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk1FTU8pKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYmFEYXRhQnVmOiBVaW50OEFycmF5ID0gdGhpcy5fZW5jb2RpbmcuR2V0Qnl0ZXModGhpcy5fZGF0YUJ1Zi5Ub1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIGxldCBiYURhdGFCdWZWYWw6IFVpbnQ4QXJyYXkgPSB0aGlzLl9lbmNvZGluZy5HZXRCeXRlcyhkYXRhQnVmVmFsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZGF0YSBidWZcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBiYURhdGFCdWZWYWwubGVuZ3RoICYmIDxudW1iZXI+aSA8IGxvY2FsQ2VsbFNpemU7IGkrKylcclxuICAgICAgICAgICAgICAgICAgYmFEYXRhQnVmWzxudW1iZXI+KDxudW1iZXI+KGlkeCAtIDEpICogbG9jYWxDZWxsU2l6ZSkgKyBpXSA9IGJhRGF0YUJ1ZlZhbFtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBkbyBub3Qga2VlcCB0aGUgd2hvbGUgc2l6ZSBvZiB0aGUgYWxwaGFcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IGJhRGF0YUJ1ZlZhbC5sZW5ndGg7IDxudW1iZXI+aSA8IGxvY2FsQ2VsbFNpemU7IGkrKylcclxuICAgICAgICAgICAgICAgICAgYmFEYXRhQnVmWzxudW1iZXI+KDxudW1iZXI+KGlkeCAtIDEpICogbG9jYWxDZWxsU2l6ZSkgKyBpXSA9ICgodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKSA/IDMyIDogMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YUJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKHRoaXMuX2VuY29kaW5nLkdldFN0cmluZyhiYURhdGFCdWYsIDAsIGJhRGF0YUJ1Zi5sZW5ndGgpKTtcclxuICAgICAgICAgICAgICAgIGN1cnIuZGF0YSA9IHRoaXMuX2VuY29kaW5nLkdldFN0cmluZyhiYURhdGFCdWYsIDxudW1iZXI+KDxudW1iZXI+KGlkeCAtIDEpICogbG9jYWxDZWxsU2l6ZSksIDxudW1iZXI+bG9jYWxDZWxsU2l6ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGRhdGEgYnVmXHJcbiAgICAgICAgICAgICAgICAvLyBRQ1IgOTg3OTQzIHRyaW0gdGhlIHZhbHVlIGlmIGl0IGlzIGxvbmdlciB0aGUgdGhlIGNlbGwgbGVuZ3RoXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZGF0YUJ1ZlZhbC5sZW5ndGggJiYgPG51bWJlcj5pIDwgbG9jYWxDZWxsU2l6ZTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhQnVmLnNldF9JdGVtKDxudW1iZXI+KDxudW1iZXI+KGlkeCAtIDEpICogbG9jYWxDZWxsU2l6ZSkgKyBpLCBkYXRhQnVmVmFsLmNoYXJBdChpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW4gYWxwaGEgYW5kIG51bSB0eXBlIHdlIGRvIG5vdCBrZWVwIHRoZSB3aG9sZSBzaXplIG9mIHRoZSBhbHBoYS9OVU1fVFlQRVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gZGF0YUJ1ZlZhbC5sZW5ndGg7IDxudW1iZXI+aSA8IGxvY2FsQ2VsbFNpemU7IGkrKylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YUJ1Zi5zZXRfSXRlbSg8bnVtYmVyPig8bnVtYmVyPihpZHggLSAxKSAqIGxvY2FsQ2VsbFNpemUpICsgaSwgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkgPyAnICcgOiAnXFwwJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUUNSIDk4Nzk0MyB0cmltIHRoZSB2YWx1ZSBpZiBpdCBpcyBsb25nZXIgdGhlIHRoZSBjZWxsIGxlbmd0aFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTylcclxuICAgICAgICAgICAgICAgICAgY3Vyci5kYXRhID0gdGhpcy5fZGF0YUJ1Zi5Ub1N0cmluZygpLnN1YnN0cig8bnVtYmVyPig8bnVtYmVyPihpZHggLSAxKSAqIGxvY2FsQ2VsbFNpemUpLCA8bnVtYmVyPmxvY2FsQ2VsbFNpemUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIG51bGwgYnVmXHJcbiAgICAgICAgICAgIHRoaXMuX251bGxCdWYuc2V0X0l0ZW0oaWR4IC0gMSwgJ1xcMCcpO1xyXG4gICAgICAgICAgICBjdXJyLmlzTnVsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBudWxsXHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY3Vyci5kYXRhID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIC8vIHNldCB0aGUgcHJlZml4IGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYmxvYiBpcyB2ZWN0b3Igb3Igbm90XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICAgICAgY3Vyci5ibG9iRmllbGRQcmVmaXggPSBCbG9iVHlwZS5nZXRFbXB0eUJsb2JQcmVmaXgoJ1xcdTAwMDEnKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIGN1cnIuYmxvYkZpZWxkUHJlZml4ID0gQmxvYlR5cGUuZ2V0RW1wdHlCbG9iUHJlZml4KCdcXDAnKTtcclxuICAgICAgICAgICAgY3Vyci5pc051bGwgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9udWxsQnVmLnNldF9JdGVtKGlkeCAtIDEsICdcXHUwMDAxJyk7XHJcblxyXG4gICAgICAgICAgICAvLyByZWxldmFudCBvbmx5IGZvciBub25lIGJsb2JzXHJcbiAgICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IDxudW1iZXI+aSA8IGxvY2FsQ2VsbFNpemU7IGkrKylcclxuICAgICAgICAgICAgICB0aGlzLl9kYXRhQnVmLnNldF9JdGVtKDxudW1iZXI+KDxudW1iZXI+KGlkeCAtIDEpICogbG9jYWxDZWxsU2l6ZSkgKyBpLCAnXFwwJyk7XHJcblxyXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIG51bGwgYnVmXHJcbiAgICAgICAgICAgIHRoaXMuX251bGxCdWYuc2V0X0l0ZW0oaWR4IC0gMSwgJ1xcdTAwMDEnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG5ldyByZWNvcmRcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxldCBpbnNlcnRWYWw6IHN0cmluZztcclxuICAgICAgICAgIC8vIGNob29zZXMgdGhlIHZhbHVlIGluc2VydGVkIHRvIHRoZSBza2lwcGVkIGNlbGxzXHJcbiAgICAgICAgICBpZiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgICAgICAgIC8vIGFwcGVuZCB0aGUgaXMgdmVjdG9yIGZsYWdcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUilcclxuICAgICAgICAgICAgICBpbnNlcnRWYWwgPSBCbG9iVHlwZS5nZXRFbXB0eUJsb2JQcmVmaXgoJ1xcdTAwMDEnKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIGluc2VydFZhbCA9IEJsb2JUeXBlLmdldEVtcHR5QmxvYlByZWZpeCgnXFwwJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NlbGxzSXNOdWxsRGVmYXVsdClcclxuICAgICAgICAgICAgICBpbnNlcnRWYWwgPSBpbnNlcnRWYWwgKyB0aGlzLl9jZWxsc0RlZmF1bHRWYWw7IC8vIGNvbmNhdCByZWdvbGFyIGJsb2IgY250cm9sIGRhdGFcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NlbGxzSXNOdWxsRGVmYXVsdClcclxuICAgICAgICAgICAgaW5zZXJ0VmFsID0gbnVsbDtcclxuICAgICAgICAgIC8vIHNpbXBsZSBudWxsIHZhbHVlXHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGluc2VydFZhbCA9IHRoaXMuX2NlbGxzRGVmYXVsdFZhbDsgLy8gZGVmYXVsdCBzaW1wbGUgdmFsdWVcclxuXHJcbiAgICAgICAgICAvLyBRQ1IgNTAzNjkxIHRoZSB2YWx1ZSBvZiB0cnVlIG9yIGZhbHNlIGluIHRoZSBzZXJ2ZXIgYXJlIHRoZSBudW1lcmljIHZhbHVlcyBvZiAxIGFuZCAwXHJcbiAgICAgICAgICBpZiAoaW5zZXJ0VmFsICE9PSBudWxsICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVMb2dpY2FsKHRoaXMuX2NlbGxzQXR0cikpXHJcbiAgICAgICAgICAgIGluc2VydFZhbCA9IChEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbihpbnNlcnRWYWwpID8gbmV3IFN0cmluZ0J1aWxkZXIoKS5BcHBlbmQoJ1xcdTAwMDEnKS5Ub1N0cmluZygpIDogbmV3IFN0cmluZ0J1aWxkZXIoKS5BcHBlbmQoJ1xcMCcpLlRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgICAgIC8vIGNyZWF0ZSBza2lwcGVkIHJlY29yZHNcclxuICAgICAgICAgIC8vIHdoZW4gYSB2ZWN0b3IgY2VsbCBpcyBzZXQgLCBpZiB0aGUgY2VsbCBpcyBiZXlvbmQgdGhlIGV4aXN0aW5nIHZlY3Rvci5cclxuICAgICAgICAgIC8vIHdlIHdpbGwgZmlsbCB0aGUgY2VsbHMgYmV0d2VlbiB2ZWN0b3Igc2l6ZSBhbmQgc2V0IGNlbGwgd2l0aCBkZWZhdWx0IHZhbHVlLlxyXG4gICAgICAgICAgLy8gZm9yIGV4YW1wbGUgOiBpZiB2ZWN0b3Igc2l6ZSBpcyAwLCBhbmQgd2UgZG8gdmVjc2V0ICh2ZWNbNV0pLiBjZWxsIDUgbmVlZHMgdG8gYmUgc2V0XHJcbiAgICAgICAgICAvLyB3aXRoIHRoZSB2YWx1ZS4gY2VsbHMgMSB0byA0IHdpbGwgYmUgY3JlYXRlZCBhbmQgc2V0IHdpdGggdGhlIGRlZmF1bHQgdmFsdWUuXHJcbiAgICAgICAgICBsZXQgZGF0YUJ1ZlZhbDogc3RyaW5nID0gaW5zZXJ0VmFsO1xyXG5cclxuICAgICAgICAgIHdoaWxlICh0aGlzLl9jZWxscy5sZW5ndGggPCBpZHgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NlbGxzLnB1c2gobmV3IENlbGxFbGVtZW50KGluc2VydFZhbC5zdWJzdHIoVmVjdG9yVHlwZS5FTVBUWV9CTE9CX1BSRUZJWF9MRU4pLCB0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQsIGluc2VydFZhbC5zdWJzdHIoMCwgVmVjdG9yVHlwZS5FTVBUWV9CTE9CX1BSRUZJWF9MRU4pKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fZGF0YUJ1Zi5BcHBlbmQodGhpcy5nZXROdWxsU3RyaW5nKFZlY3RvclR5cGUuQkxPQl9UWVBFX1NUUlVDVF9TSVpFKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2VsbHMucHVzaChuZXcgQ2VsbEVsZW1lbnQoaW5zZXJ0VmFsLCB0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQpKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBkYXRhIGJ1ZlxyXG4gICAgICAgICAgICAgIGlmIChpbnNlcnRWYWwgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgdHlwZXMgYXJlIHJlcHJlc2VudGVkIGluIHRoZSBkYXRhIGJ1ZiBhcyBudW0gdHlwZSBzbyB3ZVxyXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNsYXRlIHRoZW0gYmVmb3JlIGluc2VydGluZyB0aGVtIHRvIHRoZSBidWZcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY3JlYXRlQnVmZmVyVmFsRm9yTnVtVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGJ1ZmZlciB2YWx1ZSBmb3IgbnVtIHR5cGUgb25seSBvbmNlLCBhbmQgdXNlIGl0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb3ZlciBhbmQgb3ZlciBhZ2FpbiBmb3IgYWxsIHRoZSBjZWxscyB0byBiZSBpbml0aWFsaXplZC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBkbyB0aGUgdHJhbnNsYXRpb24gb25seSBvbmNlIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQnVmZmVyVmFsRm9yTnVtVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFCdWZWYWwgPSBSZWNvcmRVdGlscy5ieXRlU3RyZWFtVG9TdHJpbmcoaW5zZXJ0VmFsKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGRhdGFCdWZWYWwgZWl0aGVyIGNvbnRhaW5zIG9yaWdpbmFsIGluc2VydFZhbCwgb3IgYSBzdHJpbmcgb2ZcclxuICAgICAgICAgICAgICAgIC8vIGJ5dGVTdHJlYW0gZm9yIG51bSB0eXBlcy5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFCdWYuQXBwZW5kKGRhdGFCdWZWYWwpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIGRvbid0IGFsd2F5IGtlZXAgdGhlIHdob2xlIGFscGhhXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsTGVuOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiAodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PKSlcclxuICAgICAgICAgICAgICAgICAgdmFsTGVuID0gVXRpbFN0ckJ5dGVNb2RlLmxlbkIoZGF0YUJ1ZlZhbCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHZhbExlbiA9IGRhdGFCdWZWYWwubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IHZhbExlbjsgPG51bWJlcj5pIDwgbG9jYWxDZWxsU2l6ZTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhQnVmLkFwcGVuZCgodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSA/ICcgJyA6ICdcXDAnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YUJ1Zi5BcHBlbmQodGhpcy5nZXROdWxsU3RyaW5nKGxvY2FsQ2VsbFNpemUpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBudWxsIGJ1ZlxyXG4gICAgICAgICAgICB0aGlzLl9udWxsQnVmLkluc2VydCh0aGlzLl9jZWxscy5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgICAgIHRoaXMuX2NlbGxzSXNOdWxsRGVmYXVsdCA/ICdcXHUwMDAxJyA6ICdcXDAnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gdmVjdG9yIGhhcyBiZWVuIGZpbGxlZCB0aWxsIHRoZSByZXF1ZXN0ZWQgaWR4LlxyXG4gICAgICAgICAgLy8gbm93IGl0cyB0aW1lIHRvIHNldCB0aGUgcmVxdWVzdGVkIGNlbGwuXHJcbiAgICAgICAgICByZXMgPSB0aGlzLnNldFZlY0NlbGwoaWR4LCBuZXdWYWx1ZSwgaXNOdWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChBcHBsaWNhdGlvbkV4Y2VwdGlvbikge1xyXG4gICAgICByZXMgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hhbmdlIHRoZSB2ZWN0b3IgdG8gZml0IHRoZSBkZWZpbml0aW9ucyBvZiBhIGRpZmZlcmVudCB2ZWN0b3IgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZpZWxkXCI+dGhlIG5ldyBmaWVsZDwvcGFyYW0+XHJcbiAgYWRqdXN0VG9GaXQoZmllbGQ6IEZpZWxkRGVmKTogdm9pZCB7XHJcbiAgICBpZiAoZmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIGxldCBzcmNBdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gdGhpcy5nZXRDZWxsc0F0dHIoKTtcclxuICAgICAgbGV0IGRzdEF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBmaWVsZC5nZXRDZWxsc1R5cGUoKTtcclxuXHJcbiAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZShzcmNBdHRyLCBkc3RBdHRyKSkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICAvLyB0cmltIGRhdGEgaWYgbmVlZGVkICggb25seSBmb3IgYWxwaGEgb3IgbWVtbylcclxuICAgICAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKHNyY0F0dHIpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShkc3RBdHRyKSkge1xyXG4gICAgICAgICAgICBsZXQgZHN0U2l6ZUluQ2hhcnM6IG51bWJlciA9IGZpZWxkLmdldFZlY0NlbGxzU2l6ZSgpO1xyXG4gICAgICAgICAgICBsZXQgc3JjU2l6ZUluQ2hhcnM6IG51bWJlciA9ICgodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpID8gTWF0aC5mbG9vcih0aGlzLl9jZWxsU2l6ZSAvIDIpIDogdGhpcy5fY2VsbFNpemUpO1xyXG4gICAgICAgICAgbGV0IGlzQnl0ZU1vZGU6IGJvb2xlYW4gPSBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVBbHBoYShkc3RBdHRyKTtcclxuXHJcbiAgICAgICAgICBpZiAoc3JjU2l6ZUluQ2hhcnMgIT09IGRzdFNpemVJbkNoYXJzKSB7XHJcbiAgICAgICAgICAgIGxldCBhZGpEYXRhOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdvZXMgb3ZlciBhbGwgY2VsbHMgaW4gdGhlIHZlY3RvclxyXG4gICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZHN0U2l6ZUluQ2hhcnM7IGkgPSBpICsgMSkge1xyXG4gICAgICAgICAgICAgIGxldCBjdXJyOiBDZWxsRWxlbWVudCA9IHRoaXMuX2NlbGxzLmdldF9JdGVtKGkpO1xyXG4gICAgICAgICAgICAgIC8vIHRyaW0gaXMgbmVlZGVkXHJcbiAgICAgICAgICAgICAgaWYgKCFjdXJyLmlzTnVsbCkgeyAvLyB1bmljb2RlIGNlbGwgc2l6ZSBhcmUgc2F2ZWQgaW50ZXJuYWxseSBhcyBieXRlIGxlbmd0aCB3aGlsZSB0aGUgZmllbGQgcmV0dXJucyBjaGFyXHJcbiAgICAgICAgICAgICAgICAvLyBsZW5ndGhcclxuICAgICAgICAgICAgICAgIGlmIChzcmNTaXplSW5DaGFycyA+IGRzdFNpemVJbkNoYXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc0J5dGVNb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnIuZGF0YSA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0QihjdXJyLmRhdGEsIGRzdFNpemVJbkNoYXJzKTtcclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnIuZGF0YSA9IGN1cnIuZGF0YS5zdWJzdHIoMCwgZHN0U2l6ZUluQ2hhcnMpO1xyXG4gICAgICAgICAgICAgICAgICBhZGpEYXRhLkFwcGVuZChjdXJyLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gcGFkZGluZyBpcyBuZWVkZWRcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdG1wRGF0YTogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRtcERhdGEuQXBwZW5kKGN1cnIuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRhTGVuOiBudW1iZXIgPSBpc0J5dGVNb2RlID8gVXRpbFN0ckJ5dGVNb2RlLmxlbkIoY3Vyci5kYXRhKSA6IGN1cnIuZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBwYWQgd2l0aCBibGFua3NcclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgajogbnVtYmVyID0gZGF0YUxlbjsgaiA8IGRzdFNpemVJbkNoYXJzOyBqID0gaiArIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgdG1wRGF0YS5BcHBlbmQoJyAnKTtcclxuICAgICAgICAgICAgICAgICAgYWRqRGF0YS5BcHBlbmQodG1wRGF0YS5Ub1N0cmluZygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgZGF0YSBpbiB0aGUgdmVjdG9yIGNlbGxcclxuICAgICAgICAgICAgICAgICAgY3Vyci5kYXRhID0gdG1wRGF0YS5Ub1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCB0bXBEYXRhOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCBkc3RTaXplSW5DaGFyczsgaiA9IGogKyAxKVxyXG4gICAgICAgICAgICAgICAgICB0bXBEYXRhLkFwcGVuZCgnXFwwJyk7XHJcbiAgICAgICAgICAgICAgICBhZGpEYXRhLkFwcGVuZCh0bXBEYXRhLlRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgZGF0YSBpbiB0aGUgdmVjdG9yIGNlbGxcclxuICAgICAgICAgICAgICAgIGN1cnIuZGF0YSA9IHRtcERhdGEuVG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0vLyBlbmQgbG9vcFxyXG4gICAgICAgICAgICB0aGlzLl9kYXRhQnVmID0gYWRqRGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFFDUiA3NDc4MDEgaW4gdGhlIGZpbGVkIHRoZSBzaXplIG9mIG51bWVyaWMvZGF0ZS90aW1lIGlzIHRoaWVyIGhleCBzaXplXHJcbiAgICAgICAgLy8gd2hlcmVhcyBoZXJlIGl0IGlzIHRoZWlyIE5VTV9UWVBFIHNpemVcclxuICAgICAgICBsZXQgbmV3U2l6ZTogbnVtYmVyID0gZmllbGQuZ2V0VmVjQ2VsbHNTaXplKCk7XHJcblxyXG4gICAgICAgIC8vIGNoYW5nZSB0aGUgaGVhZGVycyBkYXRhIHN1Y2ggYXMgY2VsbCB0eXBlIGFuZCBjZWxscyBzaXplXHJcbiAgICAgICAgdGhpcy5fY2VsbHNBdHRyID0gZmllbGQuZ2V0Q2VsbHNUeXBlKCk7XHJcbiAgICAgICAgdGhpcy5fY2VsbFNpemUgPSA8bnVtYmVyPigodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpID8gKG5ld1NpemUgKiAyKSA6IG5ld1NpemUpO1xyXG4gICAgICAgIHRoaXMuX2NlbGxzRGVmYXVsdFZhbCA9IGZpZWxkLmdldENlbGxEZWZ1YWx0VmFsdWUoKTtcclxuICAgICAgICB0aGlzLl9jZWxsc0lzTnVsbERlZmF1bHQgPSBmaWVsZC5pc051bGxEZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5fYWxsb3dOdWxsID0gZmllbGQuTnVsbEFsbG93ZWQ7XHJcbiAgICAgICAgdGhpcy5fb3JpZ2luYWxmbGF0RGF0YSA9IHRoaXMudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFZlY3RvclR5cGUuYWRqdXN0VG9GaXQgdmVjdG9yIGJhc2ljIHR5cGVzIGRvZXMgbm90IGFncmVlXCIpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiAgVmVjdG9yVHlwZS5hZGp1c3RUb0ZpdCBcIiArIGZpZWxkLmdldE5hbWUoKSArIFwiIGlzIG5vdCBvZiB0eXBlIHZlY3RvclwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB1cGRhdGUgdGhlIHZlYyBzaXplIGluIHRoZSBoZWFkZXJzIGJ1ZlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj50aGUgbmV3IHNpemU8L3BhcmFtPlxyXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzOiBzdHJpbmcgPSBWZWN0b3JUeXBlLkJMT0JfVEFCTEVfU1RSICsgVmVjdG9yVHlwZS5WRUNUT1JfU1RSICsgXCIsXCIgKyBWZWN0b3JUeXBlLlZFUlNJT04gKyBcIixcIiArIDEgKyBcIixcIiArIDxzdHJpbmc+dGhpcy5fY2VsbHNBdHRyICsgXCIsXCI7XHJcbiAgICByZXMgPSByZXMgKyB0aGlzLl9jZWxsU2l6ZSArIFwiLFwiO1xyXG5cclxuICAgIC8vIGFwcGVuZCB0aGUgZGVmYXVsdCB2YWx1ZVxyXG4gICAgbGV0IGRlZjogc3RyaW5nID0gXCJcIjtcclxuICAgIGlmICh0aGlzLl9jZWxsc0RlZmF1bHRWYWwgIT09IG51bGwpXHJcbiAgICAgIGlmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fCB0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSlcclxuICAgICAgICBkZWYgPSBSZWNvcmRVdGlscy5ieXRlU3RyZWFtVG9TdHJpbmcodGhpcy5fY2VsbHNEZWZhdWx0VmFsKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGRlZiA9IHRoaXMuX2NlbGxzRGVmYXVsdFZhbDtcclxuXHJcbiAgICAvLyBpbiBzdHJpbmcgd2UgZG8gbm90IGtlZXAgdGhlIGZ1bGwgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW4gYnJ3b3NlciBjbGllbnRcclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmICh0aGlzLl9jZWxsc0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk1FTU8pKVxyXG4gICAgICBkZWYgPSBkZWYgKyB0aGlzLmdldEVtcHR5U3RyaW5nKHRoaXMuX2NlbGxTaXplIC0gPG51bWJlcj5VdGlsU3RyQnl0ZU1vZGUubGVuQihkZWYpKTtcclxuICAgIGVsc2VcclxuICAgICAgZGVmID0gZGVmICsgdGhpcy5nZXRFbXB0eVN0cmluZyh0aGlzLl9jZWxsU2l6ZSAtIDxudW1iZXI+ZGVmLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gY29udGludWUgYnVpbGRpbmcgdGhlIGhlYWRlcnNcclxuICAgIHJlcyA9IHJlcyArIGRlZiArIFwiLFwiICsgKHRoaXMuX2NlbGxzSXNOdWxsRGVmYXVsdCA/IFwiMVwiIDogXCIwXCIpICsgXCIsXCI7XHJcbiAgICByZXMgPSByZXMgKyAodGhpcy5fYWxsb3dOdWxsID8gXCIxXCIgOiBcIjBcIikgKyBcIixcIiArIHRoaXMuX2NlbGxTaXplICsgXCIsXCIgKyB0aGlzLl9jZWxscy5sZW5ndGggKyBcIixcIjtcclxuICAgIHJlcyA9IHJlcyArICgodGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgdGhpcy5fY2VsbHNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSA/IFwiMVwiIDogXCIwXCIpICsgXCIsXCI7XHJcblxyXG4gICAgaWYgKHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHRoaXMuX2NlbGxzQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUilcclxuICAgICAgcmVzID0gcmVzICsgXCIwLFwiO1xyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLyByZXR1cm5zIGEgc3RyaW5nIHdpdGggc2l6ZSBudWxsIGNoYXJlY3RlcnNcclxuICBwcml2YXRlIGdldE51bGxTdHJpbmcoc2l6ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCByZXM6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHNpemU7IGkgPSBpICsgMSlcclxuICAgICAgcmVzLkFwcGVuZCgnXFwwJyk7XHJcbiAgICByZXR1cm4gcmVzLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLyByZXR1cm5zIGEgc3RyaW5nIHdpdGggc2l6ZSBibGFuayBjaGFyZWN0ZXJzXHJcbiAgcHJpdmF0ZSBnZXRFbXB0eVN0cmluZyhzaXplOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlczogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc2l6ZTsgaSA9IGkgKyAxKVxyXG4gICAgICByZXMuQXBwZW5kKCcgJyk7XHJcbiAgICByZXR1cm4gcmVzLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ29lcyBvdmVyIHRoZSBjZWxscyBvZiB0aGUgdmVjdG9ycyBhbmQgYnVpbGRzIHRoZSBkYXRhIGJ1ZiBvZiBibG9icyBzaW5jZSBpdCBpcyB0aGUgb25seSB0aGluZyBub3RcclxuICAvLy8gICB1cGRhdGVkIGR5bmFtaWNhbGx5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGdldEJsb2JzQnVmKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9jZWxscy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgZGF0YTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgbGV0IGJsb2JTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgICBsZXQgY3VycjogQ2VsbEVsZW1lbnQgPSB0aGlzLl9jZWxscy5nZXRfSXRlbShpKTtcclxuXHJcbiAgICAgIGlmIChjdXJyLmRhdGEgIT09IG51bGwpIHtcclxuICAgICAgICBkYXRhID0gY3Vyci5kYXRhO1xyXG4gICAgICAgIGJsb2JTaXplID0gZGF0YS5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlcy5BcHBlbmQoYmxvYlNpemUpO1xyXG4gICAgICByZXMuQXBwZW5kKFwiLFwiICsgY3Vyci5ibG9iRmllbGRQcmVmaXggKyBcIixcIiArIGRhdGEgKyBcIjtcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHJlcyArIFwiLFwiKTtcclxuICB9XHJcblxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAvKiBzdGF0aWMgdXRpbGl0eSBtZXRob2RzICovXHJcbiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlcyB0aGUgY2VsbCBhdHRyaWJ1dGUgb2YgdGhlIHZlY3RvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJibG9iXCI+YSB2ZWN0b3IgaW4gYSBmbGF0dGVuZWQgZm9ybWF0PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGF0dCB0aGUgdGhlIHZlY3RvcidzIGNlbGxzIGF0dHJpYnV0ZTwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0Q2VsbHNBdHRyKGJsb2I6IHN0cmluZyk6IFN0b3JhZ2VBdHRyaWJ1dGUge1xyXG4gICAgaWYgKFZlY3RvclR5cGUudmFsaWRhdGVCbG9iQ29udGVudHMoYmxvYikpIHtcclxuICAgICAgbGV0IHRva2Vuczogc3RyaW5nW10gPSBTdHJVdGlsLnRva2VuaXplKGJsb2Iuc3Vic3RyKEJsb2JUeXBlLmJsb2JQcmVmaXhMZW5ndGgoYmxvYikpLCBcIixcIik7XHJcblxyXG4gICAgICAvLyBza2lwIHRoZSBNR0JUTUdWRUNcclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIHZlcnNpb25cclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIENvbHVtbnNDb3VudF9cclxuXHJcbiAgICAgIC8vIHRoZSBuZXh0IHRva2VuIGlzIHRoZSBjZWxscyBhdHRyaWJ1dGVcclxuICAgICAgcmV0dXJuIDxTdG9yYWdlQXR0cmlidXRlPnRva2Vuc1szXS5jaGFyQXQoMCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIHN0YXRpYyBnZXRDZWxsc0F0dHIgdGhlIGJsb2IgaXMgaW4gdGhlIHdyb25nIGZvcm1hdFwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZXMgdGhlIHNpemUgb2YgZWFjaCBjZWxsIGluIHRoZSB2ZWN0b3IgYWxsIGNlbGwgaGFzIHRoZSBzYW1lIHNpemUgZXhjZXB0IHdoZW4gdGhlIHZlY3RvciBjZWxscyBhcmVcclxuICAvLy8gICBvZiB0eXBlIGJsb2Igb3IgdmVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJsb2JcIj5hIHZlY3RvciBpbiBhIGZsYXR0ZW5lZCBmb3JtYXQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGNlbGxzIHNpemUgb3IgLTEgaWYgdGhlcmUgaXMgZW5jb2RpbmcgcHJvYmxlbTwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0Q2VsbFNpemUoYmxvYjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCBjZWxsc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBWZWN0b3JUeXBlLmdldENlbGxzQXR0cihibG9iKTtcclxuICAgIGlmIChjZWxsc1R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiBjZWxsc1R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgbGV0IHRva2Vuczogc3RyaW5nW10gPSBTdHJVdGlsLnRva2VuaXplKGJsb2Iuc3Vic3RyKEJsb2JUeXBlLmJsb2JQcmVmaXhMZW5ndGgoYmxvYikpLCBcIixcIik7XHJcblxyXG4gICAgICAvLyBza2lwIHRoZSBNR0JUTUdWRUNcclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIHZlcnNpb25cclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIENvbHVtbnNDb3VudF9cclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIGNlbGxzIHR5cGVcclxuXHJcbiAgICAgIC8vIHRoZSBuZXh0IGVsZW1lbnQgaXMgdGhlIGNlbGxzIHNpemVcclxuICAgICAgcmV0dXJuIE5OdW1iZXIuUGFyc2UodG9rZW5zWzRdKTtcclxuICAgIH1cclxuICAgIGVsc2UgeyAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT5cclxuICAgICAgcmV0dXJuIDIxNDc0ODM2NDc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2VzIHRoZSBzaXplIG9mIHRoZSB2ZWN0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYmxvYlwiPmEgdmVjdG9yIGluIGEgZmxhdHRlbmVkIGZvcm1hdDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc2l6ZSBvZiB0aGUgdmVjdG9yPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRWZWNTaXplKGJsb2I6IHN0cmluZyk6IG51bWJlciB7XHJcblxyXG4gICAgaWYgKFZlY3RvclR5cGUudmFsaWRhdGVCbG9iQ29udGVudHMoYmxvYikpIHtcclxuICAgICAgbGV0IHBvczogbnVtYmVyID0gQmxvYlR5cGUuYmxvYlByZWZpeExlbmd0aChibG9iKTtcclxuICAgICAgbGV0IHRva2Vuczogc3RyaW5nW10gPSBTdHJVdGlsLnRva2VuaXplKGJsb2Iuc3Vic3RyKHBvcyksIFwiLFwiKTtcclxuXHJcbiAgICAgIC8vIHNraXAgdGhlIE1HQlRNR1ZFQ1xyXG4gICAgICBwb3MgPSBwb3MgKyAodG9rZW5zWzBdLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgLy8gc2tpcCB0aGUgdmVyc2lvblxyXG4gICAgICBwb3MgPSBwb3MgKyAodG9rZW5zWzFdLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgLy8gc2tpcCB0aGUgQ29sdW1uc0NvdW50X1xyXG4gICAgICBwb3MgPSBwb3MgKyAodG9rZW5zWzJdLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgLy8gc2tpcCB0aGUgY2VsbHMgdHlwZVxyXG4gICAgICBwb3MgPSBwb3MgKyAodG9rZW5zWzNdLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgLy8gc2tpcCB0aGUgY2VsbHMgc2l6ZVxyXG4gICAgICBsZXQgY2VsbHNTaXplOiBzdHJpbmcgPSB0b2tlbnNbNF07XHJcbiAgICAgIHBvcyA9IHBvcyArIChjZWxsc1NpemUubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAvLyBza2lwIHRoZSBjZWxsIGRlZmF1bHQgdmFsdWUgYW5kIHJlLWluaXQgdGhlIHRva2VuaXplclxyXG4gICAgICAvLyBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBtYXkgY29udGFpbiB0aGUgZGVsaW1ldGVyIGNoYXJlY3RlciBhcyBkYXRhXHJcbiAgICAgIHBvcyA9IHBvcyArIChOTnVtYmVyLlBhcnNlKGNlbGxzU2l6ZSkgKyAxKTtcclxuICAgICAgdG9rZW5zID0gU3RyVXRpbC50b2tlbml6ZShibG9iLnN1YnN0cihwb3MpLCBcIixcIik7XHJcblxyXG4gICAgICAvLyBza2lwIGlzIGNlbGwgbnVsbCBkZWZhdWx0XHJcblxyXG4gICAgICAvLyBza2lwIGlzIG51bGwgYWxsb3dlZFxyXG5cclxuICAgICAgLy8gc2tpcCBjb2x1bW5zIHRvdGFsIGxlbmd0aFxyXG5cclxuICAgICAgLy8gdGhlIG5leHQgZWxlbWVudCBpcyB0aGUgdmVjdG9yIHNpemVcclxuICAgICAgcmV0dXJuIE5OdW1iZXIuUGFyc2UodG9rZW5zWzNdKTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIHN0YXRpYyBnZXRWZWNTaXplIHRoZSBibG9iIGlzIGluIHRoZSB3cm9uZyBmb3JtYXRcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2sgaWYgZmxhdERhdGEgY29udGVudCB3YXMgdHJhbnNsYXRlZCB0byB1bmljb2RlIG9yIG5vdC4gZmxhdERhdGEgY29udGFpbnMgdGhlIHZlY3RvcidzIGNlbGxzIGluIGZsYXRcclxuICAvLy8gICAobm9uLWFycmF5KSBmb3JtYXQuIFRoaXMgaXMgaG93IHRoZSBzZXJ2ZXIgc2VuZHMgdXMgdGhlIGRhdGEuIEhvd2V2ZXIgdGhlIHNlcnZlciBkb2VzIG5vdCBzZW5kIGl0IHRvIHVzXHJcbiAgLy8vICAgaW4gYSBVTklDT0RFIGZvcm1hdC4gVGh1cyB3ZSB0cmFuc2xhdGUgaXQgdG8gdW5pY29kZSBkdXJpbmcgdGhlIGZpcnN0IHRpbWUgd2UgXCJkZS1zZXJpYWxpemVcIiB0aGVcclxuICAvLy8gICBmbGF0LWRhdGEgaW50byBhIHZlY3Rvci4gRHVyaW5nIHRoZSBkZS1zZXJpYWxpemF0aW9uIG9wZXJhdGlvbiBkdXJpbmcgdGhlIGZpcnN0IHRpbWUgd2UgXCJkZS1zZXJpYWxpemVcIlxyXG4gIC8vLyAgIHRoZSBmbGF0LWRhdGEgaW50byBhIHZlY3Rvci4gRHVyaW5nIHRoZSBkZS1zZXJpYWxpemF0aW9uIG9wZXJhdGlvbiB3ZSBtb2RpZnkgdGhlIEJMT0ItVEFCTGUgZXllIGNhdGNoZXJcclxuICAvLy8gICBmcm9tIHVwcGVyIGNhc2UgdG8gbG93ZXIgY2FzZSwgdGhpcyB3YXkgd2Uga25vdyBpZiBhIHRyYW5zbGF0aW9uIHdhcyBkb25lIG9yIGlzIG5lZWRlZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmFtZVwiPmZsYXREYXRhIFRoZSB2ZWN0b3IncyBmbGF0IGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gVFJVRSBpZiB0aGUgZmxhdCBkYXRhIGlzIGFscmVhZHkgaW4gdW5pY29kZSBmb3JtYXQ8L3JldHVybnM+XHJcbiAgaXNVbmljb2RlKGZsYXREYXRhOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBzdGFydDogbnVtYmVyID0gQmxvYlR5cGUuYmxvYlByZWZpeExlbmd0aChmbGF0RGF0YSk7XHJcbiAgICBsZXQgY2F0Y2hlcjogc3RyaW5nID0gZmxhdERhdGEuc3Vic3RyKHN0YXJ0LCBWZWN0b3JUeXBlLkJMT0JfVEFCTEVfU1RSX0xFTik7XHJcbiAgICByZXR1cm4gKGNhdGNoZXIgPT09IFZlY3RvclR5cGUuQkxPQl9UQUJMRV9TVFIpO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICB0aGlzIGlubmVyIGNsYXNzIHJlcHJlc2VudHMgYSBjZWxsIGluIHRoZSBtYWdpYyB2ZWN0b3IgZWFjaCBkYXRhIHRoYXQgdGhlIG1hZ2ljIHZlY3RvciBrZWVwcyBwZXIgY2VsbFxyXG4vLy8gICB3aWxsIGJlIGtlcHQgaW4gdGhlIENlbGxFbGVtZW50XHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBDZWxsRWxlbWVudCB7XHJcbiAgYmxvYkZpZWxkUHJlZml4OiBzdHJpbmcgPSBudWxsO1xyXG4gIGRhdGE6IHN0cmluZyA9IG51bGw7XHJcbiAgaXNOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIGFsbCB0aGlzIHZhcmlhYmxlcyBhcmUgdXNlZCBvbmx5IGlmIHRoZSB2ZWN0b3IgY2VsbCBpcyBvZiB0eXBlIHZlY3RvciBvciBibG9iXHJcblxyXG4gIGNvbnN0cnVjdG9yKHZhbDogc3RyaW5nLCBpc19udWxsOiBib29sZWFuKTtcclxuICBjb25zdHJ1Y3Rvcih2YWw6IHN0cmluZywgaXNfbnVsbDogYm9vbGVhbiwgY3RybERhdGE6IHN0cmluZyk7XHJcbiAgY29uc3RydWN0b3IodmFsOiBzdHJpbmcsIGlzX251bGw6IGJvb2xlYW4sIGN0cmxEYXRhPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMilcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKHZhbCwgaXNfbnVsbCk7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEodmFsLCBpc19udWxsLCBjdHJsRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvLyBjb25zdHJ1Y3RzIGEgbmV3IGNlbGwgZWxlbWVudCBmb3IgdmVjdG9ycyB3aG9zIGNlbGxzIGFyZSBub3Qgb2YgdHlwZSBibG9iIG9yIHZlY3RvclxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCh2YWw6IHN0cmluZywgaXNfbnVsbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gdmFsO1xyXG4gICAgdGhpcy5pc051bGwgPSBpc19udWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gY29uc3RydWN0cyBhIG5ldyBjZWxsIGVsZW1lbnQgZm9yIHZlY3RvcnMgd2hvcyBjZWxscyBhcmUgb2YgdHlwZSBibG9iIG9yIHZlY3RvclxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMSh2YWw6IHN0cmluZywgaXNfbnVsbDogYm9vbGVhbiwgY3RybERhdGE6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gdmFsO1xyXG4gICAgdGhpcy5pc051bGwgPSBpc19udWxsO1xyXG4gICAgdGhpcy5ibG9iRmllbGRQcmVmaXggPSBjdHJsRGF0YTtcclxuICB9XHJcbn1cclxuIl19
@@ -85,4 +85,4 @@ export class VectorTypeBase {
85
85
  return srcBlob;
86
86
  }
87
87
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yVHlwZUJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9WZWN0b3JUeXBlQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUUsTUFBTSxPQUFPLGNBQWM7SUFNekIsTUFBTSxDQUFDLGNBQWMsR0FBVyxNQUFNLENBQUM7SUFDdkMsTUFBTSxDQUFDLGtCQUFrQixHQUFXLENBQUMsQ0FBQztJQUN0QyxNQUFNLENBQUMsVUFBVSxHQUFXLE9BQU8sQ0FBQztJQUNwQyxNQUFNLENBQUMsY0FBYyxHQUFXLENBQUMsQ0FBQztJQVFsQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBWTtRQUN0QyxJQUFJLEtBQUssR0FBWSxLQUFLLENBQUM7UUFFM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLEtBQUssR0FBVyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxTCxDQUFDO1FBQ0QsT0FB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QVEsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUMvQixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUdsQyxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBRS9DLFFBQVEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pCLEdBQUcsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUM5QixDQUFDO1lBR0QsUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV6QixJQUFJLFFBQVEsR0FBVyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUMsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQzs7WUFFQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmxvYlR5cGUgfSBmcm9tICcuL0Jsb2JUeXBlJztcclxuaW1wb3J0IHsgTk51bWJlciwgTlN0cmluZywgU3RyaW5nQnVpbGRlciB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgU3RvcmFnZUF0dHJpYnV0ZSwgU3RyVXRpbCwgVXRpbFN0ckJ5dGVNb2RlIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVmVjdG9yVHlwZUJhc2Vcclxue1xyXG4gIC8vIE5PVEU6IHRoZSBCTE9CX1RBQkxFX1NUUiB3YXMgZGVsaWJlcmF0ZWx5IHNldCB0byBsb3dlciBjYXNlICh3aGlsZSB0aGUgc2VydmVyIHVzZXMgdXBwZXIgY2FzZVxyXG4gIC8vIHRoaXMgaXMgYSBwYXRjaCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFwiRkxBVCBEQVRBXCIgYnVpbHQgYnkgdGhlIGNsaWVudCAodGhlcmVmb3JlIGFyZSBhbHJlYWR5IHVuaWNvZGUpXHJcbiAgLy8gYW5kIGJldHdlZW4gZmxhdCBkYXRhIGFjY2VwdGVkIGZyb20gdGhlIHNlcnZlciAodGhlcmVmb3JlIGFyZSBub3QgdW5pY29kZSkuXHJcbiAgLy8gZ2xvYmFsIHZhcmlhYmxlc1xyXG4gIHN0YXRpYyBCTE9CX1RBQkxFX1NUUjogc3RyaW5nID0gXCJtZ2J0XCI7XHJcbiAgc3RhdGljIEJMT0JfVEFCTEVfU1RSX0xFTjogbnVtYmVyID0gNDtcclxuICBzdGF0aWMgVkVDVE9SX1NUUjogc3RyaW5nID0gXCJNR1ZFQ1wiO1xyXG4gIHN0YXRpYyBWRUNUT1JfU1RSX0xFTjogbnVtYmVyID0gNTtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBjb250ZW50cyBvZiBhIGJsb2IgaW5kaWNhdGUgdGhhdCBpdCBpcyBhIHZhbGlkIHZlcmN0b3IgaS5lLiBpZiB0aGUgYmxvYiBpcyBpblxyXG4gIC8vLyAgIHZlY3RvcidzIGZsYXR0ZW4gZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJsb2JcIj50aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvbnRlbnRzIG9mIHRoZSBibG9iPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgdmFsaWQgdmVjdG9yPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB2YWxpZGF0ZUJsb2JDb250ZW50cyhibG9iOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCB2YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KGJsb2IpKSB7XHJcbiAgICAgIGxldCBzdGFydDogbnVtYmVyID0gQmxvYlR5cGUuYmxvYlByZWZpeExlbmd0aChibG9iKTtcclxuICAgICAgdmFsaWQgPSAoTlN0cmluZy5Db21wYXJlKGJsb2IsIChWZWN0b3JUeXBlQmFzZS5CTE9CX1RBQkxFX1NUUiArIFZlY3RvclR5cGVCYXNlLlZFQ1RPUl9TVFIpLCB0cnVlLCBzdGFydCwgMCwgKFZlY3RvclR5cGVCYXNlLkJMT0JfVEFCTEVfU1RSX0xFTiArIFZlY3RvclR5cGVCYXNlLlZFQ1RPUl9TVFJfTEVOKSkgPT09IDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyaW0gY2VsbCBzdHJpbmdzIGluIHRoZSB2ZWN0b3IgaWYgdGhlIGNlbGxzIGFyZSBhbHBoYSBvciBtZW1vLlxyXG4gIC8vLyAgIFRoZWlyIGxlbmd0aCBzaG91bGQgYmUgYWRqdXN0ZWQgaW4gdGhlIG51bWJlciBvZiBieXRlcywgbm90IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy5cclxuICAvLy8gICAoREJDUyBzdXBwb3J0KVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzcmNCbG9iXCI+YSB2ZWN0b3IgaW4gYSBmbGF0dGVuZWQgZm9ybWF0PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFN0cmluZzwvcmV0dXJucz5cclxuICBzdGF0aWMgYWRqdXN0QWxwaGFTdHJpbmdzSW5GbGF0RGF0YShzcmNCbG9iOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKFZlY3RvclR5cGVCYXNlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKHNyY0Jsb2IpKSB7XHJcbiAgICAgIGxldCBkZXN0QnVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgQmxvYiBwcmVmaXhcclxuICAgICAgbGV0IHBvczogbnVtYmVyID0gQmxvYlR5cGUuYmxvYlByZWZpeExlbmd0aChzcmNCbG9iKTtcclxuICAgICAgbGV0IHN0clRva2VuOiBzdHJpbmcgPSBzcmNCbG9iLnN1YnN0cigwLCBwb3MpO1xyXG4gICAgICBkZXN0QnVmLkFwcGVuZChzdHJUb2tlbik7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zOiBzdHJpbmdbXSA9IFN0clV0aWwudG9rZW5pemUoc3JjQmxvYi5zdWJzdHIocG9zKSwgXCIsXCIpO1xyXG4gICAgICBsZXQgdG9rZW5JZHg6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAvLyBjb3B5IHRoZSBNR0JUTUdWRUNcclxuICAgICAgdG9rZW5JZHgrKztcclxuICAgICAgc3RyVG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICBkZXN0QnVmLkFwcGVuZChzdHJUb2tlbiArIFwiLFwiKTtcclxuICAgICAgcG9zID0gcG9zICsgKHN0clRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgLy8gY29weSB0aGUgdmVyc2lvblxyXG4gICAgICB0b2tlbklkeCsrO1xyXG4gICAgICBzdHJUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgIGRlc3RCdWYuQXBwZW5kKHN0clRva2VuICsgXCIsXCIpO1xyXG4gICAgICBwb3MgPSBwb3MgKyAoc3RyVG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAvLyBjb3B5IHRoZSBDb2x1bW5zQ291bnRfXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNoZWNrIHRoZSBjZWxscyB0eXBlXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgaWYgKHN0clRva2VuLmNoYXJBdCgwKSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiBzdHJUb2tlbi5jaGFyQXQoMCkgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTylcclxuICAgICAgICByZXR1cm4gc3JjQmxvYjtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNlbGxzIHR5cGVcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNlbGxzIHNpemVcclxuICAgICAgdG9rZW5JZHgrKztcclxuICAgICAgc3RyVG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICBsZXQgbGVuOiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKHN0clRva2VuKTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgICAgLy8gbm90ZTogdGhlIGRlZmF1bHQgdmFsdWUgbWF5IGNvbnRhaW4gdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgYXMgZGF0YVxyXG4gICAgICBzdHJUb2tlbiA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0QihzcmNCbG9iLnN1YnN0cihwb3MpLCBsZW4pO1xyXG4gICAgICBkZXN0QnVmLkFwcGVuZChzdHJUb2tlbiArIFwiLFwiKTtcclxuICAgICAgcG9zID0gcG9zICsgKHN0clRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgdG9rZW5zID0gU3RyVXRpbC50b2tlbml6ZShzcmNCbG9iLnN1YnN0cihwb3MpLCBcIixcIik7XHJcbiAgICAgIHRva2VuSWR4ID0gMDtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNlbGxzIG51bGwgZGVmYXVsdCBmbGFnXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNlbGxzIG51bGwgYWxsb3dlZCBmbGFnXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNvbHVtbidzIHRvdGFsIGxlbmd0aFxyXG4gICAgICB0b2tlbklkeCsrO1xyXG4gICAgICBzdHJUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgIGRlc3RCdWYuQXBwZW5kKHN0clRva2VuICsgXCIsXCIpO1xyXG4gICAgICBwb3MgPSBwb3MgKyAoc3RyVG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAvLyBjb3B5IHRoZSB2ZWN0b3Igc2l6ZVxyXG4gICAgICB0b2tlbklkeCsrO1xyXG4gICAgICBzdHJUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgIGxldCB2ZWNTaXplOiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKHN0clRva2VuKTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgYmxvYnNfXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4KytdO1xyXG4gICAgICBkZXN0QnVmLkFwcGVuZChzdHJUb2tlbiArIFwiLFwiKTtcclxuICAgICAgcG9zID0gcG9zICsgKHN0clRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgLy8gY29weSBlYWNoIHZlY3RvclxyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdmVjU2l6ZTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgLy8gbm90ZTogdGhlIGRlZmF1bHQgdmFsdWUgbWF5IGNvbnRhaW4gdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgYXMgZGF0YVxyXG4gICAgICAgIHN0clRva2VuID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHNyY0Jsb2Iuc3Vic3RyKHBvcyksIGxlbik7XHJcbiAgICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4pO1xyXG4gICAgICAgIHBvcyA9IHBvcyArIHN0clRva2VuLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY29weSB0aGUgcmVzdFxyXG4gICAgICBzdHJUb2tlbiA9IHNyY0Jsb2Iuc3Vic3RyKHBvcyk7XHJcbiAgICAgIGRlc3RCdWYuQXBwZW5kKHN0clRva2VuKTtcclxuXHJcbiAgICAgIGxldCBkZXN0QmxvYjogc3RyaW5nID0gZGVzdEJ1Zi5Ub1N0cmluZygpO1xyXG4gICAgICByZXR1cm4gZGVzdEJsb2I7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBzcmNCbG9iO1xyXG4gIH1cclxufVxyXG4iXX0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yVHlwZUJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9WZWN0b3JUeXBlQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUUsTUFBTSxPQUFPLGNBQWM7SUFNekIsTUFBTSxDQUFDLGNBQWMsR0FBVyxNQUFNLENBQUM7SUFDdkMsTUFBTSxDQUFDLGtCQUFrQixHQUFXLENBQUMsQ0FBQztJQUN0QyxNQUFNLENBQUMsVUFBVSxHQUFXLE9BQU8sQ0FBQztJQUNwQyxNQUFNLENBQUMsY0FBYyxHQUFXLENBQUMsQ0FBQztJQVFsQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBWTtRQUN0QyxJQUFJLEtBQUssR0FBWSxLQUFLLENBQUM7UUFFM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxLQUFLLEdBQVcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BELEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDekw7UUFDRCxPQUFPLEtBQUssQ0FB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QUMsQ0FBQztZQUMvQixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUdsQyxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUU5QyxRQUFRLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QixHQUFHLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDN0I7WUFHRCxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXpCLElBQUksUUFBUSxHQUFXLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxPQUFPLFFBQVEsQ0FBQztTQUNqQjs7WUFFQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmxvYlR5cGUgfSBmcm9tICcuL0Jsb2JUeXBlJztcclxuaW1wb3J0IHsgTk51bWJlciwgTlN0cmluZywgU3RyaW5nQnVpbGRlciB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgU3RvcmFnZUF0dHJpYnV0ZSwgU3RyVXRpbCwgVXRpbFN0ckJ5dGVNb2RlIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVmVjdG9yVHlwZUJhc2Vcclxue1xyXG4gIC8vIE5PVEU6IHRoZSBCTE9CX1RBQkxFX1NUUiB3YXMgZGVsaWJlcmF0ZWx5IHNldCB0byBsb3dlciBjYXNlICh3aGlsZSB0aGUgc2VydmVyIHVzZXMgdXBwZXIgY2FzZVxyXG4gIC8vIHRoaXMgaXMgYSBwYXRjaCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFwiRkxBVCBEQVRBXCIgYnVpbHQgYnkgdGhlIGNsaWVudCAodGhlcmVmb3JlIGFyZSBhbHJlYWR5IHVuaWNvZGUpXHJcbiAgLy8gYW5kIGJldHdlZW4gZmxhdCBkYXRhIGFjY2VwdGVkIGZyb20gdGhlIHNlcnZlciAodGhlcmVmb3JlIGFyZSBub3QgdW5pY29kZSkuXHJcbiAgLy8gZ2xvYmFsIHZhcmlhYmxlc1xyXG4gIHN0YXRpYyBCTE9CX1RBQkxFX1NUUjogc3RyaW5nID0gXCJtZ2J0XCI7XHJcbiAgc3RhdGljIEJMT0JfVEFCTEVfU1RSX0xFTjogbnVtYmVyID0gNDtcclxuICBzdGF0aWMgVkVDVE9SX1NUUjogc3RyaW5nID0gXCJNR1ZFQ1wiO1xyXG4gIHN0YXRpYyBWRUNUT1JfU1RSX0xFTjogbnVtYmVyID0gNTtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBjb250ZW50cyBvZiBhIGJsb2IgaW5kaWNhdGUgdGhhdCBpdCBpcyBhIHZhbGlkIHZlcmN0b3IgaS5lLiBpZiB0aGUgYmxvYiBpcyBpblxyXG4gIC8vLyAgIHZlY3RvcidzIGZsYXR0ZW4gZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJsb2JcIj50aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvbnRlbnRzIG9mIHRoZSBibG9iPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgdmFsaWQgdmVjdG9yPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB2YWxpZGF0ZUJsb2JDb250ZW50cyhibG9iOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCB2YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KGJsb2IpKSB7XHJcbiAgICAgIGxldCBzdGFydDogbnVtYmVyID0gQmxvYlR5cGUuYmxvYlByZWZpeExlbmd0aChibG9iKTtcclxuICAgICAgdmFsaWQgPSAoTlN0cmluZy5Db21wYXJlKGJsb2IsIChWZWN0b3JUeXBlQmFzZS5CTE9CX1RBQkxFX1NUUiArIFZlY3RvclR5cGVCYXNlLlZFQ1RPUl9TVFIpLCB0cnVlLCBzdGFydCwgMCwgKFZlY3RvclR5cGVCYXNlLkJMT0JfVEFCTEVfU1RSX0xFTiArIFZlY3RvclR5cGVCYXNlLlZFQ1RPUl9TVFJfTEVOKSkgPT09IDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyaW0gY2VsbCBzdHJpbmdzIGluIHRoZSB2ZWN0b3IgaWYgdGhlIGNlbGxzIGFyZSBhbHBoYSBvciBtZW1vLlxyXG4gIC8vLyAgIFRoZWlyIGxlbmd0aCBzaG91bGQgYmUgYWRqdXN0ZWQgaW4gdGhlIG51bWJlciBvZiBieXRlcywgbm90IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy5cclxuICAvLy8gICAoREJDUyBzdXBwb3J0KVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzcmNCbG9iXCI+YSB2ZWN0b3IgaW4gYSBmbGF0dGVuZWQgZm9ybWF0PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFN0cmluZzwvcmV0dXJucz5cclxuICBzdGF0aWMgYWRqdXN0QWxwaGFTdHJpbmdzSW5GbGF0RGF0YShzcmNCbG9iOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKFZlY3RvclR5cGVCYXNlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKHNyY0Jsb2IpKSB7XHJcbiAgICAgIGxldCBkZXN0QnVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgQmxvYiBwcmVmaXhcclxuICAgICAgbGV0IHBvczogbnVtYmVyID0gQmxvYlR5cGUuYmxvYlByZWZpeExlbmd0aChzcmNCbG9iKTtcclxuICAgICAgbGV0IHN0clRva2VuOiBzdHJpbmcgPSBzcmNCbG9iLnN1YnN0cigwLCBwb3MpO1xyXG4gICAgICBkZXN0QnVmLkFwcGVuZChzdHJUb2tlbik7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zOiBzdHJpbmdbXSA9IFN0clV0aWwudG9rZW5pemUoc3JjQmxvYi5zdWJzdHIocG9zKSwgXCIsXCIpO1xyXG4gICAgICBsZXQgdG9rZW5JZHg6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAvLyBjb3B5IHRoZSBNR0JUTUdWRUNcclxuICAgICAgdG9rZW5JZHgrKztcclxuICAgICAgc3RyVG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICBkZXN0QnVmLkFwcGVuZChzdHJUb2tlbiArIFwiLFwiKTtcclxuICAgICAgcG9zID0gcG9zICsgKHN0clRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgLy8gY29weSB0aGUgdmVyc2lvblxyXG4gICAgICB0b2tlbklkeCsrO1xyXG4gICAgICBzdHJUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgIGRlc3RCdWYuQXBwZW5kKHN0clRva2VuICsgXCIsXCIpO1xyXG4gICAgICBwb3MgPSBwb3MgKyAoc3RyVG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAvLyBjb3B5IHRoZSBDb2x1bW5zQ291bnRfXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNoZWNrIHRoZSBjZWxscyB0eXBlXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgaWYgKHN0clRva2VuLmNoYXJBdCgwKSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiBzdHJUb2tlbi5jaGFyQXQoMCkgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTylcclxuICAgICAgICByZXR1cm4gc3JjQmxvYjtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNlbGxzIHR5cGVcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNlbGxzIHNpemVcclxuICAgICAgdG9rZW5JZHgrKztcclxuICAgICAgc3RyVG9rZW4gPSB0b2tlbnNbdG9rZW5JZHhdO1xyXG4gICAgICBsZXQgbGVuOiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKHN0clRva2VuKTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgICAgLy8gbm90ZTogdGhlIGRlZmF1bHQgdmFsdWUgbWF5IGNvbnRhaW4gdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgYXMgZGF0YVxyXG4gICAgICBzdHJUb2tlbiA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0QihzcmNCbG9iLnN1YnN0cihwb3MpLCBsZW4pO1xyXG4gICAgICBkZXN0QnVmLkFwcGVuZChzdHJUb2tlbiArIFwiLFwiKTtcclxuICAgICAgcG9zID0gcG9zICsgKHN0clRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgdG9rZW5zID0gU3RyVXRpbC50b2tlbml6ZShzcmNCbG9iLnN1YnN0cihwb3MpLCBcIixcIik7XHJcbiAgICAgIHRva2VuSWR4ID0gMDtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNlbGxzIG51bGwgZGVmYXVsdCBmbGFnXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNlbGxzIG51bGwgYWxsb3dlZCBmbGFnXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4XTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgdGhlIGNvbHVtbidzIHRvdGFsIGxlbmd0aFxyXG4gICAgICB0b2tlbklkeCsrO1xyXG4gICAgICBzdHJUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgIGRlc3RCdWYuQXBwZW5kKHN0clRva2VuICsgXCIsXCIpO1xyXG4gICAgICBwb3MgPSBwb3MgKyAoc3RyVG9rZW4ubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgICAvLyBjb3B5IHRoZSB2ZWN0b3Igc2l6ZVxyXG4gICAgICB0b2tlbklkeCsrO1xyXG4gICAgICBzdHJUb2tlbiA9IHRva2Vuc1t0b2tlbklkeF07XHJcbiAgICAgIGxldCB2ZWNTaXplOiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKHN0clRva2VuKTtcclxuICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4gKyBcIixcIik7XHJcbiAgICAgIHBvcyA9IHBvcyArIChzdHJUb2tlbi5sZW5ndGggKyAxKTtcclxuXHJcbiAgICAgIC8vIGNvcHkgYmxvYnNfXHJcbiAgICAgIHRva2VuSWR4Kys7XHJcbiAgICAgIHN0clRva2VuID0gdG9rZW5zW3Rva2VuSWR4KytdO1xyXG4gICAgICBkZXN0QnVmLkFwcGVuZChzdHJUb2tlbiArIFwiLFwiKTtcclxuICAgICAgcG9zID0gcG9zICsgKHN0clRva2VuLmxlbmd0aCArIDEpO1xyXG5cclxuICAgICAgLy8gY29weSBlYWNoIHZlY3RvclxyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdmVjU2l6ZTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgLy8gbm90ZTogdGhlIGRlZmF1bHQgdmFsdWUgbWF5IGNvbnRhaW4gdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgYXMgZGF0YVxyXG4gICAgICAgIHN0clRva2VuID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHNyY0Jsb2Iuc3Vic3RyKHBvcyksIGxlbik7XHJcbiAgICAgICAgZGVzdEJ1Zi5BcHBlbmQoc3RyVG9rZW4pO1xyXG4gICAgICAgIHBvcyA9IHBvcyArIHN0clRva2VuLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY29weSB0aGUgcmVzdFxyXG4gICAgICBzdHJUb2tlbiA9IHNyY0Jsb2Iuc3Vic3RyKHBvcyk7XHJcbiAgICAgIGRlc3RCdWYuQXBwZW5kKHN0clRva2VuKTtcclxuXHJcbiAgICAgIGxldCBkZXN0QmxvYjogc3RyaW5nID0gZGVzdEJ1Zi5Ub1N0cmluZygpO1xyXG4gICAgICByZXR1cm4gZGVzdEJsb2I7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBzcmNCbG9iO1xyXG4gIH1cclxufVxyXG4iXX0=