@ng-nest/ui 15.0.11 → 15.0.13

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.
@@ -0,0 +1 @@
1
+ export declare function XParentPath(ele: HTMLElement): string[];
@@ -10,4 +10,5 @@ export * from './chunk';
10
10
  export * from './guid';
11
11
  export * from './group-by';
12
12
  export * from './resize';
13
+ export * from './parent-path';
13
14
  export * from './property';
@@ -0,0 +1,10 @@
1
+ export function XParentPath(ele) {
2
+ let path = [];
3
+ let nowEle = ele;
4
+ while (nowEle.parentNode != null) {
5
+ path.push(nowEle.localName);
6
+ nowEle = nowEle.parentNode;
7
+ }
8
+ return path;
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyZW50LXBhdGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS9jb3JlL2Z1bmN0aW9ucy9wYXJlbnQtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQWdCO0lBQzFDLElBQUksSUFBSSxHQUFhLEVBQUUsQ0FBQztJQUN4QixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDakIsT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRTtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQXlCLENBQUM7S0FDM0M7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gWFBhcmVudFBhdGgoZWxlOiBIVE1MRWxlbWVudCk6IHN0cmluZ1tdIHtcclxuICBsZXQgcGF0aDogc3RyaW5nW10gPSBbXTtcclxuICBsZXQgbm93RWxlID0gZWxlO1xyXG4gIHdoaWxlIChub3dFbGUucGFyZW50Tm9kZSAhPSBudWxsKSB7XHJcbiAgICBwYXRoLnB1c2gobm93RWxlLmxvY2FsTmFtZSk7XHJcbiAgICBub3dFbGUgPSBub3dFbGUucGFyZW50Tm9kZSBhcyBIVE1MRWxlbWVudDtcclxuICB9XHJcbiAgcmV0dXJuIHBhdGg7XHJcbn1cclxuIl19
@@ -10,5 +10,6 @@ export * from './chunk';
10
10
  export * from './guid';
11
11
  export * from './group-by';
12
12
  export * from './resize';
13
+ export * from './parent-path';
13
14
  export * from './property';
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2NvcmUvZnVuY3Rpb25zL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbnZlcnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RhdGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZsZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Ryb3AnO1xyXG5leHBvcnQgKiBmcm9tICcuL3JlbW92ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vb3JkZXItYnknO1xyXG5leHBvcnQgKiBmcm9tICcuL2Nsb25lLWRlZXAnO1xyXG5leHBvcnQgKiBmcm9tICcuL2hhcy1pbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vY2h1bmsnO1xyXG5leHBvcnQgKiBmcm9tICcuL2d1aWQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLWJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9yZXNpemUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb3BlcnR5JztcclxuIl19
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2NvcmUvZnVuY3Rpb25zL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbnZlcnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RhdGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZsZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Ryb3AnO1xyXG5leHBvcnQgKiBmcm9tICcuL3JlbW92ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vb3JkZXItYnknO1xyXG5leHBvcnQgKiBmcm9tICcuL2Nsb25lLWRlZXAnO1xyXG5leHBvcnQgKiBmcm9tICcuL2hhcy1pbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vY2h1bmsnO1xyXG5leHBvcnQgKiBmcm9tICcuL2d1aWQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLWJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9yZXNpemUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3BhcmVudC1wYXRoJztcclxuZXhwb3J0ICogZnJvbSAnLi9wcm9wZXJ0eSc7XHJcbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, ViewChild, Input } from '@angular/core';
2
2
  import { XTableBodyPrefix, XTableBodyProperty } from './table.property';
3
- import { removeNgTag, XIsChange, XResize, stripTags } from '@ng-nest/ui/core';
3
+ import { removeNgTag, XIsChange, XResize, stripTags, XParentPath } from '@ng-nest/ui/core';
4
4
  import { Subject, fromEvent } from 'rxjs';
5
5
  import { DOCUMENT } from '@angular/common';
6
6
  import { takeUntil } from 'rxjs/operators';
@@ -182,9 +182,9 @@ export class XTableBodyComponent extends XTableBodyProperty {
182
182
  return;
183
183
  this.activatedRow = row;
184
184
  if (this.table.allowCheckRow && this.table.rowChecked) {
185
- if (!Array.from(event.path).find((x) => x.localName == 'x-checkbox')) {
185
+ if (!XParentPath(event.target).includes('x-checkbox')) {
186
186
  row[this.table.rowChecked.id] = !row[this.table.rowChecked.id];
187
- this.table.bodyChecked(row[this.table.rowChecked.id], this.table.rowChecked);
187
+ this.table.bodyChecked(row[this.table.rowChecked.id], this.table.rowChecked, row);
188
188
  }
189
189
  }
190
190
  this.activatedRowChange.emit(row);
@@ -199,10 +199,10 @@ export class XTableBodyComponent extends XTableBodyProperty {
199
199
  }
200
200
  }
201
201
  /** @nocollapse */ XTableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XTableBodyComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }, { token: i1.XConfigService }], target: i0.ɵɵFactoryTarget.Component });
