@c8y/ngx-components 1011.0.33 → 1011.0.35

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.
Files changed (34) hide show
  1. package/bundles/c8y-ngx-components-sub-assets.umd.js +4 -5
  2. package/bundles/c8y-ngx-components-sub-assets.umd.js.map +1 -1
  3. package/bundles/c8y-ngx-components-sub-assets.umd.min.js +1 -1
  4. package/bundles/c8y-ngx-components-sub-assets.umd.min.js.map +1 -1
  5. package/bundles/c8y-ngx-components-upgrade.umd.js +6 -5
  6. package/bundles/c8y-ngx-components-upgrade.umd.js.map +1 -1
  7. package/bundles/c8y-ngx-components-upgrade.umd.min.js +1 -1
  8. package/bundles/c8y-ngx-components-upgrade.umd.min.js.map +1 -1
  9. package/bundles/c8y-ngx-components.umd.js +62 -20
  10. package/bundles/c8y-ngx-components.umd.js.map +1 -1
  11. package/bundles/c8y-ngx-components.umd.min.js +1 -1
  12. package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
  13. package/c8y-ngx-components.metadata.json +1 -1
  14. package/core/action-bar/action-bar.component.d.ts +22 -6
  15. package/core/common/outlet.directive.d.ts +7 -0
  16. package/core/data-grid/data-grid.component.d.ts +3 -0
  17. package/esm2015/core/action-bar/action-bar.component.js +41 -15
  18. package/esm2015/core/bootstrap/bootstrap.component.js +2 -2
  19. package/esm2015/core/common/outlet.directive.js +19 -2
  20. package/esm2015/core/data-grid/data-grid.component.js +6 -2
  21. package/esm2015/sub-assets/sub-assets-grid.component.js +6 -7
  22. package/esm2015/upgrade/action-bar.factory.js +6 -2
  23. package/esm2015/upgrade/bridge.service.js +2 -5
  24. package/fesm2015/c8y-ngx-components-sub-assets.js +4 -5
  25. package/fesm2015/c8y-ngx-components-sub-assets.js.map +1 -1
  26. package/fesm2015/c8y-ngx-components-upgrade.js +5 -5
  27. package/fesm2015/c8y-ngx-components-upgrade.js.map +1 -1
  28. package/fesm2015/c8y-ngx-components.js +62 -17
  29. package/fesm2015/c8y-ngx-components.js.map +1 -1
  30. package/package.json +2 -2
  31. package/sub-assets/c8y-ngx-components-sub-assets.metadata.json +1 -1
  32. package/sub-assets/sub-assets-grid.component.d.ts +3 -3
  33. package/upgrade/action-bar.factory.d.ts +1 -0
  34. package/upgrade/c8y-ngx-components-upgrade.metadata.json +1 -1
@@ -43,6 +43,9 @@ export class DataGridComponent {
43
43
  filter: true
44
44
  };
45
45
  this.searchText = '';
46
+ /** Shows the warning for the sub-assets counter */
47
+ this.showCounterWarning = false;
48
+ /** Emits an event when mouse is over a row. */
46
49
  this.rowMouseOver = new EventEmitter();
47
50
  this.rowMouseLeave = new EventEmitter();
48
51
  this.rowClick = new EventEmitter();
