@esfaenza/es-table 11.2.131 → 11.2.134

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.
@@ -92,7 +92,7 @@ export class ColumnMetadataHandler {
92
92
  column_ordering: this.utiExts.deepClone(columnsOrderings),
93
93
  orders: this.utiExts.deepClone(columnOrders)
94
94
  };
95
- this.prefService.setItem(this.est.ngControl.name, toStore, 'preference').subscribe();
95
+ this.prefService.setItem(this.est.ngControl.name, toStore).subscribe();
96
96
  }
97
97
  /**
98
98
  * Partendo dagli **EsThs** estrappolo la lista di **EsTableColumn** che questa tabella dovrà eventualmente gestire per Visibilità e Ordine
@@ -814,4 +814,4 @@ export class ColumnMetadataHandler {
814
814
  });
815
815
  }
816
816
  }
817
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sdW1uTWV0YWRhdGFIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL0NvbHVtbk1ldGFkYXRhSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUF3QixlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBTWpFLFVBQVU7QUFDVixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3JFLDZIQUE2SDtBQUM3SCxNQUFNLE9BQU8scUJBQXFCO0lBRTlCLHlCQUF5QjtJQUN6QixZQUFvQixHQUFxQixFQUFVLFNBQTJCLEVBQVUsT0FBdUIsRUFBVSxXQUErQixFQUFVLEdBQXVCO1FBQXJLLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW9CO0lBQUksQ0FBQztJQUU5TDs7Ozs7T0FLRztJQUNJLG1CQUFtQixDQUFDLEVBQVUsRUFBRSxLQUFxQjtRQUN4RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDakcsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElB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OEg7SUFDdkgsd0JBQXdCO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1IsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcclxuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gTGlic1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL3ByZWZlcmVuY2VzXCI7XHJcblxyXG4vLyBDb21wb25lbnRpIC8gRGlyZXR0aXZlXHJcbmltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5pbXBvcnQgeyBFc1RkRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZXNfdGQuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEVzVGhEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9lc190aC5kaXJlY3RpdmVcIjtcclxuXHJcbi8vIEhhbmRsZXJzXHJcbmltcG9ydCB7IFV0aWxpdGllc0hhbmRsZXIgfSBmcm9tIFwiLi9VdGlsaXRpZXNIYW5kbGVyXCI7XHJcbmltcG9ydCB7IFJvd0dyb3VwaW5nSGFuZGxlciB9IGZyb20gXCIuL1Jvd0dyb3VwaW5nSGFuZGxlclwiO1xyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBcHBPcmRlcmluZyB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBPcmRlcmluZ1wiO1xyXG5pbXBvcnQgeyBBcHBTZWFyY2ggfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvQXBwU2VhcmNoXCI7XHJcbmltcG9ydCB7IEVzVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9Fc1RhYmxlQ29sdW1uXCI7XHJcbmltcG9ydCB7IEVzVGFibGVNdWx0aVZhbHVlIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0VzVGFibGVNdWx0aVZhbHVlXCI7XHJcblxyXG4vKiogQ2xhc3NlIGNoZSBnZXN0aXNjZSB0dXR0ZSBsZSBpbmZvcm1haXpvbmkgcmVsYXRpdmUgYWxsZSBjb2xvbm5lOiB2aXNpYmlsaXTDoCwgcG9zaXppb25lLCBzdGF0byBkaSBwaW4vdW5waW4sIGVjYyBlY2MuLi4gKi9cclxuZXhwb3J0IGNsYXNzIENvbHVtbk1ldGFkYXRhSGFuZGxlciB7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlc3Q6IEVzVGFibGVDb21wb25lbnQsIHByaXZhdGUgdXRpbGl0aWVzOiBVdGlsaXRpZXNIYW5kbGVyLCBwcml2YXRlIHV0aUV4dHM6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIHByZWZTZXJ2aWNlOiBQcmVmZXJlbmNlc1NlcnZpY2UsIHByaXZhdGUgcmdIOiBSb3dHcm91cGluZ0hhbmRsZXIpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBnZXN0aXNjZSBpbCBjYW1iaW8gZGkgT3JkaW5hbWVudG8gZGkgdW5hIGNvbG9ubmFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgZGVsbGEgY29sb25uYSBpbCBjdWkgb3JpZG5hbWVudG8gw6ggY2FtYmlhdG9cclxuICAgICAqIEBwYXJhbSB7J0RFU0MnIHwgJ0FTQyd9IG9yZGVyIE51b3ZvIG9yZGluZSBzZWxlemlvbmF0byBwZXIgbGEgY29sb25uYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlVEhPcmRlckNoYW5nZShpZDogc3RyaW5nLCBvcmRlcjogJ0RFU0MnIHwgJ0FTQycpIHtcclxuICAgICAgICBsZXQgb3JkZXJzID0gdGhpcy5lc3Qudmlld01vZGUgPyAodGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55Pikub3JkZXJzIDogdGhpcy5lc3QuYXJyYXlPcmRlcnM7XHJcbiAgICAgICAgbGV0IG9yZGVyVG9BZGQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBvcmRlclRvUmVtb3ZlOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBTZSBwZXIgcXVhbGNoZSBtb3Rpdm8gaWwgY29zdHJ1dHRvcmUgbm9uIMOoIHBhc3NhdG8gKGNhY2hlIHRhcnBhdGUgbyBzaW1pbGEpIGZpeG9cclxuICAgICAgICBpZiAoIW9yZGVycyAmJiB0aGlzLmVzdC52aWV3TW9kZSlcclxuICAgICAgICAgICAgKHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pLm9yZGVycyA9IFtdO1xyXG4gICAgICAgIGVsc2UgaWYgKCFvcmRlcnMgJiYgdGhpcy5lc3QuYXJyYXlNb2RlKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5hcnJheU9yZGVycyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdCA9IG9yZGVyc1tpXTtcclxuICAgICAgICAgICAgaWYgKHQuaWQgPT0gaWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHQub3JkZXIgPSBvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICBvcmRlclRvQWRkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJUb1JlbW92ZSA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcmRlclRvUmVtb3ZlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgb3JkZXJzLnNwbGljZShvcmRlclRvUmVtb3ZlLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3JkZXJUb0FkZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuTXVsdGlwbGVPcmRlcmluZ0RpcmVjdGl2ZXMpXHJcbiAgICAgICAgICAgICAgICBvcmRlcnMucHVzaChuZXcgQXBwT3JkZXJpbmcoaWQsIG9yZGVyKSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KS5vcmRlcnMgPSBbbmV3IEFwcE9yZGVyaW5nKGlkLCBvcmRlcildO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5lc3QuYXJyYXlNb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5T3JkZXJzID0gW25ldyBBcHBPcmRlcmluZyhpZCwgb3JkZXIpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9TYWx2byBsZSBwcmVmZXJlbmNlcyBkaSBxdWVzdGEgdmlld1xyXG4gICAgICAgIC8vRGkgZGVmYXVsdCByZWdpc3RybyBvcmRpbmFtZW50byBlIHZpc2liaWxpdMOgIGRlbGxlIGNvbG9ubmUgbmVsbGEgdmlzdGEuIFNvbG8gbGUgY29zZSBkaSBVSVxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5TYXZlUHJlZmVyZW5jZXMpIHtcclxuICAgICAgICAgICAgbGV0IGNhc3RlZFZpZXcgPSB0aGlzLmVzdC52aWV3TW9kZSA/ICh0aGlzLmVzdC5NYWluR3JvdXBWaWV3IHx8IHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pIDogbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclZpZXdQcmVmZXJlbmNlcyhjYXN0ZWRWaWV3KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXN0Lm9uT3JkZXJDaGFuZ2VkLmVtaXQoeyBpZCwgb3JkZXIgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVzdC52aWV3TW9kZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJnSC5lbWl0Um93R3JvdXBpbmdTZWFyY2hlcyhpZCwgb3JkZXJzKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmludGVybmFsV3JpdGVWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0cmEgbGUgcHJlZmVyZW5jZSByZWxhdGl2ZSBhbGxhIHZpZXcgcGFzc2F0YSBjb21lIHBhcmFtZXRyb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gY2FzdGVkVmlldyBWaWV3IGRpIGN1aSBzYWx2YXJlIGNvbG9ubmUgZSBvcmRpbmFtZW50byBjb2xvbm5lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3RlclZpZXdQcmVmZXJlbmNlcyhjYXN0ZWRWaWV3OiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGlmICghdGhpcy5lc3QubmdDb250cm9sLm5hbWUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgYXZlcmUgdW4gJ25hbWUnIHBlciBsYSB0YWJlbGxhXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucHJlZlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgY2hlIGlsIHBhY2NoZXR0byBAZXNmYWVuemEvcHJlZmVyZW5jZXMgc2lhIGluc3RhbGxhdG9cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjb2x1bW5zID0gdGhpcy5lc3QuYXJyYXlNb2RlID8gdGhpcy5lc3QuYXJyYXlDb2x1bW5zIDogY2FzdGVkVmlldy5jb2x1bW5zO1xyXG4gICAgICAgIGxldCBjb2x1bW5zT3JkZXJpbmdzID0gdGhpcy5lc3QuYXJyYXlNb2RlID8gdGhpcy5lc3QuYXJyYXlDb2x1bW5PcmRlcmluZyA6IGNhc3RlZFZpZXcuY29sdW1uX29yZGVyaW5nO1xyXG4gICAgICAgIGxldCBjb2x1bW5PcmRlcnMgPSB0aGlzLmVzdC5hcnJheU1vZGUgPyBbXSA6IGNhc3RlZFZpZXcub3JkZXJzO1xyXG4gICAgICAgIHZhciB0b1N0b3JlID0ge1xyXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnV0aUV4dHMuZGVlcENsb25lKGNvbHVtbnMpIGFzIHN0cmluZ1tdLFxyXG4gICAgICAgICAgICBjb2x1bW5fb3JkZXJpbmc6IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUoY29sdW1uc09yZGVyaW5ncykgYXMgc3RyaW5nW10sXHJcbiAgICAgICAgICAgIG9yZGVyczogdGhpcy51dGlFeHRzLmRlZXBDbG9uZShjb2x1bW5PcmRlcnMpIGFzIHN0cmluZ1tdXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnByZWZTZXJ2aWNlLnNldEl0ZW0oPHN0cmluZz50aGlzLmVzdC5uZ0NvbnRyb2wubmFtZSwgdG9TdG9yZSwgJ3ByZWZlcmVuY2UnKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRlbmRvIGRhZ2xpICoqRXNUaHMqKiBlc3RyYXBwb2xvIGxhIGxpc3RhIGRpICoqRXNUYWJsZUNvbHVtbioqIGNoZSBxdWVzdGEgdGFiZWxsYSBkb3Zyw6AgZXZlbnR1YWxtZW50ZSBnZXN0aXJlIHBlciBWaXNpYmlsaXTDoCBlIE9yZGluZVxyXG4gICAgICpcclxuICAgICAqIENvc3RvOiAxIHNjYW4gRXNUaHNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmV2aWV3Q29sdW1uc0xpc3QodGhzOiBFc1RoRGlyZWN0aXZlW10pIHtcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCA9IFtdO1xyXG4gICAgICAgIGlmICh0aHMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gQXBwZW5hIGlsIGNvbnRlbnRDaGlsZHJlbiDDqCB2YWxvcml6emF0byBzY29ycm8gdHV0dGkgZ2xpIGhlYWRlclxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSB0aC50aDtcclxuICAgICAgICAgICAgLy8gU2Ugbm9uIGhvIHVuIGlkIGlsIHRoIMOoIGNvbnNpZGVyYXRvIGluZXJ0ZVxyXG4gICAgICAgICAgICBpZiAoIWNvbHVtbilcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gU2Fsdm8gbGUgaW5mb3JtYXppb25pIGRlbGwnaGVhZGVyIHBlciBmYXIgcGFydGUgZGVsbGEgbGlzdGEgZGEgY3VpIHNjZWdsaWVyZSBxdWFsaSBjb2xvbm5lIHZpc3VhbGl6emFyZS9uYXNjb25kZXJlXHJcbiAgICAgICAgICAgIC8vIERpIGRlZmF1bHQgbGEgdmlzaWJpbGl0w6Agw6ggcXVlbGxhIGltcG9zdGF0YSBuZWwgY29tcG9uZW50ZVxyXG4gICAgICAgICAgICBpZiAoKHRoaXMuZXN0LkhpZGRlbkNvbHVtbnMgfHwgdGgudGhWaXNpYmxlKSAmJiB0aC50aElmKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNseVBpbm5lZCA9ICF0aGlzLmVzdC5Db2x1bW5zTGlzdCB8fCB0aGlzLmVzdC5Db2x1bW5zTGlzdC5sZW5ndGggPT0gMCA/IG51bGwgOiB0aGlzLmVzdC5Db2x1bW5zTGlzdC5maW5kKHQgPT4gdC5pZCA9PSBjb2x1bW4pIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG9BZGQgPSBuZXcgRXNUYWJsZUNvbHVtbihjb2x1bW4sIHRoLnRoU3RhdGljQ29udGVudCwgdGgudGhWaXNpYmxlLCAodGgudGhGaXhlZCB8fCB0aC50aEdyb3VwKSwgcHJldmlvdXNseVBpbm5lZCA9PSBudWxsID8gdGgudGhQaW5uZWQgOiBwcmV2aW91c2x5UGlubmVkLnBpbm5lZCwgdGgudGhQaW5uYWJsZSwgdGgudGhQaW5uZWRXaWR0aCwgdGguVGVtcGxhdGUsIHRoLl90aFBhcmVudHMsIHRoLl9tdWx0aSwgdGguX211bHRpX2NvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzbHlQaW5uZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgdG9BZGQucHJldl9pbmRleCA9IHByZXZpb3VzbHlQaW5uZWQucHJldl9pbmRleDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LnB1c2godG9BZGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXN0LkNvbHVtbnNMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHsgdGhpcy5lc3QuQ29sdW1uc0xpc3QucHVzaChPYmplY3QuYXNzaWduKHt9LCBjKSk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbiBjYXNvIHNpYW5vIGNvbmZpZ3VyYXRpIGRlaSB0aCBcIk11bHRpXCIgKHZlZGVyZSBsYSBkZXNjcml6aW9uZSBkZWwgY2FtcG8gKip0aE11bHRpKiogZGkgKipFc1RoRGlyZWN0aXZlKiopIHF1ZXN0byBtZXRvZG8gbGkgXCJzcm90b2xhXCIgaW4gdHV0dGkgaSB0aC90ZCBjaGUgZGV2b25vIGVmZmV0dGl2YW1lbnRlIGRpdmVudGFyZSAqL1xyXG4gICAgcHVibGljIGV4cGFuZE11bHRpVGhzQW5kVGRzKHRoczogRXNUaERpcmVjdGl2ZVtdLCB0ZHM6IEVzVGREaXJlY3RpdmVbXSwgaXRlbXM6IGFueVtdKToge2V4cFRoczogRXNUaERpcmVjdGl2ZVtdLCBleHBUZHM6IEVzVGREaXJlY3RpdmVbXX0ge1xyXG5cclxuICAgICAgICAvLyBSZWdpc3RybyBsZSBpbmZvIHN1aSBtdWx0aXByb3ZpZGVyXHJcbiAgICAgICAgbGV0IG11bHRpRGVmczogeyBbaWQ6IHN0cmluZ106IHsgT24/OiBzdHJpbmcsIHRocmVmOiBFc1RoRGlyZWN0aXZlLCB0ZHJlZjogRXNUZERpcmVjdGl2ZSwgdGhnZW46IHsgW2lkOiBzdHJpbmddOiBFc1RoRGlyZWN0aXZlIH0sIHRkZ2VuOiB7IFtpZDogc3RyaW5nXTogRXNUZERpcmVjdGl2ZSB9IH0gfSA9IHsgfTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcbiAgICAgICAgICAgIGlmICghdGgudGhNdWx0aSlcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgbXVsdGlEZWZzW3RoLnRoXSA9IHsgT246IHRoLnRoLCB0ZHJlZjogbnVsbCwgdGhyZWY6IHRoLCB0aGdlbjoge30sIHRkZ2VuOiB7fSB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQXNzZWdubyBsZSBpbmZvIGFuY2hlIGFpIHRkXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRkID0gdGRzW2ldO1xyXG4gICAgICAgICAgICB0ZC5fbXVsdGkgPSAhIW11bHRpRGVmc1t0ZC50ZF07XHJcbiAgICAgICAgICAgIGlmKHRkLl9tdWx0aSlcclxuICAgICAgICAgICAgICAgIG11bHRpRGVmc1t0ZC50ZF0udGRyZWYgPSB0ZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJpbXVvdm8gaSBtdWx0aXRlbXBsYXRlIGRhbGxlIGJhbGxlXHJcbiAgICAgICAgLy8gTi5COiBEYXRvIGNoZSBsYSBwcmltYSBvcGVyYXppb25lIHN1IHRoIGUgdGQgw6ggcXVlc3RhIGlsIHJpZmVyaW1lbnRvIG9yaWdpbmFsZSB2aWVuZSBzb3ZyYXNjcml0dG8sIHF1ZXN0byBzaWduaWZpY2EgY2hlIGRldm8gcmktZW1ldHRlcmUgaSBkdWUgbnVvdmkgYXJyYXlcclxuICAgICAgICB0aHMgPSB0aHMuZmlsdGVyKHQgPT4gIXQudGhNdWx0aSk7XHJcbiAgICAgICAgdGRzID0gdGRzLmZpbHRlcih0ID0+ICF0Ll9tdWx0aSk7XHJcblxyXG4gICAgICAgIGxldCBwYXJlbnRUaHM6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuOyB9ID0geyB9O1xyXG4gICAgICAgIGxldCBhZGRlZEhlYWRlcnM6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuOyB9ID0geyB9O1xyXG4gICAgICAgIGxldCB0ZHNUb0FkZDogeyBbaWQ6IHN0cmluZ10gOiBFc1RkRGlyZWN0aXZlfSA9IHsgfTtcclxuICAgICAgICBsZXQgdGhzVG9BZGQ6IEVzVGhEaXJlY3RpdmVbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBQZXIgb2duaSBpdGVtIHZlZG8gc2UgY2kgc29ubyBkZWkgbXVsdGkgcGVyIGxlIHByb3ByaWV0w6AgY2hlIGxpIGRlZmluaXNjb25vXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgbGV0IGl0bSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBtdWx0aURlZnMpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNlIGxhIHByb3ByaWV0w6AgZGVsIG11bHRpIGVzaXN0ZSBuZWxsJ29nZ2V0dG8gZWQgaGEgdW5hIGx1bmdoZXp6YVxyXG4gICAgICAgICAgICAgICAgaWYgKGl0bVtwcm9wXSAmJiBpdG1bcHJvcF0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG11bHRpUmVmID0gbXVsdGlEZWZzW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWZ0ZCA9IG11bHRpUmVmLnRkcmVmO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWZ0aCA9IG11bHRpUmVmLnRocmVmO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgaXRtW3Byb3BdLmxlbmd0aDsgaWkrKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGVhZGVyIGdpw6AgYWdnaXVudG8sIG5vbiBkZXZvIGluc2VyaXJlIGFsdHJpIHRlbXBsYXRlIGRpIGhlYWRlci9jb2xvbm5hXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlc3RtdiA9IDxFc1RhYmxlTXVsdGlWYWx1ZT5pdG1bcHJvcF1baWldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdG12Ll9oZWFkZXJzSGllcmFyY2h5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0bXYuX2hlYWRlcnNIaWVyYXJjaHkgPSBlc3Rtdi5oZWFkZXJfZ3JvdXAgPyBlc3Rtdi5oZWFkZXJfZ3JvdXAuc3BsaXQoXCI+XCIpLm1hcCh0ID0+IHQudHJpbSgpKSA6IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gZXN0bXYuaGVhZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gZXN0bXYuaGVhZGVyX2dyb3VwIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnRzSGllciA9IGVzdG12Ll9oZWFkZXJzSGllcmFyY2h5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGVkSGVhZGVyc1tgJHtwYXJlbnR9XyR7aGVhZGVyVmFsdWV9YF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRIZWFkZXJzW2Ake3BhcmVudH1fJHtoZWFkZXJWYWx1ZX1gXSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXIgb2duaSB2YWxvcmUgZGl2ZXJzbyBkZWxsZSBwcm9wcmlldMOgIGRldm8gYWdnaXVuZ2VyZSB1biB0ZCBlIHVuIHRoLCBxdWVzdCd1bHRpbW8gZGV2J2Vzc2VyZSBldmVudHVhbG1lbnRlIGNvbGxlZ2F0byBhZCB1biBoZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld3RIID0gbmV3IEVzVGhEaXJlY3RpdmUocmVmdGguVGVtcGxhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC5fbXVsdGkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC5fbXVsdGlfY29udGVudCA9IGhlYWRlclZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aCA9IGAke3Byb3B9XyR7aWl9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGhDbGFzcyA9IHJlZnRoLnRoQ2xhc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoU2hyaW5rID0gcmVmdGgudGhTaHJpbms7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoSWYgPSByZWZ0aC50aElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aFZpc2libGUgPSByZWZ0aC50aFZpc2libGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoV3JhcCA9IHJlZnRoLnRoV3JhcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWwgcGFyZW50IMOoIHNlbXByZSBsJ3VsdGltbyBuZWxsYSBnZXJhcmNoaWEgZGkgcGFkcmlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGhQYXJlbnQgPSBwYXJlbnRzSGllcltwYXJlbnRzSGllci5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGhPcmRlcmFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50c0hpZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXIgPSBwYXJlbnRzSGllcltpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50VGhzW3Bhcl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50VGhzW3Bhcl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aFBhcmVudCA9IG5ldyBFc1RoRGlyZWN0aXZlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhQYXJlbnQudGggPSBwYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aFBhcmVudC5fbXVsdGlfY29udGVudCA9IHBhcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoUGFyZW50LnRoUGFyZW50ID0gaSA+IDAgPyBwYXJlbnRzSGllcltpIC0gMV0gOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhzVG9BZGQucHVzaCh0aFBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoc1RvQWRkLnB1c2gobmV3dEgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RkID0gbmV3IEVzVGREaXJlY3RpdmUocmVmdGQuVGVtcGxhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdUZC5fbXVsdGkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdUZC50ZCA9IGAke3Byb3B9XyR7aWl9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGQudGRDbGFzcyA9IHJlZnRkLnRkQ2xhc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RkLnRkSWYgPSByZWZ0ZC50ZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdUZC50ZFZpc2libGUgPSByZWZ0ZC50ZFZpc2libGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkc1RvQWRkW25ld1RkLnRkXSA9IG5ld1RkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3JkaW5vIGdsaSBoZWFkZXIgYWdnaXVudGkgaW4gYmFzZSBhbCBQYXJlbnQsIHNlIHByZXNlbnRlLCBlIGxpIGFnZ2l1bmdvIGFsbGEgbGlzdGEgZGVpIHRoLCBkb3BvZGljaMOpIGluIGJhc2UgYWxsbyBzdGVzc28gb3JkaW5hbWVudG8gYWdnaXVuZ28gaSByZWxhdGl2aSB0ZFxyXG4gICAgICAgIGxldCBvcmRlcmVkVGhzID0gW107XHJcblxyXG4gICAgICAgIC8vIFByaW1hIG1ldHRvIHR1dHRpIGkgdGggc2VuemEgcGFyZW50LCBwb2kgcGVyIG9nbmkgcGFyZW50IHByZW5kbyBpIHRoIG9yZGluYXRpIGNvbWUgbGkgdHJvdm8gbmVsbGEgbGlzdGFcclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhzVG9BZGQubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICBpZighdGhzVG9BZGRbaV0udGhQYXJlbnQpXHJcbiAgICAgICAgICAgICAgICBvcmRlcmVkVGhzLnB1c2godGhzVG9BZGRbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IobGV0IHByb3AgaW4gcGFyZW50VGhzKXtcclxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoc1RvQWRkLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGxldCB0aCA9IHRoc1RvQWRkW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYodGgudGhQYXJlbnQgJiYgdGgudGhQYXJlbnQgPT0gcHJvcClcclxuICAgICAgICAgICAgICAgICAgICBvcmRlcmVkVGhzLnB1c2godGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aHMgPSBbLi4udGhzLCAuLi50aHNUb0FkZF07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHNUb0FkZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBTZSBpbCB0aCDDqCB1biBoZWFkZXIgdGQgdmVycmViYmUgdW5kZWZpbmVkLiBMbyBhZ2dpdW5nbyBzb2xvIHNlIMOoIGVmZmV0dGl2YW1lbnRlIHByZXNlbnRlXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IHRkc1RvQWRkW3Roc1RvQWRkW2ldLnRoXTtcclxuICAgICAgICAgICAgaWYgKHRkKVxyXG4gICAgICAgICAgICAgICAgdGRzLnB1c2godGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHsgZXhwVGRzOiB0ZHMsIGV4cFRoczogdGhzIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVuZGUgaSB0aCBlIGkgdGQgaW4gbW9kYWxpdMOgIGRpcmV0aXZlIGUgbGkgb3JkaW5hIGluIGJhc2UgYSBzZSBjaSBzb25vIGNvbG9ubmUgZml4ZWQgbyBtZW5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlRml4ZWRDb2x1bW5zQXRUaGVCZWdpbm5pbmcodGhzOiBFc1RoRGlyZWN0aXZlW10sIHRkczogRXNUZERpcmVjdGl2ZVtdKSB7XHJcblxyXG4gICAgICAgIGxldCBmaXhlZHMgPSAwLCBwaW5uZWRzID0gMDtcclxuICAgICAgICBsZXQgY29sdW1uc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUYWJsZUNvbHVtbjsgfSA9IHt9O1xyXG4gICAgICAgIGxldCBjb2x1bW5zSW5kZXhDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlcjsgfSA9IHt9O1xyXG5cclxuICAgICAgICAvLyBDcmVvIGxhIGNhY2hlIGRlbGxlIGNvbG9ubmVcclxuICAgICAgICBmb3IgKGxldCBjb2xpID0gMDsgY29saSA8IHRoaXMuZXN0LkNvbHVtbnNMaXN0Lmxlbmd0aDsgY29saSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2wgPSB0aGlzLmVzdC5Db2x1bW5zTGlzdFtjb2xpXTtcclxuICAgICAgICAgICAgY29sdW1uc0NhY2hlW2NvbC5pZF0gPSBjb2w7XHJcblxyXG4gICAgICAgICAgICAvLyBBbmNoZSBwZXIgbGUgY29sdW1uc2xpc3Qgc3Bvc3RvIGxlIHBpbm5hdGUgbyBsZSBmaXhlZCBhbGwnaW5pemlvXHJcbiAgICAgICAgICAgIGlmIChjb2wucGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29saSAhPSBwaW5uZWRzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aGlzLmVzdC5Db2x1bW5zTGlzdCwgY29saSwgcGlubmVkcyk7XHJcbiAgICAgICAgICAgICAgICBwaW5uZWRzKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNlIHVuYSBjb2xvbm5hIMOoIHNpYSBwaW5uYXRhIGNoZSBmaXhhdGEgbGEgY29uc2lkZXJvIHVuaWNhbWVudGUgcGlubmF0YVxyXG4gICAgICAgICAgICBpZiAoY29sLmZpeGVkICYmICFjb2wucGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29saSAhPSBwaW5uZWRzICsgZml4ZWRzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aHMsIGNvbGksIHBpbm5lZHMgKyBmaXhlZHMpO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBpbm5lZHMgPSBmaXhlZHMgPSAwO1xyXG5cclxuICAgICAgICAvLyBTcG9zdG8gdHV0dGkgZ2xpIGhlYWRlciBmaXhlZCBvIHBpbm5lZCBhbGwnaW5pemlvXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gUmlhc3NlZ25vIHNlbXByZSBwZXIgcmlwdWxpcmUgdmFsb3JpIGRpIHBhcnRlbnphIG8gcGVyIGFnZ2lvcm5hcmxpIGluIGNhc28gZGkgbW9kaWZpY2hlIHV0ZW50ZVxyXG4gICAgICAgICAgICB0aC50aFBpbm5lZCA9ICghY29sdW1uc0NhY2hlW3RoLnRoXSAmJiB0aC50aFBpbm5lZCkgfHwgKGNvbHVtbnNDYWNoZVt0aC50aF0gJiYgY29sdW1uc0NhY2hlW3RoLnRoXS5waW5uZWQpO1xyXG4gICAgICAgICAgICBpZiAodGgudGhQaW5uZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpICE9IHBpbm5lZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuYXJyYXlNb3ZlKHRocywgaSwgcGlubmVkcyk7XHJcbiAgICAgICAgICAgICAgICBwaW5uZWRzKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vSW4gcXVlc3RvIGNhc28gc29ubyBpbmZvcm1hemlvbmkgc3RhdGljaGUgaW52ZWNlLCBub24gbW9kaWZpY2FiaWxpIGRhbGwndXRlbnRlLCBxdWluZGkgbm9uIG1pIGTDsiBwcmVvY2N1cGF6aW9uaVxyXG4gICAgICAgICAgICBpZiAoKHRoLnRoRml4ZWQgfHwgdGgudGhHcm91cCkgJiYgIXRoLnRoUGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSBwaW5uZWRzICsgZml4ZWRzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aHMsIGksIHBpbm5lZHMgKyBmaXhlZHMpO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhY2hlIGRlZ2xpIGluZGljaSBwZXIgcmlwb3NpemlvbmFyZSBpIHRkIGNvbWUgaSB0aFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBjb2x1bW5zSW5kZXhDYWNoZVsoPEVzVGhEaXJlY3RpdmU+dGhzW2ldKS50aF0gPSBpO1xyXG5cclxuICAgICAgICAvLyBSaW9yZGlubyBsZSBjZWxsZSBwZXIgZmFyZ2xpIG1hbnRlbmVyZSBsYSBzdGVzc2Egc3RydXR0dXJhIGRlaSB0aFxyXG4gICAgICAgIGxldCBuZXdUZHMgPSBuZXcgQXJyYXkodGhzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtID0gdGRzW2ldIGFzIEVzVGREaXJlY3RpdmU7XHJcbiAgICAgICAgICAgIG5ld1Rkc1tjb2x1bW5zSW5kZXhDYWNoZVtpdGVtLnRkXV0gPSBpdGVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lc3QuSGFzUGlubmVkQ29sdW1ucyA9IHBpbm5lZHMgPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbiBiYXNlIGFsbGEgY29uZmlndXJhemlvbmUgZGVsbGUgY29sb25uZSBjYWxjb2xhIGxlIGRpbWVuaW9uaSBkZWxsZSBjb2xvbm5lIHBpbm5hdGUgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZVBpbm5lZENvbHVtbnNXaWR0aCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZXN0Lkhhc1Bpbm5lZENvbHVtbnMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5lc3QuUGlubmVkQ29udGFpbmVyV2lkdGggPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuQ29sdW1uc0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZXN0LkNvbHVtbnNMaXN0W2ldO1xyXG4gICAgICAgICAgICBpZiAoY29sLnBpbm5lZCAmJiBjb2wudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LlBpbm5lZENvbnRhaW5lcldpZHRoICs9IGNvbC5waW5uZWRXaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lc3QuUGlubmVkQ29udGFpbmVyV2lkdGggKz0gdGhpcy5lc3QuU2VsZWN0aW9uID8gMjUgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVybWluYXRvIGlsIGJpbmRpbmcgZGVsbGUgY29sb25uZSBkYSAqKnJldmlld0NvbHVtbnNMaXN0KiogZSBkZWxsYSAqKlZpZXcqKiBkYWwgKip3cml0ZVZhbHVlKiogcXVlc3RvIG1ldG9kbyBzaSBvY2N1cGFcclxuICAgICAqIGRlbGwnYWxsaW5lYW1lbnRvIGRlbGxlIGluZm9ybWF6aW9uaSBmcmEgbGUgY29sb25uZSBjYWxjb2xhdGUgaW50ZXJuYW1lbnRlIGUgbGUgaW5mb3JtYXppb25pIHN1bGxlIGNvbG9ubmUgY2hlIGFycml2YW5vIGRhbGwnQXBwU2VhcmNoXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBBcHBTZWFyY2ggZGEgdXRpbGl6emFyZSBwZXIgcXVlc3RhIG9wZXJhemlvbmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXNlTG9jYWxWaXNpYmlsaXR5IEluZGljYSBkaSB1dGlsaXp6YXJlIGxlIGltcG9zdGF6aW9uaSBkaSB2aXNpYmlsaXTDoCBsb2NhbGkgc2VuemEgYWxsaW5lYXJsZSBhbGxhIHZpZXdcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFsaWduQ29sdW1uc0lmTG9hZGVkVmlldyh2aWV3OiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGxldCBlbWl0Q2hhbmdlZCA9IHRoaXMuZXN0LnZpZXdNb2RlICYmIHZpZXcuc2F2ZWRzdGF0ZTtcclxuICAgICAgICBsZXQgbmV3Q29sc2V0ID0gW107XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5lc3QuQ29sdW1uc0xpc3QgfHwgdGhpcy5lc3QuQ29sdW1uc0xpc3QubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGNvbHVtbnMgPSB0aGlzLmVzdC52aWV3TW9kZSA/IHZpZXcuY29sdW1ucyA6IHRoaXMuZXN0LmFycmF5Q29sdW1ucztcclxuICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICAvLyBTZSBsYSBjb2xvbm5hIMOoIHBpbm5hdGEgbWkgYXJyaXZhIGNvbCBzaW1vbGVvbiwgbWEgYW5jaGUgc2Ugw6ggdW5hIGNvbXBvc2l6aW9uZSBkaSBwacO5IGNvbG9ubmVcclxuICAgICAgICAgICAgbGV0IGV4Q2wgPSBjb2x1bW5zLmZpbHRlcihjYyA9PiAoY2Muc3RhcnRzV2l0aCgnwqcnKSA/IGNjLnN1YnN0cmluZygxKSA6IGNjKSA9PSBjLmlkKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGxhIGNvbG9ubmEgw6ggcGlubmF0YSBhZ2dpb3JubyBsJ2luZm9ybWF6aW9uZSBuZWxsYSB2aWV3XHJcbiAgICAgICAgICAgIGlmIChleENsLmxlbmd0aCA9PSAxKVxyXG4gICAgICAgICAgICAgICAgYy5waW5uZWQgPSBleENsWzBdLnN0YXJ0c1dpdGgoJ8KnJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBsJ2FwcHNlYXJjaCB2aWVuZSBkYSB1bm8gc3RhdG8gcHJlY2VkZW50ZSwgdXNvIGxlIGluZm9ybWF6aW9uaSBzdWxsZSBjb2xvbm5lIGNoZSBoYSBkZW50cm8sIGFsdHJpbWVudGkgc292cmFzY3Jpdm8gdHV0dG8gICoqXHJcbiAgICAgICAgICAgIGlmIChjLnZpc2libGUgJiYgY29sdW1ucy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIG5ld0NvbHNldC5wdXNoKGMuaWQpO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgaG8gdW5hIGNvbG9ubmEgbGF0byBBcHBTZWFyY2ggZSBuZWxsYSBDb2x1bW5MaXN0IG5vbiDDqCB2aXNpYmlsZSwgYWxsaW5lbyBhbGwnQXBwU2VhcmNoXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV4Q2wubGVuZ3RoID09IDEgJiYgIWMudmlzaWJsZSAmJiAhdGhpcy5lc3QudXNlTG9jYWxWaXNpYmlsaXR5KVxyXG4gICAgICAgICAgICAgICAgYy52aXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFsbGluZWFtZW50byBzdWxsJ0FwcFNlYXJjaCBwZXIgY2FzaXN0aWNoZSBpbnZlcnNlIGFsIGRpIHNvcHJhXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV4Q2wubGVuZ3RoID09IDAgJiYgYy52aXNpYmxlICAmJiAhdGhpcy5lc3QudXNlTG9jYWxWaXNpYmlsaXR5KVxyXG4gICAgICAgICAgICAgICAgYy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIE5vbiBobyBjb2xvbm5lIG5lbGxhIGFwcHNlYXJjaCwgdnVvbCBkaXJlIGNoZSBzb25vIGFsIHByaW1vIGJpbmRpbmdcclxuICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3Qudmlld01vZGUpXHJcbiAgICAgICAgICAgICAgICB2aWV3LmNvbHVtbnMgPSBuZXdDb2xzZXQ7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5Q29sdW1ucyA9IG5ld0NvbHNldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5lc3Qudmlld01vZGUgJiYgdmlldy5zYXZlZHN0YXRlKSAmJiB0aGlzLmVzdC5Db2x1bW5zT3JkZXJpbmcgJiYgdmlldy5jb2x1bW5fb3JkZXJpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBTY29ycm8gZ2xpIG9yZGluYW1lbnRpIGNoZSBhdmV2byBzYWx2YXRvIGUgcmljcmVvIGxhIENvbHVtbnNMaXN0IGluIGJhc2UgYSBsb3JvXHJcbiAgICAgICAgICAgIGxldCBuZXdDb2xMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHZpZXcuY29sdW1uX29yZGVyaW5nLmZvckVhY2goY28gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5pZCA9PSBjbylcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sTGlzdC5wdXNoKGMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVjdXBlcm8gYW5jaGUgY2FtcGkgbnVvdmkgY2hlIG5lbGwnaXRlcmF6aW9uZSB2ZWNjaGlhIG5vbiBjJ2VyYW5vIChzZXJ2ZSBkdXJhbnRlIGxvIHN2aWx1cHBvIGluIG1vZG8gZGEgbm9uIHBlcmRlcnNpIGZyYSB1biBFRElUICsgRjUgZSBsJ2FsdHJvKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuZXdDb2xMaXN0LmZpbmQodCA9PiB0ID09IGMuaWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbExpc3QucHVzaChjKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdCA9IG5ld0NvbExpc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbiBvZ25pIGNhc28gcXVlc3RvIG5vbiBtaSBzZXJ2ZSBwacO5LCBsbyByZXNldHRvICAqKlxyXG4gICAgICAgIGlmICh0aGlzLmVzdC52aWV3TW9kZSlcclxuICAgICAgICAgICAgdmlldy5zYXZlZHN0YXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGRpIHF1ZXN0YSB2YXJpYWJpbGUgdXNhdGEgb25lLWJpbmRcclxuICAgICAgICBpZiAodGhpcy5lc3QudXNlTG9jYWxWaXNpYmlsaXR5KVxyXG4gICAgICAgICAgICB0aGlzLmVzdC51c2VMb2NhbFZpc2liaWxpdHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGVtaXRDaGFuZ2VkKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbiBiYXNlIGFsbGEgdmlzaWJpbGl0w6AgcmVnaXN0cmF0YSBuZWxsZSAqKkNvbHVtbnNMaXN0KiogcXVlc3RvIG1ldG9kbyBzaSBvY2N1cGEgZGkgcHJlbmRlcmUgdHV0dGkgaSAqKkVzVGhEaXJlY3RpdmUqKiBlZCAqKkVzVGREaXJlY3RpdmUqKiByZWxhdGl2aSBlIG5hc29uZGVybGkvbW9zdHJhcmxpXHJcbiAgICAgKlxyXG4gICAgICogQ29zdG86IDEgc2NhbiBDb2x1bW5zTGlzdCwgMSBzY2FuIEVzVGhEaXJlY3RpdmVzLCAxIHNjYW4gRXNUZERpcmVjdGl2ZXNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIEhlYWRlciBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKiBAcGFyYW0ge0VzVGREaXJlY3RpdmVbXX0gdGRzIENlbGxlIGRlbGxhIHRhYmVsbGFcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXcgQXBwU2VhcmNoIGRhIHV0aWxpenphcmUgcGVyIHF1ZXN0YSBvcGVyYXppb25lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWZyZXNoQ29sdW1uc1Zpc2liaWxpdHkodGhzOiBFc1RoRGlyZWN0aXZlW10sIHRkczogRXNUZERpcmVjdGl2ZVtdLCB2aWV3OiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGxldCBuZXdDb2xzZXQgPSBbXTtcclxuICAgICAgICBsZXQgZml4ZWRUaHM6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuOyB9ID0ge307XHJcbiAgICAgICAgbGV0IGNvbHVtbnNDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IEVzVGFibGVDb2x1bW47IH0gPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBjb2xpID0gMDsgY29saSA8IHRoaXMuZXN0LkNvbHVtbnNMaXN0Lmxlbmd0aDsgY29saSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2wgPSB0aGlzLmVzdC5Db2x1bW5zTGlzdFtjb2xpXTtcclxuICAgICAgICAgICAgY29sdW1uc0NhY2hlW2NvbC5pZF0gPSBjb2w7XHJcbiAgICAgICAgICAgIGlmIChjb2wudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgIG5ld0NvbHNldC5wdXNoKChjb2wucGlubmVkID8gXCLCp1wiIDogXCJcIikgKyBjb2wuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlldylcclxuICAgICAgICAgICAgdmlldy5jb2x1bW5zID0gbmV3Q29sc2V0O1xyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5Q29sdW1ucyA9IG5ld0NvbHNldDtcclxuXHJcbiAgICAgICAgLy8gRGEgcXVpIGluIHBvaSBkZXZvbm8gZXNzZXJlIGVzZWd1aXRpIFNPTE8gaW4gZmFzZSBkaSB3cml0ZVZhbHVlIHF1aW5kaSBkZXZvIGFzc2ljdXJhcm1pIGRpIHBhc3NhcmxpIG51bGwgaW4gdHV0dGkgaSBwYXNzYWdnaSBkaXZlcnNpIGRhIHF1ZWxsb1xyXG4gICAgICAgIGlmICh0aHMpIHtcclxuICAgICAgICAgICAgLy8gRGVmaW5pc2NvIHNlIGxhIGNvbG9ubmEgw6ggdmlzaWJpbGUgaW4gYmFzZSBhbGxhIHN1YSByYXBwcmVzZW50YXppb25lIGxvY2FsZSBpbiBDb2x1bW5zTGlzdFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoLnRoVmlzaWJsZSA9IHRoLnRoRml4ZWQgfHwgKGNvbHVtbnNDYWNoZVt0aC50aF0gPyBjb2x1bW5zQ2FjaGVbdGgudGhdLnZpc2libGUgOiB0aC50aFZpc2libGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoLnRoRml4ZWQgfHwgdGgudGhHcm91cClcclxuICAgICAgICAgICAgICAgICAgICBmaXhlZFRoc1t0aC50aF0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGRzKSB7XHJcbiAgICAgICAgICAgIC8vIERlZmluaXNjbyBzZSBsYSBjZWxsYSDDqCB2aXNpYmlsZSBpbiBiYXNlIGFsbGEgc3VhIHJhcHByZXNlbnRhemlvbmUgbG9jYWxlIGluIENvbHVtbnNMaXN0XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGQgPSB0ZHNbaV07XHJcbiAgICAgICAgICAgICAgICB0ZC50ZFZpc2libGUgPSBmaXhlZFRoc1t0ZC50ZF0gfHwgKGNvbHVtbnNDYWNoZVt0ZC50ZF0gPyBjb2x1bW5zQ2FjaGVbdGQudGRdLnZpc2libGUgOiB0ZC50ZFZpc2libGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVzdC5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGxpbmVhIGdsaSBvcmRpbmFtZW50aSBkYXRpIGZyYSBsZSAqKkVzVGhzKiogZSBsZSBpbmZvcm1hemlvbmkgYWxsJ2ludGVybm8gZGVsbGEgVmlldyBiaW5kYXRhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBBcHBTZWFyY2ggZGEgdXRpbGl6emFyZSBwZXIgcXVlc3RhIG9wZXJhemlvbmVcclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZVtdfSB0aHMgQ29sb25uZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbGlnbkhlYWRlcnNPcmRlcmluZyh0aHM6IEVzVGhEaXJlY3RpdmVbXSwgdmlldzogQXBwU2VhcmNoPGFueT4pIHtcclxuICAgICAgICBsZXQgb3JkZXJzID0gdmlldyA/IHZpZXcub3JkZXJzIDogdGhpcy5lc3QuYXJyYXlPcmRlcnM7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG5cclxuICAgICAgICAgICAgdGgudGhPcmRlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb3IgPSBvcmRlcnNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAob3IuaWQgPT0gdGgudGgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGgudGhPcmRlciA9IG9yLm9yZGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhIHR1dHRlIGxlIGluZm9ybWF6aW9uaSBjaGUgc2Vydm9ubyBwZXIgZ2VzdGlyZSBpbCByYWdncnVwcGFtZW50byBkZWdsaSBoZWFkZXJcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt7IGxlYWZzOiBFc1RoRGlyZWN0aXZlW10sIGdyb3VwaW5nTGV2ZWw6IG51bWJlciwgcGFyZW50c0NhY2hlOiBhbnksIHRoc0NhY2hlOiBhbnkgfX0gT2dnZXR0byBjb250ZW5lbnRlIGxhIGxpc3RhIGRlbGxlIGZvZ2xpZSAoaGVhZGVyIGJhc2UpLCBpbCBsaXZlbGxvXHJcbiAgICAgKiBtYXNzaW1vIGRpIHJhZ2dydXBwYW1lbnRvIHJhZ2dpdW50bywgdW5hIGNhY2hlIGluIGN1aSB2ZW5nb25vIGluZGljYXRpIHR1dHRpIGkgZ3J1cHBpIGNoZSBzb25vIFwicGFyZW50XCIgKHF1aW5kaSBjaGUgcmFnZ3J1cHBhbm8gYWxtZW5vIDEgaGVhZGVyKSBlIGxhIGNhY2hlIGRlZ2xpIGhlYWRlclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVIZWFkZXJzR3JvdXBpbmdJbmZvcyh0aHM6IEVzVGhEaXJlY3RpdmVbXSk6IHsgbGVhZnM6IEVzVGhEaXJlY3RpdmVbXTsgZ3JvdXBpbmdMZXZlbDogbnVtYmVyOyBwYXJlbnRzQ2FjaGU6IGFueTsgdGhzQ2FjaGU6IGFueTsgfSB7XHJcbiAgICAgICAgLy8gUHJlZ2lybyBwZXIgdHJvdmFyZSBpIHBhcmVudFxyXG4gICAgICAgIGxldCBwYXJlbnRzQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBib29sZWFuOyB9ID0ge307XHJcbiAgICAgICAgbGV0IHRoc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUaERpcmVjdGl2ZTsgfSA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHRoc0NhY2hlW3RoLnRoXSA9IHRoO1xyXG4gICAgICAgICAgICBpZiAodGgudGhQYXJlbnQgJiYgIXBhcmVudHNDYWNoZVt0aC50aFBhcmVudF0pXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRzQ2FjaGVbdGgudGhQYXJlbnRdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlY29uZG8gZ2lybyBwZXIgYmVjY2FyZSBpbCBsaXZlbGxvIG1hc3NpbW8gZSBsYSBsaXN0YSBkaSBmb2dsaWUgKHRoIHNlbnphIHBhcmVudClcclxuICAgICAgICBsZXQgaE1heExldmVsID0gMDtcclxuICAgICAgICBsZXQgbGVhZnM6IGFueVtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gU2Ugc29ubyB1bmEgZm9nbGlhIHZlZG8gcXVhbnRpIGxpdmVsbGkgY2kgc29ubyBzb3ByYVxyXG4gICAgICAgICAgICBpZiAoIXBhcmVudHNDYWNoZVt0aC50aF0pIHtcclxuICAgICAgICAgICAgICAgIGxlYWZzLnB1c2godGgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRtcCA9IHRoaXMuanVtcHNUb0ZpbmFsUGFyZW50KHRoLCB0aHNDYWNoZSk7XHJcbiAgICAgICAgICAgICAgICBoTWF4TGV2ZWwgPSB0bXAgPiBoTWF4TGV2ZWwgPyB0bXAgOiBoTWF4TGV2ZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7IGxlYWZzOiBsZWFmcywgZ3JvdXBpbmdMZXZlbDogaE1heExldmVsLCBwYXJlbnRzQ2FjaGU6IHBhcmVudHNDYWNoZSwgdGhzQ2FjaGU6IHRoc0NhY2hlIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmEgZ2xpIGhlYWRlciBncm91cHMgZGEgdW5hIGxpc3RhIGRpIGluZm8gc3VpIHRoIGFsbCdpbnRlcm5vIGRlbGxhIHZhcmlhYmlsZSAqKlRNUFJvd1RoR3JvdXBzKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3sgbGVhZnM6IEVzVGhEaXJlY3RpdmVbXSwgZ3JvdXBpbmdMZXZlbDogbnVtYmVyLCBwYXJlbnRzQ2FjaGU6IGFueSwgdGhzQ2FjaGU6IGFueSB9fSBpbmZvcyBJbmZvcm1hemlvbmkgZGkgcmFnZ3J1cHBhbWVudG8gdmFsdXRhdGUgcHJlY2VkZW50ZW1lbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZUhlYWRlckdyb3VwcyhpbmZvczogeyBsZWFmczogRXNUaERpcmVjdGl2ZVtdOyBncm91cGluZ0xldmVsOiBudW1iZXI7IHBhcmVudHNDYWNoZTogYW55OyB0aHNDYWNoZTogeyBbaW5kZXg6c3RyaW5nXTogRXNUaERpcmVjdGl2ZX07IH0pIHtcclxuICAgICAgICBpZiAoaW5mb3MuZ3JvdXBpbmdMZXZlbCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8qKioqKiogU1RFUCAxOiBDcmVvIGwnb3V0cHV0IGRlaSByYWdncnVwcGFtZW50aSBwZXIgaGVhZGVyIGluIG1vZG8gZGEgbm9uIGRvdmVybWkgcHJlb2NjdXBhcmUgZGkgY2VsbGUgbm9uIGluaXppYWxpenphdGUgKioqKioqL1xyXG5cclxuICAgICAgICBsZXQgZXhwYW5kZWRHcm91cHMgPSBbXTtcclxuICAgICAgICBsZXQgdmlzaWJsZVVucGlubmVkTGVhZnM6IEVzVGhEaXJlY3RpdmVbXSA9ICg8YW55W10+aW5mb3MubGVhZnMpLmZpbHRlcigodDogRXNUaERpcmVjdGl2ZSkgPT4gdC50aFZpc2libGUgJiYgdC50aElmICYmICF0LnRoUGlubmVkKTtcclxuICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGluZm9zLmdyb3VwaW5nTGV2ZWw7IGwrKykge1xyXG4gICAgICAgICAgICBleHBhbmRlZEdyb3Vwcy5wdXNoKFtdKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aXNpYmxlVW5waW5uZWRMZWFmcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIGV4cGFuZGVkR3JvdXBzW2xdLnB1c2goXCJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKioqKioqIFNURVAgMjogT3JkaW5vIGxlIGZvZ2xpZSBpbiBiYXNlIGFnbGkgb3JkaW5hbWVudGkgZGVsbGUgY29sb25uZSAqKioqKiovXHJcbiAgICAgICAgbGV0IG9yZGVyZWRMZWFmcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBsZWFmOiBFc1RoRGlyZWN0aXZlID0gaW5mb3MudGhzQ2FjaGVbdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzW2ldXTtcclxuICAgICAgICAgICAgaWYgKGxlYWYudGhWaXNpYmxlICYmIGxlYWYudGhJZiAmJiAhbGVhZi50aFBpbm5lZClcclxuICAgICAgICAgICAgICAgIG9yZGVyZWRMZWFmcy5wdXNoKGxlYWYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKiBTVEVQIDM6IENyZW8gbCdhcnJheSBncm91cCBjb24gdHV0dGkgaSByaWZlcmltZW50aSBkZWwgY2FzbyAqKioqKiovXHJcbiAgICAgICAgbGV0IGN1cnJlbnRQYXJlbnQgPSBcIlwiO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJlZExlYWZzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCByZWZUaDogRXNUaERpcmVjdGl2ZSA9IG9yZGVyZWRMZWFmc1tpXTtcclxuICAgICAgICAgICAgbGV0IHByZXZUaDogRXNUaERpcmVjdGl2ZSA9IGkgLSAxID49IDAgPyBvcmRlcmVkTGVhZnNbaSAtIDFdIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgIC8vIFBhcmVudCBkaXZlcnNvIGRhIHByaW1hLCBtZXR0byBpbCBib3JkbyBhIHNpbmlzdHJhIGUgYSBkZXN0cmEgZGVsbGEgY2VsbGEgcHJlY2VkZW50ZSAoc2UgYyfDqClcclxuICAgICAgICAgICAgLy8gQWxsJ3VsdGltbyBnaXJvIG1ldHRvIGlsIGJvcmRvIGEgZGVzdHJhLiBUdXR0byBxdWVzdG8gbG8gcmllc2VndW8gcGVyIG9nbmkgY2VsbGEgaW4gbW9kbyBkYSByaXB1bGlyZSBldmVudHVhbGkgYSBjdWkgYXZldm8gYXNzZWduYXRvIHRhZyBwcmVjZWRlbnRlbWVudGVcclxuICAgICAgICAgICAgKDxhbnk+cmVmVGgpLl9sYm9yZCA9IHJlZlRoLnRoUGFyZW50ICE9IGN1cnJlbnRQYXJlbnQ7XHJcbiAgICAgICAgICAgICg8YW55PnJlZlRoKS5fcmJvcmQgPSB2aXNpYmxlVW5waW5uZWRMZWFmcy5sZW5ndGggPT0gaSArIDE7XHJcbiAgICAgICAgICAgIGlmIChwcmV2VGgpXHJcbiAgICAgICAgICAgICAgICAoPGFueT5wcmV2VGgpLl9yYm9yZCA9IHJlZlRoLnRoUGFyZW50ICE9IGN1cnJlbnRQYXJlbnQ7XHJcblxyXG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcmVmVGgudGhQYXJlbnQ7XHJcblxyXG4gICAgICAgICAgICAvLyBQZXIgb2duaSBncnVwcG8gc3JvdG9sbyBpbCBwYXJlbnQgbmVsbGEgbWF0cmljZSBkZWkgcmFnZ3J1cHBhbWVudGlcclxuICAgICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBpbmZvcy5ncm91cGluZ0xldmVsOyBsKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSByZWZUaC50aFBhcmVudDtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgIXJlZlRoLnRoUGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRHcm91cHNbbF1baV0gPSBwYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVmVGggPSBpbmZvcy50aHNDYWNoZVtwYXJlbnRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKioqKioqIFNURVAgNDogQ29tcGF0dG8gbmVsbCdlbGVtZW50byBmaW5hbGUgc3UgY3VpIGJpbmRhcm1pLiBMJ0lEIGFzc2VnbmF0byDDqCBTT0xPIHBlciBvdHRpbWl6emFyZSBnbGkgbmdGb3IgKioqKioqL1xyXG5cclxuICAgICAgICBjdXJyZW50UGFyZW50ID0gXCJcIjtcclxuICAgICAgICBsZXQgY3VycmVudFNwYW4gPSAwO1xyXG4gICAgICAgIGxldCBmaW5hbEhlYWRlcnM6IHsgSUQ6IHN0cmluZywgU3BhbjogbnVtYmVyOyBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgQ29udGVudD86IHN0cmluZywgUGlubmVkPzogYm9vbGVhbjsgQm9yZGVycz86IGJvb2xlYW47IH1bXVtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBleHBhbmRlZEdyb3Vwcy5sZW5ndGg7IGwrKykge1xyXG4gICAgICAgICAgICBsZXQgbGV2ZWxBcnJheTogeyBJRDpzdHJpbmcsIFNwYW46IG51bWJlcjsgVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IENvbnRlbnQ/OiBzdHJpbmcsIFBpbm5lZD86IGJvb2xlYW47IEJvcmRlcnM/OiBib29sZWFuOyB9W10gPSBbXTtcclxuICAgICAgICAgICAgZmluYWxIZWFkZXJzLnB1c2gobGV2ZWxBcnJheSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuU2VsZWN0aW9uIHx8IHRoaXMuZXN0Lkhhc1Bpbm5lZENvbHVtbnMpXHJcbiAgICAgICAgICAgICAgICBsZXZlbEFycmF5LnB1c2goeyBJRDogXCJfYmFzZV9zZWxfcGlubmVkXCIsIFNwYW46IDEsIFRlbXBsYXRlOiBudWxsLCBQaW5uZWQ6IHRoaXMuZXN0Lkhhc1Bpbm5lZENvbHVtbnMgfSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBoID0gMDsgaCA8IGV4cGFuZGVkR3JvdXBzW2xdLmxlbmd0aDsgaCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IGV4cGFuZGVkR3JvdXBzW2xdW2hdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gY3VycmVudFBhcmVudClcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhbisrO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFuID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxBcnJheS5wdXNoKHsgSUQ6IGAke2N1cnJlbnRQYXJlbnQgPyBpbmZvcy50aHNDYWNoZVtjdXJyZW50UGFyZW50XS50aCA6ICdub3RoJ31fJHtjdXJyZW50U3Bhbn1gLCBTcGFuOiBjdXJyZW50U3BhbiwgVGVtcGxhdGU6IGN1cnJlbnRQYXJlbnQgPyBpbmZvcy50aHNDYWNoZVtjdXJyZW50UGFyZW50XS5UZW1wbGF0ZSA6IG51bGwsIENvbnRlbnQ6IGN1cnJlbnRQYXJlbnQgPyBpbmZvcy50aHNDYWNoZVtjdXJyZW50UGFyZW50XS5fbXVsdGlfY29udGVudCA6IG51bGwsIEJvcmRlcnM6ICEhY3VycmVudFBhcmVudCB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhbiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFVsdGltYSBhZ2dpdW50YSBjaGUgYWx0cmltZW50aSBtaSByaW1hcnJlYmJlIGluIGNhY2hlXHJcbiAgICAgICAgICAgIGxldmVsQXJyYXkucHVzaCh7IElEOiBgJHtjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0udGggOiAnbm90aCd9XyR7Y3VycmVudFNwYW59YCwgU3BhbjogY3VycmVudFNwYW4sIFRlbXBsYXRlOiBjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0uVGVtcGxhdGUgOiBudWxsLCBDb250ZW50OiBjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0uX211bHRpX2NvbnRlbnQgOiBudWxsICwgQm9yZGVyczogISFjdXJyZW50UGFyZW50IH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gQWdnaXVuZ28gaSBwZXp6ZXR0aW5pIHBlciBsYSByaW1vemlvbmUgZSBnbGkgZXhwb3J0LCBzZSBwcmVzZW50aVxyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuUmVtb3ZhbClcclxuICAgICAgICAgICAgICAgIGxldmVsQXJyYXkucHVzaCh7IElEOiBcIl9iYXNlX3JlbW92YWxcIiwgU3BhbjogMSwgVGVtcGxhdGU6IG51bGwgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuRXhwb3J0IHx8IHRoaXMuZXN0LkhpZGRlbkNvbHVtbnMgfHwgdGhpcy5lc3QuQ29sdW1uc09yZGVyaW5nIHx8IHRoaXMuZXN0LkNvcm5lck1lbnVPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgbGV2ZWxBcnJheS5wdXNoKHsgSUQ6IFwiX2Jhc2VfZXh0cmFfb3B0c1wiLCBTcGFuOiAxLCBUZW1wbGF0ZTogbnVsbCB9KTtcclxuXHJcbiAgICAgICAgICAgIGN1cnJlbnRTcGFuID0gMDtcclxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKioqKioqIFNURVAgNTogU2VjY28gbGUgcmlnaGUgaW4gY3VpIG5vbiBjJ8OoIG51bGxhICoqKioqKi9cclxuXHJcbiAgICAgICAgdGhpcy5lc3QuVE1QUm93VGhHcm91cHMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaW5hbEhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGxldmVsID0gZmluYWxIZWFkZXJzW2ldO1xyXG4gICAgICAgICAgICBsZXQgZW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVsLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IGxldmVsW2pdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uVGVtcGxhdGUgfHwgaXRlbS5Db250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW1wdHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFlbXB0eSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LlRNUFJvd1RoR3JvdXBzLnB1c2gobGV2ZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGNvbGEgaWwgbnVtZXJvIGRpIHNhbHRpIGRhIHVuIGhlYWRlciBmb2dsaWEgYWxsJ3VsdGltbyBwYXJlbnQgZGVsbGEgY2F0ZW5hXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlfSB0aCBIZWFkZXIgZGEgY3VpIHNjb3JyZXJlIGkgcGFkcmkgcGVyIGNhcGlyZSBxdWFudGkgbGl2ZWxsaSBjaSBzb25vIHNvcHJhXHJcbiAgICAgKiBAcGFyYW0ge3sgW2luZGV4OiBzdHJpbmddOiBFc1RoRGlyZWN0aXZlIH19IHRoc0NhY2hlIENhY2hlIGRlZ2xpIGhlYWRlclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGp1bXBzVG9GaW5hbFBhcmVudCh0aDogRXNUaERpcmVjdGl2ZSwgdGhzQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBFc1RoRGlyZWN0aXZlOyB9KSB7XHJcbiAgICAgICAgbGV0IGp1bXBzID0gMDsgbGV0IHBhcmVudCA9IG51bGw7IGxldCBwYXJlbnRzUHJlcGVuZDogeyBpZDogc3RyaW5nLCB0bXBsPzogVGVtcGxhdGVSZWY8YW55PiwgY29udGVudD86IHN0cmluZyB9W10gPSBbXTtcclxuICAgICAgICBsZXQgYmFzZVRoUmVmID0gdGg7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBwYXJlbnQgPSB0aC50aFBhcmVudDtcclxuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGggPSB0aHNDYWNoZVtwYXJlbnRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aC50aEVtcHR5ICYmICF0aC5fbXVsdGlfY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzUHJlcGVuZC51bnNoaWZ0KHsgaWQ6IHRoLnRoLCB0bXBsOiB0aC5UZW1wbGF0ZSB9KTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aC50aEVtcHR5ICYmIHRoLl9tdWx0aV9jb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudHNQcmVwZW5kLnVuc2hpZnQoeyBpZDogdGgudGgsIGNvbnRlbnQ6IHRoLl9tdWx0aV9jb250ZW50IH0pO1xyXG4gICAgICAgICAgICAgICAganVtcHMrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gd2hpbGUgKHBhcmVudCk7XHJcbiAgICAgICAgYmFzZVRoUmVmLl90aFBhcmVudHMgPSBwYXJlbnRzUHJlcGVuZDtcclxuICAgICAgICByZXR1cm4ganVtcHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIGdlbmVyYSBsJ29yZGluZSBkaSBkZWZhdWx0IGRlbGxlIGNvbG9ubmVcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSB2aWV3IEFwcFNlYXJjaCBkYSB1dGlsaXp6YXJlIHBlciBxdWVzdGEgb3BlcmF6aW9uZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2VuZXJhdGVEZWZhdWx0T3JkZXIodGhzOiBFc1RoRGlyZWN0aXZlW10sIHZpZXc6IEFwcFNlYXJjaDxhbnk+KSB7XHJcbiAgICAgICAgaWYgKHRocy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb3JkZXJpbmdzID0gdGhpcy5lc3Qudmlld01vZGUgPyB2aWV3LmNvbHVtbl9vcmRlcmluZyA6IHRoaXMuZXN0LmFycmF5Q29sdW1uT3JkZXJpbmc7XHJcbiAgICAgICAgLy8gR2VuZXJvIG9yZGluYW1lbnRvIGRpIGRlZmF1bHQgZGEgMCBmaW5vIGEgZG92ZSBkZXZlIGFycml2YXJlLiBTaXR1YXppb25lIGF0dHVhbGUgc2VuemEgaG90cG90YXRvXHJcbiAgICAgICAgaWYgKCFvcmRlcmluZ3MgfHwgb3JkZXJpbmdzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSB0aC50aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5wdXNoKG9yZGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzID0gb3JkZXJpbmdzO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRoSWQgPSB0aC50aDtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmZpbmQobyA9PiBvID09IHRoSWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5wdXNoKHRoSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGljYSBsJ29yZGluZSBzcGVjaWZpY2F0byBhbGxlIHZhcmllIGNvbG9ubmVcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSB2aWV3IEFwcFNlYXJjaCBkYSB1dGlsaXp6YXJlIHBlciBxdWVzdGEgb3BlcmF6aW9uZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmaW5hbGl6ZSBTZSAqKnRydWUqKiBzaWduaWZpY2EgY2hlIG5vbiBtaSBhc3BldHRvIGRpIGRvdmVyIGVmZmV0dHVhcmUgYWx0cmUgb3BlcmF6aW9uaSBlIHBvc3NvIHJlbmRlcml6emFyZSBsYSBzaXR1YXppb25lIGluIGJhc2UgYWkgUm93Q29udGV4dFxyXG4gICAgICogU2VuemEgZmluYWxpemUgc2lnbmlmaWNhIGNoZSBtaSBhc3BldHRvIGFsdHJlIG9wZXJhemlvbmkgY2hlIHByaW1hIG8gcG9pIHJpY2hpYW1lcmFubm8gcXVlc3RhIGZ1bnppb25lIGNvbCBmaW5hbGl6ZS5cclxuICAgICAqXHJcbiAgICAgKiBBZCBlc2VtcGlvLCB1bmEgdm9sdGEgc2VsZXppb25hdG8gb3JkaW5hbWVudG8gZmlzaWNvL2xvZ2ljbyBkZWxsZSBjb2xvbm5lIHNvIGNoZSBwYXJ0ZSB1biBhbHRyYSByaWNlcmNhIGNoZSBtaSByaXZhbG9yaXp6ZXLDoCBkYSBcIndyaXRlVmFsdWVcIiwgY2hlIGdpw6AgY2hpYW1hIHF1ZXN0YSBmdW56aW9uZS5cclxuICAgICAqIE1ldHRlbmRvIHNvbG8gbGEgY2hpYW1hdGEgZGEgXCJ3cml0ZVZhbHVlXCIgY29tZSBcImZpbmFsaXp6YW50ZVwiIG1pIGFzc2ljdXJvIGNoZSBzbWFuYXR0YW1lbnRpIGEgZnJvbnRlbmQgbm9uIGNhdXNpbm8gZmxpY2tlcmluZyBmaW5vIGEgcXVhbmRvIG5vbiBzZXJ2b25vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhcHBseU9yZGVyaW5nKHZpZXc6IEFwcFNlYXJjaDxhbnk+LCBmaW5hbGl6ZTogYm9vbGVhbikge1xyXG4gICAgICAgIC8vIEdlbmVybyBvcmRpbmFtZW50byBwZXIgZ2xpIGhlYWRlclxyXG4gICAgICAgIGxldCBuZXdIZWFkZXJzID0gW107XHJcblxyXG4gICAgICAgIC8vIFNlIGRldm8gZmluYWxpenphcmUgYWdnYW5jaW8gdHV0dGUgbGUgdmFyaWFiaWxpIGRpIGJpbmRcclxuICAgICAgICBpZiAoZmluYWxpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmZvckVhY2gobyA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhZWRySXRlbSA9IHRoaXMuZXN0LlRNUFJvd1RIcy5maWx0ZXIodCA9PiB0LklEID09IG8pWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhlYWVkckl0ZW0pXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3SGVhZGVycy5wdXNoKGhlYWVkckl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuVE1QUm93VEhzID0gbmV3SGVhZGVycztcclxuXHJcbiAgICAgICAgICAgIC8vIEdlbmVybyBvcmRpbmFtZW50byBwZXIgbGUgY2VsbGVcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVzdC5Sb3dDb250ZXh0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLmVzdC5UTVBSb3dURHNbdGhpcy5lc3QuUm93Q29udGV4dHNbaV1dO1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0NvbnRleHQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMuZm9yRWFjaChvID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGV4dEl0ZW0gPSBjb250ZXh0LmZpbHRlcih0ID0+IHQuSUQgPT0gbylbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcG90cmViYmUgZXNzZXIgdW5kZWZpbmVkIG5lbCBjYXNvIGNpIGZvc3Nlcm8gY29sb25uZSBzb3R0byB0aElmXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29udGV4dEl0ZW0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQucHVzaChjb250ZXh0SXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5UTVBSb3dURHNbdGhpcy5lc3QuUm93Q29udGV4dHNbaV1dID0gbmV3Q29udGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICB2aWV3LmNvbHVtbl9vcmRlcmluZyA9IHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcztcclxuXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5hcnJheUNvbHVtbk9yZGVyaW5nID0gdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzO1xyXG5cclxuICAgICAgICB0aGlzLmVzdC5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgKiBBbGwnaW50ZXJubyBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiBtZXR0ZSBsYSBjb2xvbm5hIHNwZWNpZmljYXRhIHByaW1hIGRlbGxhIGNvbG9ubmEgcHJlY2VkZW50ZVxyXG4gICpcclxuICAqIEBwYXJhbSB7RXNUYWJsZUNvbHVtbn0gY29sdW1uSXRlbSBDb2xvbm5hIGRhIHNwb3N0YXJlXHJcbiAgKi9cclxuICAgIHB1YmxpYyBzZW5kVXAoY29sdW1uSXRlbTogRXNUYWJsZUNvbHVtbikge1xyXG4gICAgICAgIGxldCBpdGVtSW5kZXggPSB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5pbmRleE9mKGNvbHVtbkl0ZW0pO1xyXG4gICAgICAgIGlmICh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdFtpdGVtSW5kZXggLSAxXS5maXhlZCB8fCB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdFtpdGVtSW5kZXggLSAxXS5waW5uZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLnV0aUV4dHMuc3dhcCh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCwgaXRlbUluZGV4LCBpdGVtSW5kZXggLSAxKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHBvc3NvIGZhcmUgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkNvbHVtbnNMaXN0KSkgcGVyY2jDqSBjb250aWVuZSByaWZlcmltZW50aSBhIFRlbXBsYXRlUmVmXHJcbiAgICAgICAgbGV0IHRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRtcC5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGMpKTsgfSk7XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSB0bXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGwnaW50ZXJubyBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiBtZXR0ZSBsYSBjb2xvbm5hIHNwZWNpZmljYXRhIGRvcG8gbGEgY29sb25uYSBzdWNjZXNzaXZhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RhYmxlQ29sdW1ufSBjb2x1bW5JdGVtIENvbG9ubmEgZGEgc3Bvc3RhcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlbmREb3duKGNvbHVtbkl0ZW06IEVzVGFibGVDb2x1bW4pIHtcclxuICAgICAgICBsZXQgaXRlbUluZGV4ID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuaW5kZXhPZihjb2x1bW5JdGVtKTtcclxuICAgICAgICB0aGlzLnV0aUV4dHMuc3dhcCh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCwgaXRlbUluZGV4LCBpdGVtSW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHBvc3NvIGZhcmUgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkNvbHVtbnNMaXN0KSkgcGVyY2jDqSBjb250aWVuZSByaWZlcmltZW50aSBhIFRlbXBsYXRlUmVmXHJcbiAgICAgICAgbGV0IHRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRtcC5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGMpKTsgfSk7XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSB0bXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGwnaW50ZXJubyBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiBwaW5uYSBsYSBjb2xvbm5hIHNwZWNpZmljYXRhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RhYmxlQ29sdW1ufSBjb2x1bW5JdGVtIENvbG9ubmEgZGEgc3Bvc3RhcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBpbk9yVW5waW5Db2x1bW4oY29sdW1uSXRlbTogRXNUYWJsZUNvbHVtbikge1xyXG4gICAgICAgIGxldCBpdGVtSW5kZXggPSB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5pbmRleE9mKGNvbHVtbkl0ZW0pO1xyXG4gICAgICAgIGlmICghY29sdW1uSXRlbS5waW5uZWQpIHtcclxuICAgICAgICAgICAgY29sdW1uSXRlbS5wcmV2X2luZGV4ID0gaXRlbUluZGV4O1xyXG5cclxuICAgICAgICAgICAgLy9RdWFuZG8gcGlubm8gZGV2byBzcG9zdGFyZSBsJ2VsZW1lbnRvIGNvbWUgdWx0aW1hIGNvbG9ubmEgcGlubmF0YSBvIGNvbWUgcHJpbWEgY29sb25uYSBzZSBub24gY2UgbmUgc29ubyBkaSBwaW5uYXRlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3RbaV0ucGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuYXJyYXlNb3ZlKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LCBpdGVtSW5kZXgsIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvL1F1YW5kbyBzcGlubm8gcmlwb3J0byBsJ2VsZW1lbnRvIGFsbG8gc3Rlc3NvIGluZGljZSBpbiBjdWkgZXJhIHByaW1hIChzZSBzb25vIHN0YXRpIGZhdHRpIHNwb3N0YW1lbnRpIG5lbCBtZXp6byBjYXp6aSBkZWxsJ3V0ZW50ZSlcclxuICAgICAgICAgICAgaWYgKGNvbHVtbkl0ZW0ucHJldl9pbmRleCAhPSBudWxsICYmIGNvbHVtbkl0ZW0ucHJldl9pbmRleCAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5hcnJheU1vdmUodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QsIGl0ZW1JbmRleCwgY29sdW1uSXRlbS5wcmV2X2luZGV4KTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZSBzcGlubm8gc2VuemEgdW4gcHJldl9pbmRleCB2dW9sIGRpcmUgY2hlIGxhIGNvbG9ubmEgZXJhIHBpbm5hdGEgZGEgY29uZmlndXJhemlvbmUuIExhIHNwb3N0byBuZWwgcHJpbW8gcHVudG8gZGlzcG9uaWJpbGVcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXN0LlRNUENvbHVtbnNMaXN0W2ldLnBpbm5lZCAmJiAhdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3RbaV0uZml4ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuYXJyYXlNb3ZlKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LCBpdGVtSW5kZXgsIGkgLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2x1bW5JdGVtLnBpbm5lZCA9ICFjb2x1bW5JdGVtLnBpbm5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsbCdpbnRlcm5vIGRlbGxhIGRpYWxvZyBcIk9yZGluYW1lbnRvIGUgVmlzaWJpbGl0w6AgQ29sb25uZVwiIGludmVydGUgbGUgaW1wb3N0YXppb25pIGRpIHZpc2liaWxpdMOgIGRlbGxhIGNvbG9ubmFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGFibGVDb2x1bW59IGNvbHVtbkl0ZW0gQ29sb25uYSBkYSBzcG9zdGFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29sdW1uQ2xpY2tlZChpdGVtOiBFc1RhYmxlQ29sdW1uKSB7XHJcbiAgICAgICAgdGhpcy5lc3QubGFzdFNlbGVjdGVkSXRlbUlEID0gaXRlbS5pZDtcclxuICAgICAgICBpZiAoIXRoaXMuZXN0LkhpZGRlbkNvbHVtbnMgfHwgaXRlbS5maXhlZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBpdGVtLnZpc2libGUgPSAhaXRlbS52aXNpYmxlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlR2xvYmFsQ29sVmlzQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQWxsJ2FwZXJ0dXJhIGRlbGxhIGRpYWxvZyBcIk9yZGluYW1lbnRvIGUgVmlzaWJpbGl0w6AgQ29sb25uZVwiIHJpY2FyaWNhIGxlIGluZm9ybWF6aW9uaSBhdHR1YWxpIHBlciBwZXJtZXR0ZXJlIGxhIG1vZGlmaWNhICovXHJcbiAgICBwdWJsaWMgcmVzZXRDb2x1bW5WaXNTZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSBbXTtcclxuICAgICAgICAvLyBOb24gcG9zc28gZmFyZSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuQ29sdW1uc0xpc3QpKSBwZXJjaMOpIGNvbnRpZW5lIHJpZmVyaW1lbnRpIGEgVGVtcGxhdGVSZWZcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LkNvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LnB1c2goT2JqZWN0LmFzc2lnbih7fSwgYykpOyB9KTtcclxuXHJcbiAgICAgICAgbGV0IHJlb3JkZXJlZENvbExpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LkNvbHVtbnNPcmRlcmluZykge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMuZm9yRWFjaChvID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW4gPSB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5maWx0ZXIodCA9PiB0LmlkID09IG8pWzBdO1xyXG4gICAgICAgICAgICAgICAgLy8gUG90cmVpIG5vbiBhdmVybmUgbmVsIGNhc28gY2kgc2lhIGlsIGZsYWcgSGlkZGVuQ29sdW1ucyBhIGZhbHNlLCBldml0byBkaSBpbnNlcmlyZSBkZWdsaSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4pXHJcbiAgICAgICAgICAgICAgICAgICAgcmVvcmRlcmVkQ29sTGlzdC5wdXNoKGNvbHVtbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSByZW9yZGVyZWRDb2xMaXN0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVHbG9iYWxDb2xWaXNDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSaWFnZ2lvcm5hIGxlICoqT3JkZXJEaXJlY3RpdmVzKiogY29uIGxlIGluZm9ybWF6aW9uaSBpbiAgKipDb2x1bW5zTGlzdCoqICovXHJcbiAgICBwcml2YXRlIHJlZnJlc2hDb2x1bW5PcmRlcmluZygpIHtcclxuICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmVzdC5Db2x1bW5zTGlzdC5sZW5ndGg7IGMrKylcclxuICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLnB1c2godGhpcy5lc3QuQ29sdW1uc0xpc3RbY10uaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFZmZldHR1YSBsYSBzZWxlemlvbmUgbyBtZW5vIGRlbCBjaGVjayBnbG9iYWxlICgqKmdsb2JhbENvbFZpc0NoZWNrKiopIGRpIHZpc2liaWxpdMOgIGluIGJhc2UgYSBzZSB0dXR0ZSBsZSAqKlRNUENvbHVtbnNMaXN0Kiogc29ubyB2aXNpYmlsaSBvIG5vICovXHJcbiAgICBwdWJsaWMgdXBkYXRlR2xvYmFsQ29sVmlzQ2hlY2soKSB7XHJcbiAgICAgICAgLy8gVE1QQ29sTGlzdCB2aWVuZSByaWVtcGl0YSBkaSB1bmRlZmluZWQgbmVsIGNhc28gaW4gY3VpIHNpYSBkaXNhdHRpdmF0YSBsYSBzZWxlemlvbmUgZGVsbGUgY29sb25uZSBuYXNjb3N0ZVxyXG4gICAgICAgIHRoaXMuZXN0Lmdsb2JhbENvbFZpc0NoZWNrID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZXZlcnkodCA9PiB0LnZpc2libGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hpYW1hdG8gcXVhbmRvIHVuYSBjb2xvbm5hIHZpZW5lIHJpb3JkaW5hdGEgYWxsJ2ludGVybm8gZGVsbGEgbGlzdGEgZGVsbGUgdmlzaWJpbGl0w6AvcG9zaXppb25pIGNvbG9ubmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtDZGtEcmFnRHJvcDxFc1RhYmxlQ29sdW1uW10+fSBldmVudCBFdmVudG8gZGkgZHJvcCBkZWxsYSBsaXN0YVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29sdW1uUmVvcmRlcmVkKGV2ZW50OiBDZGtEcmFnRHJvcDxFc1RhYmxlQ29sdW1uW10+KSB7XHJcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hpYW1hdG8gcXVhbmRvIHVuYSBjb2xvbm5hIHZpZW5lIHJpb3JkaW5hdGEgYWxsJ2ludGVybm8gZGVsbGEgbGlzdGEgZGVsbGUgdmlzaWJpbGl0w6AvcG9zaXppb25pIGNvbG9ubmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGljZSBpbiBjdWkgdm9nbGlvIGRyb3BwYXJlIGwnZWxlbWVudG8gZHJhZ2dhdG9cclxuICAgICAqIEBwYXJhbSB7Q2RrRHJhZzxFc1RhYmxlQ29sdW1uPn0gaXRlbSBPZ2dldHRvIGNoZSBzdG8gZHJhZ2dhbmRvXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsYSBjb2xvbm5hIHB1w7IgZXNzZXJlIHNwb3N0YXRhIHN1bGwnaW5kaWNlICoqaW5kZXgqKiwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNvcnRQcmVkaWNhdGUoaW5kZXg6IG51bWJlciwgaXRlbTogQ2RrRHJhZzxFc1RhYmxlQ29sdW1uPik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBpdGVtQXRJbmRleCA9IHRoaXMuZXN0LkNvbHVtbnNMaXN0W2luZGV4XTtcclxuICAgICAgICByZXR1cm4gIWl0ZW1BdEluZGV4LmZpeGVkICYmICFpdGVtQXRJbmRleC5waW5uZWQgJiYgIWl0ZW0uZGF0YS5waW5uZWQgJiYgIWl0ZW0uZGF0YS5waW5uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW56aW9uZSBjaGUgZWZmZXR0dWEgbGEgY29uZmVybWEgZGVsbGEgdmlzaWJpbGl0w6AgZSBkZWxsJ29yZGluZSBkZWxsZSBjb2xvbm5lLlxyXG4gICAgICpcclxuICAgICAqIFF1ZXN0YSBzZWxlemlvbmUgdmllbmUgaW5vbHRyZSBzYWx2YXRhIG5lbGxlIHByZWZlcmVuemUgKCoqQGVzZmFlbnphL3ByZWZlcmVuY2VzKiopLCBxdWFsb3JhIGwnSW5wdXQgKipTYXZlUHJlZmVyZW5jZXMqKiBmb3NzZSB2YWxvcml6emF0b1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBub24gY2kgc29ubyBwcm9ibGVtaSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbmZpcm1Db2x1bW5WaXNpYmlsaXR5U2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIE5vbiBwZXJtZXR0byBkaSBub24gc2VsZXppb25hcmUgbnVsbGFcclxuICAgICAgICBpZiAodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZXZlcnkodCA9PiAhdC52aXNpYmxlKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2FzdGVkVmlldyA9IHRoaXMuZXN0LnZpZXdNb2RlID8gKHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcgfHwgdGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55PikgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuZXN0LkNvbHVtbnNMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHsgdGhpcy5lc3QuQ29sdW1uc0xpc3QucHVzaChPYmplY3QuYXNzaWduKHt9LCBjKSk7IH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlZnJlc2hDb2x1bW5PcmRlcmluZygpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlPcmRlcmluZyhjYXN0ZWRWaWV3LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVmcmVzaENvbHVtbnNWaXNpYmlsaXR5KG51bGwsIG51bGwsIGNhc3RlZFZpZXcpO1xyXG5cclxuICAgICAgICAvL1NhbHZvIGxlIHByZWZlcmVuY2VzIGRpIHF1ZXN0YSB2aWV3XHJcbiAgICAgICAgLy9EaSBkZWZhdWx0IHJlZ2lzdHJvIG9yZGluYW1lbnRvIGUgdmlzaWJpbGl0w6AgZGVsbGUgY29sb25uZSBuZWxsYSB2aXN0YS4gU29sbyBsZSBjb3NlIGRpIFVJXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlNhdmVQcmVmZXJlbmNlcykgXHJcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJWaWV3UHJlZmVyZW5jZXMoY2FzdGVkVmlldyk7XHJcblxyXG4gICAgICAgIC8vIFJpZXNlZ3VvIGwndWx0aW1hIHJpY2VyY2EgYmluZGF0YSBhbGxhIHRhYmVsbGFcclxuICAgICAgICAvLyBNaSBhc3NpY3VybyBkaSBmYXJsbyBkb3BvIGwnZXNwYW5zaW9uZSBkZWwgY2hhbmdlZCBvIHJpc2NoaW8gY2hlIGxhIHJpY2VyY2EgbWkgcmlkaWEgY29sb25uZSBjaGUgaW4gcmVhbHTDoCBub24gZXNpc3Rvbm9cclxuICAgICAgICBpZiAodGhpcy5lc3Qudmlld01vZGUpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuZW1pdFNlYXJjaFJlcXVlc3QodHJ1ZSwgdGhpcy5NYWluR3JvdXBWaWV3KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmlldyA9IHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZVtpXS52aWV3O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmNvbHVtbnMgPSB0aGlzLmVzdC5NYWluR3JvdXBWaWV3LmNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuY29sdW1uX29yZGVyaW5nID0gdGhpcy5lc3QuTWFpbkdyb3VwVmlldy5jb2x1bW5fb3JkZXJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUsIHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZVtpXS52aWV3KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmVzdC5pbnRlcm5hbFdyaXRlVmFsdWUoKTsgfSk7XHJcblxyXG4gICAgICAgIC8vIExvIHZvcnJlaSBtZXR0ZXJlIGxhdG8gdGVtcGxhdGUgbWEgbm9cclxuICAgICAgICB0aGlzLmVzdC5sYXN0U2VsZWN0ZWRJdGVtSUQgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dW8gbCd1bnBpbm5pbmcgZGkgdW5hIGNvbG9ubmEgaW4gbWFuaWVyYSBwcm9ncmFtbWF0aWNhIHNlbXBsaWNlbWVudGUgZXNlZ3VlbmRvIHVuYSBwZXIgdW5hIGxlIG9wZXJhemlvbmkgY2hlIHZlcnJlYmJlcm8gZXNlZ3VpdGUgYWx0cmltZW50aVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBDb2RpY2UgZGVsbGEgY29sb25uYSBkYSBzcGlubmFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5waW5Db2x1bW4oaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucmVzZXRDb2x1bW5WaXNTZWxlY3Rpb24oKTtcclxuICAgICAgICB0aGlzLnBpbk9yVW5waW5Db2x1bW4odGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZmluZCh0ID0+IHQuaWQgPT0gaWQpKTtcclxuICAgICAgICB0aGlzLmNvbmZpcm1Db2x1bW5WaXNpYmlsaXR5U2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFN1bCBjbGljayBuZWxsYSBjaGVja2JveCBkaSBzZWxlemlvbmUgZ2xvYmFsZSBzaSBzY29ycm9ubyB0dXR0ZSBsZSBjb2xvbm5lIGUgc2kgaW1wb3N0YW5vIGFsIHZhbG9yZSBkZWxsYSBjaGVjayBnbG9iYWxlICovXHJcbiAgICBwdWJsaWMgZ2xvYmFsQ29sVmlzQ2hlY2tDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdC5maXhlZClcclxuICAgICAgICAgICAgICAgIHQudmlzaWJsZSA9IHRoaXMuZXN0Lmdsb2JhbENvbFZpc0NoZWNrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
817
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sdW1uTWV0YWRhdGFIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL0NvbHVtbk1ldGFkYXRhSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUF3QixlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBTWpFLFVBQVU7QUFDVixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3JFLDZIQUE2SDtBQUM3SCxNQUFNLE9BQU8scUJBQXFCO0lBRTlCLHlCQUF5QjtJQUN6QixZQUFvQixHQUFxQixFQUFVLFNBQTJCLEVBQVUsT0FBdUIsRUFBVSxXQUErQixFQUFVLEdBQXVCO1FBQXJLLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW9CO0lBQUksQ0FBQztJQUU5TDs7Ozs7T0FLRztJQUNJLG1CQUFtQixDQUFDLEVBQVUsRUFBRSxLQUFxQjtRQUN4RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDakcsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElB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QkFBd0I7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDUixDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBMaWJzXHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IFByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvcHJlZmVyZW5jZXNcIjtcclxuXHJcbi8vIENvbXBvbmVudGkgLyBEaXJldHRpdmVcclxuaW1wb3J0IHsgRXNUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudFwiXHJcbmltcG9ydCB7IEVzVGREaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9lc190ZC5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgRXNUaERpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL2VzX3RoLmRpcmVjdGl2ZVwiO1xyXG5cclxuLy8gSGFuZGxlcnNcclxuaW1wb3J0IHsgVXRpbGl0aWVzSGFuZGxlciB9IGZyb20gXCIuL1V0aWxpdGllc0hhbmRsZXJcIjtcclxuaW1wb3J0IHsgUm93R3JvdXBpbmdIYW5kbGVyIH0gZnJvbSBcIi4vUm93R3JvdXBpbmdIYW5kbGVyXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEFwcE9yZGVyaW5nIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0FwcE9yZGVyaW5nXCI7XHJcbmltcG9ydCB7IEFwcFNlYXJjaCB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBTZWFyY2hcIjtcclxuaW1wb3J0IHsgRXNUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL0VzVGFibGVDb2x1bW5cIjtcclxuaW1wb3J0IHsgRXNUYWJsZU11bHRpVmFsdWUgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvRXNUYWJsZU11bHRpVmFsdWVcIjtcclxuXHJcbi8qKiBDbGFzc2UgY2hlIGdlc3Rpc2NlIHR1dHRlIGxlIGluZm9ybWFpem9uaSByZWxhdGl2ZSBhbGxlIGNvbG9ubmU6IHZpc2liaWxpdMOgLCBwb3NpemlvbmUsIHN0YXRvIGRpIHBpbi91bnBpbiwgZWNjIGVjYy4uLiAqL1xyXG5leHBvcnQgY2xhc3MgQ29sdW1uTWV0YWRhdGFIYW5kbGVyIHtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVzdDogRXNUYWJsZUNvbXBvbmVudCwgcHJpdmF0ZSB1dGlsaXRpZXM6IFV0aWxpdGllc0hhbmRsZXIsIHByaXZhdGUgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgcHJlZlNlcnZpY2U6IFByZWZlcmVuY2VzU2VydmljZSwgcHJpdmF0ZSByZ0g6IFJvd0dyb3VwaW5nSGFuZGxlcikgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIGdlc3Rpc2NlIGlsIGNhbWJpbyBkaSBPcmRpbmFtZW50byBkaSB1bmEgY29sb25uYVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBkZWxsYSBjb2xvbm5hIGlsIGN1aSBvcmlkbmFtZW50byDDqCBjYW1iaWF0b1xyXG4gICAgICogQHBhcmFtIHsnREVTQycgfCAnQVNDJ30gb3JkZXIgTnVvdm8gb3JkaW5lIHNlbGV6aW9uYXRvIHBlciBsYSBjb2xvbm5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVUSE9yZGVyQ2hhbmdlKGlkOiBzdHJpbmcsIG9yZGVyOiAnREVTQycgfCAnQVNDJykge1xyXG4gICAgICAgIGxldCBvcmRlcnMgPSB0aGlzLmVzdC52aWV3TW9kZSA/ICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KS5vcmRlcnMgOiB0aGlzLmVzdC5hcnJheU9yZGVycztcclxuICAgICAgICBsZXQgb3JkZXJUb0FkZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IG9yZGVyVG9SZW1vdmU6IG51bWJlciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFNlIHBlciBxdWFsY2hlIG1vdGl2byBpbCBjb3N0cnV0dG9yZSBub24gw6ggcGFzc2F0byAoY2FjaGUgdGFycGF0ZSBvIHNpbWlsYSkgZml4b1xyXG4gICAgICAgIGlmICghb3JkZXJzICYmIHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICAodGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55Pikub3JkZXJzID0gW107XHJcbiAgICAgICAgZWxzZSBpZiAoIW9yZGVycyAmJiB0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5T3JkZXJzID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ID0gb3JkZXJzW2ldO1xyXG4gICAgICAgICAgICBpZiAodC5pZCA9PSBpZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vcmRlciA9IG9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyVG9BZGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBvcmRlclRvUmVtb3ZlID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9yZGVyVG9SZW1vdmUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvcmRlcnMuc3BsaWNlKG9yZGVyVG9SZW1vdmUsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChvcmRlclRvQWRkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVzdC5NdWx0aXBsZU9yZGVyaW5nRGlyZWN0aXZlcylcclxuICAgICAgICAgICAgICAgIG9yZGVycy5wdXNoKG5ldyBBcHBPcmRlcmluZyhpZCwgb3JkZXIpKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lc3Qudmlld01vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pLm9yZGVycyA9IFtuZXcgQXBwT3JkZXJpbmcoaWQsIG9yZGVyKV07XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lc3QuYXJyYXlPcmRlcnMgPSBbbmV3IEFwcE9yZGVyaW5nKGlkLCBvcmRlcildO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1NhbHZvIGxlIHByZWZlcmVuY2VzIGRpIHF1ZXN0YSB2aWV3XHJcbiAgICAgICAgLy9EaSBkZWZhdWx0IHJlZ2lzdHJvIG9yZGluYW1lbnRvIGUgdmlzaWJpbGl0w6AgZGVsbGUgY29sb25uZSBuZWxsYSB2aXN0YS4gU29sbyBsZSBjb3NlIGRpIFVJXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlNhdmVQcmVmZXJlbmNlcykge1xyXG4gICAgICAgICAgICBsZXQgY2FzdGVkVmlldyA9IHRoaXMuZXN0LnZpZXdNb2RlID8gKHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcgfHwgdGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55PikgOiBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVmlld1ByZWZlcmVuY2VzKGNhc3RlZFZpZXcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lc3Qub25PcmRlckNoYW5nZWQuZW1pdCh7IGlkLCBvcmRlciB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMucmdILmVtaXRSb3dHcm91cGluZ1NlYXJjaGVzKGlkLCBvcmRlcnMpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5lbWl0U2VhcmNoUmVxdWVzdChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZXN0LmFycmF5TW9kZSlcclxuICAgICAgICAgICAgdGhpcy5lc3QuaW50ZXJuYWxXcml0ZVZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RyYSBsZSBwcmVmZXJlbmNlIHJlbGF0aXZlIGFsbGEgdmlldyBwYXNzYXRhIGNvbWUgcGFyYW1ldHJvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBjYXN0ZWRWaWV3IFZpZXcgZGkgY3VpIHNhbHZhcmUgY29sb25uZSBlIG9yZGluYW1lbnRvIGNvbG9ubmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyVmlld1ByZWZlcmVuY2VzKGNhc3RlZFZpZXc6IEFwcFNlYXJjaDxhbnk+KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVzdC5uZ0NvbnRyb2wubmFtZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9uIHBvc3NvIHV0aWxpenphcmUgbGUgcHJlZmVyZW5jZSBzZW56YSBhdmVyZSB1biAnbmFtZScgcGVyIGxhIHRhYmVsbGFcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5wcmVmU2VydmljZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9uIHBvc3NvIHV0aWxpenphcmUgbGUgcHJlZmVyZW5jZSBzZW56YSBjaGUgaWwgcGFjY2hldHRvIEBlc2ZhZW56YS9wcmVmZXJlbmNlcyBzaWEgaW5zdGFsbGF0b1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNvbHVtbnMgPSB0aGlzLmVzdC5hcnJheU1vZGUgPyB0aGlzLmVzdC5hcnJheUNvbHVtbnMgOiBjYXN0ZWRWaWV3LmNvbHVtbnM7XHJcbiAgICAgICAgbGV0IGNvbHVtbnNPcmRlcmluZ3MgPSB0aGlzLmVzdC5hcnJheU1vZGUgPyB0aGlzLmVzdC5hcnJheUNvbHVtbk9yZGVyaW5nIDogY2FzdGVkVmlldy5jb2x1bW5fb3JkZXJpbmc7XHJcbiAgICAgICAgbGV0IGNvbHVtbk9yZGVycyA9IHRoaXMuZXN0LmFycmF5TW9kZSA/IFtdIDogY2FzdGVkVmlldy5vcmRlcnM7XHJcbiAgICAgICAgdmFyIHRvU3RvcmUgPSB7XHJcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUoY29sdW1ucykgYXMgc3RyaW5nW10sXHJcbiAgICAgICAgICAgIGNvbHVtbl9vcmRlcmluZzogdGhpcy51dGlFeHRzLmRlZXBDbG9uZShjb2x1bW5zT3JkZXJpbmdzKSBhcyBzdHJpbmdbXSxcclxuICAgICAgICAgICAgb3JkZXJzOiB0aGlzLnV0aUV4dHMuZGVlcENsb25lKGNvbHVtbk9yZGVycykgYXMgc3RyaW5nW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucHJlZlNlcnZpY2Uuc2V0SXRlbSg8c3RyaW5nPnRoaXMuZXN0Lm5nQ29udHJvbC5uYW1lLCB0b1N0b3JlKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRlbmRvIGRhZ2xpICoqRXNUaHMqKiBlc3RyYXBwb2xvIGxhIGxpc3RhIGRpICoqRXNUYWJsZUNvbHVtbioqIGNoZSBxdWVzdGEgdGFiZWxsYSBkb3Zyw6AgZXZlbnR1YWxtZW50ZSBnZXN0aXJlIHBlciBWaXNpYmlsaXTDoCBlIE9yZGluZVxyXG4gICAgICpcclxuICAgICAqIENvc3RvOiAxIHNjYW4gRXNUaHNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmV2aWV3Q29sdW1uc0xpc3QodGhzOiBFc1RoRGlyZWN0aXZlW10pIHtcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCA9IFtdO1xyXG4gICAgICAgIGlmICh0aHMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gQXBwZW5hIGlsIGNvbnRlbnRDaGlsZHJlbiDDqCB2YWxvcml6emF0byBzY29ycm8gdHV0dGkgZ2xpIGhlYWRlclxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSB0aC50aDtcclxuICAgICAgICAgICAgLy8gU2Ugbm9uIGhvIHVuIGlkIGlsIHRoIMOoIGNvbnNpZGVyYXRvIGluZXJ0ZVxyXG4gICAgICAgICAgICBpZiAoIWNvbHVtbilcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gU2Fsdm8gbGUgaW5mb3JtYXppb25pIGRlbGwnaGVhZGVyIHBlciBmYXIgcGFydGUgZGVsbGEgbGlzdGEgZGEgY3VpIHNjZWdsaWVyZSBxdWFsaSBjb2xvbm5lIHZpc3VhbGl6emFyZS9uYXNjb25kZXJlXHJcbiAgICAgICAgICAgIC8vIERpIGRlZmF1bHQgbGEgdmlzaWJpbGl0w6Agw6ggcXVlbGxhIGltcG9zdGF0YSBuZWwgY29tcG9uZW50ZVxyXG4gICAgICAgICAgICBpZiAoKHRoaXMuZXN0LkhpZGRlbkNvbHVtbnMgfHwgdGgudGhWaXNpYmxlKSAmJiB0aC50aElmKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNseVBpbm5lZCA9ICF0aGlzLmVzdC5Db2x1bW5zTGlzdCB8fCB0aGlzLmVzdC5Db2x1bW5zTGlzdC5sZW5ndGggPT0gMCA/IG51bGwgOiB0aGlzLmVzdC5Db2x1bW5zTGlzdC5maW5kKHQgPT4gdC5pZCA9PSBjb2x1bW4pIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG9BZGQgPSBuZXcgRXNUYWJsZUNvbHVtbihjb2x1bW4sIHRoLnRoU3RhdGljQ29udGVudCwgdGgudGhWaXNpYmxlLCAodGgudGhGaXhlZCB8fCB0aC50aEdyb3VwKSwgcHJldmlvdXNseVBpbm5lZCA9PSBudWxsID8gdGgudGhQaW5uZWQgOiBwcmV2aW91c2x5UGlubmVkLnBpbm5lZCwgdGgudGhQaW5uYWJsZSwgdGgudGhQaW5uZWRXaWR0aCwgdGguVGVtcGxhdGUsIHRoLl90aFBhcmVudHMsIHRoLl9tdWx0aSwgdGguX211bHRpX2NvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzbHlQaW5uZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgdG9BZGQucHJldl9pbmRleCA9IHByZXZpb3VzbHlQaW5uZWQucHJldl9pbmRleDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LnB1c2godG9BZGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXN0LkNvbHVtbnNMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHsgdGhpcy5lc3QuQ29sdW1uc0xpc3QucHVzaChPYmplY3QuYXNzaWduKHt9LCBjKSk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbiBjYXNvIHNpYW5vIGNvbmZpZ3VyYXRpIGRlaSB0aCBcIk11bHRpXCIgKHZlZGVyZSBsYSBkZXNjcml6aW9uZSBkZWwgY2FtcG8gKip0aE11bHRpKiogZGkgKipFc1RoRGlyZWN0aXZlKiopIHF1ZXN0byBtZXRvZG8gbGkgXCJzcm90b2xhXCIgaW4gdHV0dGkgaSB0aC90ZCBjaGUgZGV2b25vIGVmZmV0dGl2YW1lbnRlIGRpdmVudGFyZSAqL1xyXG4gICAgcHVibGljIGV4cGFuZE11bHRpVGhzQW5kVGRzKHRoczogRXNUaERpcmVjdGl2ZVtdLCB0ZHM6IEVzVGREaXJlY3RpdmVbXSwgaXRlbXM6IGFueVtdKToge2V4cFRoczogRXNUaERpcmVjdGl2ZVtdLCBleHBUZHM6IEVzVGREaXJlY3RpdmVbXX0ge1xyXG5cclxuICAgICAgICAvLyBSZWdpc3RybyBsZSBpbmZvIHN1aSBtdWx0aXByb3ZpZGVyXHJcbiAgICAgICAgbGV0IG11bHRpRGVmczogeyBbaWQ6IHN0cmluZ106IHsgT24/OiBzdHJpbmcsIHRocmVmOiBFc1RoRGlyZWN0aXZlLCB0ZHJlZjogRXNUZERpcmVjdGl2ZSwgdGhnZW46IHsgW2lkOiBzdHJpbmddOiBFc1RoRGlyZWN0aXZlIH0sIHRkZ2VuOiB7IFtpZDogc3RyaW5nXTogRXNUZERpcmVjdGl2ZSB9IH0gfSA9IHsgfTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcbiAgICAgICAgICAgIGlmICghdGgudGhNdWx0aSlcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgbXVsdGlEZWZzW3RoLnRoXSA9IHsgT246IHRoLnRoLCB0ZHJlZjogbnVsbCwgdGhyZWY6IHRoLCB0aGdlbjoge30sIHRkZ2VuOiB7fSB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQXNzZWdubyBsZSBpbmZvIGFuY2hlIGFpIHRkXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRkID0gdGRzW2ldO1xyXG4gICAgICAgICAgICB0ZC5fbXVsdGkgPSAhIW11bHRpRGVmc1t0ZC50ZF07XHJcbiAgICAgICAgICAgIGlmKHRkLl9tdWx0aSlcclxuICAgICAgICAgICAgICAgIG11bHRpRGVmc1t0ZC50ZF0udGRyZWYgPSB0ZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJpbXVvdm8gaSBtdWx0aXRlbXBsYXRlIGRhbGxlIGJhbGxlXHJcbiAgICAgICAgLy8gTi5COiBEYXRvIGNoZSBsYSBwcmltYSBvcGVyYXppb25lIHN1IHRoIGUgdGQgw6ggcXVlc3RhIGlsIHJpZmVyaW1lbnRvIG9yaWdpbmFsZSB2aWVuZSBzb3ZyYXNjcml0dG8sIHF1ZXN0byBzaWduaWZpY2EgY2hlIGRldm8gcmktZW1ldHRlcmUgaSBkdWUgbnVvdmkgYXJyYXlcclxuICAgICAgICB0aHMgPSB0aHMuZmlsdGVyKHQgPT4gIXQudGhNdWx0aSk7XHJcbiAgICAgICAgdGRzID0gdGRzLmZpbHRlcih0ID0+ICF0Ll9tdWx0aSk7XHJcblxyXG4gICAgICAgIGxldCBwYXJlbnRUaHM6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuOyB9ID0geyB9O1xyXG4gICAgICAgIGxldCBhZGRlZEhlYWRlcnM6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuOyB9ID0geyB9O1xyXG4gICAgICAgIGxldCB0ZHNUb0FkZDogeyBbaWQ6IHN0cmluZ10gOiBFc1RkRGlyZWN0aXZlfSA9IHsgfTtcclxuICAgICAgICBsZXQgdGhzVG9BZGQ6IEVzVGhEaXJlY3RpdmVbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBQZXIgb2duaSBpdGVtIHZlZG8gc2UgY2kgc29ubyBkZWkgbXVsdGkgcGVyIGxlIHByb3ByaWV0w6AgY2hlIGxpIGRlZmluaXNjb25vXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgbGV0IGl0bSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBtdWx0aURlZnMpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNlIGxhIHByb3ByaWV0w6AgZGVsIG11bHRpIGVzaXN0ZSBuZWxsJ29nZ2V0dG8gZWQgaGEgdW5hIGx1bmdoZXp6YVxyXG4gICAgICAgICAgICAgICAgaWYgKGl0bVtwcm9wXSAmJiBpdG1bcHJvcF0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG11bHRpUmVmID0gbXVsdGlEZWZzW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWZ0ZCA9IG11bHRpUmVmLnRkcmVmO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWZ0aCA9IG11bHRpUmVmLnRocmVmO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgaXRtW3Byb3BdLmxlbmd0aDsgaWkrKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGVhZGVyIGdpw6AgYWdnaXVudG8sIG5vbiBkZXZvIGluc2VyaXJlIGFsdHJpIHRlbXBsYXRlIGRpIGhlYWRlci9jb2xvbm5hXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlc3RtdiA9IDxFc1RhYmxlTXVsdGlWYWx1ZT5pdG1bcHJvcF1baWldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdG12Ll9oZWFkZXJzSGllcmFyY2h5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0bXYuX2hlYWRlcnNIaWVyYXJjaHkgPSBlc3Rtdi5oZWFkZXJfZ3JvdXAgPyBlc3Rtdi5oZWFkZXJfZ3JvdXAuc3BsaXQoXCI+XCIpLm1hcCh0ID0+IHQudHJpbSgpKSA6IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gZXN0bXYuaGVhZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gZXN0bXYuaGVhZGVyX2dyb3VwIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnRzSGllciA9IGVzdG12Ll9oZWFkZXJzSGllcmFyY2h5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGVkSGVhZGVyc1tgJHtwYXJlbnR9XyR7aGVhZGVyVmFsdWV9YF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRIZWFkZXJzW2Ake3BhcmVudH1fJHtoZWFkZXJWYWx1ZX1gXSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXIgb2duaSB2YWxvcmUgZGl2ZXJzbyBkZWxsZSBwcm9wcmlldMOgIGRldm8gYWdnaXVuZ2VyZSB1biB0ZCBlIHVuIHRoLCBxdWVzdCd1bHRpbW8gZGV2J2Vzc2VyZSBldmVudHVhbG1lbnRlIGNvbGxlZ2F0byBhZCB1biBoZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld3RIID0gbmV3IEVzVGhEaXJlY3RpdmUocmVmdGguVGVtcGxhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC5fbXVsdGkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC5fbXVsdGlfY29udGVudCA9IGhlYWRlclZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aCA9IGAke3Byb3B9XyR7aWl9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGhDbGFzcyA9IHJlZnRoLnRoQ2xhc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoU2hyaW5rID0gcmVmdGgudGhTaHJpbms7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoSWYgPSByZWZ0aC50aElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aFZpc2libGUgPSByZWZ0aC50aFZpc2libGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoV3JhcCA9IHJlZnRoLnRoV3JhcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWwgcGFyZW50IMOoIHNlbXByZSBsJ3VsdGltbyBuZWxsYSBnZXJhcmNoaWEgZGkgcGFkcmlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGhQYXJlbnQgPSBwYXJlbnRzSGllcltwYXJlbnRzSGllci5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGhPcmRlcmFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50c0hpZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXIgPSBwYXJlbnRzSGllcltpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50VGhzW3Bhcl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50VGhzW3Bhcl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aFBhcmVudCA9IG5ldyBFc1RoRGlyZWN0aXZlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhQYXJlbnQudGggPSBwYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aFBhcmVudC5fbXVsdGlfY29udGVudCA9IHBhcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoUGFyZW50LnRoUGFyZW50ID0gaSA+IDAgPyBwYXJlbnRzSGllcltpIC0gMV0gOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhzVG9BZGQucHVzaCh0aFBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoc1RvQWRkLnB1c2gobmV3dEgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RkID0gbmV3IEVzVGREaXJlY3RpdmUocmVmdGQuVGVtcGxhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdUZC5fbXVsdGkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdUZC50ZCA9IGAke3Byb3B9XyR7aWl9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGQudGRDbGFzcyA9IHJlZnRkLnRkQ2xhc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RkLnRkSWYgPSByZWZ0ZC50ZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdUZC50ZFZpc2libGUgPSByZWZ0ZC50ZFZpc2libGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkc1RvQWRkW25ld1RkLnRkXSA9IG5ld1RkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3JkaW5vIGdsaSBoZWFkZXIgYWdnaXVudGkgaW4gYmFzZSBhbCBQYXJlbnQsIHNlIHByZXNlbnRlLCBlIGxpIGFnZ2l1bmdvIGFsbGEgbGlzdGEgZGVpIHRoLCBkb3BvZGljaMOpIGluIGJhc2UgYWxsbyBzdGVzc28gb3JkaW5hbWVudG8gYWdnaXVuZ28gaSByZWxhdGl2aSB0ZFxyXG4gICAgICAgIGxldCBvcmRlcmVkVGhzID0gW107XHJcblxyXG4gICAgICAgIC8vIFByaW1hIG1ldHRvIHR1dHRpIGkgdGggc2VuemEgcGFyZW50LCBwb2kgcGVyIG9nbmkgcGFyZW50IHByZW5kbyBpIHRoIG9yZGluYXRpIGNvbWUgbGkgdHJvdm8gbmVsbGEgbGlzdGFcclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhzVG9BZGQubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICBpZighdGhzVG9BZGRbaV0udGhQYXJlbnQpXHJcbiAgICAgICAgICAgICAgICBvcmRlcmVkVGhzLnB1c2godGhzVG9BZGRbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IobGV0IHByb3AgaW4gcGFyZW50VGhzKXtcclxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoc1RvQWRkLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGxldCB0aCA9IHRoc1RvQWRkW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYodGgudGhQYXJlbnQgJiYgdGgudGhQYXJlbnQgPT0gcHJvcClcclxuICAgICAgICAgICAgICAgICAgICBvcmRlcmVkVGhzLnB1c2godGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aHMgPSBbLi4udGhzLCAuLi50aHNUb0FkZF07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHNUb0FkZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBTZSBpbCB0aCDDqCB1biBoZWFkZXIgdGQgdmVycmViYmUgdW5kZWZpbmVkLiBMbyBhZ2dpdW5nbyBzb2xvIHNlIMOoIGVmZmV0dGl2YW1lbnRlIHByZXNlbnRlXHJcbiAgICAgICAgICAgIGxldCB0ZCA9IHRkc1RvQWRkW3Roc1RvQWRkW2ldLnRoXTtcclxuICAgICAgICAgICAgaWYgKHRkKVxyXG4gICAgICAgICAgICAgICAgdGRzLnB1c2godGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHsgZXhwVGRzOiB0ZHMsIGV4cFRoczogdGhzIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVuZGUgaSB0aCBlIGkgdGQgaW4gbW9kYWxpdMOgIGRpcmV0aXZlIGUgbGkgb3JkaW5hIGluIGJhc2UgYSBzZSBjaSBzb25vIGNvbG9ubmUgZml4ZWQgbyBtZW5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlRml4ZWRDb2x1bW5zQXRUaGVCZWdpbm5pbmcodGhzOiBFc1RoRGlyZWN0aXZlW10sIHRkczogRXNUZERpcmVjdGl2ZVtdKSB7XHJcblxyXG4gICAgICAgIGxldCBmaXhlZHMgPSAwLCBwaW5uZWRzID0gMDtcclxuICAgICAgICBsZXQgY29sdW1uc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUYWJsZUNvbHVtbjsgfSA9IHt9O1xyXG4gICAgICAgIGxldCBjb2x1bW5zSW5kZXhDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlcjsgfSA9IHt9O1xyXG5cclxuICAgICAgICAvLyBDcmVvIGxhIGNhY2hlIGRlbGxlIGNvbG9ubmVcclxuICAgICAgICBmb3IgKGxldCBjb2xpID0gMDsgY29saSA8IHRoaXMuZXN0LkNvbHVtbnNMaXN0Lmxlbmd0aDsgY29saSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2wgPSB0aGlzLmVzdC5Db2x1bW5zTGlzdFtjb2xpXTtcclxuICAgICAgICAgICAgY29sdW1uc0NhY2hlW2NvbC5pZF0gPSBjb2w7XHJcblxyXG4gICAgICAgICAgICAvLyBBbmNoZSBwZXIgbGUgY29sdW1uc2xpc3Qgc3Bvc3RvIGxlIHBpbm5hdGUgbyBsZSBmaXhlZCBhbGwnaW5pemlvXHJcbiAgICAgICAgICAgIGlmIChjb2wucGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29saSAhPSBwaW5uZWRzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aGlzLmVzdC5Db2x1bW5zTGlzdCwgY29saSwgcGlubmVkcyk7XHJcbiAgICAgICAgICAgICAgICBwaW5uZWRzKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNlIHVuYSBjb2xvbm5hIMOoIHNpYSBwaW5uYXRhIGNoZSBmaXhhdGEgbGEgY29uc2lkZXJvIHVuaWNhbWVudGUgcGlubmF0YVxyXG4gICAgICAgICAgICBpZiAoY29sLmZpeGVkICYmICFjb2wucGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29saSAhPSBwaW5uZWRzICsgZml4ZWRzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aHMsIGNvbGksIHBpbm5lZHMgKyBmaXhlZHMpO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBpbm5lZHMgPSBmaXhlZHMgPSAwO1xyXG5cclxuICAgICAgICAvLyBTcG9zdG8gdHV0dGkgZ2xpIGhlYWRlciBmaXhlZCBvIHBpbm5lZCBhbGwnaW5pemlvXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gUmlhc3NlZ25vIHNlbXByZSBwZXIgcmlwdWxpcmUgdmFsb3JpIGRpIHBhcnRlbnphIG8gcGVyIGFnZ2lvcm5hcmxpIGluIGNhc28gZGkgbW9kaWZpY2hlIHV0ZW50ZVxyXG4gICAgICAgICAgICB0aC50aFBpbm5lZCA9ICghY29sdW1uc0NhY2hlW3RoLnRoXSAmJiB0aC50aFBpbm5lZCkgfHwgKGNvbHVtbnNDYWNoZVt0aC50aF0gJiYgY29sdW1uc0NhY2hlW3RoLnRoXS5waW5uZWQpO1xyXG4gICAgICAgICAgICBpZiAodGgudGhQaW5uZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpICE9IHBpbm5lZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuYXJyYXlNb3ZlKHRocywgaSwgcGlubmVkcyk7XHJcbiAgICAgICAgICAgICAgICBwaW5uZWRzKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vSW4gcXVlc3RvIGNhc28gc29ubyBpbmZvcm1hemlvbmkgc3RhdGljaGUgaW52ZWNlLCBub24gbW9kaWZpY2FiaWxpIGRhbGwndXRlbnRlLCBxdWluZGkgbm9uIG1pIGTDsiBwcmVvY2N1cGF6aW9uaVxyXG4gICAgICAgICAgICBpZiAoKHRoLnRoRml4ZWQgfHwgdGgudGhHcm91cCkgJiYgIXRoLnRoUGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSBwaW5uZWRzICsgZml4ZWRzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aHMsIGksIHBpbm5lZHMgKyBmaXhlZHMpO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhY2hlIGRlZ2xpIGluZGljaSBwZXIgcmlwb3NpemlvbmFyZSBpIHRkIGNvbWUgaSB0aFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBjb2x1bW5zSW5kZXhDYWNoZVsoPEVzVGhEaXJlY3RpdmU+dGhzW2ldKS50aF0gPSBpO1xyXG5cclxuICAgICAgICAvLyBSaW9yZGlubyBsZSBjZWxsZSBwZXIgZmFyZ2xpIG1hbnRlbmVyZSBsYSBzdGVzc2Egc3RydXR0dXJhIGRlaSB0aFxyXG4gICAgICAgIGxldCBuZXdUZHMgPSBuZXcgQXJyYXkodGhzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtID0gdGRzW2ldIGFzIEVzVGREaXJlY3RpdmU7XHJcbiAgICAgICAgICAgIG5ld1Rkc1tjb2x1bW5zSW5kZXhDYWNoZVtpdGVtLnRkXV0gPSBpdGVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lc3QuSGFzUGlubmVkQ29sdW1ucyA9IHBpbm5lZHMgPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbiBiYXNlIGFsbGEgY29uZmlndXJhemlvbmUgZGVsbGUgY29sb25uZSBjYWxjb2xhIGxlIGRpbWVuaW9uaSBkZWxsZSBjb2xvbm5lIHBpbm5hdGUgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZVBpbm5lZENvbHVtbnNXaWR0aCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZXN0Lkhhc1Bpbm5lZENvbHVtbnMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5lc3QuUGlubmVkQ29udGFpbmVyV2lkdGggPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuQ29sdW1uc0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZXN0LkNvbHVtbnNMaXN0W2ldO1xyXG4gICAgICAgICAgICBpZiAoY29sLnBpbm5lZCAmJiBjb2wudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LlBpbm5lZENvbnRhaW5lcldpZHRoICs9IGNvbC5waW5uZWRXaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lc3QuUGlubmVkQ29udGFpbmVyV2lkdGggKz0gdGhpcy5lc3QuU2VsZWN0aW9uID8gMjUgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVybWluYXRvIGlsIGJpbmRpbmcgZGVsbGUgY29sb25uZSBkYSAqKnJldmlld0NvbHVtbnNMaXN0KiogZSBkZWxsYSAqKlZpZXcqKiBkYWwgKip3cml0ZVZhbHVlKiogcXVlc3RvIG1ldG9kbyBzaSBvY2N1cGFcclxuICAgICAqIGRlbGwnYWxsaW5lYW1lbnRvIGRlbGxlIGluZm9ybWF6aW9uaSBmcmEgbGUgY29sb25uZSBjYWxjb2xhdGUgaW50ZXJuYW1lbnRlIGUgbGUgaW5mb3JtYXppb25pIHN1bGxlIGNvbG9ubmUgY2hlIGFycml2YW5vIGRhbGwnQXBwU2VhcmNoXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBBcHBTZWFyY2ggZGEgdXRpbGl6emFyZSBwZXIgcXVlc3RhIG9wZXJhemlvbmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXNlTG9jYWxWaXNpYmlsaXR5IEluZGljYSBkaSB1dGlsaXp6YXJlIGxlIGltcG9zdGF6aW9uaSBkaSB2aXNpYmlsaXTDoCBsb2NhbGkgc2VuemEgYWxsaW5lYXJsZSBhbGxhIHZpZXdcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFsaWduQ29sdW1uc0lmTG9hZGVkVmlldyh2aWV3OiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGxldCBlbWl0Q2hhbmdlZCA9IHRoaXMuZXN0LnZpZXdNb2RlICYmIHZpZXcuc2F2ZWRzdGF0ZTtcclxuICAgICAgICBsZXQgbmV3Q29sc2V0ID0gW107XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5lc3QuQ29sdW1uc0xpc3QgfHwgdGhpcy5lc3QuQ29sdW1uc0xpc3QubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGNvbHVtbnMgPSB0aGlzLmVzdC52aWV3TW9kZSA/IHZpZXcuY29sdW1ucyA6IHRoaXMuZXN0LmFycmF5Q29sdW1ucztcclxuICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICAvLyBTZSBsYSBjb2xvbm5hIMOoIHBpbm5hdGEgbWkgYXJyaXZhIGNvbCBzaW1vbGVvbiwgbWEgYW5jaGUgc2Ugw6ggdW5hIGNvbXBvc2l6aW9uZSBkaSBwacO5IGNvbG9ubmVcclxuICAgICAgICAgICAgbGV0IGV4Q2wgPSBjb2x1bW5zLmZpbHRlcihjYyA9PiAoY2Muc3RhcnRzV2l0aCgnwqcnKSA/IGNjLnN1YnN0cmluZygxKSA6IGNjKSA9PSBjLmlkKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGxhIGNvbG9ubmEgw6ggcGlubmF0YSBhZ2dpb3JubyBsJ2luZm9ybWF6aW9uZSBuZWxsYSB2aWV3XHJcbiAgICAgICAgICAgIGlmIChleENsLmxlbmd0aCA9PSAxKVxyXG4gICAgICAgICAgICAgICAgYy5waW5uZWQgPSBleENsWzBdLnN0YXJ0c1dpdGgoJ8KnJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBsJ2FwcHNlYXJjaCB2aWVuZSBkYSB1bm8gc3RhdG8gcHJlY2VkZW50ZSwgdXNvIGxlIGluZm9ybWF6aW9uaSBzdWxsZSBjb2xvbm5lIGNoZSBoYSBkZW50cm8sIGFsdHJpbWVudGkgc292cmFzY3Jpdm8gdHV0dG8gICoqXHJcbiAgICAgICAgICAgIGlmIChjLnZpc2libGUgJiYgY29sdW1ucy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIG5ld0NvbHNldC5wdXNoKGMuaWQpO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgaG8gdW5hIGNvbG9ubmEgbGF0byBBcHBTZWFyY2ggZSBuZWxsYSBDb2x1bW5MaXN0IG5vbiDDqCB2aXNpYmlsZSwgYWxsaW5lbyBhbGwnQXBwU2VhcmNoXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV4Q2wubGVuZ3RoID09IDEgJiYgIWMudmlzaWJsZSAmJiAhdGhpcy5lc3QudXNlTG9jYWxWaXNpYmlsaXR5KVxyXG4gICAgICAgICAgICAgICAgYy52aXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFsbGluZWFtZW50byBzdWxsJ0FwcFNlYXJjaCBwZXIgY2FzaXN0aWNoZSBpbnZlcnNlIGFsIGRpIHNvcHJhXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV4Q2wubGVuZ3RoID09IDAgJiYgYy52aXNpYmxlICAmJiAhdGhpcy5lc3QudXNlTG9jYWxWaXNpYmlsaXR5KVxyXG4gICAgICAgICAgICAgICAgYy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIE5vbiBobyBjb2xvbm5lIG5lbGxhIGFwcHNlYXJjaCwgdnVvbCBkaXJlIGNoZSBzb25vIGFsIHByaW1vIGJpbmRpbmdcclxuICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3Qudmlld01vZGUpXHJcbiAgICAgICAgICAgICAgICB2aWV3LmNvbHVtbnMgPSBuZXdDb2xzZXQ7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5Q29sdW1ucyA9IG5ld0NvbHNldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5lc3Qudmlld01vZGUgJiYgdmlldy5zYXZlZHN0YXRlKSAmJiB0aGlzLmVzdC5Db2x1bW5zT3JkZXJpbmcgJiYgdmlldy5jb2x1bW5fb3JkZXJpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBTY29ycm8gZ2xpIG9yZGluYW1lbnRpIGNoZSBhdmV2byBzYWx2YXRvIGUgcmljcmVvIGxhIENvbHVtbnNMaXN0IGluIGJhc2UgYSBsb3JvXHJcbiAgICAgICAgICAgIGxldCBuZXdDb2xMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHZpZXcuY29sdW1uX29yZGVyaW5nLmZvckVhY2goY28gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5pZCA9PSBjbylcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sTGlzdC5wdXNoKGMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVjdXBlcm8gYW5jaGUgY2FtcGkgbnVvdmkgY2hlIG5lbGwnaXRlcmF6aW9uZSB2ZWNjaGlhIG5vbiBjJ2VyYW5vIChzZXJ2ZSBkdXJhbnRlIGxvIHN2aWx1cHBvIGluIG1vZG8gZGEgbm9uIHBlcmRlcnNpIGZyYSB1biBFRElUICsgRjUgZSBsJ2FsdHJvKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuZXdDb2xMaXN0LmZpbmQodCA9PiB0ID09IGMuaWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbExpc3QucHVzaChjKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdCA9IG5ld0NvbExpc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbiBvZ25pIGNhc28gcXVlc3RvIG5vbiBtaSBzZXJ2ZSBwacO5LCBsbyByZXNldHRvICAqKlxyXG4gICAgICAgIGlmICh0aGlzLmVzdC52aWV3TW9kZSlcclxuICAgICAgICAgICAgdmlldy5zYXZlZHN0YXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGRpIHF1ZXN0YSB2YXJpYWJpbGUgdXNhdGEgb25lLWJpbmRcclxuICAgICAgICBpZiAodGhpcy5lc3QudXNlTG9jYWxWaXNpYmlsaXR5KVxyXG4gICAgICAgICAgICB0aGlzLmVzdC51c2VMb2NhbFZpc2liaWxpdHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGVtaXRDaGFuZ2VkKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbiBiYXNlIGFsbGEgdmlzaWJpbGl0w6AgcmVnaXN0cmF0YSBuZWxsZSAqKkNvbHVtbnNMaXN0KiogcXVlc3RvIG1ldG9kbyBzaSBvY2N1cGEgZGkgcHJlbmRlcmUgdHV0dGkgaSAqKkVzVGhEaXJlY3RpdmUqKiBlZCAqKkVzVGREaXJlY3RpdmUqKiByZWxhdGl2aSBlIG5hc29uZGVybGkvbW9zdHJhcmxpXHJcbiAgICAgKlxyXG4gICAgICogQ29zdG86IDEgc2NhbiBDb2x1bW5zTGlzdCwgMSBzY2FuIEVzVGhEaXJlY3RpdmVzLCAxIHNjYW4gRXNUZERpcmVjdGl2ZXNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIEhlYWRlciBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKiBAcGFyYW0ge0VzVGREaXJlY3RpdmVbXX0gdGRzIENlbGxlIGRlbGxhIHRhYmVsbGFcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXcgQXBwU2VhcmNoIGRhIHV0aWxpenphcmUgcGVyIHF1ZXN0YSBvcGVyYXppb25lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWZyZXNoQ29sdW1uc1Zpc2liaWxpdHkodGhzOiBFc1RoRGlyZWN0aXZlW10sIHRkczogRXNUZERpcmVjdGl2ZVtdLCB2aWV3OiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGxldCBuZXdDb2xzZXQgPSBbXTtcclxuICAgICAgICBsZXQgZml4ZWRUaHM6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuOyB9ID0ge307XHJcbiAgICAgICAgbGV0IGNvbHVtbnNDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IEVzVGFibGVDb2x1bW47IH0gPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBjb2xpID0gMDsgY29saSA8IHRoaXMuZXN0LkNvbHVtbnNMaXN0Lmxlbmd0aDsgY29saSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2wgPSB0aGlzLmVzdC5Db2x1bW5zTGlzdFtjb2xpXTtcclxuICAgICAgICAgICAgY29sdW1uc0NhY2hlW2NvbC5pZF0gPSBjb2w7XHJcbiAgICAgICAgICAgIGlmIChjb2wudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgIG5ld0NvbHNldC5wdXNoKChjb2wucGlubmVkID8gXCLCp1wiIDogXCJcIikgKyBjb2wuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlldylcclxuICAgICAgICAgICAgdmlldy5jb2x1bW5zID0gbmV3Q29sc2V0O1xyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5Q29sdW1ucyA9IG5ld0NvbHNldDtcclxuXHJcbiAgICAgICAgLy8gRGEgcXVpIGluIHBvaSBkZXZvbm8gZXNzZXJlIGVzZWd1aXRpIFNPTE8gaW4gZmFzZSBkaSB3cml0ZVZhbHVlIHF1aW5kaSBkZXZvIGFzc2ljdXJhcm1pIGRpIHBhc3NhcmxpIG51bGwgaW4gdHV0dGkgaSBwYXNzYWdnaSBkaXZlcnNpIGRhIHF1ZWxsb1xyXG4gICAgICAgIGlmICh0aHMpIHtcclxuICAgICAgICAgICAgLy8gRGVmaW5pc2NvIHNlIGxhIGNvbG9ubmEgw6ggdmlzaWJpbGUgaW4gYmFzZSBhbGxhIHN1YSByYXBwcmVzZW50YXppb25lIGxvY2FsZSBpbiBDb2x1bW5zTGlzdFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoLnRoVmlzaWJsZSA9IHRoLnRoRml4ZWQgfHwgKGNvbHVtbnNDYWNoZVt0aC50aF0gPyBjb2x1bW5zQ2FjaGVbdGgudGhdLnZpc2libGUgOiB0aC50aFZpc2libGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoLnRoRml4ZWQgfHwgdGgudGhHcm91cClcclxuICAgICAgICAgICAgICAgICAgICBmaXhlZFRoc1t0aC50aF0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGRzKSB7XHJcbiAgICAgICAgICAgIC8vIERlZmluaXNjbyBzZSBsYSBjZWxsYSDDqCB2aXNpYmlsZSBpbiBiYXNlIGFsbGEgc3VhIHJhcHByZXNlbnRhemlvbmUgbG9jYWxlIGluIENvbHVtbnNMaXN0XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGQgPSB0ZHNbaV07XHJcbiAgICAgICAgICAgICAgICB0ZC50ZFZpc2libGUgPSBmaXhlZFRoc1t0ZC50ZF0gfHwgKGNvbHVtbnNDYWNoZVt0ZC50ZF0gPyBjb2x1bW5zQ2FjaGVbdGQudGRdLnZpc2libGUgOiB0ZC50ZFZpc2libGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVzdC5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGxpbmVhIGdsaSBvcmRpbmFtZW50aSBkYXRpIGZyYSBsZSAqKkVzVGhzKiogZSBsZSBpbmZvcm1hemlvbmkgYWxsJ2ludGVybm8gZGVsbGEgVmlldyBiaW5kYXRhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBBcHBTZWFyY2ggZGEgdXRpbGl6emFyZSBwZXIgcXVlc3RhIG9wZXJhemlvbmVcclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZVtdfSB0aHMgQ29sb25uZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbGlnbkhlYWRlcnNPcmRlcmluZyh0aHM6IEVzVGhEaXJlY3RpdmVbXSwgdmlldzogQXBwU2VhcmNoPGFueT4pIHtcclxuICAgICAgICBsZXQgb3JkZXJzID0gdmlldyA/IHZpZXcub3JkZXJzIDogdGhpcy5lc3QuYXJyYXlPcmRlcnM7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG5cclxuICAgICAgICAgICAgdGgudGhPcmRlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb3IgPSBvcmRlcnNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAob3IuaWQgPT0gdGgudGgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGgudGhPcmRlciA9IG9yLm9yZGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhIHR1dHRlIGxlIGluZm9ybWF6aW9uaSBjaGUgc2Vydm9ubyBwZXIgZ2VzdGlyZSBpbCByYWdncnVwcGFtZW50byBkZWdsaSBoZWFkZXJcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt7IGxlYWZzOiBFc1RoRGlyZWN0aXZlW10sIGdyb3VwaW5nTGV2ZWw6IG51bWJlciwgcGFyZW50c0NhY2hlOiBhbnksIHRoc0NhY2hlOiBhbnkgfX0gT2dnZXR0byBjb250ZW5lbnRlIGxhIGxpc3RhIGRlbGxlIGZvZ2xpZSAoaGVhZGVyIGJhc2UpLCBpbCBsaXZlbGxvXHJcbiAgICAgKiBtYXNzaW1vIGRpIHJhZ2dydXBwYW1lbnRvIHJhZ2dpdW50bywgdW5hIGNhY2hlIGluIGN1aSB2ZW5nb25vIGluZGljYXRpIHR1dHRpIGkgZ3J1cHBpIGNoZSBzb25vIFwicGFyZW50XCIgKHF1aW5kaSBjaGUgcmFnZ3J1cHBhbm8gYWxtZW5vIDEgaGVhZGVyKSBlIGxhIGNhY2hlIGRlZ2xpIGhlYWRlclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVIZWFkZXJzR3JvdXBpbmdJbmZvcyh0aHM6IEVzVGhEaXJlY3RpdmVbXSk6IHsgbGVhZnM6IEVzVGhEaXJlY3RpdmVbXTsgZ3JvdXBpbmdMZXZlbDogbnVtYmVyOyBwYXJlbnRzQ2FjaGU6IGFueTsgdGhzQ2FjaGU6IGFueTsgfSB7XHJcbiAgICAgICAgLy8gUHJlZ2lybyBwZXIgdHJvdmFyZSBpIHBhcmVudFxyXG4gICAgICAgIGxldCBwYXJlbnRzQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBib29sZWFuOyB9ID0ge307XHJcbiAgICAgICAgbGV0IHRoc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUaERpcmVjdGl2ZTsgfSA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHRoc0NhY2hlW3RoLnRoXSA9IHRoO1xyXG4gICAgICAgICAgICBpZiAodGgudGhQYXJlbnQgJiYgIXBhcmVudHNDYWNoZVt0aC50aFBhcmVudF0pXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRzQ2FjaGVbdGgudGhQYXJlbnRdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlY29uZG8gZ2lybyBwZXIgYmVjY2FyZSBpbCBsaXZlbGxvIG1hc3NpbW8gZSBsYSBsaXN0YSBkaSBmb2dsaWUgKHRoIHNlbnphIHBhcmVudClcclxuICAgICAgICBsZXQgaE1heExldmVsID0gMDtcclxuICAgICAgICBsZXQgbGVhZnM6IGFueVtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gU2Ugc29ubyB1bmEgZm9nbGlhIHZlZG8gcXVhbnRpIGxpdmVsbGkgY2kgc29ubyBzb3ByYVxyXG4gICAgICAgICAgICBpZiAoIXBhcmVudHNDYWNoZVt0aC50aF0pIHtcclxuICAgICAgICAgICAgICAgIGxlYWZzLnB1c2godGgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRtcCA9IHRoaXMuanVtcHNUb0ZpbmFsUGFyZW50KHRoLCB0aHNDYWNoZSk7XHJcbiAgICAgICAgICAgICAgICBoTWF4TGV2ZWwgPSB0bXAgPiBoTWF4TGV2ZWwgPyB0bXAgOiBoTWF4TGV2ZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7IGxlYWZzOiBsZWFmcywgZ3JvdXBpbmdMZXZlbDogaE1heExldmVsLCBwYXJlbnRzQ2FjaGU6IHBhcmVudHNDYWNoZSwgdGhzQ2FjaGU6IHRoc0NhY2hlIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmEgZ2xpIGhlYWRlciBncm91cHMgZGEgdW5hIGxpc3RhIGRpIGluZm8gc3VpIHRoIGFsbCdpbnRlcm5vIGRlbGxhIHZhcmlhYmlsZSAqKlRNUFJvd1RoR3JvdXBzKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3sgbGVhZnM6IEVzVGhEaXJlY3RpdmVbXSwgZ3JvdXBpbmdMZXZlbDogbnVtYmVyLCBwYXJlbnRzQ2FjaGU6IGFueSwgdGhzQ2FjaGU6IGFueSB9fSBpbmZvcyBJbmZvcm1hemlvbmkgZGkgcmFnZ3J1cHBhbWVudG8gdmFsdXRhdGUgcHJlY2VkZW50ZW1lbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZUhlYWRlckdyb3VwcyhpbmZvczogeyBsZWFmczogRXNUaERpcmVjdGl2ZVtdOyBncm91cGluZ0xldmVsOiBudW1iZXI7IHBhcmVudHNDYWNoZTogYW55OyB0aHNDYWNoZTogeyBbaW5kZXg6c3RyaW5nXTogRXNUaERpcmVjdGl2ZX07IH0pIHtcclxuICAgICAgICBpZiAoaW5mb3MuZ3JvdXBpbmdMZXZlbCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8qKioqKiogU1RFUCAxOiBDcmVvIGwnb3V0cHV0IGRlaSByYWdncnVwcGFtZW50aSBwZXIgaGVhZGVyIGluIG1vZG8gZGEgbm9uIGRvdmVybWkgcHJlb2NjdXBhcmUgZGkgY2VsbGUgbm9uIGluaXppYWxpenphdGUgKioqKioqL1xyXG5cclxuICAgICAgICBsZXQgZXhwYW5kZWRHcm91cHMgPSBbXTtcclxuICAgICAgICBsZXQgdmlzaWJsZVVucGlubmVkTGVhZnM6IEVzVGhEaXJlY3RpdmVbXSA9ICg8YW55W10+aW5mb3MubGVhZnMpLmZpbHRlcigodDogRXNUaERpcmVjdGl2ZSkgPT4gdC50aFZpc2libGUgJiYgdC50aElmICYmICF0LnRoUGlubmVkKTtcclxuICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGluZm9zLmdyb3VwaW5nTGV2ZWw7IGwrKykge1xyXG4gICAgICAgICAgICBleHBhbmRlZEdyb3Vwcy5wdXNoKFtdKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aXNpYmxlVW5waW5uZWRMZWFmcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIGV4cGFuZGVkR3JvdXBzW2xdLnB1c2goXCJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKioqKioqIFNURVAgMjogT3JkaW5vIGxlIGZvZ2xpZSBpbiBiYXNlIGFnbGkgb3JkaW5hbWVudGkgZGVsbGUgY29sb25uZSAqKioqKiovXHJcbiAgICAgICAgbGV0IG9yZGVyZWRMZWFmcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBsZWFmOiBFc1RoRGlyZWN0aXZlID0gaW5mb3MudGhzQ2FjaGVbdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzW2ldXTtcclxuICAgICAgICAgICAgaWYgKGxlYWYudGhWaXNpYmxlICYmIGxlYWYudGhJZiAmJiAhbGVhZi50aFBpbm5lZClcclxuICAgICAgICAgICAgICAgIG9yZGVyZWRMZWFmcy5wdXNoKGxlYWYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKiBTVEVQIDM6IENyZW8gbCdhcnJheSBncm91cCBjb24gdHV0dGkgaSByaWZlcmltZW50aSBkZWwgY2FzbyAqKioqKiovXHJcbiAgICAgICAgbGV0IGN1cnJlbnRQYXJlbnQgPSBcIlwiO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJlZExlYWZzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCByZWZUaDogRXNUaERpcmVjdGl2ZSA9IG9yZGVyZWRMZWFmc1tpXTtcclxuICAgICAgICAgICAgbGV0IHByZXZUaDogRXNUaERpcmVjdGl2ZSA9IGkgLSAxID49IDAgPyBvcmRlcmVkTGVhZnNbaSAtIDFdIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgIC8vIFBhcmVudCBkaXZlcnNvIGRhIHByaW1hLCBtZXR0byBpbCBib3JkbyBhIHNpbmlzdHJhIGUgYSBkZXN0cmEgZGVsbGEgY2VsbGEgcHJlY2VkZW50ZSAoc2UgYyfDqClcclxuICAgICAgICAgICAgLy8gQWxsJ3VsdGltbyBnaXJvIG1ldHRvIGlsIGJvcmRvIGEgZGVzdHJhLiBUdXR0byBxdWVzdG8gbG8gcmllc2VndW8gcGVyIG9nbmkgY2VsbGEgaW4gbW9kbyBkYSByaXB1bGlyZSBldmVudHVhbGkgYSBjdWkgYXZldm8gYXNzZWduYXRvIHRhZyBwcmVjZWRlbnRlbWVudGVcclxuICAgICAgICAgICAgKDxhbnk+cmVmVGgpLl9sYm9yZCA9IHJlZlRoLnRoUGFyZW50ICE9IGN1cnJlbnRQYXJlbnQ7XHJcbiAgICAgICAgICAgICg8YW55PnJlZlRoKS5fcmJvcmQgPSB2aXNpYmxlVW5waW5uZWRMZWFmcy5sZW5ndGggPT0gaSArIDE7XHJcbiAgICAgICAgICAgIGlmIChwcmV2VGgpXHJcbiAgICAgICAgICAgICAgICAoPGFueT5wcmV2VGgpLl9yYm9yZCA9IHJlZlRoLnRoUGFyZW50ICE9IGN1cnJlbnRQYXJlbnQ7XHJcblxyXG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcmVmVGgudGhQYXJlbnQ7XHJcblxyXG4gICAgICAgICAgICAvLyBQZXIgb2duaSBncnVwcG8gc3JvdG9sbyBpbCBwYXJlbnQgbmVsbGEgbWF0cmljZSBkZWkgcmFnZ3J1cHBhbWVudGlcclxuICAgICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBpbmZvcy5ncm91cGluZ0xldmVsOyBsKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSByZWZUaC50aFBhcmVudDtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgIXJlZlRoLnRoUGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRHcm91cHNbbF1baV0gPSBwYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVmVGggPSBpbmZvcy50aHNDYWNoZVtwYXJlbnRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKioqKioqIFNURVAgNDogQ29tcGF0dG8gbmVsbCdlbGVtZW50byBmaW5hbGUgc3UgY3VpIGJpbmRhcm1pLiBMJ0lEIGFzc2VnbmF0byDDqCBTT0xPIHBlciBvdHRpbWl6emFyZSBnbGkgbmdGb3IgKioqKioqL1xyXG5cclxuICAgICAgICBjdXJyZW50UGFyZW50ID0gXCJcIjtcclxuICAgICAgICBsZXQgY3VycmVudFNwYW4gPSAwO1xyXG4gICAgICAgIGxldCBmaW5hbEhlYWRlcnM6IHsgSUQ6IHN0cmluZywgU3BhbjogbnVtYmVyOyBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgQ29udGVudD86IHN0cmluZywgUGlubmVkPzogYm9vbGVhbjsgQm9yZGVycz86IGJvb2xlYW47IH1bXVtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBleHBhbmRlZEdyb3Vwcy5sZW5ndGg7IGwrKykge1xyXG4gICAgICAgICAgICBsZXQgbGV2ZWxBcnJheTogeyBJRDpzdHJpbmcsIFNwYW46IG51bWJlcjsgVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IENvbnRlbnQ/OiBzdHJpbmcsIFBpbm5lZD86IGJvb2xlYW47IEJvcmRlcnM/OiBib29sZWFuOyB9W10gPSBbXTtcclxuICAgICAgICAgICAgZmluYWxIZWFkZXJzLnB1c2gobGV2ZWxBcnJheSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuU2VsZWN0aW9uIHx8IHRoaXMuZXN0Lkhhc1Bpbm5lZENvbHVtbnMpXHJcbiAgICAgICAgICAgICAgICBsZXZlbEFycmF5LnB1c2goeyBJRDogXCJfYmFzZV9zZWxfcGlubmVkXCIsIFNwYW46IDEsIFRlbXBsYXRlOiBudWxsLCBQaW5uZWQ6IHRoaXMuZXN0Lkhhc1Bpbm5lZENvbHVtbnMgfSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBoID0gMDsgaCA8IGV4cGFuZGVkR3JvdXBzW2xdLmxlbmd0aDsgaCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IGV4cGFuZGVkR3JvdXBzW2xdW2hdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gY3VycmVudFBhcmVudClcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhbisrO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFuID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxBcnJheS5wdXNoKHsgSUQ6IGAke2N1cnJlbnRQYXJlbnQgPyBpbmZvcy50aHNDYWNoZVtjdXJyZW50UGFyZW50XS50aCA6ICdub3RoJ31fJHtjdXJyZW50U3Bhbn1gLCBTcGFuOiBjdXJyZW50U3BhbiwgVGVtcGxhdGU6IGN1cnJlbnRQYXJlbnQgPyBpbmZvcy50aHNDYWNoZVtjdXJyZW50UGFyZW50XS5UZW1wbGF0ZSA6IG51bGwsIENvbnRlbnQ6IGN1cnJlbnRQYXJlbnQgPyBpbmZvcy50aHNDYWNoZVtjdXJyZW50UGFyZW50XS5fbXVsdGlfY29udGVudCA6IG51bGwsIEJvcmRlcnM6ICEhY3VycmVudFBhcmVudCB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhbiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFVsdGltYSBhZ2dpdW50YSBjaGUgYWx0cmltZW50aSBtaSByaW1hcnJlYmJlIGluIGNhY2hlXHJcbiAgICAgICAgICAgIGxldmVsQXJyYXkucHVzaCh7IElEOiBgJHtjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0udGggOiAnbm90aCd9XyR7Y3VycmVudFNwYW59YCwgU3BhbjogY3VycmVudFNwYW4sIFRlbXBsYXRlOiBjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0uVGVtcGxhdGUgOiBudWxsLCBDb250ZW50OiBjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0uX211bHRpX2NvbnRlbnQgOiBudWxsICwgQm9yZGVyczogISFjdXJyZW50UGFyZW50IH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gQWdnaXVuZ28gaSBwZXp6ZXR0aW5pIHBlciBsYSByaW1vemlvbmUgZSBnbGkgZXhwb3J0LCBzZSBwcmVzZW50aVxyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuUmVtb3ZhbClcclxuICAgICAgICAgICAgICAgIGxldmVsQXJyYXkucHVzaCh7IElEOiBcIl9iYXNlX3JlbW92YWxcIiwgU3BhbjogMSwgVGVtcGxhdGU6IG51bGwgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuRXhwb3J0IHx8IHRoaXMuZXN0LkhpZGRlbkNvbHVtbnMgfHwgdGhpcy5lc3QuQ29sdW1uc09yZGVyaW5nIHx8IHRoaXMuZXN0LkNvcm5lck1lbnVPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgbGV2ZWxBcnJheS5wdXNoKHsgSUQ6IFwiX2Jhc2VfZXh0cmFfb3B0c1wiLCBTcGFuOiAxLCBUZW1wbGF0ZTogbnVsbCB9KTtcclxuXHJcbiAgICAgICAgICAgIGN1cnJlbnRTcGFuID0gMDtcclxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKioqKioqIFNURVAgNTogU2VjY28gbGUgcmlnaGUgaW4gY3VpIG5vbiBjJ8OoIG51bGxhICoqKioqKi9cclxuXHJcbiAgICAgICAgdGhpcy5lc3QuVE1QUm93VGhHcm91cHMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaW5hbEhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGxldmVsID0gZmluYWxIZWFkZXJzW2ldO1xyXG4gICAgICAgICAgICBsZXQgZW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVsLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IGxldmVsW2pdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uVGVtcGxhdGUgfHwgaXRlbS5Db250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW1wdHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFlbXB0eSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LlRNUFJvd1RoR3JvdXBzLnB1c2gobGV2ZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGNvbGEgaWwgbnVtZXJvIGRpIHNhbHRpIGRhIHVuIGhlYWRlciBmb2dsaWEgYWxsJ3VsdGltbyBwYXJlbnQgZGVsbGEgY2F0ZW5hXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlfSB0aCBIZWFkZXIgZGEgY3VpIHNjb3JyZXJlIGkgcGFkcmkgcGVyIGNhcGlyZSBxdWFudGkgbGl2ZWxsaSBjaSBzb25vIHNvcHJhXHJcbiAgICAgKiBAcGFyYW0ge3sgW2luZGV4OiBzdHJpbmddOiBFc1RoRGlyZWN0aXZlIH19IHRoc0NhY2hlIENhY2hlIGRlZ2xpIGhlYWRlclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGp1bXBzVG9GaW5hbFBhcmVudCh0aDogRXNUaERpcmVjdGl2ZSwgdGhzQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBFc1RoRGlyZWN0aXZlOyB9KSB7XHJcbiAgICAgICAgbGV0IGp1bXBzID0gMDsgbGV0IHBhcmVudCA9IG51bGw7IGxldCBwYXJlbnRzUHJlcGVuZDogeyBpZDogc3RyaW5nLCB0bXBsPzogVGVtcGxhdGVSZWY8YW55PiwgY29udGVudD86IHN0cmluZyB9W10gPSBbXTtcclxuICAgICAgICBsZXQgYmFzZVRoUmVmID0gdGg7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBwYXJlbnQgPSB0aC50aFBhcmVudDtcclxuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGggPSB0aHNDYWNoZVtwYXJlbnRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aC50aEVtcHR5ICYmICF0aC5fbXVsdGlfY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzUHJlcGVuZC51bnNoaWZ0KHsgaWQ6IHRoLnRoLCB0bXBsOiB0aC5UZW1wbGF0ZSB9KTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aC50aEVtcHR5ICYmIHRoLl9tdWx0aV9jb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudHNQcmVwZW5kLnVuc2hpZnQoeyBpZDogdGgudGgsIGNvbnRlbnQ6IHRoLl9tdWx0aV9jb250ZW50IH0pO1xyXG4gICAgICAgICAgICAgICAganVtcHMrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gd2hpbGUgKHBhcmVudCk7XHJcbiAgICAgICAgYmFzZVRoUmVmLl90aFBhcmVudHMgPSBwYXJlbnRzUHJlcGVuZDtcclxuICAgICAgICByZXR1cm4ganVtcHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIGdlbmVyYSBsJ29yZGluZSBkaSBkZWZhdWx0IGRlbGxlIGNvbG9ubmVcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSB2aWV3IEFwcFNlYXJjaCBkYSB1dGlsaXp6YXJlIHBlciBxdWVzdGEgb3BlcmF6aW9uZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2VuZXJhdGVEZWZhdWx0T3JkZXIodGhzOiBFc1RoRGlyZWN0aXZlW10sIHZpZXc6IEFwcFNlYXJjaDxhbnk+KSB7XHJcbiAgICAgICAgaWYgKHRocy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgb3JkZXJpbmdzID0gdGhpcy5lc3Qudmlld01vZGUgPyB2aWV3LmNvbHVtbl9vcmRlcmluZyA6IHRoaXMuZXN0LmFycmF5Q29sdW1uT3JkZXJpbmc7XHJcbiAgICAgICAgLy8gR2VuZXJvIG9yZGluYW1lbnRvIGRpIGRlZmF1bHQgZGEgMCBmaW5vIGEgZG92ZSBkZXZlIGFycml2YXJlLiBTaXR1YXppb25lIGF0dHVhbGUgc2VuemEgaG90cG90YXRvXHJcbiAgICAgICAgaWYgKCFvcmRlcmluZ3MgfHwgb3JkZXJpbmdzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSB0aC50aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5wdXNoKG9yZGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzID0gb3JkZXJpbmdzO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRoSWQgPSB0aC50aDtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmZpbmQobyA9PiBvID09IHRoSWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5wdXNoKHRoSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbGljYSBsJ29yZGluZSBzcGVjaWZpY2F0byBhbGxlIHZhcmllIGNvbG9ubmVcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSB2aWV3IEFwcFNlYXJjaCBkYSB1dGlsaXp6YXJlIHBlciBxdWVzdGEgb3BlcmF6aW9uZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmaW5hbGl6ZSBTZSAqKnRydWUqKiBzaWduaWZpY2EgY2hlIG5vbiBtaSBhc3BldHRvIGRpIGRvdmVyIGVmZmV0dHVhcmUgYWx0cmUgb3BlcmF6aW9uaSBlIHBvc3NvIHJlbmRlcml6emFyZSBsYSBzaXR1YXppb25lIGluIGJhc2UgYWkgUm93Q29udGV4dFxyXG4gICAgICogU2VuemEgZmluYWxpemUgc2lnbmlmaWNhIGNoZSBtaSBhc3BldHRvIGFsdHJlIG9wZXJhemlvbmkgY2hlIHByaW1hIG8gcG9pIHJpY2hpYW1lcmFubm8gcXVlc3RhIGZ1bnppb25lIGNvbCBmaW5hbGl6ZS5cclxuICAgICAqXHJcbiAgICAgKiBBZCBlc2VtcGlvLCB1bmEgdm9sdGEgc2VsZXppb25hdG8gb3JkaW5hbWVudG8gZmlzaWNvL2xvZ2ljbyBkZWxsZSBjb2xvbm5lIHNvIGNoZSBwYXJ0ZSB1biBhbHRyYSByaWNlcmNhIGNoZSBtaSByaXZhbG9yaXp6ZXLDoCBkYSBcIndyaXRlVmFsdWVcIiwgY2hlIGdpw6AgY2hpYW1hIHF1ZXN0YSBmdW56aW9uZS5cclxuICAgICAqIE1ldHRlbmRvIHNvbG8gbGEgY2hpYW1hdGEgZGEgXCJ3cml0ZVZhbHVlXCIgY29tZSBcImZpbmFsaXp6YW50ZVwiIG1pIGFzc2ljdXJvIGNoZSBzbWFuYXR0YW1lbnRpIGEgZnJvbnRlbmQgbm9uIGNhdXNpbm8gZmxpY2tlcmluZyBmaW5vIGEgcXVhbmRvIG5vbiBzZXJ2b25vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhcHBseU9yZGVyaW5nKHZpZXc6IEFwcFNlYXJjaDxhbnk+LCBmaW5hbGl6ZTogYm9vbGVhbikge1xyXG4gICAgICAgIC8vIEdlbmVybyBvcmRpbmFtZW50byBwZXIgZ2xpIGhlYWRlclxyXG4gICAgICAgIGxldCBuZXdIZWFkZXJzID0gW107XHJcblxyXG4gICAgICAgIC8vIFNlIGRldm8gZmluYWxpenphcmUgYWdnYW5jaW8gdHV0dGUgbGUgdmFyaWFiaWxpIGRpIGJpbmRcclxuICAgICAgICBpZiAoZmluYWxpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmZvckVhY2gobyA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhZWRySXRlbSA9IHRoaXMuZXN0LlRNUFJvd1RIcy5maWx0ZXIodCA9PiB0LklEID09IG8pWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhlYWVkckl0ZW0pXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3SGVhZGVycy5wdXNoKGhlYWVkckl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuVE1QUm93VEhzID0gbmV3SGVhZGVycztcclxuXHJcbiAgICAgICAgICAgIC8vIEdlbmVybyBvcmRpbmFtZW50byBwZXIgbGUgY2VsbGVcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVzdC5Sb3dDb250ZXh0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLmVzdC5UTVBSb3dURHNbdGhpcy5lc3QuUm93Q29udGV4dHNbaV1dO1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0NvbnRleHQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMuZm9yRWFjaChvID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGV4dEl0ZW0gPSBjb250ZXh0LmZpbHRlcih0ID0+IHQuSUQgPT0gbylbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcG90cmViYmUgZXNzZXIgdW5kZWZpbmVkIG5lbCBjYXNvIGNpIGZvc3Nlcm8gY29sb25uZSBzb3R0byB0aElmXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29udGV4dEl0ZW0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQucHVzaChjb250ZXh0SXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5UTVBSb3dURHNbdGhpcy5lc3QuUm93Q29udGV4dHNbaV1dID0gbmV3Q29udGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICB2aWV3LmNvbHVtbl9vcmRlcmluZyA9IHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcztcclxuXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5hcnJheUNvbHVtbk9yZGVyaW5nID0gdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzO1xyXG5cclxuICAgICAgICB0aGlzLmVzdC5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgKiBBbGwnaW50ZXJubyBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiBtZXR0ZSBsYSBjb2xvbm5hIHNwZWNpZmljYXRhIHByaW1hIGRlbGxhIGNvbG9ubmEgcHJlY2VkZW50ZVxyXG4gICpcclxuICAqIEBwYXJhbSB7RXNUYWJsZUNvbHVtbn0gY29sdW1uSXRlbSBDb2xvbm5hIGRhIHNwb3N0YXJlXHJcbiAgKi9cclxuICAgIHB1YmxpYyBzZW5kVXAoY29sdW1uSXRlbTogRXNUYWJsZUNvbHVtbikge1xyXG4gICAgICAgIGxldCBpdGVtSW5kZXggPSB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5pbmRleE9mKGNvbHVtbkl0ZW0pO1xyXG4gICAgICAgIGlmICh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdFtpdGVtSW5kZXggLSAxXS5maXhlZCB8fCB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdFtpdGVtSW5kZXggLSAxXS5waW5uZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLnV0aUV4dHMuc3dhcCh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCwgaXRlbUluZGV4LCBpdGVtSW5kZXggLSAxKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHBvc3NvIGZhcmUgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkNvbHVtbnNMaXN0KSkgcGVyY2jDqSBjb250aWVuZSByaWZlcmltZW50aSBhIFRlbXBsYXRlUmVmXHJcbiAgICAgICAgbGV0IHRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRtcC5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGMpKTsgfSk7XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSB0bXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGwnaW50ZXJubyBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiBtZXR0ZSBsYSBjb2xvbm5hIHNwZWNpZmljYXRhIGRvcG8gbGEgY29sb25uYSBzdWNjZXNzaXZhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RhYmxlQ29sdW1ufSBjb2x1bW5JdGVtIENvbG9ubmEgZGEgc3Bvc3RhcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlbmREb3duKGNvbHVtbkl0ZW06IEVzVGFibGVDb2x1bW4pIHtcclxuICAgICAgICBsZXQgaXRlbUluZGV4ID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuaW5kZXhPZihjb2x1bW5JdGVtKTtcclxuICAgICAgICB0aGlzLnV0aUV4dHMuc3dhcCh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCwgaXRlbUluZGV4LCBpdGVtSW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHBvc3NvIGZhcmUgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkNvbHVtbnNMaXN0KSkgcGVyY2jDqSBjb250aWVuZSByaWZlcmltZW50aSBhIFRlbXBsYXRlUmVmXHJcbiAgICAgICAgbGV0IHRtcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRtcC5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGMpKTsgfSk7XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSB0bXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGwnaW50ZXJubyBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiBwaW5uYSBsYSBjb2xvbm5hIHNwZWNpZmljYXRhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RhYmxlQ29sdW1ufSBjb2x1bW5JdGVtIENvbG9ubmEgZGEgc3Bvc3RhcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBpbk9yVW5waW5Db2x1bW4oY29sdW1uSXRlbTogRXNUYWJsZUNvbHVtbikge1xyXG4gICAgICAgIGxldCBpdGVtSW5kZXggPSB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5pbmRleE9mKGNvbHVtbkl0ZW0pO1xyXG4gICAgICAgIGlmICghY29sdW1uSXRlbS5waW5uZWQpIHtcclxuICAgICAgICAgICAgY29sdW1uSXRlbS5wcmV2X2luZGV4ID0gaXRlbUluZGV4O1xyXG5cclxuICAgICAgICAgICAgLy9RdWFuZG8gcGlubm8gZGV2byBzcG9zdGFyZSBsJ2VsZW1lbnRvIGNvbWUgdWx0aW1hIGNvbG9ubmEgcGlubmF0YSBvIGNvbWUgcHJpbWEgY29sb25uYSBzZSBub24gY2UgbmUgc29ubyBkaSBwaW5uYXRlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3RbaV0ucGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuYXJyYXlNb3ZlKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LCBpdGVtSW5kZXgsIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvL1F1YW5kbyBzcGlubm8gcmlwb3J0byBsJ2VsZW1lbnRvIGFsbG8gc3Rlc3NvIGluZGljZSBpbiBjdWkgZXJhIHByaW1hIChzZSBzb25vIHN0YXRpIGZhdHRpIHNwb3N0YW1lbnRpIG5lbCBtZXp6byBjYXp6aSBkZWxsJ3V0ZW50ZSlcclxuICAgICAgICAgICAgaWYgKGNvbHVtbkl0ZW0ucHJldl9pbmRleCAhPSBudWxsICYmIGNvbHVtbkl0ZW0ucHJldl9pbmRleCAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5hcnJheU1vdmUodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QsIGl0ZW1JbmRleCwgY29sdW1uSXRlbS5wcmV2X2luZGV4KTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZSBzcGlubm8gc2VuemEgdW4gcHJldl9pbmRleCB2dW9sIGRpcmUgY2hlIGxhIGNvbG9ubmEgZXJhIHBpbm5hdGEgZGEgY29uZmlndXJhemlvbmUuIExhIHNwb3N0byBuZWwgcHJpbW8gcHVudG8gZGlzcG9uaWJpbGVcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXN0LlRNUENvbHVtbnNMaXN0W2ldLnBpbm5lZCAmJiAhdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3RbaV0uZml4ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuYXJyYXlNb3ZlKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LCBpdGVtSW5kZXgsIGkgLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2x1bW5JdGVtLnBpbm5lZCA9ICFjb2x1bW5JdGVtLnBpbm5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsbCdpbnRlcm5vIGRlbGxhIGRpYWxvZyBcIk9yZGluYW1lbnRvIGUgVmlzaWJpbGl0w6AgQ29sb25uZVwiIGludmVydGUgbGUgaW1wb3N0YXppb25pIGRpIHZpc2liaWxpdMOgIGRlbGxhIGNvbG9ubmFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGFibGVDb2x1bW59IGNvbHVtbkl0ZW0gQ29sb25uYSBkYSBzcG9zdGFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29sdW1uQ2xpY2tlZChpdGVtOiBFc1RhYmxlQ29sdW1uKSB7XHJcbiAgICAgICAgdGhpcy5lc3QubGFzdFNlbGVjdGVkSXRlbUlEID0gaXRlbS5pZDtcclxuICAgICAgICBpZiAoIXRoaXMuZXN0LkhpZGRlbkNvbHVtbnMgfHwgaXRlbS5maXhlZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBpdGVtLnZpc2libGUgPSAhaXRlbS52aXNpYmxlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlR2xvYmFsQ29sVmlzQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQWxsJ2FwZXJ0dXJhIGRlbGxhIGRpYWxvZyBcIk9yZGluYW1lbnRvIGUgVmlzaWJpbGl0w6AgQ29sb25uZVwiIHJpY2FyaWNhIGxlIGluZm9ybWF6aW9uaSBhdHR1YWxpIHBlciBwZXJtZXR0ZXJlIGxhIG1vZGlmaWNhICovXHJcbiAgICBwdWJsaWMgcmVzZXRDb2x1bW5WaXNTZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSBbXTtcclxuICAgICAgICAvLyBOb24gcG9zc28gZmFyZSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuQ29sdW1uc0xpc3QpKSBwZXJjaMOpIGNvbnRpZW5lIHJpZmVyaW1lbnRpIGEgVGVtcGxhdGVSZWZcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LkNvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LnB1c2goT2JqZWN0LmFzc2lnbih7fSwgYykpOyB9KTtcclxuXHJcbiAgICAgICAgbGV0IHJlb3JkZXJlZENvbExpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LkNvbHVtbnNPcmRlcmluZykge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMuZm9yRWFjaChvID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW4gPSB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5maWx0ZXIodCA9PiB0LmlkID09IG8pWzBdO1xyXG4gICAgICAgICAgICAgICAgLy8gUG90cmVpIG5vbiBhdmVybmUgbmVsIGNhc28gY2kgc2lhIGlsIGZsYWcgSGlkZGVuQ29sdW1ucyBhIGZhbHNlLCBldml0byBkaSBpbnNlcmlyZSBkZWdsaSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4pXHJcbiAgICAgICAgICAgICAgICAgICAgcmVvcmRlcmVkQ29sTGlzdC5wdXNoKGNvbHVtbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSByZW9yZGVyZWRDb2xMaXN0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVHbG9iYWxDb2xWaXNDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSaWFnZ2lvcm5hIGxlICoqT3JkZXJEaXJlY3RpdmVzKiogY29uIGxlIGluZm9ybWF6aW9uaSBpbiAgKipDb2x1bW5zTGlzdCoqICovXHJcbiAgICBwcml2YXRlIHJlZnJlc2hDb2x1bW5PcmRlcmluZygpIHtcclxuICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmVzdC5Db2x1bW5zTGlzdC5sZW5ndGg7IGMrKylcclxuICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLnB1c2godGhpcy5lc3QuQ29sdW1uc0xpc3RbY10uaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFZmZldHR1YSBsYSBzZWxlemlvbmUgbyBtZW5vIGRlbCBjaGVjayBnbG9iYWxlICgqKmdsb2JhbENvbFZpc0NoZWNrKiopIGRpIHZpc2liaWxpdMOgIGluIGJhc2UgYSBzZSB0dXR0ZSBsZSAqKlRNUENvbHVtbnNMaXN0Kiogc29ubyB2aXNpYmlsaSBvIG5vICovXHJcbiAgICBwdWJsaWMgdXBkYXRlR2xvYmFsQ29sVmlzQ2hlY2soKSB7XHJcbiAgICAgICAgLy8gVE1QQ29sTGlzdCB2aWVuZSByaWVtcGl0YSBkaSB1bmRlZmluZWQgbmVsIGNhc28gaW4gY3VpIHNpYSBkaXNhdHRpdmF0YSBsYSBzZWxlemlvbmUgZGVsbGUgY29sb25uZSBuYXNjb3N0ZVxyXG4gICAgICAgIHRoaXMuZXN0Lmdsb2JhbENvbFZpc0NoZWNrID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZXZlcnkodCA9PiB0LnZpc2libGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hpYW1hdG8gcXVhbmRvIHVuYSBjb2xvbm5hIHZpZW5lIHJpb3JkaW5hdGEgYWxsJ2ludGVybm8gZGVsbGEgbGlzdGEgZGVsbGUgdmlzaWJpbGl0w6AvcG9zaXppb25pIGNvbG9ubmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtDZGtEcmFnRHJvcDxFc1RhYmxlQ29sdW1uW10+fSBldmVudCBFdmVudG8gZGkgZHJvcCBkZWxsYSBsaXN0YVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29sdW1uUmVvcmRlcmVkKGV2ZW50OiBDZGtEcmFnRHJvcDxFc1RhYmxlQ29sdW1uW10+KSB7XHJcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hpYW1hdG8gcXVhbmRvIHVuYSBjb2xvbm5hIHZpZW5lIHJpb3JkaW5hdGEgYWxsJ2ludGVybm8gZGVsbGEgbGlzdGEgZGVsbGUgdmlzaWJpbGl0w6AvcG9zaXppb25pIGNvbG9ubmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGljZSBpbiBjdWkgdm9nbGlvIGRyb3BwYXJlIGwnZWxlbWVudG8gZHJhZ2dhdG9cclxuICAgICAqIEBwYXJhbSB7Q2RrRHJhZzxFc1RhYmxlQ29sdW1uPn0gaXRlbSBPZ2dldHRvIGNoZSBzdG8gZHJhZ2dhbmRvXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsYSBjb2xvbm5hIHB1w7IgZXNzZXJlIHNwb3N0YXRhIHN1bGwnaW5kaWNlICoqaW5kZXgqKiwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNvcnRQcmVkaWNhdGUoaW5kZXg6IG51bWJlciwgaXRlbTogQ2RrRHJhZzxFc1RhYmxlQ29sdW1uPik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBpdGVtQXRJbmRleCA9IHRoaXMuZXN0LkNvbHVtbnNMaXN0W2luZGV4XTtcclxuICAgICAgICByZXR1cm4gIWl0ZW1BdEluZGV4LmZpeGVkICYmICFpdGVtQXRJbmRleC5waW5uZWQgJiYgIWl0ZW0uZGF0YS5waW5uZWQgJiYgIWl0ZW0uZGF0YS5waW5uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW56aW9uZSBjaGUgZWZmZXR0dWEgbGEgY29uZmVybWEgZGVsbGEgdmlzaWJpbGl0w6AgZSBkZWxsJ29yZGluZSBkZWxsZSBjb2xvbm5lLlxyXG4gICAgICpcclxuICAgICAqIFF1ZXN0YSBzZWxlemlvbmUgdmllbmUgaW5vbHRyZSBzYWx2YXRhIG5lbGxlIHByZWZlcmVuemUgKCoqQGVzZmFlbnphL3ByZWZlcmVuY2VzKiopLCBxdWFsb3JhIGwnSW5wdXQgKipTYXZlUHJlZmVyZW5jZXMqKiBmb3NzZSB2YWxvcml6emF0b1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBub24gY2kgc29ubyBwcm9ibGVtaSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbmZpcm1Db2x1bW5WaXNpYmlsaXR5U2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIE5vbiBwZXJtZXR0byBkaSBub24gc2VsZXppb25hcmUgbnVsbGFcclxuICAgICAgICBpZiAodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZXZlcnkodCA9PiAhdC52aXNpYmxlKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgY2FzdGVkVmlldyA9IHRoaXMuZXN0LnZpZXdNb2RlID8gKHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcgfHwgdGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55PikgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuZXN0LkNvbHVtbnNMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHsgdGhpcy5lc3QuQ29sdW1uc0xpc3QucHVzaChPYmplY3QuYXNzaWduKHt9LCBjKSk7IH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlZnJlc2hDb2x1bW5PcmRlcmluZygpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlPcmRlcmluZyhjYXN0ZWRWaWV3LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVmcmVzaENvbHVtbnNWaXNpYmlsaXR5KG51bGwsIG51bGwsIGNhc3RlZFZpZXcpO1xyXG5cclxuICAgICAgICAvL1NhbHZvIGxlIHByZWZlcmVuY2VzIGRpIHF1ZXN0YSB2aWV3XHJcbiAgICAgICAgLy9EaSBkZWZhdWx0IHJlZ2lzdHJvIG9yZGluYW1lbnRvIGUgdmlzaWJpbGl0w6AgZGVsbGUgY29sb25uZSBuZWxsYSB2aXN0YS4gU29sbyBsZSBjb3NlIGRpIFVJXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlNhdmVQcmVmZXJlbmNlcykgXHJcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJWaWV3UHJlZmVyZW5jZXMoY2FzdGVkVmlldyk7XHJcblxyXG4gICAgICAgIC8vIFJpZXNlZ3VvIGwndWx0aW1hIHJpY2VyY2EgYmluZGF0YSBhbGxhIHRhYmVsbGFcclxuICAgICAgICAvLyBNaSBhc3NpY3VybyBkaSBmYXJsbyBkb3BvIGwnZXNwYW5zaW9uZSBkZWwgY2hhbmdlZCBvIHJpc2NoaW8gY2hlIGxhIHJpY2VyY2EgbWkgcmlkaWEgY29sb25uZSBjaGUgaW4gcmVhbHTDoCBub24gZXNpc3Rvbm9cclxuICAgICAgICBpZiAodGhpcy5lc3Qudmlld01vZGUpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuZW1pdFNlYXJjaFJlcXVlc3QodHJ1ZSwgdGhpcy5NYWluR3JvdXBWaWV3KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmlldyA9IHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZVtpXS52aWV3O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmNvbHVtbnMgPSB0aGlzLmVzdC5NYWluR3JvdXBWaWV3LmNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuY29sdW1uX29yZGVyaW5nID0gdGhpcy5lc3QuTWFpbkdyb3VwVmlldy5jb2x1bW5fb3JkZXJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUsIHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZVtpXS52aWV3KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmVzdC5pbnRlcm5hbFdyaXRlVmFsdWUoKTsgfSk7XHJcblxyXG4gICAgICAgIC8vIExvIHZvcnJlaSBtZXR0ZXJlIGxhdG8gdGVtcGxhdGUgbWEgbm9cclxuICAgICAgICB0aGlzLmVzdC5sYXN0U2VsZWN0ZWRJdGVtSUQgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dW8gbCd1bnBpbm5pbmcgZGkgdW5hIGNvbG9ubmEgaW4gbWFuaWVyYSBwcm9ncmFtbWF0aWNhIHNlbXBsaWNlbWVudGUgZXNlZ3VlbmRvIHVuYSBwZXIgdW5hIGxlIG9wZXJhemlvbmkgY2hlIHZlcnJlYmJlcm8gZXNlZ3VpdGUgYWx0cmltZW50aVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBDb2RpY2UgZGVsbGEgY29sb25uYSBkYSBzcGlubmFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5waW5Db2x1bW4oaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucmVzZXRDb2x1bW5WaXNTZWxlY3Rpb24oKTtcclxuICAgICAgICB0aGlzLnBpbk9yVW5waW5Db2x1bW4odGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZmluZCh0ID0+IHQuaWQgPT0gaWQpKTtcclxuICAgICAgICB0aGlzLmNvbmZpcm1Db2x1bW5WaXNpYmlsaXR5U2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFN1bCBjbGljayBuZWxsYSBjaGVja2JveCBkaSBzZWxlemlvbmUgZ2xvYmFsZSBzaSBzY29ycm9ubyB0dXR0ZSBsZSBjb2xvbm5lIGUgc2kgaW1wb3N0YW5vIGFsIHZhbG9yZSBkZWxsYSBjaGVjayBnbG9iYWxlICovXHJcbiAgICBwdWJsaWMgZ2xvYmFsQ29sVmlzQ2hlY2tDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdC5maXhlZClcclxuICAgICAgICAgICAgICAgIHQudmlzaWJsZSA9IHRoaXMuZXN0Lmdsb2JhbENvbFZpc0NoZWNrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,4 +1,4 @@
1
1
  /** Raccolta di tutti gli Input dell'EsTable a cui può essere logicamente sensato assegnare default per progetto */
