coer-elements 0.0.46 → 0.0.47

Sign up to get free protection for your applications and to get access to all the features.
@@ -227,15 +227,16 @@ export class CoerGridExtension extends ControlValue {
227
227
  //getter
228
228
  get _height() {
229
229
  let height = this.height();
230
- if (height == 'full') {
230
+ if (height == 'full' || height == 'full-form') {
231
231
  const TOOLBAR = 45;
232
232
  const PAGE_HEADER = 70;
233
+ const FORM = (height == 'full-form') ? 70 : 0;
233
234
  const GRID_HEADER = document.getElementById(`${this._id}-header`);
234
235
  const HEADER = (GRID_HEADER && GRID_HEADER.children.length > 0) ? 50 : 0;
235
236
  const MARGIN = 30;
236
237
  const PADDING = 20;
237
238
  const FOOTER = this.showFooter() ? 24.5 : 0;
238
- height = (Screen.WINDOW_HEIGHT - TOOLBAR - PAGE_HEADER - MARGIN - HEADER - PADDING - FOOTER) + 'px';
239
+ height = (Screen.WINDOW_HEIGHT - TOOLBAR - PAGE_HEADER - MARGIN - FORM - HEADER - PADDING - FOOTER) + 'px';
239
240
  }
240
241
  return height;
241
242
  }
@@ -405,4 +406,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
405
406
  }], checkbox: [{
406
407
  type: Input
407
408
  }] } });
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1ncmlkLmV4dGVuc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvY29tcG9uZW50cy9saWIvY29lci1ncmlkL2NvZXItZ3JpZC5leHRlbnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNdkYsTUFBTSxPQUFPLGlCQUFxQixTQUFRLFlBQVk7SUFKdEQ7O1FBTUksWUFBWTtRQUNPLFVBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0MsVUFBVTtRQUNBLGNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLGNBQWMsQ0FBQyxDQUFDO1FBQzNELGdCQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYyxhQUFhLENBQUMsQ0FBQztRQUM3RCxvQkFBZSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxzQkFBaUIsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsc0JBQWlCLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hE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bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OEJBaUNZLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJR3JpZEJ1dHRvbkJ5Um93LCBJR3JpZENvbHVtbiwgSUdyaWREYXRhU291cmNlLCBJR3JpZEltcG9ydCwgSUdyaWRIZWFkZXJCdXR0b24sIElHcmlkSGVhZGVyRXhwb3J0QnV0dG9uLCBJR3JpZEtleXVwRW50ZXIsIElHcmlkU2VhcmNoLCBJR3JpZElucHV0U3dpdGNoQ2hhbmdlLCBJR3JpZElucHV0VGV4dGJveCwgSUdyaWRTb3J0LCBJR3JpZENoZWNrYm94LCBJR3JpZElucHV0Q2hlY2tib3gsIElHcmlkSGVhZGVyIH0gZnJvbSBcImNvZXItZWxlbWVudHMvaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCwgdmlld0NoaWxkcmVuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29lckNoZWNrYm94IH0gZnJvbSBcIi4uLy4uL2xpYi9jb2VyLWNoZWNrYm94L2NvZXItY2hlY2tib3guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvZXJOdW1iZXJCb3ggfSBmcm9tIFwiLi4vLi4vbGliL2NvZXItbnVtYmVyYm94L2NvZXItbnVtYmVyYm94LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb2VyU2VsZWN0Ym94IH0gZnJvbSBcIi4uLy4uL2xpYi9jb2VyLXNlbGVjdGJveC9jb2VyLXNlbGVjdGJveC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29lclRleHRCb3ggfSBmcm9tIFwiLi4vLi4vbGliL2NvZXItdGV4dGJveC9jb2VyLXRleHRib3guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvZXJBbGVydCwgQ29udHJvbFZhbHVlLCBEYXRlVGltZSwgU2NyZWVuLCBUb29scyB9IGZyb20gJ2NvZXItZWxlbWVudHMvdG9vbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvZXItZ3JpZC1leHRlbnNpb24nLFxyXG4gICAgdGVtcGxhdGU6ICcnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2VyR3JpZEV4dGVuc2lvbjxUPiBleHRlbmRzIENvbnRyb2xWYWx1ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAgIC8vSW5qZWN0aW9uc1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0ID0gaW5qZWN0KENvZXJBbGVydCk7XHJcblxyXG4gICAgLy9FbGVtZW50c1xyXG4gICAgcHJvdGVjdGVkIGlucHV0RmlsZSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW5wdXRGaWxlUmVmJyk7XHJcbiAgICBwcm90ZWN0ZWQgaW5wdXRTZWFyY2ggPSB2aWV3Q2hpbGQucmVxdWlyZWQ8Q29lclRleHRCb3g+KCdpbnB1dFNlYXJjaCcpO1xyXG4gICAgcHJvdGVjdGVkIGNvZXJUZXh0Ym94TGlzdCA9IHZpZXdDaGlsZHJlbihDb2VyVGV4dEJveCk7XHJcbiAgICBwcm90ZWN0ZWQgY29lck51bWJlcmJveExpc3QgPSB2aWV3Q2hpbGRyZW4oQ29lck51bWJlckJveCk7XHJcbiAgICBwcm90ZWN0ZWQgY29lclNlbGVjdGJveExpc3QgPSB2aWV3Q2hpbGRyZW4oQ29lclNlbGVjdGJveCk7XHJcbiAgICBwcm90ZWN0ZWQgY29lckNoZWNrYm94TGlzdCA9IHZpZXdDaGlsZHJlbihDb2VyQ2hlY2tib3gpO1xyXG5cclxuICAgIC8vVmFyaWFibGVzXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3ZhbHVlOiBUW10gPSBbXTtcclxuICAgIHByb3RlY3RlZCB2YWx1ZV9zaWduYWwgPSBzaWduYWw8VFtdPihbXSk7XHJcbiAgICBwcm90ZWN0ZWQgX2dyaWRTZWFyY2ggPSBzaWduYWw8c3RyaW5nIHwgbnVtYmVyPignJyk7XHJcbiAgICBwcm90ZWN0ZWQgX2lzTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwcm90ZWN0ZWQgX2lzTG9hZGluZ01lc3NhZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJvdGVjdGVkIF9pZDogc3RyaW5nID0gVG9vbHMuR2V0R3VpZCgnY29lci1ncmlkJyk7XHJcbiAgICBwcm90ZWN0ZWQgX2V4cGFuZGVkR3JvdXBzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHJvdGVjdGVkIF9lbmFibGVBbmltYXRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgX2luZGV4Rm9jdXMgPSBzaWduYWw8bnVtYmVyPigwKTtcclxuICAgIHByb3RlY3RlZCBfc29ydCA9IHNpZ25hbDxJR3JpZFNvcnQ+KHsgY29sdW1uTmFtZTogJycsIGRpcmVjdGlvbjogJ25vbmUnLCBpY29uOiAnJyB9KTtcclxuXHJcbiAgICAvL0dlbmVyaWMgVG9vbHNcclxuICAgIHByb3RlY3RlZCBHZXROdW1lcmljRm9ybWF0ID0gVG9vbHMuR2V0TnVtZXJpY0Zvcm1hdDtcclxuICAgIHByb3RlY3RlZCBHZXREYXRlRm9ybWF0ID0gRGF0ZVRpbWUuR2V0RGF0ZUZvcm1hdDtcclxuXHJcbiAgICAvL0lucHV0c1xyXG4gICAgcHVibGljIGNvbHVtbnMgPSBpbnB1dDxJR3JpZENvbHVtbjxUPltdPihbXSk7XHJcbiAgICBwdWJsaWMgY2xlYW5Db2x1bW5OYW1lID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBASW5wdXQoKSBhZGRCdXR0b246IElHcmlkSGVhZGVyQnV0dG9uID0geyBzaG93OiBmYWxzZSB9O1xyXG4gICAgQElucHV0KCkgZXhwb3J0QnV0dG9uOiBJR3JpZEhlYWRlckV4cG9ydEJ1dHRvbiA9IHsgc2hvdzogZmFsc2UgfTtcclxuICAgIEBJbnB1dCgpIGltcG9ydEJ1dHRvbjogSUdyaWRIZWFkZXJCdXR0b24gPSB7IHNob3c6IGZhbHNlIH07XHJcbiAgICBASW5wdXQoKSBzZWFyY2g6IElHcmlkU2VhcmNoID0geyBzaG93OiBmYWxzZSwgaWdub3JlOiBmYWxzZSB9O1xyXG4gICAgQElucHV0KCkgYnV0dG9uQnlSb3c6IElHcmlkQnV0dG9uQnlSb3c8VD4gPSB7fTtcclxuICAgIEBJbnB1dCgpIGNoZWNrYm94OiBJR3JpZENoZWNrYm94ID0geyBzaG93OiBmYWxzZSB9O1xyXG4gICAgcHVibGljIHRvb2x0aXBCeVJvdyA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHVibGljIHJvd3NCeVBhZ2UgPSBpbnB1dDxudW1iZXI+KDUwKTtcclxuICAgIHB1YmxpYyBncm91cEJ5ID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgICBwdWJsaWMgc2hvd0NvbHVtbkdyb3VwZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwdWJsaWMgcm93c0J5R3JvdXAgPSBpbnB1dDxudW1iZXI+KDUwKTtcclxuICAgIHB1YmxpYyBpc0ludmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyBzaG93Rm9vdGVyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwdWJsaWMgd2lkdGggPSBpbnB1dDxzdHJpbmc+KCcxMDAlJyk7XHJcbiAgICBwdWJsaWMgTWluV2lkdGggPSBpbnB1dDxzdHJpbmc+KCcyNTBweCcpO1xyXG4gICAgcHVibGljIE1heFdpZHRoID0gaW5wdXQ8c3RyaW5nPignMTAwJScpO1xyXG4gICAgcHVibGljIGhlaWdodCA9IGlucHV0PHN0cmluZz4oJzM1MHB4Jyk7XHJcbiAgICBwdWJsaWMgbWluSGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMTQwcHgnKTtcclxuICAgIHB1YmxpYyBtYXhIZWlnaHQgPSBpbnB1dDxzdHJpbmc+KCcxMDB2aCcpO1xyXG4gICAgcHVibGljIG1hcmdpbiA9IGlucHV0PHN0cmluZz4oJ2F1dG8nKTtcclxuICAgIHB1YmxpYyBlbmFibGVTb3J0ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwdWJsaWMgZW5hYmxlUm93Rm9jdXMgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgICAvL091dHB1dHNcclxuICAgIHB1YmxpYyBvbkNsaWNrQWRkID0gb3V0cHV0PHZvaWQ+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja0ltcG9ydCA9IG91dHB1dDxJR3JpZEltcG9ydDxUPj4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrRXhwb3J0ID0gb3V0cHV0PFRbXT4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrUm93ID0gb3V0cHV0PFQ+KCk7XHJcbiAgICBwdWJsaWMgb25Eb3VibGVDbGlja1JvdyA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uQ2xpY2tEZWxldGVSb3cgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrRWRpdFJvdyA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uQ2xpY2tHb1JvdyA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uS2V5dXBFbnRlciA9IG91dHB1dDxJR3JpZEtleXVwRW50ZXI+KCk7XHJcbiAgICBwdWJsaWMgb25LZXl1cEVudGVyTGFzdCA9IG91dHB1dDx2b2lkPigpO1xyXG4gICAgcHVibGljIG9uU3dpdGNoQ2hhbmdlID0gb3V0cHV0PElHcmlkSW5wdXRTd2l0Y2hDaGFuZ2U8VD4+KCk7XHJcbiAgICBwdWJsaWMgb25UZXh0Ym94Q2hhbmdlID0gb3V0cHV0PElHcmlkSW5wdXRUZXh0Ym94PFQ+PigpO1xyXG4gICAgcHVibGljIG9uU2VsZWN0Ym94Q2hhbmdlID0gb3V0cHV0PElHcmlkSW5wdXRUZXh0Ym94PFQ+PigpO1xyXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UgPSBvdXRwdXQ8SUdyaWRJbnB1dENoZWNrYm94PFQ+PigpO1xyXG5cclxuICAgIC8vY29tcHV0ZWRcclxuICAgIHByb3RlY3RlZCBfaXNEaXNhYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkKCkgfHwgdGhpcy5pc0xvYWRpbmcoKSB8fCB0aGlzLmlzSW52aXNpYmxlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgX2lzR3JvdXBlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncm91cEJ5KCkubGVuZ3RoID4gMDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vZ2V0dGVyXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IF9oZWlnaHQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTtcclxuXHJcbiAgICAgICAgaWYgKGhlaWdodCA9PSAnZnVsbCcpIHtcclxuICAgICAgICAgICAgY29uc3QgVE9PTEJBUiA9IDQ1O1xyXG4gICAgICAgICAgICBjb25zdCBQQUdFX0hFQURFUiA9IDcwO1xyXG4gICAgICAgICAgICBjb25zdCBHUklEX0hFQURFUiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuX2lkfS1oZWFkZXJgKSE7XHJcbiAgICAgICAgICAgIGNvbnN0IEhFQURFUiA9IChHUklEX0hFQURFUiAmJiBHUklEX0hFQURFUi5jaGlsZHJlbi5sZW5ndGggPiAwKSA/IDUwIDogMDtcclxuICAgICAgICAgICAgY29uc3QgTUFSR0lOID0gMzA7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBRERJTkcgPSAyMDtcclxuICAgICAgICAgICAgY29uc3QgRk9PVEVSID0gdGhpcy5zaG93Rm9vdGVyKCkgPyAyNC41IDogMDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gKFNjcmVlbi5XSU5ET1dfSEVJR0hUIC0gVE9PTEJBUiAtIFBBR0VfSEVBREVSIC0gTUFSR0lOIC0gSEVBREVSIC0gUEFERElORyAtIEZPT1RFUikgKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGhlaWdodDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9nZXR0ZXJcclxuICAgIHByb3RlY3RlZCBnZXQgX29ubHlPbmVDaGVjaygpIHtcclxuICAgICAgICByZXR1cm4gVG9vbHMuSXNOb3ROdWxsKHRoaXMuY2hlY2tib3gub25seU9uZUNoZWNrKSAmJiB0aGlzLmNoZWNrYm94Lm9ubHlPbmVDaGVjaztcclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIFRvb2xzLlNsZWVwKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5faXNMb2FkaW5nTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICAgIHB1YmxpYyBvdmVycmlkZSBTZXRWYWx1ZSh2YWx1ZTogVFtdKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGluZGV4Um93ID0gMDtcclxuICAgICAgICBpZighVG9vbHMuSXNOb3ROdWxsKHZhbHVlKSkgdmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKHZhbHVlKS5tYXAoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7IGNoZWNrZWQ6IGZhbHNlIH0sIHsgLi4uaXRlbSB9LCB7IGluZGV4Um93OiBpbmRleFJvdysrIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5fVXBkYXRlVmFsdWUoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBkYXRhU291cmNlO1xyXG4gICAgICAgIHRoaXMudmFsdWVfc2lnbmFsLnNldChkYXRhU291cmNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9Db250cm9sVmFsdWVBY2Nlc3NvclxyXG4gICAgcHVibGljIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IFRbXSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBpbmRleFJvdyA9IDA7XHJcbiAgICAgICAgaWYoIVRvb2xzLklzTm90TnVsbCh2YWx1ZSkpIHZhbHVlID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBUb29scy5CcmVha1JlZmVyZW5jZSh2YWx1ZSkubWFwKChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBjaGVja2VkOiBmYWxzZSB9LCB7IC4uLml0ZW0gfSwgeyBpbmRleFJvdzogaW5kZXhSb3crKyB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZGF0YVNvdXJjZTtcclxuICAgICAgICB0aGlzLnZhbHVlX3NpZ25hbC5zZXQoZGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgICAvL2NvbXB1dGVkXHJcbiAgICAgcHJvdGVjdGVkIGdyaWRDb2x1bW5zID0gY29tcHV0ZWQ8SUdyaWRIZWFkZXJbXT4oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IFNFVF9DT0xVTU5TID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG4gICAgICAgIC8vSGFzIGZpbHRlciBjb2x1bW5zP1xyXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBwcm9wZXJ0eSB9IG9mIHRoaXMuY29sdW1ucygpKSB7XHJcbiAgICAgICAgICAgICAgICBTRVRfQ09MVU1OUy5hZGQocHJvcGVydHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0dldCBhbGwgY29sdW1uc1xyXG4gICAgICAgIGVsc2UgZm9yIChjb25zdCByb3cgb2YgdGhpcy52YWx1ZV9zaWduYWwoKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHJvdykge1xyXG4gICAgICAgICAgICAgICAgU0VUX0NPTFVNTlMuYWRkKHByb3BlcnR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9SZW1vdmUgaW5kZXhSb3cgY29sdW1uXHJcbiAgICAgICAgaWYgKFNFVF9DT0xVTU5TLmhhcygnaW5kZXhSb3cnKSkge1xyXG4gICAgICAgICAgICBTRVRfQ09MVU1OUy5kZWxldGUoJ2luZGV4Um93Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1JlbW92ZSBncm91cEJ5IGNvbHVtblxyXG4gICAgICAgIGlmICh0aGlzLl9pc0dyb3VwZWQoKSAmJiAhdGhpcy5zaG93Q29sdW1uR3JvdXBlZCgpICYmIFNFVF9DT0xVTU5TLmhhcyh0aGlzLmdyb3VwQnkoKSkpIHtcclxuICAgICAgICAgICAgU0VUX0NPTFVNTlMuZGVsZXRlKHRoaXMuZ3JvdXBCeSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vU2V0IGluZGV4IGNvbHVtblxyXG4gICAgICAgIGxldCBpbmRleENvbHVtbiA9IDA7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oU0VUX0NPTFVNTlMpLm1hcChwcm9wZXJ0eSA9PiBUb29scy5CcmVha1JlZmVyZW5jZTxJR3JpZEhlYWRlcj4oe1xyXG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBwcm9wZXJ0eSxcclxuICAgICAgICAgICAgaW5kZXhDb2x1bW46IGluZGV4Q29sdW1uKyssXHJcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9HZXRDb2x1bW5Db25maWcocHJvcGVydHkpPy53aWR0aCB8fCAnYXV0bydcclxuICAgICAgICB9KSk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLy9jb21wdXRlZFxyXG4gICAgcHJvdGVjdGVkIGdyaWREYXRhU291cmNlID0gY29tcHV0ZWQ8SUdyaWREYXRhU291cmNlW10+KCgpID0+IHtcclxuICAgICAgICBsZXQgbGlzdCA9IHRoaXMuZ3JpZERhdGFTb3VyY2VGaWx0ZXJlZCgpO1xyXG5cclxuICAgICAgICAvL0l0J3MgR3JvdXBlZD9cclxuICAgICAgICBpZiAodGhpcy5faXNHcm91cGVkKCkpIHtcclxuICAgICAgICAgICAgLy9sZXQgaW5kZXhSb3cgPSAwO1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhHcm91cCA9IDA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBTRVRfQ09MVU1OID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGxpc3QgYXMgYW55KSB7XHJcbiAgICAgICAgICAgICAgICBTRVRfQ09MVU1OLmFkZChyb3dbdGhpcy5ncm91cEJ5KCldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgREFUQV9TT1VSQ0VfR1JPUFVFRCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBTRVRfQ09MVU1OKSB7XHJcbiAgICAgICAgICAgICAgICBEQVRBX1NPVVJDRV9HUk9QVUVELnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwQnk6IGNvbHVtbixcclxuICAgICAgICAgICAgICAgICAgICBpbmRleEdyb3VwOiBpbmRleEdyb3VwKyssXHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBsaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtW3RoaXMuZ3JvdXBCeSgpXSA9PSBjb2x1bW4pLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICByb3dzOiBbLi4ubGlzdF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtW3RoaXMuZ3JvdXBCeSgpXSA9PSBjb2x1bW4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpY2UoMCwgdGhpcy5yb3dzQnlHcm91cCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLy5tYXAoKGl0ZW06IGFueSkgPT4gT2JqZWN0LmFzc2lnbih7IGluZGV4Um93OiBpbmRleFJvdysrIH0sIGl0ZW0pKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vUmVzcG9uc2UgYnkgZ3JvdXBcclxuICAgICAgICAgICAgcmV0dXJuIFsuLi5EQVRBX1NPVVJDRV9HUk9QVUVEXS5zcGxpY2UoMCwgdGhpcy5yb3dzQnlQYWdlKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9SZXNwb25zZVxyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgICBncm91cEJ5OiAnTm90IEdyb3VwZWQnLFxyXG4gICAgICAgICAgICBpbmRleEdyb3VwOiAtMSxcclxuICAgICAgICAgICAgbGVuZ3RoOiAtMSxcclxuICAgICAgICAgICAgcm93czogWy4uLmxpc3RdLnNwbGljZSgwLCB0aGlzLnJvd3NCeVBhZ2UoKSlcclxuICAgICAgICB9XTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgZ3JpZERhdGFTb3VyY2VGaWx0ZXJlZCA9IGNvbXB1dGVkPFRbXT4oKCkgPT4ge1xyXG4gICAgICAgIGxldCBsaXN0OiBUW10gPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKHRoaXMudmFsdWVfc2lnbmFsKCkpO1xyXG5cclxuICAgICAgICAvL0lnbm9yZSBGaWx0ZXJcclxuICAgICAgICBpZiAodGhpcy5fZ3JpZFNlYXJjaCgpID09ICcnIHx8IHRoaXMuc2VhcmNoPy5pZ25vcmUpIHtcclxuICAgICAgICAgICAgbGlzdCA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0ZpbHRlciBieSBzZWFyY2hcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgU0VUX1JPVyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGxpc3RGaWx0ZXJlZDogYW55W10gPSBbXTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHsgY29sdW1uTmFtZSB9IG9mIHRoaXMuZ3JpZENvbHVtbnMoKSkge1xyXG4gICAgICAgICAgICAgICAgbGlzdEZpbHRlcmVkID0gZGF0YVNvdXJjZS5maWx0ZXIoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAhU0VUX1JPVy5oYXMoaXRlbVsnaW5kZXhSb3cnXSlcclxuICAgICAgICAgICAgICAgICAgICAmJiBTdHJpbmcoaXRlbVtUb29scy5GaXJzdENoYXJUb0xvd2VyKGNvbHVtbk5hbWUpXSkudHJpbSgpLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoU3RyaW5nKHRoaXMuX2dyaWRTZWFyY2goKSkudHJpbSgpLnRvVXBwZXJDYXNlKCkpXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCB7IGluZGV4Um93IH0gb2YgbGlzdEZpbHRlcmVkIGFzIGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIFNFVF9ST1cuYWRkKGluZGV4Um93KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsaXN0ID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UobGlzdC5jb25jYXQobGlzdEZpbHRlcmVkKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBUb29scy5CcmVha1JlZmVyZW5jZShsaXN0KTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvKiogR2V0IENvbHVtbiBDb25maWd1cmF0aW9uICovXHJcbiAgICBwcm90ZWN0ZWQgX0dldENvbHVtbkNvbmZpZyA9IChjb2x1bW5OYW1lOiBzdHJpbmcpOiBJR3JpZENvbHVtbjxUPiB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucygpLmZpbmQoeCA9PiB4LnByb3BlcnR5LnJlcGxhY2VBbGwoJyAnLCAnJykudG9VcHBlckNhc2UoKSA9PSBjb2x1bW5OYW1lLnJlcGxhY2VBbGwoJyAnLCAnJykudG9VcHBlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBDbGVhbiBOYW1lIG9yIGdldCBhbGlhcyAqL1xyXG4gICAgcHJvdGVjdGVkIF9HZXRDb2x1bW5OYW1lID0gKGNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uQ29uZmlnID0gdGhpcy5fR2V0Q29sdW1uQ29uZmlnKGNvbHVtbk5hbWUpO1xyXG5cclxuICAgICAgICAvL0dldCBBbGlhc1xyXG4gICAgICAgIGlmIChjb2x1bW5Db25maWcgJiYgY29sdW1uQ29uZmlnLmFsaWFzICYmIGNvbHVtbkNvbmZpZy5hbGlhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5Db25maWcuYWxpYXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0NsZWFuIGhlYWRlck5hbWVcclxuICAgICAgICBpZiAodGhpcy5jbGVhbkNvbHVtbk5hbWUoKSAmJiBjb2x1bW5OYW1lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29sdW1uTmFtZSA9IFRvb2xzLkZpcnN0Q2hhclRvTG93ZXIoY29sdW1uTmFtZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjaGFyQXJyYXkgPSBbXTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IGNoYXIgb2YgY29sdW1uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYoY2hhciA9PT0gY2hhci50b1VwcGVyQ2FzZSgpKSBjaGFyQXJyYXkucHVzaCgnICcpO1xyXG4gICAgICAgICAgICAgICAgY2hhckFycmF5LnB1c2goY2hhcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYXJBcnJheVswXSA9IGNoYXJBcnJheVswXS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICBjb2x1bW5OYW1lID0gY2hhckFycmF5LmpvaW4oJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbk5hbWUudHJpbSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfR2V0U2hvcnRJY29uID0gKGNvbHVtbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0KCkuY29sdW1uTmFtZSA9PSBjb2x1bW5OYW1lID8gdGhpcy5fc29ydCgpLmljb24gOiAnJztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgX0dldElkID0gKGluZGV4Um93OiBudW1iZXIsIGluZGV4Q29sdW1uOiBudW1iZXIsIHN1ZmZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGlmIChzdWZmaXgubGVuZ3RoID4gMCkgc3VmZml4ID0gYC0ke3N1ZmZpeH1gO1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9pZH0tcm93JHtpbmRleFJvd31jb2x1bW4ke2luZGV4Q29sdW1ufSR7c3VmZml4fWA7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9HZXRDZWxsVmFsdWUgPSAocm93OiBhbnksIGNvbHVtbk5hbWU6IHN0cmluZyk6IGFueSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJvd1tUb29scy5GaXJzdENoYXJUb0xvd2VyKGNvbHVtbk5hbWUpLnJlcGxhY2VBbGwoJyAnLCAnJyldO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfR2V0VG9vbHRpcCA9IChwcmVmaXg6IHN0cmluZywgcm93OiBhbnksIHN1ZmZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGxldCBjb2x1bW4gPSBUb29scy5GaXJzdENoYXJUb0xvd2VyKHRoaXMudG9vbHRpcEJ5Um93KCkpLnJlcGxhY2VBbGwoJyAnLCAnJyk7XHJcblxyXG4gICAgICAgIGlmIChzdWZmaXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdWZmaXggPSBgICR7c3VmZml4fWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy50b29sdGlwQnlSb3coKS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgID8gYCR7cHJlZml4fSAke3Jvd1tjb2x1bW5dfSR7c3VmZml4fWBcclxuICAgICAgICAgICAgOiBgJHtwcmVmaXh9JHtzdWZmaXh9YDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgX0hpZGVSb3cgPSAoZ3JvdXA6IElHcmlkRGF0YVNvdXJjZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5faXNHcm91cGVkKCkgPyAhKHRoaXMuX2V4cGFuZGVkR3JvdXBzLnNvbWUoeCA9PiB4ID09IGdyb3VwLmdyb3VwQnkpKSA6IGZhbHNlKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfSXNDZWxsVHlwZShwcm9wZXJ0eTogc3RyaW5nLCBkYXRhOiBhbnksIHR5cGU6ICdudW1iZXInIHwgJ2RhdGUnIHwgJ3RlbXBsYXRlJyB8ICdjb2VyVGV4dGJveCcgfCAnY29lck51bWJlcmJveCcgfCAnY29lclNlbGVjdGJveCcgIHwgJ2NvZXJTd2l0Y2gnKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY29sdW1uQ29uZmlnID0gdGhpcy5fR2V0Q29sdW1uQ29uZmlnKHByb3BlcnR5KTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbcHJvcGVydHldO1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKGRhdGEpO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmIChbJ2NvZXJUZXh0Ym94JywgJ2NvZXJOdW1iZXJib3gnLCAnY29lclNlbGVjdGJveCcsICdjb2VyU3dpdGNoJ10uaW5jbHVkZXModHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0Q29uZmlnOiBhbnkgPSBjb2x1bW5Db25maWc7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGlucHV0Q29uZmlnLmhhc093blByb3BlcnR5KHR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIGlucHV0Q29uZmlnW3R5cGVdID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgaW5wdXRDb25maWdbdHlwZV0oeyBwcm9wZXJ0eSwgcm93LCB2YWx1ZSB9KS5pc0lucHV0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIHN3aXRjaCh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW5Db25maWcudHlwZU51bWJlciA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29sdW1uQ29uZmlnLnR5cGVOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnLnR5cGVOdW1iZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAoZGF0YSA9PT0gbnVsbCkgPyBmYWxzZSA6IGNvbHVtbkNvbmZpZy50eXBlTnVtYmVyKHsgcHJvcGVydHksIHJvdywgdmFsdWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnLnR5cGVEYXRlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb2x1bW5Db25maWcudHlwZURhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnLnR5cGVEYXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gKGRhdGEgPT09IG51bGwpID8gZmFsc2UgOiBjb2x1bW5Db25maWcudHlwZURhdGUoeyBwcm9wZXJ0eSwgcm93LCB2YWx1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ3RlbXBsYXRlJzoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAodHlwZW9mIGNvbHVtbkNvbmZpZy50ZW1wbGF0ZSA9PT0gJ3N0cmluZycpIHx8ICh0eXBlb2YgY29sdW1uQ29uZmlnLnRlbXBsYXRlID09PSAnZnVuY3Rpb24nKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfSXNDZWxsQ29sb3IocHJvcGVydHk6IHN0cmluZywgZGF0YTogYW55LCBjb2xvcjogJ2NvbG9yQmx1ZScgfCAnY29sb3JHcmVlbicgfCAnY29sb3JZZWxsb3cnIHwgJ2NvbG9yUmVkJyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXNwb25zZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkNvbmZpZzogYW55ID0gdGhpcy5fR2V0Q29sdW1uQ29uZmlnKHByb3BlcnR5KTtcclxuXHJcbiAgICAgICAgaWYgKGNvbHVtbkNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbHVtbkNvbmZpZ1tjb2xvcl0gPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb2x1bW5Db25maWdbY29sb3JdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnW2NvbG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb2x1bW5Db25maWdbY29sb3JdKHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcclxuICAgICAgICAgICAgICAgICAgICByb3c6IFRvb2xzLkJyZWFrUmVmZXJlbmNlKGRhdGEpLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhW3Byb3BlcnR5XVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0QXR0cmlidXRlKHByb3BlcnR5OiBzdHJpbmcsIGRhdGE6IGFueSwgYXR0cmlidXRlOiBzdHJpbmcsIHR5cGU6ICdjb2VyU3dpdGNoJyB8ICdjb2VyVGV4dGJveCcgfCAnY29lck51bWJlcmJveCd8ICdjb2VyU2VsZWN0Ym94JyB8ICdkZWZhdWwtY2VsbCcgKTogYW55IHtcclxuICAgICAgICBjb25zdCBjb2x1bW5Db25maWcgPSB0aGlzLl9HZXRDb2x1bW5Db25maWcocHJvcGVydHkpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gVG9vbHMuSXNOb3ROdWxsKGRhdGEpID8gZGF0YVtwcm9wZXJ0eV0gOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKGRhdGEpO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGVmYXVsLWNlbGwnKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goYXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGV4dEFsaWduJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uQ29uZmlnPy50ZXh0QWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGVtcGxhdGUnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0Q29uZmlnOiBhbnkgPSBjb2x1bW5Db25maWc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRDb25maWcuaGFzT3duUHJvcGVydHkoYXR0cmlidXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGlucHV0Q29uZmlnW2F0dHJpYnV0ZV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0Q29uZmlnW2F0dHJpYnV0ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZih0eXBlb2YgaW5wdXRDb25maWdbYXR0cmlidXRlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dENvbmZpZ1thdHRyaWJ1dGVdKHsgcHJvcGVydHksIHJvdywgdmFsdWUgfSkgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYoWydjb2VyVGV4dGJveCcsICdjb2VyTnVtYmVyYm94JywgJ2NvZXJTZWxlY3Rib3gnLCAnY29lclN3aXRjaCddLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dENvbmZpZzogYW55ID0gY29sdW1uQ29uZmlnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Q29uZmlnLmhhc093blByb3BlcnR5KHR5cGUpICYmIHR5cGVvZiBpbnB1dENvbmZpZ1t0eXBlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dENvbmZpZ1t0eXBlXSh7IHByb3BlcnR5LCByb3csIHZhbHVlIH0pW2F0dHJpYnV0ZV0gfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIEJ1dHRvbkJ5Um93KHByb3BlcnR5OiAnc2hvd0RlbGV0ZUJ1dHRvbicgfCAnc2hvd0VkaXRCdXR0b24nIHwgJ3Nob3dHb0J1dHRvbicsIGRhdGE6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBidXR0b25CeVJvdzogYW55ID0gdGhpcy5idXR0b25CeVJvdztcclxuICAgICAgICBjb25zdCByb3cgPSBUb29scy5Jc05vdE51bGwoZGF0YSkgPyBUb29scy5CcmVha1JlZmVyZW5jZShkYXRhKSA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChidXR0b25CeVJvdy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgaWYgKHJvdyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAodHlwZW9mIGJ1dHRvbkJ5Um93W3Byb3BlcnR5XSA9PT0gJ2Jvb2xlYW4nKSA/IGJ1dHRvbkJ5Um93W3Byb3BlcnR5XSA6IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBidXR0b25CeVJvd1twcm9wZXJ0eV0gPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBidXR0b25CeVJvd1twcm9wZXJ0eV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBidXR0b25CeVJvd1twcm9wZXJ0eV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYnV0dG9uQnlSb3dbcHJvcGVydHldKHsgcHJvcGVydHksIHJvdywgdmFsdWU6IG51bGwgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXNwb25zZSA/ICh0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPiAwKSA6IGZhbHNlO1xyXG4gICAgfVxyXG59Il19
409
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1ncmlkLmV4dGVuc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvY29tcG9uZW50cy9saWIvY29lci1ncmlkL2NvZXItZ3JpZC5leHRlbnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNdkYsTUFBTSxPQUFPLGlCQUFxQixTQUFRLFlBQVk7SUFKdEQ7O1FBTUksWUFBWTtRQUNPLFVBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0MsVUFBVTtRQUNBLGNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLGNBQWMsQ0FBQyxDQUFDO1FBQzNELGdCQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYyxhQUFhLENBQUMsQ0FBQztRQUM3RCxvQkFBZSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxzQkFBaUIsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsc0JBQWlCLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hE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QUN0RSxDQUFDOytHQXRkUSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw2c0lBUWUsV0FBVyx1RkFDVCxhQUFhLHVGQUNiLGFBQWEsc0ZBQ2QsWUFBWSx1RkFiNUMsRUFBRTs7NEZBRUgsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxFQUFFO2lCQUNmOzhCQWlDWSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUdyaWRCdXR0b25CeVJvdywgSUdyaWRDb2x1bW4sIElHcmlkRGF0YVNvdXJjZSwgSUdyaWRJbXBvcnQsIElHcmlkSGVhZGVyQnV0dG9uLCBJR3JpZEhlYWRlckV4cG9ydEJ1dHRvbiwgSUdyaWRLZXl1cEVudGVyLCBJR3JpZFNlYXJjaCwgSUdyaWRJbnB1dFN3aXRjaENoYW5nZSwgSUdyaWRJbnB1dFRleHRib3gsIElHcmlkU29ydCwgSUdyaWRDaGVja2JveCwgSUdyaWRJbnB1dENoZWNrYm94LCBJR3JpZEhlYWRlciB9IGZyb20gXCJjb2VyLWVsZW1lbnRzL2ludGVyZmFjZXNcIjtcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvZXJDaGVja2JveCB9IGZyb20gXCIuLi8uLi9saWIvY29lci1jaGVja2JveC9jb2VyLWNoZWNrYm94LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb2VyTnVtYmVyQm94IH0gZnJvbSBcIi4uLy4uL2xpYi9jb2VyLW51bWJlcmJveC9jb2VyLW51bWJlcmJveC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29lclNlbGVjdGJveCB9IGZyb20gXCIuLi8uLi9saWIvY29lci1zZWxlY3Rib3gvY29lci1zZWxlY3Rib3guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvZXJUZXh0Qm94IH0gZnJvbSBcIi4uLy4uL2xpYi9jb2VyLXRleHRib3gvY29lci10ZXh0Ym94LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb2VyQWxlcnQsIENvbnRyb2xWYWx1ZSwgRGF0ZVRpbWUsIFNjcmVlbiwgVG9vbHMgfSBmcm9tICdjb2VyLWVsZW1lbnRzL3Rvb2xzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb2VyLWdyaWQtZXh0ZW5zaW9uJyxcclxuICAgIHRlbXBsYXRlOiAnJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29lckdyaWRFeHRlbnNpb248VD4gZXh0ZW5kcyBDb250cm9sVmFsdWUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgICAvL0luamVjdGlvbnNcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGVydCA9IGluamVjdChDb2VyQWxlcnQpO1xyXG5cclxuICAgIC8vRWxlbWVudHNcclxuICAgIHByb3RlY3RlZCBpbnB1dEZpbGUgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2lucHV0RmlsZVJlZicpO1xyXG4gICAgcHJvdGVjdGVkIGlucHV0U2VhcmNoID0gdmlld0NoaWxkLnJlcXVpcmVkPENvZXJUZXh0Qm94PignaW5wdXRTZWFyY2gnKTtcclxuICAgIHByb3RlY3RlZCBjb2VyVGV4dGJveExpc3QgPSB2aWV3Q2hpbGRyZW4oQ29lclRleHRCb3gpO1xyXG4gICAgcHJvdGVjdGVkIGNvZXJOdW1iZXJib3hMaXN0ID0gdmlld0NoaWxkcmVuKENvZXJOdW1iZXJCb3gpO1xyXG4gICAgcHJvdGVjdGVkIGNvZXJTZWxlY3Rib3hMaXN0ID0gdmlld0NoaWxkcmVuKENvZXJTZWxlY3Rib3gpO1xyXG4gICAgcHJvdGVjdGVkIGNvZXJDaGVja2JveExpc3QgPSB2aWV3Q2hpbGRyZW4oQ29lckNoZWNrYm94KTtcclxuXHJcbiAgICAvL1ZhcmlhYmxlc1xyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF92YWx1ZTogVFtdID0gW107XHJcbiAgICBwcm90ZWN0ZWQgdmFsdWVfc2lnbmFsID0gc2lnbmFsPFRbXT4oW10pO1xyXG4gICAgcHJvdGVjdGVkIF9ncmlkU2VhcmNoID0gc2lnbmFsPHN0cmluZyB8IG51bWJlcj4oJycpO1xyXG4gICAgcHJvdGVjdGVkIF9pc0xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJvdGVjdGVkIF9pc0xvYWRpbmdNZXNzYWdlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByb3RlY3RlZCBfaWQ6IHN0cmluZyA9IFRvb2xzLkdldEd1aWQoJ2NvZXItZ3JpZCcpO1xyXG4gICAgcHJvdGVjdGVkIF9leHBhbmRlZEdyb3Vwczogc3RyaW5nW10gPSBbXTtcclxuICAgIHByb3RlY3RlZCBfZW5hYmxlQW5pbWF0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIF9pbmRleEZvY3VzID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcbiAgICBwcm90ZWN0ZWQgX3NvcnQgPSBzaWduYWw8SUdyaWRTb3J0Pih7IGNvbHVtbk5hbWU6ICcnLCBkaXJlY3Rpb246ICdub25lJywgaWNvbjogJycgfSk7XHJcblxyXG4gICAgLy9HZW5lcmljIFRvb2xzXHJcbiAgICBwcm90ZWN0ZWQgR2V0TnVtZXJpY0Zvcm1hdCA9IFRvb2xzLkdldE51bWVyaWNGb3JtYXQ7XHJcbiAgICBwcm90ZWN0ZWQgR2V0RGF0ZUZvcm1hdCA9IERhdGVUaW1lLkdldERhdGVGb3JtYXQ7XHJcblxyXG4gICAgLy9JbnB1dHNcclxuICAgIHB1YmxpYyBjb2x1bW5zID0gaW5wdXQ8SUdyaWRDb2x1bW48VD5bXT4oW10pO1xyXG4gICAgcHVibGljIGNsZWFuQ29sdW1uTmFtZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gICAgQElucHV0KCkgYWRkQnV0dG9uOiBJR3JpZEhlYWRlckJ1dHRvbiA9IHsgc2hvdzogZmFsc2UgfTtcclxuICAgIEBJbnB1dCgpIGV4cG9ydEJ1dHRvbjogSUdyaWRIZWFkZXJFeHBvcnRCdXR0b24gPSB7IHNob3c6IGZhbHNlIH07XHJcbiAgICBASW5wdXQoKSBpbXBvcnRCdXR0b246IElHcmlkSGVhZGVyQnV0dG9uID0geyBzaG93OiBmYWxzZSB9O1xyXG4gICAgQElucHV0KCkgc2VhcmNoOiBJR3JpZFNlYXJjaCA9IHsgc2hvdzogZmFsc2UsIGlnbm9yZTogZmFsc2UgfTtcclxuICAgIEBJbnB1dCgpIGJ1dHRvbkJ5Um93OiBJR3JpZEJ1dHRvbkJ5Um93PFQ+ID0ge307XHJcbiAgICBASW5wdXQoKSBjaGVja2JveDogSUdyaWRDaGVja2JveCA9IHsgc2hvdzogZmFsc2UgfTtcclxuICAgIHB1YmxpYyB0b29sdGlwQnlSb3cgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICAgIHB1YmxpYyBpc0xvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyByb3dzQnlQYWdlID0gaW5wdXQ8bnVtYmVyPig1MCk7XHJcbiAgICBwdWJsaWMgZ3JvdXBCeSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgcHVibGljIHNob3dDb2x1bW5Hcm91cGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHVibGljIHJvd3NCeUdyb3VwID0gaW5wdXQ8bnVtYmVyPig1MCk7XHJcbiAgICBwdWJsaWMgaXNJbnZpc2libGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwdWJsaWMgc2hvd0Zvb3RlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gICAgcHVibGljIHdpZHRoID0gaW5wdXQ8c3RyaW5nPignMTAwJScpO1xyXG4gICAgcHVibGljIE1pbldpZHRoID0gaW5wdXQ8c3RyaW5nPignMjUwcHgnKTtcclxuICAgIHB1YmxpYyBNYXhXaWR0aCA9IGlucHV0PHN0cmluZz4oJzEwMCUnKTtcclxuICAgIHB1YmxpYyBoZWlnaHQgPSBpbnB1dDxzdHJpbmc+KCczNTBweCcpO1xyXG4gICAgcHVibGljIG1pbkhlaWdodCA9IGlucHV0PHN0cmluZz4oJzE0MHB4Jyk7XHJcbiAgICBwdWJsaWMgbWF4SGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMTAwdmgnKTtcclxuICAgIHB1YmxpYyBtYXJnaW4gPSBpbnB1dDxzdHJpbmc+KCdhdXRvJyk7XHJcbiAgICBwdWJsaWMgZW5hYmxlU29ydCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gICAgcHVibGljIGVuYWJsZVJvd0ZvY3VzID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gICAgLy9PdXRwdXRzXHJcbiAgICBwdWJsaWMgb25DbGlja0FkZCA9IG91dHB1dDx2b2lkPigpO1xyXG4gICAgcHVibGljIG9uQ2xpY2tJbXBvcnQgPSBvdXRwdXQ8SUdyaWRJbXBvcnQ8VD4+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja0V4cG9ydCA9IG91dHB1dDxUW10+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja1JvdyA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uRG91YmxlQ2xpY2tSb3cgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrRGVsZXRlUm93ID0gb3V0cHV0PFQ+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja0VkaXRSb3cgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrR29Sb3cgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbktleXVwRW50ZXIgPSBvdXRwdXQ8SUdyaWRLZXl1cEVudGVyPigpO1xyXG4gICAgcHVibGljIG9uS2V5dXBFbnRlckxhc3QgPSBvdXRwdXQ8dm9pZD4oKTtcclxuICAgIHB1YmxpYyBvblN3aXRjaENoYW5nZSA9IG91dHB1dDxJR3JpZElucHV0U3dpdGNoQ2hhbmdlPFQ+PigpO1xyXG4gICAgcHVibGljIG9uVGV4dGJveENoYW5nZSA9IG91dHB1dDxJR3JpZElucHV0VGV4dGJveDxUPj4oKTtcclxuICAgIHB1YmxpYyBvblNlbGVjdGJveENoYW5nZSA9IG91dHB1dDxJR3JpZElucHV0VGV4dGJveDxUPj4oKTtcclxuICAgIHB1YmxpYyBvbkNoZWNrYm94Q2hhbmdlID0gb3V0cHV0PElHcmlkSW5wdXRDaGVja2JveDxUPj4oKTtcclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgX2lzRGlzYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCgpIHx8IHRoaXMuaXNMb2FkaW5nKCkgfHwgdGhpcy5pc0ludmlzaWJsZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy9jb21wdXRlZFxyXG4gICAgcHJvdGVjdGVkIF9pc0dyb3VwZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSgpLmxlbmd0aCA+IDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL2dldHRlclxyXG4gICAgcHJvdGVjdGVkIGdldCBfaGVpZ2h0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7XHJcblxyXG4gICAgICAgIGlmIChoZWlnaHQgPT0gJ2Z1bGwnIHx8IGhlaWdodCA9PSAnZnVsbC1mb3JtJykge1xyXG4gICAgICAgICAgICBjb25zdCBUT09MQkFSID0gNDU7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBR0VfSEVBREVSID0gNzA7XHJcbiAgICAgICAgICAgIGNvbnN0IEZPUk0gPSAoaGVpZ2h0ID09ICdmdWxsLWZvcm0nKSA/IDcwIDogMDtcclxuICAgICAgICAgICAgY29uc3QgR1JJRF9IRUFERVIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLl9pZH0taGVhZGVyYCkhO1xyXG4gICAgICAgICAgICBjb25zdCBIRUFERVIgPSAoR1JJRF9IRUFERVIgJiYgR1JJRF9IRUFERVIuY2hpbGRyZW4ubGVuZ3RoID4gMCkgPyA1MCA6IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IE1BUkdJTiA9IDMwO1xyXG4gICAgICAgICAgICBjb25zdCBQQURESU5HID0gMjA7XHJcbiAgICAgICAgICAgIGNvbnN0IEZPT1RFUiA9IHRoaXMuc2hvd0Zvb3RlcigpID8gMjQuNSA6IDA7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IChTY3JlZW4uV0lORE9XX0hFSUdIVCAtIFRPT0xCQVIgLSBQQUdFX0hFQURFUiAtIE1BUkdJTiAtIEZPUk0gLSBIRUFERVIgLSBQQURESU5HIC0gRk9PVEVSKSArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL2dldHRlclxyXG4gICAgcHJvdGVjdGVkIGdldCBfb25seU9uZUNoZWNrKCkge1xyXG4gICAgICAgIHJldHVybiBUb29scy5Jc05vdE51bGwodGhpcy5jaGVja2JveC5vbmx5T25lQ2hlY2spICYmIHRoaXMuY2hlY2tib3gub25seU9uZUNoZWNrO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgVG9vbHMuU2xlZXAoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fZW5hYmxlQW5pbWF0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0xvYWRpbmdNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9Db250cm9sVmFsdWVBY2Nlc3NvclxyXG4gICAgcHVibGljIG92ZXJyaWRlIFNldFZhbHVlKHZhbHVlOiBUW10pOiB2b2lkIHtcclxuICAgICAgICBsZXQgaW5kZXhSb3cgPSAwO1xyXG4gICAgICAgIGlmKCFUb29scy5Jc05vdE51bGwodmFsdWUpKSB2YWx1ZSA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UodmFsdWUpLm1hcCgoaXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHsgY2hlY2tlZDogZmFsc2UgfSwgeyAuLi5pdGVtIH0sIHsgaW5kZXhSb3c6IGluZGV4Um93KysgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLl9VcGRhdGVWYWx1ZShkYXRhU291cmNlKTtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgdGhpcy52YWx1ZV9zaWduYWwuc2V0KGRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL0NvbnRyb2xWYWx1ZUFjY2Vzc29yXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogVFtdKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGluZGV4Um93ID0gMDtcclxuICAgICAgICBpZighVG9vbHMuSXNOb3ROdWxsKHZhbHVlKSkgdmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKHZhbHVlKS5tYXAoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7IGNoZWNrZWQ6IGZhbHNlIH0sIHsgLi4uaXRlbSB9LCB7IGluZGV4Um93OiBpbmRleFJvdysrIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBkYXRhU291cmNlO1xyXG4gICAgICAgIHRoaXMudmFsdWVfc2lnbmFsLnNldChkYXRhU291cmNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgIC8vY29tcHV0ZWRcclxuICAgICBwcm90ZWN0ZWQgZ3JpZENvbHVtbnMgPSBjb21wdXRlZDxJR3JpZEhlYWRlcltdPigoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgU0VUX0NPTFVNTlMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgICAgICAgLy9IYXMgZmlsdGVyIGNvbHVtbnM/XHJcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB7IHByb3BlcnR5IH0gb2YgdGhpcy5jb2x1bW5zKCkpIHtcclxuICAgICAgICAgICAgICAgIFNFVF9DT0xVTU5TLmFkZChwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vR2V0IGFsbCBjb2x1bW5zXHJcbiAgICAgICAgZWxzZSBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnZhbHVlX3NpZ25hbCgpKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gcm93KSB7XHJcbiAgICAgICAgICAgICAgICBTRVRfQ09MVU1OUy5hZGQocHJvcGVydHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1JlbW92ZSBpbmRleFJvdyBjb2x1bW5cclxuICAgICAgICBpZiAoU0VUX0NPTFVNTlMuaGFzKCdpbmRleFJvdycpKSB7XHJcbiAgICAgICAgICAgIFNFVF9DT0xVTU5TLmRlbGV0ZSgnaW5kZXhSb3cnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vUmVtb3ZlIGdyb3VwQnkgY29sdW1uXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzR3JvdXBlZCgpICYmICF0aGlzLnNob3dDb2x1bW5Hcm91cGVkKCkgJiYgU0VUX0NPTFVNTlMuaGFzKHRoaXMuZ3JvdXBCeSgpKSkge1xyXG4gICAgICAgICAgICBTRVRfQ09MVU1OUy5kZWxldGUodGhpcy5ncm91cEJ5KCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9TZXQgaW5kZXggY29sdW1uXHJcbiAgICAgICAgbGV0IGluZGV4Q29sdW1uID0gMDtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShTRVRfQ09MVU1OUykubWFwKHByb3BlcnR5ID0+IFRvb2xzLkJyZWFrUmVmZXJlbmNlPElHcmlkSGVhZGVyPih7XHJcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IHByb3BlcnR5LFxyXG4gICAgICAgICAgICBpbmRleENvbHVtbjogaW5kZXhDb2x1bW4rKyxcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX0dldENvbHVtbkNvbmZpZyhwcm9wZXJ0eSk/LndpZHRoIHx8ICdhdXRvJ1xyXG4gICAgICAgIH0pKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgZ3JpZERhdGFTb3VyY2UgPSBjb21wdXRlZDxJR3JpZERhdGFTb3VyY2VbXT4oKCkgPT4ge1xyXG4gICAgICAgIGxldCBsaXN0ID0gdGhpcy5ncmlkRGF0YVNvdXJjZUZpbHRlcmVkKCk7XHJcblxyXG4gICAgICAgIC8vSXQncyBHcm91cGVkP1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0dyb3VwZWQoKSkge1xyXG4gICAgICAgICAgICAvL2xldCBpbmRleFJvdyA9IDA7XHJcbiAgICAgICAgICAgIGxldCBpbmRleEdyb3VwID0gMDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IFNFVF9DT0xVTU4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgbGlzdCBhcyBhbnkpIHtcclxuICAgICAgICAgICAgICAgIFNFVF9DT0xVTU4uYWRkKHJvd1t0aGlzLmdyb3VwQnkoKV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBEQVRBX1NPVVJDRV9HUk9QVUVEID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIFNFVF9DT0xVTU4pIHtcclxuICAgICAgICAgICAgICAgIERBVEFfU09VUkNFX0dST1BVRUQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBCeTogY29sdW1uLFxyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4R3JvdXA6IGluZGV4R3JvdXArKyxcclxuICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IGxpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW1bdGhpcy5ncm91cEJ5KCldID09IGNvbHVtbikubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvd3M6IFsuLi5saXN0XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW1bdGhpcy5ncm91cEJ5KCldID09IGNvbHVtbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGljZSgwLCB0aGlzLnJvd3NCeUdyb3VwKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vLm1hcCgoaXRlbTogYW55KSA9PiBPYmplY3QuYXNzaWduKHsgaW5kZXhSb3c6IGluZGV4Um93KysgfSwgaXRlbSkpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9SZXNwb25zZSBieSBncm91cFxyXG4gICAgICAgICAgICByZXR1cm4gWy4uLkRBVEFfU09VUkNFX0dST1BVRURdLnNwbGljZSgwLCB0aGlzLnJvd3NCeVBhZ2UoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1Jlc3BvbnNlXHJcbiAgICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgICAgIGdyb3VwQnk6ICdOb3QgR3JvdXBlZCcsXHJcbiAgICAgICAgICAgIGluZGV4R3JvdXA6IC0xLFxyXG4gICAgICAgICAgICBsZW5ndGg6IC0xLFxyXG4gICAgICAgICAgICByb3dzOiBbLi4ubGlzdF0uc3BsaWNlKDAsIHRoaXMucm93c0J5UGFnZSgpKVxyXG4gICAgICAgIH1dO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIC8vY29tcHV0ZWRcclxuICAgIHByb3RlY3RlZCBncmlkRGF0YVNvdXJjZUZpbHRlcmVkID0gY29tcHV0ZWQ8VFtdPigoKSA9PiB7XHJcbiAgICAgICAgbGV0IGxpc3Q6IFRbXSA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UodGhpcy52YWx1ZV9zaWduYWwoKSk7XHJcblxyXG4gICAgICAgIC8vSWdub3JlIEZpbHRlclxyXG4gICAgICAgIGlmICh0aGlzLl9ncmlkU2VhcmNoKCkgPT0gJycgfHwgdGhpcy5zZWFyY2g/Lmlnbm9yZSkge1xyXG4gICAgICAgICAgICBsaXN0ID0gZGF0YVNvdXJjZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vRmlsdGVyIGJ5IHNlYXJjaFxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBTRVRfUk9XID0gbmV3IFNldDxudW1iZXI+KCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgbGlzdEZpbHRlcmVkOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgeyBjb2x1bW5OYW1lIH0gb2YgdGhpcy5ncmlkQ29sdW1ucygpKSB7XHJcbiAgICAgICAgICAgICAgICBsaXN0RmlsdGVyZWQgPSBkYXRhU291cmNlLmZpbHRlcigoaXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICFTRVRfUk9XLmhhcyhpdGVtWydpbmRleFJvdyddKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIFN0cmluZyhpdGVtW1Rvb2xzLkZpcnN0Q2hhclRvTG93ZXIoY29sdW1uTmFtZSldKS50cmltKCkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhTdHJpbmcodGhpcy5fZ3JpZFNlYXJjaCgpKS50cmltKCkudG9VcHBlckNhc2UoKSlcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IHsgaW5kZXhSb3cgfSBvZiBsaXN0RmlsdGVyZWQgYXMgYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgU0VUX1JPVy5hZGQoaW5kZXhSb3cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxpc3QgPSBUb29scy5CcmVha1JlZmVyZW5jZShsaXN0LmNvbmNhdChsaXN0RmlsdGVyZWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFRvb2xzLkJyZWFrUmVmZXJlbmNlKGxpc3QpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIC8qKiBHZXQgQ29sdW1uIENvbmZpZ3VyYXRpb24gKi9cclxuICAgIHByb3RlY3RlZCBfR2V0Q29sdW1uQ29uZmlnID0gKGNvbHVtbk5hbWU6IHN0cmluZyk6IElHcmlkQ29sdW1uPFQ+IHwgdW5kZWZpbmVkID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zKCkuZmluZCh4ID0+IHgucHJvcGVydHkucmVwbGFjZUFsbCgnICcsICcnKS50b1VwcGVyQ2FzZSgpID09IGNvbHVtbk5hbWUucmVwbGFjZUFsbCgnICcsICcnKS50b1VwcGVyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIENsZWFuIE5hbWUgb3IgZ2V0IGFsaWFzICovXHJcbiAgICBwcm90ZWN0ZWQgX0dldENvbHVtbk5hbWUgPSAoY29sdW1uTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgICBjb25zdCBjb2x1bW5Db25maWcgPSB0aGlzLl9HZXRDb2x1bW5Db25maWcoY29sdW1uTmFtZSk7XHJcblxyXG4gICAgICAgIC8vR2V0IEFsaWFzXHJcbiAgICAgICAgaWYgKGNvbHVtbkNvbmZpZyAmJiBjb2x1bW5Db25maWcuYWxpYXMgJiYgY29sdW1uQ29uZmlnLmFsaWFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbkNvbmZpZy5hbGlhcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vQ2xlYW4gaGVhZGVyTmFtZVxyXG4gICAgICAgIGlmICh0aGlzLmNsZWFuQ29sdW1uTmFtZSgpICYmIGNvbHVtbk5hbWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb2x1bW5OYW1lID0gVG9vbHMuRmlyc3RDaGFyVG9Mb3dlcihjb2x1bW5OYW1lKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNoYXJBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgY2hhciBvZiBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZihjaGFyID09PSBjaGFyLnRvVXBwZXJDYXNlKCkpIGNoYXJBcnJheS5wdXNoKCcgJyk7XHJcbiAgICAgICAgICAgICAgICBjaGFyQXJyYXkucHVzaChjaGFyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhckFycmF5WzBdID0gY2hhckFycmF5WzBdLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGNvbHVtbk5hbWUgPSBjaGFyQXJyYXkuam9pbignJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY29sdW1uTmFtZS50cmltKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9HZXRTaG9ydEljb24gPSAoY29sdW1uTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnQoKS5jb2x1bW5OYW1lID09IGNvbHVtbk5hbWUgPyB0aGlzLl9zb3J0KCkuaWNvbiA6ICcnO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfR2V0SWQgPSAoaW5kZXhSb3c6IG51bWJlciwgaW5kZXhDb2x1bW46IG51bWJlciwgc3VmZml4OiBzdHJpbmcgPSAnJyk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKHN1ZmZpeC5sZW5ndGggPiAwKSBzdWZmaXggPSBgLSR7c3VmZml4fWA7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX2lkfS1yb3cke2luZGV4Um93fWNvbHVtbiR7aW5kZXhDb2x1bW59JHtzdWZmaXh9YDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgX0dldENlbGxWYWx1ZSA9IChyb3c6IGFueSwgY29sdW1uTmFtZTogc3RyaW5nKTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4gcm93W1Rvb2xzLkZpcnN0Q2hhclRvTG93ZXIoY29sdW1uTmFtZSkucmVwbGFjZUFsbCgnICcsICcnKV07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9HZXRUb29sdGlwID0gKHByZWZpeDogc3RyaW5nLCByb3c6IGFueSwgc3VmZml4OiBzdHJpbmcgPSAnJyk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgbGV0IGNvbHVtbiA9IFRvb2xzLkZpcnN0Q2hhclRvTG93ZXIodGhpcy50b29sdGlwQnlSb3coKSkucmVwbGFjZUFsbCgnICcsICcnKTtcclxuXHJcbiAgICAgICAgaWYgKHN1ZmZpeC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHN1ZmZpeCA9IGAgJHtzdWZmaXh9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXBCeVJvdygpLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyBgJHtwcmVmaXh9ICR7cm93W2NvbHVtbl19JHtzdWZmaXh9YFxyXG4gICAgICAgICAgICA6IGAke3ByZWZpeH0ke3N1ZmZpeH1gO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfSGlkZVJvdyA9IChncm91cDogSUdyaWREYXRhU291cmNlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLl9pc0dyb3VwZWQoKSA/ICEodGhpcy5fZXhwYW5kZWRHcm91cHMuc29tZSh4ID0+IHggPT0gZ3JvdXAuZ3JvdXBCeSkpIDogZmFsc2UpXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9Jc0NlbGxUeXBlKHByb3BlcnR5OiBzdHJpbmcsIGRhdGE6IGFueSwgdHlwZTogJ251bWJlcicgfCAnZGF0ZScgfCAndGVtcGxhdGUnIHwgJ2NvZXJUZXh0Ym94JyB8ICdjb2VyTnVtYmVyYm94JyB8ICdjb2VyU2VsZWN0Ym94JyAgfCAnY29lclN3aXRjaCcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBjb2x1bW5Db25maWcgPSB0aGlzLl9HZXRDb2x1bW5Db25maWcocHJvcGVydHkpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtwcm9wZXJ0eV07XHJcbiAgICAgICAgY29uc3Qgcm93ID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UoZGF0YSk7XHJcblxyXG4gICAgICAgIGlmIChjb2x1bW5Db25maWcpIHtcclxuICAgICAgICAgICAgaWYgKFsnY29lclRleHRib3gnLCAnY29lck51bWJlcmJveCcsICdjb2VyU2VsZWN0Ym94JywgJ2NvZXJTd2l0Y2gnXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRDb25maWc6IGFueSA9IGNvbHVtbkNvbmZpZztcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gaW5wdXRDb25maWcuaGFzT3duUHJvcGVydHkodHlwZSlcclxuICAgICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgaW5wdXRDb25maWdbdHlwZV0gPT09ICdmdW5jdGlvbidcclxuICAgICAgICAgICAgICAgICAgICAmJiBpbnB1dENvbmZpZ1t0eXBlXSh7IHByb3BlcnR5LCByb3csIHZhbHVlIH0pLmlzSW5wdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2Ugc3dpdGNoKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbHVtbkNvbmZpZy50eXBlTnVtYmVyID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb2x1bW5Db25maWcudHlwZU51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjb2x1bW5Db25maWcudHlwZU51bWJlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IChkYXRhID09PSBudWxsKSA/IGZhbHNlIDogY29sdW1uQ29uZmlnLnR5cGVOdW1iZXIoeyBwcm9wZXJ0eSwgcm93LCB2YWx1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW5Db25maWcudHlwZURhdGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbHVtbkNvbmZpZy50eXBlRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjb2x1bW5Db25maWcudHlwZURhdGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAoZGF0YSA9PT0gbnVsbCkgPyBmYWxzZSA6IGNvbHVtbkNvbmZpZy50eXBlRGF0ZSh7IHByb3BlcnR5LCByb3csIHZhbHVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAndGVtcGxhdGUnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9ICh0eXBlb2YgY29sdW1uQ29uZmlnLnRlbXBsYXRlID09PSAnc3RyaW5nJykgfHwgKHR5cGVvZiBjb2x1bW5Db25maWcudGVtcGxhdGUgPT09ICdmdW5jdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9Jc0NlbGxDb2xvcihwcm9wZXJ0eTogc3RyaW5nLCBkYXRhOiBhbnksIGNvbG9yOiAnY29sb3JCbHVlJyB8ICdjb2xvckdyZWVuJyB8ICdjb2xvclllbGxvdycgfCAnY29sb3JSZWQnKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY29sdW1uQ29uZmlnOiBhbnkgPSB0aGlzLl9HZXRDb2x1bW5Db25maWcocHJvcGVydHkpO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnW2NvbG9yXSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbHVtbkNvbmZpZ1tjb2xvcl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjb2x1bW5Db25maWdbY29sb3JdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbHVtbkNvbmZpZ1tjb2xvcl0oe1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LFxyXG4gICAgICAgICAgICAgICAgICAgIHJvdzogVG9vbHMuQnJlYWtSZWZlcmVuY2UoZGF0YSksXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRhdGFbcHJvcGVydHldXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBHZXRBdHRyaWJ1dGUocHJvcGVydHk6IHN0cmluZywgZGF0YTogYW55LCBhdHRyaWJ1dGU6IHN0cmluZywgdHlwZTogJ2NvZXJTd2l0Y2gnIHwgJ2NvZXJUZXh0Ym94JyB8ICdjb2VyTnVtYmVyYm94J3wgJ2NvZXJTZWxlY3Rib3gnIHwgJ2RlZmF1bC1jZWxsJyApOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkNvbmZpZyA9IHRoaXMuX0dldENvbHVtbkNvbmZpZyhwcm9wZXJ0eSk7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBUb29scy5Jc05vdE51bGwoZGF0YSkgPyBkYXRhW3Byb3BlcnR5XSA6IG51bGw7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UoZGF0YSk7XHJcblxyXG4gICAgICAgIGlmIChjb2x1bW5Db25maWcpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkZWZhdWwtY2VsbCcpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaChhdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0QWxpZ24nOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW5Db25maWc/LnRleHRBbGlnbiB8fCAnbGVmdCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZW1wbGF0ZSc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRDb25maWc6IGFueSA9IGNvbHVtbkNvbmZpZztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dENvbmZpZy5oYXNPd25Qcm9wZXJ0eShhdHRyaWJ1dGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgaW5wdXRDb25maWdbYXR0cmlidXRlXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRDb25maWdbYXR0cmlidXRlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHR5cGVvZiBpbnB1dENvbmZpZ1thdHRyaWJ1dGVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0Q29uZmlnW2F0dHJpYnV0ZV0oeyBwcm9wZXJ0eSwgcm93LCB2YWx1ZSB9KSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBpZihbJ2NvZXJUZXh0Ym94JywgJ2NvZXJOdW1iZXJib3gnLCAnY29lclNlbGVjdGJveCcsICdjb2VyU3dpdGNoJ10uaW5jbHVkZXModHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0Q29uZmlnOiBhbnkgPSBjb2x1bW5Db25maWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRDb25maWcuaGFzT3duUHJvcGVydHkodHlwZSkgJiYgdHlwZW9mIGlucHV0Q29uZmlnW3R5cGVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0Q29uZmlnW3R5cGVdKHsgcHJvcGVydHksIHJvdywgdmFsdWUgfSlbYXR0cmlidXRlXSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgQnV0dG9uQnlSb3cocHJvcGVydHk6ICdzaG93RGVsZXRlQnV0dG9uJyB8ICdzaG93RWRpdEJ1dHRvbicgfCAnc2hvd0dvQnV0dG9uJywgZGF0YTogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXNwb25zZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbkJ5Um93OiBhbnkgPSB0aGlzLmJ1dHRvbkJ5Um93O1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IFRvb2xzLklzTm90TnVsbChkYXRhKSA/IFRvb2xzLkJyZWFrUmVmZXJlbmNlKGRhdGEpIDogbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGJ1dHRvbkJ5Um93Lmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICBpZiAocm93ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9ICh0eXBlb2YgYnV0dG9uQnlSb3dbcHJvcGVydHldID09PSAnYm9vbGVhbicpID8gYnV0dG9uQnlSb3dbcHJvcGVydHldIDogdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGJ1dHRvbkJ5Um93W3Byb3BlcnR5XSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGJ1dHRvbkJ5Um93W3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGJ1dHRvbkJ5Um93W3Byb3BlcnR5XSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBidXR0b25CeVJvd1twcm9wZXJ0eV0oeyBwcm9wZXJ0eSwgcm93LCB2YWx1ZTogbnVsbCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlID8gKHRoaXMuX3ZhbHVlICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA+IDApIDogZmFsc2U7XHJcbiAgICB9XHJcbn0iXX0=