igniteui-angular 12.3.17 → 12.3.18

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.
@@ -115,8 +115,10 @@ export class IgxGridNavigationService {
115
115
  });
116
116
  }
117
117
  else {
118
- const range = { rowStart: this.activeNode.row, rowEnd: this.activeNode.row,
119
- columnStart: this.activeNode.column, columnEnd: this.activeNode.column };
118
+ const range = {
119
+ rowStart: this.activeNode.row, rowEnd: this.activeNode.row,
120
+ columnStart: this.activeNode.column, columnEnd: this.activeNode.column
121
+ };
120
122
  this.grid.selectRange(range);
121
123
  this.grid.notifyChanges();
122
124
  }
@@ -627,11 +629,15 @@ export class IgxGridNavigationService {
627
629
  .find(c => this.isColumnFullyVisible(c.visibleIndex))) === null || _a === void 0 ? void 0 : _a.visibleIndex;
628
630
  const column = this.grid.visibleColumns.find((col) => !col.columnLayout && col.visibleIndex === colIndex);
629
631
  const rowInd = rowIndex ? rowIndex : (_b = this.grid.rowList.find(r => !this.shouldPerformVerticalScroll(r.index, colIndex))) === null || _b === void 0 ? void 0 : _b.index;
630
- const node = { row: rowInd !== null && rowInd !== void 0 ? rowInd : 0,
632
+ const node = {
633
+ row: rowInd !== null && rowInd !== void 0 ? rowInd : 0,
631
634
  column: (_c = column === null || column === void 0 ? void 0 : column.visibleIndex) !== null && _c !== void 0 ? _c : 0, level: (_d = column === null || column === void 0 ? void 0 : column.level) !== null && _d !== void 0 ? _d : 0,
632
635
  mchCache: column ? { level: column.level, visibleIndex: column.visibleIndex } : {},
633
- layout: column && column.columnLayoutChild ? { rowStart: column.rowStart, colStart: column.colStart,
634
- rowEnd: column.rowEnd, colEnd: column.colEnd, columnVisibleIndex: column.visibleIndex } : null };
636
+ layout: column && column.columnLayoutChild ? {
637
+ rowStart: column.rowStart, colStart: column.colStart,
638
+ rowEnd: column.rowEnd, colEnd: column.colEnd, columnVisibleIndex: column.visibleIndex
639
+ } : null
640
+ };
635
641
  return node;
636
642
  }
