UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

92 lines 19.2 kB
import { __decorate, __extends, __metadata } from "tslib"; import { Component, forwardRef, ChangeDetectionStrategy, ElementRef, ChangeDetectorRef, HostBinding, ViewChildren, QueryList } from '@angular/core'; import { IgxRowDirective } from '../row.directive'; import { GridBaseAPIService } from '../api.service'; import { IgxGridSelectionService, IgxGridCRUDService } from '../selection/selection.service'; var IgxGridRowComponent = /** @class */ (function (_super) { __extends(IgxGridRowComponent, _super); // R.K. TODO: Remove function IgxGridRowComponent(gridAPI, crudService, selectionService, element, cdr) { var _this = // D.P. constructor duplication due to es6 compilation, might be obsolete in the future _super.call(this, gridAPI, crudService, selectionService, element, cdr) || this; _this.gridAPI = gridAPI; _this.crudService = crudService; _this.selectionService = selectionService; _this.element = element; _this.cdr = cdr; return _this; } IgxGridRowComponent_1 = IgxGridRowComponent; Object.defineProperty(IgxGridRowComponent.prototype, "cells", { get: function () { var res = new QueryList(); if (!this._cells) { return res; } var cList = this._cells.toArray().sort(function (item1, item2) { return item1.column.visibleIndex - item2.column.visibleIndex; }); res.reset(cList); return res; }, set: function (cells) { }, enumerable: true, configurable: true }); Object.defineProperty(IgxGridRowComponent.prototype, "hasColumnLayouts", { get: function () { return this.grid.hasColumnLayouts; }, enumerable: true, configurable: true }); IgxGridRowComponent.prototype.getContext = function (col, row) { return { $implicit: col, row: row }; }; Object.defineProperty(IgxGridRowComponent.prototype, "expanded", { get: function () { var pk = this.grid.primaryKey; var rowID = pk ? this.rowData[pk] : this.rowData; return this.grid.expansionStates.get(rowID); }, enumerable: true, configurable: true }); var IgxGridRowComponent_1; IgxGridRowComponent.ctorParameters = function () { return [ { type: GridBaseAPIService }, { type: IgxGridCRUDService }, { type: IgxGridSelectionService }, { type: ElementRef }, { type: ChangeDetectorRef } ]; }; __decorate([ ViewChildren('cell'), __metadata("design:type", QueryList) ], IgxGridRowComponent.prototype, "_cells", void 0); __decorate([ HostBinding('class.igx-grid__tr--mrl'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxGridRowComponent.prototype, "hasColumnLayouts", null); IgxGridRowComponent = IgxGridRowComponent_1 = __decorate([ Component({ changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, selector: 'igx-grid-row', template: "<ng-container *ngIf=\"grid.groupingExpressions.length > 0\">\n <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{grid.groupingExpressions.length}}\"></div>\n</ng-container>\n<ng-container *ngIf=\"rowDraggable\">\n <div [class]=\"resolveDragIndicatorClasses\" [igxRowDrag]=\"this\" (click)=\"$event.stopPropagation()\" [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"this.grid.dragIndicatorIconTemplate ? this.grid.dragIndicatorIconTemplate : this.grid.dragIndicatorIconBase\"></ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"this.showRowSelectors\">\n <div class=\"igx-grid__cbx-selection\" (click)=\"onRowSelectorClick($event)\">\n <ng-template *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate ? this.grid.rowSelectorTemplate : rowSelectorBaseTemplate;\n context: { $implicit: { index: viewIndex, rowID: rowID, selected: selected }}\">\n </ng-template>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!grid.hasColumnLayouts\">\n <ng-container *ngIf=\"pinnedColumns.length > 0\">\n <ng-template ngFor let-col [ngForOf]=\"pinnedColumns | igxNotGrouped\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForSizePropName]='\"calcPixelWidth\"' [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"grid.hasColumnLayouts\">\n <ng-container *ngIf=\"pinnedColumns.length > 0\">\n <div *ngFor=\"let col of pinnedColumns | igxTopLevel\" class=\"igx-grid__mrl-block\"\n [class.igx-grid__td--pinned-last]=\"col.hasLastPinnedChildColumn\"\n [ngStyle]=\"{\n 'grid-template-rows':col.getGridTemplate(true, false),\n 'grid-template-columns':col.getGridTemplate(false, false),\n 'z-index': col.pinned ? 1 : null,\n '-ms-grid-rows':col.getGridTemplate(true, true),\n '-ms-grid-columns':col.getGridTemplate(false, true)\n }\">\n <ng-template ngFor let-col [ngForOf]=\"col.children\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails? mrlExpandableCellTemplate : mrlCellTemplate; context: getContext(col, this)\"></ng-container>\n </ng-template>\n </div>\n </ng-container>\n <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxTopLevel\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForSizePropName]='\"calcPixelWidth\"' [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <div class=\"igx-grid__mrl-block\" [ngStyle]=\"{\n 'grid-template-rows':col.getGridTemplate(true, false),\n 'grid-template-columns':col.getGridTemplate(false, false),\n '-ms-grid-rows':col.getGridTemplate(true, true),\n '-ms-grid-columns':col.getGridTemplate(false, true)\n }\">\n <ng-template ngFor let-col [ngForOf]=\"col.children\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? mrlExpandableCellTemplate : mrlCellTemplate; context: getContext(col, this)\"></ng-container>\n </ng-template>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [checked]=\"selected\"\n [readonly]=\"true\"\n [disabled]=\"deleted\"\n disableRipple=\"true\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #cellTemplate let-col>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"col.dataType === 'number'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #cell>\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #expandableCellTemplate let-col>\n <igx-expandable-grid-cell\n [class.igx-grid__td--pinned]=\"col.pinned\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' && col.visibleIndex !== 0\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [expanded]=\"expanded\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #cell>\n </igx-expandable-grid-cell>\n</ng-template>\n\n<ng-template #mrlCellTemplate let-col>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"col.dataType === 'number'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [style.-ms-grid-row-span]=\"col.gridRowSpan\"\n [style.-ms-grid-column-span]=\"col.girdColumnSpan\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.-ms-grid-row]=\"col.rowStart\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.-ms-grid-column]=\"col.colStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #cell>\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #mrlExpandableCellTemplate let-col>\n <igx-expandable-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' && col.visibleIndex !== 0\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [expanded]=\"expanded\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [style.-ms-grid-row-span]=\"col.gridRowSpan\"\n [style.-ms-grid-column-span]=\"col.girdColumnSpan\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.-ms-grid-row]=\"col.rowStart\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.-ms-grid-column]=\"col.colStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #cell>\n </igx-expandable-grid-cell>\n</ng-template>\n", providers: [{ provide: IgxRowDirective, useExisting: forwardRef(function () { return IgxGridRowComponent_1; }) }] }), __metadata("design:paramtypes", [GridBaseAPIService, IgxGridCRUDService, IgxGridSelectionService, ElementRef, ChangeDetectorRef]) ], IgxGridRowComponent); return IgxGridRowComponent; }(IgxRowDirective)); export { IgxGridRowComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9ncmlkL2dyaWQtcm93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLEVBQ2xELFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFTN0Y7SUFBeUMsdUNBQWlDO0lBRXRFLG9CQUFvQjtJQUNwQiw2QkFDVyxPQUE2QyxFQUM3QyxXQUErQixFQUMvQixnQkFBeUMsRUFDekMsT0FBbUIsRUFDbkIsR0FBc0I7UUFMakM7UUFNUSx1RkFBdUY7UUFDdkYsa0JBQU0sT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQzlEO1FBUE0sYUFBTyxHQUFQLE9BQU8sQ0FBc0M7UUFDN0MsaUJBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLHNCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFDekMsYUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixTQUFHLEdBQUgsR0FBRyxDQUFtQjs7SUFHN0IsQ0FBQzs0QkFYSSxtQkFBbUI7SUFnQjVCLHNCQUFXLHNDQUFLO2FBQWhCO1lBQ0ksSUFBTSxHQUFHLEdBQUcsSUFBSSxTQUFTLEVBQU8sQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZCxPQUFPLEdBQUcsQ0FBQzthQUNkO1lBQ0QsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBQyxLQUFLLEVBQUUsS0FBSyxJQUFLLE9BQUEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQXJELENBQXFELENBQUMsQ0FBQztZQUNsSCxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQzthQUVELFVBQWlCLEtBQUs7UUFFdEIsQ0FBQzs7O09BSkE7SUFPRCxzQkFBSSxpREFBZ0I7YUFBcEI7WUFDSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDdEMsQ0FBQzs7O09BQUE7SUFFRCx3Q0FBVSxHQUFWLFVBQVcsR0FBRyxFQUFFLEdBQUc7UUFDZixPQUFPO1lBQ0gsU0FBUyxFQUFFLEdBQUc7WUFDZCxHQUFHLEVBQUUsR0FBRztTQUNYLENBQUM7SUFDTixDQUFDO0lBRUQsc0JBQUkseUNBQVE7YUFBWjtZQUNJLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2hDLElBQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDOzs7T0FBQTs7O2dCQTFDbUIsa0JBQWtCO2dCQUNkLGtCQUFrQjtnQkFDYix1QkFBdUI7Z0JBQ2hDLFVBQVU7Z0JBQ2QsaUJBQWlCOztJQU1qQztRQURDLFlBQVksQ0FBQyxNQUFNLENBQUM7a0NBQ0wsU0FBUzt1REFBTTtJQWlCL0I7UUFEQyxXQUFXLENBQUMseUJBQXlCLENBQUM7OzsrREFHdEM7SUFqQ1EsbUJBQW1CO1FBUC9CLFNBQVMsQ0FBQztZQUNQLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLG1CQUFtQixFQUFFLEtBQUs7WUFDMUIsUUFBUSxFQUFFLGNBQWM7WUFDeEIsNGlUQUF3QztZQUN4QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEscUJBQW1CLEVBQW5CLENBQW1CLENBQUMsRUFBRSxDQUFDO1NBQ2hHLENBQUM7eUNBS3NCLGtCQUFrQjtZQUNkLGtCQUFrQjtZQUNiLHVCQUF1QjtZQUNoQyxVQUFVO1lBQ2QsaUJBQWlCO09BUnhCLG1CQUFtQixDQStDL0I7SUFBRCwwQkFBQztDQUFBLEFBL0NELENBQXlDLGVBQWUsR0ErQ3ZEO1NBL0NZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmLCBIb3N0QmluZGluZywgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4uL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsIElneEdyaWRDUlVEU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Um93RGlyZWN0aXZlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkUm93Q29tcG9uZW50KSB9XVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93Q29tcG9uZW50IGV4dGVuZHMgSWd4Um93RGlyZWN0aXZlPElneEdyaWRDb21wb25lbnQ+IHtcblxuICAgIC8vIFIuSy4gVE9ETzogUmVtb3ZlXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZENvbXBvbmVudD4sXG4gICAgICAgIHB1YmxpYyBjcnVkU2VydmljZTogSWd4R3JpZENSVURTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgc2VsZWN0aW9uU2VydmljZTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICAgICAgLy8gRC5QLiBjb25zdHJ1Y3RvciBkdXBsaWNhdGlvbiBkdWUgdG8gZXM2IGNvbXBpbGF0aW9uLCBtaWdodCBiZSBvYnNvbGV0ZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgICAgICBzdXBlcihncmlkQVBJLCBjcnVkU2VydmljZSwgc2VsZWN0aW9uU2VydmljZSwgZWxlbWVudCwgY2RyKTtcbiAgICAgICAgfVxuXG4gICAgQFZpZXdDaGlsZHJlbignY2VsbCcpXG4gICAgcHJpdmF0ZSBfY2VsbHM6IFF1ZXJ5TGlzdDxhbnk+O1xuXG4gICAgcHVibGljIGdldCBjZWxscygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFF1ZXJ5TGlzdDxhbnk+KCk7XG4gICAgICAgIGlmICghdGhpcy5fY2VsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY0xpc3QgPSB0aGlzLl9jZWxscy50b0FycmF5KCkuc29ydCgoaXRlbTEsIGl0ZW0yKSA9PiBpdGVtMS5jb2x1bW4udmlzaWJsZUluZGV4IC0gaXRlbTIuY29sdW1uLnZpc2libGVJbmRleCk7XG4gICAgICAgIHJlcy5yZXNldChjTGlzdCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBjZWxscyhjZWxscykge1xuXG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdHItLW1ybCcpXG4gICAgZ2V0IGhhc0NvbHVtbkxheW91dHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuaGFzQ29sdW1uTGF5b3V0cztcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0KGNvbCwgcm93KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGV4cGFuZGVkKCkge1xuICAgICAgICBjb25zdCBwayA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICBjb25zdCByb3dJRCA9IHBrID8gdGhpcy5yb3dEYXRhW3BrXSA6IHRoaXMucm93RGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKTtcbiAgICB9XG59XG4iXX0=