202
- /** @nocollapse */ XTableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XTableBodyComponent, selector: "x-table-body", inputs: { table: "table" }, viewQueries: [{ propertyName: "tbody", first: true, predicate: ["tbody"], descendants: true }, { propertyName: "virtualBody", first: true, predicate: ["virtualBody"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<tbody #tbody>\r\n <ng-container *ngIf=\"cellConfig; else virtualScrollTpl\">\r\n <tr *ngFor=\"let row of data; index as i; trackBy: trackByItem\" [style.gridTemplateColumns]=\"cellConfig.gridTemplateColumns\">\r\n <td\r\n *ngFor=\"let column of cellConfig.cells; index as j\"\r\n [title]=\"getTitle(row, column)\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [style.grid-area]=\"column.gridArea\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"cellTpl; context: { column: column, row: row, i: i }\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <x-empty *ngIf=\"isEmpty && level === 0\"></x-empty>\r\n</tbody>\r\n\r\n<ng-template #virtualScrollTpl>\r\n <cdk-virtual-scroll-viewport\r\n #virtualBody\r\n *ngIf=\"virtualScroll; else bodyTpl\"\r\n [itemSize]=\"getItemSize\"\r\n [minBufferPx]=\"minBufferPx\"\r\n [maxBufferPx]=\"maxBufferPx\"\r\n [style.height.px]=\"bodyHeight\"\r\n >\r\n <tr\r\n *cdkVirtualFor=\"let row of data; let index = index; trackBy: trackByItem\"\r\n [class.x-table-activated]=\"allowSelectRow && activatedRow?.id === row.id\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n (click)=\"rowClick($event, row)\"\r\n >\r\n <!-- rowHeight \u4E3A 0 \u7684\u65F6\u5019\uFF0Cindex \u4E0B\u6807\u83B7\u53D6\u4E0D\u5230 -->\r\n <ng-container *ngTemplateOutlet=\"rowTpl; context: { row: row, i: getIndex(index, row) }\"></ng-container>\r\n </tr>\r\n </cdk-virtual-scroll-viewport>\r\n</ng-template>\r\n\r\n<ng-template #bodyTpl>\r\n <ng-container *ngFor=\"let row of data; index as i; trackBy: trackByItem\">\r\n <tr\r\n [class.x-table-activated]=\"allowSelectRow && activatedRow?.id === row.id\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n (click)=\"rowClick($event, row)\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"rowTpl; context: { row: row, i: i }\"></ng-container>\r\n </tr>\r\n <div class=\"x-table-children\" [class.x-table-expandTpl]=\"expandTpl\" *ngIf=\"table.treeTable && row.children && row.expanded\">\r\n <x-table-body\r\n [data]=\"row.children\"\r\n [columns]=\"table.columns\"\r\n [itemSize]=\"table.itemSize\"\r\n [rowHeight]=\"table.rowHeight\"\r\n [columnTpl]=\"table.bodyColumnTpl\"\r\n [allowSelectRow]=\"table.allowSelectRow\"\r\n [rowClass]=\"table.rowClass\"\r\n [cellConfig]=\"table.cellConfig?.tbody\"\r\n [(activatedRow)]=\"table.activatedRow\"\r\n [expandedAll]=\"expandedAll\"\r\n [expandTpl]=\"expandTpl\"\r\n (activatedRowChange)=\"table.activatedRowChange.emit($event)\"\r\n [level]=\"row.level! + 1\"\r\n [table]=\"table\"\r\n ></x-table-body>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #rowTpl let-row=\"row\" let-i=\"i\">\r\n <ng-container *ngIf=\"level > 0 && expandTpl\">\r\n <ng-container *xOutlet=\"expandTpl; context: { $row: row, $index: i, $level: level }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"level === 0 || !expandTpl\">\r\n <ng-container *xOutlet=\"rowDefault; context: { row: row, i: i, level: level }\"></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #rowDefault let-row=\"row\" let-i=\"i\">\r\n <ng-container *ngFor=\"let column of columns; index as j; trackBy: trackByItem\">\r\n <td\r\n [style.width.px]=\"column.width\"\r\n [style.flex]=\"getFlex(column)\"\r\n [title]=\"getTitle(row, column)\"\r\n [class.x-table-dragging]=\"column.dragging\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [ngClass]=\"!rowClass ? {} : rowClass(row, i)\"\r\n >\r\n <ng-template *ngTemplateOutlet=\"cellTpl; context: { column: column, row: row, i: i }\"></ng-template>\r\n </td>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #cellTpl let-column=\"column\" let-row=\"row\" let-i=\"i\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <x-checkbox\r\n [data]=\"[{ id: true, label: '' }]\"\r\n [(ngModel)]=\"row[column.id]\"\r\n [disabled]=\"row.disabled\"\r\n (ngModelChange)=\"table.bodyChecked($event, column)\"\r\n ></x-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'index'\">\r\n <div>{{ table.getIndex(i) }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"table.isExpandColumn(column)\">\r\n <x-button\r\n [class.is-leaf]=\"!row.leaf\"\r\n [class.is-expanded]=\"row.expanded\"\r\n (click)=\"onExpanded($event, row)\"\r\n icon=\"fto-chevron-right\"\r\n size=\"mini\"\r\n onlyIcon\r\n class=\"x-table-expand\"\r\n [style.margin-left.rem]=\"row.level - 0.5\"\r\n ></x-button>\r\n </ng-container>\r\n <ng-container *xOutlet=\"columnTpl[column.id]; context: { $column: column, $row: row, $index: table.getIndex(i) }\">\r\n <ng-container *xOutlet=\"table.bodyTdTpl; context: { $column: column, $row: row, $index: table.getIndex(i) }\">\r\n <div [innerHTML]=\"row[column.id]\" [style.text-align]=\"column.textAlign\"></div>\r\n {{ table.rowExpandNext && table.rowExpandNext.id === column.id ? 'x-table-body-level-' + row.level : '' }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: i5.XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: i6.XButtonComponent, selector: "x-button" }, { kind: "directive", type: i7.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i7.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i7.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i8.XEmptyComponent, selector: "x-empty" }, { kind: "component", type: XTableBodyComponent, selector: "x-table-body", inputs: ["table"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
202
+ /** @nocollapse */ XTableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XTableBodyComponent, selector: "x-table-body", inputs: { table: "table" }, viewQueries: [{ propertyName: "tbody", first: true, predicate: ["tbody"], descendants: true }, { propertyName: "virtualBody", first: true, predicate: ["virtualBody"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<tbody #tbody>\r\n <ng-container *ngIf=\"cellConfig; else virtualScrollTpl\">\r\n <tr *ngFor=\"let row of data; index as i; trackBy: trackByItem\" [style.gridTemplateColumns]=\"cellConfig.gridTemplateColumns\">\r\n <td\r\n *ngFor=\"let column of cellConfig.cells; index as j\"\r\n [title]=\"getTitle(row, column)\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [style.grid-area]=\"column.gridArea\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"cellTpl; context: { column: column, row: row, i: i }\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <x-empty *ngIf=\"isEmpty && level === 0\"></x-empty>\r\n</tbody>\r\n\r\n<ng-template #virtualScrollTpl>\r\n <cdk-virtual-scroll-viewport\r\n #virtualBody\r\n *ngIf=\"virtualScroll; else bodyTpl\"\r\n [itemSize]=\"getItemSize\"\r\n [minBufferPx]=\"minBufferPx\"\r\n [maxBufferPx]=\"maxBufferPx\"\r\n [style.height.px]=\"bodyHeight\"\r\n >\r\n <tr\r\n *cdkVirtualFor=\"let row of data; let index = index; trackBy: trackByItem\"\r\n [class.x-table-activated]=\"allowSelectRow && activatedRow?.id === row.id\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n (click)=\"rowClick($event, row)\"\r\n >\r\n <!-- rowHeight \u4E3A 0 \u7684\u65F6\u5019\uFF0Cindex \u4E0B\u6807\u83B7\u53D6\u4E0D\u5230 -->\r\n <ng-container *ngTemplateOutlet=\"rowTpl; context: { row: row, i: getIndex(index, row) }\"></ng-container>\r\n </tr>\r\n </cdk-virtual-scroll-viewport>\r\n</ng-template>\r\n\r\n<ng-template #bodyTpl>\r\n <ng-container *ngFor=\"let row of data; index as i; trackBy: trackByItem\">\r\n <tr\r\n [class.x-table-activated]=\"allowSelectRow && activatedRow?.id === row.id\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n (click)=\"rowClick($event, row)\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"rowTpl; context: { row: row, i: i }\"></ng-container>\r\n </tr>\r\n <div class=\"x-table-children\" [class.x-table-expandTpl]=\"expandTpl\" *ngIf=\"table.treeTable && row.children && row.expanded\">\r\n <x-table-body\r\n [data]=\"row.children\"\r\n [columns]=\"table.columns\"\r\n [itemSize]=\"table.itemSize\"\r\n [rowHeight]=\"table.rowHeight\"\r\n [columnTpl]=\"table.bodyColumnTpl\"\r\n [allowSelectRow]=\"table.allowSelectRow\"\r\n [rowClass]=\"table.rowClass\"\r\n [cellConfig]=\"table.cellConfig?.tbody\"\r\n [(activatedRow)]=\"table.activatedRow\"\r\n [expandedAll]=\"expandedAll\"\r\n [expandTpl]=\"expandTpl\"\r\n (activatedRowChange)=\"table.activatedRowChange.emit($event)\"\r\n [level]=\"row.level! + 1\"\r\n [table]=\"table\"\r\n ></x-table-body>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #rowTpl let-row=\"row\" let-i=\"i\">\r\n <ng-container *ngIf=\"level > 0 && expandTpl\">\r\n <ng-container *xOutlet=\"expandTpl; context: { $row: row, $index: i, $level: level }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"level === 0 || !expandTpl\">\r\n <ng-container *xOutlet=\"rowDefault; context: { row: row, i: i, level: level }\"></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #rowDefault let-row=\"row\" let-i=\"i\">\r\n <ng-container *ngFor=\"let column of columns; index as j; trackBy: trackByItem\">\r\n <td\r\n [style.width.px]=\"column.width\"\r\n [style.flex]=\"getFlex(column)\"\r\n [title]=\"getTitle(row, column)\"\r\n [class.x-table-dragging]=\"column.dragging\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [ngClass]=\"!rowClass ? {} : rowClass(row, i)\"\r\n >\r\n <ng-template *ngTemplateOutlet=\"cellTpl; context: { column: column, row: row, i: i }\"></ng-template>\r\n </td>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #cellTpl let-column=\"column\" let-row=\"row\" let-i=\"i\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <x-checkbox\r\n [data]=\"[{ id: true, label: '' }]\"\r\n [(ngModel)]=\"row[column.id]\"\r\n [disabled]=\"row.disabled\"\r\n (ngModelChange)=\"table.bodyChecked($event, column, row)\"\r\n ></x-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'index'\">\r\n <div>{{ table.getIndex(i) }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"table.isExpandColumn(column)\">\r\n <x-button\r\n [class.is-leaf]=\"!row.leaf\"\r\n [class.is-expanded]=\"row.expanded\"\r\n (click)=\"onExpanded($event, row)\"\r\n icon=\"fto-chevron-right\"\r\n size=\"mini\"\r\n onlyIcon\r\n class=\"x-table-expand\"\r\n [style.margin-left.rem]=\"row.level - 0.5\"\r\n ></x-button>\r\n </ng-container>\r\n <ng-container *xOutlet=\"columnTpl[column.id]; context: { $column: column, $row: row, $index: table.getIndex(i) }\">\r\n <ng-container *xOutlet=\"table.bodyTdTpl; context: { $column: column, $row: row, $index: table.getIndex(i) }\">\r\n <div [innerHTML]=\"row[column.id]\" [style.text-align]=\"column.textAlign\"></div>\r\n {{ table.rowExpandNext && table.rowExpandNext.id === column.id ? 'x-table-body-level-' + row.level : '' }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: i5.XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: i6.XButtonComponent, selector: "x-button" }, { kind: "directive", type: i7.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i7.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i7.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i8.XEmptyComponent, selector: "x-empty" }, { kind: "component", type: XTableBodyComponent, selector: "x-table-body", inputs: ["table"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
203
203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XTableBodyComponent, decorators: [{
204
204
  type: Component,
205
- args: [{ selector: `${XTableBodyPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<tbody #tbody>\r\n <ng-container *ngIf=\"cellConfig; else virtualScrollTpl\">\r\n <tr *ngFor=\"let row of data; index as i; trackBy: trackByItem\" [style.gridTemplateColumns]=\"cellConfig.gridTemplateColumns\">\r\n <td\r\n *ngFor=\"let column of cellConfig.cells; index as j\"\r\n [title]=\"getTitle(row, column)\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [style.grid-area]=\"column.gridArea\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"cellTpl; context: { column: column, row: row, i: i }\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <x-empty *ngIf=\"isEmpty && level === 0\"></x-empty>\r\n</tbody>\r\n\r\n<ng-template #virtualScrollTpl>\r\n <cdk-virtual-scroll-viewport\r\n #virtualBody\r\n *ngIf=\"virtualScroll; else bodyTpl\"\r\n [itemSize]=\"getItemSize\"\r\n [minBufferPx]=\"minBufferPx\"\r\n [maxBufferPx]=\"maxBufferPx\"\r\n [style.height.px]=\"bodyHeight\"\r\n >\r\n <tr\r\n *cdkVirtualFor=\"let row of data; let index = index; trackBy: trackByItem\"\r\n [class.x-table-activated]=\"allowSelectRow && activatedRow?.id === row.id\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n (click)=\"rowClick($event, row)\"\r\n >\r\n <!-- rowHeight \u4E3A 0 \u7684\u65F6\u5019\uFF0Cindex \u4E0B\u6807\u83B7\u53D6\u4E0D\u5230 -->\r\n <ng-container *ngTemplateOutlet=\"rowTpl; context: { row: row, i: getIndex(index, row) }\"></ng-container>\r\n </tr>\r\n </cdk-virtual-scroll-viewport>\r\n</ng-template>\r\n\r\n<ng-template #bodyTpl>\r\n <ng-container *ngFor=\"let row of data; index as i; trackBy: trackByItem\">\r\n <tr\r\n [class.x-table-activated]=\"allowSelectRow && activatedRow?.id === row.id\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n (click)=\"rowClick($event, row)\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"rowTpl; context: { row: row, i: i }\"></ng-container>\r\n </tr>\r\n <div class=\"x-table-children\" [class.x-table-expandTpl]=\"expandTpl\" *ngIf=\"table.treeTable && row.children && row.expanded\">\r\n <x-table-body\r\n [data]=\"row.children\"\r\n [columns]=\"table.columns\"\r\n [itemSize]=\"table.itemSize\"\r\n [rowHeight]=\"table.rowHeight\"\r\n [columnTpl]=\"table.bodyColumnTpl\"\r\n [allowSelectRow]=\"table.allowSelectRow\"\r\n [rowClass]=\"table.rowClass\"\r\n [cellConfig]=\"table.cellConfig?.tbody\"\r\n [(activatedRow)]=\"table.activatedRow\"\r\n [expandedAll]=\"expandedAll\"\r\n [expandTpl]=\"expandTpl\"\r\n (activatedRowChange)=\"table.activatedRowChange.emit($event)\"\r\n [level]=\"row.level! + 1\"\r\n [table]=\"table\"\r\n ></x-table-body>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #rowTpl let-row=\"row\" let-i=\"i\">\r\n <ng-container *ngIf=\"level > 0 && expandTpl\">\r\n <ng-container *xOutlet=\"expandTpl; context: { $row: row, $index: i, $level: level }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"level === 0 || !expandTpl\">\r\n <ng-container *xOutlet=\"rowDefault; context: { row: row, i: i, level: level }\"></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #rowDefault let-row=\"row\" let-i=\"i\">\r\n <ng-container *ngFor=\"let column of columns; index as j; trackBy: trackByItem\">\r\n <td\r\n [style.width.px]=\"column.width\"\r\n [style.flex]=\"getFlex(column)\"\r\n [title]=\"getTitle(row, column)\"\r\n [class.x-table-dragging]=\"column.dragging\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [ngClass]=\"!rowClass ? {} : rowClass(row, i)\"\r\n >\r\n <ng-template *ngTemplateOutlet=\"cellTpl; context: { column: column, row: row, i: i }\"></ng-template>\r\n </td>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #cellTpl let-column=\"column\" let-row=\"row\" let-i=\"i\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <x-checkbox\r\n [data]=\"[{ id: true, label: '' }]\"\r\n [(ngModel)]=\"row[column.id]\"\r\n [disabled]=\"row.disabled\"\r\n (ngModelChange)=\"table.bodyChecked($event, column)\"\r\n ></x-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'index'\">\r\n <div>{{ table.getIndex(i) }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"table.isExpandColumn(column)\">\r\n <x-button\r\n [class.is-leaf]=\"!row.leaf\"\r\n [class.is-expanded]=\"row.expanded\"\r\n (click)=\"onExpanded($event, row)\"\r\n icon=\"fto-chevron-right\"\r\n size=\"mini\"\r\n onlyIcon\r\n class=\"x-table-expand\"\r\n [style.margin-left.rem]=\"row.level - 0.5\"\r\n ></x-button>\r\n </ng-container>\r\n <ng-container *xOutlet=\"columnTpl[column.id]; context: { $column: column, $row: row, $index: table.getIndex(i) }\">\r\n <ng-container *xOutlet=\"table.bodyTdTpl; context: { $column: column, $row: row, $index: table.getIndex(i) }\">\r\n <div [innerHTML]=\"row[column.id]\" [style.text-align]=\"column.textAlign\"></div>\r\n {{ table.rowExpandNext && table.rowExpandNext.id === column.id ? 'x-table-body-level-' + row.level : '' }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n" }]
205
+ args: [{ selector: `${XTableBodyPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<tbody #tbody>\r\n <ng-container *ngIf=\"cellConfig; else virtualScrollTpl\">\r\n <tr *ngFor=\"let row of data; index as i; trackBy: trackByItem\" [style.gridTemplateColumns]=\"cellConfig.gridTemplateColumns\">\r\n <td\r\n *ngFor=\"let column of cellConfig.cells; index as j\"\r\n [title]=\"getTitle(row, column)\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [style.grid-area]=\"column.gridArea\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"cellTpl; context: { column: column, row: row, i: i }\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <x-empty *ngIf=\"isEmpty && level === 0\"></x-empty>\r\n</tbody>\r\n\r\n<ng-template #virtualScrollTpl>\r\n <cdk-virtual-scroll-viewport\r\n #virtualBody\r\n *ngIf=\"virtualScroll; else bodyTpl\"\r\n [itemSize]=\"getItemSize\"\r\n [minBufferPx]=\"minBufferPx\"\r\n [maxBufferPx]=\"maxBufferPx\"\r\n [style.height.px]=\"bodyHeight\"\r\n >\r\n <tr\r\n *cdkVirtualFor=\"let row of data; let index = index; trackBy: trackByItem\"\r\n [class.x-table-activated]=\"allowSelectRow && activatedRow?.id === row.id\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n (click)=\"rowClick($event, row)\"\r\n >\r\n <!-- rowHeight \u4E3A 0 \u7684\u65F6\u5019\uFF0Cindex \u4E0B\u6807\u83B7\u53D6\u4E0D\u5230 -->\r\n <ng-container *ngTemplateOutlet=\"rowTpl; context: { row: row, i: getIndex(index, row) }\"></ng-container>\r\n </tr>\r\n </cdk-virtual-scroll-viewport>\r\n</ng-template>\r\n\r\n<ng-template #bodyTpl>\r\n <ng-container *ngFor=\"let row of data; index as i; trackBy: trackByItem\">\r\n <tr\r\n [class.x-table-activated]=\"allowSelectRow && activatedRow?.id === row.id\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n (click)=\"rowClick($event, row)\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"rowTpl; context: { row: row, i: i }\"></ng-container>\r\n </tr>\r\n <div class=\"x-table-children\" [class.x-table-expandTpl]=\"expandTpl\" *ngIf=\"table.treeTable && row.children && row.expanded\">\r\n <x-table-body\r\n [data]=\"row.children\"\r\n [columns]=\"table.columns\"\r\n [itemSize]=\"table.itemSize\"\r\n [rowHeight]=\"table.rowHeight\"\r\n [columnTpl]=\"table.bodyColumnTpl\"\r\n [allowSelectRow]=\"table.allowSelectRow\"\r\n [rowClass]=\"table.rowClass\"\r\n [cellConfig]=\"table.cellConfig?.tbody\"\r\n [(activatedRow)]=\"table.activatedRow\"\r\n [expandedAll]=\"expandedAll\"\r\n [expandTpl]=\"expandTpl\"\r\n (activatedRowChange)=\"table.activatedRowChange.emit($event)\"\r\n [level]=\"row.level! + 1\"\r\n [table]=\"table\"\r\n ></x-table-body>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #rowTpl let-row=\"row\" let-i=\"i\">\r\n <ng-container *ngIf=\"level > 0 && expandTpl\">\r\n <ng-container *xOutlet=\"expandTpl; context: { $row: row, $index: i, $level: level }\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"level === 0 || !expandTpl\">\r\n <ng-container *xOutlet=\"rowDefault; context: { row: row, i: i, level: level }\"></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #rowDefault let-row=\"row\" let-i=\"i\">\r\n <ng-container *ngFor=\"let column of columns; index as j; trackBy: trackByItem\">\r\n <td\r\n [style.width.px]=\"column.width\"\r\n [style.flex]=\"getFlex(column)\"\r\n [title]=\"getTitle(row, column)\"\r\n [class.x-table-dragging]=\"column.dragging\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [ngClass]=\"!rowClass ? {} : rowClass(row, i)\"\r\n >\r\n <ng-template *ngTemplateOutlet=\"cellTpl; context: { column: column, row: row, i: i }\"></ng-template>\r\n </td>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #cellTpl let-column=\"column\" let-row=\"row\" let-i=\"i\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <x-checkbox\r\n [data]=\"[{ id: true, label: '' }]\"\r\n [(ngModel)]=\"row[column.id]\"\r\n [disabled]=\"row.disabled\"\r\n (ngModelChange)=\"table.bodyChecked($event, column, row)\"\r\n ></x-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'index'\">\r\n <div>{{ table.getIndex(i) }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"table.isExpandColumn(column)\">\r\n <x-button\r\n [class.is-leaf]=\"!row.leaf\"\r\n [class.is-expanded]=\"row.expanded\"\r\n (click)=\"onExpanded($event, row)\"\r\n icon=\"fto-chevron-right\"\r\n size=\"mini\"\r\n onlyIcon\r\n class=\"x-table-expand\"\r\n [style.margin-left.rem]=\"row.level - 0.5\"\r\n ></x-button>\r\n </ng-container>\r\n <ng-container *xOutlet=\"columnTpl[column.id]; context: { $column: column, $row: row, $index: table.getIndex(i) }\">\r\n <ng-container *xOutlet=\"table.bodyTdTpl; context: { $column: column, $row: row, $index: table.getIndex(i) }\">\r\n <div [innerHTML]=\"row[column.id]\" [style.text-align]=\"column.textAlign\"></div>\r\n {{ table.rowExpandNext && table.rowExpandNext.id === column.id ? 'x-table-body-level-' + row.level : '' }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n" }]
206
206
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
207
207
  type: Inject,
208
208
  args: [DOCUMENT]
@@ -215,4 +215,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
215
215
  }], table: [{
216
216
  type: Input
217
217
  }] } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS90YWJsZS90YWJsZS1ib2R5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL3RhYmxlL3RhYmxlLWJvZHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFJakIsdUJBQXVCLEVBR3ZCLE1BQU0sRUFDTixTQUFTLEVBQ1QsS0FBSyxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBdUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQTJCLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFRM0MsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGtCQUFrQjtJQW1CekQ7SUFDRSxxREFBcUQ7SUFDOUMsUUFBbUIsRUFDbkIsVUFBbUMsRUFDbkMsR0FBc0IsRUFDSixHQUFRLEVBQzFCLGFBQTZCO1FBRXBDLEtBQUssRUFBRSxDQUFDO1FBTkQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNKLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBeEJ0QyxlQUFVLEdBQWdDLEVBQUUsQ0FBQztRQWVyQyxlQUFV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RSxpQkFFaEIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTs7MEJBMEI1QyxNQUFNOzJCQUFDLFFBQVE7eUVBWkUsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNRLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDZixLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgUmVuZGVyZXIyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgSW5qZWN0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBJbnB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYVGFibGVCb2R5UHJlZml4LCBYVGFibGVCb2R5UHJvcGVydHksIFhUYWJsZVJvdywgWFRhYmxlQ29sdW1uLCBYVGFibGVDZWxsIH0gZnJvbSAnLi90YWJsZS5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IHJlbW92ZU5nVGFnLCBYSXNDaGFuZ2UsIFhSZXNpemUsIFhDb25maWdTZXJ2aWNlLCBYTnVtYmVyLCBzdHJpcFRhZ3MgfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYVGFibGVCb2R5UHJlZml4fWAsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWJvZHkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFhUYWJsZUJvZHlDb21wb25lbnQgZXh0ZW5kcyBYVGFibGVCb2R5UHJvcGVydHkgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgdGJvZHlTdHlsZTogeyBbcHJvcGVydHk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgZ2V0IGlzRW1wdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5sZW5ndGggPT09IDA7XHJcbiAgfVxyXG4gIGdldCBnZXRSb3dIZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3dIZWlnaHQgPT0gMCA/ICcnIDogdGhpcy5yb3dIZWlnaHQ7XHJcbiAgfVxyXG4gIGdldCBnZXRJdGVtU2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnJvd0hlaWdodCAhPT0gMCAmJiB0aGlzLml0ZW1TaXplID4gdGhpcy5yb3dIZWlnaHQgPyB0aGlzLnJvd0hlaWdodCA6IHRoaXMuaXRlbVNpemU7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCd0Ym9keScpIHRib2R5ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgndmlydHVhbEJvZHknKSB2aXJ0dWFsQm9keSE6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcclxuICBASW5wdXQoKSB0YWJsZTogYW55O1xyXG5cclxuICBwcml2YXRlIF91blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gQE9wdGlvbmFsKCkgQEhvc3QoKSBwdWJsaWMgdGFibGU6IFhUYWJsZUNvbXBvbmVudCxcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwdWJsaWMgZG9jOiBhbnksXHJcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogWENvbmZpZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKHNpbXBsZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgY29sdW1ucywgYWN0aXZhdGVkUm93LCBtZXJnZVJ1bGUsIGV4cGFuZGVkQWxsLCBhZGFwdGlvbkhlaWdodCB9ID0gc2ltcGxlcztcclxuICAgIFhJc0NoYW5nZShkYXRhLCBjb2x1bW5zLCBhY3RpdmF0ZWRSb3csIG1lcmdlUnVsZSwgZXhwYW5kZWRBbGwpICYmIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIFhJc0NoYW5nZShhZGFwdGlvbkhlaWdodCkgJiYgdGhpcy5zZXRBZGFwdGlvbkhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICByZW1vdmVOZ1RhZyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBpZiAodGhpcy5sZXZlbCA+IDApIHJlbW92ZU5nVGFnKHRoaXMudGJvZHkubmF0aXZlRWxlbWVudCk7XHJcbiAgICBpZiAodGhpcy5zY3JvbGw/LnkgJiYgIXRoaXMuYm9keUhlaWdodCkge1xyXG4gICAgICB0aGlzLmJvZHlIZWlnaHQgPSB0aGlzLnNjcm9sbC55O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy50YWJsZS52aXJ0dWFsQm9keSA9IHRoaXMudmlydHVhbEJvZHk7XHJcbiAgICB0aGlzLnRhYmxlLmJvZHlDaGFuZ2UgPSAoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnNldFN1YmplY3QoKTtcclxuICAgIHRoaXMuc2V0U2Nyb2xsKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3VuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLl91blN1YmplY3QudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdWJqZWN0KCkge1xyXG4gICAgaWYgKHRoaXMudmlydHVhbEJvZHkpIHtcclxuICAgICAgdGhpcy50YWJsZS5zY3JvbGxDb250ZW50RWxlID0gdGhpcy52aXJ0dWFsQm9keT8uZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcidcclxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKHRoaXMuc2Nyb2xsPy54KSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhYmxlLnNjcm9sbENvbnRlbnRFbGUsICd3aWR0aCcsIGAke3RoaXMuc2Nyb2xsLnh9cHhgKTtcclxuICAgICAgfVxyXG4gICAgICBYUmVzaXplKHRoaXMudGFibGUudGFibGUubmF0aXZlRWxlbWVudCwgdGhpcy50YWJsZS5zY3JvbGxDb250ZW50RWxlKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0geC5yZXNpemVPYnNlcnZlcjtcclxuICAgICAgICAgIHRoaXMuc2V0QWRhcHRpb25IZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuc2V0U2Nyb2xsKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRBZGFwdGlvbkhlaWdodCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFibGUuc2Nyb2xsQ29udGVudEVsZSkge1xyXG4gICAgICBmcm9tRXZlbnQodGhpcy52aXJ0dWFsQm9keS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVsZSA9IHguc3JjRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIHRoaXMudGFibGUuc2Nyb2xsVG9wID0gZWxlLnNjcm9sbFRvcDtcclxuICAgICAgICAgIHRoaXMudGFibGUuc2Nyb2xsTGVmdCA9IGVsZS5zY3JvbGxMZWZ0O1xyXG4gICAgICAgICAgaWYgKGVsZS5zY3JvbGxMZWZ0ID49IDAgJiYgdGhpcy50YWJsZS50aGVhZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0aGVhZCBvZiB0aGlzLnRhYmxlLnRoZWFkcykge1xyXG4gICAgICAgICAgICAgIHRoZWFkLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudGFibGUuc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50YWJsZS5zY3JvbGxMZWZ0TWF4ID0gZWxlLnNjcm9sbExlZnQgKyBlbGUuY2xpZW50V2lkdGggPT09IGVsZS5zY3JvbGxXaWR0aDtcclxuICAgICAgICAgIHRoaXMudGFibGUuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNjcm9sbCgpIHtcclxuICAgIGlmICghdGhpcy52aXJ0dWFsQm9keSkgcmV0dXJuO1xyXG4gICAgY29uc3QgZWxlID0gdGhpcy52aXJ0dWFsQm9keS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBoYXNZID0gZWxlLnNjcm9sbEhlaWdodCA+ICh0aGlzLmJvZHlIZWlnaHQgYXMgbnVtYmVyKTtcclxuICAgIGNvbnN0IGhhc1ggPSB0aGlzLnRhYmxlLnNjcm9sbENvbnRlbnRFbGUuY2xpZW50V2lkdGggPiBlbGUuY2xpZW50V2lkdGg7XHJcblxyXG4gICAgaWYgKCF0aGlzLnRhYmxlLmhhc1Njcm9sbFkgJiYgaGFzWSkge1xyXG4gICAgICB0aGlzLnRhYmxlLmhhc1Njcm9sbFkgPSB0cnVlO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFlXaWR0aCA9IGVsZS5vZmZzZXRXaWR0aCAtIGVsZS5jbGllbnRXaWR0aDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZS5oYXNTY3JvbGxZICYmICFoYXNZKSB7XHJcbiAgICAgIHRoaXMudGFibGUuaGFzU2Nyb2xsWSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFlXaWR0aCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnRhYmxlLmhhc1Njcm9sbFggJiYgaGFzWCkge1xyXG4gICAgICB0aGlzLnRhYmxlLmhhc1Njcm9sbFggPSB0cnVlO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFhIZWlnaHQgPSBlbGUub2Zmc2V0SGVpZ2h0IC0gZWxlLmNsaWVudEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZS5oYXNTY3JvbGxYICYmICFoYXNYKSB7XHJcbiAgICAgIHRoaXMudGFibGUuaGFzU2Nyb2xsWCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFhIZWlnaHQgPSAwO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFhXaWR0aCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoaGFzWCkge1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFhXaWR0aCA9IGVsZS5vZmZzZXRXaWR0aCArIGVsZS5zY3JvbGxXaWR0aCAtIGVsZS5jbGllbnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRhYmxlLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdHlsZSgpIHtcclxuICAgIGxldCBoZWlnaHQgPSB0aGlzLnJvd0hlaWdodCA9PSAwID8gJycgOiB0aGlzLnJvd0hlaWdodDtcclxuICAgIGlmICh0aGlzLmNlbGxDb25maWcgJiYgdGhpcy5jZWxsQ29uZmlnLmNlbGxzKSB7XHJcbiAgICAgIGNvbnN0IHNwdCA9IHRoaXMuY2VsbENvbmZpZy5jZWxscy5tYXAoKHgpID0+IHtcclxuICAgICAgICBjb25zdCBncmlkQXJlYVNwdCA9IHguZ3JpZEFyZWE/LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgcmV0dXJuIGdyaWRBcmVhU3B0ICYmIGdyaWRBcmVhU3B0Lmxlbmd0aCA+IDMgPyBOdW1iZXIoZ3JpZEFyZWFTcHRbMl0pIDogMjtcclxuICAgICAgfSk7XHJcbiAgICAgIGhlaWdodCA9ICgoTWF0aC5tYXgoLi4uc3B0KSAtIDEpICogKGhlaWdodCBhcyBudW1iZXIpKSBhcyBYTnVtYmVyO1xyXG4gICAgfVxyXG4gICAgdGhpcy50Ym9keVN0eWxlID0ge1xyXG4gICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGBcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRJbmRleChpbmRleDogbnVtYmVyLCBpdGVtOiBYVGFibGVSb3cpIHtcclxuICAgIGlmICghaXNOYU4oaW5kZXgpKSByZXR1cm4gaW5kZXg7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhLmluZGV4T2YoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBnZXRGbGV4KGNvbHVtbjogWFRhYmxlQ29sdW1uKSB7XHJcbiAgICBpZiAoY29sdW1uLndpZHRoKSByZXR1cm4gJ25vbmUnO1xyXG4gICAgaWYgKCFjb2x1bW4uZmxleCkgcmV0dXJuIDE7XHJcbiAgICByZXR1cm4gY29sdW1uLmZsZXg7XHJcbiAgfVxyXG5cclxuICBnZXRUaXRsZShyb3c6IFhUYWJsZVJvdywgY29sdW1uOiBYVGFibGVDZWxsIHwgYW55KSB7XHJcbiAgICBsZXQgaXQgPSByb3dbY29sdW1uLmlkIGFzIHN0cmluZ107XHJcbiAgICByZXR1cm4gaXQgPyBzdHJpcFRhZ3MoaXQpIDogJyc7XHJcbiAgfVxyXG5cclxuICBzZXRBZGFwdGlvbkhlaWdodCgpIHtcclxuICAgIGlmICgodGhpcy5hZGFwdGlvbkhlaWdodCBhcyBudW1iZXIpID4gMCkge1xyXG4gICAgICBjb25zdCBjYXB0aW9uSGVpZ2h0ID0gdGhpcy50YWJsZS50Y2FwdGlvbj8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMDtcclxuICAgICAgbGV0IGhlYWRIZWlnaHQgPSAwO1xyXG4gICAgICBmb3IgKGxldCB0aGVhZCBvZiB0aGlzLnRhYmxlLnRoZWFkcykge1xyXG4gICAgICAgIGhlYWRIZWlnaHQgKz0gdGhlYWQubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZm9vdEhlaWdodCA9IHRoaXMudGFibGUudGZvb3Q/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IDA7XHJcbiAgICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSB0aGlzLnRhYmxlLnBhZ2luYXRpb24/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMDtcclxuICAgICAgdGhpcy5ib2R5SGVpZ2h0ID1cclxuICAgICAgICBOdW1iZXIodGhpcy5kb2NQZXJjZW50KSAqIHRoaXMuZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgLVxyXG4gICAgICAgIGNhcHRpb25IZWlnaHQgLVxyXG4gICAgICAgIGhlYWRIZWlnaHQgLVxyXG4gICAgICAgIGZvb3RIZWlnaHQgLVxyXG4gICAgICAgIHBhZ2luYXRpb25IZWlnaHQgLVxyXG4gICAgICAgIE51bWJlcih0aGlzLmFkYXB0aW9uSGVpZ2h0KTtcclxuICAgICAgaWYgKHRoaXMuYm9keUhlaWdodCA8IDApIHRoaXMuYm9keUhlaWdodCA9IDA7XHJcbiAgICAgIHRoaXMubWluQnVmZmVyUHggPSB0aGlzLmJvZHlIZWlnaHQ7XHJcbiAgICAgIHRoaXMubWF4QnVmZmVyUHggPSB0aGlzLmJvZHlIZWlnaHQgKiAxLjI7XHJcbiAgICAgIHRoaXMudmlydHVhbEJvZHlbJ19zY3JvbGxTdHJhdGVneSddWydfbWluQnVmZmVyUHgnXSA9IHRoaXMubWluQnVmZmVyUHg7XHJcbiAgICAgIHRoaXMudmlydHVhbEJvZHlbJ19zY3JvbGxTdHJhdGVneSddWydfbWF4QnVmZmVyUHgnXSA9IHRoaXMubWF4QnVmZmVyUHg7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJvd0NsaWNrKGV2ZW50OiBFdmVudCwgcm93OiBYVGFibGVSb3cpIHtcclxuICAgIGlmIChyb3cuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm93ID0gcm93O1xyXG4gICAgaWYgKHRoaXMudGFibGUuYWxsb3dDaGVja1JvdyAmJiB0aGlzLnRhYmxlLnJvd0NoZWNrZWQpIHtcclxuICAgICAgaWYgKCFBcnJheS5mcm9tKChldmVudCBhcyBhbnkpLnBhdGgpLmZpbmQoKHg6IGFueSkgPT4geC5sb2NhbE5hbWUgPT0gJ3gtY2hlY2tib3gnKSkge1xyXG4gICAgICAgIHJvd1t0aGlzLnRhYmxlLnJvd0NoZWNrZWQuaWRdID0gIXJvd1t0aGlzLnRhYmxlLnJvd0NoZWNrZWQuaWRdO1xyXG4gICAgICAgIHRoaXMudGFibGUuYm9keUNoZWNrZWQocm93W3RoaXMudGFibGUucm93Q2hlY2tlZC5pZF0sIHRoaXMudGFibGUucm93Q2hlY2tlZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZhdGVkUm93Q2hhbmdlLmVtaXQocm93KTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kZWQoX2V2ZW50OiBFdmVudCwgbm9kZTogWFRhYmxlUm93KSB7XHJcbiAgICBub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5SXRlbShfaW5kZXg6IG51bWJlciwgaXRlbTogWFRhYmxlUm93IHwgWFRhYmxlQ29sdW1uKSB7XHJcbiAgICByZXR1cm4gaXRlbS5pZDtcclxuICB9XHJcbn1cclxuIiwiPHRib2R5ICN0Ym9keT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbENvbmZpZzsgZWxzZSB2aXJ0dWFsU2Nyb2xsVHBsXCI+XHJcbiAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5SXRlbVwiIFtzdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zXT1cImNlbGxDb25maWcuZ3JpZFRlbXBsYXRlQ29sdW1uc1wiPlxyXG4gICAgICA8dGRcclxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNlbGxDb25maWcuY2VsbHM7IGluZGV4IGFzIGpcIlxyXG4gICAgICAgIFt0aXRsZV09XCJnZXRUaXRsZShyb3csIGNvbHVtbilcIlxyXG4gICAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreV09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0KGNvbHVtbikgfHwgdGFibGUuZ2V0U3RpY2t5UmlnaHQoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LWxlZnRdPVwidGFibGUuZ2V0U3RpY2t5TGVmdChjb2x1bW4pXCJcclxuICAgICAgICBbY2xhc3MueC10YWJsZS1zdGlja3ktcmlnaHRdPVwidGFibGUuZ2V0U3RpY2t5UmlnaHQoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LWxlZnQtbGFzdF09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0TGFzdChjb2x1bW4pXCJcclxuICAgICAgICBbY2xhc3MueC10YWJsZS1zdGlja3ktcmlnaHQtZmlyc3RdPVwidGFibGUuZ2V0U3RpY2t5UmlnaHRGaXJzdChjb2x1bW4pXCJcclxuICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXHJcbiAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXHJcbiAgICAgICAgW3N0eWxlLmdyaWQtYXJlYV09XCJjb2x1bW4uZ3JpZEFyZWFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUcGw7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4sIHJvdzogcm93LCBpOiBpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC90ZD5cclxuICAgIDwvdHI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPHgtZW1wdHkgKm5nSWY9XCJpc0VtcHR5ICYmIGxldmVsID09PSAwXCI+PC94LWVtcHR5PlxyXG48L3Rib2R5PlxyXG5cclxuPG5nLXRlbXBsYXRlICN2aXJ0dWFsU2Nyb2xsVHBsPlxyXG4gIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcclxuICAgICN2aXJ0dWFsQm9keVxyXG4gICAgKm5nSWY9XCJ2aXJ0dWFsU2Nyb2xsOyBlbHNlIGJvZHlUcGxcIlxyXG4gICAgW2l0ZW1TaXplXT1cImdldEl0ZW1TaXplXCJcclxuICAgIFttaW5CdWZmZXJQeF09XCJtaW5CdWZmZXJQeFwiXHJcbiAgICBbbWF4QnVmZmVyUHhdPVwibWF4QnVmZmVyUHhcIlxyXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJib2R5SGVpZ2h0XCJcclxuICA+XHJcbiAgICA8dHJcclxuICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgcm93IG9mIGRhdGE7IGxldCBpbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SXRlbVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLWFjdGl2YXRlZF09XCJhbGxvd1NlbGVjdFJvdyAmJiBhY3RpdmF0ZWRSb3c/LmlkID09PSByb3cuaWRcIlxyXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICAgIChjbGljayk9XCJyb3dDbGljaygkZXZlbnQsIHJvdylcIlxyXG4gICAgPlxyXG4gICAgICA8IS0tIHJvd0hlaWdodCDkuLogMCDnmoTml7blgJnvvIxpbmRleCDkuIvmoIfojrflj5bkuI3liLAgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dUcGw7IGNvbnRleHQ6IHsgcm93OiByb3csIGk6IGdldEluZGV4KGluZGV4LCByb3cpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdHI+XHJcbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2JvZHlUcGw+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGE7IGluZGV4IGFzIGk7IHRyYWNrQnk6IHRyYWNrQnlJdGVtXCI+XHJcbiAgICA8dHJcclxuICAgICAgW2NsYXNzLngtdGFibGUtYWN0aXZhdGVkXT1cImFsbG93U2VsZWN0Um93ICYmIGFjdGl2YXRlZFJvdz8uaWQgPT09IHJvdy5pZFwiXHJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgICAgKGNsaWNrKT1cInJvd0NsaWNrKCRldmVudCwgcm93KVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dUcGw7IGNvbnRleHQ6IHsgcm93OiByb3csIGk6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC90cj5cclxuICAgIDxkaXYgY2xhc3M9XCJ4LXRhYmxlLWNoaWxkcmVuXCIgW2NsYXNzLngtdGFibGUtZXhwYW5kVHBsXT1cImV4cGFuZFRwbFwiICpuZ0lmPVwidGFibGUudHJlZVRhYmxlICYmIHJvdy5jaGlsZHJlbiAmJiByb3cuZXhwYW5kZWRcIj5cclxuICAgICAgPHgtdGFibGUtYm9keVxyXG4gICAgICAgIFtkYXRhXT1cInJvdy5jaGlsZHJlblwiXHJcbiAgICAgICAgW2NvbHVtbnNdPVwidGFibGUuY29sdW1uc1wiXHJcbiAgICAgICAgW2l0ZW1TaXplXT1cInRhYmxlLml0ZW1TaXplXCJcclxuICAgICAgICBbcm93SGVpZ2h0XT1cInRhYmxlLnJvd0hlaWdodFwiXHJcbiAgICAgICAgW2NvbHVtblRwbF09XCJ0YWJsZS5ib2R5Q29sdW1uVHBsXCJcclxuICAgICAgICBbYWxsb3dTZWxlY3RSb3ddPVwidGFibGUuYWxsb3dTZWxlY3RSb3dcIlxyXG4gICAgICAgIFtyb3dDbGFzc109XCJ0YWJsZS5yb3dDbGFzc1wiXHJcbiAgICAgICAgW2NlbGxDb25maWddPVwidGFibGUuY2VsbENvbmZpZz8udGJvZHlcIlxyXG4gICAgICAgIFsoYWN0aXZhdGVkUm93KV09XCJ0YWJsZS5hY3RpdmF0ZWRSb3dcIlxyXG4gICAgICAgIFtleHBhbmRlZEFsbF09XCJleHBhbmRlZEFsbFwiXHJcbiAgICAgICAgW2V4cGFuZFRwbF09XCJleHBhbmRUcGxcIlxyXG4gICAgICAgIChhY3RpdmF0ZWRSb3dDaGFuZ2UpPVwidGFibGUuYWN0aXZhdGVkUm93Q2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgW2xldmVsXT1cInJvdy5sZXZlbCEgKyAxXCJcclxuICAgICAgICBbdGFibGVdPVwidGFibGVcIlxyXG4gICAgICA+PC94LXRhYmxlLWJvZHk+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcm93VHBsIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImlcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibGV2ZWwgPiAwICYmIGV4cGFuZFRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqeE91dGxldD1cImV4cGFuZFRwbDsgY29udGV4dDogeyAkcm93OiByb3csICRpbmRleDogaSwgJGxldmVsOiBsZXZlbCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxldmVsID09PSAwIHx8ICFleHBhbmRUcGxcIj5cclxuICAgIDxuZy1jb250YWluZXIgKnhPdXRsZXQ9XCJyb3dEZWZhdWx0OyBjb250ZXh0OiB7IHJvdzogcm93LCBpOiBpLCBsZXZlbDogbGV2ZWwgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNyb3dEZWZhdWx0IGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImlcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgaW5kZXggYXMgajsgdHJhY2tCeTogdHJhY2tCeUl0ZW1cIj5cclxuICAgIDx0ZFxyXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcclxuICAgICAgW3N0eWxlLmZsZXhdPVwiZ2V0RmxleChjb2x1bW4pXCJcclxuICAgICAgW3RpdGxlXT1cImdldFRpdGxlKHJvdywgY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLWRyYWdnaW5nXT1cImNvbHVtbi5kcmFnZ2luZ1wiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreV09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0KGNvbHVtbikgfHwgdGFibGUuZ2V0U3RpY2t5UmlnaHQoY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1sZWZ0XT1cInRhYmxlLmdldFN0aWNreUxlZnQoY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1yaWdodF09XCJ0YWJsZS5nZXRTdGlja3lSaWdodChjb2x1bW4pXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LWxlZnQtbGFzdF09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0TGFzdChjb2x1bW4pXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LXJpZ2h0LWZpcnN0XT1cInRhYmxlLmdldFN0aWNreVJpZ2h0Rmlyc3QoY29sdW1uKVwiXHJcbiAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcclxuICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIiFyb3dDbGFzcyA/IHt9IDogcm93Q2xhc3Mocm93LCBpKVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUcGw7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4sIHJvdzogcm93LCBpOiBpIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgPC90ZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY2VsbFRwbCBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LXJvdz1cInJvd1wiIGxldC1pPVwiaVwiPlxyXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgIDx4LWNoZWNrYm94XHJcbiAgICAgICAgW2RhdGFdPVwiW3sgaWQ6IHRydWUsIGxhYmVsOiAnJyB9XVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmlkXVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJvdy5kaXNhYmxlZFwiXHJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGFibGUuYm9keUNoZWNrZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgPjwveC1jaGVja2JveD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZGV4J1wiPlxyXG4gICAgICA8ZGl2Pnt7IHRhYmxlLmdldEluZGV4KGkpIH19PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLmlzRXhwYW5kQ29sdW1uKGNvbHVtbilcIj5cclxuICAgICAgICA8eC1idXR0b25cclxuICAgICAgICAgIFtjbGFzcy5pcy1sZWFmXT1cIiFyb3cubGVhZlwiXHJcbiAgICAgICAgICBbY2xhc3MuaXMtZXhwYW5kZWRdPVwicm93LmV4cGFuZGVkXCJcclxuICAgICAgICAgIChjbGljayk9XCJvbkV4cGFuZGVkKCRldmVudCwgcm93KVwiXHJcbiAgICAgICAgICBpY29uPVwiZnRvLWNoZXZyb24tcmlnaHRcIlxyXG4gICAgICAgICAgc2l6ZT1cIm1pbmlcIlxyXG4gICAgICAgICAgb25seUljb25cclxuICAgICAgICAgIGNsYXNzPVwieC10YWJsZS1leHBhbmRcIlxyXG4gICAgICAgICAgW3N0eWxlLm1hcmdpbi1sZWZ0LnJlbV09XCJyb3cubGV2ZWwgLSAwLjVcIlxyXG4gICAgICAgID48L3gtYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqeE91dGxldD1cImNvbHVtblRwbFtjb2x1bW4uaWRdOyBjb250ZXh0OiB7ICRjb2x1bW46IGNvbHVtbiwgJHJvdzogcm93LCAkaW5kZXg6IHRhYmxlLmdldEluZGV4KGkpIH1cIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICp4T3V0bGV0PVwidGFibGUuYm9keVRkVHBsOyBjb250ZXh0OiB7ICRjb2x1bW46IGNvbHVtbiwgJHJvdzogcm93LCAkaW5kZXg6IHRhYmxlLmdldEluZGV4KGkpIH1cIj5cclxuICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJyb3dbY29sdW1uLmlkXVwiIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbHVtbi50ZXh0QWxpZ25cIj48L2Rpdj5cclxuICAgICAgICAgIHt7IHRhYmxlLnJvd0V4cGFuZE5leHQgJiYgdGFibGUucm93RXhwYW5kTmV4dC5pZCA9PT0gY29sdW1uLmlkID8gJ3gtdGFibGUtYm9keS1sZXZlbC0nICsgcm93LmxldmVsIDogJycgfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS90YWJsZS90YWJsZS1ib2R5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL3RhYmxlL3RhYmxlLWJvZHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFJakIsdUJBQXVCLEVBR3ZCLE1BQU0sRUFDTixTQUFTLEVBQ1QsS0FBSyxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBdUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQTJCLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwSCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBUTNDLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxrQkFBa0I7SUFtQnpEO0lBQ0UscURBQXFEO0lBQzlDLFFBQW1CLEVBQ25CLFVBQW1DLEVBQ25DLEdBQXNCLEVBQ0osR0FBUSxFQUMxQixhQUE2QjtRQUVwQyxLQUFLLEVBQUUsQ0FBQztRQU5ELGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDSixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQXhCdEMsZUFBVSxHQUFnQyxFQUFFLENBQUM7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QkFBdUIsQ0FBQyxNQUFNOzswQkEwQjVDLE1BQU07MkJBQUMsUUFBUTt5RUFaRSxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1EsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNmLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBSZW5kZXJlcjIsXHJcbiAgRWxlbWVudFJlZixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBJbmplY3QsXHJcbiAgVmlld0NoaWxkLFxyXG4gIElucHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhUYWJsZUJvZHlQcmVmaXgsIFhUYWJsZUJvZHlQcm9wZXJ0eSwgWFRhYmxlUm93LCBYVGFibGVDb2x1bW4sIFhUYWJsZUNlbGwgfSBmcm9tICcuL3RhYmxlLnByb3BlcnR5JztcclxuaW1wb3J0IHsgcmVtb3ZlTmdUYWcsIFhJc0NoYW5nZSwgWFJlc2l6ZSwgWENvbmZpZ1NlcnZpY2UsIFhOdW1iZXIsIHN0cmlwVGFncywgWFBhcmVudFBhdGggfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYVGFibGVCb2R5UHJlZml4fWAsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWJvZHkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFhUYWJsZUJvZHlDb21wb25lbnQgZXh0ZW5kcyBYVGFibGVCb2R5UHJvcGVydHkgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgdGJvZHlTdHlsZTogeyBbcHJvcGVydHk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgZ2V0IGlzRW1wdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5sZW5ndGggPT09IDA7XHJcbiAgfVxyXG4gIGdldCBnZXRSb3dIZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3dIZWlnaHQgPT0gMCA/ICcnIDogdGhpcy5yb3dIZWlnaHQ7XHJcbiAgfVxyXG4gIGdldCBnZXRJdGVtU2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnJvd0hlaWdodCAhPT0gMCAmJiB0aGlzLml0ZW1TaXplID4gdGhpcy5yb3dIZWlnaHQgPyB0aGlzLnJvd0hlaWdodCA6IHRoaXMuaXRlbVNpemU7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCd0Ym9keScpIHRib2R5ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgndmlydHVhbEJvZHknKSB2aXJ0dWFsQm9keSE6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcclxuICBASW5wdXQoKSB0YWJsZTogYW55O1xyXG5cclxuICBwcml2YXRlIF91blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gQE9wdGlvbmFsKCkgQEhvc3QoKSBwdWJsaWMgdGFibGU6IFhUYWJsZUNvbXBvbmVudCxcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwdWJsaWMgZG9jOiBhbnksXHJcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogWENvbmZpZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKHNpbXBsZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgY29sdW1ucywgYWN0aXZhdGVkUm93LCBtZXJnZVJ1bGUsIGV4cGFuZGVkQWxsLCBhZGFwdGlvbkhlaWdodCB9ID0gc2ltcGxlcztcclxuICAgIFhJc0NoYW5nZShkYXRhLCBjb2x1bW5zLCBhY3RpdmF0ZWRSb3csIG1lcmdlUnVsZSwgZXhwYW5kZWRBbGwpICYmIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIFhJc0NoYW5nZShhZGFwdGlvbkhlaWdodCkgJiYgdGhpcy5zZXRBZGFwdGlvbkhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICByZW1vdmVOZ1RhZyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBpZiAodGhpcy5sZXZlbCA+IDApIHJlbW92ZU5nVGFnKHRoaXMudGJvZHkubmF0aXZlRWxlbWVudCk7XHJcbiAgICBpZiAodGhpcy5zY3JvbGw/LnkgJiYgIXRoaXMuYm9keUhlaWdodCkge1xyXG4gICAgICB0aGlzLmJvZHlIZWlnaHQgPSB0aGlzLnNjcm9sbC55O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy50YWJsZS52aXJ0dWFsQm9keSA9IHRoaXMudmlydHVhbEJvZHk7XHJcbiAgICB0aGlzLnRhYmxlLmJvZHlDaGFuZ2UgPSAoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnNldFN1YmplY3QoKTtcclxuICAgIHRoaXMuc2V0U2Nyb2xsKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3VuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLl91blN1YmplY3QudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdWJqZWN0KCkge1xyXG4gICAgaWYgKHRoaXMudmlydHVhbEJvZHkpIHtcclxuICAgICAgdGhpcy50YWJsZS5zY3JvbGxDb250ZW50RWxlID0gdGhpcy52aXJ0dWFsQm9keT8uZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcidcclxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKHRoaXMuc2Nyb2xsPy54KSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhYmxlLnNjcm9sbENvbnRlbnRFbGUsICd3aWR0aCcsIGAke3RoaXMuc2Nyb2xsLnh9cHhgKTtcclxuICAgICAgfVxyXG4gICAgICBYUmVzaXplKHRoaXMudGFibGUudGFibGUubmF0aXZlRWxlbWVudCwgdGhpcy50YWJsZS5zY3JvbGxDb250ZW50RWxlKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0geC5yZXNpemVPYnNlcnZlcjtcclxuICAgICAgICAgIHRoaXMuc2V0QWRhcHRpb25IZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuc2V0U2Nyb2xsKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRBZGFwdGlvbkhlaWdodCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFibGUuc2Nyb2xsQ29udGVudEVsZSkge1xyXG4gICAgICBmcm9tRXZlbnQodGhpcy52aXJ0dWFsQm9keS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVsZSA9IHguc3JjRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIHRoaXMudGFibGUuc2Nyb2xsVG9wID0gZWxlLnNjcm9sbFRvcDtcclxuICAgICAgICAgIHRoaXMudGFibGUuc2Nyb2xsTGVmdCA9IGVsZS5zY3JvbGxMZWZ0O1xyXG4gICAgICAgICAgaWYgKGVsZS5zY3JvbGxMZWZ0ID49IDAgJiYgdGhpcy50YWJsZS50aGVhZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0aGVhZCBvZiB0aGlzLnRhYmxlLnRoZWFkcykge1xyXG4gICAgICAgICAgICAgIHRoZWFkLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudGFibGUuc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50YWJsZS5zY3JvbGxMZWZ0TWF4ID0gZWxlLnNjcm9sbExlZnQgKyBlbGUuY2xpZW50V2lkdGggPT09IGVsZS5zY3JvbGxXaWR0aDtcclxuICAgICAgICAgIHRoaXMudGFibGUuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNjcm9sbCgpIHtcclxuICAgIGlmICghdGhpcy52aXJ0dWFsQm9keSkgcmV0dXJuO1xyXG4gICAgY29uc3QgZWxlID0gdGhpcy52aXJ0dWFsQm9keS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBoYXNZID0gZWxlLnNjcm9sbEhlaWdodCA+ICh0aGlzLmJvZHlIZWlnaHQgYXMgbnVtYmVyKTtcclxuICAgIGNvbnN0IGhhc1ggPSB0aGlzLnRhYmxlLnNjcm9sbENvbnRlbnRFbGUuY2xpZW50V2lkdGggPiBlbGUuY2xpZW50V2lkdGg7XHJcblxyXG4gICAgaWYgKCF0aGlzLnRhYmxlLmhhc1Njcm9sbFkgJiYgaGFzWSkge1xyXG4gICAgICB0aGlzLnRhYmxlLmhhc1Njcm9sbFkgPSB0cnVlO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFlXaWR0aCA9IGVsZS5vZmZzZXRXaWR0aCAtIGVsZS5jbGllbnRXaWR0aDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZS5oYXNTY3JvbGxZICYmICFoYXNZKSB7XHJcbiAgICAgIHRoaXMudGFibGUuaGFzU2Nyb2xsWSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFlXaWR0aCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnRhYmxlLmhhc1Njcm9sbFggJiYgaGFzWCkge1xyXG4gICAgICB0aGlzLnRhYmxlLmhhc1Njcm9sbFggPSB0cnVlO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFhIZWlnaHQgPSBlbGUub2Zmc2V0SGVpZ2h0IC0gZWxlLmNsaWVudEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZS5oYXNTY3JvbGxYICYmICFoYXNYKSB7XHJcbiAgICAgIHRoaXMudGFibGUuaGFzU2Nyb2xsWCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFhIZWlnaHQgPSAwO1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFhXaWR0aCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoaGFzWCkge1xyXG4gICAgICB0aGlzLnRhYmxlLnNjcm9sbFhXaWR0aCA9IGVsZS5vZmZzZXRXaWR0aCArIGVsZS5zY3JvbGxXaWR0aCAtIGVsZS5jbGllbnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRhYmxlLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdHlsZSgpIHtcclxuICAgIGxldCBoZWlnaHQgPSB0aGlzLnJvd0hlaWdodCA9PSAwID8gJycgOiB0aGlzLnJvd0hlaWdodDtcclxuICAgIGlmICh0aGlzLmNlbGxDb25maWcgJiYgdGhpcy5jZWxsQ29uZmlnLmNlbGxzKSB7XHJcbiAgICAgIGNvbnN0IHNwdCA9IHRoaXMuY2VsbENvbmZpZy5jZWxscy5tYXAoKHgpID0+IHtcclxuICAgICAgICBjb25zdCBncmlkQXJlYVNwdCA9IHguZ3JpZEFyZWE/LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgcmV0dXJuIGdyaWRBcmVhU3B0ICYmIGdyaWRBcmVhU3B0Lmxlbmd0aCA+IDMgPyBOdW1iZXIoZ3JpZEFyZWFTcHRbMl0pIDogMjtcclxuICAgICAgfSk7XHJcbiAgICAgIGhlaWdodCA9ICgoTWF0aC5tYXgoLi4uc3B0KSAtIDEpICogKGhlaWdodCBhcyBudW1iZXIpKSBhcyBYTnVtYmVyO1xyXG4gICAgfVxyXG4gICAgdGhpcy50Ym9keVN0eWxlID0ge1xyXG4gICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGBcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRJbmRleChpbmRleDogbnVtYmVyLCBpdGVtOiBYVGFibGVSb3cpIHtcclxuICAgIGlmICghaXNOYU4oaW5kZXgpKSByZXR1cm4gaW5kZXg7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhLmluZGV4T2YoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBnZXRGbGV4KGNvbHVtbjogWFRhYmxlQ29sdW1uKSB7XHJcbiAgICBpZiAoY29sdW1uLndpZHRoKSByZXR1cm4gJ25vbmUnO1xyXG4gICAgaWYgKCFjb2x1bW4uZmxleCkgcmV0dXJuIDE7XHJcbiAgICByZXR1cm4gY29sdW1uLmZsZXg7XHJcbiAgfVxyXG5cclxuICBnZXRUaXRsZShyb3c6IFhUYWJsZVJvdywgY29sdW1uOiBYVGFibGVDZWxsIHwgYW55KSB7XHJcbiAgICBsZXQgaXQgPSByb3dbY29sdW1uLmlkIGFzIHN0cmluZ107XHJcbiAgICByZXR1cm4gaXQgPyBzdHJpcFRhZ3MoaXQpIDogJyc7XHJcbiAgfVxyXG5cclxuICBzZXRBZGFwdGlvbkhlaWdodCgpIHtcclxuICAgIGlmICgodGhpcy5hZGFwdGlvbkhlaWdodCBhcyBudW1iZXIpID4gMCkge1xyXG4gICAgICBjb25zdCBjYXB0aW9uSGVpZ2h0ID0gdGhpcy50YWJsZS50Y2FwdGlvbj8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMDtcclxuICAgICAgbGV0IGhlYWRIZWlnaHQgPSAwO1xyXG4gICAgICBmb3IgKGxldCB0aGVhZCBvZiB0aGlzLnRhYmxlLnRoZWFkcykge1xyXG4gICAgICAgIGhlYWRIZWlnaHQgKz0gdGhlYWQubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZm9vdEhlaWdodCA9IHRoaXMudGFibGUudGZvb3Q/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IDA7XHJcbiAgICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSB0aGlzLnRhYmxlLnBhZ2luYXRpb24/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMDtcclxuICAgICAgdGhpcy5ib2R5SGVpZ2h0ID1cclxuICAgICAgICBOdW1iZXIodGhpcy5kb2NQZXJjZW50KSAqIHRoaXMuZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgLVxyXG4gICAgICAgIGNhcHRpb25IZWlnaHQgLVxyXG4gICAgICAgIGhlYWRIZWlnaHQgLVxyXG4gICAgICAgIGZvb3RIZWlnaHQgLVxyXG4gICAgICAgIHBhZ2luYXRpb25IZWlnaHQgLVxyXG4gICAgICAgIE51bWJlcih0aGlzLmFkYXB0aW9uSGVpZ2h0KTtcclxuICAgICAgaWYgKHRoaXMuYm9keUhlaWdodCA8IDApIHRoaXMuYm9keUhlaWdodCA9IDA7XHJcbiAgICAgIHRoaXMubWluQnVmZmVyUHggPSB0aGlzLmJvZHlIZWlnaHQ7XHJcbiAgICAgIHRoaXMubWF4QnVmZmVyUHggPSB0aGlzLmJvZHlIZWlnaHQgKiAxLjI7XHJcbiAgICAgIHRoaXMudmlydHVhbEJvZHlbJ19zY3JvbGxTdHJhdGVneSddWydfbWluQnVmZmVyUHgnXSA9IHRoaXMubWluQnVmZmVyUHg7XHJcbiAgICAgIHRoaXMudmlydHVhbEJvZHlbJ19zY3JvbGxTdHJhdGVneSddWydfbWF4QnVmZmVyUHgnXSA9IHRoaXMubWF4QnVmZmVyUHg7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJvd0NsaWNrKGV2ZW50OiBFdmVudCwgcm93OiBYVGFibGVSb3cpIHtcclxuICAgIGlmIChyb3cuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm93ID0gcm93O1xyXG4gICAgaWYgKHRoaXMudGFibGUuYWxsb3dDaGVja1JvdyAmJiB0aGlzLnRhYmxlLnJvd0NoZWNrZWQpIHtcclxuICAgICAgaWYgKCFYUGFyZW50UGF0aChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmluY2x1ZGVzKCd4LWNoZWNrYm94JykpIHtcclxuICAgICAgICByb3dbdGhpcy50YWJsZS5yb3dDaGVja2VkLmlkXSA9ICFyb3dbdGhpcy50YWJsZS5yb3dDaGVja2VkLmlkXTtcclxuICAgICAgICB0aGlzLnRhYmxlLmJvZHlDaGVja2VkKHJvd1t0aGlzLnRhYmxlLnJvd0NoZWNrZWQuaWRdLCB0aGlzLnRhYmxlLnJvd0NoZWNrZWQsIHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZhdGVkUm93Q2hhbmdlLmVtaXQocm93KTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kZWQoX2V2ZW50OiBFdmVudCwgbm9kZTogWFRhYmxlUm93KSB7XHJcbiAgICBub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5SXRlbShfaW5kZXg6IG51bWJlciwgaXRlbTogWFRhYmxlUm93IHwgWFRhYmxlQ29sdW1uKSB7XHJcbiAgICByZXR1cm4gaXRlbS5pZDtcclxuICB9XHJcbn1cclxuIiwiPHRib2R5ICN0Ym9keT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbENvbmZpZzsgZWxzZSB2aXJ0dWFsU2Nyb2xsVHBsXCI+XHJcbiAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5SXRlbVwiIFtzdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zXT1cImNlbGxDb25maWcuZ3JpZFRlbXBsYXRlQ29sdW1uc1wiPlxyXG4gICAgICA8dGRcclxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNlbGxDb25maWcuY2VsbHM7IGluZGV4IGFzIGpcIlxyXG4gICAgICAgIFt0aXRsZV09XCJnZXRUaXRsZShyb3csIGNvbHVtbilcIlxyXG4gICAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreV09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0KGNvbHVtbikgfHwgdGFibGUuZ2V0U3RpY2t5UmlnaHQoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LWxlZnRdPVwidGFibGUuZ2V0U3RpY2t5TGVmdChjb2x1bW4pXCJcclxuICAgICAgICBbY2xhc3MueC10YWJsZS1zdGlja3ktcmlnaHRdPVwidGFibGUuZ2V0U3RpY2t5UmlnaHQoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LWxlZnQtbGFzdF09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0TGFzdChjb2x1bW4pXCJcclxuICAgICAgICBbY2xhc3MueC10YWJsZS1zdGlja3ktcmlnaHQtZmlyc3RdPVwidGFibGUuZ2V0U3RpY2t5UmlnaHRGaXJzdChjb2x1bW4pXCJcclxuICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXHJcbiAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXHJcbiAgICAgICAgW3N0eWxlLmdyaWQtYXJlYV09XCJjb2x1bW4uZ3JpZEFyZWFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUcGw7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4sIHJvdzogcm93LCBpOiBpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC90ZD5cclxuICAgIDwvdHI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPHgtZW1wdHkgKm5nSWY9XCJpc0VtcHR5ICYmIGxldmVsID09PSAwXCI+PC94LWVtcHR5PlxyXG48L3Rib2R5PlxyXG5cclxuPG5nLXRlbXBsYXRlICN2aXJ0dWFsU2Nyb2xsVHBsPlxyXG4gIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcclxuICAgICN2aXJ0dWFsQm9keVxyXG4gICAgKm5nSWY9XCJ2aXJ0dWFsU2Nyb2xsOyBlbHNlIGJvZHlUcGxcIlxyXG4gICAgW2l0ZW1TaXplXT1cImdldEl0ZW1TaXplXCJcclxuICAgIFttaW5CdWZmZXJQeF09XCJtaW5CdWZmZXJQeFwiXHJcbiAgICBbbWF4QnVmZmVyUHhdPVwibWF4QnVmZmVyUHhcIlxyXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJib2R5SGVpZ2h0XCJcclxuICA+XHJcbiAgICA8dHJcclxuICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgcm93IG9mIGRhdGE7IGxldCBpbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SXRlbVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLWFjdGl2YXRlZF09XCJhbGxvd1NlbGVjdFJvdyAmJiBhY3RpdmF0ZWRSb3c/LmlkID09PSByb3cuaWRcIlxyXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICAgIChjbGljayk9XCJyb3dDbGljaygkZXZlbnQsIHJvdylcIlxyXG4gICAgPlxyXG4gICAgICA8IS0tIHJvd0hlaWdodCDkuLogMCDnmoTml7blgJnvvIxpbmRleCDkuIvmoIfojrflj5bkuI3liLAgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dUcGw7IGNvbnRleHQ6IHsgcm93OiByb3csIGk6IGdldEluZGV4KGluZGV4LCByb3cpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdHI+XHJcbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2JvZHlUcGw+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGE7IGluZGV4IGFzIGk7IHRyYWNrQnk6IHRyYWNrQnlJdGVtXCI+XHJcbiAgICA8dHJcclxuICAgICAgW2NsYXNzLngtdGFibGUtYWN0aXZhdGVkXT1cImFsbG93U2VsZWN0Um93ICYmIGFjdGl2YXRlZFJvdz8uaWQgPT09IHJvdy5pZFwiXHJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgICAgKGNsaWNrKT1cInJvd0NsaWNrKCRldmVudCwgcm93KVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dUcGw7IGNvbnRleHQ6IHsgcm93OiByb3csIGk6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC90cj5cclxuICAgIDxkaXYgY2xhc3M9XCJ4LXRhYmxlLWNoaWxkcmVuXCIgW2NsYXNzLngtdGFibGUtZXhwYW5kVHBsXT1cImV4cGFuZFRwbFwiICpuZ0lmPVwidGFibGUudHJlZVRhYmxlICYmIHJvdy5jaGlsZHJlbiAmJiByb3cuZXhwYW5kZWRcIj5cclxuICAgICAgPHgtdGFibGUtYm9keVxyXG4gICAgICAgIFtkYXRhXT1cInJvdy5jaGlsZHJlblwiXHJcbiAgICAgICAgW2NvbHVtbnNdPVwidGFibGUuY29sdW1uc1wiXHJcbiAgICAgICAgW2l0ZW1TaXplXT1cInRhYmxlLml0ZW1TaXplXCJcclxuICAgICAgICBbcm93SGVpZ2h0XT1cInRhYmxlLnJvd0hlaWdodFwiXHJcbiAgICAgICAgW2NvbHVtblRwbF09XCJ0YWJsZS5ib2R5Q29sdW1uVHBsXCJcclxuICAgICAgICBbYWxsb3dTZWxlY3RSb3ddPVwidGFibGUuYWxsb3dTZWxlY3RSb3dcIlxyXG4gICAgICAgIFtyb3dDbGFzc109XCJ0YWJsZS5yb3dDbGFzc1wiXHJcbiAgICAgICAgW2NlbGxDb25maWddPVwidGFibGUuY2VsbENvbmZpZz8udGJvZHlcIlxyXG4gICAgICAgIFsoYWN0aXZhdGVkUm93KV09XCJ0YWJsZS5hY3RpdmF0ZWRSb3dcIlxyXG4gICAgICAgIFtleHBhbmRlZEFsbF09XCJleHBhbmRlZEFsbFwiXHJcbiAgICAgICAgW2V4cGFuZFRwbF09XCJleHBhbmRUcGxcIlxyXG4gICAgICAgIChhY3RpdmF0ZWRSb3dDaGFuZ2UpPVwidGFibGUuYWN0aXZhdGVkUm93Q2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgW2xldmVsXT1cInJvdy5sZXZlbCEgKyAxXCJcclxuICAgICAgICBbdGFibGVdPVwidGFibGVcIlxyXG4gICAgICA+PC94LXRhYmxlLWJvZHk+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcm93VHBsIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImlcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibGV2ZWwgPiAwICYmIGV4cGFuZFRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqeE91dGxldD1cImV4cGFuZFRwbDsgY29udGV4dDogeyAkcm93OiByb3csICRpbmRleDogaSwgJGxldmVsOiBsZXZlbCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxldmVsID09PSAwIHx8ICFleHBhbmRUcGxcIj5cclxuICAgIDxuZy1jb250YWluZXIgKnhPdXRsZXQ9XCJyb3dEZWZhdWx0OyBjb250ZXh0OiB7IHJvdzogcm93LCBpOiBpLCBsZXZlbDogbGV2ZWwgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNyb3dEZWZhdWx0IGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImlcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgaW5kZXggYXMgajsgdHJhY2tCeTogdHJhY2tCeUl0ZW1cIj5cclxuICAgIDx0ZFxyXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcclxuICAgICAgW3N0eWxlLmZsZXhdPVwiZ2V0RmxleChjb2x1bW4pXCJcclxuICAgICAgW3RpdGxlXT1cImdldFRpdGxlKHJvdywgY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLWRyYWdnaW5nXT1cImNvbHVtbi5kcmFnZ2luZ1wiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreV09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0KGNvbHVtbikgfHwgdGFibGUuZ2V0U3RpY2t5UmlnaHQoY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1sZWZ0XT1cInRhYmxlLmdldFN0aWNreUxlZnQoY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1yaWdodF09XCJ0YWJsZS5nZXRTdGlja3lSaWdodChjb2x1bW4pXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LWxlZnQtbGFzdF09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0TGFzdChjb2x1bW4pXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LXJpZ2h0LWZpcnN0XT1cInRhYmxlLmdldFN0aWNreVJpZ2h0Rmlyc3QoY29sdW1uKVwiXHJcbiAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcclxuICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIiFyb3dDbGFzcyA/IHt9IDogcm93Q2xhc3Mocm93LCBpKVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUcGw7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4sIHJvdzogcm93LCBpOiBpIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgPC90ZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY2VsbFRwbCBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LXJvdz1cInJvd1wiIGxldC1pPVwiaVwiPlxyXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgIDx4LWNoZWNrYm94XHJcbiAgICAgICAgW2RhdGFdPVwiW3sgaWQ6IHRydWUsIGxhYmVsOiAnJyB9XVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmlkXVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJvdy5kaXNhYmxlZFwiXHJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGFibGUuYm9keUNoZWNrZWQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxyXG4gICAgICA+PC94LWNoZWNrYm94PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW5kZXgnXCI+XHJcbiAgICAgIDxkaXY+e3sgdGFibGUuZ2V0SW5kZXgoaSkgfX08L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGUuaXNFeHBhbmRDb2x1bW4oY29sdW1uKVwiPlxyXG4gICAgICAgIDx4LWJ1dHRvblxyXG4gICAgICAgICAgW2NsYXNzLmlzLWxlYWZdPVwiIXJvdy5sZWFmXCJcclxuICAgICAgICAgIFtjbGFzcy5pcy1leHBhbmRlZF09XCJyb3cuZXhwYW5kZWRcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kZWQoJGV2ZW50LCByb3cpXCJcclxuICAgICAgICAgIGljb249XCJmdG8tY2hldnJvbi1yaWdodFwiXHJcbiAgICAgICAgICBzaXplPVwibWluaVwiXHJcbiAgICAgICAgICBvbmx5SWNvblxyXG4gICAgICAgICAgY2xhc3M9XCJ4LXRhYmxlLWV4cGFuZFwiXHJcbiAgICAgICAgICBbc3R5bGUubWFyZ2luLWxlZnQucmVtXT1cInJvdy5sZXZlbCAtIDAuNVwiXHJcbiAgICAgICAgPjwveC1idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICp4T3V0bGV0PVwiY29sdW1uVHBsW2NvbHVtbi5pZF07IGNvbnRleHQ6IHsgJGNvbHVtbjogY29sdW1uLCAkcm93OiByb3csICRpbmRleDogdGFibGUuZ2V0SW5kZXgoaSkgfVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKnhPdXRsZXQ9XCJ0YWJsZS5ib2R5VGRUcGw7IGNvbnRleHQ6IHsgJGNvbHVtbjogY29sdW1uLCAkcm93OiByb3csICRpbmRleDogdGFibGUuZ2V0SW5kZXgoaSkgfVwiPlxyXG4gICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cInJvd1tjb2x1bW4uaWRdXCIgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sdW1uLnRleHRBbGlnblwiPjwvZGl2PlxyXG4gICAgICAgICAge3sgdGFibGUucm93RXhwYW5kTmV4dCAmJiB0YWJsZS5yb3dFeHBhbmROZXh0LmlkID09PSBjb2x1bW4uaWQgPyAneC10YWJsZS1ib2R5LWxldmVsLScgKyByb3cubGV2ZWwgOiAnJyB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -311,11 +311,12 @@ export class XTableComponent extends XTableProperty {
311
311
  }
312
312
  });
313
313
  this.setCheckedValues(column);
314
- this.headCheckboxChange.emit(this.checkedValues);
314
+ this.headCheckboxChange.emit({ rows: this.tableData, checkbox: this.checkedValues });
315
315
  this.detectChanges();
316
316
  }
317
- bodyChecked(_checked, column) {
317
+ bodyChecked(_checked, column, row) {
318
318
  this.setCheckedValues(column);
319
+ this.bodyCheckboxChange.emit(row);
319
320
  this.detectChanges();
320
321
  }
321
322
  setCheckedValues(column) {
@@ -359,4 +360,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
359
360
  type: ViewChild,
360
361
  args: ['stickyBottomRightEle']
361
362
  }] } });
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFJakIsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBNkQsTUFBTSxrQkFBa0IsQ0FBQztBQUMzSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBK0MsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHbEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFTL0IsTUFBTSxPQUFPLGVBQWdCLFNBQVEsY0FBYztJQWlFakQsWUFDUyxRQUFtQixFQUNuQixVQUFtQyxFQUNuQyxHQUFzQixFQUN0QixhQUE2QjtRQUVwQyxLQUFLLEVBQUUsQ0FBQztRQUxELGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBbEN0QyxXQUFNLEdBQThCLEVBQUUsQ0FBQztRQUd2QyxpQkFBWSxHQUFtQixFQUFFLENBQUM7UUFHbEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFD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LEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzVGLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JELEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbEMsSUFBSSxFQUFFLENBQUM7YUFDUjtTQUNGO0lBQ0gsQ0FBQzs7K0hBbldVLGVBQWU7bUhBQWYsZUFBZSxta0JDMUI1QixpdklBa0hBOzJGRHhGYSxlQUFlO2tCQVAzQixTQUFTOytCQUNFLEdBQUcsWUFBWSxFQUFFLGlCQUdaLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07c0xBNkQzQixLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ0ksT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUNLLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDUyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNLLG9CQUFvQjtzQkFBdEQsU0FBUzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgUmVuZGVyZXIyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT25EZXN0cm95XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhUYWJsZVByZWZpeCwgWFRhYmxlUHJvcGVydHksIFhUYWJsZUNvbHVtbiwgWFRhYmxlUm93LCBYVGFibGVDZWxsLCBYVGFibGVDZWxsQ29uZmlnUnVsZSB9IGZyb20gJy4vdGFibGUucHJvcGVydHknO1xyXG5pbXBvcnQgeyBYSXNDaGFuZ2UsIFhJc0VtcHR5LCBYUmVzdWx0TGlzdCwgWE51bWJlciwgWFNvcnQsIFhDb25maWdTZXJ2aWNlLCBYSXNVbmRlZmluZWQgfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IFhQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvcGFnaW5hdGlvbic7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hUYWJsZVByZWZpeH1gLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYVGFibGVDb21wb25lbnQgZXh0ZW5kcyBYVGFibGVQcm9wZXJ0eSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBnZXQgZ2V0U2Nyb2xsTGVmdCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjcm9sbExlZnQgPiAwO1xyXG4gIH1cclxuICBnZXQgZ2V0U2Nyb2xsVG9wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsVG9wID4gMDtcclxuICB9XHJcbiAgZ2V0IGdldFJvd0hlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLnJvd0hlaWdodCA9PSAwID8gJycgOiB0aGlzLnJvd0hlaWdodDtcclxuICB9XHJcbiAgZ2V0IGdldFN0aWNreVRvcFNjcm9sbFRvcCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRjYXB0aW9uID8gdGhpcy50Y2FwdGlvbi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA6IDA7XHJcbiAgfVxyXG4gIGdldCBnZXRTdGlja3lCb3R0b21TY3JvbGxUb3AoKSB7XHJcbiAgICBsZXQgdG9wID0gMDtcclxuICAgIGlmICh0aGlzLmZvb3RlciAmJiB0aGlzLnRmb290KSB7XHJcbiAgICAgIHRvcCArPSB0aGlzLnRmb290Py5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCArIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9wO1xyXG4gIH1cclxuICBnZXQgZ2V0U3RpY2t5VG9wUmlnaHRFbGVIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy5zdGlja3lUb3BSaWdodEVsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGlja3lUb3BSaWdodEVsZS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgZ2V0U3RpY2t5Qm90dG9tUmlnaHRFbGVIZWlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy5zdGlja3lCb3R0b21SaWdodEVsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGlja3lCb3R0b21SaWdodEVsZS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuICB0Y2FwdGlvbiE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gIHRoZWFkczogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5bXSA9IFtdO1xyXG4gIHRmb290ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgdmlydHVhbEJvZHkhOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XHJcbiAgdGhlYWRzQ2hhbmdlOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xyXG4gIGJvZHlDaGFuZ2UhOiAoKSA9PiB2b2lkO1xyXG4gIHNjcm9sbENvbnRlbnRFbGUhOiBIVE1MRWxlbWVudDtcclxuICBoYXNTY3JvbGxZID0gZmFsc2U7XHJcbiAgc2Nyb2xsWVdpZHRoID0gMDtcclxuICBoYXNTY3JvbGxYID0gZmFsc2U7XHJcbiAgc2Nyb2xsWEhlaWdodCA9IDA7XHJcbiAgc2Nyb2xsWFdpZHRoITogbnVtYmVyIHwgbnVsbDtcclxuICBzY3JvbGxMZWZ0ID0gMDtcclxuICBzY3JvbGxMZWZ0TWF4ID0gZmFsc2U7XHJcbiAgc2Nyb2xsVG9wID0gMDtcclxuICByb3dDaGVja2VkITogWFRhYmxlQ29sdW1uO1xyXG4gIGhlYWRDaGVja2JveExpc3QhOiBYVGFibGVDb2x1bW5bXTtcclxuICByb3dFeHBhbmQhOiBYVGFibGVDb2x1bW47XHJcbiAgaGVhZEV4cGFuZExpc3QhOiBYVGFibGVDb2x1bW5bXTtcclxuICBkYXRhSXNGdW5jID0gZmFsc2U7XHJcbiAgZ2V0dGluZyA9IGZhbHNlO1xyXG4gIHRhYmxlRGF0YTogWFRhYmxlUm93W10gPSBbXTtcclxuICB0cmVlVGFibGVEYXRhOiBYVGFibGVSb3dbXSA9IFtdO1xyXG4gIGNoZWNrZWRWYWx1ZXM6IHsgW3Byb3A6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xyXG4gIGluZGV0ZXJtaW5hdGUgPSAnJCRpbmRldGVybWluYXRlJztcclxuICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnY2FwdGlvbicpIGNhcHRpb24hOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdwYWdpbmF0aW9uJykgcGFnaW5hdGlvbiE6IFhQYWdpbmF0aW9uQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ3N0aWNreVRvcFJpZ2h0RWxlJykgc3RpY2t5VG9wUmlnaHRFbGUhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdzdGlja3lCb3R0b21SaWdodEVsZScpIHN0aWNreUJvdHRvbVJpZ2h0RWxlITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgcHJpdmF0ZSBfdW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogWENvbmZpZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICAgIHRoaXMuc2V0Um93Q2hlY2tlZCgpO1xyXG4gICAgdGhpcy5zZXRSb3dFeHBhbmQoKTtcclxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblBvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhzaW1wbGVzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCB7IGRhdGEsIGNoZWNrZWRSb3csIGNvbHVtbnMsIGFjdGl2YXRlZFJvdywgbWFudWFsLCBzaG93UGFnaW5hdGlvbiwgZXhwYW5kZWRBbGwsIGNlbGxDb25maWcgfSA9IHNpbXBsZXM7XHJcbiAgICBYSXNDaGFuZ2UoZXhwYW5kZWRBbGwpICYmIHRoaXMuc2V0RXhwYW5kZWRBbGwoKTtcclxuICAgIFhJc0NoYW5nZShkYXRhLCBjaGVja2VkUm93KSAmJiB0aGlzLnNldERhdGEoKTtcclxuICAgIFhJc0NoYW5nZShjb2x1bW5zLCBhY3RpdmF0ZWRSb3csIHNob3dQYWdpbmF0aW9uKSAmJiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBYSXNDaGFuZ2UobWFudWFsKSAmJiB0aGlzLnNldE1hbnVhbCgpO1xyXG4gICAgWElzQ2hhbmdlKGNlbGxDb25maWcpICYmIHRoaXMuc2V0TWVyZ2UoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0Lm5leHQoKTtcclxuICAgIHRoaXMuX3VuU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy50Y2FwdGlvbiA9IHRoaXMuY2FwdGlvbjtcclxuICB9XHJcblxyXG4gIHNldENsYXNzTWFwKCkge1xyXG4gICAgdGhpcy5jbGFzc01hcCA9IHtcclxuICAgICAgW2Ake1hUYWJsZVByZWZpeH0tcm93LXNpemUtJHt0aGlzLnJvd1NpemV9YF06ICFYSXNFbXB0eSh0aGlzLnJvd1NpemUpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnaW5hdGlvblBvc2l0aW9uKCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYHgtdGFibGUtJHt0aGlzLnBhZ2luYXRpb25Qb3NpdGlvbn1gKTtcclxuICB9XHJcblxyXG4gIGdldFN0aWNreShjb2x1bW46IFhUYWJsZUNvbHVtbiB8IFhUYWJsZUNlbGwpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFN0aWNreUxlZnQoY29sdW1uKSB8fCB0aGlzLmdldFN0aWNreVJpZ2h0KGNvbHVtbik7XHJcbiAgfVxyXG5cclxuICBnZXRTdGlja3lMZWZ0KGNvbHVtbjogWFRhYmxlQ29sdW1uIHwgWFRhYmxlQ2VsbCkge1xyXG4gICAgcmV0dXJuIE51bWJlcihjb2x1bW4ubGVmdCkgPj0gMDtcclxuICB9XHJcblxyXG4gIGdldFN0aWNreUxlZnRMYXN0KGNvbHVtbjogWFRhYmxlQ29sdW1uIHwgWFRhYmxlQ2VsbCkge1xyXG4gICAgbGV0IGxlZnRzID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoeCkgPT4gTnVtYmVyKHgubGVmdCkgPj0gMCk7XHJcbiAgICBpZiAobGVmdHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gbGVmdHNbbGVmdHMubGVuZ3RoIC0gMV0uaWQgPT09IGNvbHVtbi5pZDtcclxuICB9XHJcblxyXG4gIGdldFN0aWNreVJpZ2h0KGNvbHVtbjogWFRhYmxlQ29sdW1uIHwgWFRhYmxlQ2VsbCkge1xyXG4gICAgcmV0dXJuIE51bWJlcihjb2x1bW4ucmlnaHQpID49IDA7XHJcbiAgfVxyXG5cclxuICBnZXRTdGlja3lSaWdodEZpcnN0KGNvbHVtbjogWFRhYmxlQ29sdW1uIHwgWFRhYmxlQ2VsbCkge1xyXG4gICAgbGV0IHJpZ2h0cyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKHgpID0+IE51bWJlcih4LnJpZ2h0KSA+PSAwKTtcclxuICAgIGlmIChyaWdodHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gcmlnaHRzWzBdLmlkID09PSBjb2x1bW4uaWQ7XHJcbiAgfVxyXG5cclxuICBoYXNTdGlja3lUb3BSaWdodCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlciAmJlxyXG4gICAgICAodGhpcy5oZWFkZXJQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5oZWFkZXJQb3NpdGlvbiA9PT0gJ3RvcC1ib3R0b20nKSAmJlxyXG4gICAgICB0aGlzLmNvbHVtbnMuc29tZSgoeCkgPT4gTnVtYmVyKHgucmlnaHQpID49IDApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaGFzU3RpY2t5VG9wUmlnaHRTZWFyY2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWFkU2VhcmNoVHBsID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFzU3RpY2t5Qm90dG9tUmlnaHQoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNob3dIZWFkZXIgJiZcclxuICAgICAgKHRoaXMuaGVhZGVyUG9zaXRpb24gPT09ICdib3R0b20nIHx8IHRoaXMuaGVhZGVyUG9zaXRpb24gPT09ICd0b3AtYm90dG9tJykgJiZcclxuICAgICAgdGhpcy5jb2x1bW5zLnNvbWUoKHgpID0+IE51bWJlcih4LnJpZ2h0KSA+PSAwKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEluZGV4KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAoTnVtYmVyKHRoaXMuaW5kZXgpIC0gMSkgKiBOdW1iZXIodGhpcy5zaXplKSArIGluZGV4ICsgMTtcclxuICB9XHJcblxyXG4gIHNldERhdGEoKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XHJcbiAgICAgIHRoaXMuZGF0YUlzRnVuYyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkKHRoaXMuZGF0YSk7XHJcbiAgICAgIHRoaXMuc2V0SGVhZENoZWNrYm94TGlzdCh0aGlzLmRhdGEpO1xyXG4gICAgICB0aGlzLnNldEV4cGFuZCh0aGlzLmRhdGEpO1xyXG4gICAgICB0aGlzLnNldEhlYWRFeHBhbmRMaXN0KCk7XHJcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICB0aGlzLmRhdGFJc0Z1bmMgPSB0cnVlO1xyXG4gICAgICB0aGlzLmdldERhdGFCeUZ1bmMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldERhdGFCeUZ1bmMoKSB7XHJcbiAgICBpZiAoIXRoaXMubWFudWFsKSByZXR1cm47XHJcbiAgICB0aGlzLmdldHRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0Lm5leHQoKTtcclxuICAgICh0aGlzLmRhdGEgYXMgRnVuY3Rpb24pKHRoaXMuaW5kZXgsIHRoaXMuc2l6ZSwgdGhpcy5xdWVyeSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHg6IFhSZXN1bHRMaXN0PFhUYWJsZVJvdz4pID0+IHtcclxuICAgICAgICBsZXQgW2RhdGEsIHRvdGFsXSA9IFt4Lmxpc3QgYXMgWFRhYmxlUm93W10sIHgudG90YWwgYXMgWE51bWJlcl07XHJcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbEJvZHkpIHtcclxuICAgICAgICAgIHRoaXMudmlydHVhbEJvZHkuc2Nyb2xsVG9JbmRleCgwKTtcclxuICAgICAgICAgIHRoaXMudmlydHVhbEJvZHkuY2hlY2tWaWV3cG9ydFNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0Q2hlY2tlZChkYXRhKTtcclxuICAgICAgICB0aGlzLnNldEhlYWRDaGVja2JveExpc3QoZGF0YSk7XHJcbiAgICAgICAgdGhpcy5zZXRFeHBhbmQoZGF0YSk7XHJcbiAgICAgICAgdGhpcy5zZXRIZWFkRXhwYW5kTGlzdCgpO1xyXG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRNYW51YWwoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhSXNGdW5jKSB0aGlzLmdldERhdGFCeUZ1bmMoKTtcclxuICB9XHJcblxyXG4gIHNldFJvd0NoZWNrZWQoKSB7XHJcbiAgICB0aGlzLnJvd0NoZWNrZWQgPSB0aGlzLmNvbHVtbnMuZmluZCgoeCkgPT4geC5yb3dDaGVja2VkKSBhcyBYVGFibGVDb2x1bW47XHJcbiAgICB0aGlzLmhlYWRDaGVja2JveExpc3QgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT09ICdjaGVja2JveCcgJiYgeC5oZWFkQ2hlY2tlZCk7XHJcbiAgfVxyXG5cclxuICBzZXRSb3dFeHBhbmQoKSB7XHJcbiAgICB0aGlzLnJvd0V4cGFuZCA9IHRoaXMuY29sdW1ucy5maW5kKCh4KSA9PiB4LnJvd0V4cGFuZCkgYXMgWFRhYmxlQ29sdW1uO1xyXG4gIH1cclxuXHJcbiAgaXNFeHBhbmRDb2x1bW4oY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIGxldCBleHBhbmRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoeCkgPT4geC5pZCA9PT0gY29sdW1uLmlkICYmIHgudHlwZSA9PT0gJ2V4cGFuZCcpO1xyXG4gICAgaWYgKGV4cGFuZENvbHVtbikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNldE1lcmdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNlbGxDb25maWcpIHJldHVybjtcclxuICAgIGNvbnN0IHNldFJ1bGUgPSAocnVsZT86IFhUYWJsZUNlbGxDb25maWdSdWxlKSA9PiB7XHJcbiAgICAgIGlmICghcnVsZSkgcmV0dXJuO1xyXG4gICAgICBsZXQgZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICcnLFxyXG4gICAgICAgIGNlbGxzID0gW107XHJcbiAgICAgIGlmICghcnVsZS5ncmlkVGVtcGxhdGVDb2x1bW5zKSB7XHJcbiAgICAgICAgZ3JpZFRlbXBsYXRlQ29sdW1ucyA9IGAke3RoaXMuY29sdW1uc1xyXG4gICAgICAgICAgLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC53aWR0aCkgcmV0dXJuIHgud2lkdGg7XHJcbiAgICAgICAgICAgIGlmICh4LmZsZXgpIHJldHVybiBgJHt4LmZsZXh9ZnJgO1xyXG4gICAgICAgICAgICByZXR1cm4gJzFmcic7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmpvaW4oJyAnKX1gO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghcnVsZS5jZWxscykgcmV0dXJuO1xyXG4gICAgICBjZWxscyA9IHJ1bGUuY2VsbHMubWFwKCh5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW5zLmZpbmQoKHopID0+IHouaWQgPT09IHkuaWQpO1xyXG4gICAgICAgIGlmIChjb2wpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLmNvbCwgLi4ueSB9IGFzIFhUYWJsZUNlbGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHsgZ3JpZFRlbXBsYXRlQ29sdW1ucywgY2VsbHMgfTtcclxuICAgIH07XHJcbiAgICB0aGlzLmNlbGxDb25maWcudGhlYWQgPSBzZXRSdWxlKHRoaXMuY2VsbENvbmZpZy50aGVhZCk7XHJcbiAgICB0aGlzLmNlbGxDb25maWcudGJvZHkgPSBzZXRSdWxlKHRoaXMuY2VsbENvbmZpZy50Ym9keSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2UoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xyXG4gICAgdGhpcy5kYXRhSXNGdW5jICYmIHRoaXMuZ2V0RGF0YUJ5RnVuYygpO1xyXG4gICAgdGhpcy5pbmRleENoYW5nZS5lbWl0KGluZGV4KTtcclxuICAgIHRoaXMucmVzZXRTY3JvbGwoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0U2Nyb2xsKHggPSB0cnVlLCB5ID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMuaGFzU2Nyb2xsWCAmJiB4KSB0aGlzLnZpcnR1YWxCb2R5Py5zY3JvbGxUbyh7IGxlZnQ6IDAgfSk7XHJcbiAgICBpZiAodGhpcy5oYXNTY3JvbGxZICYmIHkpIHRoaXMudmlydHVhbEJvZHk/LnNjcm9sbFRvKHsgdG9wOiAwIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2hlY2tlZChkYXRhOiBYVGFibGVSb3dbXSkge1xyXG4gICAgbGV0IHJlc3VsdDogWFRhYmxlUm93W10gPSBbXTtcclxuICAgIGlmIChYSXNFbXB0eShkYXRhKSB8fCAhdGhpcy5jaGVja2VkUm93KSByZXR1cm47XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5jaGVja2VkUm93KSB7XHJcbiAgICAgIGNvbnN0IGFyciA9IHRoaXMuY2hlY2tlZFJvd1trZXldO1xyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIGRhdGEgYXMgYW55W10pIHtcclxuICAgICAgICBpdGVtW2tleV0gPSBhcnIuaW5jbHVkZXMoaXRlbS5pZCk7XHJcbiAgICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgaXRlbV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgZGF0YSA9IFsuLi5yZXN1bHRdO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVhZENoZWNrYm94TGlzdChkYXRhOiBYVGFibGVSb3dbXSkge1xyXG4gICAgaWYgKFhJc0VtcHR5KGRhdGEpIHx8ICF0aGlzLmhlYWRDaGVja2JveExpc3QpIHJldHVybjtcclxuICAgIGZvciAobGV0IGNvbHVtbiBvZiB0aGlzLmhlYWRDaGVja2JveExpc3QpIHtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkVmFsdWVzKGNvbHVtbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRFeHBhbmQoZGF0YTogWFRhYmxlUm93W10pIHtcclxuICAgIGNvbnN0IGdldENoaWxkcmVuID0gKG5vZGU6IFhUYWJsZVJvdywgbGV2ZWw6IG51bWJlcikgPT4ge1xyXG4gICAgICBub2RlLmxldmVsID0gbGV2ZWw7XHJcbiAgICAgIG5vZGUuZXhwYW5kZWQgPSBCb29sZWFuKHRoaXMuZXhwYW5kZWRBbGwpIHx8IGxldmVsIDw9IHRoaXMuZXhwYW5kZWRMZXZlbCB8fCB0aGlzLmV4cGFuZGVkLmluY2x1ZGVzKG5vZGUuaWQpO1xyXG4gICAgICBpZiAoWElzVW5kZWZpbmVkKG5vZGUuY2hpbGRyZW4pKSBub2RlLmNoaWxkcmVuID0gZGF0YS5maWx0ZXIoKHkpID0+IHkucGlkID09PSBub2RlLmlkKTtcclxuICAgICAgaWYgKFhJc1VuZGVmaW5lZChub2RlLmxlYWYpKSBub2RlLmxlYWYgPSAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoIGFzIG51bWJlcikgPiAwO1xyXG4gICAgICBpZiAobm9kZS5sZWFmKSBub2RlLmNoaWxkcmVuPy5tYXAoKHkpID0+IGdldENoaWxkcmVuKHksIGxldmVsICsgMSkpO1xyXG4gICAgICByZXR1cm4gbm9kZTtcclxuICAgIH07XHJcbiAgICB0aGlzLnRyZWVUYWJsZURhdGEgPSBkYXRhXHJcbiAgICAgIC5maWx0ZXIoKHgpID0+IFhJc0VtcHR5KHgucGlkKSlcclxuICAgICAgLm1hcCgoeCwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoWElzVW5kZWZpbmVkKHguaWQpKSB4LmlkID0gaW5kZXggKyAxO1xyXG4gICAgICAgIHJldHVybiBnZXRDaGlsZHJlbih4LCAwKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRFeHBhbmRlZEFsbCgpIHtcclxuICAgIGlmICghdGhpcy50cmVlVGFibGUgfHwgdGhpcy50cmVlVGFibGVEYXRhPy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgIGNvbnN0IHNldENoaWxkcmVuID0gKG5vZGVzOiBYVGFibGVSb3dbXSkgPT4ge1xyXG4gICAgICBpZiAoWElzRW1wdHkobm9kZXMpKSByZXR1cm47XHJcbiAgICAgIG5vZGVzLmZvckVhY2goKHgpID0+IHtcclxuICAgICAgICB4LmV4cGFuZGVkID0gQm9vbGVhbih0aGlzLmV4cGFuZGVkQWxsKTtcclxuICAgICAgICBzZXRDaGlsZHJlbih4LmNoaWxkcmVuIGFzIFhUYWJsZVJvd1tdKTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgc2V0Q2hpbGRyZW4odGhpcy50cmVlVGFibGVEYXRhKTtcclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVhZEV4cGFuZExpc3QoKSB7fVxyXG5cclxuICBjaGVja1NvcnQoc29ydDogWFNvcnRbXSkge1xyXG4gICAgaWYgKCF0aGlzLmRhdGFJc0Z1bmMpIHJldHVybjtcclxuICAgIGlmICh0eXBlb2YgdGhpcy5xdWVyeSA9PT0gJ3VuZGVmaW5lZCcpIHRoaXMucXVlcnkgPSB7fTtcclxuICAgIHRoaXMucXVlcnkuc29ydCA9IHNvcnQ7XHJcbiAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQodGhpcy5xdWVyeSk7XHJcbiAgICB0aGlzLmdldERhdGFCeUZ1bmMoKTtcclxuICB9XHJcblxyXG4gIGhlYWRDaGVja2VkKGNoZWNrZWQ6IGJvb2xlYW4sIGNvbHVtbjogWFRhYmxlQ29sdW1uKSB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YS5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgIGlmICgheC5kaXNhYmxlZCkge1xyXG4gICAgICAgIHhbY29sdW1uLmlkXSA9IGNoZWNrZWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkVmFsdWVzKGNvbHVtbik7XHJcbiAgICB0aGlzLmhlYWRDaGVja2JveENoYW5nZS5lbWl0KHRoaXMuY2hlY2tlZFZhbHVlcyk7XHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGJvZHlDaGVja2VkKF9jaGVja2VkOiBib29sZWFuLCBjb2x1bW46IFhUYWJsZUNvbHVtbikge1xyXG4gICAgdGhpcy5zZXRDaGVja2VkVmFsdWVzKGNvbHVtbik7XHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldENoZWNrZWRWYWx1ZXMoY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIGNvbnN0IG5vdERpc2FibGVkID0gdGhpcy50YWJsZURhdGEuZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCk7XHJcbiAgICBjb25zdCBjb3VudCA9IG5vdERpc2FibGVkLmxlbmd0aDtcclxuICAgIGNvbnN0IGNoZWNrZWRMZW4gPSBub3REaXNhYmxlZC5maWx0ZXIoKHgpID0+IHhbY29sdW1uLmlkXSkubGVuZ3RoO1xyXG4gICAgdGhpcy5jaGVja2VkVmFsdWVzW2NvbHVtbi5pZF0gPSBjb3VudCA9PT0gY2hlY2tlZExlbiAmJiBjb3VudCAhPT0gMDtcclxuICAgIHRoaXMuY2hlY2tlZFZhbHVlc1tjb2x1bW4uaWQgKyB0aGlzLmluZGV0ZXJtaW5hdGVdID0gY2hlY2tlZExlbiA+IDAgJiYgY2hlY2tlZExlbiA8IGNvdW50O1xyXG4gIH1cclxuXHJcbiAgZGV0ZWN0Q2hhbmdlcygpIHtcclxuICAgIHRoaXMuYm9keUNoYW5nZSAmJiB0aGlzLmJvZHlDaGFuZ2UoKTtcclxuICAgIHRoaXMudGhlYWRzQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdGhlYWRzQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLnRoZWFkc0NoYW5nZSAmJiB0aGlzLnRoZWFkc0NoYW5nZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy50aGVhZHNDaGFuZ2UpIHtcclxuICAgICAgICBpdGVtKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHRhYmxlXHJcbiAgI3RhYmxlXHJcbiAgY2xhc3M9XCJ4LXRhYmxlXCJcclxuICBbbmdDbGFzc109XCJjbGFzc01hcFwiXHJcbiAgW3gtbG9hZGluZ109XCJsb2FkaW5nICYmIGdldHRpbmdcIlxyXG4gIFtjbGFzcy54LXRhYmxlLXdyYXAtYm9yZGVyLWhpZGRlbl09XCJoaWRkZW5XcmFwQm9yZGVyXCJcclxuICBbY2xhc3MueC10YWJsZS1zY3JvbGwtbGVmdF09XCJnZXRTY3JvbGxMZWZ0XCJcclxuICBbY2xhc3MueC10YWJsZS1zY3JvbGwtbGVmdC1tYXhdPVwic2Nyb2xsTGVmdE1heFwiXHJcbiAgW2NsYXNzLngtdGFibGUtc2Nyb2xsLXRvcF09XCJnZXRTY3JvbGxUb3BcIlxyXG4gIFtjbGFzcy54LXRhYmxlLWhhcy1zY3JvbGwtcmlnaHRdPVwic2Nyb2xsWVdpZHRoXCJcclxuICBbY2xhc3MueC10YWJsZS1oYXMtc2Nyb2xsLWJvdHRvbV09XCJzY3JvbGxYV2lkdGhcIlxyXG4gIFtjbGFzcy54LXRhYmxlLWJvcmRlcmVkXT1cImJvcmRlcmVkXCJcclxuICBbY2xhc3MueC10YWJsZS10ZC1hZGFwdGlvbi1oZWlnaHRdPVwicm93SGVpZ2h0ID09IDBcIlxyXG4gIFtjbGFzcy54LXRhYmxlLWNlbGwtY29uZmlnXT1cImNlbGxDb25maWdcIlxyXG4+XHJcbiAgPGNhcHRpb24gI2NhcHRpb24gY2xhc3M9XCJ4LXRhYmxlLWhlYWRlclwiICpuZ0lmPVwiaGVhZGVyXCIgW3N0eWxlLmhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIiBbc3R5bGUubWluLWhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIj5cclxuICAgIDxuZy1jb250YWluZXIgKnhPdXRsZXQ9XCJoZWFkZXJcIj57eyBoZWFkZXIgfX08L25nLWNvbnRhaW5lcj5cclxuICA8L2NhcHRpb24+XHJcbiAgPHgtdGFibGUtaGVhZFxyXG4gICAgKm5nSWY9XCJzaG93SGVhZGVyICYmIChoZWFkZXJQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgaGVhZGVyUG9zaXRpb24gPT09ICd0b3AtYm90dG9tJylcIlxyXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodFwiXHJcbiAgICBbY29sdW1uVHBsXT1cImhlYWRDb2x1bW5UcGxcIlxyXG4gICAgW3Njcm9sbFlXaWR0aF09XCJzY3JvbGxZV2lkdGhcIlxyXG4gICAgW3Njcm9sbFhXaWR0aF09XCJzY3JvbGxYV2lkdGhcIlxyXG4gICAgW2NlbGxDb25maWddPVwiY2VsbENvbmZpZz8udGhlYWRcIlxyXG4gICAgW3Bvc2l0aW9uXT1cIid0b3AnXCJcclxuICAgIFt0YWJsZV09XCJ0aGlzXCJcclxuICA+PC94LXRhYmxlLWhlYWQ+XHJcbiAgPHgtdGFibGUtYm9keVxyXG4gICAgW2RhdGFdPVwidHJlZVRhYmxlID8gdHJlZVRhYmxlRGF0YSA6IHRhYmxlRGF0YVwiXHJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXHJcbiAgICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodFwiXHJcbiAgICBbYm9keUhlaWdodF09XCJib2R5SGVpZ2h0XCJcclxuICAgIFtjb2x1bW5UcGxdPVwiYm9keUNvbHVtblRwbFwiXHJcbiAgICBbYWxsb3dTZWxlY3RSb3ddPVwiYWxsb3dTZWxlY3RSb3dcIlxyXG4gICAgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXHJcbiAgICBbbWluQnVmZmVyUHhdPVwibWluQnVmZmVyUHhcIlxyXG4gICAgW21heEJ1ZmZlclB4XT1cIm1heEJ1ZmZlclB4XCJcclxuICAgIFthZGFwdGlvbkhlaWdodF09XCJhZGFwdGlvbkhlaWdodFwiXHJcbiAgICBbZG9jUGVyY2VudF09XCJkb2NQZXJjZW50XCJcclxuICAgIFtzY3JvbGxdPVwic2Nyb2xsXCJcclxuICAgIFtyb3dDbGFzc109XCJyb3dDbGFzc1wiXHJcbiAgICBbY2VsbENvbmZpZ109XCJjZWxsQ29uZmlnPy50Ym9keVwiXHJcbiAgICBbZXhwYW5kZWRBbGxdPVwiZXhwYW5kZWRBbGxcIlxyXG4gICAgW2V4cGFuZFRwbF09XCJleHBhbmRUcGxcIlxyXG4gICAgWyhhY3RpdmF0ZWRSb3cpXT1cImFjdGl2YXRlZFJvd1wiXHJcbiAgICAoYWN0aXZhdGVkUm93Q2hhbmdlKT1cImFjdGl2YXRlZFJvd0NoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgW3RhYmxlXT1cInRoaXNcIlxyXG4gID48L3gtdGFibGUtYm9keT5cclxuICA8eC10YWJsZS1oZWFkXHJcbiAgICAqbmdJZj1cInNob3dIZWFkZXIgJiYgKGhlYWRlclBvc2l0aW9uID09PSAnYm90dG9tJyB8fCBoZWFkZXJQb3NpdGlvbiA9PT0gJ3RvcC1ib3R0b20nKVwiXHJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0XCJcclxuICAgIFtjb2x1bW5UcGxdPVwiaGVhZENvbHVtblRwbFwiXHJcbiAgICBbc2Nyb2xsWVdpZHRoXT1cInNjcm9sbFlXaWR0aFwiXHJcbiAgICBbc2Nyb2xsWFdpZHRoXT1cInNjcm9sbFhXaWR0aFwiXHJcbiAgICBbY2VsbENvbmZpZ109XCJjZWxsQ29uZmlnPy50aGVhZFwiXHJcbiAgICBbcG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxyXG4gICAgW3RhYmxlXT1cInRoaXNcIlxyXG4gID48L3gtdGFibGUtaGVhZD5cclxuICA8eC10YWJsZS1mb290ICpuZ0lmPVwiZm9vdGVyXCIgW3RhYmxlXT1cInRoaXNcIiBbZm9vdGVyXT1cImZvb3RlclwiIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0XCI+PC94LXRhYmxlLWZvb3Q+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJoYXNTdGlja3lUb3BSaWdodCgpXCJcclxuICAgICNzdGlja3lUb3BSaWdodEVsZVxyXG4gICAgY2xhc3M9XCJ4LXRhYmxlLXN0aWNreS1yaWdodC1zY3JvbGxcIlxyXG4gICAgW2NsYXNzLngtdGFibGUtYm9yZGVyLWJvdHRvbV09XCJoZWFkU2VhcmNoVHBsXCJcclxuICAgIFtzdHlsZS50b3AucHhdPVwiZ2V0U3RpY2t5VG9wU2Nyb2xsVG9wXCJcclxuICAgIFtzdHlsZS53aWR0aC5weF09XCJzY3JvbGxZV2lkdGhcIlxyXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIlxyXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJoYXNTdGlja3lUb3BSaWdodCgpICYmIGhlYWRTZWFyY2hUcGxcIlxyXG4gICAgY2xhc3M9XCJ4LXRhYmxlLXN0aWNreS1yaWdodC1zY3JvbGxcIlxyXG4gICAgW3N0eWxlLnRvcC5weF09XCJnZXRTdGlja3lUb3BTY3JvbGxUb3AgKyBnZXRTdGlja3lUb3BSaWdodEVsZUhlaWdodFwiXHJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsWVdpZHRoXCJcclxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiaGFzU3RpY2t5Qm90dG9tUmlnaHQoKVwiXHJcbiAgICAjc3RpY2t5Qm90dG9tUmlnaHRFbGVcclxuICAgIGNsYXNzPVwieC10YWJsZS1zdGlja3ktcmlnaHQtc2Nyb2xsXCJcclxuICAgIFtzdHlsZS5ib3R0b20ucHhdPVwiZ2V0U3RpY2t5Qm90dG9tU2Nyb2xsVG9wXCJcclxuICAgIFtzdHlsZS53aWR0aC5weF09XCJzY3JvbGxZV2lkdGhcIlxyXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIlxyXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJoYXNTdGlja3lCb3R0b21SaWdodCgpICYmIGhlYWRTZWFyY2hUcGxcIlxyXG4gICAgY2xhc3M9XCJ4LXRhYmxlLXN0aWNreS1yaWdodC1zY3JvbGxcIlxyXG4gICAgW2NsYXNzLngtdGFibGUtYm9yZGVyLWJvdHRvbV09XCJoZWFkU2VhcmNoVHBsXCJcclxuICAgIFtzdHlsZS5ib3R0b20ucHhdPVwiZ2V0U3RpY2t5Qm90dG9tU2Nyb2xsVG9wICsgZ2V0U3RpY2t5Qm90dG9tUmlnaHRFbGVIZWlnaHRcIlxyXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cInNjcm9sbFlXaWR0aFwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIlxyXG4gID48L2Rpdj5cclxuPC90YWJsZT5cclxuPHgtcGFnaW5hdGlvblxyXG4gICNwYWdpbmF0aW9uXHJcbiAgKm5nSWY9XCJzaG93UGFnaW5hdGlvbiAmJiBzaXplXCJcclxuICBbKGluZGV4KV09XCJpbmRleFwiXHJcbiAgWyhzaXplKV09XCJzaXplXCJcclxuICBbKHF1ZXJ5KV09XCJxdWVyeVwiXHJcbiAgW3RvdGFsXT1cInRvdGFsXCJcclxuICAoaW5kZXhDaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIlxyXG4gIFtzaG93RWxsaXBzaXNdPVwic2hvd0VsbGlwc2lzXCJcclxuICBbc2hvd1RvdGFsXT1cInNob3dUb3RhbFwiXHJcbiAgW3NwYWNlXT1cInNwYWNlXCJcclxuICBbaGlkZGVuQm9yZGVyXT1cImhpZGRlblBhZ2luYXRpb25Cb3JkZXIhXCJcclxuPlxyXG48L3gtcGFnaW5hdGlvbj5cclxuIl19
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFJakIsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBNkQsTUFBTSxrQkFBa0IsQ0FBQztBQUMzSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBK0MsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHbEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFTL0IsTUFBTSxPQUFPLGVBQWdCLFNBQVEsY0FBYztJQWlFakQsWUFDUyxRQUFtQixFQUNuQixVQUFtQyxFQUNuQyxHQUFzQixFQUN0QixhQUE2QjtRQUVwQyxLQUFLLEVBQUUsQ0FBQztRQUxELGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBbEN0QyxXQUFNLEdBQThCLEVBQUUsQ0FBQztRQUd2QyxpQkFBWSxHQUFtQixFQUFFLENBQUM7UUFHbEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBS2QsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGNBQVMsR0FBZ0IsRUFBRSxDQUFDO1FBQzVCLGtCQUFhLEdBQWdCLEVBQUUsQ0FBQztRQUNoQyxrQkFBYSxHQUFnQyxFQUFFLENBQUM7UUFDaEQsa0JBQWEsR0FBRyxpQkFBaUIsQ0FBQztRQU0xQixlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQVF6QyxDQUFDO0lBdkVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsSUFBSSx3QkFBd0I7UUFDMUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDN0IsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxJQUFJLDBCQUEwQjtRQUM1QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1NBQzFEO2FBQU07WUFDTCxPQUFPLENBQUMsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQUNELElBQUksNkJBQTZCO1FBQy9CLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7U0FDN0Q7YUFBTTtZQUNMLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7SUFDSCxDQUFDO0lBeUNELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzdHLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEQsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3RSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsQ0FBQyxHQUFHLFlBQVksYUFBYSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3RFLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBaUM7UUFDekMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFpQztRQUM3QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFpQztRQUNqRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3JDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFpQztRQUM5QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFpQztRQUNuRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLENBQ0wsSUFBSSxDQUFDLFVBQVU7WUFDZixDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssWUFBWSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxDQUNMLElBQUksQ0FBQyxVQUFVO1lBQ2YsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFlBQVksQ0FBQztZQUMxRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLElBQUksWUFBWSxRQUFRLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNoQyxTQUFTLENBQUMsQ0FBQyxDQUF5QixFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFtQixFQUFFLENBQUMsQ0FBQyxLQUFnQixDQUFDLENBQUM7WUFDaEUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFpQixDQUFDO1FBQ3pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBaUIsQ0FBQztJQUN6RSxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQW9CO1FBQ2pDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztRQUN2RixJQUFJLFlBQVksRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDN0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUEyQixFQUFFLEVBQUU7WUFDOUMsSUFBSSxDQUFDLElBQUk7Z0JBQUUsT0FBTztZQUNsQixJQUFJLG1CQUFtQixHQUFHLEVBQUUsRUFDMUIsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzdCLG1CQUFtQixHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU87cUJBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNULElBQUksQ0FBQyxDQUFDLEtBQUs7d0JBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUM1QixJQUFJLENBQUMsQ0FBQyxJQUFJO3dCQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7b0JBQ2pDLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUMsQ0FBQztxQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzthQUNoQjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBQ3hCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BELElBQUksR0FBRyxFQUFFO29CQUNQLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBZ0IsQ0FBQztpQkFDdkM7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSTtRQUM1QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQztZQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUM7WUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBaUI7UUFDMUIsSUFBSSxNQUFNLEdBQWdCLEVBQUUsQ0FBQztRQUM3QixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUMvQyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxLQUFLLElBQUksSUFBSSxJQUFJLElBQWEsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM1QjtTQUNGO1FBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFpQjtRQUNuQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBQ3JELEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsSUFBaUI7UUFDekIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFlLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkYsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBRSxJQUFJLENBQUMsSUFBSSxHQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBaUIsR0FBRyxDQUFDLENBQUM7WUFDL0UsSUFBSSxJQUFJLENBQUMsSUFBSTtnQkFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSTthQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hCLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDaEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDekMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU87WUFDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNsQixDQUFDLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3ZDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBdUIsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGlCQUFpQixLQUFJLENBQUM7SUFFdEIsU0FBUyxDQUFDLElBQWE7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUM3QixJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXO1lBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFnQixFQUFFLE1BQW9CO1FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7YUFDeEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWlCLEVBQUUsTUFBb0IsRUFBRSxHQUFjO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBb0I7UUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDakMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEtBQUssVUFBVSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUYsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckQsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNsQyxJQUFJLEVBQUUsQ0FBQzthQUNSO1NBQ0Y7SUFDSCxDQUFDOzsrSEFwV1UsZUFBZTttSEFBZixlQUFlLG1rQkMxQjVCLGl2SUFrSEE7MkZEeEZhLGVBQWU7a0JBUDNCLFNBQVM7K0JBQ0UsR0FBRyxZQUFZLEVBQUUsaUJBR1osaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTtzTEE2RDNCLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDSSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ0ssVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNTLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0ssb0JBQW9CO3NCQUF0RCxTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBSZW5kZXJlcjIsXHJcbiAgRWxlbWVudFJlZixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBPbkRlc3Ryb3lcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWFRhYmxlUHJlZml4LCBYVGFibGVQcm9wZXJ0eSwgWFRhYmxlQ29sdW1uLCBYVGFibGVSb3csIFhUYWJsZUNlbGwsIFhUYWJsZUNlbGxDb25maWdSdWxlIH0gZnJvbSAnLi90YWJsZS5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IFhJc0NoYW5nZSwgWElzRW1wdHksIFhSZXN1bHRMaXN0LCBYTnVtYmVyLCBYU29ydCwgWENvbmZpZ1NlcnZpY2UsIFhJc1VuZGVmaW5lZCB9IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcclxuaW1wb3J0IHsgWFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS9wYWdpbmF0aW9uJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYCR7WFRhYmxlUHJlZml4fWAsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFhUYWJsZUNvbXBvbmVudCBleHRlbmRzIFhUYWJsZVByb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGdldCBnZXRTY3JvbGxMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsTGVmdCA+IDA7XHJcbiAgfVxyXG4gIGdldCBnZXRTY3JvbGxUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY3JvbGxUb3AgPiAwO1xyXG4gIH1cclxuICBnZXQgZ2V0Um93SGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucm93SGVpZ2h0ID09IDAgPyAnJyA6IHRoaXMucm93SGVpZ2h0O1xyXG4gIH1cclxuICBnZXQgZ2V0U3RpY2t5VG9wU2Nyb2xsVG9wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGNhcHRpb24gPyB0aGlzLnRjYXB0aW9uLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogMDtcclxuICB9XHJcbiAgZ2V0IGdldFN0aWNreUJvdHRvbVNjcm9sbFRvcCgpIHtcclxuICAgIGxldCB0b3AgPSAwO1xyXG4gICAgaWYgKHRoaXMuZm9vdGVyICYmIHRoaXMudGZvb3QpIHtcclxuICAgICAgdG9wICs9IHRoaXMudGZvb3Q/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgMTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b3A7XHJcbiAgfVxyXG4gIGdldCBnZXRTdGlja3lUb3BSaWdodEVsZUhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnN0aWNreVRvcFJpZ2h0RWxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnN0aWNreVRvcFJpZ2h0RWxlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBnZXRTdGlja3lCb3R0b21SaWdodEVsZUhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnN0aWNreUJvdHRvbVJpZ2h0RWxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnN0aWNreUJvdHRvbVJpZ2h0RWxlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRjYXB0aW9uITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgdGhlYWRzOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PltdID0gW107XHJcbiAgdGZvb3QhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICB2aXJ0dWFsQm9keSE6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcclxuICB0aGVhZHNDaGFuZ2U6ICgoKSA9PiB2b2lkKVtdID0gW107XHJcbiAgYm9keUNoYW5nZSE6ICgpID0+IHZvaWQ7XHJcbiAgc2Nyb2xsQ29udGVudEVsZSE6IEhUTUxFbGVtZW50O1xyXG4gIGhhc1Njcm9sbFkgPSBmYWxzZTtcclxuICBzY3JvbGxZV2lkdGggPSAwO1xyXG4gIGhhc1Njcm9sbFggPSBmYWxzZTtcclxuICBzY3JvbGxYSGVpZ2h0ID0gMDtcclxuICBzY3JvbGxYV2lkdGghOiBudW1iZXIgfCBudWxsO1xyXG4gIHNjcm9sbExlZnQgPSAwO1xyXG4gIHNjcm9sbExlZnRNYXggPSBmYWxzZTtcclxuICBzY3JvbGxUb3AgPSAwO1xyXG4gIHJvd0NoZWNrZWQhOiBYVGFibGVDb2x1bW47XHJcbiAgaGVhZENoZWNrYm94TGlzdCE6IFhUYWJsZUNvbHVtbltdO1xyXG4gIHJvd0V4cGFuZCE6IFhUYWJsZUNvbHVtbjtcclxuICBoZWFkRXhwYW5kTGlzdCE6IFhUYWJsZUNvbHVtbltdO1xyXG4gIGRhdGFJc0Z1bmMgPSBmYWxzZTtcclxuICBnZXR0aW5nID0gZmFsc2U7XHJcbiAgdGFibGVEYXRhOiBYVGFibGVSb3dbXSA9IFtdO1xyXG4gIHRyZWVUYWJsZURhdGE6IFhUYWJsZVJvd1tdID0gW107XHJcbiAgY2hlY2tlZFZhbHVlczogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XHJcbiAgaW5kZXRlcm1pbmF0ZSA9ICckJGluZGV0ZXJtaW5hdGUnO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGUhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdjYXB0aW9uJykgY2FwdGlvbiE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ3BhZ2luYXRpb24nKSBwYWdpbmF0aW9uITogWFBhZ2luYXRpb25Db21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnc3RpY2t5VG9wUmlnaHRFbGUnKSBzdGlja3lUb3BSaWdodEVsZSE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ3N0aWNreUJvdHRvbVJpZ2h0RWxlJykgc3RpY2t5Qm90dG9tUmlnaHRFbGUhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBwcml2YXRlIF91blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBYQ29uZmlnU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xyXG4gICAgdGhpcy5zZXRSb3dDaGVja2VkKCk7XHJcbiAgICB0aGlzLnNldFJvd0V4cGFuZCgpO1xyXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uUG9zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKHNpbXBsZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgY2hlY2tlZFJvdywgY29sdW1ucywgYWN0aXZhdGVkUm93LCBtYW51YWwsIHNob3dQYWdpbmF0aW9uLCBleHBhbmRlZEFsbCwgY2VsbENvbmZpZyB9ID0gc2ltcGxlcztcclxuICAgIFhJc0NoYW5nZShleHBhbmRlZEFsbCkgJiYgdGhpcy5zZXRFeHBhbmRlZEFsbCgpO1xyXG4gICAgWElzQ2hhbmdlKGRhdGEsIGNoZWNrZWRSb3cpICYmIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgWElzQ2hhbmdlKGNvbHVtbnMsIGFjdGl2YXRlZFJvdywgc2hvd1BhZ2luYXRpb24pICYmIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIFhJc0NoYW5nZShtYW51YWwpICYmIHRoaXMuc2V0TWFudWFsKCk7XHJcbiAgICBYSXNDaGFuZ2UoY2VsbENvbmZpZykgJiYgdGhpcy5zZXRNZXJnZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLl91blN1YmplY3QubmV4dCgpO1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnRjYXB0aW9uID0gdGhpcy5jYXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2xhc3NNYXAoKSB7XHJcbiAgICB0aGlzLmNsYXNzTWFwID0ge1xyXG4gICAgICBbYCR7WFRhYmxlUHJlZml4fS1yb3ctc2l6ZS0ke3RoaXMucm93U2l6ZX1gXTogIVhJc0VtcHR5KHRoaXMucm93U2l6ZSlcclxuICAgIH07XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdpbmF0aW9uUG9zaXRpb24oKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBgeC10YWJsZS0ke3RoaXMucGFnaW5hdGlvblBvc2l0aW9ufWApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RpY2t5KGNvbHVtbjogWFRhYmxlQ29sdW1uIHwgWFRhYmxlQ2VsbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RpY2t5TGVmdChjb2x1bW4pIHx8IHRoaXMuZ2V0U3RpY2t5UmlnaHQoY29sdW1uKTtcclxuICB9XHJcblxyXG4gIGdldFN0aWNreUxlZnQoY29sdW1uOiBYVGFibGVDb2x1bW4gfCBYVGFibGVDZWxsKSB7XHJcbiAgICByZXR1cm4gTnVtYmVyKGNvbHVtbi5sZWZ0KSA+PSAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RpY2t5TGVmdExhc3QoY29sdW1uOiBYVGFibGVDb2x1bW4gfCBYVGFibGVDZWxsKSB7XHJcbiAgICBsZXQgbGVmdHMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKCh4KSA9PiBOdW1iZXIoeC5sZWZ0KSA+PSAwKTtcclxuICAgIGlmIChsZWZ0cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBsZWZ0c1tsZWZ0cy5sZW5ndGggLSAxXS5pZCA9PT0gY29sdW1uLmlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RpY2t5UmlnaHQoY29sdW1uOiBYVGFibGVDb2x1bW4gfCBYVGFibGVDZWxsKSB7XHJcbiAgICByZXR1cm4gTnVtYmVyKGNvbHVtbi5yaWdodCkgPj0gMDtcclxuICB9XHJcblxyXG4gIGdldFN0aWNreVJpZ2h0Rmlyc3QoY29sdW1uOiBYVGFibGVDb2x1bW4gfCBYVGFibGVDZWxsKSB7XHJcbiAgICBsZXQgcmlnaHRzID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoeCkgPT4gTnVtYmVyKHgucmlnaHQpID49IDApO1xyXG4gICAgaWYgKHJpZ2h0cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiByaWdodHNbMF0uaWQgPT09IGNvbHVtbi5pZDtcclxuICB9XHJcblxyXG4gIGhhc1N0aWNreVRvcFJpZ2h0KCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5zaG93SGVhZGVyICYmXHJcbiAgICAgICh0aGlzLmhlYWRlclBvc2l0aW9uID09PSAndG9wJyB8fCB0aGlzLmhlYWRlclBvc2l0aW9uID09PSAndG9wLWJvdHRvbScpICYmXHJcbiAgICAgIHRoaXMuY29sdW1ucy5zb21lKCh4KSA9PiBOdW1iZXIoeC5yaWdodCkgPj0gMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBoYXNTdGlja3lUb3BSaWdodFNlYXJjaCgpIHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRTZWFyY2hUcGwgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYXNTdGlja3lCb3R0b21SaWdodCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlciAmJlxyXG4gICAgICAodGhpcy5oZWFkZXJQb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgdGhpcy5oZWFkZXJQb3NpdGlvbiA9PT0gJ3RvcC1ib3R0b20nKSAmJlxyXG4gICAgICB0aGlzLmNvbHVtbnMuc29tZSgoeCkgPT4gTnVtYmVyKHgucmlnaHQpID49IDApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5kZXgoaW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIChOdW1iZXIodGhpcy5pbmRleCkgLSAxKSAqIE51bWJlcih0aGlzLnNpemUpICsgaW5kZXggKyAxO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0YSgpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcclxuICAgICAgdGhpcy5kYXRhSXNGdW5jID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWQodGhpcy5kYXRhKTtcclxuICAgICAgdGhpcy5zZXRIZWFkQ2hlY2tib3hMaXN0KHRoaXMuZGF0YSk7XHJcbiAgICAgIHRoaXMuc2V0RXhwYW5kKHRoaXMuZGF0YSk7XHJcbiAgICAgIHRoaXMuc2V0SGVhZEV4cGFuZExpc3QoKTtcclxuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGF0YUlzRnVuYyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZ2V0RGF0YUJ5RnVuYygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YUJ5RnVuYygpIHtcclxuICAgIGlmICghdGhpcy5tYW51YWwpIHJldHVybjtcclxuICAgIHRoaXMuZ2V0dGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLl91blN1YmplY3QubmV4dCgpO1xyXG4gICAgKHRoaXMuZGF0YSBhcyBGdW5jdGlvbikodGhpcy5pbmRleCwgdGhpcy5zaXplLCB0aGlzLnF1ZXJ5KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KSlcclxuICAgICAgLnN1YnNjcmliZSgoeDogWFJlc3VsdExpc3Q8WFRhYmxlUm93PikgPT4ge1xyXG4gICAgICAgIGxldCBbZGF0YSwgdG90YWxdID0gW3gubGlzdCBhcyBYVGFibGVSb3dbXSwgeC50b3RhbCBhcyBYTnVtYmVyXTtcclxuICAgICAgICBpZiAodGhpcy52aXJ0dWFsQm9keSkge1xyXG4gICAgICAgICAgdGhpcy52aXJ0dWFsQm9keS5zY3JvbGxUb0luZGV4KDApO1xyXG4gICAgICAgICAgdGhpcy52aXJ0dWFsQm9keS5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRDaGVja2VkKGRhdGEpO1xyXG4gICAgICAgIHRoaXMuc2V0SGVhZENoZWNrYm94TGlzdChkYXRhKTtcclxuICAgICAgICB0aGlzLnNldEV4cGFuZChkYXRhKTtcclxuICAgICAgICB0aGlzLnNldEhlYWRFeHBhbmRMaXN0KCk7XHJcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xyXG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldE1hbnVhbCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGFJc0Z1bmMpIHRoaXMuZ2V0RGF0YUJ5RnVuYygpO1xyXG4gIH1cclxuXHJcbiAgc2V0Um93Q2hlY2tlZCgpIHtcclxuICAgIHRoaXMucm93Q2hlY2tlZCA9IHRoaXMuY29sdW1ucy5maW5kKCh4KSA9PiB4LnJvd0NoZWNrZWQpIGFzIFhUYWJsZUNvbHVtbjtcclxuICAgIHRoaXMuaGVhZENoZWNrYm94TGlzdCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKHgpID0+IHgudHlwZSA9PT0gJ2NoZWNrYm94JyAmJiB4LmhlYWRDaGVja2VkKTtcclxuICB9XHJcblxyXG4gIHNldFJvd0V4cGFuZCgpIHtcclxuICAgIHRoaXMucm93RXhwYW5kID0gdGhpcy5jb2x1bW5zLmZpbmQoKHgpID0+IHgucm93RXhwYW5kKSBhcyBYVGFibGVDb2x1bW47XHJcbiAgfVxyXG5cclxuICBpc0V4cGFuZENvbHVtbihjb2x1bW46IFhUYWJsZUNvbHVtbikge1xyXG4gICAgbGV0IGV4cGFuZENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKCh4KSA9PiB4LmlkID09PSBjb2x1bW4uaWQgJiYgeC50eXBlID09PSAnZXhwYW5kJyk7XHJcbiAgICBpZiAoZXhwYW5kQ29sdW1uKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0TWVyZ2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2VsbENvbmZpZykgcmV0dXJuO1xyXG4gICAgY29uc3Qgc2V0UnVsZSA9IChydWxlPzogWFRhYmxlQ2VsbENvbmZpZ1J1bGUpID0+IHtcclxuICAgICAgaWYgKCFydWxlKSByZXR1cm47XHJcbiAgICAgIGxldCBncmlkVGVtcGxhdGVDb2x1bW5zID0gJycsXHJcbiAgICAgICAgY2VsbHMgPSBbXTtcclxuICAgICAgaWYgKCFydWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnMpIHtcclxuICAgICAgICBncmlkVGVtcGxhdGVDb2x1bW5zID0gYCR7dGhpcy5jb2x1bW5zXHJcbiAgICAgICAgICAubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh4LndpZHRoKSByZXR1cm4geC53aWR0aDtcclxuICAgICAgICAgICAgaWYgKHguZmxleCkgcmV0dXJuIGAke3guZmxleH1mcmA7XHJcbiAgICAgICAgICAgIHJldHVybiAnMWZyJztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuam9pbignICcpfWA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFydWxlLmNlbGxzKSByZXR1cm47XHJcbiAgICAgIGNlbGxzID0gcnVsZS5jZWxscy5tYXAoKHkpID0+IHtcclxuICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNvbHVtbnMuZmluZCgoeikgPT4gei5pZCA9PT0geS5pZCk7XHJcbiAgICAgICAgaWYgKGNvbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4uY29sLCAuLi55IH0gYXMgWFRhYmxlQ2VsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4geyBncmlkVGVtcGxhdGVDb2x1bW5zLCBjZWxscyB9O1xyXG4gICAgfTtcclxuICAgIHRoaXMuY2VsbENvbmZpZy50aGVhZCA9IHNldFJ1bGUodGhpcy5jZWxsQ29uZmlnLnRoZWFkKTtcclxuICAgIHRoaXMuY2VsbENvbmZpZy50Ym9keSA9IHNldFJ1bGUodGhpcy5jZWxsQ29uZmlnLnRib2R5KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLmRhdGFJc0Z1bmMgJiYgdGhpcy5nZXREYXRhQnlGdW5jKCk7XHJcbiAgICB0aGlzLmluZGV4Q2hhbmdlLmVtaXQoaW5kZXgpO1xyXG4gICAgdGhpcy5yZXNldFNjcm9sbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRTY3JvbGwoeCA9IHRydWUsIHkgPSB0cnVlKSB7XHJcbiAgICBpZiAodGhpcy5oYXNTY3JvbGxYICYmIHgpIHRoaXMudmlydHVhbEJvZHk/LnNjcm9sbFRvKHsgbGVmdDogMCB9KTtcclxuICAgIGlmICh0aGlzLmhhc1Njcm9sbFkgJiYgeSkgdGhpcy52aXJ0dWFsQm9keT8uc2Nyb2xsVG8oeyB0b3A6IDAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRDaGVja2VkKGRhdGE6IFhUYWJsZVJvd1tdKSB7XHJcbiAgICBsZXQgcmVzdWx0OiBYVGFibGVSb3dbXSA9IFtdO1xyXG4gICAgaWYgKFhJc0VtcHR5KGRhdGEpIHx8ICF0aGlzLmNoZWNrZWRSb3cpIHJldHVybjtcclxuICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmNoZWNrZWRSb3cpIHtcclxuICAgICAgY29uc3QgYXJyID0gdGhpcy5jaGVja2VkUm93W2tleV07XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgZGF0YSBhcyBhbnlbXSkge1xyXG4gICAgICAgIGl0ZW1ba2V5XSA9IGFyci5pbmNsdWRlcyhpdGVtLmlkKTtcclxuICAgICAgICByZXN1bHQgPSBbLi4ucmVzdWx0LCBpdGVtXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSBkYXRhID0gWy4uLnJlc3VsdF07XHJcbiAgfVxyXG5cclxuICBzZXRIZWFkQ2hlY2tib3hMaXN0KGRhdGE6IFhUYWJsZVJvd1tdKSB7XHJcbiAgICBpZiAoWElzRW1wdHkoZGF0YSkgfHwgIXRoaXMuaGVhZENoZWNrYm94TGlzdCkgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgY29sdW1uIG9mIHRoaXMuaGVhZENoZWNrYm94TGlzdCkge1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRWYWx1ZXMoY29sdW1uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEV4cGFuZChkYXRhOiBYVGFibGVSb3dbXSkge1xyXG4gICAgY29uc3QgZ2V0Q2hpbGRyZW4gPSAobm9kZTogWFRhYmxlUm93LCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIG5vZGUubGV2ZWwgPSBsZXZlbDtcclxuICAgICAgbm9kZS5leHBhbmRlZCA9IEJvb2xlYW4odGhpcy5leHBhbmRlZEFsbCkgfHwgbGV2ZWwgPD0gdGhpcy5leHBhbmRlZExldmVsIHx8IHRoaXMuZXhwYW5kZWQuaW5jbHVkZXMobm9kZS5pZCk7XHJcbiAgICAgIGlmIChYSXNVbmRlZmluZWQobm9kZS5jaGlsZHJlbikpIG5vZGUuY2hpbGRyZW4gPSBkYXRhLmZpbHRlcigoeSkgPT4geS5waWQgPT09IG5vZGUuaWQpO1xyXG4gICAgICBpZiAoWElzVW5kZWZpbmVkKG5vZGUubGVhZikpIG5vZGUubGVhZiA9IChub2RlLmNoaWxkcmVuPy5sZW5ndGggYXMgbnVtYmVyKSA+IDA7XHJcbiAgICAgIGlmIChub2RlLmxlYWYpIG5vZGUuY2hpbGRyZW4/Lm1hcCgoeSkgPT4gZ2V0Q2hpbGRyZW4oeSwgbGV2ZWwgKyAxKSk7XHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfTtcclxuICAgIHRoaXMudHJlZVRhYmxlRGF0YSA9IGRhdGFcclxuICAgICAgLmZpbHRlcigoeCkgPT4gWElzRW1wdHkoeC5waWQpKVxyXG4gICAgICAubWFwKCh4LCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmIChYSXNVbmRlZmluZWQoeC5pZCkpIHguaWQgPSBpbmRleCArIDE7XHJcbiAgICAgICAgcmV0dXJuIGdldENoaWxkcmVuKHgsIDApO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldEV4cGFuZGVkQWxsKCkge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVUYWJsZSB8fCB0aGlzLnRyZWVUYWJsZURhdGE/Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgc2V0Q2hpbGRyZW4gPSAobm9kZXM6IFhUYWJsZVJvd1tdKSA9PiB7XHJcbiAgICAgIGlmIChYSXNFbXB0eShub2RlcykpIHJldHVybjtcclxuICAgICAgbm9kZXMuZm9yRWFjaCgoeCkgPT4ge1xyXG4gICAgICAgIHguZXhwYW5kZWQgPSBCb29sZWFuKHRoaXMuZXhwYW5kZWRBbGwpO1xyXG4gICAgICAgIHNldENoaWxkcmVuKHguY2hpbGRyZW4gYXMgWFRhYmxlUm93W10pO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICBzZXRDaGlsZHJlbih0aGlzLnRyZWVUYWJsZURhdGEpO1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWFkRXhwYW5kTGlzdCgpIHt9XHJcblxyXG4gIGNoZWNrU29ydChzb3J0OiBYU29ydFtdKSB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YUlzRnVuYykgcmV0dXJuO1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5ID09PSAndW5kZWZpbmVkJykgdGhpcy5xdWVyeSA9IHt9O1xyXG4gICAgdGhpcy5xdWVyeS5zb3J0ID0gc29ydDtcclxuICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdCh0aGlzLnF1ZXJ5KTtcclxuICAgIHRoaXMuZ2V0RGF0YUJ5RnVuYygpO1xyXG4gIH1cclxuXHJcbiAgaGVhZENoZWNrZWQoY2hlY2tlZDogYm9vbGVhbiwgY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIHRoaXMudGFibGVEYXRhLmZvckVhY2goKHgpID0+IHtcclxuICAgICAgaWYgKCF4LmRpc2FibGVkKSB7XHJcbiAgICAgICAgeFtjb2x1bW4uaWRdID0gY2hlY2tlZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRWYWx1ZXMoY29sdW1uKTtcclxuICAgIHRoaXMuaGVhZENoZWNrYm94Q2hhbmdlLmVtaXQoeyByb3dzOiB0aGlzLnRhYmxlRGF0YSwgY2hlY2tib3g6IHRoaXMuY2hlY2tlZFZhbHVlcyB9KTtcclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgYm9keUNoZWNrZWQoX2NoZWNrZWQ6IGJvb2xlYW4sIGNvbHVtbjogWFRhYmxlQ29sdW1uLCByb3c6IFhUYWJsZVJvdykge1xyXG4gICAgdGhpcy5zZXRDaGVja2VkVmFsdWVzKGNvbHVtbik7XHJcbiAgICB0aGlzLmJvZHlDaGVja2JveENoYW5nZS5lbWl0KHJvdyk7XHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldENoZWNrZWRWYWx1ZXMoY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIGNvbnN0IG5vdERpc2FibGVkID0gdGhpcy50YWJsZURhdGEuZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCk7XHJcbiAgICBjb25zdCBjb3VudCA9IG5vdERpc2FibGVkLmxlbmd0aDtcclxuICAgIGNvbnN0IGNoZWNrZWRMZW4gPSBub3REaXNhYmxlZC5maWx0ZXIoKHgpID0+IHhbY29sdW1uLmlkXSkubGVuZ3RoO1xyXG4gICAgdGhpcy5jaGVja2VkVmFsdWVzW2NvbHVtbi5pZF0gPSBjb3VudCA9PT0gY2hlY2tlZExlbiAmJiBjb3VudCAhPT0gMDtcclxuICAgIHRoaXMuY2hlY2tlZFZhbHVlc1tjb2x1bW4uaWQgKyB0aGlzLmluZGV0ZXJtaW5hdGVdID0gY2hlY2tlZExlbiA+IDAgJiYgY2hlY2tlZExlbiA8IGNvdW50O1xyXG4gIH1cclxuXHJcbiAgZGV0ZWN0Q2hhbmdlcygpIHtcclxuICAgIHRoaXMuYm9keUNoYW5nZSAmJiB0aGlzLmJvZHlDaGFuZ2UoKTtcclxuICAgIHRoaXMudGhlYWRzQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdGhlYWRzQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLnRoZWFkc0NoYW5nZSAmJiB0aGlzLnRoZWFkc0NoYW5nZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy50aGVhZHNDaGFuZ2UpIHtcclxuICAgICAgICBpdGVtKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHRhYmxlXHJcbiAgI3RhYmxlXHJcbiAgY2xhc3M9XCJ4LXRhYmxlXCJcclxuICBbbmdDbGFzc109XCJjbGFzc01hcFwiXHJcbiAgW3gtbG9hZGluZ109XCJsb2FkaW5nICYmIGdldHRpbmdcIlxyXG4gIFtjbGFzcy54LXRhYmxlLXdyYXAtYm9yZGVyLWhpZGRlbl09XCJoaWRkZW5XcmFwQm9yZGVyXCJcclxuICBbY2xhc3MueC10YWJsZS1zY3JvbGwtbGVmdF09XCJnZXRTY3JvbGxMZWZ0XCJcclxuICBbY2xhc3MueC10YWJsZS1zY3JvbGwtbGVmdC1tYXhdPVwic2Nyb2xsTGVmdE1heFwiXHJcbiAgW2NsYXNzLngtdGFibGUtc2Nyb2xsLXRvcF09XCJnZXRTY3JvbGxUb3BcIlxyXG4gIFtjbGFzcy54LXRhYmxlLWhhcy1zY3JvbGwtcmlnaHRdPVwic2Nyb2xsWVdpZHRoXCJcclxuICBbY2xhc3MueC10YWJsZS1oYXMtc2Nyb2xsLWJvdHRvbV09XCJzY3JvbGxYV2lkdGhcIlxyXG4gIFtjbGFzcy54LXRhYmxlLWJvcmRlcmVkXT1cImJvcmRlcmVkXCJcclxuICBbY2xhc3MueC10YWJsZS10ZC1hZGFwdGlvbi1oZWlnaHRdPVwicm93SGVpZ2h0ID09IDBcIlxyXG4gIFtjbGFzcy54LXRhYmxlLWNlbGwtY29uZmlnXT1cImNlbGxDb25maWdcIlxyXG4+XHJcbiAgPGNhcHRpb24gI2NhcHRpb24gY2xhc3M9XCJ4LXRhYmxlLWhlYWRlclwiICpuZ0lmPVwiaGVhZGVyXCIgW3N0eWxlLmhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIiBbc3R5bGUubWluLWhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIj5cclxuICAgIDxuZy1jb250YWluZXIgKnhPdXRsZXQ9XCJoZWFkZXJcIj57eyBoZWFkZXIgfX08L25nLWNvbnRhaW5lcj5cclxuICA8L2NhcHRpb24+XHJcbiAgPHgtdGFibGUtaGVhZFxyXG4gICAgKm5nSWY9XCJzaG93SGVhZGVyICYmIChoZWFkZXJQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgaGVhZGVyUG9zaXRpb24gPT09ICd0b3AtYm90dG9tJylcIlxyXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodFwiXHJcbiAgICBbY29sdW1uVHBsXT1cImhlYWRDb2x1bW5UcGxcIlxyXG4gICAgW3Njcm9sbFlXaWR0aF09XCJzY3JvbGxZV2lkdGhcIlxyXG4gICAgW3Njcm9sbFhXaWR0aF09XCJzY3JvbGxYV2lkdGhcIlxyXG4gICAgW2NlbGxDb25maWddPVwiY2VsbENvbmZpZz8udGhlYWRcIlxyXG4gICAgW3Bvc2l0aW9uXT1cIid0b3AnXCJcclxuICAgIFt0YWJsZV09XCJ0aGlzXCJcclxuICA+PC94LXRhYmxlLWhlYWQ+XHJcbiAgPHgtdGFibGUtYm9keVxyXG4gICAgW2RhdGFdPVwidHJlZVRhYmxlID8gdHJlZVRhYmxlRGF0YSA6IHRhYmxlRGF0YVwiXHJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXHJcbiAgICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodFwiXHJcbiAgICBbYm9keUhlaWdodF09XCJib2R5SGVpZ2h0XCJcclxuICAgIFtjb2x1bW5UcGxdPVwiYm9keUNvbHVtblRwbFwiXHJcbiAgICBbYWxsb3dTZWxlY3RSb3ddPVwiYWxsb3dTZWxlY3RSb3dcIlxyXG4gICAgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXHJcbiAgICBbbWluQnVmZmVyUHhdPVwibWluQnVmZmVyUHhcIlxyXG4gICAgW21heEJ1ZmZlclB4XT1cIm1heEJ1ZmZlclB4XCJcclxuICAgIFthZGFwdGlvbkhlaWdodF09XCJhZGFwdGlvbkhlaWdodFwiXHJcbiAgICBbZG9jUGVyY2VudF09XCJkb2NQZXJjZW50XCJcclxuICAgIFtzY3JvbGxdPVwic2Nyb2xsXCJcclxuICAgIFtyb3dDbGFzc109XCJyb3dDbGFzc1wiXHJcbiAgICBbY2VsbENvbmZpZ109XCJjZWxsQ29uZmlnPy50Ym9keVwiXHJcbiAgICBbZXhwYW5kZWRBbGxdPVwiZXhwYW5kZWRBbGxcIlxyXG4gICAgW2V4cGFuZFRwbF09XCJleHBhbmRUcGxcIlxyXG4gICAgWyhhY3RpdmF0ZWRSb3cpXT1cImFjdGl2YXRlZFJvd1wiXHJcbiAgICAoYWN0aXZhdGVkUm93Q2hhbmdlKT1cImFjdGl2YXRlZFJvd0NoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgW3RhYmxlXT1cInRoaXNcIlxyXG4gID48L3gtdGFibGUtYm9keT5cclxuICA8eC10YWJsZS1oZWFkXHJcbiAgICAqbmdJZj1cInNob3dIZWFkZXIgJiYgKGhlYWRlclBvc2l0aW9uID09PSAnYm90dG9tJyB8fCBoZWFkZXJQb3NpdGlvbiA9PT0gJ3RvcC1ib3R0b20nKVwiXHJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0XCJcclxuICAgIFtjb2x1bW5UcGxdPVwiaGVhZENvbHVtblRwbFwiXHJcbiAgICBbc2Nyb2xsWVdpZHRoXT1cInNjcm9sbFlXaWR0aFwiXHJcbiAgICBbc2Nyb2xsWFdpZHRoXT1cInNjcm9sbFhXaWR0aFwiXHJcbiAgICBbY2VsbENvbmZpZ109XCJjZWxsQ29uZmlnPy50aGVhZFwiXHJcbiAgICBbcG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxyXG4gICAgW3RhYmxlXT1cInRoaXNcIlxyXG4gID48L3gtdGFibGUtaGVhZD5cclxuICA8eC10YWJsZS1mb290ICpuZ0lmPVwiZm9vdGVyXCIgW3RhYmxlXT1cInRoaXNcIiBbZm9vdGVyXT1cImZvb3RlclwiIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0XCI+PC94LXRhYmxlLWZvb3Q+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJoYXNTdGlja3lUb3BSaWdodCgpXCJcclxuICAgICNzdGlja3lUb3BSaWdodEVsZVxyXG4gICAgY2xhc3M9XCJ4LXRhYmxlLXN0aWNreS1yaWdodC1zY3JvbGxcIlxyXG4gICAgW2NsYXNzLngtdGFibGUtYm9yZGVyLWJvdHRvbV09XCJoZWFkU2VhcmNoVHBsXCJcclxuICAgIFtzdHlsZS50b3AucHhdPVwiZ2V0U3RpY2t5VG9wU2Nyb2xsVG9wXCJcclxuICAgIFtzdHlsZS53aWR0aC5weF09XCJzY3JvbGxZV2lkdGhcIlxyXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIlxyXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJoYXNTdGlja3lUb3BSaWdodCgpICYmIGhlYWRTZWFyY2hUcGxcIlxyXG4gICAgY2xhc3M9XCJ4LXRhYmxlLXN0aWNreS1yaWdodC1zY3JvbGxcIlxyXG4gICAgW3N0eWxlLnRvcC5weF09XCJnZXRTdGlja3lUb3BTY3JvbGxUb3AgKyBnZXRTdGlja3lUb3BSaWdodEVsZUhlaWdodFwiXHJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsWVdpZHRoXCJcclxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiaGFzU3RpY2t5Qm90dG9tUmlnaHQoKVwiXHJcbiAgICAjc3RpY2t5Qm90dG9tUmlnaHRFbGVcclxuICAgIGNsYXNzPVwieC10YWJsZS1zdGlja3ktcmlnaHQtc2Nyb2xsXCJcclxuICAgIFtzdHlsZS5ib3R0b20ucHhdPVwiZ2V0U3RpY2t5Qm90dG9tU2Nyb2xsVG9wXCJcclxuICAgIFtzdHlsZS53aWR0aC5weF09XCJzY3JvbGxZV2lkdGhcIlxyXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIlxyXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJoYXNTdGlja3lCb3R0b21SaWdodCgpICYmIGhlYWRTZWFyY2hUcGxcIlxyXG4gICAgY2xhc3M9XCJ4LXRhYmxlLXN0aWNreS1yaWdodC1zY3JvbGxcIlxyXG4gICAgW2NsYXNzLngtdGFibGUtYm9yZGVyLWJvdHRvbV09XCJoZWFkU2VhcmNoVHBsXCJcclxuICAgIFtzdHlsZS5ib3R0b20ucHhdPVwiZ2V0U3RpY2t5Qm90dG9tU2Nyb2xsVG9wICsgZ2V0U3RpY2t5Qm90dG9tUmlnaHRFbGVIZWlnaHRcIlxyXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cInNjcm9sbFlXaWR0aFwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIlxyXG4gID48L2Rpdj5cclxuPC90YWJsZT5cclxuPHgtcGFnaW5hdGlvblxyXG4gICNwYWdpbmF0aW9uXHJcbiAgKm5nSWY9XCJzaG93UGFnaW5hdGlvbiAmJiBzaXplXCJcclxuICBbKGluZGV4KV09XCJpbmRleFwiXHJcbiAgWyhzaXplKV09XCJzaXplXCJcclxuICBbKHF1ZXJ5KV09XCJxdWVyeVwiXHJcbiAgW3RvdGFsXT1cInRvdGFsXCJcclxuICAoaW5kZXhDaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIlxyXG4gIFtzaG93RWxsaXBzaXNdPVwic2hvd0VsbGlwc2lzXCJcclxuICBbc2hvd1RvdGFsXT1cInNob3dUb3RhbFwiXHJcbiAgW3NwYWNlXT1cInNwYWNlXCJcclxuICBbaGlkZGVuQm9yZGVyXT1cImhpZGRlblBhZ2luYXRpb25Cb3JkZXIhXCJcclxuPlxyXG48L3gtcGFnaW5hdGlvbj5cclxuIl19