2
2
  export class EsTableDefaultable {
3
3
  }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNUYWJsZURlZmF1bHRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9kb21haW4vY29uZmlndXJhdGlvbi9Fc1RhYmxlRGVmYXVsdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUhBQW1IO0FBQ25ILE1BQU0sT0FBTyxrQkFBa0I7Q0FrQjlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFJhY2NvbHRhIGRpIHR1dHRpIGdsaSBJbnB1dCBkZWxsJ0VzVGFibGUgYSBjdWkgcHXDsiBlc3NlcmUgbG9naWNhbWVudGUgc2Vuc2F0byBhc3NlZ25hcmUgZGVmYXVsdCBwZXIgcHJvZ2V0dG8gKi9cclxuZXhwb3J0IGNsYXNzIEVzVGFibGVEZWZhdWx0YWJsZSB7XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBDb2x1bW5zUmVzaXphYmxlPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIEF1dG9VcGRhdGU/OiBib29sZWFuO1xyXG4gICAgLyoqICBAaWdub3JlIFZlZGkgKipFc1RhYmxlQ29tcG9uZW50KiogKi8gQWxsU2VhcmNoPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIEV4cG9ydD86IGJvb2xlYW47XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBIaWRlUGFnaW5nPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIEhpZGVQYWdpbmdDb3VudD86IGJvb2xlYW47XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBIaWRlUGFnaW5nQnV0dG9ucz86IGJvb2xlYW47XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBDb250YWluZXJDbGFzcz86IHN0cmluZztcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIFRhYmxlQ2xhc3M/OiBzdHJpbmc7XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBTZWxlY3Rpb24/OiBib29sZWFuO1xyXG4gICAgLyoqICBAaWdub3JlIFZlZGkgKipFc1RhYmxlQ29tcG9uZW50KiogKi8gU2F2ZVByZWZlcmVuY2VzPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIFBhZ2luZ1N0eWxlPzogJ2JvdGgnIHwgJ3RvcCcgfCAnYm90dG9tJztcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIFJvd0dyb3VwaW5nUGFnaW5nU3R5bGU/OiAnbGVmdCcgfCAncmlnaHQnO1xyXG4gICAgLyoqICBAaWdub3JlIFZlZGkgKipFc1RhYmxlQ29tcG9uZW50KiogKi8gVXNlU2VsZWN0aW9uQ2FjaGU/OiBib29sZWFuO1xyXG4gICAgLyoqICBAaWdub3JlIFZlZGkgKipFc1RhYmxlQ29tcG9uZW50KiogKi8gU2hvd0l0ZW1Hcm91cHNDb2x1bW5zPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIEFycmF5bW9kZUl0ZW1zUGVyUGFnZT86IG51bWJlcjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIENvbHVtbnNQaW5uYWJsZT86IGJvb2xlYW47XHJcbn1cclxuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNUYWJsZURlZmF1bHRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9kb21haW4vY29uZmlndXJhdGlvbi9Fc1RhYmxlRGVmYXVsdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUhBQW1IO0FBQ25ILE1BQU0sT0FBTyxrQkFBa0I7Q0FtQjlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFJhY2NvbHRhIGRpIHR1dHRpIGdsaSBJbnB1dCBkZWxsJ0VzVGFibGUgYSBjdWkgcHXDsiBlc3NlcmUgbG9naWNhbWVudGUgc2Vuc2F0byBhc3NlZ25hcmUgZGVmYXVsdCBwZXIgcHJvZ2V0dG8gKi9cclxuZXhwb3J0IGNsYXNzIEVzVGFibGVEZWZhdWx0YWJsZSB7XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBDb2x1bW5zUmVzaXphYmxlPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIEF1dG9VcGRhdGU/OiBib29sZWFuO1xyXG4gICAgLyoqICBAaWdub3JlIFZlZGkgKipFc1RhYmxlQ29tcG9uZW50KiogKi8gQWxsU2VhcmNoPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIEV4cG9ydD86IGJvb2xlYW47XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBIaWRlUGFnaW5nPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIEhpZGVQYWdpbmdDb3VudD86IGJvb2xlYW47XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBIaWRlUGFnaW5nQnV0dG9ucz86IGJvb2xlYW47XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBDb250YWluZXJDbGFzcz86IHN0cmluZztcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIFRhYmxlQ2xhc3M/OiBzdHJpbmc7XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBTZWxlY3Rpb24/OiBib29sZWFuO1xyXG4gICAgLyoqICBAaWdub3JlIFZlZGkgKipFc1RhYmxlQ29tcG9uZW50KiogKi8gU2F2ZVByZWZlcmVuY2VzPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIFBhZ2luZ1N0eWxlPzogJ2JvdGgnIHwgJ3RvcCcgfCAnYm90dG9tJztcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIFJvd0dyb3VwaW5nUGFnaW5nU3R5bGU/OiAnbGVmdCcgfCAncmlnaHQnO1xyXG4gICAgLyoqICBAaWdub3JlIFZlZGkgKipFc1RhYmxlQ29tcG9uZW50KiogKi8gVXNlU2VsZWN0aW9uQ2FjaGU/OiBib29sZWFuO1xyXG4gICAgLyoqICBAaWdub3JlIFZlZGkgKipFc1RhYmxlQ29tcG9uZW50KiogKi8gU2hvd0l0ZW1Hcm91cHNDb2x1bW5zPzogYm9vbGVhbjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIEFycmF5bW9kZUl0ZW1zUGVyUGFnZT86IG51bWJlcjtcclxuICAgIC8qKiAgQGlnbm9yZSBWZWRpICoqRXNUYWJsZUNvbXBvbmVudCoqICovIENvbHVtbnNQaW5uYWJsZT86IGJvb2xlYW47XHJcbiAgICAvKiogIEBpZ25vcmUgVmVkaSAqKkVzVGFibGVDb21wb25lbnQqKiAqLyBEZWZhdWx0QWxpZ25tZW50PzogJ0xlZnQnIHwgJ0NlbnRlcicgfCAnUmlnaHQnO1xyXG59XHJcbiJdfQ==