@@ -490,7 +493,7 @@ export class DataGridComponent {
490
493
  DataGridComponent.decorators = [
491
494
  { type: Component, args: [{
492
495
  selector: 'c8y-data-grid',
493
- template: "<div class=\"table-data-grid-scroll\" #scroll>\n <div *ngIf=\"displayOptions.gridHeader\" class=\"table-data-grid-header separator large-padding\">\n <h4 class=\"m-r-16\">{{ title | translate }}</h4>\n\n <ng-container *ngIf=\"displayOptions.filter\">\n <span *ngIf=\"!filteringApplied\">\n <span class=\"label label-warning m-r-4\" translate>No filters</span>\n <small\n *ngIf=\"!!filteringLabelsParams.allItemsCount\"\n class=\"m-r-4\"\n ngNonBindable\n translate\n [translateParams]=\"filteringLabelsParams\"\n >{{ filteredItemsCount }} of {{ allItemsCount }} items</small\n >\n </span>\n <span *ngIf=\"filteringApplied\">\n <ng-container *ngIf=\"!!filteringLabelsParams.allItemsCount\">\n <span class=\"badge badge-info m-r-4\">\n {{ (dataSource.stats$ | async).filteredSize }}\n </span>\n <small ngNonBindable translate [translateParams]=\"filteringLabelsParams\"\n >of {{ allItemsCount }} items</small\n >\n </ng-container>\n <button\n title=\" {{ 'Clear filters' | translate }}\"\n class=\"m-l-8 btn btn-xs btn-default m-r-4\"\n (click)=\"clearFilters()\"\n >\n {{ 'Clear filters' | translate }}\n </button>\n </span>\n <span class=\"hidden-xs hidden-sm\">\n <button\n class=\"btn-clean text-primary\"\n popover=\"{{ 'Click the column headers to apply filters.' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button> </span\n ></ng-container>\n\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <label class=\"c8y-switch\" *ngIf=\"showChildDevices.show\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildDevices.value\" (click)=\"loadChildDevices()\"/>\n <span></span>\n {{ 'Show child devices' | translate }}\n </label>\n <button class=\"btn-clean m-l-4 m-r-16\" \n *ngIf=\"showChildDevices.show\"\n [popover]=\"childDevicesPop\"\n placement=\"bottom\"\n [outsideClick]=\"true\"\n >\n <i c8yIcon=\"question-circle-o\" class=\"text-primary\"></i>\n </button>\n <ng-template #childDevicesPop>\n <span translate>\n Displays the button\n <button class=\"btn btn-xs btn-icon btn-default\"><i class=\"text-primary dlt-c8y-icon-enter-bottom\"></i></button>\n next to devices with children. Clicking it displays a list with all child devices.\n </span>\n </ng-template>\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n container=\"body\"\n placement=\"bottom left\"\n >\n <button\n title=\"{{ 'Configure columns' | translate }}\"\n class=\"btnbar-btn c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"columns\" class=\"m-r-4\"></i>\n <span>{{ 'Configure columns' | translate }}</span>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"bg-white\">\n <div cdkDropList (cdkDropListDropped)=\"onColumnDrop($event)\" class=\"list-group m-0\">\n <div *ngFor=\"let column of columns\" cdkDrag cdkDragLockAxis=\"y\">\n <ng-container *ngIf=\"!column.positionFixed\">\n <div class=\"list-group-item draggable-after p-0 \">\n <label\n title=\"{{ (column.header | translate) || column.name }}\"\n class=\"c8y-checkbox p-l-16 p-r-32 p-t-8 p-b-8 flex-item-v-stretch\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"column.visible\"\n (change)=\"updateGridColumnsSize()\"\n />\n <span></span>\n <span>{{ (column.header | translate) || column.name }}</span>\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <button\n title=\"{{ 'Reload' | translate }}\"\n class=\"btnbar-btn btn-link\"\n [disabled]=\"dataSource.loading$ | async\"\n (click)=\"searchText = ''; reload()\"\n >\n <i c8yIcon=\"refresh\" class=\"m-r-4\"></i>\n <span>{{ 'Reload' | translate }}</span>\n </button>\n\n <div *ngIf=\"!serverSideDataCallback || showSearch\" class=\"input-group input-group-search m-l-sm-16\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [ngModel]=\"searchText\"\n (input)=\"searchText$.emit($event.target.value)\"\n />\n <div class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"searchText.length === 0\"></i>\n <i\n c8yIcon=\"times\"\n class=\"pointer\"\n *ngIf=\"searchText.length > 0\"\n (click)=\"searchText = ''; searchText$.emit('')\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n *ngIf=\"selectedItemIds.length !== 0\"\n >\n <h4>\n <span ngNonBindable translate [translateParams]=\"{ count: selectedItemIds.length }\">\n {{ count }} selected items.\n </span>\n <br class=\"visible-xs\" />\n <small *ngIf=\"selectedItemIds.length >= pagination.pageSize\">\n <a (click)=\"setAllItemsSelected(true)\" class=\"interact\">\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: (dataSource.stats$ | async).filteredSize }\"\n >\n Select all {{ count }} items\n </span>\n </a>\n </small>\n </h4>\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <ng-container\n *ngFor=\"let bulkActionControl of bulkActionControls\"\n [ngSwitch]=\"bulkActionControl.type\"\n >\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"sign-out\"></i>\n <span>{{ 'Export' | translate }}</span>\n </button>\n\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n <span>{{ 'Delete' | translate }}</span>\n </button>\n\n <button\n title=\"{{ bulkActionControl.text | translate }}\"\n *ngSwitchDefault\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ bulkActionControl.icon }}\"></i>\n <span>{{ bulkActionControl.text | translate }}</span>\n </button>\n </ng-container>\n\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btnbar-btn\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"times\"></i>\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <table\n class=\"table table-hover table-filtered-sorted table-data-grid large-padding\"\n cdk-table\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByName\"\n [class.table-striped]=\"displayOptions.striped\"\n [class.table-bordered]=\"displayOptions.bordered\"\n [class.table-data-grid-with-checkboxes]=\"selectable\"\n [class.table-data-grid-with-actions]=\"actionControls.length > 0\"\n [style.grid-template-columns]=\"styles.gridTemplateColumns\"\n (mousemove)=\"resizeHandleContainerMouseMove$.emit($event)\"\n (mouseup)=\"resizeHandleContainerMouseUp$.emit($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\" [cdkColumnDef]=\"column.name\">\n <ng-container [ngSwitch]=\"column.name\">\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\">\n <div>\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"currentPageSelectionState.allSelected\"\n [indeterminate]=\"\n !(\n currentPageSelectionState.allSelected ||\n currentPageSelectionState.allDeselected\n )\n \"\n (change)=\"setAllItemsInCurrentPageSelected($event.target.checked)\"\n />\n <span></span>\n </label>\n </div>\n </th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(row)\"\n (change)=\"setItemsSelected([row], $event.target.checked)\"\n />\n <span></span>\n </label>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'actions'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\"></th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"actionControls.length <= 2\">\n <ng-container\n *ngFor=\"let actionControl of actionControls\"\n [ngSwitch]=\"actionControl.type\"\n >\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ 'Edit' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btn btn-dot showOnHover\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i class=\"text-danger\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n *ngSwitchDefault\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ actionControl.text | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n tooltip=\"{{ actionControl.text | translate }}\"\n container=\"body\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n </button>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"actionControls.length > 2\" class=\"dropdown\" dropdown>\n <button\n title=\"{{ 'Actions' | translate }}\"\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li *ngFor=\"let actionControl of actionControls\" [ngSwitch]=\"actionControl.type\">\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Edit\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n {{ 'Delete' | translate }}\n </button>\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Export' | translate }}\n </button>\n <button\n title=\"{{ actionControl.text | translate }}\"\n *ngSwitchDefault\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n {{ actionControl.text | translate }}\n </button>\n </ng-container>\n </li>\n </ul>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th\n cdk-header-cell\n *cdkHeaderCellDef\n [ngClass]=\"column.headerCSSClassName\"\n [attr.data-type]=\"column.dataType\"\n [class.sorted]=\"column.sortOrder\"\n [class.filtered]=\"column | map: isColumnFilteringApplied\"\n [class.hidden]=\"!column.visible\"\n >\n <div *ngIf=\"!column.filterable\" [title]=\"(column.header | translate) || column.name\">\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"column.filterable\"\n class=\"dropdown\"\n dropdown\n #dropdown=\"bs-dropdown\"\n container=\"body\"\n placement=\"bottom left\"\n [insideClick]=\"true\"\n >\n <button\n class=\"btn-header c8y-dropdown\"\n dropdownToggle\n [title]=\"(column.header | translate) || column.name\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n <i c8yIcon=\"filter\" title=\"{{ 'Filter' | translate }}\"></i>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"data-grid__dropdown\">\n <ng-container\n *ngIf=\"\n (\n [{\n column: column,\n dropdown: dropdown\n }]\n | map:getFilteringFormRendererSpec:this\n ) as filteringFormRendererSpec\n \"\n >\n <c8y-filtering-form-renderer [spec]=\"filteringFormRendererSpec\">\n </c8y-filtering-form-renderer>\n </ng-container>\n </li>\n </ul>\n </div>\n\n <button\n *ngIf=\"column.sortable\"\n class=\"btn-sort\"\n title=\"{{ 'Sort' | translate }}\"\n (click)=\"changeSortOrder(column.name)\"\n >\n <ng-container [ngSwitch]=\"column.sortOrder\">\n <i *ngSwitchCase=\"'asc'\" c8yIcon=\"long-arrow-up\"></i>\n <i *ngSwitchCase=\"'desc'\" c8yIcon=\"long-arrow-down\"></i>\n <i *ngSwitchDefault c8yIcon=\"exchange\"></i>\n </ng-container>\n </button>\n\n <span\n class=\"resize-handle\"\n (mousedown)=\"\n resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n \"\n >\n </span>\n </th>\n\n <td\n cdk-cell\n *cdkCellDef=\"let row\"\n [ngClass]=\"column.cellCSSClassName\"\n [attr.data-cell-title]=\"column.header | translate\"\n [class.hidden]=\"!column.visible\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n value: resolveCellValue(row, column.path),\n row: row,\n columnName: column.name\n }]\n | map:getCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container cdkColumnDef=\"infiniteScrollFooter\">\n <td cdk-footer-cell *cdkFooterCellDef [style.grid-column]=\"styles.gridInfiniteScrollColumn\">\n <template #infiniteScrollContainer></template>\n </td>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"columnNames\"></tr>\n\n <tr\n cdk-row\n *cdkRowDef=\"let row; columns: columnNames\"\n (mouseover)=\"rowMouseOver.emit(row)\"\n (mouseleave)=\"rowMouseLeave.emit(row)\"\n (click)=\"rowClick.emit(row)\"\n ></tr>\n\n <ng-container *ngIf=\"infiniteScroll\">\n <tr cdk-footer-row *cdkFooterRowDef=\"['infiniteScrollFooter']\"></tr>\n </ng-container>\n </table>\n\n <div *ngIf=\"(dataSource.loading$ | async) && !loadMoreComponent\" class=\"text-center\">\n <c8y-progress-bar [message]=\"loadingItemsLabel\"></c8y-progress-bar>\n </div>\n\n <div\n class=\"row m-0 p-t-40 p-b-40\"\n *ngIf=\"!(dataSource.loading$ | async) && (dataSource.stats$ | async).filteredSize === 0\"\n >\n <div class=\"col-md-4 col-md-offset-4\">\n <ng-content select=\".c8y-empty-state\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"pagination && !infiniteScroll\" class=\"table-data-grid-footer separator large-padding\">\n <div class=\"col-sm-4 no-gutter\">\n <div *ngIf=\"(dataSource.stats$ | async).currentPageSize > 0\" class=\"counter\">\n <span class=\"text-muted\" ngNonBindable translate [translateParams]=\"paginationLabelParams\"\n >{{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}</span\n >\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-center\">\n <div\n *ngIf=\"(dataSource.stats$ | async).filteredSize > minPossiblePageSize\"\n class=\"form-group form-inline\"\n >\n <label class=\"m-r-4\">{{ 'Items per page' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [ngModel]=\"pagination.pageSize\"\n (ngModelChange)=\"\n updatePagination({ itemsPerPage: $event, page: pagination.currentPage })\n \"\n >\n <option *ngFor=\"let pageSize of possiblePageSizes\" [ngValue]=\"pageSize\">\n {{ pageSize }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-right\">\n <pagination\n [class.hidden]=\"totalPagesCount <= 1\"\n [ngModel]=\"pagination.currentPage\"\n (pageChanged)=\"updatePagination($event)\"\n [totalItems]=\"(dataSource.stats$ | async).filteredSize\"\n [itemsPerPage]=\"pagination.pageSize\"\n (numPages)=\"totalPagesCount = $event\"\n [maxSize]=\"5\"\n [boundaryLinks]=\"false\"\n previousText=\" \"\n nextText=\" \"\n ></pagination>\n </div>\n </div>\n</div>\n"
496
+ template: "<div class=\"table-data-grid-scroll\" #scroll>\n <div *ngIf=\"displayOptions.gridHeader\" class=\"table-data-grid-header separator large-padding\">\n <h4 class=\"m-r-16\">{{ title | translate }}</h4>\n\n <ng-container *ngIf=\"displayOptions.filter\">\n <span *ngIf=\"!filteringApplied\">\n <span class=\"label label-warning m-r-4\" translate>No filters</span>\n <small\n *ngIf=\"!!filteringLabelsParams.allItemsCount\"\n class=\"m-r-4\"\n ngNonBindable\n translate\n [translateParams]=\"filteringLabelsParams\"\n >{{ filteredItemsCount }} of {{ allItemsCount }} items</small\n >\n </span>\n <span *ngIf=\"filteringApplied\">\n <ng-container *ngIf=\"!!filteringLabelsParams.allItemsCount\">\n <span class=\"badge badge-info m-r-4\">\n {{ (dataSource.stats$ | async).filteredSize }}\n </span>\n <small ngNonBindable translate [translateParams]=\"filteringLabelsParams\"\n >of {{ allItemsCount }} items</small\n >\n </ng-container>\n <button\n title=\" {{ 'Clear filters' | translate }}\"\n class=\"m-l-8 btn btn-xs btn-default m-r-4\"\n (click)=\"clearFilters()\"\n >\n {{ 'Clear filters' | translate }}\n </button>\n </span>\n <span class=\"hidden-xs hidden-sm\">\n <button\n class=\"btn-clean text-primary\"\n popover=\"{{ 'Click the column headers to apply filters.' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </span>\n\n <span class=\"hidden-xs hidden-sm\" *ngIf=\"showCounterWarning\">\n <button\n class=\"btn-clean text-primary\"\n popover=\"{{\n 'The counter for the total number of items might be inaccurate.' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n </span>\n </ng-container>\n\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <label class=\"c8y-switch\" *ngIf=\"showChildDevices.show\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildDevices.value\" (click)=\"loadChildDevices()\"/>\n <span></span>\n {{ 'Show child devices' | translate }}\n </label>\n <button class=\"btn-clean m-l-4 m-r-16\" \n *ngIf=\"showChildDevices.show\"\n [popover]=\"childDevicesPop\"\n placement=\"bottom\"\n [outsideClick]=\"true\"\n >\n <i c8yIcon=\"question-circle-o\" class=\"text-primary\"></i>\n </button>\n <ng-template #childDevicesPop>\n <span translate>\n Displays the button\n <button class=\"btn btn-xs btn-icon btn-default\"><i class=\"text-primary dlt-c8y-icon-enter-bottom\"></i></button>\n next to devices with children. Clicking it displays a list with all child devices.\n </span>\n </ng-template>\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n container=\"body\"\n placement=\"bottom left\"\n >\n <button\n title=\"{{ 'Configure columns' | translate }}\"\n class=\"btnbar-btn c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"columns\" class=\"m-r-4\"></i>\n <span>{{ 'Configure columns' | translate }}</span>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"bg-white\">\n <div cdkDropList (cdkDropListDropped)=\"onColumnDrop($event)\" class=\"list-group m-0\">\n <div *ngFor=\"let column of columns\" cdkDrag cdkDragLockAxis=\"y\">\n <ng-container *ngIf=\"!column.positionFixed\">\n <div class=\"list-group-item draggable-after p-0 \">\n <label\n title=\"{{ (column.header | translate) || column.name }}\"\n class=\"c8y-checkbox p-l-16 p-r-32 p-t-8 p-b-8 flex-item-v-stretch\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"column.visible\"\n (change)=\"updateGridColumnsSize()\"\n />\n <span></span>\n <span>{{ (column.header | translate) || column.name }}</span>\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <button\n title=\"{{ 'Reload' | translate }}\"\n class=\"btnbar-btn btn-link\"\n [disabled]=\"dataSource.loading$ | async\"\n (click)=\"searchText = ''; reload()\"\n >\n <i c8yIcon=\"refresh\" class=\"m-r-4\"></i>\n <span>{{ 'Reload' | translate }}</span>\n </button>\n\n <div *ngIf=\"!serverSideDataCallback || showSearch\" class=\"input-group input-group-search m-l-sm-16\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [ngModel]=\"searchText\"\n (input)=\"searchText$.emit($event.target.value)\"\n />\n <div class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"searchText.length === 0\"></i>\n <i\n c8yIcon=\"times\"\n class=\"pointer\"\n *ngIf=\"searchText.length > 0\"\n (click)=\"searchText = ''; searchText$.emit('')\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n *ngIf=\"selectedItemIds.length !== 0\"\n >\n <h4>\n <span ngNonBindable translate [translateParams]=\"{ count: selectedItemIds.length }\">\n {{ count }} selected items.\n </span>\n <br class=\"visible-xs\" />\n <small *ngIf=\"selectedItemIds.length >= pagination.pageSize\">\n <a (click)=\"setAllItemsSelected(true)\" class=\"interact\">\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: (dataSource.stats$ | async).filteredSize }\"\n >\n Select all {{ count }} items\n </span>\n </a>\n </small>\n </h4>\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <ng-container\n *ngFor=\"let bulkActionControl of bulkActionControls\"\n [ngSwitch]=\"bulkActionControl.type\"\n >\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"sign-out\"></i>\n <span>{{ 'Export' | translate }}</span>\n </button>\n\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n <span>{{ 'Delete' | translate }}</span>\n </button>\n\n <button\n title=\"{{ bulkActionControl.text | translate }}\"\n *ngSwitchDefault\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ bulkActionControl.icon }}\"></i>\n <span>{{ bulkActionControl.text | translate }}</span>\n </button>\n </ng-container>\n\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btnbar-btn\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"times\"></i>\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <table\n class=\"table table-hover table-filtered-sorted table-data-grid large-padding\"\n cdk-table\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByName\"\n [class.table-striped]=\"displayOptions.striped\"\n [class.table-bordered]=\"displayOptions.bordered\"\n [class.table-data-grid-with-checkboxes]=\"selectable\"\n [class.table-data-grid-with-actions]=\"actionControls.length > 0\"\n [style.grid-template-columns]=\"styles.gridTemplateColumns\"\n (mousemove)=\"resizeHandleContainerMouseMove$.emit($event)\"\n (mouseup)=\"resizeHandleContainerMouseUp$.emit($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\" [cdkColumnDef]=\"column.name\">\n <ng-container [ngSwitch]=\"column.name\">\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\">\n <div>\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"currentPageSelectionState.allSelected\"\n [indeterminate]=\"\n !(\n currentPageSelectionState.allSelected ||\n currentPageSelectionState.allDeselected\n )\n \"\n (change)=\"setAllItemsInCurrentPageSelected($event.target.checked)\"\n />\n <span></span>\n </label>\n </div>\n </th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(row)\"\n (change)=\"setItemsSelected([row], $event.target.checked)\"\n />\n <span></span>\n </label>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'actions'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\"></th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"actionControls.length <= 2\">\n <ng-container\n *ngFor=\"let actionControl of actionControls\"\n [ngSwitch]=\"actionControl.type\"\n >\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ 'Edit' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btn btn-dot showOnHover\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i class=\"text-danger\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n *ngSwitchDefault\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ actionControl.text | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n tooltip=\"{{ actionControl.text | translate }}\"\n container=\"body\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n </button>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"actionControls.length > 2\" class=\"dropdown\" dropdown>\n <button\n title=\"{{ 'Actions' | translate }}\"\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li *ngFor=\"let actionControl of actionControls\" [ngSwitch]=\"actionControl.type\">\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Edit\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n {{ 'Delete' | translate }}\n </button>\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Export' | translate }}\n </button>\n <button\n title=\"{{ actionControl.text | translate }}\"\n *ngSwitchDefault\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n {{ actionControl.text | translate }}\n </button>\n </ng-container>\n </li>\n </ul>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th\n cdk-header-cell\n *cdkHeaderCellDef\n [ngClass]=\"column.headerCSSClassName\"\n [attr.data-type]=\"column.dataType\"\n [class.sorted]=\"column.sortOrder\"\n [class.filtered]=\"column | map: isColumnFilteringApplied\"\n [class.hidden]=\"!column.visible\"\n >\n <div *ngIf=\"!column.filterable\" [title]=\"(column.header | translate) || column.name\">\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"column.filterable\"\n class=\"dropdown\"\n dropdown\n #dropdown=\"bs-dropdown\"\n container=\"body\"\n placement=\"bottom left\"\n [insideClick]=\"true\"\n >\n <button\n class=\"btn-header c8y-dropdown\"\n dropdownToggle\n [title]=\"(column.header | translate) || column.name\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n <i c8yIcon=\"filter\" title=\"{{ 'Filter' | translate }}\"></i>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"data-grid__dropdown\">\n <ng-container\n *ngIf=\"\n (\n [{\n column: column,\n dropdown: dropdown\n }]\n | map:getFilteringFormRendererSpec:this\n ) as filteringFormRendererSpec\n \"\n >\n <c8y-filtering-form-renderer [spec]=\"filteringFormRendererSpec\">\n </c8y-filtering-form-renderer>\n </ng-container>\n </li>\n </ul>\n </div>\n\n <button\n *ngIf=\"column.sortable\"\n class=\"btn-sort\"\n title=\"{{ 'Sort' | translate }}\"\n (click)=\"changeSortOrder(column.name)\"\n >\n <ng-container [ngSwitch]=\"column.sortOrder\">\n <i *ngSwitchCase=\"'asc'\" c8yIcon=\"long-arrow-up\"></i>\n <i *ngSwitchCase=\"'desc'\" c8yIcon=\"long-arrow-down\"></i>\n <i *ngSwitchDefault c8yIcon=\"exchange\"></i>\n </ng-container>\n </button>\n\n <span\n class=\"resize-handle\"\n (mousedown)=\"\n resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n \"\n >\n </span>\n </th>\n\n <td\n cdk-cell\n *cdkCellDef=\"let row\"\n [ngClass]=\"column.cellCSSClassName\"\n [attr.data-cell-title]=\"column.header | translate\"\n [class.hidden]=\"!column.visible\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n value: resolveCellValue(row, column.path),\n row: row,\n columnName: column.name\n }]\n | map:getCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container cdkColumnDef=\"infiniteScrollFooter\">\n <td cdk-footer-cell *cdkFooterCellDef [style.grid-column]=\"styles.gridInfiniteScrollColumn\">\n <template #infiniteScrollContainer></template>\n </td>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"columnNames\"></tr>\n\n <tr\n cdk-row\n *cdkRowDef=\"let row; columns: columnNames\"\n (mouseover)=\"rowMouseOver.emit(row)\"\n (mouseleave)=\"rowMouseLeave.emit(row)\"\n (click)=\"rowClick.emit(row)\"\n ></tr>\n\n <ng-container *ngIf=\"infiniteScroll\">\n <tr cdk-footer-row *cdkFooterRowDef=\"['infiniteScrollFooter']\"></tr>\n </ng-container>\n </table>\n\n <div *ngIf=\"(dataSource.loading$ | async) && !loadMoreComponent\" class=\"text-center\">\n <c8y-progress-bar [message]=\"loadingItemsLabel\"></c8y-progress-bar>\n </div>\n\n <div\n class=\"row m-0 p-t-40 p-b-40\"\n *ngIf=\"!(dataSource.loading$ | async) && (dataSource.stats$ | async).filteredSize === 0\"\n >\n <div class=\"col-md-4 col-md-offset-4\">\n <ng-content select=\".c8y-empty-state\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"pagination && !infiniteScroll\" class=\"table-data-grid-footer separator large-padding\">\n <div class=\"col-sm-4 no-gutter\">\n <div *ngIf=\"(dataSource.stats$ | async).currentPageSize > 0\" class=\"counter\">\n <span class=\"text-muted\" ngNonBindable translate [translateParams]=\"paginationLabelParams\"\n >{{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}</span\n >\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-center\">\n <div\n *ngIf=\"(dataSource.stats$ | async).filteredSize > minPossiblePageSize\"\n class=\"form-group form-inline\"\n >\n <label class=\"m-r-4\">{{ 'Items per page' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [ngModel]=\"pagination.pageSize\"\n (ngModelChange)=\"\n updatePagination({ itemsPerPage: $event, page: pagination.currentPage })\n \"\n >\n <option *ngFor=\"let pageSize of possiblePageSizes\" [ngValue]=\"pageSize\">\n {{ pageSize }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-right\">\n <pagination\n [class.hidden]=\"totalPagesCount <= 1\"\n [ngModel]=\"pagination.currentPage\"\n (pageChanged)=\"updatePagination($event)\"\n [totalItems]=\"(dataSource.stats$ | async).filteredSize\"\n [itemsPerPage]=\"pagination.pageSize\"\n (numPages)=\"totalPagesCount = $event\"\n [maxSize]=\"5\"\n [boundaryLinks]=\"false\"\n previousText=\" \"\n nextText=\" \"\n ></pagination>\n </div>\n </div>\n</div>\n"
494
497
  },] }
495
498
  ];
496
499
  DataGridComponent.ctorParameters = () => [
@@ -517,6 +520,7 @@ DataGridComponent.propDecorators = {
517
520
  _actionControls: [{ type: Input, args: ['actionControls',] }],
518
521
  _bulkActionControls: [{ type: Input, args: ['bulkActionControls',] }],
519
522
  searchText: [{ type: Input }],
523
+ showCounterWarning: [{ type: Input }],
520
524
  rowMouseOver: [{ type: Output }],
521
525
  rowMouseLeave: [{ type: Output }],
522
526
  rowClick: [{ type: Output }],
@@ -532,4 +536,4 @@ DataGridComponent.propDecorators = {
532
536
  __decorate([
533
537
  throttle(500, { trailing: true, leading: false })
534
538
  ], DataGridComponent.prototype, "loadData", null);
535
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCx3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsSUFBSSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFNUQsT0FBTyxFQVNMLG1CQUFtQixFQUNuQixzQkFBc0IsRUFFdEIsbUJBQW1CLEVBTXBCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxF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WSxTQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O0FBNmRqRDtJQURDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQztpREF3Qi9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrSGVhZGVyQ2VsbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IElSZXN1bHRMaXN0LCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gJy4vLi4vY29tbW9uL3Rocm90dGxlLmRlY29yYXRvcic7XG5pbXBvcnQgeyBmbG93LCBnZXQsIHBhcnNlSW50IGFzIF9wYXJzZUludCwgdW5pb24sIHdpdGhvdXQsIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaXJzdCxcbiAgbWVyZ2VNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExvYWRNb3JlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZE1vcmVNb2RlIH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5tb2RlbCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcbmltcG9ydCB7IENlbGxSZW5kZXJlclNwZWMgfSBmcm9tICcuL2NvbHVtbi9jZWxsLXJlbmRlcmVyJztcbmltcG9ydCB7IENvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4vY29sdW1uL2NvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYywgRmlsdGVyaW5nTW9kaWZpZXIgfSBmcm9tICcuL2NvbHVtbi9maWx0ZXJpbmctZm9ybS1yZW5kZXJlcic7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgQ29sdW1uRGF0YVR5cGUsXG4gIERhdGFHcmlkLFxuICBEYXRhU291cmNlU3RhdHMsXG4gIERpc3BsYXlPcHRpb25zLFxuICBGaWx0ZXJpbmdBY3Rpb25UeXBlLFxuICBtaW5Db2x1bW5HcmlkVHJhY2tTaXplLFxuICBQYWdpbmF0aW9uLFxuICByYXRpb3NCeUNvbHVtblR5cGVzLFxuICBSb3csXG4gIFNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gIFNvcnRPcmRlcixcbiAgU3BlY2lhbENvbHVtbk5hbWUsXG4gIEdyaWRDb25maWdcbn0gZnJvbSAnLi9kYXRhLWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgR3JpZERhdGFTb3VyY2UgfSBmcm9tICcuL2dyaWQtZGF0YS1zb3VyY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBEYXRhR3JpZCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IGdldHRleHQoJ0l0ZW1zJyk7XG4gIEBJbnB1dCgpIGxvYWRNb3JlSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZCBtb3JlIGl0ZW1zJyk7XG4gIEBJbnB1dCgpIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIGl0ZW1z4oCmJyk7XG4gIEBJbnB1dCgpIHNob3dTZWFyY2ggPSBmYWxzZTtcbiAgQElucHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpIHNob3dDaGlsZERldmljZXM6IGFueSA9IHt9O1xuXG4gIGNvbHVtbnM6IENvbHVtbltdO1xuICBASW5wdXQoJ2NvbHVtbnMnKVxuICBzZXQgX2NvbHVtbnMoY29sdW1ucykge1xuICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnMgfHwgW107XG4gIH1cblxuICBkYXRhU291cmNlID0gbmV3IEdyaWREYXRhU291cmNlKCk7XG4gIHJvd3M6IFJvd1tdO1xuICBASW5wdXQoJ3Jvd3MnKVxuICBzZXQgX3Jvd3Mocm93cykge1xuICAgIHRoaXMucm93cyA9IHJvd3MgfHwgW107XG4gIH1cblxuICBmaWx0ZXJpbmdMYWJlbHNQYXJhbXMgPSB7XG4gICAgZmlsdGVyZWRJdGVtc0NvdW50OiAwLFxuICAgIGFsbEl0ZW1zQ291bnQ6IDBcbiAgfTtcblxuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xuICBwYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgcGFnZUZpcnN0SXRlbUlkeDogMCxcbiAgICBwYWdlTGFzdEl0ZW1JZHg6IDAsXG4gICAgaXRlbXNUb3RhbDogMFxuICB9O1xuICByZWFkb25seSBwb3NzaWJsZVBhZ2VTaXplczogbnVtYmVyW10gPSBbMTAsIDE1LCAyMCwgMzAsIDUwXTtcbiAgcmVhZG9ubHkgbWluUG9zc2libGVQYWdlU2l6ZSA9IE1hdGgubWluKC4uLnRoaXMucG9zc2libGVQYWdlU2l6ZXMpO1xuICBASW5wdXQoJ3BhZ2luYXRpb24nKVxuICBzZXQgX3BhZ2luYXRpb24ocGFnaW5hdGlvbikge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHBhZ2luYXRpb247XG4gICAgY29uc3QgcGFnZVNpemUgPSBnZXQodGhpcy5wYWdpbmF0aW9uLCAncGFnZVNpemUnKTtcblxuICAgIGlmIChcbiAgICAgIHBhZ2VTaXplICYmXG4gICAgICAhdGhpcy5wb3NzaWJsZVBhZ2VTaXplcy5maW5kKHBvc3NpYmxlUGFnZVNpemUgPT4gcG9zc2libGVQYWdlU2l6ZSA9PT0gcGFnZVNpemUpXG4gICAgKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgcGFnZVNpemU6IDEwIH07XG4gICAgfVxuICB9XG5cbiAgaW5maW5pdGVTY3JvbGw6IExvYWRNb3JlTW9kZTtcbiAgQElucHV0KCdpbmZpbml0ZVNjcm9sbCcpXG4gIHNldCBfaW5maW5pdGVTY3JvbGwoaW5maW5pdGVTY3JvbGw6IExvYWRNb3JlTW9kZSkge1xuICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSBpbmZpbml0ZVNjcm9sbDtcbiAgfVxuXG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2s7XG4gIEBJbnB1dCgnc2VydmVyU2lkZURhdGFDYWxsYmFjaycpXG4gIHNldCBfc2VydmVyU2lkZURhdGFDYWxsYmFjayhzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrKSB7XG4gICAgdGhpcy5zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID0gc2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgfVxuXG4gIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCdzZWxlY3RhYmxlJylcbiAgc2V0IF9zZWxlY3RhYmxlKHNlbGVjdGFibGUpIHtcbiAgICB0aGlzLnNlbGVjdGFibGUgPSBzZWxlY3RhYmxlO1xuICB9XG5cbiAgc2VsZWN0aW9uUHJpbWFyeUtleSA9ICdpZCc7XG4gIEBJbnB1dCgnc2VsZWN0aW9uUHJpbWFyeUtleScpXG4gIHNldCBfc2VsZWN0aW9uUHJpbWFyeUtleShzZWxlY3Rpb25QcmltYXJ5S2V5KSB7XG4gICAgdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5ID0gc2VsZWN0aW9uUHJpbWFyeUtleTtcbiAgfVxuXG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZVxuICB9O1xuICBASW5wdXQoJ2Rpc3BsYXlPcHRpb25zJylcbiAgc2V0IF9kaXNwbGF5T3B0aW9ucyhkaXNwbGF5T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGxheU9wdGlvbnMgPSB7IC4uLnRoaXMuZGlzcGxheU9wdGlvbnMsIC4uLmRpc3BsYXlPcHRpb25zIH07XG4gIH1cblxuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdO1xuICBASW5wdXQoJ2FjdGlvbkNvbnRyb2xzJylcbiAgc2V0IF9hY3Rpb25Db250cm9scyhhY3Rpb25Db250cm9scykge1xuICAgIHRoaXMuYWN0aW9uQ29udHJvbHMgPSBhY3Rpb25Db250cm9scyB8fCBbXTtcbiAgfVxuXG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXTtcbiAgQElucHV0KCdidWxrQWN0aW9uQ29udHJvbHMnKVxuICBzZXQgX2J1bGtBY3Rpb25Db250cm9scyhidWxrQWN0aW9uQ29udHJvbHMpIHtcbiAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IGJ1bGtBY3Rpb25Db250cm9scyB8fCBbXTtcbiAgfVxuICBASW5wdXQoKVxuICBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgQE91dHB1dCgpIHJvd01vdXNlT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgcm93TW91c2VMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQE91dHB1dCgpIG9uQ29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICBAT3V0cHV0KCkgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIG9uQ2hpbGREZXZpY2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ29sdW1uRGlyZWN0aXZlKSBjb2x1bW5SZW5kZXJlcnM6IFF1ZXJ5TGlzdDxDb2x1bW5EaXJlY3RpdmU+O1xuXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbCcsIHsgc3RhdGljOiB0cnVlIH0pIHNjcm9sbENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdpbmZpbml0ZVNjcm9sbENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBpbmZpbml0ZVNjcm9sbENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBsb2FkTW9yZUNvbXBvbmVudDogTG9hZE1vcmVDb21wb25lbnQ7XG5cbiAgY29sdW1uTmFtZXMgPSBbXTtcblxuICBzdHlsZXMgPSB7XG4gICAgdGFibGVDdXJzb3I6ICdhdXRvJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgZ3JpZEluZmluaXRlU2Nyb2xsQ29sdW1uOiB1bmRlZmluZWRcbiAgfTtcblxuICBzZWFyY2hUZXh0JCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBmaWx0ZXJpbmdBcHBsaWVkID0gZmFsc2U7XG4gIHRvdGFsUGFnZXNDb3VudCA9IEluZmluaXR5O1xuXG4gIHNlbGVjdGVkSXRlbUlkczogc3RyaW5nW10gPSBbXTtcbiAgY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZSA9IHtcbiAgICBhbGxTZWxlY3RlZDogZmFsc2UsXG4gICAgYWxsRGVzZWxlY3RlZDogdHJ1ZVxuICB9O1xuXG4gIGJ1aWx0SW5BY3Rpb25UeXBlID0ge1xuICAgIEVkaXQ6IEJ1aWx0SW5BY3Rpb25UeXBlLkVkaXQsXG4gICAgRGVsZXRlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgRXhwb3J0OiBCdWlsdEluQWN0aW9uVHlwZS5FeHBvcnRcbiAgfTtcblxuICByZXNpemVIYW5kbGVNb3VzZURvd24kID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHJpdmF0ZSBoZWFkZXJCZWluZ1Jlc2l6ZWQ6IHtcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gICAgZWw6IEhUTUxFbGVtZW50O1xuICB9O1xuICBAVmlld0NoaWxkcmVuKENka0hlYWRlckNlbGwsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIHRoUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBwcml2YXRlIHRoRWxzO1xuXG4gIHByaXZhdGUgcmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudDogYm9vbGVhbjtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgaG9zdFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcChzZWFyY2hUZXh0ID0+IHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5kYXRhU291cmNlLmRhdGEkLCB0aGlzLml0ZW1zU2VsZWN0LmFzT2JzZXJ2YWJsZSgpKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZGF0YV0pID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZUVtcHR5ID0gZGF0YS5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUgPSB7XG4gICAgICAgICAgICBhbGxTZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IGZhbHNlIDogZGF0YS5ldmVyeShpdGVtID0+IHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpLFxuICAgICAgICAgICAgYWxsRGVzZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IHRydWUgOiBkYXRhLmV2ZXJ5KGl0ZW0gPT4gIXRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YVNvdXJjZS5zdGF0cyQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoc3RhdHMgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVMb2FkTW9yZUNvbXBvbmVudChzdGF0cyk7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZ0xhYmVsc1BhcmFtcyhzdGF0cyk7XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0cyk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5yZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2gucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50Ll9hY3Rpb25Db250cm9scyB8fCBldmVudC5fYWN0aW9uQ29udHJvbHMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICB0aGlzLnRoRWxzID0gdGhpcy50aFJlZnMudG9BcnJheSgpLm1hcCgoeyBuYXRpdmVFbGVtZW50IH0pID0+IG5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc2V0dXBSZXNpemVIYW5kbGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgdHJhY2tCeU5hbWUoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5uYW1lO1xuICB9XG5cbiAgcmVzb2x2ZUNlbGxWYWx1ZShyb3csIHBhdGgpIHtcbiAgICByZXR1cm4gZmxvdyhbXG4gICAgICB4ID0+IHRoaXMuZGF0YVNvdXJjZS5yZXNvbHZlVmFsdWUoeCwgcGF0aCksXG4gICAgICB0aGlzLmRhdGFTb3VyY2UucmVzb2x2ZUZ1bmN0aW9uLFxuICAgICAgdGhpcy5kYXRhU291cmNlLm5vcm1hbGl6ZU5pbFxuICAgIF0pKHJvdyk7XG4gIH1cblxuICBjaGFuZ2VTb3J0T3JkZXIoY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uTmFtZSk7XG5cbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciB9ID0gY29sdW1uO1xuXG4gICAgICBpZiAoIXNvcnRPcmRlcikge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCAnYXNjJyk7XG4gICAgICB9IGVsc2UgaWYgKHNvcnRPcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKFtjb2x1bW5OYW1lXSwgJ2Rlc2MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVTb3J0aW5nKGNvbHVtbk5hbWVzOiBzdHJpbmdbXSwgc29ydE9yZGVyOiBTb3J0T3JkZXIpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKFxuICAgICAgKGNvbHVtbik6IENvbHVtbiA9PiB7XG4gICAgICAgIGlmIChjb2x1bW5OYW1lcy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5jb2x1bW4sIHNvcnRPcmRlciB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZSgpO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93biwgZmlsdGVyaW5nTW9kaWZpZXIpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXIsXG4gICAgICBwYXlsb2FkOiB7IGZpbHRlcmluZ01vZGlmaWVyIH1cbiAgICB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHsgY29sdW1uTmFtZSwgZHJvcGRvd24sIGZpbHRlcmluZ01vZGlmaWVyIH0pO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXIoY29sdW1uTmFtZSwgZHJvcGRvd24pIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHsgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZS5SZXNldEZpbHRlciB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmcodGhpcy5jb2x1bW5zLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLCB7XG4gICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlLlJlc2V0RmlsdGVyXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJpbmcoXG4gICAgY29sdW1uTmFtZXM6IHN0cmluZ1tdLFxuICAgIGFjdGlvbjoge1xuICAgICAgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZTtcbiAgICAgIHBheWxvYWQ/OiB7IGZpbHRlcmluZ01vZGlmaWVyOiBGaWx0ZXJpbmdNb2RpZmllciB9O1xuICAgIH1cbiAgKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAuLi4oYWN0aW9uLnR5cGUgPT09IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXJcbiAgICAgICAgICAgID8gYWN0aW9uLnBheWxvYWQuZmlsdGVyaW5nTW9kaWZpZXJcbiAgICAgICAgICAgIDogeyBmaWx0ZXJQcmVkaWNhdGU6IHVuZGVmaW5lZCwgZXh0ZXJuYWxGaWx0ZXJRdWVyeTogdW5kZWZpbmVkIH0pXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZ0FwcGxpZWQoKTtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0FwcGxpZWQgPSB0aGlzLmNvbHVtbnMuc29tZSh0aGlzLmlzQ29sdW1uRmlsdGVyaW5nQXBwbGllZCk7XG4gIH1cblxuICBpc0NvbHVtbkZpbHRlcmluZ0FwcGxpZWQoY29sdW1uOiBDb2x1bW4pOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZpbHRlcmFibGUsIGZpbHRlclByZWRpY2F0ZSwgZXh0ZXJuYWxGaWx0ZXJRdWVyeSB9ID0gY29sdW1uO1xuXG4gICAgcmV0dXJuICEhKGZpbHRlcmFibGUgJiYgKGZpbHRlclByZWRpY2F0ZSB8fCBleHRlcm5hbEZpbHRlclF1ZXJ5KSk7XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uKHsgaXRlbXNQZXJQYWdlLCBwYWdlIH0pIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgcGFnZVNpemU6IGl0ZW1zUGVyUGFnZSwgY3VycmVudFBhZ2U6IHBhZ2UgfTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0geyAuLi50aGlzLnBhZ2luYXRpb24sIGN1cnJlbnRQYWdlOiAxIH07XG4gICAgdGhpcy5yZWNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWREYXRhKHRydWUpO1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIGxvYWROZXh0UGFnZSgpOiBQcm9taXNlPElSZXN1bHRMaXN0PG9iamVjdD4+IHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5uZXh0UGFnZSB9O1xuXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5yZXN1bHRMaXN0JFxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gaW4gb3JkZXIgZm9yIGB0b1Byb21pc2VgIHRvIHdvcmssIHRoZSBvYnNlcnZhYmxlIG5lZWRzIHRvIGNvbXBsZXRlXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgLi4ucmVzdWx0LnBhZ2luZyxcbiAgICAgICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgSVJlc3VsdExpc3Q8b2JqZWN0PjtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZTogJ0NFTEwnLCB2YWx1ZSwgcm93LCBjb2x1bW5OYW1lIH0pO1xuICB9XG5cbiAgZ2V0SGVhZGVyQ2VsbFJlbmRlcmVyU3BlYyh7IHZhbHVlLCBjb2x1bW5OYW1lIH0pOiBDZWxsUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHR5cGU6ICdIRUFERVInLCB2YWx1ZSwgcm93OiB1bmRlZmluZWQsIGNvbHVtbk5hbWUgfSk7XG4gIH1cblxuICBnZXRGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjKHsgY29sdW1uLCBkcm9wZG93biB9KTogRmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcmVyOlxuICAgICAgICBnZXQodGhpcy5nZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pLCAnZmlsdGVyaW5nRm9ybVJlbmRlcmVyRGVmLnRlbXBsYXRlJykgfHxcbiAgICAgICAgY29sdW1uLmZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgcHJvcGVydHk6IGNvbHVtbixcbiAgICAgICAgYXBwbHlGaWx0ZXI6IHRoaXMuYXBwbHlGaWx0ZXIuYmluZCh0aGlzLCBjb2x1bW4ubmFtZSwgZHJvcGRvd24pLFxuICAgICAgICByZXNldEZpbHRlcjogdGhpcy5yZXNldEZpbHRlci5iaW5kKHRoaXMsIGNvbHVtbi5uYW1lLCBkcm9wZG93bilcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc2V0QWxsSXRlbXNTZWxlY3RlZChzZWxlY3RlZCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zZWxlY3Rpb24kXG4gICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmaWx0ZXJlZERhdGFJZHMgfSkgPT4gdGhpcy5zZXRJdGVtc1NlbGVjdGVkKGZpbHRlcmVkRGF0YUlkcywgc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHNldEFsbEl0ZW1zSW5DdXJyZW50UGFnZVNlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKGRhdGEgPT4gdGhpcy5zZXRJdGVtc1NlbGVjdGVkKGRhdGEsIHNlbGVjdGVkKSk7XG4gIH1cblxuICBzZXRJdGVtc1NlbGVjdGVkKGl0ZW1zOiBhbnlbXSwgc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBpdGVtSWRzID0gaXRlbXMubWFwKChpdGVtOiBvYmplY3QgfCBzdHJpbmcpID0+XG4gICAgICB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgPyBpdGVtW3RoaXMuc2VsZWN0aW9uUHJpbWFyeUtleV0gOiBpdGVtXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWRzID0gc2VsZWN0ZWRcbiAgICAgID8gdW5pb24odGhpcy5zZWxlY3RlZEl0ZW1JZHMsIGl0ZW1JZHMpXG4gICAgICA6IHdpdGhvdXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMsIC4uLml0ZW1JZHMpO1xuXG4gICAgdGhpcy5pdGVtc1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtSWRzKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbUlkcyA9IFtdO1xuICAgIHRoaXMuaXRlbXNTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbUlkcyk7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZChpdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtSWRzLmluY2x1ZGVzKGl0ZW1bdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5XSk7XG4gIH1cblxuICBvbkNvbHVtbkRyb3AoeyBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXggfSkge1xuICAgIGNvbnN0IGRpZmZlcmVudEluZGV4ID0gcHJldmlvdXNJbmRleCAhPT0gY3VycmVudEluZGV4O1xuXG4gICAgaWYgKGRpZmZlcmVudEluZGV4KSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuc3BsaWNlKHByZXZpb3VzSW5kZXgsIDEpO1xuICAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShjdXJyZW50SW5kZXgsIDAsIGNvbHVtblswXSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5OYW1lcygpO1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gIH1cblxuICB1cGRhdGVHcmlkQ29sdW1uc1NpemUoKSB7XG4gICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAuLi50aGlzLnN0eWxlcyxcbiAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgdGhpcy5jb2x1bW5zXG4gICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnZpc2libGUpXG4gICAgICAgICAgLm1hcCgoeyBncmlkVHJhY2tTaXplIH0pID0+IGdyaWRUcmFja1NpemUpXG4gICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgKSxcbiAgICAgIGdyaWRJbmZpbml0ZVNjcm9sbENvbHVtbjogdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFxuICAgICAgICBgMSAvIHNwYW4gJHt0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSkubGVuZ3RofWBcbiAgICAgIClcbiAgICB9O1xuXG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCk7XG4gIH1cblxuICBsb2FkQ2hpbGREZXZpY2VzKCkge1xuICAgIHRoaXMuc2hvd0NoaWxkRGV2aWNlcy52YWx1ZSA9ICF0aGlzLnNob3dDaGlsZERldmljZXMudmFsdWU7XG4gICAgdGhpcy5vbkNoaWxkRGV2aWNlcy5lbWl0KHRoaXMuc2hvd0NoaWxkRGV2aWNlcy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb25maWdDaGFuZ2UoKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKHsgdmlzaWJsZSwgc29ydE9yZGVyLCBuYW1lIH0pID0+ICh7XG4gICAgICB2aXNpYmxlLFxuICAgICAgc29ydE9yZGVyLFxuICAgICAgbmFtZVxuICAgIH0pKTtcbiAgICB0aGlzLm9uQ29uZmlnQ2hhbmdlLmVtaXQoeyBjb2x1bW5zLCBwYWdpbmF0aW9uOiB0aGlzLnBhZ2luYXRpb24gfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbnMoKSB7XG4gICAgY29uc3Qgc3BlY2lhbENvbHVtbiA9IHtcbiAgICAgIGdyaWRUcmFja1NpemU6ICdtaW5tYXgoNDJweCwgODJweCknLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcG9zaXRpb25GaXhlZDogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCBjb2x1bW5zID0gW1xuICAgICAgdGhpcy5zZWxlY3RhYmxlID8geyAuLi5zcGVjaWFsQ29sdW1uLCBuYW1lOiBTcGVjaWFsQ29sdW1uTmFtZS5DaGVja2JveCB9IDogdW5kZWZpbmVkLFxuICAgICAgLi4udGhpcy5jb2x1bW5zLFxuICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5sZW5ndGggPiAwXG4gICAgICAgID8geyAuLi5zcGVjaWFsQ29sdW1uLCBuYW1lOiBTcGVjaWFsQ29sdW1uTmFtZS5BY3Rpb25zIH1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICBdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKHRoaXMud2l0aENvbHVtbkRlZmF1bHRzKTtcblxuICAgIHRoaXMuY29sdW1ucyA9IHVuaXFCeShjb2x1bW5zLCAnbmFtZScpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uTmFtZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoQ29sdW1uRGVmYXVsdHMoY29sdW1uKTogQ29sdW1uIHtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZSB8fCBDb2x1bW5EYXRhVHlwZS5UZXh0U2hvcnQ7XG4gICAgY29uc3QgeyBoZWFkZXJDU1NDbGFzc05hbWUsIGNlbGxDU1NDbGFzc05hbWUgfSA9IGNvbHVtbjtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcjogJycsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIC4uLmNvbHVtbixcbiAgICAgIGRhdGFUeXBlLFxuICAgICAgZ3JpZFRyYWNrU2l6ZTpcbiAgICAgICAgY29sdW1uLmdyaWRUcmFja1NpemUgfHxcbiAgICAgICAgYG1pbm1heCgke21pbkNvbHVtbkdyaWRUcmFja1NpemV9cHgsICR7cmF0aW9zQnlDb2x1bW5UeXBlc1tkYXRhVHlwZV19ZnIpYCxcbiAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTpcbiAgICAgICAgKHR5cGVvZiBoZWFkZXJDU1NDbGFzc05hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBoZWFkZXJDU1NDbGFzc05hbWUuc3BsaXQoJyAnKVxuICAgICAgICAgIDogaGVhZGVyQ1NTQ2xhc3NOYW1lKSB8fCBbXSxcbiAgICAgIGNlbGxDU1NDbGFzc05hbWU6XG4gICAgICAgICh0eXBlb2YgY2VsbENTU0NsYXNzTmFtZSA9PT0gJ3N0cmluZycgPyBjZWxsQ1NTQ2xhc3NOYW1lLnNwbGl0KCcgJykgOiBjZWxsQ1NTQ2xhc3NOYW1lKSB8fFxuICAgICAgICBbXVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbk5hbWVzKCkge1xuICAgIHRoaXMuY29sdW1uTmFtZXMgPSB0aGlzLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwUmVzaXplSGFuZGxlKCkge1xuICAgIGNvbnN0IHJlc2l6ZUhhbmRsZURyYWckID0gdGhpcy5yZXNpemVIYW5kbGVNb3VzZURvd24kLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSksXG4gICAgICBtZXJnZU1hcCgoeyBldmVudCwgdGFyZ2V0Q29sdW1uTmFtZSB9KSA9PiB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHRhcmdldENvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOiB1bmlvbihjb2x1bW4uaGVhZGVyQ1NTQ2xhc3NOYW1lLCBbJ2hlYWRlci0tYmVpbmctcmVzaXplZCddKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmhlYWRlckJlaW5nUmVzaXplZCA9IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiB0YXJnZXRDb2x1bW5OYW1lLFxuICAgICAgICAgIGVsOiBldmVudC50YXJnZXQucGFyZW50Tm9kZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgICAgIHRhYmxlQ3Vyc29yOiAnY29sLXJlc2l6ZSdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZU1vdmUkLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMucmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXNpemVIYW5kbGVEcmFnJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5jb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIC8vIFJlYWQgd3JhcHBlcidzIG9mZnNldCBsZWZ0IHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxPZmZzZXQgPSB3cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCB3aXRoIHRoZSB3cmFwcGVyIGhvcml6b250YWwgc2Nyb2xsIHBvc2l0aW9uLlxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbE9mZnNldCA9IHdyYXBwZXIuc2Nyb2xsTGVmdCAtIGhvcml6b250YWxPZmZzZXQ7XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGVzaXJlZCB3aWR0aC5cbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID1cbiAgICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbE9mZnNldCArIGV2ZW50LmNsaWVudFggLSAodGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQuZWwub2Zmc2V0TGVmdCB8fCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbHVtbiBvYmplY3Qgd2l0aCB0aGUgbmV3IHNpemUgdmFsdWUsIGVuZm9yY2Ugb3VyIG1pbmltdW0gc2l6ZS5cbiAgICAgICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogYCR7TWF0aC5tYXgobWluQ29sdW1uR3JpZFRyYWNrU2l6ZSwgd2lkdGgpfXB4YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGb3IgdGhlIG90aGVyIGhlYWRlcnMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNldCB3aWR0aCwgZml4IGl0IHRvIHRoZWlyIGNvbXB1dGVkIHdpZHRoLlxuICAgICAgICAgIGlmIChjb2x1bW4uZ3JpZFRyYWNrU2l6ZS5zdGFydHNXaXRoKCdtaW5tYXgnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAvLyBpc24ndCBmaXhlZCB5ZXQgKGl0IHdvdWxkIGJlIGEgcHggdmFsdWUpXG4gICAgICAgICAgICAgIGdyaWRUcmFja1NpemU6IGAke19wYXJzZUludCh0aGlzLnRoRWxzW2ldLmNsaWVudFdpZHRoKX1weGBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVXBkYXRlIHRoZSBjb2x1bW4gc2l6ZXMuXG4gICAgICAgICAqIE5vdGU6IGdyaWQtdGVtcGxhdGUtY29sdW1ucyBzZXRzIHRoZSB3aWR0aCBmb3IgYWxsIGNvbHVtbnMgaW4gb25lIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gdGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQuY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICBoZWFkZXJDU1NDbGFzc05hbWU6IHdpdGhvdXQoY29sdW1uLmhlYWRlckNTU0NsYXNzTmFtZSwgJ2hlYWRlci0tYmVpbmctcmVzaXplZCcpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhlYWRlckJlaW5nUmVzaXplZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnN0eWxlcyA9IHtcbiAgICAgICAgICAuLi50aGlzLnN0eWxlcyxcbiAgICAgICAgICB0YWJsZUN1cnNvcjogJ2F1dG8nXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTW91c2VIaWdobGlnaHRzKCkge1xuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHR5cGUsIHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uTmFtZSk7XG4gICAgY29uc3QgY29sdW1uUmVuZGVyZXIgPSB0aGlzLmdldENvbHVtblJlbmRlcmVyKGNvbHVtbik7XG4gICAgY29uc3QgcmVuZGVyZXJUZW1wbGF0ZSA9IGdldChcbiAgICAgIGNvbHVtblJlbmRlcmVyLFxuICAgICAgYCR7dHlwZSA9PT0gJ0hFQURFUicgPyAnaGVhZGVyQ2VsbFJlbmRlcmVyRGVmJyA6ICdjZWxsUmVuZGVyZXJEZWYnfS50ZW1wbGF0ZWBcbiAgICApO1xuXG4gICAgY29uc3QgeyBjZWxsUmVuZGVyZXJDb21wb25lbnQsIGhlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudCB9ID0gY29sdW1uO1xuICAgIGNvbnN0IHJlbmRlcmVyQ29tcG9uZW50ID1cbiAgICAgIHR5cGUgPT09ICdIRUFERVInID8gaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50IDogY2VsbFJlbmRlcmVyQ29tcG9uZW50O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcmVyOiByZW5kZXJlclRlbXBsYXRlIHx8IHJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaXRlbTogcm93LFxuICAgICAgICBwcm9wZXJ0eTogY29sdW1uXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKTogQ29sdW1uRGlyZWN0aXZlIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5SZW5kZXJlcnMudG9BcnJheSgpLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gIH1cbiAgQHRocm90dGxlKDUwMCwge3RyYWlsaW5nOiB0cnVlLCBsZWFkaW5nOiBmYWxzZX0pXG4gIHByaXZhdGUgbG9hZERhdGEocmVsb2FkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGxcbiAgICB9ID0gdGhpcztcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRGF0YSh7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGwsXG4gICAgICByZWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICAgIGZpbHRlcmVkSXRlbXNDb3VudDogc3RhdHMuZmlsdGVyZWRTaXplLFxuICAgICAgYWxsSXRlbXNDb3VudDogc3RhdHMuc2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlID0gc3RhdHMubmV4dFBhZ2U7XG4gICAgY29uc3QgcGFnZUZpcnN0SXRlbUlkeCA9IChzdGF0cy5jdXJyZW50UGFnZSAtIDEpICogc3RhdHMuZmlyc3RQYWdlU2l6ZSArIDE7XG4gICAgdGhpcy5wYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgICBwYWdlRmlyc3RJdGVtSWR4LFxuICAgICAgcGFnZUxhc3RJdGVtSWR4OiBwYWdlRmlyc3RJdGVtSWR4ICsgKHN0YXRzLmN1cnJlbnRQYWdlU2l6ZSAtIDEpLFxuICAgICAgaXRlbXNUb3RhbDogc3RhdHMuZmlsdGVyZWRTaXplXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgJiZcbiAgICAgIHN0YXRzICYmXG4gICAgICBzdGF0cy5uZXh0UGFnZSAmJlxuICAgICAgKCF0aGlzLmxvYWRNb3JlQ29tcG9uZW50IHx8IHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudClcbiAgICApIHtcbiAgICAgIHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jbGVhcigpO1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID0gdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICAgIExvYWRNb3JlQ29tcG9uZW50XG4gICAgICApO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMb2FkTW9yZUNvbXBvbmVudDtcbiAgICAgIGluc3RhbmNlLnVzZUludGVyc2VjdGlvbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdhdXRvJyB8fCB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnaGlkZGVuJztcbiAgICAgIGluc3RhbmNlLmhpZGRlbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdoaWRkZW4nO1xuICAgICAgaW5zdGFuY2UucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogc3RhdHMubmV4dFBhZ2UsXG4gICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgIH0gYXMgUGFnaW5nPGFueT47XG4gICAgICBpbnN0YW5jZS5sb2FkTmV4dExhYmVsID0gdGhpcy5sb2FkTW9yZUl0ZW1zTGFiZWw7XG4gICAgICBpbnN0YW5jZS5sb2FkaW5nTGFiZWwgPSB0aGlzLmxvYWRpbmdJdGVtc0xhYmVsO1xuICAgICAgdGhpcy5sb2FkTW9yZUNvbXBvbmVudCA9IGluc3RhbmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkTW9yZUNvbXBvbmVudCAmJiAhc3RhdHMubmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMubG9hZE1vcmVDb21wb25lbnQucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogbnVsbFxuICAgICAgfSBhcyBQYWdpbmc8YW55PjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvVG9wKCkge1xuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICB9XG59XG4iXX0=
539
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCx3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsSUFBSSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFNUQsT0FBTyxFQVNMLG1CQUFtQixFQUNuQixzQkFBc0IsRUFFdEIsbUJBQW1CLEVBTXBCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxF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QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7cUJBb0M5RSxZQUFZLFNBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs7QUE4ZGpEO0lBREMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2lEQXdCakQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtIZWFkZXJDZWxsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RhYmxlJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSVJlc3VsdExpc3QsIFBhZ2luZyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IHRocm90dGxlIH0gZnJvbSAnLi8uLi9jb21tb24vdGhyb3R0bGUuZGVjb3JhdG9yJztcbmltcG9ydCB7IGZsb3csIGdldCwgcGFyc2VJbnQgYXMgX3BhcnNlSW50LCB1bmlvbiwgd2l0aG91dCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpcnN0LFxuICBtZXJnZU1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTG9hZE1vcmVDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24vbG9hZC1tb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkTW9yZU1vZGUgfSBmcm9tICcuLi9jb21tb24vbG9hZC1tb3JlLm1vZGVsJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2dldHRleHQnO1xuaW1wb3J0IHsgQ2VsbFJlbmRlcmVyU3BlYyB9IGZyb20gJy4vY29sdW1uL2NlbGwtcmVuZGVyZXInO1xuaW1wb3J0IHsgQ29sdW1uRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4vY29sdW1uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjLCBGaWx0ZXJpbmdNb2RpZmllciB9IGZyb20gJy4vY29sdW1uL2ZpbHRlcmluZy1mb3JtLXJlbmRlcmVyJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEJ1aWx0SW5BY3Rpb25UeXBlLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgQ29sdW1uLFxuICBDb2x1bW5EYXRhVHlwZSxcbiAgRGF0YUdyaWQsXG4gIERhdGFTb3VyY2VTdGF0cyxcbiAgRGlzcGxheU9wdGlvbnMsXG4gIEZpbHRlcmluZ0FjdGlvblR5cGUsXG4gIG1pbkNvbHVtbkdyaWRUcmFja1NpemUsXG4gIFBhZ2luYXRpb24sXG4gIHJhdGlvc0J5Q29sdW1uVHlwZXMsXG4gIFJvdyxcbiAgU2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgU29ydE9yZGVyLFxuICBTcGVjaWFsQ29sdW1uTmFtZSxcbiAgR3JpZENvbmZpZ1xufSBmcm9tICcuL2RhdGEtZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBHcmlkRGF0YVNvdXJjZSB9IGZyb20gJy4vZ3JpZC1kYXRhLXNvdXJjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIERhdGFHcmlkLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gZ2V0dGV4dCgnSXRlbXMnKTtcbiAgQElucHV0KCkgbG9hZE1vcmVJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkIG1vcmUgaXRlbXMnKTtcbiAgQElucHV0KCkgbG9hZGluZ0l0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWRpbmcgaXRlbXPigKYnKTtcbiAgQElucHV0KCkgc2hvd1NlYXJjaCA9IGZhbHNlO1xuICBASW5wdXQoKSByZWZyZXNoOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQElucHV0KCkgc2hvd0NoaWxkRGV2aWNlczogYW55ID0ge307XG5cbiAgY29sdW1uczogQ29sdW1uW107XG4gIEBJbnB1dCgnY29sdW1ucycpXG4gIHNldCBfY29sdW1ucyhjb2x1bW5zKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucyB8fCBbXTtcbiAgfVxuXG4gIGRhdGFTb3VyY2UgPSBuZXcgR3JpZERhdGFTb3VyY2UoKTtcbiAgcm93czogUm93W107XG4gIEBJbnB1dCgncm93cycpXG4gIHNldCBfcm93cyhyb3dzKSB7XG4gICAgdGhpcy5yb3dzID0gcm93cyB8fCBbXTtcbiAgfVxuXG4gIGZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICBmaWx0ZXJlZEl0ZW1zQ291bnQ6IDAsXG4gICAgYWxsSXRlbXNDb3VudDogMFxuICB9O1xuXG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHBhZ2luYXRpb25MYWJlbFBhcmFtcyA9IHtcbiAgICBwYWdlRmlyc3RJdGVtSWR4OiAwLFxuICAgIHBhZ2VMYXN0SXRlbUlkeDogMCxcbiAgICBpdGVtc1RvdGFsOiAwXG4gIH07XG4gIHJlYWRvbmx5IHBvc3NpYmxlUGFnZVNpemVzOiBudW1iZXJbXSA9IFsxMCwgMTUsIDIwLCAzMCwgNTBdO1xuICByZWFkb25seSBtaW5Qb3NzaWJsZVBhZ2VTaXplID0gTWF0aC5taW4oLi4udGhpcy5wb3NzaWJsZVBhZ2VTaXplcyk7XG4gIEBJbnB1dCgncGFnaW5hdGlvbicpXG4gIHNldCBfcGFnaW5hdGlvbihwYWdpbmF0aW9uKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IGdldCh0aGlzLnBhZ2luYXRpb24sICdwYWdlU2l6ZScpO1xuXG4gICAgaWYgKFxuICAgICAgcGFnZVNpemUgJiZcbiAgICAgICF0aGlzLnBvc3NpYmxlUGFnZVNpemVzLmZpbmQocG9zc2libGVQYWdlU2l6ZSA9PiBwb3NzaWJsZVBhZ2VTaXplID09PSBwYWdlU2l6ZSlcbiAgICApIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBwYWdlU2l6ZTogMTAgfTtcbiAgICB9XG4gIH1cblxuICBpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlO1xuICBASW5wdXQoJ2luZmluaXRlU2Nyb2xsJylcbiAgc2V0IF9pbmZpbml0ZVNjcm9sbChpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlKSB7XG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IGluZmluaXRlU2Nyb2xsO1xuICB9XG5cbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgQElucHV0KCdzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrJylcbiAgc2V0IF9zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrKHNlcnZlclNpZGVEYXRhQ2FsbGJhY2spIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrO1xuICB9XG5cbiAgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICBASW5wdXQoJ3NlbGVjdGFibGUnKVxuICBzZXQgX3NlbGVjdGFibGUoc2VsZWN0YWJsZSkge1xuICAgIHRoaXMuc2VsZWN0YWJsZSA9IHNlbGVjdGFibGU7XG4gIH1cblxuICBzZWxlY3Rpb25QcmltYXJ5S2V5ID0gJ2lkJztcbiAgQElucHV0KCdzZWxlY3Rpb25QcmltYXJ5S2V5JylcbiAgc2V0IF9zZWxlY3Rpb25QcmltYXJ5S2V5KHNlbGVjdGlvblByaW1hcnlLZXkpIHtcbiAgICB0aGlzLnNlbGVjdGlvblByaW1hcnlLZXkgPSBzZWxlY3Rpb25QcmltYXJ5S2V5O1xuICB9XG5cbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIGdyaWRIZWFkZXI6IHRydWUsXG4gICAgZmlsdGVyOiB0cnVlXG4gIH07XG4gIEBJbnB1dCgnZGlzcGxheU9wdGlvbnMnKVxuICBzZXQgX2Rpc3BsYXlPcHRpb25zKGRpc3BsYXlPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwbGF5T3B0aW9ucyA9IHsgLi4udGhpcy5kaXNwbGF5T3B0aW9ucywgLi4uZGlzcGxheU9wdGlvbnMgfTtcbiAgfVxuXG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW107XG4gIEBJbnB1dCgnYWN0aW9uQ29udHJvbHMnKVxuICBzZXQgX2FjdGlvbkNvbnRyb2xzKGFjdGlvbkNvbnRyb2xzKSB7XG4gICAgdGhpcy5hY3Rpb25Db250cm9scyA9IGFjdGlvbkNvbnRyb2xzIHx8IFtdO1xuICB9XG5cbiAgYnVsa0FjdGlvbkNvbnRyb2xzOiBCdWxrQWN0aW9uQ29udHJvbFtdO1xuICBASW5wdXQoJ2J1bGtBY3Rpb25Db250cm9scycpXG4gIHNldCBfYnVsa0FjdGlvbkNvbnRyb2xzKGJ1bGtBY3Rpb25Db250cm9scykge1xuICAgIHRoaXMuYnVsa0FjdGlvbkNvbnRyb2xzID0gYnVsa0FjdGlvbkNvbnRyb2xzIHx8IFtdO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNlYXJjaFRleHQgPSAnJztcblxuICAvKiogU2hvd3MgdGhlIHdhcm5pbmcgZm9yIHRoZSBzdWItYXNzZXRzIGNvdW50ZXIgKi9cbiAgQElucHV0KClcbiAgc2hvd0NvdW50ZXJXYXJuaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gbW91c2UgaXMgb3ZlciBhIHJvdy4gKi9cbiAgQE91dHB1dCgpIHJvd01vdXNlT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgcm93TW91c2VMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQE91dHB1dCgpIG9uQ29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICBAT3V0cHV0KCkgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIG9uQ2hpbGREZXZpY2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ29sdW1uRGlyZWN0aXZlKSBjb2x1bW5SZW5kZXJlcnM6IFF1ZXJ5TGlzdDxDb2x1bW5EaXJlY3RpdmU+O1xuXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbCcsIHsgc3RhdGljOiB0cnVlIH0pIHNjcm9sbENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdpbmZpbml0ZVNjcm9sbENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBpbmZpbml0ZVNjcm9sbENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBsb2FkTW9yZUNvbXBvbmVudDogTG9hZE1vcmVDb21wb25lbnQ7XG5cbiAgY29sdW1uTmFtZXMgPSBbXTtcblxuICBzdHlsZXMgPSB7XG4gICAgdGFibGVDdXJzb3I6ICdhdXRvJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgZ3JpZEluZmluaXRlU2Nyb2xsQ29sdW1uOiB1bmRlZmluZWRcbiAgfTtcblxuICBzZWFyY2hUZXh0JCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBmaWx0ZXJpbmdBcHBsaWVkID0gZmFsc2U7XG4gIHRvdGFsUGFnZXNDb3VudCA9IEluZmluaXR5O1xuXG4gIHNlbGVjdGVkSXRlbUlkczogc3RyaW5nW10gPSBbXTtcbiAgY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZSA9IHtcbiAgICBhbGxTZWxlY3RlZDogZmFsc2UsXG4gICAgYWxsRGVzZWxlY3RlZDogdHJ1ZVxuICB9O1xuXG4gIGJ1aWx0SW5BY3Rpb25UeXBlID0ge1xuICAgIEVkaXQ6IEJ1aWx0SW5BY3Rpb25UeXBlLkVkaXQsXG4gICAgRGVsZXRlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgRXhwb3J0OiBCdWlsdEluQWN0aW9uVHlwZS5FeHBvcnRcbiAgfTtcblxuICByZXNpemVIYW5kbGVNb3VzZURvd24kID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHJpdmF0ZSBoZWFkZXJCZWluZ1Jlc2l6ZWQ6IHtcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gICAgZWw6IEhUTUxFbGVtZW50O1xuICB9O1xuICBAVmlld0NoaWxkcmVuKENka0hlYWRlckNlbGwsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIHRoUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBwcml2YXRlIHRoRWxzO1xuXG4gIHByaXZhdGUgcmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudDogYm9vbGVhbjtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgaG9zdFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcChzZWFyY2hUZXh0ID0+IHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5kYXRhU291cmNlLmRhdGEkLCB0aGlzLml0ZW1zU2VsZWN0LmFzT2JzZXJ2YWJsZSgpKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZGF0YV0pID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZUVtcHR5ID0gZGF0YS5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUgPSB7XG4gICAgICAgICAgICBhbGxTZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IGZhbHNlIDogZGF0YS5ldmVyeShpdGVtID0+IHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpLFxuICAgICAgICAgICAgYWxsRGVzZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IHRydWUgOiBkYXRhLmV2ZXJ5KGl0ZW0gPT4gIXRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YVNvdXJjZS5zdGF0cyQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoc3RhdHMgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVMb2FkTW9yZUNvbXBvbmVudChzdGF0cyk7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZ0xhYmVsc1BhcmFtcyhzdGF0cyk7XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0cyk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5yZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2gucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50Ll9hY3Rpb25Db250cm9scyB8fCBldmVudC5fYWN0aW9uQ29udHJvbHMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICB0aGlzLnRoRWxzID0gdGhpcy50aFJlZnMudG9BcnJheSgpLm1hcCgoeyBuYXRpdmVFbGVtZW50IH0pID0+IG5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc2V0dXBSZXNpemVIYW5kbGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgdHJhY2tCeU5hbWUoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5uYW1lO1xuICB9XG5cbiAgcmVzb2x2ZUNlbGxWYWx1ZShyb3csIHBhdGgpIHtcbiAgICByZXR1cm4gZmxvdyhbXG4gICAgICB4ID0+IHRoaXMuZGF0YVNvdXJjZS5yZXNvbHZlVmFsdWUoeCwgcGF0aCksXG4gICAgICB0aGlzLmRhdGFTb3VyY2UucmVzb2x2ZUZ1bmN0aW9uLFxuICAgICAgdGhpcy5kYXRhU291cmNlLm5vcm1hbGl6ZU5pbFxuICAgIF0pKHJvdyk7XG4gIH1cblxuICBjaGFuZ2VTb3J0T3JkZXIoY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uTmFtZSk7XG5cbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciB9ID0gY29sdW1uO1xuXG4gICAgICBpZiAoIXNvcnRPcmRlcikge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCAnYXNjJyk7XG4gICAgICB9IGVsc2UgaWYgKHNvcnRPcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKFtjb2x1bW5OYW1lXSwgJ2Rlc2MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVTb3J0aW5nKGNvbHVtbk5hbWVzOiBzdHJpbmdbXSwgc29ydE9yZGVyOiBTb3J0T3JkZXIpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pOiBDb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICByZXR1cm4geyAuLi5jb2x1bW4sIHNvcnRPcmRlciB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH0pO1xuICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZSgpO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93biwgZmlsdGVyaW5nTW9kaWZpZXIpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXIsXG4gICAgICBwYXlsb2FkOiB7IGZpbHRlcmluZ01vZGlmaWVyIH1cbiAgICB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHsgY29sdW1uTmFtZSwgZHJvcGRvd24sIGZpbHRlcmluZ01vZGlmaWVyIH0pO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXIoY29sdW1uTmFtZSwgZHJvcGRvd24pIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHsgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZS5SZXNldEZpbHRlciB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmcoXG4gICAgICB0aGlzLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuUmVzZXRGaWx0ZXJcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyaW5nKFxuICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSxcbiAgICBhY3Rpb246IHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGU7XG4gICAgICBwYXlsb2FkPzogeyBmaWx0ZXJpbmdNb2RpZmllcjogRmlsdGVyaW5nTW9kaWZpZXIgfTtcbiAgICB9XG4gICkge1xuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICAgIGlmIChjb2x1bW5OYW1lcy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgLi4uKGFjdGlvbi50eXBlID09PSBGaWx0ZXJpbmdBY3Rpb25UeXBlLkFwcGx5RmlsdGVyXG4gICAgICAgICAgICA/IGFjdGlvbi5wYXlsb2FkLmZpbHRlcmluZ01vZGlmaWVyXG4gICAgICAgICAgICA6IHsgZmlsdGVyUHJlZGljYXRlOiB1bmRlZmluZWQsIGV4dGVybmFsRmlsdGVyUXVlcnk6IHVuZGVmaW5lZCB9KVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCk7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmluZ0FwcGxpZWQoKSB7XG4gICAgdGhpcy5maWx0ZXJpbmdBcHBsaWVkID0gdGhpcy5jb2x1bW5zLnNvbWUodGhpcy5pc0NvbHVtbkZpbHRlcmluZ0FwcGxpZWQpO1xuICB9XG5cbiAgaXNDb2x1bW5GaWx0ZXJpbmdBcHBsaWVkKGNvbHVtbjogQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBmaWx0ZXJhYmxlLCBmaWx0ZXJQcmVkaWNhdGUsIGV4dGVybmFsRmlsdGVyUXVlcnkgfSA9IGNvbHVtbjtcblxuICAgIHJldHVybiAhIShmaWx0ZXJhYmxlICYmIChmaWx0ZXJQcmVkaWNhdGUgfHwgZXh0ZXJuYWxGaWx0ZXJRdWVyeSkpO1xuICB9XG5cbiAgdXBkYXRlUGFnaW5hdGlvbih7IGl0ZW1zUGVyUGFnZSwgcGFnZSB9KSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0geyAuLi50aGlzLnBhZ2luYXRpb24sIHBhZ2VTaXplOiBpdGVtc1BlclBhZ2UsIGN1cnJlbnRQYWdlOiBwYWdlIH07XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZSgpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBjdXJyZW50UGFnZTogMSB9O1xuICAgIHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudCA9IHRydWU7XG4gICAgdGhpcy5sb2FkRGF0YSh0cnVlKTtcbiAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gIH1cblxuICBsb2FkTmV4dFBhZ2UoKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxvYmplY3Q+PiB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0geyAuLi50aGlzLnBhZ2luYXRpb24sIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2luYXRpb24ubmV4dFBhZ2UgfTtcblxuICAgIHRoaXMubG9hZERhdGEoKTtcblxuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UucmVzdWx0TGlzdCRcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIGluIG9yZGVyIGZvciBgdG9Qcm9taXNlYCB0byB3b3JrLCB0aGUgb2JzZXJ2YWJsZSBuZWVkcyB0byBjb21wbGV0ZVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICBwYWdpbmc6IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdC5wYWdpbmcsXG4gICAgICAgICAgICBuZXh0OiB0aGlzLmxvYWROZXh0UGFnZS5iaW5kKHRoaXMpXG4gICAgICAgICAgfVxuICAgICAgICB9IGFzIElSZXN1bHRMaXN0PG9iamVjdD47XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldENlbGxSZW5kZXJlclNwZWMoeyB2YWx1ZSwgcm93LCBjb2x1bW5OYW1lIH0pOiBDZWxsUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHR5cGU6ICdDRUxMJywgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTtcbiAgfVxuXG4gIGdldEhlYWRlckNlbGxSZW5kZXJlclNwZWMoeyB2YWx1ZSwgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENlbGxSZW5kZXJlclNwZWMoeyB0eXBlOiAnSEVBREVSJywgdmFsdWUsIHJvdzogdW5kZWZpbmVkLCBjb2x1bW5OYW1lIH0pO1xuICB9XG5cbiAgZ2V0RmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYyh7IGNvbHVtbiwgZHJvcGRvd24gfSk6IEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB7XG4gICAgICByZW5kZXJlcjpcbiAgICAgICAgZ2V0KHRoaXMuZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKSwgJ2ZpbHRlcmluZ0Zvcm1SZW5kZXJlckRlZi50ZW1wbGF0ZScpIHx8XG4gICAgICAgIGNvbHVtbi5maWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHByb3BlcnR5OiBjb2x1bW4sXG4gICAgICAgIGFwcGx5RmlsdGVyOiB0aGlzLmFwcGx5RmlsdGVyLmJpbmQodGhpcywgY29sdW1uLm5hbWUsIGRyb3Bkb3duKSxcbiAgICAgICAgcmVzZXRGaWx0ZXI6IHRoaXMucmVzZXRGaWx0ZXIuYmluZCh0aGlzLCBjb2x1bW4ubmFtZSwgZHJvcGRvd24pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHNldEFsbEl0ZW1zU2VsZWN0ZWQoc2VsZWN0ZWQpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc2VsZWN0aW9uJFxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZmlsdGVyZWREYXRhSWRzIH0pID0+IHRoaXMuc2V0SXRlbXNTZWxlY3RlZChmaWx0ZXJlZERhdGFJZHMsIHNlbGVjdGVkKSk7XG4gIH1cblxuICBzZXRBbGxJdGVtc0luQ3VycmVudFBhZ2VTZWxlY3RlZChzZWxlY3RlZCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhJC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZShkYXRhID0+IHRoaXMuc2V0SXRlbXNTZWxlY3RlZChkYXRhLCBzZWxlY3RlZCkpO1xuICB9XG5cbiAgc2V0SXRlbXNTZWxlY3RlZChpdGVtczogYW55W10sIHNlbGVjdGVkKSB7XG4gICAgY29uc3QgaXRlbUlkcyA9IGl0ZW1zLm1hcCgoaXRlbTogb2JqZWN0IHwgc3RyaW5nKSA9PlxuICAgICAgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnID8gaXRlbVt0aGlzLnNlbGVjdGlvblByaW1hcnlLZXldIDogaXRlbVxuICAgICk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbUlkcyA9IHNlbGVjdGVkXG4gICAgICA/IHVuaW9uKHRoaXMuc2VsZWN0ZWRJdGVtSWRzLCBpdGVtSWRzKVxuICAgICAgOiB3aXRob3V0KHRoaXMuc2VsZWN0ZWRJdGVtSWRzLCAuLi5pdGVtSWRzKTtcblxuICAgIHRoaXMuaXRlbXNTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbUlkcyk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1JZHMgPSBbXTtcbiAgICB0aGlzLml0ZW1zU2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMpO1xuICB9XG5cbiAgaXNJdGVtU2VsZWN0ZWQoaXRlbSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbUlkcy5pbmNsdWRlcyhpdGVtW3RoaXMuc2VsZWN0aW9uUHJpbWFyeUtleV0pO1xuICB9XG5cbiAgb25Db2x1bW5Ecm9wKHsgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4IH0pIHtcbiAgICBjb25zdCBkaWZmZXJlbnRJbmRleCA9IHByZXZpb3VzSW5kZXggIT09IGN1cnJlbnRJbmRleDtcblxuICAgIGlmIChkaWZmZXJlbnRJbmRleCkge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcbiAgICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBjb2x1bW5bMF0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlQ29sdW1uTmFtZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICB9XG5cbiAgdXBkYXRlR3JpZENvbHVtbnNTaXplKCkge1xuICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoXG4gICAgICAgIHRoaXMuY29sdW1uc1xuICAgICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi52aXNpYmxlKVxuICAgICAgICAgIC5tYXAoKHsgZ3JpZFRyYWNrU2l6ZSB9KSA9PiBncmlkVHJhY2tTaXplKVxuICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICksXG4gICAgICBncmlkSW5maW5pdGVTY3JvbGxDb2x1bW46IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgYDEgLyBzcGFuICR7dGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnZpc2libGUpLmxlbmd0aH1gXG4gICAgICApXG4gICAgfTtcblxuICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZSgpO1xuICB9XG5cbiAgbG9hZENoaWxkRGV2aWNlcygpIHtcbiAgICB0aGlzLnNob3dDaGlsZERldmljZXMudmFsdWUgPSAhdGhpcy5zaG93Q2hpbGREZXZpY2VzLnZhbHVlO1xuICAgIHRoaXMub25DaGlsZERldmljZXMuZW1pdCh0aGlzLnNob3dDaGlsZERldmljZXMudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q29uZmlnQ2hhbmdlKCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKCh7IHZpc2libGUsIHNvcnRPcmRlciwgbmFtZSB9KSA9PiAoe1xuICAgICAgdmlzaWJsZSxcbiAgICAgIHNvcnRPcmRlcixcbiAgICAgIG5hbWVcbiAgICB9KSk7XG4gICAgdGhpcy5vbkNvbmZpZ0NoYW5nZS5lbWl0KHsgY29sdW1ucywgcGFnaW5hdGlvbjogdGhpcy5wYWdpbmF0aW9uIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zKCkge1xuICAgIGNvbnN0IHNwZWNpYWxDb2x1bW4gPSB7XG4gICAgICBncmlkVHJhY2tTaXplOiAnbWlubWF4KDQycHgsIDgycHgpJyxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIHBvc2l0aW9uRml4ZWQ6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1ucyA9IFtcbiAgICAgIHRoaXMuc2VsZWN0YWJsZSA/IHsgLi4uc3BlY2lhbENvbHVtbiwgbmFtZTogU3BlY2lhbENvbHVtbk5hbWUuQ2hlY2tib3ggfSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnRoaXMuY29sdW1ucyxcbiAgICAgIHRoaXMuYWN0aW9uQ29udHJvbHMubGVuZ3RoID4gMFxuICAgICAgICA/IHsgLi4uc3BlY2lhbENvbHVtbiwgbmFtZTogU3BlY2lhbENvbHVtbk5hbWUuQWN0aW9ucyB9XG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLm1hcCh0aGlzLndpdGhDb2x1bW5EZWZhdWx0cyk7XG5cbiAgICB0aGlzLmNvbHVtbnMgPSB1bmlxQnkoY29sdW1ucywgJ25hbWUnKTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbk5hbWVzKCk7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZ0FwcGxpZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2l0aENvbHVtbkRlZmF1bHRzKGNvbHVtbik6IENvbHVtbiB7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBjb2x1bW4uZGF0YVR5cGUgfHwgQ29sdW1uRGF0YVR5cGUuVGV4dFNob3J0O1xuICAgIGNvbnN0IHsgaGVhZGVyQ1NTQ2xhc3NOYW1lLCBjZWxsQ1NTQ2xhc3NOYW1lIH0gPSBjb2x1bW47XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIHBvc2l0aW9uRml4ZWQ6IGZhbHNlLFxuICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICBzb3J0T3JkZXI6ICcnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAuLi5jb2x1bW4sXG4gICAgICBkYXRhVHlwZSxcbiAgICAgIGdyaWRUcmFja1NpemU6XG4gICAgICAgIGNvbHVtbi5ncmlkVHJhY2tTaXplIHx8XG4gICAgICAgIGBtaW5tYXgoJHttaW5Db2x1bW5HcmlkVHJhY2tTaXplfXB4LCAke3JhdGlvc0J5Q29sdW1uVHlwZXNbZGF0YVR5cGVdfWZyKWAsXG4gICAgICBoZWFkZXJDU1NDbGFzc05hbWU6XG4gICAgICAgICh0eXBlb2YgaGVhZGVyQ1NTQ2xhc3NOYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gaGVhZGVyQ1NTQ2xhc3NOYW1lLnNwbGl0KCcgJylcbiAgICAgICAgICA6IGhlYWRlckNTU0NsYXNzTmFtZSkgfHwgW10sXG4gICAgICBjZWxsQ1NTQ2xhc3NOYW1lOlxuICAgICAgICAodHlwZW9mIGNlbGxDU1NDbGFzc05hbWUgPT09ICdzdHJpbmcnID8gY2VsbENTU0NsYXNzTmFtZS5zcGxpdCgnICcpIDogY2VsbENTU0NsYXNzTmFtZSkgfHxcbiAgICAgICAgW11cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5OYW1lcygpIHtcbiAgICB0aGlzLmNvbHVtbk5hbWVzID0gdGhpcy5jb2x1bW5zLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFJlc2l6ZUhhbmRsZSgpIHtcbiAgICBjb25zdCByZXNpemVIYW5kbGVEcmFnJCA9IHRoaXMucmVzaXplSGFuZGxlTW91c2VEb3duJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmNsZWFyTW91c2VIaWdobGlnaHRzKCkpLFxuICAgICAgbWVyZ2VNYXAoKHsgZXZlbnQsIHRhcmdldENvbHVtbk5hbWUgfSkgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0YXJnZXRDb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTogdW5pb24oY29sdW1uLmhlYWRlckNTU0NsYXNzTmFtZSwgWydoZWFkZXItLWJlaW5nLXJlc2l6ZWQnXSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQgPSB7XG4gICAgICAgICAgY29sdW1uTmFtZTogdGFyZ2V0Q29sdW1uTmFtZSxcbiAgICAgICAgICBlbDogZXZlbnQudGFyZ2V0LnBhcmVudE5vZGVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnN0eWxlcyA9IHtcbiAgICAgICAgICAuLi50aGlzLnN0eWxlcyxcbiAgICAgICAgICB0YWJsZUN1cnNvcjogJ2NvbC1yZXNpemUnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VNb3ZlJC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmNsZWFyTW91c2VIaWdobGlnaHRzKCkpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlVXAkKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmVzaXplSGFuZGxlRHJhZyQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gdGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQuY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICAvLyBSZWFkIHdyYXBwZXIncyBvZmZzZXQgbGVmdCByZWxhdGl2ZSB0byB0aGUgZG9jdW1lbnQuXG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsT2Zmc2V0ID0gd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXG4gICAgICAgICAgICAvLyBBZGp1c3Qgd2l0aCB0aGUgd3JhcHBlciBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxTY3JvbGxPZmZzZXQgPSB3cmFwcGVyLnNjcm9sbExlZnQgLSBob3Jpem9udGFsT2Zmc2V0O1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRlc2lyZWQgd2lkdGguXG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9XG4gICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxPZmZzZXQgKyBldmVudC5jbGllbnRYIC0gKHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkLmVsLm9mZnNldExlZnQgfHwgMCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjb2x1bW4gb2JqZWN0IHdpdGggdGhlIG5ldyBzaXplIHZhbHVlLCBlbmZvcmNlIG91ciBtaW5pbXVtIHNpemUuXG4gICAgICAgICAgICAgIGdyaWRUcmFja1NpemU6IGAke01hdGgubWF4KG1pbkNvbHVtbkdyaWRUcmFja1NpemUsIHdpZHRoKX1weGBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRm9yIHRoZSBvdGhlciBoZWFkZXJzIHdoaWNoIGRvbid0IGhhdmUgYSBzZXQgd2lkdGgsIGZpeCBpdCB0byB0aGVpciBjb21wdXRlZCB3aWR0aC5cbiAgICAgICAgICBpZiAoY29sdW1uLmdyaWRUcmFja1NpemUuc3RhcnRzV2l0aCgnbWlubWF4JykpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgLy8gaXNuJ3QgZml4ZWQgeWV0IChpdCB3b3VsZCBiZSBhIHB4IHZhbHVlKVxuICAgICAgICAgICAgICBncmlkVHJhY2tTaXplOiBgJHtfcGFyc2VJbnQodGhpcy50aEVsc1tpXS5jbGllbnRXaWR0aCl9cHhgXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIFVwZGF0ZSB0aGUgY29sdW1uIHNpemVzLlxuICAgICAgICAgKiBOb3RlOiBncmlkLXRlbXBsYXRlLWNvbHVtbnMgc2V0cyB0aGUgd2lkdGggZm9yIGFsbCBjb2x1bW5zIGluIG9uZSB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOiB3aXRob3V0KGNvbHVtbi5oZWFkZXJDU1NDbGFzc05hbWUsICdoZWFkZXItLWJlaW5nLXJlc2l6ZWQnKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICAgICAgdGFibGVDdXJzb3I6ICdhdXRvJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhck1vdXNlSGlnaGxpZ2h0cygpIHtcbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldENlbGxSZW5kZXJlclNwZWMoeyB0eXBlLCB2YWx1ZSwgcm93LCBjb2x1bW5OYW1lIH0pOiBDZWxsUmVuZGVyZXJTcGVjIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IGNvbHVtblJlbmRlcmVyID0gdGhpcy5nZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pO1xuICAgIGNvbnN0IHJlbmRlcmVyVGVtcGxhdGUgPSBnZXQoXG4gICAgICBjb2x1bW5SZW5kZXJlcixcbiAgICAgIGAke3R5cGUgPT09ICdIRUFERVInID8gJ2hlYWRlckNlbGxSZW5kZXJlckRlZicgOiAnY2VsbFJlbmRlcmVyRGVmJ30udGVtcGxhdGVgXG4gICAgKTtcblxuICAgIGNvbnN0IHsgY2VsbFJlbmRlcmVyQ29tcG9uZW50LCBoZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnQgfSA9IGNvbHVtbjtcbiAgICBjb25zdCByZW5kZXJlckNvbXBvbmVudCA9XG4gICAgICB0eXBlID09PSAnSEVBREVSJyA/IGhlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudCA6IGNlbGxSZW5kZXJlckNvbXBvbmVudDtcblxuICAgIHJldHVybiB7XG4gICAgICByZW5kZXJlcjogcmVuZGVyZXJUZW1wbGF0ZSB8fCByZW5kZXJlckNvbXBvbmVudCxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGl0ZW06IHJvdyxcbiAgICAgICAgcHJvcGVydHk6IGNvbHVtblxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtblJlbmRlcmVyKGNvbHVtbik6IENvbHVtbkRpcmVjdGl2ZSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uUmVuZGVyZXJzLnRvQXJyYXkoKS5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uLm5hbWUpO1xuICB9XG4gIEB0aHJvdHRsZSg1MDAsIHsgdHJhaWxpbmc6IHRydWUsIGxlYWRpbmc6IGZhbHNlIH0pXG4gIHByaXZhdGUgbG9hZERhdGEocmVsb2FkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGxcbiAgICB9ID0gdGhpcztcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRGF0YSh7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGwsXG4gICAgICByZWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICAgIGZpbHRlcmVkSXRlbXNDb3VudDogc3RhdHMuZmlsdGVyZWRTaXplLFxuICAgICAgYWxsSXRlbXNDb3VudDogc3RhdHMuc2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlID0gc3RhdHMubmV4dFBhZ2U7XG4gICAgY29uc3QgcGFnZUZpcnN0SXRlbUlkeCA9IChzdGF0cy5jdXJyZW50UGFnZSAtIDEpICogc3RhdHMuZmlyc3RQYWdlU2l6ZSArIDE7XG4gICAgdGhpcy5wYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgICBwYWdlRmlyc3RJdGVtSWR4LFxuICAgICAgcGFnZUxhc3RJdGVtSWR4OiBwYWdlRmlyc3RJdGVtSWR4ICsgKHN0YXRzLmN1cnJlbnRQYWdlU2l6ZSAtIDEpLFxuICAgICAgaXRlbXNUb3RhbDogc3RhdHMuZmlsdGVyZWRTaXplXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgJiZcbiAgICAgIHN0YXRzICYmXG4gICAgICBzdGF0cy5uZXh0UGFnZSAmJlxuICAgICAgKCF0aGlzLmxvYWRNb3JlQ29tcG9uZW50IHx8IHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudClcbiAgICApIHtcbiAgICAgIHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jbGVhcigpO1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID1cbiAgICAgICAgdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTG9hZE1vcmVDb21wb25lbnQpO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMb2FkTW9yZUNvbXBvbmVudDtcbiAgICAgIGluc3RhbmNlLnVzZUludGVyc2VjdGlvbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdhdXRvJyB8fCB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnaGlkZGVuJztcbiAgICAgIGluc3RhbmNlLmhpZGRlbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdoaWRkZW4nO1xuICAgICAgaW5zdGFuY2UucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogc3RhdHMubmV4dFBhZ2UsXG4gICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgIH0gYXMgUGFnaW5nPGFueT47XG4gICAgICBpbnN0YW5jZS5sb2FkTmV4dExhYmVsID0gdGhpcy5sb2FkTW9yZUl0ZW1zTGFiZWw7XG4gICAgICBpbnN0YW5jZS5sb2FkaW5nTGFiZWwgPSB0aGlzLmxvYWRpbmdJdGVtc0xhYmVsO1xuICAgICAgdGhpcy5sb2FkTW9yZUNvbXBvbmVudCA9IGluc3RhbmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkTW9yZUNvbXBvbmVudCAmJiAhc3RhdHMubmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMubG9hZE1vcmVDb21wb25lbnQucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogbnVsbFxuICAgICAgfSBhcyBQYWdpbmc8YW55PjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvVG9wKCkge1xuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,15 +1,14 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
3
  import { SmartGroupsService } from '@c8y/client';
4
- import { AlertService, DataGridComponent, gettext } from '@c8y/ngx-components';
4
+ import { DataGridComponent, gettext } from '@c8y/ngx-components';
5
5
  import { BsModalService } from 'ngx-bootstrap/modal';
6
6
  import { DeleteAssetsModalComponent } from './delete-assets-modal/delete-assets-modal.component';
7
7
  import { SubAssetsService } from './sub-assets.service';
8
8
  import { UnassignModalComponent } from './unassign-assets-modal/unassign-modal.component';
9
9
  export class SubAssetsGridComponent {
10
- constructor(subAssetsGridService, alert, bsModalService, smartGroupsService) {
10
+ constructor(subAssetsGridService, bsModalService, smartGroupsService) {
11
11
  this.subAssetsGridService = subAssetsGridService;
12
- this.alert = alert;
13
12
  this.bsModalService = bsModalService;
14
13
  this.smartGroupsService = smartGroupsService;
15
14
  this.title = gettext('Subassets');
@@ -22,6 +21,7 @@ export class SubAssetsGridComponent {
22
21
  this.onColumnsChange = new EventEmitter();
23
22
  this.itemsSelect = new EventEmitter();
24
23
  this.pagination = this.subAssetsGridService.getDefaultPagination();
24
+ this.showCounterWarning = false;
25
25
  this.bulkActionControls = this.subAssetsGridService.getDefaultBulkActionControls();
26
26
  this.displayOptions = {
27
27
  striped: true,
@@ -143,7 +143,7 @@ export class SubAssetsGridComponent {
143
143
  modalRef.content.closeSubject.subscribe((result) => __awaiter(this, void 0, void 0, function* () {
144
144
  if (result) {
145
145
  yield this.subAssetsGridService.deleteAsset(asset, parentRef, result);
146
- this.alert.warning(gettext('The counter for the total number of items might be inaccurate.'));
146
+ this.showCounterWarning = true;
147
147
  this.refresh.emit();
148
148
  }
149
149
  }));
@@ -182,12 +182,11 @@ export class SubAssetsGridComponent {
182
182
  SubAssetsGridComponent.decorators = [
183
183
  { type: Component, args: [{
184
184
  selector: 'c8y-sub-assets-grid',
185
- template: "<c8y-data-grid\n [title]=\"title\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"getInfiniteScrollMode\"\n [refresh]=\"refresh\"\n [displayOptions]=\"displayOptions\"\n (onConfigChange)=\"configChange($event)\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n class=\"d-contents\"\n>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n <div class=\"c8y-empty-state\">\n <h1 c8yIcon=\"c8y-group-add\" class=\"c8y-icon-duocolor\"></h1>\n <div>\n <p>\n <strong>{{ 'No items to display.' | translate }}</strong>\n </p>\n <small>{{ emptyStateText | translate }}</small>\n </div>\n </div>\n</c8y-data-grid>\n"
185
+ template: "<c8y-data-grid\n [title]=\"title\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"getInfiniteScrollMode\"\n [showCounterWarning]=\"showCounterWarning\"\n [refresh]=\"refresh\"\n [displayOptions]=\"displayOptions\"\n (onConfigChange)=\"configChange($event)\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n class=\"d-contents\"\n>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n <div class=\"c8y-empty-state\">\n <h1 c8yIcon=\"c8y-group-add\" class=\"c8y-icon-duocolor\"></h1>\n <div>\n <p>\n <strong>{{ 'No items to display.' | translate }}</strong>\n </p>\n <small>{{ emptyStateText | translate }}</small>\n </div>\n </div>\n</c8y-data-grid>\n"
186
186
  },] }
187
187
  ];
188
188
  SubAssetsGridComponent.ctorParameters = () => [
189
189
  { type: SubAssetsService },
190
- { type: AlertService },
191
190
  { type: BsModalService },
192
191
  { type: SmartGroupsService }
193
192
  ];
@@ -210,4 +209,4 @@ SubAssetsGridComponent.propDecorators = {
210
209
  dataGrid: [{ type: ViewChild, args: [DataGridComponent, { static: true },] }],
211
210
  _displayOptions: [{ type: Input, args: ['displayOptions',] }]
212
211
  };
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvc3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRSxPQUFPLEVBRUwsWUFBWSxFQUdaLGlCQUFpQixFQUdqQixPQUFPLEVBSVIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFLMUYsTUFBTSxPQUFPLHNCQUFzQjtJQW9GakMsWUFDUyxvQkFBc0MsRUFDckMsS0FBbUIsRUFDbkIsY0FBOEIsRUFDOUIsa0JBQXNDO1FBSHZDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBa0I7UUFDckMsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXJGdkMsVUFBSyxHQUFXLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxtQkFBYyxHQUFXLE9BQU8sQ0FDdkMsMEVBQTBFLENBQzNFLENBQUM7UUFDTyxzQkFBaUIsR0FBVyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQTRCdkQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixjQUFTLEdBQVEsRUFBRSxD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K0JBQStDO2FBQ2hEOzs7WUFMUSxnQkFBZ0I7WUFmdkIsWUFBWTtZQVlMLGNBQWM7WUFmRSxrQkFBa0I7OzswQkF5QnhDLEtBQUssU0FBQyxjQUFjO3NCQUNwQixLQUFLO29CQUNMLEtBQUs7NkJBQ0wsS0FBSztnQ0FHTCxLQUFLO3NCQUtMLEtBQUs7MEJBU0wsS0FBSyxTQUFDLFlBQVk7OEJBT2xCLEtBQUssU0FBQyxnQkFBZ0I7eUJBT3RCLEtBQUs7d0JBQ0wsS0FBSztrQ0FDTCxLQUFLLFNBQUMsb0JBQW9CO3lCQU8xQixLQUFLO3VCQUNMLEtBQUs7OEJBQ0wsTUFBTTswQkFHTixNQUFNO3VCQVFOLFNBQVMsU0FBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7OEJBc0I3QyxLQUFLLFNBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIFNtYXJ0R3JvdXBzU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBEYXRhR3JpZENvbXBvbmVudCxcbiAgRGF0YVNvdXJjZU1vZGlmaWVyLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgZ2V0dGV4dCxcbiAgUGFnaW5hdGlvbixcbiAgUm93LFxuICBTZXJ2ZXJTaWRlRGF0YVJlc3VsdFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IERldmljZUdyaWRDb2x1bW4gfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RldmljZS1ncmlkJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBEZWxldGVNb2RhbENoZWNrYm94ZXMgfSBmcm9tICcuL2RlbGV0ZS1hc3NldHMtbW9kYWwnO1xuaW1wb3J0IHsgRGVsZXRlQXNzZXRzTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2RlbGV0ZS1hc3NldHMtbW9kYWwvZGVsZXRlLWFzc2V0cy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViQXNzZXRzU2VydmljZSB9IGZyb20gJy4vc3ViLWFzc2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7IFVuYXNzaWduTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL3VuYXNzaWduLWFzc2V0cy1tb2RhbC91bmFzc2lnbi1tb2RhbC5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXN1Yi1hc3NldHMtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdWItYXNzZXRzLWdyaWQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN1YkFzc2V0c0dyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ3BhcmVudC1ncm91cCcpIHBhcmVudEdyb3VwOiBJTWFuYWdlZE9iamVjdDtcbiAgQElucHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdTdWJhc3NldHMnKTtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZVRleHQ6IHN0cmluZyA9IGdldHRleHQoXG4gICAgJ0FkZCB5b3VyIGZpcnN0IGdyb3VwIG9yIGFzc2lnbiBkZXZpY2VzIHVzaW5nIHRoZSBidXR0b25zIG9uIHRoZSB0b29sYmFyLidcbiAgKTtcbiAgQElucHV0KCkgbG9hZGluZ0l0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWRpbmcgYXNzZXRz4oCmJyk7XG5cbiAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cbiAgQElucHV0KCkgc2V0IGNvbHVtbnModmFsdWU6IERldmljZUdyaWRDb2x1bW5bXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0VXNlckNvbmZpZ3VyZWRDb2x1bW5zKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0VXNlckNvbmZpZ3VyZWRDb2x1bW5zKFxuICAgICAgICB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmdldERlZmF1bHRDb2x1bW5zKClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgncGFnaW5hdGlvbicpIHNldCBfcGFnaW5hdGlvbih2YWx1ZTogUGFnaW5hdGlvbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdFBhZ2luYXRpb24oKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdhY3Rpb25Db250cm9scycpIHNldCBfYWN0aW9uQ29udHJvbHModmFsdWU6IEFjdGlvbkNvbnRyb2xbXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBiYXNlUXVlcnk6IGFueSA9IHt9O1xuICBASW5wdXQoJ2J1bGtBY3Rpb25Db250cm9scycpIHNldCBfYnVsa0FjdGlvbkNvbnRyb2xzKHZhbHVlOiBCdWxrQWN0aW9uQ29udHJvbFtdKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBmaWx0ZXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc29ydGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBAT3V0cHV0KCkgb25Db2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGV2aWNlR3JpZENvbHVtbltdPiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgRGV2aWNlR3JpZENvbHVtbltdXG4gID4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zU2VsZWN0OiBFdmVudEVtaXR0ZXI8c3RyaW5nW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0UGFnaW5hdGlvbigpO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdO1xuICBidWxrQWN0aW9uQ29udHJvbHM6IEJ1bGtBY3Rpb25Db250cm9sW10gPVxuICAgIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpO1xuICBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrOiBhbnk7XG5cbiAgQFZpZXdDaGlsZChEYXRhR3JpZENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgZGF0YUdyaWQ6IERhdGFHcmlkQ29tcG9uZW50O1xuXG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZVxuICB9O1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IERldmljZUdyaWRDb2x1bW5bXTtcblxuICBnZXQgaXNSb290R3JvdXAoKSB7XG4gICAgcmV0dXJuICF0aGlzLnBhcmVudEdyb3VwO1xuICB9XG5cbiAgZ2V0IGdldEluZmluaXRlU2Nyb2xsTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1Jvb3RHcm91cCAmJiB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmlzVXNpbmdJbnZlbnRvcnlSb2xlcygpXG4gICAgICA/ICdhdXRvJ1xuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBASW5wdXQoJ2Rpc3BsYXlPcHRpb25zJylcbiAgc2V0IF9kaXNwbGF5T3B0aW9ucyhkaXNwbGF5T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGxheU9wdGlvbnMgPSB7IC4uLnRoaXMuZGlzcGxheU9wdGlvbnMsIC4uLmRpc3BsYXlPcHRpb25zIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3ViQXNzZXRzR3JpZFNlcnZpY2U6IFN1YkFzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc21hcnRHcm91cHNTZXJ2aWNlOiBTbWFydEdyb3Vwc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID0gdGhpcy5vbkRhdGFTb3VyY2VNb2RpZmllci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0Q29sdW1ucyh0aGlzLmZpbHRlcmFibGUsIHRoaXMuc29ydGFibGUpO1xuICAgIGlmICghdGhpcy5maWx0ZXJhYmxlIHx8ICF0aGlzLnNvcnRhYmxlKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBjb2x1bW4uZmlsdGVyYWJsZSA9IHRoaXMuZmlsdGVyYWJsZTtcbiAgICAgICAgY29sdW1uLnNvcnRhYmxlID0gdGhpcy5zb3J0YWJsZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldEFjdGlvbkNvbnRyb2xzKCk7XG4gIH1cblxuICBhc3luYyBzZXRBY3Rpb25Db250cm9scygpIHtcbiAgICBjb25zdCBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW107XG4gICAgY29uc3QgeyBkYXRhOiBpc01pY3Jvc2VydmljZUluc3RhbGxlZCB9ID1cbiAgICAgIGF3YWl0IHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cHNWMk1pY3Jvc2VydmljZUluc3RhbGxlZCgpO1xuXG4gICAgY29uc3QgZGVsZXRlQWN0aW9uOiBBY3Rpb25Db250cm9sID0ge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgY2FsbGJhY2s6IChhc3NldDogUm93KSA9PiB0aGlzLm9uRGVsZXRlQXNzZXQoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QsIHRoaXMucGFyZW50R3JvdXApLFxuICAgICAgc2hvd0lmOiAoYXNzZXQ6IFJvdykgPT4ge1xuICAgICAgICBpZiAodGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwVjIoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QpKSB7XG4gICAgICAgICAgcmV0dXJuIGlzTWljcm9zZXJ2aWNlSW5zdGFsbGVkID8gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5jYW5EZWxldGVTbWFydEdyb3VwKCkgOiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuY2FuRGVsZXRlU21hcnRHcm91cCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFjdGlvbkNvbnRyb2xzLnB1c2goZGVsZXRlQWN0aW9uKTtcblxuICAgIGNvbnN0IHVuYXNzaWduQWN0aW9uOiBBY3Rpb25Db250cm9sID0ge1xuICAgICAgdHlwZTogJ1VOQVNTSUdOJyxcbiAgICAgIGljb246ICd1bmxpbmsnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnVW5hc3NpZ24nKSxcbiAgICAgIGNhbGxiYWNrOiAoYXNzZXQ6IFJvdykgPT4gdGhpcy5vblVuYXNzaWduQXNzZXQoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QsIHRoaXMucGFyZW50R3JvdXApLFxuICAgICAgc2hvd0lmOiAoYXNzZXQ6IFJvdykgPT5cbiAgICAgICAgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5pc0RldmljZShhc3NldCBhcyBJTWFuYWdlZE9iamVjdCkgJiZcbiAgICAgICAgIXRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuaXNTbWFydEdyb3VwKHRoaXMucGFyZW50R3JvdXAgYXMgSU1hbmFnZWRPYmplY3QpXG4gICAgfTtcblxuICAgIGFjdGlvbkNvbnRyb2xzLnB1c2godW5hc3NpZ25BY3Rpb24pO1xuXG4gICAgaWYgKCF0aGlzLmFjdGlvbkNvbnRyb2xzKSB7XG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gYWN0aW9uQ29udHJvbHM7XG4gICAgfVxuICB9XG5cbiAgb25VbmFzc2lnbkFzc2V0KGFzc2V0OiBJTWFuYWdlZE9iamVjdCwgcGFyZW50UmVmOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGFzc2V0XG4gICAgfTtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhVbmFzc2lnbk1vZGFsQ29tcG9uZW50LCB7IGluaXRpYWxTdGF0ZSB9KTtcblxuICAgIG1vZGFsUmVmLmNvbnRlbnQuY2xvc2VTdWJqZWN0LnN1YnNjcmliZShhc3luYyAocmVzdWx0OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UudW5hc3NpZ25Bc3NldChhc3NldCwgcGFyZW50UmVmKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uRGVsZXRlQXNzZXQoYXNzZXQ6IElNYW5hZ2VkT2JqZWN0LCBwYXJlbnRSZWY6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgc2hvd1dpdGhEZXZpY2VVc2VyQ2hlY2tib3g6IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2Uuc2hvdWxkU2hvd1dpdGhEZXZpY2VVc2VyQ2hlY2tib3goYXNzZXQpLFxuICAgICAgYXNzZXQsXG4gICAgICBzaG93V2l0aENhc2NhZGVDaGVja2JveDpcbiAgICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cChhc3NldCkgJiZcbiAgICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGFzc2V0KVxuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhEZWxldGVBc3NldHNNb2RhbENvbXBvbmVudCwgeyBpbml0aWFsU3RhdGUgfSk7XG5cbiAgICBtb2RhbFJlZi5jb250ZW50LmNsb3NlU3ViamVjdC5zdWJzY3JpYmUoYXN5bmMgKHJlc3VsdDogRGVsZXRlTW9kYWxDaGVja2JveGVzKSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZGVsZXRlQXNzZXQoYXNzZXQsIHBhcmVudFJlZiwgcmVzdWx0KTtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKFxuICAgICAgICAgIGdldHRleHQoJ1RoZSBjb3VudGVyIGZvciB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIG1pZ2h0IGJlIGluYWNjdXJhdGUuJylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5wYXJlbnRHcm91cCAmJiAhY2hhbmdlcy5wYXJlbnRHcm91cC5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5kYXRhR3JpZC5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5TmFtZShfaW5kZXgsIGNvbHVtbjogRGV2aWNlR3JpZENvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICB9XG5cbiAgYXN5bmMgb25EYXRhU291cmNlTW9kaWZpZXIoXG4gICAgZGF0YVNvdXJjZU1vZGlmaWVyOiBEYXRhU291cmNlTW9kaWZpZXJcbiAgKTogUHJvbWlzZTxTZXJ2ZXJTaWRlRGF0YVJlc3VsdD4ge1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgbGV0IGNvdW50ZXJzO1xuXG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGF0YShcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMsXG4gICAgICAgIGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLFxuICAgICAgICB0aGlzLnBhcmVudEdyb3VwLFxuICAgICAgICB0aGlzLmJhc2VRdWVyeVxuICAgICAgKVxuICAgICk7XG5cbiAgICBwcm9taXNlcy5wdXNoKHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0VG90YWwodGhpcy5wYXJlbnRHcm91cCwgdGhpcy5iYXNlUXVlcnkpKTtcbiAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXRDb3VudChcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMsXG4gICAgICAgIGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLFxuICAgICAgICB0aGlzLnBhcmVudEdyb3VwLFxuICAgICAgICB0aGlzLmJhc2VRdWVyeVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBbZGF0YVJlc3BvbnNlLCBzaXplLCBmaWx0ZXJlZFNpemVdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIGlmICghY291bnRlcnMpIHtcbiAgICAgIGNvdW50ZXJzID0ge1xuICAgICAgICBzaXplLFxuICAgICAgICBmaWx0ZXJlZFNpemVcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlLmVtaXQoZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlczogZGF0YVJlc3BvbnNlLnJlcyxcbiAgICAgIGRhdGE6IGRhdGFSZXNwb25zZS5kYXRhLFxuICAgICAgcGFnaW5nOiBkYXRhUmVzcG9uc2UucGFnaW5nLFxuICAgICAgLi4uY291bnRlcnNcbiAgICB9O1xuICB9XG5cbiAgY29uZmlnQ2hhbmdlKGNvbmZpZykge1xuICAgIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2Uuc2F2ZUNvbmZpZyhjb25maWcpO1xuICB9XG59XG4iXX0=
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvc3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRSxPQUFPLEVBSUwsaUJBQWlCLEVBR2pCLE9BQU8sRUFJUixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUsxRixNQUFNLE9BQU8sc0JBQXNCO0lBcUZqQyxZQUNTLG9CQUFzQyxFQUNyQyxjQUE4QixFQUM5QixrQkFBc0M7UUFGdkMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFrQjtRQUNyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXJGdkMsVUFBSyxHQUFXLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxtQkFBYyxHQUFXLE9BQU8sQ0FDdkMsMEVBQTBFLENBQzNFLENBQUM7UUFDTyxzQkFBaUIsR0FBVyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQTRCdkQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixjQUFTLEdBQVEsRUFBRSxDQUFDO1FBUXBCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0IsYUFBUSxHQUFZLElB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OzBCQXdCeEMsS0FBSyxTQUFDLGNBQWM7c0JBQ3BCLEtBQUs7b0JBQ0wsS0FBSzs2QkFDTCxLQUFLO2dDQUdMLEtBQUs7c0JBS0wsS0FBSzswQkFTTCxLQUFLLFNBQUMsWUFBWTs4QkFPbEIsS0FBSyxTQUFDLGdCQUFnQjt5QkFPdEIsS0FBSzt3QkFDTCxLQUFLO2tDQUNMLEtBQUssU0FBQyxvQkFBb0I7eUJBTzFCLEtBQUs7dUJBQ0wsS0FBSzs4QkFDTCxNQUFNOzBCQUdOLE1BQU07dUJBU04sU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs4QkFzQjdDLEtBQUssU0FBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgU21hcnRHcm91cHNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBEYXRhR3JpZENvbXBvbmVudCxcbiAgRGF0YVNvdXJjZU1vZGlmaWVyLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgZ2V0dGV4dCxcbiAgUGFnaW5hdGlvbixcbiAgUm93LFxuICBTZXJ2ZXJTaWRlRGF0YVJlc3VsdFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IERldmljZUdyaWRDb2x1bW4gfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RldmljZS1ncmlkJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBEZWxldGVNb2RhbENoZWNrYm94ZXMgfSBmcm9tICcuL2RlbGV0ZS1hc3NldHMtbW9kYWwnO1xuaW1wb3J0IHsgRGVsZXRlQXNzZXRzTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2RlbGV0ZS1hc3NldHMtbW9kYWwvZGVsZXRlLWFzc2V0cy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViQXNzZXRzU2VydmljZSB9IGZyb20gJy4vc3ViLWFzc2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7IFVuYXNzaWduTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL3VuYXNzaWduLWFzc2V0cy1tb2RhbC91bmFzc2lnbi1tb2RhbC5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXN1Yi1hc3NldHMtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdWItYXNzZXRzLWdyaWQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN1YkFzc2V0c0dyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ3BhcmVudC1ncm91cCcpIHBhcmVudEdyb3VwOiBJTWFuYWdlZE9iamVjdDtcbiAgQElucHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdTdWJhc3NldHMnKTtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZVRleHQ6IHN0cmluZyA9IGdldHRleHQoXG4gICAgJ0FkZCB5b3VyIGZpcnN0IGdyb3VwIG9yIGFzc2lnbiBkZXZpY2VzIHVzaW5nIHRoZSBidXR0b25zIG9uIHRoZSB0b29sYmFyLidcbiAgKTtcbiAgQElucHV0KCkgbG9hZGluZ0l0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWRpbmcgYXNzZXRz4oCmJyk7XG5cbiAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cbiAgQElucHV0KCkgc2V0IGNvbHVtbnModmFsdWU6IERldmljZUdyaWRDb2x1bW5bXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0VXNlckNvbmZpZ3VyZWRDb2x1bW5zKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0VXNlckNvbmZpZ3VyZWRDb2x1bW5zKFxuICAgICAgICB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmdldERlZmF1bHRDb2x1bW5zKClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgncGFnaW5hdGlvbicpIHNldCBfcGFnaW5hdGlvbih2YWx1ZTogUGFnaW5hdGlvbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdFBhZ2luYXRpb24oKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdhY3Rpb25Db250cm9scycpIHNldCBfYWN0aW9uQ29udHJvbHModmFsdWU6IEFjdGlvbkNvbnRyb2xbXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBiYXNlUXVlcnk6IGFueSA9IHt9O1xuICBASW5wdXQoJ2J1bGtBY3Rpb25Db250cm9scycpIHNldCBfYnVsa0FjdGlvbkNvbnRyb2xzKHZhbHVlOiBCdWxrQWN0aW9uQ29udHJvbFtdKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBmaWx0ZXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc29ydGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBAT3V0cHV0KCkgb25Db2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGV2aWNlR3JpZENvbHVtbltdPiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgRGV2aWNlR3JpZENvbHVtbltdXG4gID4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zU2VsZWN0OiBFdmVudEVtaXR0ZXI8c3RyaW5nW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0UGFnaW5hdGlvbigpO1xuICBzaG93Q291bnRlcldhcm5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXTtcbiAgYnVsa0FjdGlvbkNvbnRyb2xzOiBCdWxrQWN0aW9uQ29udHJvbFtdID1cbiAgICB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmdldERlZmF1bHRCdWxrQWN0aW9uQ29udHJvbHMoKTtcbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogYW55O1xuXG4gIEBWaWV3Q2hpbGQoRGF0YUdyaWRDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGRhdGFHcmlkOiBEYXRhR3JpZENvbXBvbmVudDtcblxuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnMgPSB7XG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWVcbiAgfTtcblxuICBwcml2YXRlIF9jb2x1bW5zOiBEZXZpY2VHcmlkQ29sdW1uW107XG5cbiAgZ2V0IGlzUm9vdEdyb3VwKCkge1xuICAgIHJldHVybiAhdGhpcy5wYXJlbnRHcm91cDtcbiAgfVxuXG4gIGdldCBnZXRJbmZpbml0ZVNjcm9sbE1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb290R3JvdXAgJiYgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5pc1VzaW5nSW52ZW50b3J5Um9sZXMoKVxuICAgICAgPyAnYXV0bydcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgQElucHV0KCdkaXNwbGF5T3B0aW9ucycpXG4gIHNldCBfZGlzcGxheU9wdGlvbnMoZGlzcGxheU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BsYXlPcHRpb25zID0geyAuLi50aGlzLmRpc3BsYXlPcHRpb25zLCAuLi5kaXNwbGF5T3B0aW9ucyB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN1YkFzc2V0c0dyaWRTZXJ2aWNlOiBTdWJBc3NldHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc21hcnRHcm91cHNTZXJ2aWNlOiBTbWFydEdyb3Vwc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID0gdGhpcy5vbkRhdGFTb3VyY2VNb2RpZmllci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0Q29sdW1ucyh0aGlzLmZpbHRlcmFibGUsIHRoaXMuc29ydGFibGUpO1xuICAgIGlmICghdGhpcy5maWx0ZXJhYmxlIHx8ICF0aGlzLnNvcnRhYmxlKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBjb2x1bW4uZmlsdGVyYWJsZSA9IHRoaXMuZmlsdGVyYWJsZTtcbiAgICAgICAgY29sdW1uLnNvcnRhYmxlID0gdGhpcy5zb3J0YWJsZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldEFjdGlvbkNvbnRyb2xzKCk7XG4gIH1cblxuICBhc3luYyBzZXRBY3Rpb25Db250cm9scygpIHtcbiAgICBjb25zdCBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW107XG4gICAgY29uc3QgeyBkYXRhOiBpc01pY3Jvc2VydmljZUluc3RhbGxlZCB9ID1cbiAgICAgIGF3YWl0IHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cHNWMk1pY3Jvc2VydmljZUluc3RhbGxlZCgpO1xuXG4gICAgY29uc3QgZGVsZXRlQWN0aW9uOiBBY3Rpb25Db250cm9sID0ge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgY2FsbGJhY2s6IChhc3NldDogUm93KSA9PiB0aGlzLm9uRGVsZXRlQXNzZXQoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QsIHRoaXMucGFyZW50R3JvdXApLFxuICAgICAgc2hvd0lmOiAoYXNzZXQ6IFJvdykgPT4ge1xuICAgICAgICBpZiAodGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwVjIoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QpKSB7XG4gICAgICAgICAgcmV0dXJuIGlzTWljcm9zZXJ2aWNlSW5zdGFsbGVkID8gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5jYW5EZWxldGVTbWFydEdyb3VwKCkgOiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuY2FuRGVsZXRlU21hcnRHcm91cCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFjdGlvbkNvbnRyb2xzLnB1c2goZGVsZXRlQWN0aW9uKTtcblxuICAgIGNvbnN0IHVuYXNzaWduQWN0aW9uOiBBY3Rpb25Db250cm9sID0ge1xuICAgICAgdHlwZTogJ1VOQVNTSUdOJyxcbiAgICAgIGljb246ICd1bmxpbmsnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnVW5hc3NpZ24nKSxcbiAgICAgIGNhbGxiYWNrOiAoYXNzZXQ6IFJvdykgPT4gdGhpcy5vblVuYXNzaWduQXNzZXQoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QsIHRoaXMucGFyZW50R3JvdXApLFxuICAgICAgc2hvd0lmOiAoYXNzZXQ6IFJvdykgPT5cbiAgICAgICAgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5pc0RldmljZShhc3NldCBhcyBJTWFuYWdlZE9iamVjdCkgJiZcbiAgICAgICAgIXRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuaXNTbWFydEdyb3VwKHRoaXMucGFyZW50R3JvdXAgYXMgSU1hbmFnZWRPYmplY3QpXG4gICAgfTtcblxuICAgIGFjdGlvbkNvbnRyb2xzLnB1c2godW5hc3NpZ25BY3Rpb24pO1xuXG4gICAgaWYgKCF0aGlzLmFjdGlvbkNvbnRyb2xzKSB7XG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gYWN0aW9uQ29udHJvbHM7XG4gICAgfVxuICB9XG5cbiAgb25VbmFzc2lnbkFzc2V0KGFzc2V0OiBJTWFuYWdlZE9iamVjdCwgcGFyZW50UmVmOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGFzc2V0XG4gICAgfTtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhVbmFzc2lnbk1vZGFsQ29tcG9uZW50LCB7IGluaXRpYWxTdGF0ZSB9KTtcblxuICAgIG1vZGFsUmVmLmNvbnRlbnQuY2xvc2VTdWJqZWN0LnN1YnNjcmliZShhc3luYyAocmVzdWx0OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UudW5hc3NpZ25Bc3NldChhc3NldCwgcGFyZW50UmVmKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uRGVsZXRlQXNzZXQoYXNzZXQ6IElNYW5hZ2VkT2JqZWN0LCBwYXJlbnRSZWY6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgc2hvd1dpdGhEZXZpY2VVc2VyQ2hlY2tib3g6IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2Uuc2hvdWxkU2hvd1dpdGhEZXZpY2VVc2VyQ2hlY2tib3goYXNzZXQpLFxuICAgICAgYXNzZXQsXG4gICAgICBzaG93V2l0aENhc2NhZGVDaGVja2JveDpcbiAgICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cChhc3NldCkgJiZcbiAgICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGFzc2V0KVxuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhEZWxldGVBc3NldHNNb2RhbENvbXBvbmVudCwgeyBpbml0aWFsU3RhdGUgfSk7XG5cbiAgICBtb2RhbFJlZi5jb250ZW50LmNsb3NlU3ViamVjdC5zdWJzY3JpYmUoYXN5bmMgKHJlc3VsdDogRGVsZXRlTW9kYWxDaGVja2JveGVzKSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZGVsZXRlQXNzZXQoYXNzZXQsIHBhcmVudFJlZiwgcmVzdWx0KTtcbiAgICAgICAgdGhpcy5zaG93Q291bnRlcldhcm5pbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlZnJlc2guZW1pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnBhcmVudEdyb3VwICYmICFjaGFuZ2VzLnBhcmVudEdyb3VwLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmRhdGFHcmlkLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlOYW1lKF9pbmRleCwgY29sdW1uOiBEZXZpY2VHcmlkQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIH1cblxuICBhc3luYyBvbkRhdGFTb3VyY2VNb2RpZmllcihcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBsZXQgY291bnRlcnM7XG5cbiAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREYXRhKFxuICAgICAgICBkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyxcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb24sXG4gICAgICAgIHRoaXMucGFyZW50R3JvdXAsXG4gICAgICAgIHRoaXMuYmFzZVF1ZXJ5XG4gICAgICApXG4gICAgKTtcblxuICAgIHByb21pc2VzLnB1c2godGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXRUb3RhbCh0aGlzLnBhcmVudEdyb3VwLCB0aGlzLmJhc2VRdWVyeSkpO1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmdldENvdW50KFxuICAgICAgICBkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyxcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb24sXG4gICAgICAgIHRoaXMucGFyZW50R3JvdXAsXG4gICAgICAgIHRoaXMuYmFzZVF1ZXJ5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IFtkYXRhUmVzcG9uc2UsIHNpemUsIGZpbHRlcmVkU2l6ZV0gPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgaWYgKCFjb3VudGVycykge1xuICAgICAgY291bnRlcnMgPSB7XG4gICAgICAgIHNpemUsXG4gICAgICAgIGZpbHRlcmVkU2l6ZVxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2UuZW1pdChkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzOiBkYXRhUmVzcG9uc2UucmVzLFxuICAgICAgZGF0YTogZGF0YVJlc3BvbnNlLmRhdGEsXG4gICAgICBwYWdpbmc6IGRhdGFSZXNwb25zZS5wYWdpbmcsXG4gICAgICAuLi5jb3VudGVyc1xuICAgIH07XG4gIH1cblxuICBjb25maWdDaGFuZ2UoY29uZmlnKSB7XG4gICAgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5zYXZlQ29uZmlnKGNvbmZpZyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,12 +1,16 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BridgeService } from './bridge.service';
3
+ import { switchMap } from 'rxjs/operators';
3
4
  export class Ng1ActionBarFactoryService {
4
5
  constructor(bridge) {
5
6
  this.bridge = bridge;
6
7
  this.routeChanges$ = bridge.$routeChanges;
8
+ this.$ng1RouteChangeSuccess = bridge.$ng1RouteChangeSuccess;
7
9
  }
8
10
  get() {
9
- return this.bridge.getActionBarItems();
11
+ return this.routeChanges$.pipe(switchMap(e => {
12
+ return this.bridge.getActionBarItems();
13
+ }));
10
14
  }
11
15
  }
12
16
  Ng1ActionBarFactoryService.decorators = [
@@ -15,4 +19,4 @@ Ng1ActionBarFactoryService.decorators = [
15
19
  Ng1ActionBarFactoryService.ctorParameters = () => [
16
20
  { type: BridgeService }
17
21
  ];
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJhci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXBncmFkZS9hY3Rpb24tYmFyLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJakQsTUFBTSxPQUFPLDBCQUEwQjtJQUVyQyxZQUNVLE1BQXFCO1FBQXJCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFFN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQzVDLENBQUM7SUFFRCxHQUFHO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDekMsQ0FBQzs7O1lBWEYsVUFBVTs7O1lBSEYsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbkJhckZhY3RvcnksIEFjdGlvbkJhckl0ZW0gfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJyaWRnZVNlcnZpY2UgfSBmcm9tICcuL2JyaWRnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nMUFjdGlvbkJhckZhY3RvcnlTZXJ2aWNlIGltcGxlbWVudHMgQWN0aW9uQmFyRmFjdG9yeSB7XG4gIHJvdXRlQ2hhbmdlcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBicmlkZ2U6IEJyaWRnZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5yb3V0ZUNoYW5nZXMkID0gYnJpZGdlLiRyb3V0ZUNoYW5nZXM7XG4gIH1cblxuICBnZXQoKTogT2JzZXJ2YWJsZTxBY3Rpb25CYXJJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuYnJpZGdlLmdldEFjdGlvbkJhckl0ZW1zKCk7XG4gIH1cbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJhci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXBncmFkZS9hY3Rpb24tYmFyLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE1BQU0sT0FBTywwQkFBMEI7SUFHckMsWUFBb0IsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN2QyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDMUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztJQUM5RCxDQUFDO0lBRUQsR0FBRztRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzVCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzs7WUFmRixVQUFVOzs7WUFKRixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uQmFyRmFjdG9yeSwgQWN0aW9uQmFySXRlbSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQnJpZGdlU2VydmljZSB9IGZyb20gJy4vYnJpZGdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmcxQWN0aW9uQmFyRmFjdG9yeVNlcnZpY2UgaW1wbGVtZW50cyBBY3Rpb25CYXJGYWN0b3J5IHtcbiAgcm91dGVDaGFuZ2VzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICAkbmcxUm91dGVDaGFuZ2VTdWNjZXNzOiBPYnNlcnZhYmxlPGFueT47XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnJpZGdlOiBCcmlkZ2VTZXJ2aWNlKSB7XG4gICAgdGhpcy5yb3V0ZUNoYW5nZXMkID0gYnJpZGdlLiRyb3V0ZUNoYW5nZXM7XG4gICAgdGhpcy4kbmcxUm91dGVDaGFuZ2VTdWNjZXNzID0gYnJpZGdlLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3M7XG4gIH1cblxuICBnZXQoKTogT2JzZXJ2YWJsZTxBY3Rpb25CYXJJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVDaGFuZ2VzJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGUgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5icmlkZ2UuZ2V0QWN0aW9uQmFySXRlbXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19