637
643
  handleMCHeaderNav(key, ctrl) {
@@ -725,4 +731,4 @@ IgxGridNavigationService.decorators = [
725
731
  IgxGridNavigationService.ctorParameters = () => [
726
732
  { type: PlatformUtil }
727
733
  ];
728
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUNILGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFDWixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUF5QixpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWdCbkYsY0FBYztBQUVkLE1BQU0sT0FBTyx3QkFBd0I7SUFjakMsWUFBc0IsUUFBc0I7UUFBdEIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQVpyQyxnQkFBVyxHQUFnQixFQUFpQixDQUFDO1FBQzdDLG1CQUFjLEdBQWdCLEVBQWlCLENBQUM7UUFDN0Msc0JBQWlCLEdBQUcsS0FBSyxDQUFDO0lBVVksQ0FBQztJQVJqRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLFVBQVUsQ0FBQyxLQUFrQjtRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBSUQsZ0JBQWdCLENBQUMsS0FBb0I7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMs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QUMsR0FBVztRQUMzQixPQUFPLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxRQUFRLENBQUMsR0FBVztRQUN4QixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7O1lBL3VCSixVQUFVOzs7WUF0QlAsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBOQVZJR0FUSU9OX0tFWVMsXG4gICAgUk9XX0NPTExBUFNFX0tFWVMsXG4gICAgUk9XX0VYUEFORF9LRVlTLFxuICAgIFNVUFBPUlRFRF9LRVlTLFxuICAgIEhPUklaT05UQUxfTkFWX0tFWVMsXG4gICAgSEVBREVSX0tFWVMsXG4gICAgUk9XX0FERF9LRVlTLFxuICAgIFBsYXRmb3JtVXRpbFxufSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElNdWx0aVJvd0xheW91dE5vZGUgfSBmcm9tICcuL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkS2V5ZG93blRhcmdldFR5cGUsIEdyaWRTZWxlY3Rpb25Nb2RlLCBGaWx0ZXJNb2RlIH0gZnJvbSAnLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElBY3RpdmVOb2RlQ2hhbmdlRXZlbnRBcmdzIH0gZnJvbSAnLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneEdyaWRHcm91cEJ5Um93Q29tcG9uZW50IH0gZnJvbSAnLi9ncmlkL2dyb3VwYnktcm93LmNvbXBvbmVudCc7XG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkdyb3Vwc0NhY2hlIHtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIHZpc2libGVJbmRleDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZlTm9kZSB7XG4gICAgZ3JpZElEPzogc3RyaW5nO1xuICAgIHJvdzogbnVtYmVyO1xuICAgIGNvbHVtbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBtY2hDYWNoZT86IENvbHVtbkdyb3Vwc0NhY2hlO1xuICAgIGxheW91dD86IElNdWx0aVJvd0xheW91dE5vZGU7XG59XG5cbi8qKiBAaGlkZGVuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZTtcbiAgICBwdWJsaWMgX2FjdGl2ZU5vZGU6IElBY3RpdmVOb2RlID0ge30gYXMgSUFjdGl2ZU5vZGU7XG4gICAgcHVibGljIGxhc3RBY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSA9IHt9IGFzIElBY3RpdmVOb2RlO1xuICAgIHByb3RlY3RlZCBwZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIGdldCBhY3RpdmVOb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGFjdGl2ZU5vZGUodmFsdWU6IElBY3RpdmVOb2RlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZU5vZGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCkgeyB9XG5cbiAgICBoYW5kbGVOYXZpZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGwgJiYgTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCAmJiBTVVBQT1JURURfS0VZUy5oYXMoa2V5KSB8fCAoa2V5ID09PSAndGFiJyAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpLCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNwYXRjaEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSB8fCAhKFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkgJiZcbiAgICAgICAgICAgICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQgJiYgIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hpZnQgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkgJiYgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuaXNEYXRhUm93KHRoaXMuYWN0aXZlTm9kZS5yb3cpID8gJ2RhdGFDZWxsJyA6XG4gICAgICAgICAgICB0aGlzLmlzRGF0YVJvdyh0aGlzLmFjdGl2ZU5vZGUucm93LCB0cnVlKSA/ICdzdW1tYXJ5Q2VsbCcgOiAnZ3JvdXBSb3cnO1xuICAgICAgICBpZiAodGhpcy5lbWl0S2V5RG93bih0eXBlLCB0aGlzLmFjdGl2ZU5vZGUucm93LCBldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFsdChrZXksIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoWycgJywgJ3NwYWNlYmFyJywgJ3NwYWNlJ10uaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uua2V5Ym9hcmRTdGF0ZU9uS2V5ZG93bih0aGlzLmFjdGl2ZU5vZGUsIHNoaWZ0LCBzaGlmdCAmJiBrZXkgPT09ICd0YWInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TmV4dFBvc2l0aW9uKHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIGtleSwgc2hpZnQsIGN0cmwsIGV2ZW50KTtcbiAgICAgICAgaWYgKE5BVklHQVRJT05fS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVJbkJvZHkocG9zaXRpb24ucm93SW5kZXgsIHBvc2l0aW9uLmNvbEluZGV4LCAob2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JqLnRhcmdldC5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBzdW1tYXJ5TmF2KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbE5hdihldmVudCwgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCksIHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGgsICdzdW1tYXJ5Q2VsbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGVhZGVyTmF2aWdhdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFIRUFERVJfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG4gICAgICAgIGNvbnN0IGFsdCA9IGV2ZW50LmFsdEtleTtcblxuICAgICAgICB0aGlzLnBlcmZvcm1IZWFkZXJLZXlDb21iaW5hdGlvbih0aGlzLmN1cnJlbnRBY3RpdmVDb2x1bW4sIGtleSwgc2hpZnQsIGN0cmwsIGFsdCwgZXZlbnQpO1xuICAgICAgICBpZiAoc2hpZnQgfHwgYWx0IHx8IChjdHJsICYmIChrZXkuaW5jbHVkZXMoJ2Rvd24nKSB8fCBrZXkuaW5jbHVkZXMoJ2Rvd24nKSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNDb2x1bW5Hcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTUNIZWFkZXJOYXYoa2V5LCBjdHJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbE5hdihldmVudCwga2V5LCAtMSwgJ2hlYWRlckNlbGwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvY3VzVGJvZHkoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZ3JpZFJvd3MgPSB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIudG90YWxJdGVtQ291bnQgPz8gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aDtcbiAgICAgICAgaWYgKGdyaWRSb3dzIDwgMSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gbnVsbDsgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlIHx8ICFPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZU5vZGUpLmxlbmd0aCB8fCB0aGlzLmFjdGl2ZU5vZGUucm93IDwgMCB8fCB0aGlzLmFjdGl2ZU5vZGUucm93ID4gZ3JpZFJvd3MgLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNMYXN0QWN0aXZlTm9kZSA9IE9iamVjdC5rZXlzKHRoaXMubGFzdEFjdGl2ZU5vZGUpLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZENsZWFyU2VsZWN0aW9uID0gaGFzTGFzdEFjdGl2ZU5vZGUgJiYgKHRoaXMubGFzdEFjdGl2ZU5vZGUucm93IDwgMCB8fCB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA+IGdyaWRSb3dzIC0gMSk7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cgPj0gMCAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA8IGdyaWRSb3dzID9cbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VmlzaWJsZU5vZGUodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cpIDogdGhpcy5maXJzdFZpc2libGVOb2RlKCkpO1xuICAgICAgICAgICAgaWYgKHNob3VsZENsZWFyU2VsZWN0aW9uIHx8ICh0aGlzLmdyaWQuY2VsbFNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNsZWFyQ2VsbFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnRhcmdldD8uYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9ICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0geyByb3dTdGFydDogdGhpcy5hY3RpdmVOb2RlLnJvdywgcm93RW5kOiB0aGlzLmFjdGl2ZU5vZGUucm93LFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5TdGFydDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgY29sdW1uRW5kOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIH07XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9jdXNGaXJzdENlbGwoaGVhZGVyID0gdHJ1ZSkge1xuICAgICAgICBpZiAoKGhlYWRlciB8fCB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoKSAmJiB0aGlzLmFjdGl2ZU5vZGUgJiZcbiAgICAgICAgICAgICh0aGlzLmFjdGl2ZU5vZGUucm93ID09PSAtMSB8fCB0aGlzLmFjdGl2ZU5vZGUucm93ID09PSB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoIHx8XG4gICAgICAgICAgICAoIWhlYWRlciAmJiAhdGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaG91bGRTY3JvbGxJbnRvVmlldyA9IHRoaXMubGFzdEFjdGl2ZU5vZGUgJiYgKGhlYWRlciAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyAhPT0gLTEpIHx8XG4gICAgICAgICAgICAoIWhlYWRlciAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyAhPT0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh0aGlzLmZpcnN0VmlzaWJsZU5vZGUoaGVhZGVyID8gLTEgOiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoKSk7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGxJbnRvVmlldykge1xuICAgICAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbHVtbkZ1bGx5VmlzaWJsZShjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChjb2x1bW5JbmRleCA8IDAgfHwgdGhpcy5pc0NvbHVtblBpbm5lZChjb2x1bW5JbmRleCwgdGhpcy5mb3JPZkRpcigpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldENvbHVtblVucGlubmVkSW5kZXgoY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4ICsgMSkgLSB0aGlzLmZvck9mRGlyKCkuZ2V0Q29sdW1uU2Nyb2xsTGVmdChpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlDb250YWluZXJXaWR0aCA8IHdpZHRoICYmIHRoaXMuZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQgPT09IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUNvbnRhaW5lcldpZHRoID49IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4ICsgMSkgLSB0aGlzLmRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0ICYmXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0IDw9IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUGVyZm9ybUhvcml6b250YWxTY3JvbGwodmlzaWJsZUNvbEluZGV4OiBudW1iZXIsIHJvd0luZGV4ID0gLTEpIHtcbiAgICAgICAgaWYgKHZpc2libGVDb2xJbmRleCA8IDAgfHwgdmlzaWJsZUNvbEluZGV4ID4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID4gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0NvbHVtbkZ1bGx5VmlzaWJsZSh2aXNpYmxlQ29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIHJldHVybiByb3cuZXhwcmVzc2lvbiB8fCByb3cuZGV0YWlsc0RhdGEgPyBmYWxzZSA6ICF0aGlzLmlzQ29sdW1uRnVsbHlWaXNpYmxlKHZpc2libGVDb2xJbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbCh0YXJnZXRSb3dJbmRleDogbnVtYmVyLCB2aXNpYmxlQ29sSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkQnlWaWV3SW5kZXgodGFyZ2V0Um93SW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Nyb2xsUm93SW5kZXggPSB0aGlzLmdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiB0aGlzLmdyaWQuaXNSb3dQaW5uaW5nVG9Ub3AgP1xuICAgICAgICAgICAgdGFyZ2V0Um93SW5kZXggLSB0aGlzLmdyaWQucGlubmVkRGF0YVZpZXcubGVuZ3RoIDogdGFyZ2V0Um93SW5kZXg7XG4gICAgICAgIGNvbnN0IHRhcmdldFJvdyA9IHRoaXMuZ2V0Um93RWxlbWVudEJ5SW5kZXgodGFyZ2V0Um93SW5kZXgpO1xuICAgICAgICBjb25zdCByb3dIZWlnaHQgPSB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2l6ZUF0KHNjcm9sbFJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5ncmlkLmNhbGNIZWlnaHQgPyBNYXRoLmNlaWwodGhpcy5ncmlkLmNhbGNIZWlnaHQpIDogMDtcbiAgICAgICAgY29uc3QgZW5kVG9wT2Zmc2V0ID0gdGFyZ2V0Um93ID8gdGFyZ2V0Um93Lm9mZnNldFRvcCArIHJvd0hlaWdodCArIHRoaXMuY29udGFpbmVyVG9wT2Zmc2V0IDogY29udGFpbmVySGVpZ2h0ICsgcm93SGVpZ2h0O1xuICAgICAgICAvLyB0aGlzIGlzIHdvcmthcm91bmQ6IGVuZFRvcE9mZnNldCAtIGNvbnRhaW5lckhlaWdodCA+IDUgYW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoOiBjb250YWluZXJIZWlnaHQgPCBlbmRUb3BPZmZzZXRcbiAgICAgICAgLy8gd2hlbiB0aGUgcGFnZSBpcyB6b29tZWQgdGhlIGdyaWQgZG9lcyBub3Qgc2Nyb2xsIHRoZSByb3cgY29tcGxldGVseSBpbiB0aGUgdmlld1xuICAgICAgICByZXR1cm4gIXRhcmdldFJvdyB8fCB0YXJnZXRSb3cub2Zmc2V0VG9wIDwgTWF0aC5hYnModGhpcy5jb250YWluZXJUb3BPZmZzZXQpXG4gICAgICAgICAgICB8fCBjb250YWluZXJIZWlnaHQgJiYgZW5kVG9wT2Zmc2V0IC0gY29udGFpbmVySGVpZ2h0ID4gNTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGVyZm9ybVZlcnRpY2FsU2Nyb2xsVG9DZWxsKHJvd0luZGV4OiBudW1iZXIsIHZpc2libGVDb2xJbmRleCA9IC0xLCBjYj86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbChyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICAvLyBPbmx5IGZvciB0b3AgcGlubmluZyB3ZSBuZWVkIHRvIHN1YnRyYWN0IHBpbm5lZCBjb3VudCBiZWNhdXNlIHZpcnR1YWxpemF0aW9uIGluZGV4aW5nIGRvZXNuJ3QgY291bnQgcGlubmVkIHJvd3MuXG4gICAgICAgIGNvbnN0IHNjcm9sbFJvd0luZGV4ID0gdGhpcy5ncmlkLmhhc1Bpbm5lZFJlY29yZHMgJiYgdGhpcy5ncmlkLmlzUm93UGlubmluZ1RvVG9wID9cbiAgICAgICAgICAgIHJvd0luZGV4IC0gdGhpcy5ncmlkLnBpbm5lZERhdGFWaWV3Lmxlbmd0aCA6IHJvd0luZGV4O1xuICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsVG8oc2Nyb2xsUm93SW5kZXgpO1xuICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuY2h1bmtMb2FkXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwodmlzaWJsZUNvbHVtbkluZGV4OiBudW1iZXIsIGNiPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0xpc3QgPCAxICYmIHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0Lmxlbmd0aCA8IDEgJiYgdGhpcy5ncmlkLmhhc0NvbHVtbkdyb3Vwcykge1xuICAgICAgICAgICAgbGV0IGNvbHVtbiA9IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeVZpc2libGVJbmRleCh2aXNpYmxlQ29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgd2hpbGUgKGNvbHVtbi5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4ucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtbkluZGV4ID0gdGhpcy5mb3JPZkRpcigpLmlneEZvck9mLmluZGV4T2YoY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUGVyZm9ybUhvcml6b250YWxTY3JvbGwodmlzaWJsZUNvbHVtbkluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICB0aGlzLmdyaWQucGFyZW50VmlydERpci5jaHVua0xvYWRcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9yT2ZEaXIoKS5zY3JvbGxUbyh0aGlzLmdldENvbHVtblVucGlubmVkSW5kZXgodmlzaWJsZUNvbHVtbkluZGV4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRGF0YVJvdyhyb3dJbmRleDogbnVtYmVyLCBpbmNsdWRlU3VtbWFyeSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBjdXJSb3c6IGFueTtcblxuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID4gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGN1clJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleCAtIHRoaXMuZ3JpZC52aXJ0dWFsaXphdGlvblN0YXRlLnN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgaWYgKCFjdXJSb3cpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1clJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1clJvdyAmJiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChjdXJSb3cpICYmICF0aGlzLmdyaWQuaXNEZXRhaWxSZWNvcmQoY3VyUm93KVxuICAgICAgICAgICAgJiYgIWN1clJvdy5jaGlsZEdyaWRzRGF0YSAmJiAoaW5jbHVkZVN1bW1hcnkgfHwgIWN1clJvdy5zdW1tYXJpZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0dyb3VwUm93KHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCB8fCByb3dJbmRleCA+IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4XTtcbiAgICAgICAgcmV0dXJuIGN1clJvdyAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1clJvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFjdGl2ZU5vZGUoYWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlTm9kZUNoYW5nZWQoYWN0aXZlTm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSBhY3RpdmVOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmFjdGl2ZU5vZGUsIGFjdGl2ZU5vZGUpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbYWN0aXZlTm9kZS5yb3ddO1xuICAgICAgICBjb25zdCB0eXBlOiBHcmlkS2V5ZG93blRhcmdldFR5cGUgPSBhY3RpdmVOb2RlLnJvdyA8IDAgPyAnaGVhZGVyQ2VsbCcgOlxuICAgICAgICAgICAgdGhpcy5pc0RhdGFSb3coYWN0aXZlTm9kZS5yb3cpID8gJ2RhdGFDZWxsJyA6XG4gICAgICAgICAgICAgICAgY3VyclJvdyAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1cnJSb3cpID8gJ2dyb3VwUm93JyA6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSb3cgJiYgdGhpcy5ncmlkLmlzRGV0YWlsUmVjb3JkKGN1cnJSb3cpID8gJ21hc3RlckRldGFpbFJvdycgOiAnc3VtbWFyeUNlbGwnO1xuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElBY3RpdmVOb2RlQ2hhbmdlRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93OiB0aGlzLmFjdGl2ZU5vZGUucm93LFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLFxuICAgICAgICAgICAgbGV2ZWw6IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCxcbiAgICAgICAgICAgIHRhZzogdHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZ3JpZC5hY3RpdmVOb2RlQ2hhbmdlLmVtaXQoYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlTm9kZUNoYW5nZWQoYWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUpIHtcbiAgICAgICAgbGV0IGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjaGVja0lubmVyUHJvcCA9IChhY2l2ZU5vZGU6IENvbHVtbkdyb3Vwc0NhY2hlIHwgSU11bHRpUm93TGF5b3V0Tm9kZSwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFhY2l2ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhY2l2ZU5vZGUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZU5vZGVbcHJvcF1bcHJvcE5hbWVdICE9PSBhY2l2ZU5vZGVbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFjdGl2ZU5vZGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIHByb3BzKSB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmFjdGl2ZU5vZGVbcHJvcE5hbWVdICYmIHR5cGVvZiB0aGlzLmFjdGl2ZU5vZGVbcHJvcE5hbWVdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNoZWNrSW5uZXJQcm9wKGFjdGl2ZU5vZGVbcHJvcE5hbWVdLCBwcm9wTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlTm9kZVtwcm9wTmFtZV0gIT09IGFjdGl2ZU5vZGVbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc0NoYW5nZWQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE5leHRQb3NpdGlvbihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBrZXk6IHN0cmluZywgc2hpZnQ6IGJvb2xlYW4sIGN0cmw6IGJvb2xlYW4sIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0RhdGFSb3cocm93SW5kZXgsIHRydWUpICYmIChrZXkuaW5kZXhPZignZG93bicpIDwgMCB8fCBrZXkuaW5kZXhPZigndXAnKSA8IDApICYmIGN0cmwpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJvd0luZGV4LCBjb2xJbmRleCB9O1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdwYWdlZG93bic6XG4gICAgICAgICAgICBjYXNlICdwYWdldXAnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsUHJldlBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdENlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuY2h1bmtMb2FkXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRpdENlbGwgJiYgdGhpcy5ncmlkLnJvd0xpc3QubWFwKHIgPT4gci5pbmRleCkuaW5kZXhPZihlZGl0Q2VsbC5yb3dJbmRleCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFZGl0aW5nKHNoaWZ0LCBldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZExhc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3c7XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSB0aGlzLmxhc3RDb2x1bW5JbmRleDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZEZpcnN0RGF0YVJvd0luZGV4KCkgOiB0aGlzLmFjdGl2ZU5vZGUucm93O1xuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93bGVmdCc6XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IGN0cmwgPyAwIDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd3JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IGN0cmwgPyB0aGlzLmxhc3RDb2x1bW5JbmRleCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gKyAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgICAgICAgaWYgKGN0cmwgJiYgIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSB8fCAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA6IDA7XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kRmlyc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3cgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAgICAgICAgIGlmICgoY3RybCAmJiAhdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB8fCAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA6IDA7XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kTGFzdERhdGFSb3dJbmRleCgpIDogdGhpcy5hY3RpdmVOb2RlLnJvdyArIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgICBjYXNlICdmMic6XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9jZWxsX2J5X3Zpc2libGVfaW5kZXgodGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkgfHwgIWNlbGwuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgICBjYXNlICdlc2MnOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuaXNJbkNvbXBvc2l0aW9uTW9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSB8fCB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kRWRpdChmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0VkZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICBjYXNlICdzcGFjZWJhcic6XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLmFjdGl2ZU5vZGUucm93KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmlzUm93U2VsZWN0YWJsZSAmJiByb3dPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvd09iai5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KHJvd09iai5yb3dJRCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dCeUlkKHJvd09iai5yb3dJRCwgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0dyb3VwUm93KHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKChyb3dPYmogYXMgYW55KSBhcyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCkub25Hcm91cFNlbGVjdG9yQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcm93SW5kZXgsIGNvbEluZGV4IH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhvcml6b250YWxOYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGtleTogc3RyaW5nLCByb3dJbmRleDogbnVtYmVyLCB0YWc6IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSkge1xuICAgICAgICBjb25zdCBjdHJsID0gZXZlbnQuY3RybEtleTtcbiAgICAgICAgaWYgKCFIT1JJWk9OVEFMX05BVl9LRVlTLmhhcyhldmVudC5rZXkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmFjdGl2ZU5vZGUucm93ID0gcm93SW5kZXg7XG4gICAgICAgIGlmIChyb3dJbmRleCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVtaXRLZXlEb3duKCdzdW1tYXJ5Q2VsbCcsIHRoaXMuYWN0aXZlTm9kZS5yb3csIGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld0FjdGl2ZU5vZGUgPSB7XG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sXG4gICAgICAgICAgICBtY2hDYWNoZToge1xuICAgICAgICAgICAgICAgIGxldmVsOiB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwsXG4gICAgICAgICAgICAgICAgdmlzaWJsZUluZGV4OiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKChrZXkuaW5jbHVkZXMoJ2xlZnQnKSB8fCBrZXkgPT09ICdob21lJykgJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA+IDApIHtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUuY29sdW1uID0gY3RybCB8fCBrZXkgPT09ICdob21lJyA/IDAgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygncmlnaHQnKSB8fCBrZXkgPT09ICdlbmQnKSAmJiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIDwgdGhpcy5sYXN0Q29sdW1uSW5kZXgpIHtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUuY29sdW1uID0gY3RybCB8fCBrZXkgPT09ICdlbmQnID8gdGhpcy5sYXN0Q29sdW1uSW5kZXggOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YWcgPT09ICdoZWFkZXJDZWxsJykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KG5ld0FjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUubWNoQ2FjaGUubGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG4gICAgICAgICAgICBuZXdBY3RpdmVOb2RlLm1jaENhY2hlLnZpc2libGVJbmRleCA9IGNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUoeyByb3c6IHRoaXMuYWN0aXZlTm9kZS5yb3csIGNvbHVtbjogbmV3QWN0aXZlTm9kZS5jb2x1bW4sIG1jaENhY2hlOiBuZXdBY3RpdmVOb2RlLm1jaENhY2hlIH0pO1xuICAgICAgICB0aGlzLnBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgIH1cblxuICAgIGdldCBsYXN0Q29sdW1uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMubWFwKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4KSk7XG4gICAgfVxuICAgIGdldCBkaXNwbGF5Q29udGFpbmVyV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuZ3JpZC5wYXJlbnRWaXJ0RGlyLmRjLmluc3RhbmNlLl92aWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgfVxuICAgIGdldCBkaXNwbGF5Q29udGFpbmVyU2Nyb2xsTGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmdyaWQuaGVhZGVyQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgZ2V0IGNvbnRhaW5lclRvcE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5kYy5pbnN0YW5jZS5fdmlld0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wLCAxMCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldENvbHVtblVucGlubmVkSW5kZXgodmlzaWJsZUNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucy5maW5kKChjb2wpID0+ICFjb2wuY29sdW1uR3JvdXAgJiYgY29sLnZpc2libGVJbmRleCA9PT0gdmlzaWJsZUNvbHVtbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waW5uZWRDb2x1bW5zLmxlbmd0aCA/IHRoaXMuZ3JpZC51bnBpbm5lZENvbHVtbnMuZmlsdGVyKChjKSA9PiAhYy5jb2x1bW5Hcm91cCkuaW5kZXhPZihjb2x1bW4pIDpcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5JbmRleDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9yT2ZEaXIoKTogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZvck9mRGlyID0gdGhpcy5ncmlkLmRhdGFSb3dMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLmdyaWQuZGF0YVJvd0xpc3QuZmlyc3QudmlydERpclJvdyA6IHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0Lmxlbmd0aCA/XG4gICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0LmZpcnN0LnZpcnREaXJSb3cgOiB0aGlzLmdyaWQuaGVhZGVyQ29udGFpbmVyO1xuICAgICAgICByZXR1cm4gZm9yT2ZEaXIgYXMgSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlQWx0KGtleTogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB0b2RvIFRPRE8gUk9XXG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgodGhpcy5hY3RpdmVOb2RlLnJvdykgYXMgYW55O1xuXG4gICAgICAgIGlmICghKHRoaXMuaXNUb2dnbGVLZXkoa2V5KSB8fCB0aGlzLmlzQWRkS2V5KGtleSkpIHx8ICFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FkZEtleShrZXkpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGdyaWQgbXVzdCBiZSBpbiByb3cgZWRpdCBtb2RlIHRvIHBlcmZvcm0gcm93IGFkZGluZyEnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSAmJiByb3cudHJlZVJvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyQWRkUm93TW9kZShyb3csIHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyQWRkUm93TW9kZShyb3csIGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXJvdy5leHBhbmRlZCAmJiBST1dfRVhQQU5EX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGlmIChyb3cucm93SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJvdy50b2dnbGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkuc2V0X3Jvd19leHBhbnNpb25fc3RhdGUocm93LnJvd0lELCB0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocm93LmV4cGFuZGVkICYmIFJPV19DT0xMQVBTRV9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBpZiAocm93LnJvd0lEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByb3cudG9nZ2xlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJvdy5yb3dJRCwgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVFZGl0aW5nKHNoaWZ0OiBib29sZWFuLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBuZXh0ID0gc2hpZnQgPyB0aGlzLmdyaWQuZ2V0UHJldmlvdXNDZWxsKHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIGNvbCA9PiBjb2wuZWRpdGFibGUpIDpcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5nZXROZXh0Q2VsbCh0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBjb2wgPT4gY29sLmVkaXRhYmxlKTtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSAmJiB0aGlzLmlzQWN0aXZlTm9kZShuZXh0LnJvd0luZGV4LCBuZXh0LnZpc2libGVDb2x1bW5JbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRFZGl0KHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCh0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSAmJiB0aGlzLmdyaWQucm93RWRpdFRhYnMubGVuZ3RoKSAmJlxuICAgICAgICAgICAgKHRoaXMuYWN0aXZlTm9kZS5yb3cgIT09IG5leHQucm93SW5kZXggfHwgdGhpcy5pc0FjdGl2ZU5vZGUobmV4dC5yb3dJbmRleCwgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXgpKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgaWYgKHNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmxhc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0VGFicy5maXJzdC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSAmJiAhdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHNoaWZ0ICYmIG5leHQucm93SW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5yb3cgJiYgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBuZXh0LnZpc2libGVDb2x1bW5JbmRleCA9IHRoaXMuZ3JpZC5sYXN0RWRpdGFibGVDb2x1bW5JbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNoaWZ0ICYmIG5leHQucm93SW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5yb3cgJiYgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBuZXh0LnZpc2libGVDb2x1bW5JbmRleCA9IHRoaXMuZ3JpZC5maXJzdEVkaXRhYmxlQ29sdW1uSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5leHQucm93SW5kZXggPSB0aGlzLmFjdGl2ZU5vZGUucm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUluQm9keShuZXh0LnJvd0luZGV4LCBuZXh0LnZpc2libGVDb2x1bW5JbmRleCwgKG9iaikgPT4ge1xuICAgICAgICAgICAgb2JqLnRhcmdldC5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiOiAoYXJnOiBhbnkpID0+IHZvaWQgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkUG9zaXRpb24ocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCkgfHwgdGhpcy5pc0FjdGl2ZU5vZGUocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGVUbyhyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBjYik7XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgZW1pdEtleURvd24odHlwZTogR3JpZEtleWRvd25UYXJnZXRUeXBlLCByb3dJbmRleCwgZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QudG9BcnJheSgpLmNvbmNhdCh0aGlzLmdyaWQucm93TGlzdC50b0FycmF5KCkpLmZpbmQociA9PiByLmluZGV4ID09PSByb3dJbmRleCk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXQgPSB0eXBlID09PSAnZ3JvdXBSb3cnID8gcm93IDpcbiAgICAgICAgICAgIHR5cGUgPT09ICdkYXRhQ2VsbCcgPyByb3cuY2VsbHM/LmZpbmQoYyA9PiBjLnZpc2libGVDb2x1bW5JbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbikgOlxuICAgICAgICAgICAgICAgIHJvdy5zdW1tYXJ5Q2VsbHM/LmZpbmQoYyA9PiBjLnZpc2libGVDb2x1bW5JbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IGtleWRvd25BcmdzID0geyB0YXJnZXRUeXBlOiB0eXBlLCBldmVudCwgY2FuY2VsOiBmYWxzZSwgdGFyZ2V0IH07XG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkS2V5ZG93bi5lbWl0KGtleWRvd25BcmdzKTtcbiAgICAgICAgaWYgKGtleWRvd25BcmdzLmNhbmNlbCAmJiB0eXBlID09PSAnZGF0YUNlbGwnKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uua2V5Ym9hcmRTdGF0ZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGtleWRvd25BcmdzLmNhbmNlbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0NvbHVtblBpbm5lZChjb2x1bW5JbmRleDogbnVtYmVyLCBmb3JPZkRpcjogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55Pik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsID0gZm9yT2ZEaXIuZ2V0U2Nyb2xsKCk7XG4gICAgICAgIHJldHVybiAoIWhvcml6b250YWxTY3JvbGwuY2xpZW50V2lkdGggfHwgdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KGNvbHVtbkluZGV4KT8ucGlubmVkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZmluZEZpcnN0RGF0YVJvd0luZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmluZEluZGV4KHJlYyA9PiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyZWMpICYmICF0aGlzLmdyaWQuaXNEZXRhaWxSZWNvcmQocmVjKSAmJiAhcmVjLnN1bW1hcmllcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRMYXN0RGF0YVJvd0luZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICgodGhpcy5ncmlkIGFzIGFueSkudG90YWxJdGVtQ291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5ncmlkIGFzIGFueSkudG90YWxJdGVtQ291bnQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhUm93KGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Um93RWxlbWVudEJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNEZXRhaWxzKSB7XG4gICAgICAgICAgICBjb25zdCBkZXRhaWwgPSB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBbZGV0YWlsPVwidHJ1ZVwiXVtkYXRhLXJvd2luZGV4PVwiJHtpbmRleH1cIl1gKTtcbiAgICAgICAgICAgIGlmIChkZXRhaWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGV0YWlsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93TGlzdC50b0FycmF5KCkuY29uY2F0KHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0LnRvQXJyYXkoKSkuZmluZChyID0+IHIuaW5kZXggPT09IGluZGV4KT8ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNWYWxpZFBvc2l0aW9uKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50ID8/IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIGlmIChyb3dJbmRleCA8IDAgfHwgY29sSW5kZXggPCAwIHx8IGxlbmd0aCAtIDEgPCByb3dJbmRleCB8fCB0aGlzLmxhc3RDb2x1bW5JbmRleCA8IGNvbEluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gIT09IGNvbEluZGV4ICYmICF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCwgdHJ1ZSkgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBwZXJmb3JtSGVhZGVyS2V5Q29tYmluYXRpb24oY29sdW1uLCBrZXksIHNoaWZ0LCBjdHJsLCBhbHQsIGV2ZW50KSB7XG4gICAgICAgIGxldCBkaXJlY3Rpb24gPSB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmZpbmQoZXhwciA9PiBleHByLmZpZWxkTmFtZSA9PT0gY29sdW1uLmZpZWxkKT8uZGlyO1xuICAgICAgICBpZiAoY3RybCAmJiBrZXkuaW5jbHVkZXMoJ3VwJykgJiYgY29sdW1uLnNvcnRhYmxlICYmICFjb2x1bW4uY29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gU29ydGluZ0RpcmVjdGlvbi5Bc2MgPyBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgOiBTb3J0aW5nRGlyZWN0aW9uLkFzYztcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zb3J0KHsgZmllbGROYW1lOiBjb2x1bW4uZmllbGQsIGRpcjogZGlyZWN0aW9uLCBpZ25vcmVDYXNlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RybCAmJiBrZXkuaW5jbHVkZXMoJ2Rvd24nKSAmJiBjb2x1bW4uc29ydGFibGUgJiYgIWNvbHVtbi5jb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgPyBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgOiBTb3J0aW5nRGlyZWN0aW9uLkRlc2M7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc29ydCh7IGZpZWxkTmFtZTogY29sdW1uLmZpZWxkLCBkaXI6IGRpcmVjdGlvbiwgaWdub3JlQ2FzZTogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoaWZ0ICYmIGFsdCAmJiB0aGlzLmlzVG9nZ2xlS2V5KGtleSkgJiYgIWNvbHVtbi5jb2x1bW5Hcm91cCAmJiBjb2x1bW4uZ3JvdXBhYmxlKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gPyBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgOiBTb3J0aW5nRGlyZWN0aW9uLkFzYztcbiAgICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3JpZ2h0JykpIHtcbiAgICAgICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuZ3JvdXBCeSh7IGZpZWxkTmFtZTogY29sdW1uLmZpZWxkLCBkaXI6IGRpcmVjdGlvbiwgaWdub3JlQ2FzZTogZmFsc2UgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICh0aGlzLmdyaWQgYXMgYW55KS5jbGVhckdyb3VwaW5nKGNvbHVtbi5maWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uID0ga2V5LmluY2x1ZGVzKCdyaWdodCcpICYmICh0aGlzLmdyaWQgYXMgYW55KS5oaWRlR3JvdXBlZENvbHVtbnMgJiZcbiAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZUluZGV4ID09PSB0aGlzLmxhc3RDb2x1bW5JbmRleCA/IHRoaXMubGFzdENvbHVtbkluZGV4IC0gMSA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW47XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsdCAmJiAoUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpIHx8IFJPV19DT0xMQVBTRV9LRVlTLmhhcyhrZXkpKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVNQ0hFeHBhbmRDb2xsYXBzZShrZXksIGNvbHVtbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFsnICcsICdzcGFjZWJhcicsICdzcGFjZSddLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29sdW1uU2VsZWN0aW9uKGNvbHVtbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbHQgJiYgKGtleSA9PT0gJ2wnIHx8IGtleSA9PT0gJ8KsJykgJiYgdGhpcy5ncmlkLmFsbG93QWR2YW5jZWRGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5vcGVuQWR2YW5jZWRGaWx0ZXJpbmdEaWFsb2coKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RybCAmJiBzaGlmdCAmJiBrZXkgPT09ICdsJyAmJiB0aGlzLmdyaWQuYWxsb3dGaWx0ZXJpbmcgJiYgIWNvbHVtbi5jb2x1bW5Hcm91cCAmJiBjb2x1bW4uZmlsdGVyYWJsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5maWx0ZXJNb2RlID09PSBGaWx0ZXJNb2RlLmV4Y2VsU3R5bGVGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJFbCA9IHRoaXMuZ3JpZC5oZWFkZXJHcm91cHMuZmluZChnID0+IGcuYWN0aXZlKS5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLnRvZ2dsZUZpbHRlckRyb3Bkb3duKGhlYWRlckVsLCBjb2x1bW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKGNvbHVtbi52aXNpYmxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcmVkQ29sdW1uID0gY29sdW1uO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlICBmaXJzdFZpc2libGVOb2RlKHJvd0luZGV4Pykge1xuICAgICAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMubGFzdEFjdGl2ZU5vZGUuY29sdW1uICE9PSB1bmRlZmluZWQgPyB0aGlzLmxhc3RBY3RpdmVOb2RlLmNvbHVtbiA6XG4gICAgICAgICAgICB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuc29ydCgoYzEsIGMyKSA9PiBjMS52aXNpYmxlSW5kZXggLSBjMi52aXNpYmxlSW5kZXgpXG4gICAgICAgICAgICAuZmluZChjID0+IHRoaXMuaXNDb2x1bW5GdWxseVZpc2libGUoYy52aXNpYmxlSW5kZXgpKT8udmlzaWJsZUluZGV4O1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuZmluZCgoY29sKSA9PiAhY29sLmNvbHVtbkxheW91dCAmJiBjb2wudmlzaWJsZUluZGV4ID09PSBjb2xJbmRleCk7XG4gICAgICAgIGNvbnN0IHJvd0luZCA9IHJvd0luZGV4ID8gcm93SW5kZXggOiB0aGlzLmdyaWQucm93TGlzdC5maW5kKHIgPT4gIXRoaXMuc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHIuaW5kZXgsIGNvbEluZGV4KSk/LmluZGV4O1xuICAgICAgICBjb25zdCBub2RlID0geyByb3c6IHJvd0luZCA/PyAwLFxuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4/LnZpc2libGVJbmRleCA/PyAwLCBsZXZlbDogY29sdW1uPy5sZXZlbCA/PyAwLFxuICAgICAgICAgICAgbWNoQ2FjaGU6IGNvbHVtbiA/IHtsZXZlbDogY29sdW1uLmxldmVsLCB2aXNpYmxlSW5kZXg6IGNvbHVtbi52aXNpYmxlSW5kZXh9IDoge30gYXMgQ29sdW1uR3JvdXBzQ2FjaGUsXG4gICAgICAgICAgICBsYXlvdXQ6IGNvbHVtbiAmJiBjb2x1bW4uY29sdW1uTGF5b3V0Q2hpbGQgPyB7IHJvd1N0YXJ0OiBjb2x1bW4ucm93U3RhcnQsIGNvbFN0YXJ0OiBjb2x1bW4uY29sU3RhcnQsXG4gICAgICAgICAgICAgICAgcm93RW5kOiBjb2x1bW4ucm93RW5kLCBjb2xFbmQ6IGNvbHVtbi5jb2xFbmQsIGNvbHVtblZpc2libGVJbmRleDogY29sdW1uLnZpc2libGVJbmRleH0gOiBudWxsIH07XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTUNIZWFkZXJOYXYoa2V5OiBzdHJpbmcsIGN0cmw6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgbmV3SGVhZGVyTm9kZTogQ29sdW1uR3JvdXBzQ2FjaGUgPSB7XG4gICAgICAgICAgICB2aXNpYmxlSW5kZXg6IHRoaXMuYWN0aXZlTm9kZS5tY2hDYWNoZS52aXNpYmxlSW5kZXgsXG4gICAgICAgICAgICBsZXZlbDogdGhpcy5hY3RpdmVOb2RlLm1jaENhY2hlLmxldmVsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjdGl2ZUNvbCA9IHRoaXMuY3VycmVudEFjdGl2ZUNvbHVtbjtcbiAgICAgICAgY29uc3QgbGFzdEdyb3VwSW5kZXggPSBNYXRoLm1heCguLi4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLlxuICAgICAgICAgICAgZmlsdGVyKGMgPT4gYy5sZXZlbCA8PSB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwpLm1hcChjb2wgPT4gY29sLnZpc2libGVJbmRleCkpO1xuICAgICAgICBsZXQgbmV4dENvbCA9IGFjdGl2ZUNvbDtcbiAgICAgICAgaWYgKChrZXkuaW5jbHVkZXMoJ2xlZnQnKSB8fCBrZXkgPT09ICdob21lJykgJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY3RybCB8fCBrZXkgPT09ICdob21lJyA/IDAgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIC0gMTtcbiAgICAgICAgICAgIG5leHRDb2wgPSB0aGlzLmdldE5leHRDb2x1bW5NQ0goaW5kZXgpO1xuICAgICAgICAgICAgbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXggPSBuZXh0Q29sLnZpc2libGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygncmlnaHQnKSB8fCBrZXkgPT09ICdlbmQnKSAmJiBhY3RpdmVDb2wudmlzaWJsZUluZGV4IDwgbGFzdEdyb3VwSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWSW5kZXggPSBhY3RpdmVDb2wuY2hpbGRyZW4gPyBNYXRoLm1heCguLi5hY3RpdmVDb2wuYWxsQ2hpbGRyZW4ubWFwKGMgPT4gYy52aXNpYmxlSW5kZXgpKSArIDEgOlxuICAgICAgICAgICAgICAgIGFjdGl2ZUNvbC52aXNpYmxlSW5kZXggKyAxO1xuICAgICAgICAgICAgbmV4dENvbCA9IGN0cmwgfHwga2V5ID09PSAnZW5kJyA/IHRoaXMuZ2V0TmV4dENvbHVtbk1DSCh0aGlzLmxhc3RDb2x1bW5JbmRleCkgOiB0aGlzLmdldE5leHRDb2x1bW5NQ0gobmV4dFZJbmRleCk7XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleCA9IG5leHRDb2wudmlzaWJsZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3RybCAmJiBrZXkuaW5jbHVkZXMoJ3VwJykgJiYgdGhpcy5hY3RpdmVOb2RlLmxldmVsID4gMCkge1xuICAgICAgICAgICAgbmV4dENvbCA9IGFjdGl2ZUNvbC5wYXJlbnQ7XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLmxldmVsID0gbmV4dENvbC5sZXZlbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0cmwgJiYga2V5LmluY2x1ZGVzKCdkb3duJykgJiYgYWN0aXZlQ29sLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBuZXh0Q29sID0gYWN0aXZlQ29sLmNoaWxkcmVuLmZpbmQoYyA9PiBjLnZpc2libGVJbmRleCA9PT0gbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXgpIHx8XG4gICAgICAgICAgICAgICAgYWN0aXZlQ29sLmNoaWxkcmVuLnRvQXJyYXkoKS5zb3J0KChhLCBiKSA9PiBiLnZpc2libGVJbmRleCAtIGEudmlzaWJsZUluZGV4KVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4IDwgbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXgpWzBdO1xuICAgICAgICAgICAgbmV3SGVhZGVyTm9kZS5sZXZlbCA9IG5leHRDb2wubGV2ZWw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUoe1xuICAgICAgICAgICAgcm93OiB0aGlzLmFjdGl2ZU5vZGUucm93LFxuICAgICAgICAgICAgY29sdW1uOiBuZXh0Q29sLnZpc2libGVJbmRleCxcbiAgICAgICAgICAgIGxldmVsOiBuZXh0Q29sLmxldmVsLFxuICAgICAgICAgICAgbWNoQ2FjaGU6IG5ld0hlYWRlck5vZGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwobmV4dENvbC52aXNpYmxlSW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTUNIRXhwYW5kQ29sbGFwc2Uoa2V5LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKCFjb2x1bW4uY2hpbGRyZW4gfHwgIWNvbHVtbi5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sdW1uLmV4cGFuZGVkICYmIFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgY29sdW1uLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZXhwYW5kZWQgJiYgUk9XX0NPTExBUFNFX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDb2x1bW5TZWxlY3Rpb24oY29sdW1uLCBldmVudCkge1xuICAgICAgICBpZiAoIWNvbHVtbi5zZWxlY3RhYmxlIHx8IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm5vbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGVhclNlbGVjdGlvbiA9IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLnNpbmdsZTtcbiAgICAgICAgY29uc3QgY29sdW1uc1RvU2VsZWN0ID0gIWNvbHVtbi5jaGlsZHJlbiA/IFtjb2x1bW4uZmllbGRdIDpcbiAgICAgICAgICAgIGNvbHVtbi5hbGxDaGlsZHJlbi5maWx0ZXIoYyA9PiAhYy5oaWRkZW4gJiYgYy5zZWxlY3RhYmxlICYmICFjLmNvbHVtbkdyb3VwKS5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RDb2x1bW5zKGNvbHVtbnNUb1NlbGVjdCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q29sdW1ucyhjb2x1bW5zVG9TZWxlY3QsIGNsZWFyU2VsZWN0aW9uLCBmYWxzZSwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROZXh0Q29sdW1uTUNIKHZpc2libGVJbmRleCkge1xuICAgICAgICBsZXQgY29sID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KHZpc2libGVJbmRleCk7XG4gICAgICAgIGxldCBwYXJlbnQgPSBjb2wucGFyZW50O1xuICAgICAgICB3aGlsZSAocGFyZW50ICYmIGNvbC5sZXZlbCA+IHRoaXMuYWN0aXZlTm9kZS5tY2hDYWNoZS5sZXZlbCkge1xuICAgICAgICAgICAgY29sID0gY29sLnBhcmVudDtcbiAgICAgICAgICAgIHBhcmVudCA9IGNvbC5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBjdXJyZW50QWN0aXZlQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmZpbmQoYyA9PiBjLnZpc2libGVJbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAmJiBjLmxldmVsID09PSB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3RpdmVOb2RlKHJJbmRleDogbnVtYmVyLCBjSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVOb2RlID8gdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gckluZGV4ICYmIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPT09IGNJbmRleCA6IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNUb2dnbGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFJPV19DT0xMQVBTRV9LRVlTLmhhcyhrZXkpIHx8IFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWRkS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBST1dfQUREX0tFWVMuaGFzKGtleSk7XG4gICAgfVxufVxuIl19
734
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUNILGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFDWixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUF5QixpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWdCbkYsY0FBYztBQUVkLE1BQU0sT0FBTyx3QkFBd0I7SUFjakMsWUFBc0IsUUFBc0I7UUFBdEIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQVpyQyxnQkFBVyxHQUFnQixFQUFpQixDQUFDO1FBQzdDLG1CQUFjLEdBQWdCLEVBQWlCLENBQUM7UUFDN0Msc0JBQWlCLEdBQUcsS0FBSyxDQUFDO0lBVVksQ0FBQztJQVJqRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLFVBQVUsQ0FBQyxLQUFrQjtRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBSUQsZ0JBQWdCLENBQUMsS0FBb0I7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMs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QUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDOUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDbkcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsT0FBTztTQUNWO1FBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQ3JFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRTtZQUN0RyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlD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VyxDQUFDLEdBQVc7UUFDM0IsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQVc7UUFDeEIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OztZQXZ2QkosVUFBVTs7O1lBdEJQLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneEZvck9mRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9mb3Itb2YvZm9yX29mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgTkFWSUdBVElPTl9LRVlTLFxuICAgIFJPV19DT0xMQVBTRV9LRVlTLFxuICAgIFJPV19FWFBBTkRfS0VZUyxcbiAgICBTVVBQT1JURURfS0VZUyxcbiAgICBIT1JJWk9OVEFMX05BVl9LRVlTLFxuICAgIEhFQURFUl9LRVlTLFxuICAgIFJPV19BRERfS0VZUyxcbiAgICBQbGF0Zm9ybVV0aWxcbn0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJTXVsdGlSb3dMYXlvdXROb2RlIH0gZnJvbSAnLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZEtleWRvd25UYXJnZXRUeXBlLCBHcmlkU2VsZWN0aW9uTW9kZSwgRmlsdGVyTW9kZSB9IGZyb20gJy4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQWN0aXZlTm9kZUNoYW5nZUV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC9ncm91cGJ5LXJvdy5jb21wb25lbnQnO1xuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5Hcm91cHNDYWNoZSB7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICB2aXNpYmxlSW5kZXg6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGl2ZU5vZGUge1xuICAgIGdyaWRJRD86IHN0cmluZztcbiAgICByb3c6IG51bWJlcjtcbiAgICBjb2x1bW4/OiBudW1iZXI7XG4gICAgbGV2ZWw/OiBudW1iZXI7XG4gICAgbWNoQ2FjaGU/OiBDb2x1bW5Hcm91cHNDYWNoZTtcbiAgICBsYXlvdXQ/OiBJTXVsdGlSb3dMYXlvdXROb2RlO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWROYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU7XG4gICAgcHVibGljIF9hY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSA9IHt9IGFzIElBY3RpdmVOb2RlO1xuICAgIHB1YmxpYyBsYXN0QWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUgPSB7fSBhcyBJQWN0aXZlTm9kZTtcbiAgICBwcm90ZWN0ZWQgcGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBhY3RpdmVOb2RlKHZhbHVlOiBJQWN0aXZlTm9kZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVOb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHsgfVxuXG4gICAgaGFuZGxlTmF2aWdhdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKE5BVklHQVRJT05fS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsICYmIE5BVklHQVRJT05fS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5yZXBlYXQgJiYgU1VQUE9SVEVEX0tFWVMuaGFzKGtleSkgfHwgKGtleSA9PT0gJ3RhYicgJiYgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGwpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5yZXBlYXQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KSwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzcGF0Y2hFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgIShTVVBQT1JURURfS0VZUy5oYXMoa2V5KSB8fCAoa2V5ID09PSAndGFiJyAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCkpICYmXG4gICAgICAgICAgICAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkICYmICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG4gICAgICAgIGNvbnN0IGN0cmwgPSBldmVudC5jdHJsS2V5O1xuICAgICAgICBpZiAoTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpICYmIHRoaXMucGVuZGluZ05hdmlnYXRpb24pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5pc0RhdGFSb3codGhpcy5hY3RpdmVOb2RlLnJvdykgPyAnZGF0YUNlbGwnIDpcbiAgICAgICAgICAgIHRoaXMuaXNEYXRhUm93KHRoaXMuYWN0aXZlTm9kZS5yb3csIHRydWUpID8gJ3N1bW1hcnlDZWxsJyA6ICdncm91cFJvdyc7XG4gICAgICAgIGlmICh0aGlzLmVtaXRLZXlEb3duKHR5cGUsIHRoaXMuYWN0aXZlTm9kZS5yb3csIGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWx0KGtleSwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChbJyAnLCAnc3BhY2ViYXInLCAnc3BhY2UnXS5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5rZXlib2FyZFN0YXRlT25LZXlkb3duKHRoaXMuYWN0aXZlTm9kZSwgc2hpZnQsIHNoaWZ0ICYmIGtleSA9PT0gJ3RhYicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXROZXh0UG9zaXRpb24odGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwga2V5LCBzaGlmdCwgY3RybCwgZXZlbnQpO1xuICAgICAgICBpZiAoTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUluQm9keShwb3NpdGlvbi5yb3dJbmRleCwgcG9zaXRpb24uY29sSW5kZXgsIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICBvYmoudGFyZ2V0LmFjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHN1bW1hcnlOYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsTmF2KGV2ZW50LCBldmVudC5rZXkudG9Mb3dlckNhc2UoKSwgdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCwgJ3N1bW1hcnlDZWxsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoZWFkZXJOYXZpZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIUhFQURFUl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBjdHJsID0gZXZlbnQuY3RybEtleTtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgYWx0ID0gZXZlbnQuYWx0S2V5O1xuXG4gICAgICAgIHRoaXMucGVyZm9ybUhlYWRlcktleUNvbWJpbmF0aW9uKHRoaXMuY3VycmVudEFjdGl2ZUNvbHVtbiwga2V5LCBzaGlmdCwgY3RybCwgYWx0LCBldmVudCk7XG4gICAgICAgIGlmIChzaGlmdCB8fCBhbHQgfHwgKGN0cmwgJiYgKGtleS5pbmNsdWRlcygnZG93bicpIHx8IGtleS5pbmNsdWRlcygnZG93bicpKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc0NvbHVtbkdyb3Vwcykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVNQ0hlYWRlck5hdihrZXksIGN0cmwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsTmF2KGV2ZW50LCBrZXksIC0xLCAnaGVhZGVyQ2VsbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9jdXNUYm9keShldmVudCkge1xuICAgICAgICBjb25zdCBncmlkUm93cyA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci50b3RhbEl0ZW1Db3VudCA/PyB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoO1xuICAgICAgICBpZiAoZ3JpZFJvd3MgPCAxKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlIHx8ICFPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZU5vZGUpLmxlbmd0aCB8fCB0aGlzLmFjdGl2ZU5vZGUucm93IDwgMCB8fCB0aGlzLmFjdGl2ZU5vZGUucm93ID4gZ3JpZFJvd3MgLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNMYXN0QWN0aXZlTm9kZSA9IE9iamVjdC5rZXlzKHRoaXMubGFzdEFjdGl2ZU5vZGUpLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZENsZWFyU2VsZWN0aW9uID0gaGFzTGFzdEFjdGl2ZU5vZGUgJiYgKHRoaXMubGFzdEFjdGl2ZU5vZGUucm93IDwgMCB8fCB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA+IGdyaWRSb3dzIC0gMSk7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cgPj0gMCAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA8IGdyaWRSb3dzID9cbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VmlzaWJsZU5vZGUodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cpIDogdGhpcy5maXJzdFZpc2libGVOb2RlKCkpO1xuICAgICAgICAgICAgaWYgKHNob3VsZENsZWFyU2VsZWN0aW9uIHx8ICh0aGlzLmdyaWQuY2VsbFNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNsZWFyQ2VsbFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnRhcmdldD8uYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiB0aGlzLmFjdGl2ZU5vZGUucm93LCByb3dFbmQ6IHRoaXMuYWN0aXZlTm9kZS5yb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblN0YXJ0OiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBjb2x1bW5FbmQ6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW5cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3RSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvY3VzRmlyc3RDZWxsKGhlYWRlciA9IHRydWUpIHtcbiAgICAgICAgaWYgKChoZWFkZXIgfHwgdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCkgJiYgdGhpcy5hY3RpdmVOb2RlICYmXG4gICAgICAgICAgICAodGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gLTEgfHwgdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICghaGVhZGVyICYmICF0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbEludG9WaWV3ID0gdGhpcy5sYXN0QWN0aXZlTm9kZSAmJiAoaGVhZGVyICYmIHRoaXMubGFzdEFjdGl2ZU5vZGUucm93ICE9PSAtMSkgfHxcbiAgICAgICAgICAgICghaGVhZGVyICYmIHRoaXMubGFzdEFjdGl2ZU5vZGUucm93ICE9PSB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVOb2RlKHRoaXMuZmlyc3RWaXNpYmxlTm9kZShoZWFkZXIgPyAtMSA6IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGgpKTtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbEludG9WaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29sdW1uRnVsbHlWaXNpYmxlKGNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGNvbHVtbkluZGV4IDwgMCB8fCB0aGlzLmlzQ29sdW1uUGlubmVkKGNvbHVtbkluZGV4LCB0aGlzLmZvck9mRGlyKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q29sdW1uVW5waW5uZWRJbmRleChjb2x1bW5JbmRleCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5mb3JPZkRpcigpLmdldENvbHVtblNjcm9sbExlZnQoaW5kZXggKyAxKSAtIHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheUNvbnRhaW5lcldpZHRoIDwgd2lkdGggJiYgdGhpcy5kaXNwbGF5Q29udGFpbmVyU2Nyb2xsTGVmdCA9PT0gdGhpcy5mb3JPZkRpcigpLmdldENvbHVtblNjcm9sbExlZnQoaW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5Q29udGFpbmVyV2lkdGggPj0gdGhpcy5mb3JPZkRpcigpLmdldENvbHVtblNjcm9sbExlZnQoaW5kZXggKyAxKSAtIHRoaXMuZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQgPD0gdGhpcy5mb3JPZkRpcigpLmdldENvbHVtblNjcm9sbExlZnQoaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRQZXJmb3JtSG9yaXpvbnRhbFNjcm9sbCh2aXNpYmxlQ29sSW5kZXg6IG51bWJlciwgcm93SW5kZXggPSAtMSkge1xuICAgICAgICBpZiAodmlzaWJsZUNvbEluZGV4IDwgMCB8fCB2aXNpYmxlQ29sSW5kZXggPiB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dJbmRleCA8IDAgfHwgcm93SW5kZXggPiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzQ29sdW1uRnVsbHlWaXNpYmxlKHZpc2libGVDb2xJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4XTtcbiAgICAgICAgcmV0dXJuIHJvdy5leHByZXNzaW9uIHx8IHJvdy5kZXRhaWxzRGF0YSA/IGZhbHNlIDogIXRoaXMuaXNDb2x1bW5GdWxseVZpc2libGUodmlzaWJsZUNvbEluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHRhcmdldFJvd0luZGV4OiBudW1iZXIsIHZpc2libGVDb2xJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleCh0YXJnZXRSb3dJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3JvbGxSb3dJbmRleCA9IHRoaXMuZ3JpZC5oYXNQaW5uZWRSZWNvcmRzICYmIHRoaXMuZ3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCA/XG4gICAgICAgICAgICB0YXJnZXRSb3dJbmRleCAtIHRoaXMuZ3JpZC5waW5uZWREYXRhVmlldy5sZW5ndGggOiB0YXJnZXRSb3dJbmRleDtcbiAgICAgICAgY29uc3QgdGFyZ2V0Um93ID0gdGhpcy5nZXRSb3dFbGVtZW50QnlJbmRleCh0YXJnZXRSb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTaXplQXQoc2Nyb2xsUm93SW5kZXgpO1xuICAgICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmdyaWQuY2FsY0hlaWdodCA/IE1hdGguY2VpbCh0aGlzLmdyaWQuY2FsY0hlaWdodCkgOiAwO1xuICAgICAgICBjb25zdCBlbmRUb3BPZmZzZXQgPSB0YXJnZXRSb3cgPyB0YXJnZXRSb3cub2Zmc2V0VG9wICsgcm93SGVpZ2h0ICsgdGhpcy5jb250YWluZXJUb3BPZmZzZXQgOiBjb250YWluZXJIZWlnaHQgKyByb3dIZWlnaHQ7XG4gICAgICAgIC8vIHRoaXMgaXMgd29ya2Fyb3VuZDogZW5kVG9wT2Zmc2V0IC0gY29udGFpbmVySGVpZ2h0ID4gNSBhbmQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGg6IGNvbnRhaW5lckhlaWdodCA8IGVuZFRvcE9mZnNldFxuICAgICAgICAvLyB3aGVuIHRoZSBwYWdlIGlzIHpvb21lZCB0aGUgZ3JpZCBkb2VzIG5vdCBzY3JvbGwgdGhlIHJvdyBjb21wbGV0ZWx5IGluIHRoZSB2aWV3XG4gICAgICAgIHJldHVybiAhdGFyZ2V0Um93IHx8IHRhcmdldFJvdy5vZmZzZXRUb3AgPCBNYXRoLmFicyh0aGlzLmNvbnRhaW5lclRvcE9mZnNldClcbiAgICAgICAgICAgIHx8IGNvbnRhaW5lckhlaWdodCAmJiBlbmRUb3BPZmZzZXQgLSBjb250YWluZXJIZWlnaHQgPiA1O1xuICAgIH1cblxuICAgIHB1YmxpYyBwZXJmb3JtVmVydGljYWxTY3JvbGxUb0NlbGwocm93SW5kZXg6IG51bWJlciwgdmlzaWJsZUNvbEluZGV4ID0gLTEsIGNiPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIC8vIE9ubHkgZm9yIHRvcCBwaW5uaW5nIHdlIG5lZWQgdG8gc3VidHJhY3QgcGlubmVkIGNvdW50IGJlY2F1c2UgdmlydHVhbGl6YXRpb24gaW5kZXhpbmcgZG9lc24ndCBjb3VudCBwaW5uZWQgcm93cy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsUm93SW5kZXggPSB0aGlzLmdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiB0aGlzLmdyaWQuaXNSb3dQaW5uaW5nVG9Ub3AgP1xuICAgICAgICAgICAgcm93SW5kZXggLSB0aGlzLmdyaWQucGlubmVkRGF0YVZpZXcubGVuZ3RoIDogcm93SW5kZXg7XG4gICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxUbyhzY3JvbGxSb3dJbmRleCk7XG4gICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5jaHVua0xvYWRcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBwZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh2aXNpYmxlQ29sdW1uSW5kZXg6IG51bWJlciwgY2I/OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93TGlzdCA8IDEgJiYgdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QubGVuZ3RoIDwgMSAmJiB0aGlzLmdyaWQuaGFzQ29sdW1uR3JvdXBzKSB7XG4gICAgICAgICAgICBsZXQgY29sdW1uID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KHZpc2libGVDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICB3aGlsZSAoY29sdW1uLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGNvbHVtbi5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uSW5kZXggPSB0aGlzLmZvck9mRGlyKCkuaWd4Rm9yT2YuaW5kZXhPZihjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRQZXJmb3JtSG9yaXpvbnRhbFNjcm9sbCh2aXNpYmxlQ29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JpZC5wYXJlbnRWaXJ0RGlyLmNodW5rTG9hZFxuICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JPZkRpcigpLnNjcm9sbFRvKHRoaXMuZ2V0Q29sdW1uVW5waW5uZWRJbmRleCh2aXNpYmxlQ29sdW1uSW5kZXgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNEYXRhUm93KHJvd0luZGV4OiBudW1iZXIsIGluY2x1ZGVTdW1tYXJ5ID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGN1clJvdzogYW55O1xuXG4gICAgICAgIGlmIChyb3dJbmRleCA8IDAgfHwgcm93SW5kZXggPiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY3VyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4IC0gdGhpcy5ncmlkLnZpcnR1YWxpemF0aW9uU3RhdGUuc3RhcnRJbmRleF07XG4gICAgICAgICAgICBpZiAoIWN1clJvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1clJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1clJvdyAmJiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChjdXJSb3cpICYmICF0aGlzLmdyaWQuaXNEZXRhaWxSZWNvcmQoY3VyUm93KVxuICAgICAgICAgICAgJiYgIWN1clJvdy5jaGlsZEdyaWRzRGF0YSAmJiAoaW5jbHVkZVN1bW1hcnkgfHwgIWN1clJvdy5zdW1tYXJpZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0dyb3VwUm93KHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCB8fCByb3dJbmRleCA+IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4XTtcbiAgICAgICAgcmV0dXJuIGN1clJvdyAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1clJvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFjdGl2ZU5vZGUoYWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlTm9kZUNoYW5nZWQoYWN0aXZlTm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSBhY3RpdmVOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmFjdGl2ZU5vZGUsIGFjdGl2ZU5vZGUpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbYWN0aXZlTm9kZS5yb3ddO1xuICAgICAgICBjb25zdCB0eXBlOiBHcmlkS2V5ZG93blRhcmdldFR5cGUgPSBhY3RpdmVOb2RlLnJvdyA8IDAgPyAnaGVhZGVyQ2VsbCcgOlxuICAgICAgICAgICAgdGhpcy5pc0RhdGFSb3coYWN0aXZlTm9kZS5yb3cpID8gJ2RhdGFDZWxsJyA6XG4gICAgICAgICAgICAgICAgY3VyclJvdyAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1cnJSb3cpID8gJ2dyb3VwUm93JyA6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSb3cgJiYgdGhpcy5ncmlkLmlzRGV0YWlsUmVjb3JkKGN1cnJSb3cpID8gJ21hc3RlckRldGFpbFJvdycgOiAnc3VtbWFyeUNlbGwnO1xuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElBY3RpdmVOb2RlQ2hhbmdlRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93OiB0aGlzLmFjdGl2ZU5vZGUucm93LFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLFxuICAgICAgICAgICAgbGV2ZWw6IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCxcbiAgICAgICAgICAgIHRhZzogdHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZ3JpZC5hY3RpdmVOb2RlQ2hhbmdlLmVtaXQoYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlTm9kZUNoYW5nZWQoYWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUpIHtcbiAgICAgICAgbGV0IGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjaGVja0lubmVyUHJvcCA9IChhY2l2ZU5vZGU6IENvbHVtbkdyb3Vwc0NhY2hlIHwgSU11bHRpUm93TGF5b3V0Tm9kZSwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFhY2l2ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhY2l2ZU5vZGUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZU5vZGVbcHJvcF1bcHJvcE5hbWVdICE9PSBhY2l2ZU5vZGVbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFjdGl2ZU5vZGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIHByb3BzKSB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmFjdGl2ZU5vZGVbcHJvcE5hbWVdICYmIHR5cGVvZiB0aGlzLmFjdGl2ZU5vZGVbcHJvcE5hbWVdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNoZWNrSW5uZXJQcm9wKGFjdGl2ZU5vZGVbcHJvcE5hbWVdLCBwcm9wTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlTm9kZVtwcm9wTmFtZV0gIT09IGFjdGl2ZU5vZGVbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc0NoYW5nZWQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE5leHRQb3NpdGlvbihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBrZXk6IHN0cmluZywgc2hpZnQ6IGJvb2xlYW4sIGN0cmw6IGJvb2xlYW4sIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0RhdGFSb3cocm93SW5kZXgsIHRydWUpICYmIChrZXkuaW5kZXhPZignZG93bicpIDwgMCB8fCBrZXkuaW5kZXhPZigndXAnKSA8IDApICYmIGN0cmwpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJvd0luZGV4LCBjb2xJbmRleCB9O1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdwYWdlZG93bic6XG4gICAgICAgICAgICBjYXNlICdwYWdldXAnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsUHJldlBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdENlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuY2h1bmtMb2FkXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRpdENlbGwgJiYgdGhpcy5ncmlkLnJvd0xpc3QubWFwKHIgPT4gci5pbmRleCkuaW5kZXhPZihlZGl0Q2VsbC5yb3dJbmRleCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFZGl0aW5nKHNoaWZ0LCBldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZExhc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3c7XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSB0aGlzLmxhc3RDb2x1bW5JbmRleDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZEZpcnN0RGF0YVJvd0luZGV4KCkgOiB0aGlzLmFjdGl2ZU5vZGUucm93O1xuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93bGVmdCc6XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IGN0cmwgPyAwIDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd3JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IGN0cmwgPyB0aGlzLmxhc3RDb2x1bW5JbmRleCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gKyAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgICAgICAgaWYgKGN0cmwgJiYgIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSB8fCAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA6IDA7XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kRmlyc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3cgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAgICAgICAgIGlmICgoY3RybCAmJiAhdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB8fCAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA6IDA7XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kTGFzdERhdGFSb3dJbmRleCgpIDogdGhpcy5hY3RpdmVOb2RlLnJvdyArIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgICBjYXNlICdmMic6XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9jZWxsX2J5X3Zpc2libGVfaW5kZXgodGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkgfHwgIWNlbGwuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgICBjYXNlICdlc2MnOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuaXNJbkNvbXBvc2l0aW9uTW9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSB8fCB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kRWRpdChmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0VkZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICBjYXNlICdzcGFjZWJhcic6XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLmFjdGl2ZU5vZGUucm93KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmlzUm93U2VsZWN0YWJsZSAmJiByb3dPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvd09iai5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KHJvd09iai5yb3dJRCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dCeUlkKHJvd09iai5yb3dJRCwgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0dyb3VwUm93KHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKChyb3dPYmogYXMgYW55KSBhcyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCkub25Hcm91cFNlbGVjdG9yQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcm93SW5kZXgsIGNvbEluZGV4IH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhvcml6b250YWxOYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGtleTogc3RyaW5nLCByb3dJbmRleDogbnVtYmVyLCB0YWc6IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSkge1xuICAgICAgICBjb25zdCBjdHJsID0gZXZlbnQuY3RybEtleTtcbiAgICAgICAgaWYgKCFIT1JJWk9OVEFMX05BVl9LRVlTLmhhcyhldmVudC5rZXkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmFjdGl2ZU5vZGUucm93ID0gcm93SW5kZXg7XG4gICAgICAgIGlmIChyb3dJbmRleCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVtaXRLZXlEb3duKCdzdW1tYXJ5Q2VsbCcsIHRoaXMuYWN0aXZlTm9kZS5yb3csIGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld0FjdGl2ZU5vZGUgPSB7XG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sXG4gICAgICAgICAgICBtY2hDYWNoZToge1xuICAgICAgICAgICAgICAgIGxldmVsOiB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwsXG4gICAgICAgICAgICAgICAgdmlzaWJsZUluZGV4OiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKChrZXkuaW5jbHVkZXMoJ2xlZnQnKSB8fCBrZXkgPT09ICdob21lJykgJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA+IDApIHtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUuY29sdW1uID0gY3RybCB8fCBrZXkgPT09ICdob21lJyA/IDAgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygncmlnaHQnKSB8fCBrZXkgPT09ICdlbmQnKSAmJiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIDwgdGhpcy5sYXN0Q29sdW1uSW5kZXgpIHtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUuY29sdW1uID0gY3RybCB8fCBrZXkgPT09ICdlbmQnID8gdGhpcy5sYXN0Q29sdW1uSW5kZXggOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YWcgPT09ICdoZWFkZXJDZWxsJykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KG5ld0FjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUubWNoQ2FjaGUubGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG4gICAgICAgICAgICBuZXdBY3RpdmVOb2RlLm1jaENhY2hlLnZpc2libGVJbmRleCA9IGNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUoeyByb3c6IHRoaXMuYWN0aXZlTm9kZS5yb3csIGNvbHVtbjogbmV3QWN0aXZlTm9kZS5jb2x1bW4sIG1jaENhY2hlOiBuZXdBY3RpdmVOb2RlLm1jaENhY2hlIH0pO1xuICAgICAgICB0aGlzLnBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgIH1cblxuICAgIGdldCBsYXN0Q29sdW1uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMubWFwKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4KSk7XG4gICAgfVxuICAgIGdldCBkaXNwbGF5Q29udGFpbmVyV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuZ3JpZC5wYXJlbnRWaXJ0RGlyLmRjLmluc3RhbmNlLl92aWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgfVxuICAgIGdldCBkaXNwbGF5Q29udGFpbmVyU2Nyb2xsTGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmdyaWQuaGVhZGVyQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgZ2V0IGNvbnRhaW5lclRvcE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5kYy5pbnN0YW5jZS5fdmlld0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wLCAxMCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldENvbHVtblVucGlubmVkSW5kZXgodmlzaWJsZUNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucy5maW5kKChjb2wpID0+ICFjb2wuY29sdW1uR3JvdXAgJiYgY29sLnZpc2libGVJbmRleCA9PT0gdmlzaWJsZUNvbHVtbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waW5uZWRDb2x1bW5zLmxlbmd0aCA/IHRoaXMuZ3JpZC51bnBpbm5lZENvbHVtbnMuZmlsdGVyKChjKSA9PiAhYy5jb2x1bW5Hcm91cCkuaW5kZXhPZihjb2x1bW4pIDpcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5JbmRleDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9yT2ZEaXIoKTogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZvck9mRGlyID0gdGhpcy5ncmlkLmRhdGFSb3dMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLmdyaWQuZGF0YVJvd0xpc3QuZmlyc3QudmlydERpclJvdyA6IHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0Lmxlbmd0aCA/XG4gICAgICAgICAgICB0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC5maXJzdC52aXJ0RGlyUm93IDogdGhpcy5ncmlkLmhlYWRlckNvbnRhaW5lcjtcbiAgICAgICAgcmV0dXJuIGZvck9mRGlyIGFzIElneEZvck9mRGlyZWN0aXZlPGFueT47XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUFsdChrZXk6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgLy8gdG9kbyBUT0RPIFJPV1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2J5X2luZGV4KHRoaXMuYWN0aXZlTm9kZS5yb3cpIGFzIGFueTtcblxuICAgICAgICBpZiAoISh0aGlzLmlzVG9nZ2xlS2V5KGtleSkgfHwgdGhpcy5pc0FkZEtleShrZXkpKSB8fCAhcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBZGRLZXkoa2V5KSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgYmUgaW4gcm93IGVkaXQgbW9kZSB0byBwZXJmb3JtIHJvdyBhZGRpbmchJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgcm93LnRyZWVSb3cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbnRlckFkZFJvd01vZGUocm93LCB0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbnRlckFkZFJvd01vZGUocm93LCBmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFyb3cuZXhwYW5kZWQgJiYgUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBpZiAocm93LnJvd0lEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByb3cudG9nZ2xlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJvdy5yb3dJRCwgdHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJvdy5leHBhbmRlZCAmJiBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgaWYgKHJvdy5yb3dJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcm93LnRvZ2dsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyb3cucm93SUQsIGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRWRpdGluZyhzaGlmdDogYm9vbGVhbiwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHNoaWZ0ID8gdGhpcy5ncmlkLmdldFByZXZpb3VzQ2VsbCh0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBjb2wgPT4gY29sLmVkaXRhYmxlKSA6XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ2V0TmV4dENlbGwodGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgY29sID0+IGNvbC5lZGl0YWJsZSk7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUgJiYgdGhpcy5pc0FjdGl2ZU5vZGUobmV4dC5yb3dJbmRleCwgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kRWRpdCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICgodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUgJiYgdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmxlbmd0aCkgJiZcbiAgICAgICAgICAgICh0aGlzLmFjdGl2ZU5vZGUucm93ICE9PSBuZXh0LnJvd0luZGV4IHx8IHRoaXMuaXNBY3RpdmVOb2RlKG5leHQucm93SW5kZXgsIG5leHQudmlzaWJsZUNvbHVtbkluZGV4KSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS51cGRhdGVDZWxsKHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChzaGlmdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0VGFicy5sYXN0LmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdFRhYnMuZmlyc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUgJiYgIXRoaXMuZ3JpZC5yb3dFZGl0VGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChzaGlmdCAmJiBuZXh0LnJvd0luZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUucm93ICYmIG5leHQudmlzaWJsZUNvbHVtbkluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPSB0aGlzLmdyaWQubGFzdEVkaXRhYmxlQ29sdW1uSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzaGlmdCAmJiBuZXh0LnJvd0luZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUucm93ICYmIG5leHQudmlzaWJsZUNvbHVtbkluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPSB0aGlzLmdyaWQuZmlyc3RFZGl0YWJsZUNvbHVtbkluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXh0LnJvd0luZGV4ID0gdGhpcy5hY3RpdmVOb2RlLnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmF2aWdhdGVJbkJvZHkobmV4dC5yb3dJbmRleCwgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXgsIChvYmopID0+IHtcbiAgICAgICAgICAgIG9iai50YXJnZXQuYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBuYXZpZ2F0ZUluQm9keShyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBjYjogKGFyZzogYW55KSA9PiB2b2lkID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZFBvc2l0aW9uKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpIHx8IHRoaXMuaXNBY3RpdmVOb2RlKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8ocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgIH1cblxuXG4gICAgcHJvdGVjdGVkIGVtaXRLZXlEb3duKHR5cGU6IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSwgcm93SW5kZXgsIGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0LnRvQXJyYXkoKS5jb25jYXQodGhpcy5ncmlkLnJvd0xpc3QudG9BcnJheSgpKS5maW5kKHIgPT4gci5pbmRleCA9PT0gcm93SW5kZXgpO1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHlwZSA9PT0gJ2dyb3VwUm93JyA/IHJvdyA6XG4gICAgICAgICAgICB0eXBlID09PSAnZGF0YUNlbGwnID8gcm93LmNlbGxzPy5maW5kKGMgPT4gYy52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pIDpcbiAgICAgICAgICAgICAgICByb3cuc3VtbWFyeUNlbGxzPy5maW5kKGMgPT4gYy52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgICAgICBjb25zdCBrZXlkb3duQXJncyA9IHsgdGFyZ2V0VHlwZTogdHlwZSwgZXZlbnQsIGNhbmNlbDogZmFsc2UsIHRhcmdldCB9O1xuICAgICAgICB0aGlzLmdyaWQuZ3JpZEtleWRvd24uZW1pdChrZXlkb3duQXJncyk7XG4gICAgICAgIGlmIChrZXlkb3duQXJncy5jYW5jZWwgJiYgdHlwZSA9PT0gJ2RhdGFDZWxsJykge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmtleWJvYXJkU3RhdGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBrZXlkb3duQXJncy5jYW5jZWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNDb2x1bW5QaW5uZWQoY29sdW1uSW5kZXg6IG51bWJlciwgZm9yT2ZEaXI6IElneEZvck9mRGlyZWN0aXZlPGFueT4pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbCA9IGZvck9mRGlyLmdldFNjcm9sbCgpO1xuICAgICAgICByZXR1cm4gKCFob3Jpem9udGFsU2Nyb2xsLmNsaWVudFdpZHRoIHx8IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeVZpc2libGVJbmRleChjb2x1bW5JbmRleCk/LnBpbm5lZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRGaXJzdERhdGFSb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGFWaWV3LmZpbmRJbmRleChyZWMgPT4gIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocmVjKSAmJiAhdGhpcy5ncmlkLmlzRGV0YWlsUmVjb3JkKHJlYykgJiYgIXJlYy5zdW1tYXJpZXMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmaW5kTGFzdERhdGFSb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50IC0gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVJvdyhpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJvd0VsZW1lbnRCeUluZGV4KGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzRGV0YWlscykge1xuICAgICAgICAgICAgY29uc3QgZGV0YWlsID0gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RldGFpbD1cInRydWVcIl1bZGF0YS1yb3dpbmRleD1cIiR7aW5kZXh9XCJdYCk7XG4gICAgICAgICAgICBpZiAoZGV0YWlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRldGFpbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0xpc3QudG9BcnJheSgpLmNvbmNhdCh0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC50b0FycmF5KCkpLmZpbmQociA9PiByLmluZGV4ID09PSBpbmRleCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzVmFsaWRQb3NpdGlvbihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9ICh0aGlzLmdyaWQgYXMgYW55KS50b3RhbEl0ZW1Db3VudCA/PyB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoO1xuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IGNvbEluZGV4IDwgMCB8fCBsZW5ndGggLSAxIDwgcm93SW5kZXggfHwgdGhpcy5sYXN0Q29sdW1uSW5kZXggPCBjb2xJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICE9PSBjb2xJbmRleCAmJiAhdGhpcy5pc0RhdGFSb3cocm93SW5kZXgsIHRydWUpID8gZmFsc2UgOiB0cnVlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcGVyZm9ybUhlYWRlcktleUNvbWJpbmF0aW9uKGNvbHVtbiwga2V5LCBzaGlmdCwgY3RybCwgYWx0LCBldmVudCkge1xuICAgICAgICBsZXQgZGlyZWN0aW9uID0gdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucy5maW5kKGV4cHIgPT4gZXhwci5maWVsZE5hbWUgPT09IGNvbHVtbi5maWVsZCk/LmRpcjtcbiAgICAgICAgaWYgKGN0cmwgJiYga2V5LmluY2x1ZGVzKCd1cCcpICYmIGNvbHVtbi5zb3J0YWJsZSAmJiAhY29sdW1uLmNvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT09IFNvcnRpbmdEaXJlY3Rpb24uQXNjID8gU29ydGluZ0RpcmVjdGlvbi5Ob25lIDogU29ydGluZ0RpcmVjdGlvbi5Bc2M7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc29ydCh7IGZpZWxkTmFtZTogY29sdW1uLmZpZWxkLCBkaXI6IGRpcmVjdGlvbiwgaWdub3JlQ2FzZTogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0cmwgJiYga2V5LmluY2x1ZGVzKCdkb3duJykgJiYgY29sdW1uLnNvcnRhYmxlICYmICFjb2x1bW4uY29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gU29ydGluZ0RpcmVjdGlvbi5EZXNjID8gU29ydGluZ0RpcmVjdGlvbi5Ob25lIDogU29ydGluZ0RpcmVjdGlvbi5EZXNjO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnQoeyBmaWVsZE5hbWU6IGNvbHVtbi5maWVsZCwgZGlyOiBkaXJlY3Rpb24sIGlnbm9yZUNhc2U6IGZhbHNlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGlmdCAmJiBhbHQgJiYgdGhpcy5pc1RvZ2dsZUtleShrZXkpICYmICFjb2x1bW4uY29sdW1uR3JvdXAgJiYgY29sdW1uLmdyb3VwYWJsZSkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uID8gU29ydGluZ0RpcmVjdGlvbi5EZXNjIDogU29ydGluZ0RpcmVjdGlvbi5Bc2M7XG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdyaWdodCcpKSB7XG4gICAgICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLmdyb3VwQnkoeyBmaWVsZE5hbWU6IGNvbHVtbi5maWVsZCwgZGlyOiBkaXJlY3Rpb24sIGlnbm9yZUNhc2U6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuY2xlYXJHcm91cGluZyhjb2x1bW4uZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA9IGtleS5pbmNsdWRlcygncmlnaHQnKSAmJiAodGhpcy5ncmlkIGFzIGFueSkuaGlkZUdyb3VwZWRDb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGVJbmRleCA9PT0gdGhpcy5sYXN0Q29sdW1uSW5kZXggPyB0aGlzLmxhc3RDb2x1bW5JbmRleCAtIDEgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbHQgJiYgKFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KSB8fCBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTUNIRXhwYW5kQ29sbGFwc2Uoa2V5LCBjb2x1bW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChbJyAnLCAnc3BhY2ViYXInLCAnc3BhY2UnXS5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNvbHVtblNlbGVjdGlvbihjb2x1bW4sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWx0ICYmIChrZXkgPT09ICdsJyB8fCBrZXkgPT09ICfCrCcpICYmIHRoaXMuZ3JpZC5hbGxvd0FkdmFuY2VkRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQub3BlbkFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0cmwgJiYgc2hpZnQgJiYga2V5ID09PSAnbCcgJiYgdGhpcy5ncmlkLmFsbG93RmlsdGVyaW5nICYmICFjb2x1bW4uY29sdW1uR3JvdXAgJiYgY29sdW1uLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZmlsdGVyTW9kZSA9PT0gRmlsdGVyTW9kZS5leGNlbFN0eWxlRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyRWwgPSB0aGlzLmdyaWQuaGVhZGVyR3JvdXBzLmZpbmQoZyA9PiBnLmFjdGl2ZSkubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS50b2dnbGVGaWx0ZXJEcm9wZG93bihoZWFkZXJFbCwgY29sdW1uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbChjb2x1bW4udmlzaWJsZUluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJlZENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5pc0ZpbHRlclJvd1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXJzdFZpc2libGVOb2RlKHJvd0luZGV4Pykge1xuICAgICAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMubGFzdEFjdGl2ZU5vZGUuY29sdW1uICE9PSB1bmRlZmluZWQgPyB0aGlzLmxhc3RBY3RpdmVOb2RlLmNvbHVtbiA6XG4gICAgICAgICAgICB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuc29ydCgoYzEsIGMyKSA9PiBjMS52aXNpYmxlSW5kZXggLSBjMi52aXNpYmxlSW5kZXgpXG4gICAgICAgICAgICAgICAgLmZpbmQoYyA9PiB0aGlzLmlzQ29sdW1uRnVsbHlWaXNpYmxlKGMudmlzaWJsZUluZGV4KSk/LnZpc2libGVJbmRleDtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmZpbmQoKGNvbCkgPT4gIWNvbC5jb2x1bW5MYXlvdXQgJiYgY29sLnZpc2libGVJbmRleCA9PT0gY29sSW5kZXgpO1xuICAgICAgICBjb25zdCByb3dJbmQgPSByb3dJbmRleCA/IHJvd0luZGV4IDogdGhpcy5ncmlkLnJvd0xpc3QuZmluZChyID0+ICF0aGlzLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbChyLmluZGV4LCBjb2xJbmRleCkpPy5pbmRleDtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICAgIHJvdzogcm93SW5kID8/IDAsXG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtbj8udmlzaWJsZUluZGV4ID8/IDAsIGxldmVsOiBjb2x1bW4/LmxldmVsID8/IDAsXG4gICAgICAgICAgICBtY2hDYWNoZTogY29sdW1uID8geyBsZXZlbDogY29sdW1uLmxldmVsLCB2aXNpYmxlSW5kZXg6IGNvbHVtbi52aXNpYmxlSW5kZXggfSA6IHt9IGFzIENvbHVtbkdyb3Vwc0NhY2hlLFxuICAgICAgICAgICAgbGF5b3V0OiBjb2x1bW4gJiYgY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiBjb2x1bW4ucm93U3RhcnQsIGNvbFN0YXJ0OiBjb2x1bW4uY29sU3RhcnQsXG4gICAgICAgICAgICAgICAgcm93RW5kOiBjb2x1bW4ucm93RW5kLCBjb2xFbmQ6IGNvbHVtbi5jb2xFbmQsIGNvbHVtblZpc2libGVJbmRleDogY29sdW1uLnZpc2libGVJbmRleFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNQ0hlYWRlck5hdihrZXk6IHN0cmluZywgY3RybDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuZXdIZWFkZXJOb2RlOiBDb2x1bW5Hcm91cHNDYWNoZSA9IHtcbiAgICAgICAgICAgIHZpc2libGVJbmRleDogdGhpcy5hY3RpdmVOb2RlLm1jaENhY2hlLnZpc2libGVJbmRleCxcbiAgICAgICAgICAgIGxldmVsOiB0aGlzLmFjdGl2ZU5vZGUubWNoQ2FjaGUubGV2ZWxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0aXZlQ29sID0gdGhpcy5jdXJyZW50QWN0aXZlQ29sdW1uO1xuICAgICAgICBjb25zdCBsYXN0R3JvdXBJbmRleCA9IE1hdGgubWF4KC4uLiB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuXG4gICAgICAgICAgICBmaWx0ZXIoYyA9PiBjLmxldmVsIDw9IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCkubWFwKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4KSk7XG4gICAgICAgIGxldCBuZXh0Q29sID0gYWN0aXZlQ29sO1xuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygnbGVmdCcpIHx8IGtleSA9PT0gJ2hvbWUnKSAmJiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjdHJsIHx8IGtleSA9PT0gJ2hvbWUnID8gMCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gLSAxO1xuICAgICAgICAgICAgbmV4dENvbCA9IHRoaXMuZ2V0TmV4dENvbHVtbk1DSChpbmRleCk7XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleCA9IG5leHRDb2wudmlzaWJsZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5LmluY2x1ZGVzKCdyaWdodCcpIHx8IGtleSA9PT0gJ2VuZCcpICYmIGFjdGl2ZUNvbC52aXNpYmxlSW5kZXggPCBsYXN0R3JvdXBJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFZJbmRleCA9IGFjdGl2ZUNvbC5jaGlsZHJlbiA/IE1hdGgubWF4KC4uLmFjdGl2ZUNvbC5hbGxDaGlsZHJlbi5tYXAoYyA9PiBjLnZpc2libGVJbmRleCkpICsgMSA6XG4gICAgICAgICAgICAgICAgYWN0aXZlQ29sLnZpc2libGVJbmRleCArIDE7XG4gICAgICAgICAgICBuZXh0Q29sID0gY3RybCB8fCBrZXkgPT09ICdlbmQnID8gdGhpcy5nZXROZXh0Q29sdW1uTUNIKHRoaXMubGFzdENvbHVtbkluZGV4KSA6IHRoaXMuZ2V0TmV4dENvbHVtbk1DSChuZXh0VkluZGV4KTtcbiAgICAgICAgICAgIG5ld0hlYWRlck5vZGUudmlzaWJsZUluZGV4ID0gbmV4dENvbC52aXNpYmxlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdHJsICYmIGtleS5pbmNsdWRlcygndXAnKSAmJiB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICBuZXh0Q29sID0gYWN0aXZlQ29sLnBhcmVudDtcbiAgICAgICAgICAgIG5ld0hlYWRlck5vZGUubGV2ZWwgPSBuZXh0Q29sLmxldmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3RybCAmJiBrZXkuaW5jbHVkZXMoJ2Rvd24nKSAmJiBhY3RpdmVDb2wuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIG5leHRDb2wgPSBhY3RpdmVDb2wuY2hpbGRyZW4uZmluZChjID0+IGMudmlzaWJsZUluZGV4ID09PSBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleCkgfHxcbiAgICAgICAgICAgICAgICBhY3RpdmVDb2wuY2hpbGRyZW4udG9BcnJheSgpLnNvcnQoKGEsIGIpID0+IGIudmlzaWJsZUluZGV4IC0gYS52aXNpYmxlSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlSW5kZXggPCBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleClbMF07XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLmxldmVsID0gbmV4dENvbC5sZXZlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh7XG4gICAgICAgICAgICByb3c6IHRoaXMuYWN0aXZlTm9kZS5yb3csXG4gICAgICAgICAgICBjb2x1bW46IG5leHRDb2wudmlzaWJsZUluZGV4LFxuICAgICAgICAgICAgbGV2ZWw6IG5leHRDb2wubGV2ZWwsXG4gICAgICAgICAgICBtY2hDYWNoZTogbmV3SGVhZGVyTm9kZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbChuZXh0Q29sLnZpc2libGVJbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNQ0hFeHBhbmRDb2xsYXBzZShrZXksIGNvbHVtbikge1xuICAgICAgICBpZiAoIWNvbHVtbi5jaGlsZHJlbiB8fCAhY29sdW1uLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb2x1bW4uZXhwYW5kZWQgJiYgUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBjb2x1bW4uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5leHBhbmRlZCAmJiBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgY29sdW1uLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNvbHVtblNlbGVjdGlvbihjb2x1bW4sIGV2ZW50KSB7XG4gICAgICAgIGlmICghY29sdW1uLnNlbGVjdGFibGUgfHwgdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsZWFyU2VsZWN0aW9uID0gdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuc2luZ2xlO1xuICAgICAgICBjb25zdCBjb2x1bW5zVG9TZWxlY3QgPSAhY29sdW1uLmNoaWxkcmVuID8gW2NvbHVtbi5maWVsZF0gOlxuICAgICAgICAgICAgY29sdW1uLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmhpZGRlbiAmJiBjLnNlbGVjdGFibGUgJiYgIWMuY29sdW1uR3JvdXApLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICBpZiAoY29sdW1uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdENvbHVtbnMoY29sdW1uc1RvU2VsZWN0LCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RDb2x1bW5zKGNvbHVtbnNUb1NlbGVjdCwgY2xlYXJTZWxlY3Rpb24sIGZhbHNlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5leHRDb2x1bW5NQ0godmlzaWJsZUluZGV4KSB7XG4gICAgICAgIGxldCBjb2wgPSB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlWaXNpYmxlSW5kZXgodmlzaWJsZUluZGV4KTtcbiAgICAgICAgbGV0IHBhcmVudCA9IGNvbC5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChwYXJlbnQgJiYgY29sLmxldmVsID4gdGhpcy5hY3RpdmVOb2RlLm1jaENhY2hlLmxldmVsKSB7XG4gICAgICAgICAgICBjb2wgPSBjb2wucGFyZW50O1xuICAgICAgICAgICAgcGFyZW50ID0gY29sLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGN1cnJlbnRBY3RpdmVDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuZmluZChjID0+IGMudmlzaWJsZUluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICYmIGMubGV2ZWwgPT09IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGl2ZU5vZGUockluZGV4OiBudW1iZXIsIGNJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU5vZGUgPyB0aGlzLmFjdGl2ZU5vZGUucm93ID09PSBySW5kZXggJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA9PT0gY0luZGV4IDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1RvZ2dsZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gUk9XX0NPTExBUFNFX0tFWVMuaGFzKGtleSkgfHwgUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBZGRLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFJPV19BRERfS0VZUy5oYXMoa2V5KTtcbiAgICB9XG59XG4iXX0=