@@ -47,7 +47,8 @@ export class AppSearch {
47
47
  aps.items = [];
48
48
  var newref = JSON.parse(JSON.stringify(aps));
49
49
  newref.items = items;
50
+ newref.page = 1;
50
51
  return newref;
51
52
  }
52
53
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwU2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBTZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUVsQjs7T0FFRztJQUNIO1FBQ0ksSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFzRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQW1CO1FBQ25DLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM3QixHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixHQUFHLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUN6QixHQUFHLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixHQUFHLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFtQjtRQUNwQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwT3JkZXJpbmcgfSBmcm9tICcuL0FwcE9yZGVyaW5nJztcclxuaW1wb3J0IHsgSXRlbXNTZWxlY3Rpb24gfSBmcm9tICcuL0l0ZW1zU2VsZWN0aW9uJztcclxuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICcuL0dyb3VwJztcclxuaW1wb3J0IHsgR3JvdXBGaWx0ZXIgfSBmcm9tICcuL0dyb3VwRmlsdGVyJztcclxuaW1wb3J0IHsgR3JvdXBPckFnZ3JlZ2F0aW9uIH0gZnJvbSAnLi9Hcm91cE9yQWdncmVnYXRpb24nO1xyXG5pbXBvcnQgeyBSZXBvcnRQYXJhbSB9IGZyb20gJy4uL3JlcG9ydC9SZXBvcnRQYXJhbSc7XHJcbmltcG9ydCB7IFJlcG9ydENvbHVtbiB9IGZyb20gJy4uL3JlcG9ydC9SZXBvcnRDb2x1bW4nO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBjaGUgaWRlbnRpZmljYSB1bmEgcmljZXJjYSBwYWdpbmF0YSBpbiB0dXR0ZSBsZSBzdWUgc2Z1bWF0dXJlIChkaSBncmlnaW8pXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXBwU2VhcmNoPFQ+IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIGNoZSBnZW5lcmEgdW4naXN0YW56YSBjb2kgdmFsb3JpIGRpIGRlZmF1bHQgZSBpbXBvc3RhbmRvICoqZmlyc3RzZWFyY2gqKiBhICoqdHJ1ZSoqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgdGhpcy5vcmRlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbHVtbl9vcmRlcmluZyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2F2ZWRzdGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlyc3RzZWFyY2ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJRCBkZWxsYSByaWNlcmNhLCBzZW1wcmUgaW51dGlsZSBhIG1lbm8gY2hlIG5vbiBzaWEgbGEgcmljZXJjYSBkZWkgcmlzdWx0YXRpIGRpIHVuIHJlcG9ydCAqL1xyXG4gICAgcHVibGljIHNlYXJjaGlkOiBzdHJpbmc7XHJcbiAgICAvKiogRGVzY3JpemlvbmUgZGVsbGEgcmljZXJjYSwgc2VtcHJlIGludXRpbGUgYSBtZW5vIGNoZSBub24gc2lhIGxhIHJpY2VyY2EgZGVpIHJpc3VsdGF0aSBkaSB1biByZXBvcnQgKi9cclxuICAgIHB1YmxpYyBzZWFyY2hkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgLyoqIEluZGljYSBzZSBsYSBwYWdpbmF6aW9uZSBwZXIgcXVlc3RhIHJpY2VyY2Egw6ggZGlzcG9uaWJpbGUgKi9cclxuICAgIHB1YmxpYyBwYWdpbmdhdmFpbGFibGU6IGJvb2xlYW47XHJcbiAgICAvKiogSW5kaWNhIGlsIGZvcm1hdG8gZGkgZXhwb3J0IGRpc3BvbmliaWxlIHBlciBxdWVzdGEgcmljZXJjYS4gVXRpbGl6emF0byBzb2xvIHBlciBsYSByaWNlcmNhIGRlaSByaXN1bHRhdGkgZGkgdW4gcmVwb3J0ICovXHJcbiAgICBwdWJsaWMgZXhwZm9ybWF0OiBib29sZWFuO1xyXG4gICAgLyoqIFBhcmFtZXRyaSBkaSByaWNlcmNhIHBlciBpIHJpc3VsdGF0aSBpbiBtb2RhbGl0w6AgcmVwb3J0ICovXHJcbiAgICBwdWJsaWMgcGFyczogUmVwb3J0UGFyYW1bXTtcclxuICAgIC8qKiBJbmRpY2F6aW9uZSBkZWxsZSBjb2xvbm5lIHByZXNlbnRpIG5lbCByZXBvcnQgKi9cclxuICAgIHB1YmxpYyByZXBvcnRfY29sdW1uczogUmVwb3J0Q29sdW1uW107XHJcbiAgICAvKiogSW5kaWNhIHNlIGMnw6ggdW5hIHJpY2VyY2EgaW4gY29yc28gKi9cclxuICAgIHB1YmxpYyBzZWFyY2hpbnByb2dyZXNzOiBib29sZWFuO1xyXG4gICAgLyoqIEluZGljYSBpbCBudW1lcm8gdG90YWxlIGRpIHBhZ2luZSB0cm92YXRlIGRhbGxhIHJpY2VyY2EuIE9nbmkgcGFnaW5hIMOoIHVuYSBsaXN0YSBkaSAqKml0ZW1zcGVycGFnZW92ZXJyaWRlKiogb2dnZXR0aSAqL1xyXG4gICAgcHVibGljIHBhZ2VzOiBudW1iZXI7XHJcbiAgICAvKiogQ29udGVnZ2lvIHRvdGFsZSBkZWdsaSBvZ2dldHRpIHRyb3ZhdGkgKGluY2x1c2kgcXVlbGxpIGluIHBhZ2luZSBub24gYXR0dWFsbWVudGUgc2VsZXppb25hdGUpICovXHJcbiAgICBwdWJsaWMgb2JqZWN0Y291bnQ6IG51bWJlcjtcclxuICAgIC8qKiBDb250ZWdnaW8gdG90YWxlIGRlaSBncnVwcGkgdHJvdmF0aSAoaW5jbHVzaSBxdWVsbGkgaW4gcGFnaW5lIG5vbiBhdHR1YWxtZW50ZSBzZWxlemlvbmF0ZSkgKi9cclxuICAgIHB1YmxpYyBncm91cGNvdW50OiBudW1iZXI7XHJcbiAgICAvKiogUGFnaW5hIGF0dHVhbG1lbnRlIGluIHZpc3VhbGl6emF6aW9uZSAqL1xyXG4gICAgcHVibGljIHBhZ2U6IG51bWJlcjtcclxuICAgIC8qKiBOdW1lcm8gZGkgb2dnZXR0aSBkYSBwZXJzZW50YXJlIGluIG9nbmkgcGFnaW5hLiBQZXIgY29udmVuemlvbmUgc2kgY29uc2lkZXJhIHZhbG9yaXp6YXRvIGEgMTUgc2Ugbm9uIGZvcm5pdG8gKi9cclxuICAgIHB1YmxpYyBpdGVtc3BlcnBhZ2VvdmVycmlkZTogbnVtYmVyO1xyXG4gICAgLyoqIExpc3RhIGRlZ2xpIG9nZ2V0dGkgbmVsbGEgcGFnaW5hIGF0dHVhbG1lbnRlIGluIHZpc3VhbGl6emF6aW9uZSAqL1xyXG4gICAgcHVibGljIGl0ZW1zOiBUW107XHJcbiAgICAvKiogRGl6aW9uYXJpbyBjb250ZW5lbnRlIHR1dHRpIGkgZ3J1cHBpIHBhZ2luYXRpICAqL1xyXG4gICAgcHVibGljIGdyb3VwczogR3JvdXBbXTtcclxuICAgIC8qKiBMaXN0YSBkaSBjb2xvbm5lIHBlciBjdWkgb3JkaW5hcmUgKi9cclxuICAgIHB1YmxpYyBvcmRlcnM6IEFwcE9yZGVyaW5nW107XHJcbiAgICAvKiogTGlzdGEgZGkgY29sb25uZSBkYSB2aXN1YWxpenphcmUgKi9cclxuICAgIHB1YmxpYyBjb2x1bW5zOiBzdHJpbmdbXTtcclxuICAgIC8qKiBMaXN0YSBkaSBjb2xvbm5lIG5lbGwnb3JkaW5lIGNvcnJldHRvICovXHJcbiAgICBwdWJsaWMgY29sdW1uX29yZGVyaW5nOiBzdHJpbmdbXTtcclxuICAgIC8qKiBJbmRpY2Egc2UgbGEgcmljZXJjYSBlcmEgc2FsdmF0YS4gUXVhbG9yYSBmb3NzZSBxdWVzdG8gaWwgY2FzbywgYWwgY2FyaWNhbWVudG8gbCdlcy10YWJsZSBzaSBvY2N1cGVyw6AgZGkgcmktZWZmZXR0dWFyZSBsYSByaWNlcmNhIGVkIGFnZ2lvcm5hcmUgaWwgbW9kZWxsbyAqL1xyXG4gICAgcHVibGljIHNhdmVkc3RhdGU6IGJvb2xlYW47XHJcbiAgICAvKiogSW5kaWNhIHNlIGJpc29nbmEgYW5jb3JhIGVmZmV0dHVhcmUgbGEgcHJpbWEgcmljZXJjYSAqL1xyXG4gICAgcHVibGljIGZpcnN0c2VhcmNoOiBib29sZWFuO1xyXG4gICAgLyoqIEluZGljYSBzZSBzdG8gZWZmZXR0dWFuZG8gbGEgcmljZXJjYSBwb3N0IGJpbmQgKi9cclxuICAgIHB1YmxpYyBzZWxmc2VhcmNoOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2dnZXR0byBjaGUgaW5kaWNhIGxhIHNlbGV6aW9uZSBjb3JyZW50ZS4gXHJcbiAgICAgKiBcclxuICAgICAqIFNlICoqYWxsKiogw6ggKip0cnVlKiogdnVvbGUgZGlyZSBjaGUgw6ggdHV0dG8gc2VsZXppb25hdG8gZWQgZXZlbnR1YWxtZW50ZSBjaSBzb25vIGRlbGxlIGVzY2x1c2lvbmkgKCoqZXhjbHVzaW9ucyoqKVxyXG4gICAgICogU2UgKiphbGwqKiDDqCAqKmZhbHNlKiogdnVvbCBkaXJlIGNoZSBzb25vIHNlbGV6aW9uYXRpICoqaXRlbSoqIHNwZWNpZmljaVxyXG4gICAgICogXHJcbiAgICAgKiBJbiBiYXNlIGFsbCdJbnB1dCAqKlVzZVNlbGVjdGlvbkNhY2hlKiogbGUgcHJvcHJpZXTDoCAqKmV4Y2x1c2lvbnMqKiBlICoqaXRlbXMqKiBmYW5ubyByaWZlcmltZW50byBvIGFsbGEgcGFnaW5hIGNvcnJlbnRlIChzZSAqKmZhbHNlKiopIFxyXG4gICAgICogbyBhbGwnaW50ZXJhIHJpY2VyY2EgKHNlICoqdHJ1ZSoqKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBJdGVtc1NlbGVjdGlvbjxUPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBjaGUgbGEgcmljZXJjYSDDqCBzdGF0YSByaWNoaWVzdGEgZGFsbCdlc3RhYmxlLiBRdWVzdGEgdmFyaWFiaWxlIE5PTiBkZXZlIGVzc2VyZSB0b2NjYXRhLiDDiCBnZXN0aXRhIGFsIDEwMCUgZGFsbCdlcy10YWJsZS4gXHJcbiAgICAgKiBcclxuICAgICAqIEwndW5pY2EgY29zYSBjaGUgc2VydmUgw6ggY2hlIG5lbCBtb2RlbGxvIGxhdG8gQyMgc2lhIHByZXNlbnRlIGluIG1vZG8gZGEgbm9uIHBlcmRlcmxhIGR1cmFudGUgbGEgc2VyaWFsaXp6YXppb25lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnRlcm5hbHNlYXJjaHJlcXVlc3Q6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqIFJhZ2dydXBwYW1lbnRpIGRhIGZhcmUgcGVyIHF1ZXN0YSBxdWVyeS4gU2UgaW1wb3N0YXRvIGUgbm9uIGNpIHNvbm8gKipmaWx0ZXJncm91cCoqIG1pIGFzcGV0dG8gZGkgcmljZXZlcmUgb2dnZXR0aSBuZWwgY2FtcG8gKipncm91cHMqKiAqL1xyXG4gICAgcHVibGljIGdyb3VwaW5nczogR3JvdXBPckFnZ3JlZ2F0aW9uW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWx0cm8gZGEgYXBwbGljYXJlIGFpIGdydXBwaS4gUXVhbG9yYSBpbCBudW1lcm8gZGkgZmlsdHJpIHF1aSBmb3NzZSB1Z3VhbGUgYWwgbnVtZXJvIGRpIHJhZ2dydXBwYW1lbnRpIG1pIGluaXppbyBhZCBhcGV0dGFyZSBkaSByaWNldmVyZSBvZ2dldHRpXHJcbiAgICAgKiBzdWwgY2FtcG8gKippdGVtcyoqLCBpbiBjYXNvIGNvbnRyYXJpbyBtaSBhc3BldHRvIGRpIHJpY2V2ZXJlIG8gaSBncnVwcGkgbmVsIGNhbXBvICoqZ3JvdXBzKiogbyBsJ04tZXNpbW8gbGl2ZWxsbyBkZWkgZ3J1cHBpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXF1ZXN0ZWRncm91cHM6IEdyb3VwRmlsdGVyW107XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogUGVybWV0dGUgZGkgcmVzZXR0YXJlIHVuIEFwcFNlYXJjaCBhaSB2YWxvcmkgZGkgZGVmYXVsdC4gXHJcbiAgICAgKiBSZXNvIHN0YXRpY28gcGVyY2jDqSBmcmEgdW5hIGRlc2VyaWFsaXp6YXppb25lIGUgbCdhbHRyYSBzaSBwb3RyZWJiZSBwZXJkZXJlIGlsIHByb3RvdHlwZSBkZWwgY29zdHJ1dHRvcmUgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IGFwcyBBcHBTZWFyY2ggZGEgcmVzZXR0YXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVzZXQoYXBzOiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGFwcy5wYWdlcyA9IDE7XHJcbiAgICAgICAgYXBzLm9iamVjdGNvdW50ID0gMDtcclxuICAgICAgICBhcHMuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIGFwcy5maXJzdHNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgIGFwcy5wYWdlID0gMTtcclxuICAgICAgICBhcHMuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICBhcHMuaXRlbXMgPSBbXTtcclxuICAgICAgICBhcHMub3JkZXJzID0gW107XHJcbiAgICAgICAgYXBzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICBhcHMuY29sdW1uX29yZGVyaW5nID0gW107XHJcbiAgICAgICAgYXBzLnNhdmVkc3RhdGUgPSBmYWxzZTtcclxuICAgICAgICBhcHMuc2VsZnNlYXJjaCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIFBlcm1ldHRlIGRpIG90dGVuZXJlIHVuIG51b3ZvIHJpZmVyaW1lbnRvIGFsbCdBcHBTZWFyY2ggcGFzc2F0YSBjb21lIHBhcmFtZXRyby5cclxuICAgICAqIEludGVybmFtZW50ZSB1dGlsaXp6YSBpbCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFgpKSBjb24gbGEgZGlmZmVyZW56YSBjaGUgcHJpbWEgc3RhY2NhIGlsIHJpZmVyaW1lbnRvIGFnbGkgaXRlbXMgcGVyIGV2aXRhcmUgZGkgXHJcbiAgICAgKiByZXNlcmlhbGl6emFyZSBwb3RlbnppYWxtZW50ZSBjZW50aW5haWEgZGkgZWxlbWVudGkuIElsIHJpZmVyaW1lbnRvIHZpZW5lIHBvaSByaWNvbGxlZ2F0byBhbGxhIG51b3ZhIGFwcHNlYXJjaCBnZW5lcmF0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSBhcHMgQXBwU2VhcmNoIGRpIGN1aSBlc3RyYXJyZSB1biBudW92byByaWZlcmltZW50byBlcXVpdmFsZW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG5ld3JlZihhcHM6IEFwcFNlYXJjaDxhbnk+KSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gYXBzLml0ZW1zO1xyXG4gICAgICAgIGFwcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHZhciBuZXdyZWYgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGFwcykpO1xyXG4gICAgICAgIG5ld3JlZi5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIHJldHVybiBuZXdyZWY7XHJcbiAgICB9XHJcbn0iXX0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwU2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBTZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUVsQjs7T0FFRztJQUNIO1FBQ0ksSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFzRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQW1CO1FBQ25DLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM3QixHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixHQUFHLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUN6QixHQUFHLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixHQUFHLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFtQjtRQUNwQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwT3JkZXJpbmcgfSBmcm9tICcuL0FwcE9yZGVyaW5nJztcclxuaW1wb3J0IHsgSXRlbXNTZWxlY3Rpb24gfSBmcm9tICcuL0l0ZW1zU2VsZWN0aW9uJztcclxuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICcuL0dyb3VwJztcclxuaW1wb3J0IHsgR3JvdXBGaWx0ZXIgfSBmcm9tICcuL0dyb3VwRmlsdGVyJztcclxuaW1wb3J0IHsgR3JvdXBPckFnZ3JlZ2F0aW9uIH0gZnJvbSAnLi9Hcm91cE9yQWdncmVnYXRpb24nO1xyXG5pbXBvcnQgeyBSZXBvcnRQYXJhbSB9IGZyb20gJy4uL3JlcG9ydC9SZXBvcnRQYXJhbSc7XHJcbmltcG9ydCB7IFJlcG9ydENvbHVtbiB9IGZyb20gJy4uL3JlcG9ydC9SZXBvcnRDb2x1bW4nO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBjaGUgaWRlbnRpZmljYSB1bmEgcmljZXJjYSBwYWdpbmF0YSBpbiB0dXR0ZSBsZSBzdWUgc2Z1bWF0dXJlIChkaSBncmlnaW8pXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXBwU2VhcmNoPFQ+IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIGNoZSBnZW5lcmEgdW4naXN0YW56YSBjb2kgdmFsb3JpIGRpIGRlZmF1bHQgZSBpbXBvc3RhbmRvICoqZmlyc3RzZWFyY2gqKiBhICoqdHJ1ZSoqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgdGhpcy5vcmRlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbHVtbl9vcmRlcmluZyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2F2ZWRzdGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlyc3RzZWFyY2ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJRCBkZWxsYSByaWNlcmNhLCBzZW1wcmUgaW51dGlsZSBhIG1lbm8gY2hlIG5vbiBzaWEgbGEgcmljZXJjYSBkZWkgcmlzdWx0YXRpIGRpIHVuIHJlcG9ydCAqL1xyXG4gICAgcHVibGljIHNlYXJjaGlkOiBzdHJpbmc7XHJcbiAgICAvKiogRGVzY3JpemlvbmUgZGVsbGEgcmljZXJjYSwgc2VtcHJlIGludXRpbGUgYSBtZW5vIGNoZSBub24gc2lhIGxhIHJpY2VyY2EgZGVpIHJpc3VsdGF0aSBkaSB1biByZXBvcnQgKi9cclxuICAgIHB1YmxpYyBzZWFyY2hkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgLyoqIEluZGljYSBzZSBsYSBwYWdpbmF6aW9uZSBwZXIgcXVlc3RhIHJpY2VyY2Egw6ggZGlzcG9uaWJpbGUgKi9cclxuICAgIHB1YmxpYyBwYWdpbmdhdmFpbGFibGU6IGJvb2xlYW47XHJcbiAgICAvKiogSW5kaWNhIGlsIGZvcm1hdG8gZGkgZXhwb3J0IGRpc3BvbmliaWxlIHBlciBxdWVzdGEgcmljZXJjYS4gVXRpbGl6emF0byBzb2xvIHBlciBsYSByaWNlcmNhIGRlaSByaXN1bHRhdGkgZGkgdW4gcmVwb3J0ICovXHJcbiAgICBwdWJsaWMgZXhwZm9ybWF0OiBib29sZWFuO1xyXG4gICAgLyoqIFBhcmFtZXRyaSBkaSByaWNlcmNhIHBlciBpIHJpc3VsdGF0aSBpbiBtb2RhbGl0w6AgcmVwb3J0ICovXHJcbiAgICBwdWJsaWMgcGFyczogUmVwb3J0UGFyYW1bXTtcclxuICAgIC8qKiBJbmRpY2F6aW9uZSBkZWxsZSBjb2xvbm5lIHByZXNlbnRpIG5lbCByZXBvcnQgKi9cclxuICAgIHB1YmxpYyByZXBvcnRfY29sdW1uczogUmVwb3J0Q29sdW1uW107XHJcbiAgICAvKiogSW5kaWNhIHNlIGMnw6ggdW5hIHJpY2VyY2EgaW4gY29yc28gKi9cclxuICAgIHB1YmxpYyBzZWFyY2hpbnByb2dyZXNzOiBib29sZWFuO1xyXG4gICAgLyoqIEluZGljYSBpbCBudW1lcm8gdG90YWxlIGRpIHBhZ2luZSB0cm92YXRlIGRhbGxhIHJpY2VyY2EuIE9nbmkgcGFnaW5hIMOoIHVuYSBsaXN0YSBkaSAqKml0ZW1zcGVycGFnZW92ZXJyaWRlKiogb2dnZXR0aSAqL1xyXG4gICAgcHVibGljIHBhZ2VzOiBudW1iZXI7XHJcbiAgICAvKiogQ29udGVnZ2lvIHRvdGFsZSBkZWdsaSBvZ2dldHRpIHRyb3ZhdGkgKGluY2x1c2kgcXVlbGxpIGluIHBhZ2luZSBub24gYXR0dWFsbWVudGUgc2VsZXppb25hdGUpICovXHJcbiAgICBwdWJsaWMgb2JqZWN0Y291bnQ6IG51bWJlcjtcclxuICAgIC8qKiBDb250ZWdnaW8gdG90YWxlIGRlaSBncnVwcGkgdHJvdmF0aSAoaW5jbHVzaSBxdWVsbGkgaW4gcGFnaW5lIG5vbiBhdHR1YWxtZW50ZSBzZWxlemlvbmF0ZSkgKi9cclxuICAgIHB1YmxpYyBncm91cGNvdW50OiBudW1iZXI7XHJcbiAgICAvKiogUGFnaW5hIGF0dHVhbG1lbnRlIGluIHZpc3VhbGl6emF6aW9uZSAqL1xyXG4gICAgcHVibGljIHBhZ2U6IG51bWJlcjtcclxuICAgIC8qKiBOdW1lcm8gZGkgb2dnZXR0aSBkYSBwZXJzZW50YXJlIGluIG9nbmkgcGFnaW5hLiBQZXIgY29udmVuemlvbmUgc2kgY29uc2lkZXJhIHZhbG9yaXp6YXRvIGEgMTUgc2Ugbm9uIGZvcm5pdG8gKi9cclxuICAgIHB1YmxpYyBpdGVtc3BlcnBhZ2VvdmVycmlkZTogbnVtYmVyO1xyXG4gICAgLyoqIExpc3RhIGRlZ2xpIG9nZ2V0dGkgbmVsbGEgcGFnaW5hIGF0dHVhbG1lbnRlIGluIHZpc3VhbGl6emF6aW9uZSAqL1xyXG4gICAgcHVibGljIGl0ZW1zOiBUW107XHJcbiAgICAvKiogRGl6aW9uYXJpbyBjb250ZW5lbnRlIHR1dHRpIGkgZ3J1cHBpIHBhZ2luYXRpICAqL1xyXG4gICAgcHVibGljIGdyb3VwczogR3JvdXBbXTtcclxuICAgIC8qKiBMaXN0YSBkaSBjb2xvbm5lIHBlciBjdWkgb3JkaW5hcmUgKi9cclxuICAgIHB1YmxpYyBvcmRlcnM6IEFwcE9yZGVyaW5nW107XHJcbiAgICAvKiogTGlzdGEgZGkgY29sb25uZSBkYSB2aXN1YWxpenphcmUgKi9cclxuICAgIHB1YmxpYyBjb2x1bW5zOiBzdHJpbmdbXTtcclxuICAgIC8qKiBMaXN0YSBkaSBjb2xvbm5lIG5lbGwnb3JkaW5lIGNvcnJldHRvICovXHJcbiAgICBwdWJsaWMgY29sdW1uX29yZGVyaW5nOiBzdHJpbmdbXTtcclxuICAgIC8qKiBJbmRpY2Egc2UgbGEgcmljZXJjYSBlcmEgc2FsdmF0YS4gUXVhbG9yYSBmb3NzZSBxdWVzdG8gaWwgY2FzbywgYWwgY2FyaWNhbWVudG8gbCdlcy10YWJsZSBzaSBvY2N1cGVyw6AgZGkgcmktZWZmZXR0dWFyZSBsYSByaWNlcmNhIGVkIGFnZ2lvcm5hcmUgaWwgbW9kZWxsbyAqL1xyXG4gICAgcHVibGljIHNhdmVkc3RhdGU6IGJvb2xlYW47XHJcbiAgICAvKiogSW5kaWNhIHNlIGJpc29nbmEgYW5jb3JhIGVmZmV0dHVhcmUgbGEgcHJpbWEgcmljZXJjYSAqL1xyXG4gICAgcHVibGljIGZpcnN0c2VhcmNoOiBib29sZWFuO1xyXG4gICAgLyoqIEluZGljYSBzZSBzdG8gZWZmZXR0dWFuZG8gbGEgcmljZXJjYSBwb3N0IGJpbmQgKi9cclxuICAgIHB1YmxpYyBzZWxmc2VhcmNoOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2dnZXR0byBjaGUgaW5kaWNhIGxhIHNlbGV6aW9uZSBjb3JyZW50ZS4gXHJcbiAgICAgKiBcclxuICAgICAqIFNlICoqYWxsKiogw6ggKip0cnVlKiogdnVvbGUgZGlyZSBjaGUgw6ggdHV0dG8gc2VsZXppb25hdG8gZWQgZXZlbnR1YWxtZW50ZSBjaSBzb25vIGRlbGxlIGVzY2x1c2lvbmkgKCoqZXhjbHVzaW9ucyoqKVxyXG4gICAgICogU2UgKiphbGwqKiDDqCAqKmZhbHNlKiogdnVvbCBkaXJlIGNoZSBzb25vIHNlbGV6aW9uYXRpICoqaXRlbSoqIHNwZWNpZmljaVxyXG4gICAgICogXHJcbiAgICAgKiBJbiBiYXNlIGFsbCdJbnB1dCAqKlVzZVNlbGVjdGlvbkNhY2hlKiogbGUgcHJvcHJpZXTDoCAqKmV4Y2x1c2lvbnMqKiBlICoqaXRlbXMqKiBmYW5ubyByaWZlcmltZW50byBvIGFsbGEgcGFnaW5hIGNvcnJlbnRlIChzZSAqKmZhbHNlKiopIFxyXG4gICAgICogbyBhbGwnaW50ZXJhIHJpY2VyY2EgKHNlICoqdHJ1ZSoqKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBJdGVtc1NlbGVjdGlvbjxUPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBjaGUgbGEgcmljZXJjYSDDqCBzdGF0YSByaWNoaWVzdGEgZGFsbCdlc3RhYmxlLiBRdWVzdGEgdmFyaWFiaWxlIE5PTiBkZXZlIGVzc2VyZSB0b2NjYXRhLiDDiCBnZXN0aXRhIGFsIDEwMCUgZGFsbCdlcy10YWJsZS4gXHJcbiAgICAgKiBcclxuICAgICAqIEwndW5pY2EgY29zYSBjaGUgc2VydmUgw6ggY2hlIG5lbCBtb2RlbGxvIGxhdG8gQyMgc2lhIHByZXNlbnRlIGluIG1vZG8gZGEgbm9uIHBlcmRlcmxhIGR1cmFudGUgbGEgc2VyaWFsaXp6YXppb25lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnRlcm5hbHNlYXJjaHJlcXVlc3Q6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqIFJhZ2dydXBwYW1lbnRpIGRhIGZhcmUgcGVyIHF1ZXN0YSBxdWVyeS4gU2UgaW1wb3N0YXRvIGUgbm9uIGNpIHNvbm8gKipmaWx0ZXJncm91cCoqIG1pIGFzcGV0dG8gZGkgcmljZXZlcmUgb2dnZXR0aSBuZWwgY2FtcG8gKipncm91cHMqKiAqL1xyXG4gICAgcHVibGljIGdyb3VwaW5nczogR3JvdXBPckFnZ3JlZ2F0aW9uW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWx0cm8gZGEgYXBwbGljYXJlIGFpIGdydXBwaS4gUXVhbG9yYSBpbCBudW1lcm8gZGkgZmlsdHJpIHF1aSBmb3NzZSB1Z3VhbGUgYWwgbnVtZXJvIGRpIHJhZ2dydXBwYW1lbnRpIG1pIGluaXppbyBhZCBhcGV0dGFyZSBkaSByaWNldmVyZSBvZ2dldHRpXHJcbiAgICAgKiBzdWwgY2FtcG8gKippdGVtcyoqLCBpbiBjYXNvIGNvbnRyYXJpbyBtaSBhc3BldHRvIGRpIHJpY2V2ZXJlIG8gaSBncnVwcGkgbmVsIGNhbXBvICoqZ3JvdXBzKiogbyBsJ04tZXNpbW8gbGl2ZWxsbyBkZWkgZ3J1cHBpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXF1ZXN0ZWRncm91cHM6IEdyb3VwRmlsdGVyW107XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogUGVybWV0dGUgZGkgcmVzZXR0YXJlIHVuIEFwcFNlYXJjaCBhaSB2YWxvcmkgZGkgZGVmYXVsdC4gXHJcbiAgICAgKiBSZXNvIHN0YXRpY28gcGVyY2jDqSBmcmEgdW5hIGRlc2VyaWFsaXp6YXppb25lIGUgbCdhbHRyYSBzaSBwb3RyZWJiZSBwZXJkZXJlIGlsIHByb3RvdHlwZSBkZWwgY29zdHJ1dHRvcmUgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IGFwcyBBcHBTZWFyY2ggZGEgcmVzZXR0YXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVzZXQoYXBzOiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGFwcy5wYWdlcyA9IDE7XHJcbiAgICAgICAgYXBzLm9iamVjdGNvdW50ID0gMDtcclxuICAgICAgICBhcHMuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIGFwcy5maXJzdHNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgIGFwcy5wYWdlID0gMTtcclxuICAgICAgICBhcHMuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICBhcHMuaXRlbXMgPSBbXTtcclxuICAgICAgICBhcHMub3JkZXJzID0gW107XHJcbiAgICAgICAgYXBzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICBhcHMuY29sdW1uX29yZGVyaW5nID0gW107XHJcbiAgICAgICAgYXBzLnNhdmVkc3RhdGUgPSBmYWxzZTtcclxuICAgICAgICBhcHMuc2VsZnNlYXJjaCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIFBlcm1ldHRlIGRpIG90dGVuZXJlIHVuIG51b3ZvIHJpZmVyaW1lbnRvIGFsbCdBcHBTZWFyY2ggcGFzc2F0YSBjb21lIHBhcmFtZXRyby5cclxuICAgICAqIEludGVybmFtZW50ZSB1dGlsaXp6YSBpbCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFgpKSBjb24gbGEgZGlmZmVyZW56YSBjaGUgcHJpbWEgc3RhY2NhIGlsIHJpZmVyaW1lbnRvIGFnbGkgaXRlbXMgcGVyIGV2aXRhcmUgZGkgXHJcbiAgICAgKiByZXNlcmlhbGl6emFyZSBwb3RlbnppYWxtZW50ZSBjZW50aW5haWEgZGkgZWxlbWVudGkuIElsIHJpZmVyaW1lbnRvIHZpZW5lIHBvaSByaWNvbGxlZ2F0byBhbGxhIG51b3ZhIGFwcHNlYXJjaCBnZW5lcmF0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSBhcHMgQXBwU2VhcmNoIGRpIGN1aSBlc3RyYXJyZSB1biBudW92byByaWZlcmltZW50byBlcXVpdmFsZW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG5ld3JlZihhcHM6IEFwcFNlYXJjaDxhbnk+KSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gYXBzLml0ZW1zO1xyXG4gICAgICAgIGFwcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHZhciBuZXdyZWYgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGFwcykpO1xyXG4gICAgICAgIG5ld3JlZi5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIG5ld3JlZi5wYWdlID0gMTtcclxuICAgICAgICByZXR1cm4gbmV3cmVmO1xyXG4gICAgfVxyXG59Il19