@smartbit4all/ng-client 3.2.32 → 3.2.33

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 (40) hide show
  1. package/esm2020/lib/smart-grid/api/grid-api/api/api.mjs +1 -1
  2. package/esm2020/lib/smart-grid/api/grid-api/api/grid.service.mjs +1 -1
  3. package/esm2020/lib/smart-grid/api/grid-api/api.module.mjs +1 -1
  4. package/esm2020/lib/smart-grid/api/grid-api/configuration.mjs +1 -1
  5. package/esm2020/lib/smart-grid/api/grid-api/encoder.mjs +1 -1
  6. package/esm2020/lib/smart-grid/api/grid-api/index.mjs +1 -1
  7. package/esm2020/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +1 -1
  8. package/esm2020/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
  9. package/esm2020/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +1 -1
  10. package/esm2020/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
  11. package/esm2020/lib/smart-grid/api/grid-api/model/gridPage.mjs +1 -1
  12. package/esm2020/lib/smart-grid/api/grid-api/model/gridRow.mjs +1 -1
  13. package/esm2020/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +1 -1
  14. package/esm2020/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +1 -1
  15. package/esm2020/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +1 -1
  16. package/esm2020/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
  17. package/esm2020/lib/smart-grid/api/grid-api/model/gridView.mjs +1 -1
  18. package/esm2020/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +1 -1
  19. package/esm2020/lib/smart-grid/api/grid-api/model/models.mjs +1 -1
  20. package/esm2020/lib/smart-grid/api/grid-api/param.mjs +1 -1
  21. package/esm2020/lib/smart-grid/api/grid-api/variables.mjs +1 -1
  22. package/esm2020/lib/smart-table/tables/material-table/material-table.component.mjs +3 -3
  23. package/esm2020/lib/smart-table/tables/table.mjs +7 -3
  24. package/esm2020/lib/view-context/api/model/imageResource.mjs +1 -1
  25. package/esm2020/lib/view-context/api/model/uiActionButtonType.mjs +3 -2
  26. package/esm2020/lib/view-context/api/model/view.mjs +1 -1
  27. package/fesm2015/smartbit4all-ng-client.mjs +10 -5
  28. package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
  29. package/fesm2020/smartbit4all-ng-client.mjs +10 -5
  30. package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
  31. package/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.d.ts +8 -0
  32. package/lib/smart-grid/api/grid-api/model/gridRow.d.ts +1 -1
  33. package/lib/smart-table/tables/table.d.ts +3 -1
  34. package/lib/view-context/api/model/imageResource.d.ts +3 -0
  35. package/lib/view-context/api/model/uiActionButtonType.d.ts +2 -1
  36. package/lib/view-context/api/model/view.d.ts +3 -0
  37. package/package.json +1 -1
  38. package/smartbit4all-ng-client-3.2.33.tgz +0 -0
  39. package/src/lib/smart-grid/api/grid-api/README.md +226 -226
  40. package/smartbit4all-ng-client-3.2.32.tgz +0 -0
@@ -18,7 +18,7 @@ export class MaterialTableComponent extends Table {
18
18
  }
19
19
  }
20
20
  MaterialTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MaterialTableComponent, deps: [{ token: i1.ComponentFactoryService }], target: i0.ɵɵFactoryTarget.Component });
21
- MaterialTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: MaterialTableComponent, selector: "lib-material-table", usesInheritance: true, ngImport: i0, template: "<table\r\n #myTable\r\n mat-table\r\n [dataSource]=\"smartTable.tableRows\"\r\n class=\"full-width\"\r\n multiTemplateDataRows\r\n>\r\n <!-- Column Descriptor -->\r\n <ng-container\r\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\r\n matColumnDef=\"{{ header }}\"\r\n >\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div\r\n *ngIf=\"header === 'icon' || header === 'img' || header === 'options' || header === 'button'\"\r\n ></div>\r\n <div *ngIf=\"header === 'select'\">\r\n <mat-checkbox\r\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\r\n (change)=\"$event ? toggleAllRows() : null\"\r\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\r\n [aria-label]=\"checkboxLabel()\"\r\n >\r\n </mat-checkbox>\r\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\r\n {{ smartTable.customTableHeaders[i] }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'options' &&\r\n header !== 'button' &&\r\n header !== 'select' &&\r\n header !== 'expand' &&\r\n header !== 'actions'\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\r\n <ng-template #sortable>\r\n <button\r\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\r\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\r\n mat-button\r\n class=\"sortableHeaderButton\"\r\n >\r\n {{ smartTable.customTableHeaders[i] }}\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"getSortIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortIcon(header)!\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"hasSortNumIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortNumIcon(header)\"\r\n ></smart-icon>\r\n </button>\r\n </ng-template>\r\n <ng-template #notSortable>\r\n {{ smartTable.customTableHeaders[i] }}\r\n </ng-template>\r\n </div>\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\r\n <mat-checkbox\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\r\n !isDisabled(element)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n $event\r\n ? setSelection(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n : null\r\n \"\r\n [disabled]=\"isDisabled(element)\"\r\n [checked]=\"\r\n smartTable.selection!.isSelected(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n [aria-label]=\"\r\n checkboxLabel(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n >\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\r\n {{\r\n getValue(element, header)\r\n | smartDateTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\r\n {{\r\n getValue(element, header)\r\n | smartDate : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\r\n {{\r\n getValue(element, header)\r\n | smartTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\r\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\r\n \"\r\n >\r\n <smart-icon\r\n [icon]=\"getIcon(getValue(element, header), i)!\"\r\n [color]=\"getColor(getValue(element, header), i)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"isImageResource(element, header)\"\r\n [ngStyle]=\"getImageResourceStyle(element, header)\"\r\n >\r\n <smart-icon\r\n [icon]=\"getImageResourceIcon(element, header)\"\r\n [color]=\"getImageResourceColor(element, header)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\r\n class=\"smart-table-buttons-col\"\r\n >\r\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\r\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.ICON\"\r\n mat-icon-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\r\n mat-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\r\n mat-raised-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <div *ngSwitchCase=\"smartTableButtonType.MENU\">\r\n <button\r\n *ngIf=\"showMenuButton(element, button)\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div *ngIf=\"button.menuItemButtons\">\r\n <button\r\n *ngFor=\"let btn of button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\r\n mat-menu-item\r\n >\r\n <smart-icon *ngIf=\"btn.icon\" [icon]=\"btn.icon\"></smart-icon>\r\n {{ btn.label }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\r\n <div *ngFor=\"let btn of getValue(element, button.menuItemButtonsPropertyName)\">\r\n <button\r\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\r\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\r\n mat-menu-item\r\n >\r\n {{ button.translator!(btn) }}\r\n </button>\r\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\r\n <smart-icon\r\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\r\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\r\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\r\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].translator !== undefined\r\n \"\r\n >\r\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\r\n </div>\r\n <button\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\r\n \"\r\n mat-icon-button\r\n aria-label=\"expand row\"\r\n (click)=\"onToggle(element, $event)\"\r\n >\r\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\r\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\r\n </button>\r\n <div\r\n *ngIf=\"\r\n !smartTable.customSmartTableHeaders ||\r\n (smartTable.customSmartTableHeaders &&\r\n !smartTable.customSmartTableHeaders[i].properties &&\r\n !smartTable.customSmartTableHeaders[i].icon &&\r\n !smartTable.customSmartTableHeaders[i].buttons &&\r\n !smartTable.customSmartTableHeaders[i].translator &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\r\n \"\r\n >\r\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\r\n <img\r\n *ngIf=\"header === 'img'\"\r\n [src]=\"getValue(element, header)\"\r\n alt=\"\"\r\n class=\"smarttableImg\"\r\n />\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'option' &&\r\n header !== 'button' &&\r\n !isImageResource(element, header)\r\n \"\r\n [innerHtml]=\"getValue(element, header)\"\r\n ></div>\r\n </div>\r\n <div *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\">\r\n <lib-default-actions-popup\r\n #defaultActionMenu\r\n [buttons]=\"getDefaultActionsForRow(element)!\"\r\n [row]=\"element\"\r\n ></lib-default-actions-popup>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\r\n <div\r\n class=\"example-element-detail\"\r\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <ng-template #expandedArea></ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let element; columns: smartTable.tableHeaders\"\r\n class=\"example-element-row\"\r\n [class.example-expanded-row]=\"expandedElement === element\"\r\n [ngClass]=\"[\r\n isHighlighted(element) ? smartTable.highlightClass! : 'unselected',\r\n smartTable.hover ? 'smartTableRowHover' : '',\r\n isSelected(element) ? 'selected' : ''\r\n ]\"\r\n (click)=\"handleOnRowClick(element)\"\r\n (dblclick)=\"handleOnRowDoubleClick(element)\"\r\n ></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\r\n</table>\r\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:whitesmoke}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}\n"], components: [{ type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i7.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i8.DefaultActionsPopupComponent, selector: "lib-default-actions-popup", inputs: ["buttons", "row"] }, { type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatCellDef, selector: "[matCellDef]" }, { type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }], pipes: { "smartDateTime": i10.SmartDateTimePipe, "smartDate": i10.SmartDatePipe, "smartTime": i10.SmartTimePipe }, animations: [
21
+ MaterialTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: MaterialTableComponent, selector: "lib-material-table", usesInheritance: true, ngImport: i0, template: "<table\r\n #myTable\r\n mat-table\r\n [dataSource]=\"smartTable.tableRows\"\r\n class=\"full-width\"\r\n multiTemplateDataRows\r\n>\r\n <!-- Column Descriptor -->\r\n <ng-container\r\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\r\n matColumnDef=\"{{ header }}\"\r\n >\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div\r\n *ngIf=\"header === 'icon' || header === 'img' || header === 'options' || header === 'button'\"\r\n ></div>\r\n <div *ngIf=\"header === 'select'\">\r\n <mat-checkbox\r\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\r\n (change)=\"$event ? toggleAllRows() : null\"\r\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\r\n [aria-label]=\"checkboxLabel()\"\r\n >\r\n </mat-checkbox>\r\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\r\n {{ smartTable.customTableHeaders[i] }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'options' &&\r\n header !== 'button' &&\r\n header !== 'select' &&\r\n header !== 'expand' &&\r\n header !== 'actions'\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\r\n <ng-template #sortable>\r\n <button\r\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\r\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\r\n mat-button\r\n class=\"sortableHeaderButton\"\r\n >\r\n {{ smartTable.customTableHeaders[i] }}\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"getSortIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortIcon(header)!\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"hasSortNumIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortNumIcon(header)\"\r\n ></smart-icon>\r\n </button>\r\n </ng-template>\r\n <ng-template #notSortable>\r\n {{ smartTable.customTableHeaders[i] }}\r\n </ng-template>\r\n </div>\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\r\n <mat-checkbox\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\r\n !isDisabled(element)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n $event\r\n ? setSelection(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n : null\r\n \"\r\n [disabled]=\"isDisabled(element)\"\r\n [checked]=\"\r\n smartTable.selection!.isSelected(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n [aria-label]=\"\r\n checkboxLabel(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n >\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\r\n {{\r\n getValue(element, header)\r\n | smartDateTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\r\n {{\r\n getValue(element, header)\r\n | smartDate : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\r\n {{\r\n getValue(element, header)\r\n | smartTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\r\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\r\n \"\r\n >\r\n <smart-icon\r\n [icon]=\"getIcon(getValue(element, header), i)!\"\r\n [color]=\"getColor(getValue(element, header), i)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n </div>\r\n <div class=\"smart-table-icon-container\">\r\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\r\n <div [ngStyle]=\"getImageResourceStyle(ir)\"\r\n ><smart-icon [icon]=\"ir.identifier!\" [color]=\"ir.color!\"> </smart-icon\r\n ></div>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\r\n class=\"smart-table-buttons-col\"\r\n >\r\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\r\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.ICON\"\r\n mat-icon-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\r\n mat-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\r\n mat-raised-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <div *ngSwitchCase=\"smartTableButtonType.MENU\">\r\n <button\r\n *ngIf=\"showMenuButton(element, button)\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div *ngIf=\"button.menuItemButtons\">\r\n <button\r\n *ngFor=\"let btn of button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\r\n mat-menu-item\r\n >\r\n <smart-icon *ngIf=\"btn.icon\" [icon]=\"btn.icon\"></smart-icon>\r\n {{ btn.label }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\r\n <div *ngFor=\"let btn of getValue(element, button.menuItemButtonsPropertyName)\">\r\n <button\r\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\r\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\r\n mat-menu-item\r\n >\r\n {{ button.translator!(btn) }}\r\n </button>\r\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\r\n <smart-icon\r\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\r\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\r\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\r\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].translator !== undefined\r\n \"\r\n >\r\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\r\n </div>\r\n <button\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\r\n \"\r\n mat-icon-button\r\n aria-label=\"expand row\"\r\n (click)=\"onToggle(element, $event)\"\r\n >\r\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\r\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\r\n </button>\r\n <div\r\n *ngIf=\"\r\n !smartTable.customSmartTableHeaders ||\r\n (smartTable.customSmartTableHeaders &&\r\n !smartTable.customSmartTableHeaders[i].properties &&\r\n !smartTable.customSmartTableHeaders[i].icon &&\r\n !smartTable.customSmartTableHeaders[i].buttons &&\r\n !smartTable.customSmartTableHeaders[i].translator &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\r\n \"\r\n >\r\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\r\n <img\r\n *ngIf=\"header === 'img'\"\r\n [src]=\"getValue(element, header)\"\r\n alt=\"\"\r\n class=\"smarttableImg\"\r\n />\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'option' &&\r\n header !== 'button' &&\r\n !isImageResource(element, header)\r\n \"\r\n [innerHtml]=\"getValue(element, header)\"\r\n ></div>\r\n </div>\r\n <div *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\">\r\n <lib-default-actions-popup\r\n #defaultActionMenu\r\n [buttons]=\"getDefaultActionsForRow(element)!\"\r\n [row]=\"element\"\r\n ></lib-default-actions-popup>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\r\n <div\r\n class=\"example-element-detail\"\r\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <ng-template #expandedArea></ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let element; columns: smartTable.tableHeaders\"\r\n class=\"example-element-row\"\r\n [class.example-expanded-row]=\"expandedElement === element\"\r\n [ngClass]=\"[\r\n isHighlighted(element) ? smartTable.highlightClass! : 'unselected',\r\n smartTable.hover ? 'smartTableRowHover' : '',\r\n isSelected(element) ? 'selected' : ''\r\n ]\"\r\n (click)=\"handleOnRowClick(element)\"\r\n (dblclick)=\"handleOnRowDoubleClick(element)\"\r\n ></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\r\n</table>\r\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:whitesmoke}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row}\n"], components: [{ type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i7.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i8.DefaultActionsPopupComponent, selector: "lib-default-actions-popup", inputs: ["buttons", "row"] }, { type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatCellDef, selector: "[matCellDef]" }, { type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }], pipes: { "smartDateTime": i10.SmartDateTimePipe, "smartDate": i10.SmartDatePipe, "smartTime": i10.SmartTimePipe }, animations: [
22
22
  trigger('detailExpand', [
23
23
  state('collapsed', style({ height: '0px', minHeight: '0' })),
24
24
  state('expanded', style({ height: '*' })),
@@ -33,6 +33,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
33
33
  state('expanded', style({ height: '*' })),
34
34
  transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
35
35
  ]),
36
- ], template: "<table\r\n #myTable\r\n mat-table\r\n [dataSource]=\"smartTable.tableRows\"\r\n class=\"full-width\"\r\n multiTemplateDataRows\r\n>\r\n <!-- Column Descriptor -->\r\n <ng-container\r\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\r\n matColumnDef=\"{{ header }}\"\r\n >\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div\r\n *ngIf=\"header === 'icon' || header === 'img' || header === 'options' || header === 'button'\"\r\n ></div>\r\n <div *ngIf=\"header === 'select'\">\r\n <mat-checkbox\r\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\r\n (change)=\"$event ? toggleAllRows() : null\"\r\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\r\n [aria-label]=\"checkboxLabel()\"\r\n >\r\n </mat-checkbox>\r\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\r\n {{ smartTable.customTableHeaders[i] }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'options' &&\r\n header !== 'button' &&\r\n header !== 'select' &&\r\n header !== 'expand' &&\r\n header !== 'actions'\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\r\n <ng-template #sortable>\r\n <button\r\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\r\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\r\n mat-button\r\n class=\"sortableHeaderButton\"\r\n >\r\n {{ smartTable.customTableHeaders[i] }}\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"getSortIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortIcon(header)!\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"hasSortNumIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortNumIcon(header)\"\r\n ></smart-icon>\r\n </button>\r\n </ng-template>\r\n <ng-template #notSortable>\r\n {{ smartTable.customTableHeaders[i] }}\r\n </ng-template>\r\n </div>\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\r\n <mat-checkbox\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\r\n !isDisabled(element)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n $event\r\n ? setSelection(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n : null\r\n \"\r\n [disabled]=\"isDisabled(element)\"\r\n [checked]=\"\r\n smartTable.selection!.isSelected(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n [aria-label]=\"\r\n checkboxLabel(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n >\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\r\n {{\r\n getValue(element, header)\r\n | smartDateTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\r\n {{\r\n getValue(element, header)\r\n | smartDate : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\r\n {{\r\n getValue(element, header)\r\n | smartTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\r\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\r\n \"\r\n >\r\n <smart-icon\r\n [icon]=\"getIcon(getValue(element, header), i)!\"\r\n [color]=\"getColor(getValue(element, header), i)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"isImageResource(element, header)\"\r\n [ngStyle]=\"getImageResourceStyle(element, header)\"\r\n >\r\n <smart-icon\r\n [icon]=\"getImageResourceIcon(element, header)\"\r\n [color]=\"getImageResourceColor(element, header)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\r\n class=\"smart-table-buttons-col\"\r\n >\r\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\r\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.ICON\"\r\n mat-icon-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\r\n mat-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\r\n mat-raised-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <div *ngSwitchCase=\"smartTableButtonType.MENU\">\r\n <button\r\n *ngIf=\"showMenuButton(element, button)\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div *ngIf=\"button.menuItemButtons\">\r\n <button\r\n *ngFor=\"let btn of button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\r\n mat-menu-item\r\n >\r\n <smart-icon *ngIf=\"btn.icon\" [icon]=\"btn.icon\"></smart-icon>\r\n {{ btn.label }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\r\n <div *ngFor=\"let btn of getValue(element, button.menuItemButtonsPropertyName)\">\r\n <button\r\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\r\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\r\n mat-menu-item\r\n >\r\n {{ button.translator!(btn) }}\r\n </button>\r\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\r\n <smart-icon\r\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\r\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\r\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\r\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].translator !== undefined\r\n \"\r\n >\r\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\r\n </div>\r\n <button\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\r\n \"\r\n mat-icon-button\r\n aria-label=\"expand row\"\r\n (click)=\"onToggle(element, $event)\"\r\n >\r\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\r\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\r\n </button>\r\n <div\r\n *ngIf=\"\r\n !smartTable.customSmartTableHeaders ||\r\n (smartTable.customSmartTableHeaders &&\r\n !smartTable.customSmartTableHeaders[i].properties &&\r\n !smartTable.customSmartTableHeaders[i].icon &&\r\n !smartTable.customSmartTableHeaders[i].buttons &&\r\n !smartTable.customSmartTableHeaders[i].translator &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\r\n \"\r\n >\r\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\r\n <img\r\n *ngIf=\"header === 'img'\"\r\n [src]=\"getValue(element, header)\"\r\n alt=\"\"\r\n class=\"smarttableImg\"\r\n />\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'option' &&\r\n header !== 'button' &&\r\n !isImageResource(element, header)\r\n \"\r\n [innerHtml]=\"getValue(element, header)\"\r\n ></div>\r\n </div>\r\n <div *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\">\r\n <lib-default-actions-popup\r\n #defaultActionMenu\r\n [buttons]=\"getDefaultActionsForRow(element)!\"\r\n [row]=\"element\"\r\n ></lib-default-actions-popup>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\r\n <div\r\n class=\"example-element-detail\"\r\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <ng-template #expandedArea></ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let element; columns: smartTable.tableHeaders\"\r\n class=\"example-element-row\"\r\n [class.example-expanded-row]=\"expandedElement === element\"\r\n [ngClass]=\"[\r\n isHighlighted(element) ? smartTable.highlightClass! : 'unselected',\r\n smartTable.hover ? 'smartTableRowHover' : '',\r\n isSelected(element) ? 'selected' : ''\r\n ]\"\r\n (click)=\"handleOnRowClick(element)\"\r\n (dblclick)=\"handleOnRowDoubleClick(element)\"\r\n ></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\r\n</table>\r\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:whitesmoke}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}\n"] }]
36
+ ], template: "<table\r\n #myTable\r\n mat-table\r\n [dataSource]=\"smartTable.tableRows\"\r\n class=\"full-width\"\r\n multiTemplateDataRows\r\n>\r\n <!-- Column Descriptor -->\r\n <ng-container\r\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\r\n matColumnDef=\"{{ header }}\"\r\n >\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div\r\n *ngIf=\"header === 'icon' || header === 'img' || header === 'options' || header === 'button'\"\r\n ></div>\r\n <div *ngIf=\"header === 'select'\">\r\n <mat-checkbox\r\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\r\n (change)=\"$event ? toggleAllRows() : null\"\r\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\r\n [aria-label]=\"checkboxLabel()\"\r\n >\r\n </mat-checkbox>\r\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\r\n {{ smartTable.customTableHeaders[i] }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'options' &&\r\n header !== 'button' &&\r\n header !== 'select' &&\r\n header !== 'expand' &&\r\n header !== 'actions'\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\r\n <ng-template #sortable>\r\n <button\r\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\r\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\r\n mat-button\r\n class=\"sortableHeaderButton\"\r\n >\r\n {{ smartTable.customTableHeaders[i] }}\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"getSortIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortIcon(header)!\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"sortableHeaderButtonIcon\"\r\n *ngIf=\"hasSortNumIcon(header)\"\r\n title=\"sort\"\r\n [icon]=\"getSortNumIcon(header)\"\r\n ></smart-icon>\r\n </button>\r\n </ng-template>\r\n <ng-template #notSortable>\r\n {{ smartTable.customTableHeaders[i] }}\r\n </ng-template>\r\n </div>\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\r\n <mat-checkbox\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\r\n !isDisabled(element)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n $event\r\n ? setSelection(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n : null\r\n \"\r\n [disabled]=\"isDisabled(element)\"\r\n [checked]=\"\r\n smartTable.selection!.isSelected(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n [aria-label]=\"\r\n checkboxLabel(\r\n smartTable.selectionProperty\r\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\r\n : element\r\n )\r\n \"\r\n >\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\r\n \"\r\n >\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\r\n {{\r\n getValue(element, header)\r\n | smartDateTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\r\n {{\r\n getValue(element, header)\r\n | smartDate : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\r\n {{\r\n getValue(element, header)\r\n | smartTime : smartTable.customSmartTableHeaders[i].properties?.dateFormat\r\n }}\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\r\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\r\n \"\r\n >\r\n <smart-icon\r\n [icon]=\"getIcon(getValue(element, header), i)!\"\r\n [color]=\"getColor(getValue(element, header), i)\"\r\n >\r\n </smart-icon>\r\n </div>\r\n </div>\r\n <div class=\"smart-table-icon-container\">\r\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\r\n <div [ngStyle]=\"getImageResourceStyle(ir)\"\r\n ><smart-icon [icon]=\"ir.identifier!\" [color]=\"ir.color!\"> </smart-icon\r\n ></div>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\r\n class=\"smart-table-buttons-col\"\r\n >\r\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\r\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.ICON\"\r\n mat-icon-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\r\n mat-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <button\r\n (click)=\"customButtonClicked($event, button, element)\"\r\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\r\n mat-raised-button\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <div *ngSwitchCase=\"smartTableButtonType.MENU\">\r\n <button\r\n *ngIf=\"showMenuButton(element, button)\"\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\r\n color=\"{{ button.color }}\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\r\n {{ button.label ?? (button.translator ? button.translator(element) : '') }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div *ngIf=\"button.menuItemButtons\">\r\n <button\r\n *ngFor=\"let btn of button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\r\n mat-menu-item\r\n >\r\n <smart-icon *ngIf=\"btn.icon\" [icon]=\"btn.icon\"></smart-icon>\r\n {{ btn.label }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\r\n <div *ngFor=\"let btn of getValue(element, button.menuItemButtonsPropertyName)\">\r\n <button\r\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\r\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\r\n mat-menu-item\r\n >\r\n {{ button.translator!(btn) }}\r\n </button>\r\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\r\n <smart-icon\r\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\r\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\r\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\r\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\r\n >\r\n </smart-icon>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].translator !== undefined\r\n \"\r\n >\r\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\r\n </div>\r\n <button\r\n *ngIf=\"\r\n smartTable.customSmartTableHeaders &&\r\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\r\n \"\r\n mat-icon-button\r\n aria-label=\"expand row\"\r\n (click)=\"onToggle(element, $event)\"\r\n >\r\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\r\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\r\n </button>\r\n <div\r\n *ngIf=\"\r\n !smartTable.customSmartTableHeaders ||\r\n (smartTable.customSmartTableHeaders &&\r\n !smartTable.customSmartTableHeaders[i].properties &&\r\n !smartTable.customSmartTableHeaders[i].icon &&\r\n !smartTable.customSmartTableHeaders[i].buttons &&\r\n !smartTable.customSmartTableHeaders[i].translator &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\r\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\r\n \"\r\n >\r\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\r\n <img\r\n *ngIf=\"header === 'img'\"\r\n [src]=\"getValue(element, header)\"\r\n alt=\"\"\r\n class=\"smarttableImg\"\r\n />\r\n <div\r\n *ngIf=\"\r\n header !== 'icon' &&\r\n header !== 'img' &&\r\n header !== 'option' &&\r\n header !== 'button' &&\r\n !isImageResource(element, header)\r\n \"\r\n [innerHtml]=\"getValue(element, header)\"\r\n ></div>\r\n </div>\r\n <div *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\">\r\n <lib-default-actions-popup\r\n #defaultActionMenu\r\n [buttons]=\"getDefaultActionsForRow(element)!\"\r\n [row]=\"element\"\r\n ></lib-default-actions-popup>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\r\n <div\r\n class=\"example-element-detail\"\r\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <ng-template #expandedArea></ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let element; columns: smartTable.tableHeaders\"\r\n class=\"example-element-row\"\r\n [class.example-expanded-row]=\"expandedElement === element\"\r\n [ngClass]=\"[\r\n isHighlighted(element) ? smartTable.highlightClass! : 'unselected',\r\n smartTable.hover ? 'smartTableRowHover' : '',\r\n isSelected(element) ? 'selected' : ''\r\n ]\"\r\n (click)=\"handleOnRowClick(element)\"\r\n (dblclick)=\"handleOnRowDoubleClick(element)\"\r\n ></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\r\n</table>\r\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:whitesmoke}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row}\n"] }]
37
37
  }], ctorParameters: function () { return [{ type: i1.ComponentFactoryService }]; } });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtdGFibGUvdGFibGVzL21hdGVyaWFsLXRhYmxlL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBZWpGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxLQUFLO0lBQy9DLFlBQVksU0FBa0M7UUFDNUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7O21IQUhVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLGlGQ2pCbkMsNGhhQTRUQSxna0hEblRjO1FBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUN0QixLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDdEYsQ0FBQztLQUNIOzJGQUVVLHNCQUFzQjtrQkFabEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FHbEI7d0JBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTs0QkFDdEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUM1RCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7eUJBQ3RGLENBQUM7cUJBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuLi90YWJsZSc7XHJcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItbWF0ZXJpYWwtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmNzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxyXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgVGFibGUge1xyXG4gIGNvbnN0cnVjdG9yKGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNmU2VydmljZSk7XHJcbiAgfVxyXG59XHJcbiIsIjx0YWJsZVxyXG4gICNteVRhYmxlXHJcbiAgbWF0LXRhYmxlXHJcbiAgW2RhdGFTb3VyY2VdPVwic21hcnRUYWJsZS50YWJsZVJvd3NcIlxyXG4gIGNsYXNzPVwiZnVsbC13aWR0aFwiXHJcbiAgbXVsdGlUZW1wbGF0ZURhdGFSb3dzXHJcbj5cclxuICA8IS0tIENvbHVtbiBEZXNjcmlwdG9yIC0tPlxyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygc21hcnRUYWJsZS50YWJsZUhlYWRlcnM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgbWF0Q29sdW1uRGVmPVwie3sgaGVhZGVyIH19XCJcclxuICA+XHJcbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJoZWFkZXIgPT09ICdpY29uJyB8fCBoZWFkZXIgPT09ICdpbWcnIHx8IGhlYWRlciA9PT0gJ29wdGlvbnMnIHx8IGhlYWRlciA9PT0gJ2J1dHRvbidcIlxyXG4gICAgICA+PC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJoZWFkZXIgPT09ICdzZWxlY3QnXCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXS5zaG93Q2hlY2tib3hJbkhlYWRlclwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZUFsbFJvd3MoKSA6IG51bGxcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwic21hcnRUYWJsZS5zZWxlY3Rpb24hLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNtYXJ0VGFibGUuc2VsZWN0aW9uIS5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgW2FyaWEtbGFiZWxdPVwiY2hlY2tib3hMYWJlbCgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXS5zaG93Q2hlY2tib3hJbkhlYWRlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRUYWJsZS5jdXN0b21UYWJsZUhlYWRlcnNbaV0gfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgaGVhZGVyICE9PSAnaWNvbicgJiZcclxuICAgICAgICAgIGhlYWRlciAhPT0gJ2ltZycgJiZcclxuICAgICAgICAgIGhlYWRlciAhPT0gJ29wdGlvbnMnICYmXHJcbiAgICAgICAgICBoZWFkZXIgIT09ICdidXR0b24nICYmXHJcbiAgICAgICAgICBoZWFkZXIgIT09ICdzZWxlY3QnICYmXHJcbiAgICAgICAgICBoZWFkZXIgIT09ICdleHBhbmQnICYmXHJcbiAgICAgICAgICBoZWFkZXIgIT09ICdhY3Rpb25zJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5zb3J0YWJsZTsgdGhlbiBzb3J0YWJsZTsgZWxzZSBub3RTb3J0YWJsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc29ydGFibGU+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzb3J0QnV0dG9uQ2xpY2tlZCgkZXZlbnQsIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic21hcnRUYWJsZS5zb3J0YWJsZSAmJiBpc1NvcnRhYmxlKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXHJcbiAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJzb3J0YWJsZUhlYWRlckJ1dHRvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0YWJsZUhlYWRlckJ1dHRvbkljb25cIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0U29ydEljb24oaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJzb3J0XCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJnZXRTb3J0SWNvbihoZWFkZXIpIVwiXHJcbiAgICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0YWJsZUhlYWRlckJ1dHRvbkljb25cIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzU29ydE51bUljb24oaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJzb3J0XCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJnZXRTb3J0TnVtSWNvbihoZWFkZXIpXCJcclxuICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3RTb3J0YWJsZT5cclxuICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3RoPlxyXG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBbbmdDbGFzc109XCJpc0Rpc2FibGVkKGVsZW1lbnQpID8gJ2Rpc2FibGVkUm93JyA6ICcnXCI+XHJcbiAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxyXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0eU5hbWUgPT09ICdzZWxlY3QnICYmXHJcbiAgICAgICAgICAhaXNEaXNhYmxlZChlbGVtZW50KVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJcclxuICAgICAgICAgICRldmVudFxyXG4gICAgICAgICAgICA/IHNldFNlbGVjdGlvbihcclxuICAgICAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICAgICAgICAgIDogZWxlbWVudFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChlbGVtZW50KVwiXHJcbiAgICAgICAgW2NoZWNrZWRdPVwiXHJcbiAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvbiEuaXNTZWxlY3RlZChcclxuICAgICAgICAgICAgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxyXG4gICAgICAgICAgICAgID8gc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxyXG4gICAgICAgICAgICAgIDogZWxlbWVudFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW2FyaWEtbGFiZWxdPVwiXHJcbiAgICAgICAgICBjaGVja2JveExhYmVsKFxyXG4gICAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllc1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuREFURVRJTUVcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgIGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcilcclxuICAgICAgICAgICAgICB8IHNtYXJ0RGF0ZVRpbWUgOiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LmRhdGVGb3JtYXRcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLkRBVEVcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgIGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcilcclxuICAgICAgICAgICAgICB8IHNtYXJ0RGF0ZSA6IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8uZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuVElNRVwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgICAgZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVxyXG4gICAgICAgICAgICAgIHwgc21hcnRUaW1lIDogc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5kYXRlRm9ybWF0XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLklDT04gJiZcclxuICAgICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5pY29ucz8ubGVuZ3RoXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgIFtpY29uXT1cImdldEljb24oZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSwgaSkhXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cImdldENvbG9yKGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlciksIGkpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cImlzSW1hZ2VSZXNvdXJjZShlbGVtZW50LCBoZWFkZXIpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRJbWFnZVJlc291cmNlU3R5bGUoZWxlbWVudCwgaGVhZGVyKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgW2ljb25dPVwiZ2V0SW1hZ2VSZXNvdXJjZUljb24oZWxlbWVudCwgaGVhZGVyKVwiXHJcbiAgICAgICAgICBbY29sb3JdPVwiZ2V0SW1hZ2VSZXNvdXJjZUNvbG9yKGVsZW1lbnQsIGhlYWRlcilcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L3NtYXJ0LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9uc1wiXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydC10YWJsZS1idXR0b25zLWNvbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2Ygc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5idXR0b25zXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0J1dHRvbihidXR0b24sIGVsZW1lbnQpXCIgW25nU3dpdGNoXT1cImJ1dHRvbi50eXBlXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5JQ09OXCJcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiB0aXRsZT1cInt7IGJ1dHRvbi5sYWJlbCB9fVwiIFtpY29uXT1cImJ1dHRvbi5pY29uIVwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5OT1JNQUxcIlxyXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ1dHRvbi5pY29uXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgICAge3sgYnV0dG9uLmxhYmVsID8/IChidXR0b24udHJhbnNsYXRvciA/IGJ1dHRvbi50cmFuc2xhdG9yKGVsZW1lbnQpIDogJycpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuUkFJU0VEXCJcclxuICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgICB7eyBidXR0b24ubGFiZWwgPz8gKGJ1dHRvbi50cmFuc2xhdG9yID8gYnV0dG9uLnRyYW5zbGF0b3IoZWxlbWVudCkgOiAnJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLk1FTlVcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dNZW51QnV0dG9uKGVsZW1lbnQsIGJ1dHRvbilcIlxyXG4gICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQsIHVuZGVmaW5lZCwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJ7eyBidXR0b24uY29sb3IgfX1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCA/PyAoYnV0dG9uLnRyYW5zbGF0b3IgPyBidXR0b24udHJhbnNsYXRvcihlbGVtZW50KSA6ICcnKSB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJidXR0b24ubWVudUl0ZW1CdXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYnRuIG9mIGJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnRuLCBlbGVtZW50LCB1bmRlZmluZWQsIHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ0bi5pY29uXCIgW2ljb25dPVwiYnRuLmljb25cIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgYnRuLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidG4gb2YgZ2V0VmFsdWUoZWxlbWVudCwgYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ0bi5jb2RlICE9PSBBQ1RJT05fU0VQRVJBVE9SXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCBlbGVtZW50LCBidG4sIHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBidXR0b24udHJhbnNsYXRvciEoYnRuKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cImJ0bi5jb2RlID09PSBBQ1RJT05fU0VQRVJBVE9SXCI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiYgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uXCI+XHJcbiAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uPy5pY29uXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbj8uY3NzQ2xhc3MgPz8gJydcIlxyXG4gICAgICAgICAgW2NvbG9yXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbj8uY29sb3JcIlxyXG4gICAgICAgICAgW2ljb25dPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5pY29uIS5pY29uXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9zbWFydC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnRyYW5zbGF0b3IgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnRyYW5zbGF0b3IhKGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcikpIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgJiZcclxuICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydHlOYW1lID09PSAnZXhwYW5kJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cImV4cGFuZCByb3dcIlxyXG4gICAgICAgIChjbGljayk9XCJvblRvZ2dsZShlbGVtZW50LCAkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiZXhwYW5kZWRFbGVtZW50ICE9PSBlbGVtZW50XCIgW2ljb25dPVwiJ2tleWJvYXJkX2Fycm93X2Rvd24nXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiZXhwYW5kZWRFbGVtZW50ID09PSBlbGVtZW50XCIgW2ljb25dPVwiJ2tleWJvYXJkX2Fycm93X3VwJ1wiPjwvc21hcnQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMgfHxcclxuICAgICAgICAgIChzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmXHJcbiAgICAgICAgICAgICFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXMgJiZcclxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiAmJlxyXG4gICAgICAgICAgICAhc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5idXR0b25zICYmXHJcbiAgICAgICAgICAgICFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnRyYW5zbGF0b3IgJiZcclxuICAgICAgICAgICAgIShzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ3NlbGVjdCcpICYmXHJcbiAgICAgICAgICAgICEoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0eU5hbWUgPT09ICdleHBhbmQnKSlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJoZWFkZXIgPT09ICdpY29uJ1wiIFtpY29uXT1cImdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcikhXCI+IDwvc21hcnQtaWNvbj5cclxuICAgICAgICA8aW1nXHJcbiAgICAgICAgICAqbmdJZj1cImhlYWRlciA9PT0gJ2ltZydcIlxyXG4gICAgICAgICAgW3NyY109XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXCJcclxuICAgICAgICAgIGFsdD1cIlwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtYXJ0dGFibGVJbWdcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgaGVhZGVyICE9PSAnaWNvbicgJiZcclxuICAgICAgICAgICAgaGVhZGVyICE9PSAnaW1nJyAmJlxyXG4gICAgICAgICAgICBoZWFkZXIgIT09ICdvcHRpb24nICYmXHJcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2J1dHRvbicgJiZcclxuICAgICAgICAgICAgIWlzSW1hZ2VSZXNvdXJjZShlbGVtZW50LCBoZWFkZXIpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgW2lubmVySHRtbF09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5kZWZhdWx0QWN0aW9uQ29kZXMgJiYgc21hcnRUYWJsZS5kZWZhdWx0QWN0aW9uQ29kZXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxsaWItZGVmYXVsdC1hY3Rpb25zLXBvcHVwXHJcbiAgICAgICAgICAjZGVmYXVsdEFjdGlvbk1lbnVcclxuICAgICAgICAgIFtidXR0b25zXT1cImdldERlZmF1bHRBY3Rpb25zRm9yUm93KGVsZW1lbnQpIVwiXHJcbiAgICAgICAgICBbcm93XT1cImVsZW1lbnRcIlxyXG4gICAgICAgID48L2xpYi1kZWZhdWx0LWFjdGlvbnMtcG9wdXA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90ZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IENvbHVtbiAtIFRoZSBkZXRhaWwgcm93IGlzIG1hZGUgdXAgb2YgdGhpcyBvbmUgY29sdW1uIHRoYXQgc3BhbnMgYWNyb3NzIGFsbCBjb2x1bW5zIC0tPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cclxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCIgW2F0dHIuY29sc3Bhbl09XCJzbWFydFRhYmxlLnRhYmxlSGVhZGVycy5sZW5ndGhcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZXhhbXBsZS1lbGVtZW50LWRldGFpbFwiXHJcbiAgICAgICAgW0BkZXRhaWxFeHBhbmRdPVwiZWxlbWVudCA9PSBleHBhbmRlZEVsZW1lbnQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNleHBhbmRlZEFyZWE+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3RkPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNtYXJ0VGFibGUudGFibGVIZWFkZXJzOyBzdGlja3k6IHRydWVcIj48L3RyPlxyXG4gIDx0clxyXG4gICAgbWF0LXJvd1xyXG4gICAgKm1hdFJvd0RlZj1cImxldCBlbGVtZW50OyBjb2x1bW5zOiBzbWFydFRhYmxlLnRhYmxlSGVhZGVyc1wiXHJcbiAgICBjbGFzcz1cImV4YW1wbGUtZWxlbWVudC1yb3dcIlxyXG4gICAgW2NsYXNzLmV4YW1wbGUtZXhwYW5kZWQtcm93XT1cImV4cGFuZGVkRWxlbWVudCA9PT0gZWxlbWVudFwiXHJcbiAgICBbbmdDbGFzc109XCJbXHJcbiAgICAgIGlzSGlnaGxpZ2h0ZWQoZWxlbWVudCkgPyBzbWFydFRhYmxlLmhpZ2hsaWdodENsYXNzISA6ICd1bnNlbGVjdGVkJyxcclxuICAgICAgc21hcnRUYWJsZS5ob3ZlciA/ICdzbWFydFRhYmxlUm93SG92ZXInIDogJycsXHJcbiAgICAgIGlzU2VsZWN0ZWQoZWxlbWVudCkgPyAnc2VsZWN0ZWQnIDogJydcclxuICAgIF1cIlxyXG4gICAgKGNsaWNrKT1cImhhbmRsZU9uUm93Q2xpY2soZWxlbWVudClcIlxyXG4gICAgKGRibGNsaWNrKT1cImhhbmRsZU9uUm93RG91YmxlQ2xpY2soZWxlbWVudClcIlxyXG4gID48L3RyPlxyXG4gIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIiBjbGFzcz1cImV4YW1wbGUtZGV0YWlsLXJvd1wiPjwvdHI+XHJcbjwvdGFibGU+XHJcbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtdGFibGUvdGFibGVzL21hdGVyaWFsLXRhYmxlL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRhYmxlL3RhYmxlcy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBZWpGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxLQUFLO0lBQy9DLFlBQVksU0FBa0M7UUFDNUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7O21IQUhVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLGlGQ2pCbkMsOGdhQXlUQSw0bkhEaFRjO1FBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUN0QixLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDdEYsQ0FBQztLQUNIOzJGQUVVLHNCQUFzQjtrQkFabEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FHbEI7d0JBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTs0QkFDdEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUM1RCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7eUJBQ3RGLENBQUM7cUJBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuLi90YWJsZSc7XHJcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItbWF0ZXJpYWwtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmNzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxyXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgVGFibGUge1xyXG4gIGNvbnN0cnVjdG9yKGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNmU2VydmljZSk7XHJcbiAgfVxyXG59XHJcbiIsIjx0YWJsZVxyXG4gICNteVRhYmxlXHJcbiAgbWF0LXRhYmxlXHJcbiAgW2RhdGFTb3VyY2VdPVwic21hcnRUYWJsZS50YWJsZVJvd3NcIlxyXG4gIGNsYXNzPVwiZnVsbC13aWR0aFwiXHJcbiAgbXVsdGlUZW1wbGF0ZURhdGFSb3dzXHJcbj5cclxuICA8IS0tIENvbHVtbiBEZXNjcmlwdG9yIC0tPlxyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygc21hcnRUYWJsZS50YWJsZUhlYWRlcnM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgbWF0Q29sdW1uRGVmPVwie3sgaGVhZGVyIH19XCJcclxuICA+XHJcbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJoZWFkZXIgPT09ICdpY29uJyB8fCBoZWFkZXIgPT09ICdpbWcnIHx8IGhlYWRlciA9PT0gJ29wdGlvbnMnIHx8IGhlYWRlciA9PT0gJ2J1dHRvbidcIlxyXG4gICAgICA+PC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJoZWFkZXIgPT09ICdzZWxlY3QnXCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXS5zaG93Q2hlY2tib3hJbkhlYWRlclwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZUFsbFJvd3MoKSA6IG51bGxcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwic21hcnRUYWJsZS5zZWxlY3Rpb24hLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNtYXJ0VGFibGUuc2VsZWN0aW9uIS5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgW2FyaWEtbGFiZWxdPVwiY2hlY2tib3hMYWJlbCgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIVtpXS5zaG93Q2hlY2tib3hJbkhlYWRlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRUYWJsZS5jdXN0b21UYWJsZUhlYWRlcnNbaV0gfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgaGVhZGVyICE9PSAnaWNvbicgJiZcclxuICAgICAgICAgIGhlYWRlciAhPT0gJ2ltZycgJiZcclxuICAgICAgICAgIGhlYWRlciAhPT0gJ29wdGlvbnMnICYmXHJcbiAgICAgICAgICBoZWFkZXIgIT09ICdidXR0b24nICYmXHJcbiAgICAgICAgICBoZWFkZXIgIT09ICdzZWxlY3QnICYmXHJcbiAgICAgICAgICBoZWFkZXIgIT09ICdleHBhbmQnICYmXHJcbiAgICAgICAgICBoZWFkZXIgIT09ICdhY3Rpb25zJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5zb3J0YWJsZTsgdGhlbiBzb3J0YWJsZTsgZWxzZSBub3RTb3J0YWJsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc29ydGFibGU+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzb3J0QnV0dG9uQ2xpY2tlZCgkZXZlbnQsIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic21hcnRUYWJsZS5zb3J0YWJsZSAmJiBpc1NvcnRhYmxlKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMhW2ldKVwiXHJcbiAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJzb3J0YWJsZUhlYWRlckJ1dHRvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0YWJsZUhlYWRlckJ1dHRvbkljb25cIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0U29ydEljb24oaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJzb3J0XCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJnZXRTb3J0SWNvbihoZWFkZXIpIVwiXHJcbiAgICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0YWJsZUhlYWRlckJ1dHRvbkljb25cIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzU29ydE51bUljb24oaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJzb3J0XCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJnZXRTb3J0TnVtSWNvbihoZWFkZXIpXCJcclxuICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3RTb3J0YWJsZT5cclxuICAgICAgICAgIHt7IHNtYXJ0VGFibGUuY3VzdG9tVGFibGVIZWFkZXJzW2ldIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3RoPlxyXG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBbbmdDbGFzc109XCJpc0Rpc2FibGVkKGVsZW1lbnQpID8gJ2Rpc2FibGVkUm93JyA6ICcnXCI+XHJcbiAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxyXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0eU5hbWUgPT09ICdzZWxlY3QnICYmXHJcbiAgICAgICAgICAhaXNEaXNhYmxlZChlbGVtZW50KVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJcclxuICAgICAgICAgICRldmVudFxyXG4gICAgICAgICAgICA/IHNldFNlbGVjdGlvbihcclxuICAgICAgICAgICAgICAgIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICAgICAgICAgIDogZWxlbWVudFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChlbGVtZW50KVwiXHJcbiAgICAgICAgW2NoZWNrZWRdPVwiXHJcbiAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvbiEuaXNTZWxlY3RlZChcclxuICAgICAgICAgICAgc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxyXG4gICAgICAgICAgICAgID8gc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxyXG4gICAgICAgICAgICAgIDogZWxlbWVudFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW2FyaWEtbGFiZWxdPVwiXHJcbiAgICAgICAgICBjaGVja2JveExhYmVsKFxyXG4gICAgICAgICAgICBzbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICAgICAgPyBzbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllc1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuREFURVRJTUVcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgIGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcilcclxuICAgICAgICAgICAgICB8IHNtYXJ0RGF0ZVRpbWUgOiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnRpZXM/LmRhdGVGb3JtYXRcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLkRBVEVcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgIGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlcilcclxuICAgICAgICAgICAgICB8IHNtYXJ0RGF0ZSA6IHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8uZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy50eXBlID09PSB0eXBlKCkuVElNRVwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgICAgZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVxyXG4gICAgICAgICAgICAgIHwgc21hcnRUaW1lIDogc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5kYXRlRm9ybWF0XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydGllcz8udHlwZSA9PT0gdHlwZSgpLklDT04gJiZcclxuICAgICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzPy5pY29ucz8ubGVuZ3RoXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgIFtpY29uXT1cImdldEljb24oZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKSwgaSkhXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cImdldENvbG9yKGdldFZhbHVlKGVsZW1lbnQsIGhlYWRlciksIGkpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWFydC10YWJsZS1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGlyIG9mIGdldEltYWdlUmVzb3VyY2VJY29ucyhlbGVtZW50LCBoZWFkZXIpXCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cImdldEltYWdlUmVzb3VyY2VTdHlsZShpcilcIlxyXG4gICAgICAgICAgICA+PHNtYXJ0LWljb24gW2ljb25dPVwiaXIuaWRlbnRpZmllciFcIiBbY29sb3JdPVwiaXIuY29sb3IhXCI+IDwvc21hcnQtaWNvblxyXG4gICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwic21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJiBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmJ1dHRvbnNcIlxyXG4gICAgICAgIGNsYXNzPVwic21hcnQtdGFibGUtYnV0dG9ucy1jb2xcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9uc1wiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dCdXR0b24oYnV0dG9uLCBlbGVtZW50KVwiIFtuZ1N3aXRjaF09XCJidXR0b24udHlwZVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuSUNPTlwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJ7eyBidXR0b24uY29sb3IgfX1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gdGl0bGU9XCJ7eyBidXR0b24ubGFiZWwgfX1cIiBbaWNvbl09XCJidXR0b24uaWNvbiFcIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUYWJsZUJ1dHRvblR5cGUuTk9STUFMXCJcclxuICAgICAgICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJ7eyBidXR0b24uY29sb3IgfX1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJidXR0b24uaWNvblwiIFtpY29uXT1cImJ1dHRvbi5pY29uXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCA/PyAoYnV0dG9uLnRyYW5zbGF0b3IgPyBidXR0b24udHJhbnNsYXRvcihlbGVtZW50KSA6ICcnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCBlbGVtZW50KVwiXHJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VGFibGVCdXR0b25UeXBlLlJBSVNFRFwiXHJcbiAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ1dHRvbi5pY29uXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgICAge3sgYnV0dG9uLmxhYmVsID8/IChidXR0b24udHJhbnNsYXRvciA/IGJ1dHRvbi50cmFuc2xhdG9yKGVsZW1lbnQpIDogJycpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJzbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93TWVudUJ1dHRvbihlbGVtZW50LCBidXR0b24pXCJcclxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCBlbGVtZW50LCB1bmRlZmluZWQsIHRydWUpXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwie3sgYnV0dG9uLmNvbG9yIH19XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImJ1dHRvbi5pY29uXCIgW2ljb25dPVwiYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgICAgICB7eyBidXR0b24ubGFiZWwgPz8gKGJ1dHRvbi50cmFuc2xhdG9yID8gYnV0dG9uLnRyYW5zbGF0b3IoZWxlbWVudCkgOiAnJykgfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b24ubWVudUl0ZW1CdXR0b25zXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ0biwgZWxlbWVudCwgdW5kZWZpbmVkLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJidG4uaWNvblwiIFtpY29uXT1cImJ0bi5pY29uXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGJ0bi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnRuIG9mIGdldFZhbHVlKGVsZW1lbnQsIGJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidG4uY29kZSAhPT0gQUNUSU9OX1NFUEVSQVRPUlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgZWxlbWVudCwgYnRuLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgYnV0dG9uLnRyYW5zbGF0b3IhKGJ0bikgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgKm5nSWY9XCJidG4uY29kZSA9PT0gQUNUSU9OX1NFUEVSQVRPUlwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmIHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvblwiPlxyXG4gICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbj8uaWNvblwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb24/LmNzc0NsYXNzID8/ICcnXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb24/LmNvbG9yXCJcclxuICAgICAgICAgIFtpY29uXT1cInNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uaWNvbiEuaWNvblwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxyXG4gICAgICAgICAgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS50cmFuc2xhdG9yICE9PSB1bmRlZmluZWRcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS50cmFuc2xhdG9yIShnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpKSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzICYmXHJcbiAgICAgICAgICBzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLnByb3BlcnR5TmFtZSA9PT0gJ2V4cGFuZCdcclxuICAgICAgICBcIlxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJleHBhbmQgcm93XCJcclxuICAgICAgICAoY2xpY2spPVwib25Ub2dnbGUoZWxlbWVudCwgJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImV4cGFuZGVkRWxlbWVudCAhPT0gZWxlbWVudFwiIFtpY29uXT1cIidrZXlib2FyZF9hcnJvd19kb3duJ1wiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cImV4cGFuZGVkRWxlbWVudCA9PT0gZWxlbWVudFwiIFtpY29uXT1cIidrZXlib2FyZF9hcnJvd191cCdcIj48L3NtYXJ0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzIHx8XHJcbiAgICAgICAgICAoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycyAmJlxyXG4gICAgICAgICAgICAhc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0aWVzICYmXHJcbiAgICAgICAgICAgICFzbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2ldLmljb24gJiZcclxuICAgICAgICAgICAgIXNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0uYnV0dG9ucyAmJlxyXG4gICAgICAgICAgICAhc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS50cmFuc2xhdG9yICYmXHJcbiAgICAgICAgICAgICEoc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1tpXS5wcm9wZXJ0eU5hbWUgPT09ICdzZWxlY3QnKSAmJlxyXG4gICAgICAgICAgICAhKHNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaV0ucHJvcGVydHlOYW1lID09PSAnZXhwYW5kJykpXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiaGVhZGVyID09PSAnaWNvbidcIiBbaWNvbl09XCJnZXRWYWx1ZShlbGVtZW50LCBoZWFkZXIpIVwiPiA8L3NtYXJ0LWljb24+XHJcbiAgICAgICAgPGltZ1xyXG4gICAgICAgICAgKm5nSWY9XCJoZWFkZXIgPT09ICdpbWcnXCJcclxuICAgICAgICAgIFtzcmNdPVwiZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVwiXHJcbiAgICAgICAgICBhbHQ9XCJcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWFydHRhYmxlSW1nXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2ljb24nICYmXHJcbiAgICAgICAgICAgIGhlYWRlciAhPT0gJ2ltZycgJiZcclxuICAgICAgICAgICAgaGVhZGVyICE9PSAnb3B0aW9uJyAmJlxyXG4gICAgICAgICAgICBoZWFkZXIgIT09ICdidXR0b24nICYmXHJcbiAgICAgICAgICAgICFpc0ltYWdlUmVzb3VyY2UoZWxlbWVudCwgaGVhZGVyKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIFtpbm5lckh0bWxdPVwiZ2V0VmFsdWUoZWxlbWVudCwgaGVhZGVyKVwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbkNvZGVzICYmIHNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbkNvZGVzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8bGliLWRlZmF1bHQtYWN0aW9ucy1wb3B1cFxyXG4gICAgICAgICAgI2RlZmF1bHRBY3Rpb25NZW51XHJcbiAgICAgICAgICBbYnV0dG9uc109XCJnZXREZWZhdWx0QWN0aW9uc0ZvclJvdyhlbGVtZW50KSFcIlxyXG4gICAgICAgICAgW3Jvd109XCJlbGVtZW50XCJcclxuICAgICAgICA+PC9saWItZGVmYXVsdC1hY3Rpb25zLXBvcHVwPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvdGQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gRXhwYW5kZWQgQ29udGVudCBDb2x1bW4gLSBUaGUgZGV0YWlsIHJvdyBpcyBtYWRlIHVwIG9mIHRoaXMgb25lIGNvbHVtbiB0aGF0IHNwYW5zIGFjcm9zcyBhbGwgY29sdW1ucyAtLT5cclxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XHJcbiAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFthdHRyLmNvbHNwYW5dPVwic21hcnRUYWJsZS50YWJsZUhlYWRlcnMubGVuZ3RoXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImV4YW1wbGUtZWxlbWVudC1kZXRhaWxcIlxyXG4gICAgICAgIFtAZGV0YWlsRXhwYW5kXT1cImVsZW1lbnQgPT0gZXhwYW5kZWRFbGVtZW50ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZXhwYW5kZWRBcmVhPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90ZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJzbWFydFRhYmxlLnRhYmxlSGVhZGVyczsgc3RpY2t5OiB0cnVlXCI+PC90cj5cclxuICA8dHJcclxuICAgIG1hdC1yb3dcclxuICAgICptYXRSb3dEZWY9XCJsZXQgZWxlbWVudDsgY29sdW1uczogc21hcnRUYWJsZS50YWJsZUhlYWRlcnNcIlxyXG4gICAgY2xhc3M9XCJleGFtcGxlLWVsZW1lbnQtcm93XCJcclxuICAgIFtjbGFzcy5leGFtcGxlLWV4cGFuZGVkLXJvd109XCJleHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnRcIlxyXG4gICAgW25nQ2xhc3NdPVwiW1xyXG4gICAgICBpc0hpZ2hsaWdodGVkKGVsZW1lbnQpID8gc21hcnRUYWJsZS5oaWdobGlnaHRDbGFzcyEgOiAndW5zZWxlY3RlZCcsXHJcbiAgICAgIHNtYXJ0VGFibGUuaG92ZXIgPyAnc21hcnRUYWJsZVJvd0hvdmVyJyA6ICcnLFxyXG4gICAgICBpc1NlbGVjdGVkKGVsZW1lbnQpID8gJ3NlbGVjdGVkJyA6ICcnXHJcbiAgICBdXCJcclxuICAgIChjbGljayk9XCJoYW5kbGVPblJvd0NsaWNrKGVsZW1lbnQpXCJcclxuICAgIChkYmxjbGljayk9XCJoYW5kbGVPblJvd0RvdWJsZUNsaWNrKGVsZW1lbnQpXCJcclxuICA+PC90cj5cclxuICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydleHBhbmRlZERldGFpbCddXCIgY2xhc3M9XCJleGFtcGxlLWRldGFpbC1yb3dcIj48L3RyPlxyXG48L3RhYmxlPlxyXG4iXX0=
@@ -411,14 +411,18 @@ export class Table {
411
411
  let property = this.originalProperty(header);
412
412
  return Object.keys(element.icons).some((key) => key === property);
413
413
  }
414
+ getImageResourceIcons(element, header) {
415
+ let iconCodes = element.icons[this.originalProperty(header)];
416
+ return iconCodes;
417
+ }
414
418
  getImageResourceIcon(element, header) {
415
419
  return element.icons[this.originalProperty(header)].identifier;
416
420
  }
417
421
  getImageResourceColor(element, header) {
418
422
  return element.icons[this.originalProperty(header)].color ?? 'primary';
419
423
  }
420
- getImageResourceStyle(element, header) {
421
- return element.icons[this.originalProperty(header)].style;
424
+ getImageResourceStyle(resource) {
425
+ return resource.style ? resource.style : {};
422
426
  }
423
427
  openDefaultActionsMenu(row) {
424
428
  let actionCodesFromRow = row?.actions.map((action) => action.code);
@@ -466,4 +470,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
466
470
  }], smartTable: [{
467
471
  type: Input
468
472
  }] } });
469
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC10YWJsZS90YWJsZXMvdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFHTCxvQkFBb0IsRUFFcEIsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQixlQUFlLEVBQ2YsY0FBYyxHQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUczRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQzs7O0FBS25ILE1BQU0sT0FBTyxLQUFLO0lBdUJoQixZQUFzQixTQUFrQztRQUFsQyxjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQXRCakQsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBWWhELGNBQVMsR0FBRyxjQUFjLENBQUM7UUFDM0IseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsY0FBUyxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBS3JELHVCQUFrQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBSTNDLDJCQUFzQixHQUFHLENBQUMsVUFBZSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRFLHFCQUFnQixHQUFHLG1CQUFtQixDQUFDO0lBSkksQ0FBQztJQU01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QUFZO3VCQUFDLDRCQUE0QjtnQkFHcEIsWUFBWTtzQkFBakMsU0FBUzt1QkFBQyxTQUFTO2dCQUVYLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBRdWVyeUxpc3QsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHtcclxuICBTbWFydFRhYmxlLFxyXG4gIFNtYXJ0VGFibGVCdXR0b24sXHJcbiAgU21hcnRUYWJsZUJ1dHRvblR5cGUsXHJcbiAgU21hcnRUYWJsZUhlYWRlcixcclxuICBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLFxyXG4gIFNtYXJ0VGFibGVPcHRpb25CdXR0b25EaXJlY3Rpb24sXHJcbiAgU21hcnRUYWJsZU9yZGVyLFxyXG4gIFNtYXJ0VGFibGVUeXBlLFxyXG59IGZyb20gJy4uL3NtYXJ0dGFibGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgRGVmYXVsdEFjdGlvbnNQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVmYXVsdC1hY3Rpb25zLXBvcHVwL2RlZmF1bHQtYWN0aW9ucy1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbiB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvbW9kZWxzJztcclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6ICcnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgQFZpZXdDaGlsZHJlbihNYXRNZW51VHJpZ2dlcikgdHJpZ2dlcnMhOiBRdWVyeUxpc3Q8TWF0TWVudVRyaWdnZXI+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2V4cGFuZGVkQXJlYScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHZjUmVmPzogVmlld0NvbnRhaW5lclJlZltdO1xyXG4gIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKERlZmF1bHRBY3Rpb25zUG9wdXBDb21wb25lbnQpXHJcbiAgZGVmYXVsdEFjdGlvbk1lbnVDb21wb25lbnRzITogUXVlcnlMaXN0PERlZmF1bHRBY3Rpb25zUG9wdXBDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKCdteVRhYmxlJykgbXlUYWJsZUNoaWxkITogTWF0VGFibGU8YW55PjtcclxuXHJcbiAgQElucHV0KCkgc21hcnRUYWJsZSE6IFNtYXJ0VGFibGU8YW55PjtcclxuICB0YWJsZVR5cGUgPSBTbWFydFRhYmxlVHlwZTtcclxuICBzbWFydFRhYmxlQnV0dG9uVHlwZSA9IFNtYXJ0VGFibGVCdXR0b25UeXBlO1xyXG4gIGhpZ2hsaWdodGVkUm93czogYW55W10gPSBbXTtcclxuICBzb3J0RXZlbnQ6IFN1YmplY3Q8U21hcnRUYWJsZUhlYWRlcj4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGV4cGFuZGVkRWxlbWVudDogYW55IHwgbnVsbDtcclxuXHJcbiAgZWxlbWVudD86IGFueTtcclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UpIHt9XHJcblxyXG4gIHB1YmxpYyBhc3luY1RyYW5zbGF0aW9uUmVzdWx0ID0gKHRyYW5zbGF0b3I6IGFueSwgcGFyYW06IHN0cmluZykgPT4gdHJhbnNsYXRvcihwYXJhbSk7XHJcblxyXG4gIHB1YmxpYyByZWFkb25seSBBQ1RJT05fU0VQRVJBVE9SID0gJ19hY3Rpb25TZXBhcmF0b3JfJztcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLnNvcnRhYmxlKSB0aGlzLnNvcnRFdmVudCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVPblJvd0NsaWNrKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLklOSEVSSVRFRCkge1xyXG4gICAgICB0aGlzLm9uUm93Q2xpY2soZWxlbWVudCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLkNIRUNLX0JPWCkge1xyXG4gICAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrICYmICF0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxyXG4gICAgICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICAgID8gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcclxuICAgICAgICAgICAgOiBlbGVtZW50XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Sb3dDbGljayhlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0VGFibGUudGFibGVUeXBlID09PSBTbWFydFRhYmxlVHlwZS5ST1dfU0VMRUNUKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxyXG4gICAgICAgICAgPyB0aGlzLnNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxyXG4gICAgICAgICAgOiBlbGVtZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTbWFydFRhYmxlKHNtYXJ0VGFibGU6IFNtYXJ0VGFibGU8YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydFRhYmxlID0gc21hcnRUYWJsZTtcclxuICAgIHRoaXMucmVuZGVyUm93cygpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyUm93cygpOiB2b2lkIHtcclxuICAgIHRoaXMubXlUYWJsZUNoaWxkLnJlbmRlclJvd3MoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU9uUm93RG91YmxlQ2xpY2soZWxlbWVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zICYmIHRoaXMuc21hcnRUYWJsZS5kZWZhdWx0QWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMub3BlbkRlZmF1bHRBY3Rpb25zTWVudShlbGVtZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUudGFibGVUeXBlID09PSBTbWFydFRhYmxlVHlwZS5JTkhFUklURUQpIHtcclxuICAgICAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2soZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuQ0hFQ0tfQk9YKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2soZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0eXBlKCk6IHR5cGVvZiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlIHtcclxuICAgIHJldHVybiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ1dHRvbkNsaWNrZWQoZXZlbnQ6IGFueSwgaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuc29ydEV2ZW50Lm5leHQoaGVhZGVyKTtcclxuICB9XHJcblxyXG4gIGN1c3RvbUJ1dHRvbkNsaWNrZWQoXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgYnV0dG9uOiBTbWFydFRhYmxlQnV0dG9uLFxyXG4gICAgZWxlbWVudDogYW55LFxyXG4gICAgYnRuPzogYW55LFxyXG4gICAgY2xvc2U/OiBib29sZWFuXHJcbiAgKSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBpZiAoYnV0dG9uLnR5cGUgPT09IFNtYXJ0VGFibGVCdXR0b25UeXBlLk1FTlUgJiYgYnRuID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoIWJ1dHRvbi5jYWxsYmFjaykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1dHRvbiB3aXRoIG5hbWUgJHtidXR0b24ubGFiZWwgfHwgYnV0dG9uLmljb259IGRvZXMgbm90IGhhdmUgYSBjYWxsYmFjayFgKTtcclxuICAgIH1cclxuICAgIGJ1dHRvbi5jYWxsYmFjayhidXR0b24uYXJncywgZWxlbWVudCwgYnRuKTtcclxuICAgIGlmIChjbG9zZSkge1xyXG4gICAgICBsZXQgb3Blbk1lbnVzID0gdGhpcy50cmlnZ2Vycy5maWx0ZXIoXHJcbiAgICAgICAgKG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikgPT4gbWF0TWVudVRyaWdnZXIubWVudU9wZW5cclxuICAgICAgKTtcclxuICAgICAgb3Blbk1lbnVzLmZvckVhY2goKG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikgPT4ge1xyXG4gICAgICAgIG1hdE1lbnVUcmlnZ2VyLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzU29ydGFibGUoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNTb3J0YWJsZVRhYmxlID0gdGhpcy5zbWFydFRhYmxlLnNvcnRhYmxlO1xyXG4gICAgaWYgKGlzU29ydGFibGVUYWJsZSkge1xyXG4gICAgICByZXR1cm4gaGVhZGVyLmlzU29ydGFibGUgIT09IHVuZGVmaW5lZCA/IGhlYWRlci5pc1NvcnRhYmxlIDogdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldFNvcnRJY29uKGhlYWRlcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCB0YWJsZUhlYWRlciA9IHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcclxuICAgICAgKHRhYmxlSGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB0YWJsZUhlYWRlci5wcm9wZXJ0eU5hbWUgPT09IGhlYWRlclxyXG4gICAgKTtcclxuICAgIGlmICh0YWJsZUhlYWRlciAmJiB0YWJsZUhlYWRlci5vcmRlcikge1xyXG4gICAgICByZXR1cm4gdGFibGVIZWFkZXIub3JkZXIgPT09IFNtYXJ0VGFibGVPcmRlci5BU0NcclxuICAgICAgICA/IHRoaXMuc21hcnRUYWJsZS5zb3J0SWNvbkFzYyA/PyAna2V5Ym9hcmRfYXJyb3dfZG93bidcclxuICAgICAgICA6IHRoaXMuc21hcnRUYWJsZS5zb3J0SWNvbkRlc2MgPz8gJ2tleWJvYXJkX2Fycm93X3VwJztcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGhhc1NvcnROdW1JY29uKGhlYWRlcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFibGVIZWFkZXIgPSB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICh0YWJsZUhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gdGFibGVIZWFkZXIucHJvcGVydHlOYW1lID09PSBoZWFkZXJcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGFibGVIZWFkZXI/Lm9yZGVyTnVtYmVyICE9PSB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGdldFNvcnROdW1JY29uKGhlYWRlcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB0YWJsZUhlYWRlciA9IHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcclxuICAgICAgKHRhYmxlSGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB0YWJsZUhlYWRlci5wcm9wZXJ0eU5hbWUgPT09IGhlYWRlclxyXG4gICAgKTtcclxuICAgIGlmICh0YWJsZUhlYWRlciAmJiB0YWJsZUhlYWRlci5vcmRlck51bWJlcikge1xyXG4gICAgICByZXR1cm4gYGZpbHRlcl8ke3RhYmxlSGVhZGVyLm9yZGVyTnVtYmVyfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuLCBoZWFkZXJJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tVGFibGVIZWFkZXJzIHByb3BlcnR5IGlzIG1pc3NpbmcnKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0aWVzYCk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIGljb25zIGRlZmluZWRgKTtcclxuICAgIH1cclxuICAgIGxldCBjdXN0b21UYWJsZUhlYWRlckljb25zID1cclxuICAgICAgdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzIS5pY29ucztcclxuXHJcbiAgICBsZXQgaWNvbjogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXN0b21UYWJsZUhlYWRlckljb25zIS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY3VzdG9tVGFibGVIZWFkZXJJY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29ucyFbaV07XHJcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVOdWxsICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlTnVsbCA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCaWdnZXJUaGFuTnVtYmVyICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQmlnZ2VyVGhhbk51bWJlciA8IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZVNtYWxsZXJUaGFuTnVtYmVyICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlU21hbGxlclRoYW5OdW1iZXIgPiB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoTnVtYmVyICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aE51bWJlciA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhTdHJpbmcgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoU3RyaW5nID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJvb2xlYW4gJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCb29sZWFuID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGljb247XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvcih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiwgaGVhZGVySW5kZXg6IG51bWJlcik6IFRoZW1lUGFsZXR0ZSB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1c3RvbVRhYmxlSGVhZGVycyBwcm9wZXJ0eSBpcyBtaXNzaW5nJyk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgcHJvcGVydGllc2ApO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzIS5pY29ucykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBpY29ucyBkZWZpbmVkYCk7XHJcbiAgICB9XHJcbiAgICBsZXQgY3VzdG9tVGFibGVIZWFkZXJJY29ucyA9XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcyEuaWNvbnM7XHJcblxyXG4gICAgbGV0IGNvbG9yOiBUaGVtZVBhbGV0dGUgPSAncHJpbWFyeSc7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXN0b21UYWJsZUhlYWRlckljb25zIS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY3VzdG9tVGFibGVIZWFkZXJJY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29ucyFbaV07XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJpZ2dlclRoYW5OdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCaWdnZXJUaGFuTnVtYmVyIDwgdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbG9yID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmNvbG9yO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVTbWFsbGVyVGhhbk51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZVNtYWxsZXJUaGFuTnVtYmVyID4gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbG9yID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmNvbG9yO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoTnVtYmVyICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aE51bWJlciA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbG9yID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmNvbG9yO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aFN0cmluZyAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhTdHJpbmcgPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCb29sZWFuICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQm9vbGVhbiA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbG9yID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmNvbG9yO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbG9yO1xyXG4gIH1cclxuXHJcbiAgdGFibGVPcHRpb25CdXR0b25EaXJlY3Rpb24oKTogdHlwZW9mIFNtYXJ0VGFibGVPcHRpb25CdXR0b25EaXJlY3Rpb24ge1xyXG4gICAgcmV0dXJuIFNtYXJ0VGFibGVPcHRpb25CdXR0b25EaXJlY3Rpb247XHJcbiAgfVxyXG5cclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5zZWxlY3RlZC5sZW5ndGg7XHJcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cy5sZW5ndGg7XHJcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgfVxyXG5cclxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xyXG4gIHRvZ2dsZUFsbFJvd3MoKSB7XHJcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuY2xlYXIoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUubWF4TnVtT2ZTZWxlY3RhYmxlUm93cykge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5jbGVhcigpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLnNlbGVjdChcclxuICAgICAgICAuLi50aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLm1hcCgocm93OiBhbnkpID0+XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkocm93LCB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkhKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLnNlbGVjdCguLi50aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSBsYWJlbCBmb3IgdGhlIGNoZWNrYm94IG9uIHRoZSBwYXNzZWQgcm93ICovXHJcbiAgY2hlY2tib3hMYWJlbChyb3c/OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFyb3cpIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMuaXNBbGxTZWxlY3RlZCgpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSBhbGxgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke3RoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLmlzU2VsZWN0ZWQocm93KSA/ICdkZXNlbGVjdCcgOiAnc2VsZWN0J30gcm93ICR7XHJcbiAgICAgIHJvdy5wb3NpdGlvbiArIDFcclxuICAgIH1gO1xyXG4gIH1cclxuXHJcbiAgaXNIaWdobGlnaHRlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHJvd1snZGF0YSddW3RoaXMuc21hcnRUYWJsZSEuaGlnaGxpZ2h0UHJvcGVydHkhXSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmluY2x1ZGVzKHJvdyk7XHJcbiAgfVxyXG5cclxuICBvblJvd0NsaWNrKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmhpZ2hsaWdodE9uUm93Q2xpY2spIHtcclxuICAgICAgaWYgKHRoaXMuaXNIaWdobGlnaHRlZChyb3cpKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5oaWdobGlnaHRlZFJvd3MuaW5kZXhPZihyb3csIDApO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnB1c2gocm93KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuZXhwYW5kYWJsZSAmJiAhdGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgdGhpcy5vblRvZ2dsZShyb3cpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vblJvd0NsaWNrKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5vblJvd0NsaWNrKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uUm93RG91YmxlQ2xpY2socm93OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuaGlnaGxpZ2h0T25Sb3dDbGljaykge1xyXG4gICAgICBpZiAodGhpcy5pc0hpZ2hsaWdodGVkKHJvdykpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmhpZ2hsaWdodGVkUm93cy5pbmRleE9mKHJvdywgMCk7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5oaWdobGlnaHRlZFJvd3MgfHwgIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzID0gW107XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MucHVzaChyb3cpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnB1c2gocm93KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblRvZ2dsZShlbGVtZW50OiBhbnksIGV2ZW50PzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5yb3dFeHBhbmRlcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ1NtYXJ0VGFibGVSb3dFeHBhbmRlciBub3QgZm91bmQhLiBQbGVhc2UgcHJvdmlkZSBhIFNtYXJ0VGFibGVSb3dFeHBhbmRlciBpbXBsZW1lbnRhdGlvbi4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb2xkSW5kZXggPSB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLmZpbmRJbmRleChcclxuICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQgPT09IHRoaXMuZXhwYW5kZWRFbGVtZW50XHJcbiAgICApO1xyXG4gICAgaWYgKG9sZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICBsZXQgcmVmID0gdGhpcy52Y1JlZiEuZmlsdGVyKChlbGVtZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID09PSBvbGRJbmRleCk7XHJcbiAgICAgIHJlZlswXS5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRlZEVsZW1lbnQgPSB0aGlzLmV4cGFuZGVkRWxlbWVudCA9PT0gZWxlbWVudCA/IG51bGwgOiBlbGVtZW50O1xyXG5cclxuICAgIGxldCBuZXdJbmRleCA9IHRoaXMuc21hcnRUYWJsZS50YWJsZVJvd3MuZmluZEluZGV4KFxyXG4gICAgICAoZWxlbWVudCkgPT4gZWxlbWVudCA9PT0gdGhpcy5leHBhbmRlZEVsZW1lbnRcclxuICAgICk7XHJcblxyXG4gICAgbGV0IHJvd0RhdGFSZXNwb25zZTtcclxuXHJcbiAgICBpZiAobmV3SW5kZXggIT09IC0xKSB7XHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuYXN5bmNPbkV4cGFuZCkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jZlNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KFxyXG4gICAgICAgICAgdGhpcy52Y1JlZj8uZmlsdGVyKChlbGVtZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID09PSBuZXdJbmRleClbMF0hLFxyXG4gICAgICAgICAgTG9hZGluZ0NvbXBvbmVudCxcclxuICAgICAgICAgIG5ldyBNYXA8c3RyaW5nLCBhbnk+KClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByb3dEYXRhUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNtYXJ0VGFibGUucm93RXhwYW5kZXI/LmV4cGFuZEFzeW5jKG5ld0luZGV4KTtcclxuXHJcbiAgICAgICAgbGV0IHJlZiA9IHRoaXMudmNSZWYhLmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gbmV3SW5kZXgpWzBdITtcclxuICAgICAgICByZWYuY2xlYXIoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNmU2VydmljZS5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgICAgdGhpcy52Y1JlZj8uZmlsdGVyKChlbGVtZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID09PSBuZXdJbmRleClbMF0hLFxyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5leHBhbmRlZENvbXBvbmVudCxcclxuICAgICAgICBuZXcgTWFwPHN0cmluZywgYW55PihbWydyb3dEYXRhJywgcm93RGF0YVJlc3BvbnNlXV0pXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3Rpb24oZWxlbWVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5tYXhOdW1PZlNlbGVjdGFibGVSb3dzICYmXHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5zbWFydFRhYmxlLm1heE51bU9mU2VsZWN0YWJsZVJvd3NcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uPy50b2dnbGUoZWxlbWVudCk7XHJcbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5uZXh0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vblNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25TZWxlY3Rpb24oZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93TWVudUJ1dHRvbihlbGVtZW50OiBhbnksIGJ1dHRvbjogU21hcnRUYWJsZUJ1dHRvbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGJ1dHRvbi5tZW51SXRlbUJ1dHRvbnMpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKGJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5nZXRWYWx1ZShlbGVtZW50LCBidXR0b24ubWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lISkubGVuZ3RoO1xyXG5cclxuICAgICAgICByZXR1cm4gbGVuZ3RoID4gMDtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBUaGUgdHlwZSBvZiBwcm9wZXJ0eSAke2J1dHRvbi5tZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWV9IGlzIG5vdCBhIGxpc3QuYCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZShlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55IHtcclxuICAgIGxldCBoZWFkZXJzID0gaGVhZGVyLnNwbGl0KCcuJyk7XHJcbiAgICBpZiAoaGVhZGVycy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCB2YWx1ZTogYW55ID0gZWxlbWVudDtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGhlYWRlcnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGhlYWRlcnNbaW5kZXhdO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWVbZWxlbWVudF07XHJcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiBpbmRleCAhPT0gaGVhZGVycy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZWxlbWVudFtoZWFkZXJdO1xyXG4gIH1cclxuXHJcbiAgc2hvd0J1dHRvbihidXR0b246IFNtYXJ0VGFibGVCdXR0b24sIGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGJ1dHRvbi5zaG93QnV0dG9uSWYpIHtcclxuICAgICAgcmV0dXJuIGJ1dHRvbi5zaG93QnV0dG9uSWYoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWQoZWxlbWVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmlzUm93RGlzYWJsZWRQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCB0aGlzLnNtYXJ0VGFibGUuaXNSb3dEaXNhYmxlZFByb3BlcnR5TmFtZSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS5zZWxlY3RhYmxlUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGFibGUgPSB0aGlzLnNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoXHJcbiAgICAgICAgZWxlbWVudCxcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0YWJsZVByb3BlcnR5TmFtZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGFibGUgPT09IG51bGwgPyBmYWxzZSA6ICFzZWxlY3RhYmxlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RlZChlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24/LmlzU2VsZWN0ZWQoXHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICA/IHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICA6IGVsZW1lbnRcclxuICAgICAgKSA/PyBmYWxzZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3JpZ2luYWxQcm9wZXJ0eShoZWFkZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoaGVhZGVyLnN0YXJ0c1dpdGgoJ2RhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIGhlYWRlci5zdWJzdHJpbmcoJ2RhdGEuJy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhlYWRlcjtcclxuICB9XHJcblxyXG4gIGlzSW1hZ2VSZXNvdXJjZShlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoISgnaWNvbnMnIGluIGVsZW1lbnQpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGxldCBwcm9wZXJ0eSA9IHRoaXMub3JpZ2luYWxQcm9wZXJ0eShoZWFkZXIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVsZW1lbnQuaWNvbnMpLnNvbWUoKGtleSkgPT4ga2V5ID09PSBwcm9wZXJ0eSk7XHJcbiAgfVxyXG5cclxuICBnZXRJbWFnZVJlc291cmNlSWNvbihlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBlbGVtZW50Lmljb25zW3RoaXMub3JpZ2luYWxQcm9wZXJ0eShoZWFkZXIpXS5pZGVudGlmaWVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VSZXNvdXJjZUNvbG9yKGVsZW1lbnQ6IGFueSwgaGVhZGVyOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQuaWNvbnNbdGhpcy5vcmlnaW5hbFByb3BlcnR5KGhlYWRlcildLmNvbG9yID8/ICdwcmltYXJ5JztcclxuICB9XHJcblxyXG4gIGdldEltYWdlUmVzb3VyY2VTdHlsZShlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBlbGVtZW50Lmljb25zW3RoaXMub3JpZ2luYWxQcm9wZXJ0eShoZWFkZXIpXS5zdHlsZTtcclxuICB9XHJcblxyXG4gIG9wZW5EZWZhdWx0QWN0aW9uc01lbnUocm93OiBhbnkpIHtcclxuICAgIGxldCBhY3Rpb25Db2Rlc0Zyb21Sb3cgPSByb3c/LmFjdGlvbnMubWFwKChhY3Rpb246IFVpQWN0aW9uKSA9PiBhY3Rpb24uY29kZSk7XHJcbiAgICBsZXQgZmlsdGVyZWRBY3Rpb25zID0gdGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zPy5maWx0ZXIoKGFjdGlvbjogU21hcnRUYWJsZUJ1dHRvbikgPT5cclxuICAgICAgYWN0aW9uQ29kZXNGcm9tUm93LmluY2x1ZGVzKGFjdGlvbi5jb2RlISlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGZpbHRlcmVkQWN0aW9ucyAmJiBmaWx0ZXJlZEFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoZmlsdGVyZWRBY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICAgICAgdGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2socm93KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kZWZhdWx0QWN0aW9uTWVudUNvbXBvbmVudHNcclxuICAgICAgICAudG9BcnJheSgpXHJcbiAgICAgICAgLmZpbmQoKGNvbXA6IERlZmF1bHRBY3Rpb25zUG9wdXBDb21wb25lbnQpID0+IGNvbXAucm93LmlkID09PSByb3cuaWQpXHJcbiAgICAgICAgPy5vcGVuRGVmYXVsdEFjdGlvbnNNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0QWN0aW9uc0ZvclJvdyhlbGVtZW50OiBhbnkpOiBTbWFydFRhYmxlQnV0dG9uW10gfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IGFjdGlvbkNvZGVzRnJvbVJvdyA9IGVsZW1lbnQ/LmFjdGlvbnMubWFwKChhY3Rpb246IFVpQWN0aW9uKSA9PiBhY3Rpb24uY29kZSk7XHJcbiAgICBpZiAoYWN0aW9uQ29kZXNGcm9tUm93KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbnM/LmZpbHRlcigoYWN0aW9uOiBTbWFydFRhYmxlQnV0dG9uKSA9PlxyXG4gICAgICAgIGFjdGlvbkNvZGVzRnJvbVJvdy5pbmNsdWRlcyhhY3Rpb24uY29kZSEpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG4iXX0=
473
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC10YWJsZS90YWJsZXMvdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFHTCxvQkFBb0IsRUFFcEIsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQixlQUFlLEVBQ2YsY0FBYyxHQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUczRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQzs7O0FBS25ILE1BQU0sT0FBTyxLQUFLO0lBdUJoQixZQUFzQixTQUFrQztRQUFsQyxjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQXRCakQsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBWWhELGNBQVMsR0FBRyxjQUFjLENBQUM7UUFDM0IseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsY0FBUyxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBS3JELHVCQUFrQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBSTNDLDJCQUFzQixHQUFHLENBQUMsVUFBZSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRFLHFCQUFnQixHQUFHLG1CQUFtQixDQUFDO0lBSkksQ0FBQztJQU01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RSxFQUFFO2lCQUNiOzhHQUcrQixRQUFRO3NCQUFyQyxZQUFZO3VCQUFDLGNBQWM7Z0JBRTVCLEtBQUs7c0JBREosWUFBWTt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS3hELDJCQUEyQjtzQkFEMUIsWUFBWTt1QkFBQyw0QkFBNEI7Z0JBR3BCLFlBQVk7c0JBQWpDLFNBQVM7dUJBQUMsU0FBUztnQkFFWCxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRUYWJsZSxcclxuICBTbWFydFRhYmxlQnV0dG9uLFxyXG4gIFNtYXJ0VGFibGVCdXR0b25UeXBlLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXIsXHJcbiAgU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZSxcclxuICBTbWFydFRhYmxlT3B0aW9uQnV0dG9uRGlyZWN0aW9uLFxyXG4gIFNtYXJ0VGFibGVPcmRlcixcclxuICBTbWFydFRhYmxlVHlwZSxcclxufSBmcm9tICcuLi9zbWFydHRhYmxlLm1vZGVsJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50LWZhY3Rvcnktc2VydmljZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IERlZmF1bHRBY3Rpb25zUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2RlZmF1bHQtYWN0aW9ucy1wb3B1cC9kZWZhdWx0LWFjdGlvbnMtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW1hZ2VSZXNvdXJjZSwgVWlBY3Rpb24gfSBmcm9tICcuLi8uLi92aWV3LWNvbnRleHQvYXBpL21vZGVsL21vZGVscyc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlOiAnJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBWaWV3Q2hpbGRyZW4oTWF0TWVudVRyaWdnZXIpIHRyaWdnZXJzITogUXVlcnlMaXN0PE1hdE1lbnVUcmlnZ2VyPjtcclxuICBAVmlld0NoaWxkcmVuKCdleHBhbmRlZEFyZWEnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICB2Y1JlZj86IFZpZXdDb250YWluZXJSZWZbXTtcclxuICBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8YW55PjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50KVxyXG4gIGRlZmF1bHRBY3Rpb25NZW51Q29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbXlUYWJsZScpIG15VGFibGVDaGlsZCE6IE1hdFRhYmxlPGFueT47XHJcblxyXG4gIEBJbnB1dCgpIHNtYXJ0VGFibGUhOiBTbWFydFRhYmxlPGFueT47XHJcbiAgdGFibGVUeXBlID0gU21hcnRUYWJsZVR5cGU7XHJcbiAgc21hcnRUYWJsZUJ1dHRvblR5cGUgPSBTbWFydFRhYmxlQnV0dG9uVHlwZTtcclxuICBoaWdobGlnaHRlZFJvd3M6IGFueVtdID0gW107XHJcbiAgc29ydEV2ZW50OiBTdWJqZWN0PFNtYXJ0VGFibGVIZWFkZXI+ID0gbmV3IFN1YmplY3QoKTtcclxuICBleHBhbmRlZEVsZW1lbnQ6IGFueSB8IG51bGw7XHJcblxyXG4gIGVsZW1lbnQ/OiBhbnk7XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZlNlcnZpY2U6IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlKSB7fVxyXG5cclxuICBwdWJsaWMgYXN5bmNUcmFuc2xhdGlvblJlc3VsdCA9ICh0cmFuc2xhdG9yOiBhbnksIHBhcmFtOiBzdHJpbmcpID0+IHRyYW5zbGF0b3IocGFyYW0pO1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgQUNUSU9OX1NFUEVSQVRPUiA9ICdfYWN0aW9uU2VwYXJhdG9yXyc7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5zb3J0YWJsZSkgdGhpcy5zb3J0RXZlbnQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25Sb3dDbGljayhlbGVtZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUudGFibGVUeXBlID09PSBTbWFydFRhYmxlVHlwZS5JTkhFUklURUQpIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrKGVsZW1lbnQpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0VGFibGUudGFibGVUeXBlID09PSBTbWFydFRhYmxlVHlwZS5DSEVDS19CT1gpIHtcclxuICAgICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljayAmJiAhdGhpcy5zbWFydFRhYmxlLm9uUm93Q2xpY2spIHtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihcclxuICAgICAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxyXG4gICAgICAgICAgICA/IHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICAgIDogZWxlbWVudFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLm9uUm93Q2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uUm93Q2xpY2soZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuUk9XX1NFTEVDVCkge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgID8gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcclxuICAgICAgICAgIDogZWxlbWVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU21hcnRUYWJsZShzbWFydFRhYmxlOiBTbWFydFRhYmxlPGFueT4pOiB2b2lkIHtcclxuICAgIHRoaXMuc21hcnRUYWJsZSA9IHNtYXJ0VGFibGU7XHJcbiAgICB0aGlzLnJlbmRlclJvd3MoKTtcclxuICB9XHJcblxyXG4gIHJlbmRlclJvd3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLm15VGFibGVDaGlsZC5yZW5kZXJSb3dzKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVPblJvd0RvdWJsZUNsaWNrKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5kZWZhdWx0QWN0aW9ucyAmJiB0aGlzLnNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLm9wZW5EZWZhdWx0QWN0aW9uc01lbnUoZWxlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuSU5IRVJJVEVEKSB7XHJcbiAgICAgICAgdGhpcy5vblJvd0RvdWJsZUNsaWNrKGVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLkNIRUNLX0JPWCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICAgICAgdGhpcy5vblJvd0RvdWJsZUNsaWNrKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdHlwZSgpOiB0eXBlb2YgU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZSB7XHJcbiAgICByZXR1cm4gU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZTtcclxuICB9XHJcblxyXG4gIHNvcnRCdXR0b25DbGlja2VkKGV2ZW50OiBhbnksIGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnNvcnRFdmVudC5uZXh0KGhlYWRlcik7XHJcbiAgfVxyXG5cclxuICBjdXN0b21CdXR0b25DbGlja2VkKFxyXG4gICAgZXZlbnQ6IGFueSxcclxuICAgIGJ1dHRvbjogU21hcnRUYWJsZUJ1dHRvbixcclxuICAgIGVsZW1lbnQ6IGFueSxcclxuICAgIGJ0bj86IGFueSxcclxuICAgIGNsb3NlPzogYm9vbGVhblxyXG4gICkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgaWYgKGJ1dHRvbi50eXBlID09PSBTbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VICYmIGJ0biA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCFidXR0b24uY2FsbGJhY2spIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdXR0b24gd2l0aCBuYW1lICR7YnV0dG9uLmxhYmVsIHx8IGJ1dHRvbi5pY29ufSBkb2VzIG5vdCBoYXZlIGEgY2FsbGJhY2shYCk7XHJcbiAgICB9XHJcbiAgICBidXR0b24uY2FsbGJhY2soYnV0dG9uLmFyZ3MsIGVsZW1lbnQsIGJ0bik7XHJcbiAgICBpZiAoY2xvc2UpIHtcclxuICAgICAgbGV0IG9wZW5NZW51cyA9IHRoaXMudHJpZ2dlcnMuZmlsdGVyKFxyXG4gICAgICAgIChtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpID0+IG1hdE1lbnVUcmlnZ2VyLm1lbnVPcGVuXHJcbiAgICAgICk7XHJcbiAgICAgIG9wZW5NZW51cy5mb3JFYWNoKChtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpID0+IHtcclxuICAgICAgICBtYXRNZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1NvcnRhYmxlKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzU29ydGFibGVUYWJsZSA9IHRoaXMuc21hcnRUYWJsZS5zb3J0YWJsZTtcclxuICAgIGlmIChpc1NvcnRhYmxlVGFibGUpIHtcclxuICAgICAgcmV0dXJuIGhlYWRlci5pc1NvcnRhYmxlICE9PSB1bmRlZmluZWQgPyBoZWFkZXIuaXNTb3J0YWJsZSA6IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRTb3J0SWNvbihoZWFkZXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBsZXQgdGFibGVIZWFkZXIgPSB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICh0YWJsZUhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gdGFibGVIZWFkZXIucHJvcGVydHlOYW1lID09PSBoZWFkZXJcclxuICAgICk7XHJcbiAgICBpZiAodGFibGVIZWFkZXIgJiYgdGFibGVIZWFkZXIub3JkZXIpIHtcclxuICAgICAgcmV0dXJuIHRhYmxlSGVhZGVyLm9yZGVyID09PSBTbWFydFRhYmxlT3JkZXIuQVNDXHJcbiAgICAgICAgPyB0aGlzLnNtYXJ0VGFibGUuc29ydEljb25Bc2MgPz8gJ2tleWJvYXJkX2Fycm93X2Rvd24nXHJcbiAgICAgICAgOiB0aGlzLnNtYXJ0VGFibGUuc29ydEljb25EZXNjID8/ICdrZXlib2FyZF9hcnJvd191cCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBoYXNTb3J0TnVtSWNvbihoZWFkZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHRhYmxlSGVhZGVyID0gdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maW5kKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRhYmxlSGVhZGVyPy5vcmRlck51bWJlciAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBnZXRTb3J0TnVtSWNvbihoZWFkZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGFibGVIZWFkZXIgPSB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICh0YWJsZUhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gdGFibGVIZWFkZXIucHJvcGVydHlOYW1lID09PSBoZWFkZXJcclxuICAgICk7XHJcbiAgICBpZiAodGFibGVIZWFkZXIgJiYgdGFibGVIZWFkZXIub3JkZXJOdW1iZXIpIHtcclxuICAgICAgcmV0dXJuIGBmaWx0ZXJfJHt0YWJsZUhlYWRlci5vcmRlck51bWJlcn1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0SWNvbih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiwgaGVhZGVySW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1c3RvbVRhYmxlSGVhZGVycyBwcm9wZXJ0eSBpcyBtaXNzaW5nJyk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgcHJvcGVydGllc2ApO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzIS5pY29ucykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBpY29ucyBkZWZpbmVkYCk7XHJcbiAgICB9XHJcbiAgICBsZXQgY3VzdG9tVGFibGVIZWFkZXJJY29ucyA9XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcyEuaWNvbnM7XHJcblxyXG4gICAgbGV0IGljb246IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VzdG9tVGFibGVIZWFkZXJJY29ucyEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhW2ldO1xyXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlTnVsbCAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZU51bGwgPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQmlnZ2VyVGhhbk51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJpZ2dlclRoYW5OdW1iZXIgPCB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVTbWFsbGVyVGhhbk51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZVNtYWxsZXJUaGFuTnVtYmVyID4gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aE51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhOdW1iZXIgPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoU3RyaW5nICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aFN0cmluZyA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCb29sZWFuICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQm9vbGVhbiA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpY29uO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3IodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sIGhlYWRlckluZGV4OiBudW1iZXIpOiBUaGVtZVBhbGV0dGUge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXN0b21UYWJsZUhlYWRlcnMgcHJvcGVydHkgaXMgbWlzc2luZycpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIHByb3BlcnRpZXNgKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcyEuaWNvbnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgaWNvbnMgZGVmaW5lZGApO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMgPVxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zO1xyXG5cclxuICAgIGxldCBjb2xvcjogVGhlbWVQYWxldHRlID0gJ3ByaW1hcnknO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VzdG9tVGFibGVIZWFkZXJJY29ucyEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhW2ldO1xyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCaWdnZXJUaGFuTnVtYmVyICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQmlnZ2VyVGhhbk51bWJlciA8IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlU21hbGxlclRoYW5OdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVTbWFsbGVyVGhhbk51bWJlciA+IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aE51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhOdW1iZXIgPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhTdHJpbmcgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoU3RyaW5nID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQm9vbGVhbiAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJvb2xlYW4gPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2xvcjtcclxuICB9XHJcblxyXG4gIHRhYmxlT3B0aW9uQnV0dG9uRGlyZWN0aW9uKCk6IHR5cGVvZiBTbWFydFRhYmxlT3B0aW9uQnV0dG9uRGlyZWN0aW9uIHtcclxuICAgIHJldHVybiBTbWFydFRhYmxlT3B0aW9uQnV0dG9uRGlyZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuc21hcnRUYWJsZS50YWJsZVJvd3MubGVuZ3RoO1xyXG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvbi4gKi9cclxuICB0b2dnbGVBbGxSb3dzKCkge1xyXG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLmNsZWFyKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLm1heE51bU9mU2VsZWN0YWJsZVJvd3MpIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuY2xlYXIoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSkge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5zZWxlY3QoXHJcbiAgICAgICAgLi4udGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cy5tYXAoKHJvdzogYW55KSA9PlxyXG4gICAgICAgICAgdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KHJvdywgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5ISlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5zZWxlY3QoLi4udGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbih0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBUaGUgbGFiZWwgZm9yIHRoZSBjaGVja2JveCBvbiB0aGUgcGFzc2VkIHJvdyAqL1xyXG4gIGNoZWNrYm94TGFiZWwocm93PzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghcm93KSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLmlzQWxsU2VsZWN0ZWQoKSA/ICdkZXNlbGVjdCcgOiAnc2VsZWN0J30gYWxsYDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHt0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5pc1NlbGVjdGVkKHJvdykgPyAnZGVzZWxlY3QnIDogJ3NlbGVjdCd9IHJvdyAke1xyXG4gICAgICByb3cucG9zaXRpb24gKyAxXHJcbiAgICB9YDtcclxuICB9XHJcblxyXG4gIGlzSGlnaGxpZ2h0ZWQocm93OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChyb3dbJ2RhdGEnXVt0aGlzLnNtYXJ0VGFibGUhLmhpZ2hsaWdodFByb3BlcnR5IV0pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmhpZ2hsaWdodGVkUm93cyB8fCAhdGhpcy5oaWdobGlnaHRlZFJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodGVkUm93cy5pbmNsdWRlcyhyb3cpO1xyXG4gIH1cclxuXHJcbiAgb25Sb3dDbGljayhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5oaWdobGlnaHRPblJvd0NsaWNrKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzSGlnaGxpZ2h0ZWQocm93KSkge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmluZGV4T2Yocm93LCAwKTtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmhpZ2hsaWdodGVkUm93cyB8fCAhdGhpcy5oaWdobGlnaHRlZFJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MgPSBbXTtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MucHVzaChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmV4cGFuZGFibGUgJiYgIXRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Ub2dnbGUocm93KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljaykge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljayhyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblJvd0RvdWJsZUNsaWNrKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmhpZ2hsaWdodE9uUm93Q2xpY2spIHtcclxuICAgICAgaWYgKHRoaXMuaXNIaWdobGlnaHRlZChyb3cpKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5oaWdobGlnaHRlZFJvd3MuaW5kZXhPZihyb3csIDApO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnB1c2gocm93KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljayhyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Ub2dnbGUoZWxlbWVudDogYW55LCBldmVudD86IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUucm93RXhwYW5kZXIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdTbWFydFRhYmxlUm93RXhwYW5kZXIgbm90IGZvdW5kIS4gUGxlYXNlIHByb3ZpZGUgYSBTbWFydFRhYmxlUm93RXhwYW5kZXIgaW1wbGVtZW50YXRpb24uJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9sZEluZGV4ID0gdGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cy5maW5kSW5kZXgoXHJcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50ID09PSB0aGlzLmV4cGFuZGVkRWxlbWVudFxyXG4gICAgKTtcclxuICAgIGlmIChvbGRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgbGV0IHJlZiA9IHRoaXMudmNSZWYhLmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gb2xkSW5kZXgpO1xyXG4gICAgICByZWZbMF0uY2xlYXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRFbGVtZW50ID0gdGhpcy5leHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnQgPyBudWxsIDogZWxlbWVudDtcclxuXHJcbiAgICBsZXQgbmV3SW5kZXggPSB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLmZpbmRJbmRleChcclxuICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQgPT09IHRoaXMuZXhwYW5kZWRFbGVtZW50XHJcbiAgICApO1xyXG5cclxuICAgIGxldCByb3dEYXRhUmVzcG9uc2U7XHJcblxyXG4gICAgaWYgKG5ld0luZGV4ICE9PSAtMSkge1xyXG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLmFzeW5jT25FeHBhbmQpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgIHRoaXMudmNSZWY/LmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gbmV3SW5kZXgpWzBdISxcclxuICAgICAgICAgIExvYWRpbmdDb21wb25lbnQsXHJcbiAgICAgICAgICBuZXcgTWFwPHN0cmluZywgYW55PigpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcm93RGF0YVJlc3BvbnNlID0gYXdhaXQgdGhpcy5zbWFydFRhYmxlLnJvd0V4cGFuZGVyPy5leHBhbmRBc3luYyhuZXdJbmRleCk7XHJcblxyXG4gICAgICAgIGxldCByZWYgPSB0aGlzLnZjUmVmIS5maWx0ZXIoKGVsZW1lbnQ6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggPT09IG5ld0luZGV4KVswXSE7XHJcbiAgICAgICAgcmVmLmNsZWFyKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jZlNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KFxyXG4gICAgICAgIHRoaXMudmNSZWY/LmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gbmV3SW5kZXgpWzBdISxcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuZXhwYW5kZWRDb21wb25lbnQsXHJcbiAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1sncm93RGF0YScsIHJvd0RhdGFSZXNwb25zZV1dKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5lbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUubWF4TnVtT2ZTZWxlY3RhYmxlUm93cyAmJlxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMuc21hcnRUYWJsZS5tYXhOdW1PZlNlbGVjdGFibGVSb3dzXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbj8udG9nZ2xlKGVsZW1lbnQpO1xyXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQubmV4dCgpO1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25TZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLm9uU2VsZWN0aW9uKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd01lbnVCdXR0b24oZWxlbWVudDogYW55LCBidXR0b246IFNtYXJ0VGFibGVCdXR0b24pOiBib29sZWFuIHtcclxuICAgIGlmIChidXR0b24ubWVudUl0ZW1CdXR0b25zKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChidXR0b24ubWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwgYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZSEpLmxlbmd0aDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA+IDA7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVGhlIHR5cGUgb2YgcHJvcGVydHkgJHtidXR0b24ubWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lfSBpcyBub3QgYSBsaXN0LmApO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsdWUoZWxlbWVudDogYW55LCBoZWFkZXI6IHN0cmluZyk6IGFueSB7XHJcbiAgICBsZXQgaGVhZGVycyA9IGhlYWRlci5zcGxpdCgnLicpO1xyXG4gICAgaWYgKGhlYWRlcnMubGVuZ3RoID4gMSkge1xyXG4gICAgICBsZXQgdmFsdWU6IGFueSA9IGVsZW1lbnQ7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBoZWFkZXJzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBoZWFkZXJzW2luZGV4XTtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlW2VsZW1lbnRdO1xyXG4gICAgICAgIGlmICghdmFsdWUgJiYgaW5kZXggIT09IGhlYWRlcnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVsZW1lbnRbaGVhZGVyXTtcclxuICB9XHJcblxyXG4gIHNob3dCdXR0b24oYnV0dG9uOiBTbWFydFRhYmxlQnV0dG9uLCBlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChidXR0b24uc2hvd0J1dHRvbklmKSB7XHJcbiAgICAgIHJldHVybiBidXR0b24uc2hvd0J1dHRvbklmKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBpc0Rpc2FibGVkKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5pc1Jvd0Rpc2FibGVkUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgdGhpcy5zbWFydFRhYmxlLmlzUm93RGlzYWJsZWRQcm9wZXJ0eU5hbWUpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0VGFibGUuc2VsZWN0YWJsZVByb3BlcnR5TmFtZSkge1xyXG4gICAgICBjb25zdCBzZWxlY3RhYmxlID0gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KFxyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGFibGVQcm9wZXJ0eU5hbWVcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHNlbGVjdGFibGUgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RhYmxlID09PSBudWxsID8gZmFsc2UgOiAhc2VsZWN0YWJsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzU2VsZWN0ZWQoZWxlbWVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uPy5pc1NlbGVjdGVkKFxyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxyXG4gICAgICAgICAgPyB0aGlzLnNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxyXG4gICAgICAgICAgOiBlbGVtZW50XHJcbiAgICAgICkgPz8gZmFsc2VcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9yaWdpbmFsUHJvcGVydHkoaGVhZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGhlYWRlci5zdGFydHNXaXRoKCdkYXRhLicpKSB7XHJcbiAgICAgIHJldHVybiBoZWFkZXIuc3Vic3RyaW5nKCdkYXRhLicubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBoZWFkZXI7XHJcbiAgfVxyXG5cclxuICBpc0ltYWdlUmVzb3VyY2UoZWxlbWVudDogYW55LCBoZWFkZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCEoJ2ljb25zJyBpbiBlbGVtZW50KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgcHJvcGVydHkgPSB0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKTtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbGVtZW50Lmljb25zKS5zb21lKChrZXkpID0+IGtleSA9PT0gcHJvcGVydHkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VSZXNvdXJjZUljb25zKGVsZW1lbnQ6IGFueSwgaGVhZGVyOiBzdHJpbmcpOiBJbWFnZVJlc291cmNlW10ge1xyXG4gICAgbGV0IGljb25Db2RlcyA9IGVsZW1lbnQuaWNvbnNbdGhpcy5vcmlnaW5hbFByb3BlcnR5KGhlYWRlcildO1xyXG4gICAgcmV0dXJuIGljb25Db2RlcztcclxuICB9XHJcblxyXG4gIGdldEltYWdlUmVzb3VyY2VJY29uKGVsZW1lbnQ6IGFueSwgaGVhZGVyOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQuaWNvbnNbdGhpcy5vcmlnaW5hbFByb3BlcnR5KGhlYWRlcildLmlkZW50aWZpZXI7XHJcbiAgfVxyXG5cclxuICBnZXRJbWFnZVJlc291cmNlQ29sb3IoZWxlbWVudDogYW55LCBoZWFkZXI6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5pY29uc1t0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKV0uY29sb3IgPz8gJ3ByaW1hcnknO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VSZXNvdXJjZVN0eWxlKHJlc291cmNlOiBJbWFnZVJlc291cmNlKTogYW55IHtcclxuICAgIHJldHVybiByZXNvdXJjZS5zdHlsZSA/IHJlc291cmNlLnN0eWxlIDoge307XHJcbiAgfVxyXG5cclxuICBvcGVuRGVmYXVsdEFjdGlvbnNNZW51KHJvdzogYW55KSB7XHJcbiAgICBsZXQgYWN0aW9uQ29kZXNGcm9tUm93ID0gcm93Py5hY3Rpb25zLm1hcCgoYWN0aW9uOiBVaUFjdGlvbikgPT4gYWN0aW9uLmNvZGUpO1xyXG4gICAgbGV0IGZpbHRlcmVkQWN0aW9ucyA9IHRoaXMuc21hcnRUYWJsZS5kZWZhdWx0QWN0aW9ucz8uZmlsdGVyKChhY3Rpb246IFNtYXJ0VGFibGVCdXR0b24pID0+XHJcbiAgICAgIGFjdGlvbkNvZGVzRnJvbVJvdy5pbmNsdWRlcyhhY3Rpb24uY29kZSEpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChmaWx0ZXJlZEFjdGlvbnMgJiYgZmlsdGVyZWRBY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGZpbHRlcmVkQWN0aW9ucy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgICAgIHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKHJvdyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGVmYXVsdEFjdGlvbk1lbnVDb21wb25lbnRzXHJcbiAgICAgICAgLnRvQXJyYXkoKVxyXG4gICAgICAgIC5maW5kKChjb21wOiBEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50KSA9PiBjb21wLnJvdy5pZCA9PT0gcm93LmlkKVxyXG4gICAgICAgID8ub3BlbkRlZmF1bHRBY3Rpb25zTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdEFjdGlvbnNGb3JSb3coZWxlbWVudDogYW55KTogU21hcnRUYWJsZUJ1dHRvbltdIHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCBhY3Rpb25Db2Rlc0Zyb21Sb3cgPSBlbGVtZW50Py5hY3Rpb25zLm1hcCgoYWN0aW9uOiBVaUFjdGlvbikgPT4gYWN0aW9uLmNvZGUpO1xyXG4gICAgaWYgKGFjdGlvbkNvZGVzRnJvbVJvdykge1xyXG4gICAgICByZXR1cm4gdGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zPy5maWx0ZXIoKGFjdGlvbjogU21hcnRUYWJsZUJ1dHRvbikgPT5cclxuICAgICAgICBhY3Rpb25Db2Rlc0Zyb21Sb3cuaW5jbHVkZXMoYWN0aW9uLmNvZGUhKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbn1cclxuIl19
@@ -17,4 +17,4 @@ export var ImageResource;
17
17
  Url: 'URL'
18
18
  };
19
19
  })(ImageResource || (ImageResource = {}));
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VSZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvaW1hZ2VSZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBU0gsTUFBTSxLQUFXLGFBQWEsQ0FPN0I7QUFQRCxXQUFpQixhQUFhO0lBRWIsc0JBQVEsR0FBRztRQUNwQixFQUFFLEVBQUUsSUFBZ0I7UUFDcEIsRUFBRSxFQUFFLElBQWdCO1FBQ3BCLEdBQUcsRUFBRSxLQUFpQjtLQUN6QixDQUFDO0FBQ04sQ0FBQyxFQVBnQixhQUFhLEtBQWIsYUFBYSxRQU83QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmlldyBBUElcbiAqIFZpZXcgQVBJXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMC4wXG4gKiBDb250YWN0OiBpbmZvQGl0NGFsbC5odVxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VSZXNvdXJjZSB7IFxuICAgIGtpbmQ/OiBJbWFnZVJlc291cmNlLktpbmRFbnVtO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgICBpZGVudGlmaWVyPzogc3RyaW5nO1xuICAgIGNvbG9yPzogc3RyaW5nO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBJbWFnZVJlc291cmNlIHtcbiAgICBleHBvcnQgdHlwZSBLaW5kRW51bSA9ICdGRScgfCAnQkUnIHwgJ1VSTCc7XG4gICAgZXhwb3J0IGNvbnN0IEtpbmRFbnVtID0ge1xuICAgICAgICBGZTogJ0ZFJyBhcyBLaW5kRW51bSxcbiAgICAgICAgQmU6ICdCRScgYXMgS2luZEVudW0sXG4gICAgICAgIFVybDogJ1VSTCcgYXMgS2luZEVudW1cbiAgICB9O1xufVxuXG5cbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VSZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvaW1hZ2VSZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBVUgsTUFBTSxLQUFXLGFBQWEsQ0FPN0I7QUFQRCxXQUFpQixhQUFhO0lBRWIsc0JBQVEsR0FBRztRQUNwQixFQUFFLEVBQUUsSUFBZ0I7UUFDcEIsRUFBRSxFQUFFLElBQWdCO1FBQ3BCLEdBQUcsRUFBRSxLQUFpQjtLQUN6QixDQUFDO0FBQ04sQ0FBQyxFQVBnQixhQUFhLEtBQWIsYUFBYSxRQU83QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmlldyBBUElcbiAqIFZpZXcgQVBJXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMC4wXG4gKiBDb250YWN0OiBpbmZvQGl0NGFsbC5odVxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VSZXNvdXJjZSB7IFxuICAgIGtpbmQ/OiBJbWFnZVJlc291cmNlLktpbmRFbnVtO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgICBpZGVudGlmaWVyPzogc3RyaW5nO1xuICAgIGNvbG9yPzogc3RyaW5nO1xuICAgIHN0eWxlPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG59XG5leHBvcnQgbmFtZXNwYWNlIEltYWdlUmVzb3VyY2Uge1xuICAgIGV4cG9ydCB0eXBlIEtpbmRFbnVtID0gJ0ZFJyB8ICdCRScgfCAnVVJMJztcbiAgICBleHBvcnQgY29uc3QgS2luZEVudW0gPSB7XG4gICAgICAgIEZlOiAnRkUnIGFzIEtpbmRFbnVtLFxuICAgICAgICBCZTogJ0JFJyBhcyBLaW5kRW51bSxcbiAgICAgICAgVXJsOiAnVVJMJyBhcyBLaW5kRW51bVxuICAgIH07XG59XG5cblxuIl19
@@ -17,6 +17,7 @@ export const UiActionButtonType = {
17
17
  Icon: 'ICON',
18
18
  MiniFab: 'MINI_FAB',
19
19
  Fab: 'FAB',
20
- Separator: 'SEPARATOR'
20
+ Separator: 'SEPARATOR',
21
+ Submenu: 'SUBMENU'
21
22
  };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlBY3Rpb25CdXR0b25UeXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L2FwaS9tb2RlbC91aUFjdGlvbkJ1dHRvblR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQVFILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLE1BQU0sRUFBRSxRQUE4QjtJQUN0QyxJQUFJLEVBQUUsTUFBNEI7SUFDbEMsT0FBTyxFQUFFLFNBQStCO0lBQ3hDLE1BQU0sRUFBRSxRQUE4QjtJQUN0QyxJQUFJLEVBQUUsTUFBNEI7SUFDbEMsT0FBTyxFQUFFLFVBQWdDO0lBQ3pDLEdBQUcsRUFBRSxLQUEyQjtJQUNoQyxTQUFTLEVBQUUsV0FBaUM7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBWaWV3IEFQSVxyXG4gKiBWaWV3IEFQSVxyXG4gKlxyXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4wLjBcclxuICogQ29udGFjdDogaW5mb0BpdDRhbGwuaHVcclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cclxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXHJcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIERlZmluZXMgdGhlIHR5cGUgb2YgdGhlIGJ1dHRvbi4gXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBVaUFjdGlvbkJ1dHRvblR5cGUgPSAnTk9STUFMJyB8ICdGTEFUJyB8ICdTVFJPS0VEJyB8ICdSQUlTRUQnIHwgJ0lDT04nIHwgJ01JTklfRkFCJyB8ICdGQUInIHwgJ1NFUEFSQVRPUic7XHJcblxyXG5leHBvcnQgY29uc3QgVWlBY3Rpb25CdXR0b25UeXBlID0ge1xyXG4gICAgTm9ybWFsOiAnTk9STUFMJyBhcyBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgICBGbGF0OiAnRkxBVCcgYXMgVWlBY3Rpb25CdXR0b25UeXBlLFxyXG4gICAgU3Ryb2tlZDogJ1NUUk9LRUQnIGFzIFVpQWN0aW9uQnV0dG9uVHlwZSxcclxuICAgIFJhaXNlZDogJ1JBSVNFRCcgYXMgVWlBY3Rpb25CdXR0b25UeXBlLFxyXG4gICAgSWNvbjogJ0lDT04nIGFzIFVpQWN0aW9uQnV0dG9uVHlwZSxcclxuICAgIE1pbmlGYWI6ICdNSU5JX0ZBQicgYXMgVWlBY3Rpb25CdXR0b25UeXBlLFxyXG4gICAgRmFiOiAnRkFCJyBhcyBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgICBTZXBhcmF0b3I6ICdTRVBBUkFUT1InIGFzIFVpQWN0aW9uQnV0dG9uVHlwZVxyXG59O1xyXG5cclxuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlBY3Rpb25CdXR0b25UeXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L2FwaS9tb2RlbC91aUFjdGlvbkJ1dHRvblR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQVFILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLE1BQU0sRUFBRSxRQUE4QjtJQUN0QyxJQUFJLEVBQUUsTUFBNEI7SUFDbEMsT0FBTyxFQUFFLFNBQStCO0lBQ3hDLE1BQU0sRUFBRSxRQUE4QjtJQUN0QyxJQUFJLEVBQUUsTUFBNEI7SUFDbEMsT0FBTyxFQUFFLFVBQWdDO0lBQ3pDLEdBQUcsRUFBRSxLQUEyQjtJQUNoQyxTQUFTLEVBQUUsV0FBaUM7SUFDNUMsT0FBTyxFQUFFLFNBQStCO0NBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZpZXcgQVBJXG4gKiBWaWV3IEFQSVxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjAuMFxuICogQ29udGFjdDogaW5mb0BpdDRhbGwuaHVcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cblxuXG4vKipcbiAqIERlZmluZXMgdGhlIHR5cGUgb2YgdGhlIGJ1dHRvbi4gXG4gKi9cbmV4cG9ydCB0eXBlIFVpQWN0aW9uQnV0dG9uVHlwZSA9ICdOT1JNQUwnIHwgJ0ZMQVQnIHwgJ1NUUk9LRUQnIHwgJ1JBSVNFRCcgfCAnSUNPTicgfCAnTUlOSV9GQUInIHwgJ0ZBQicgfCAnU0VQQVJBVE9SJyB8ICdTVUJNRU5VJztcblxuZXhwb3J0IGNvbnN0IFVpQWN0aW9uQnV0dG9uVHlwZSA9IHtcbiAgICBOb3JtYWw6ICdOT1JNQUwnIGFzIFVpQWN0aW9uQnV0dG9uVHlwZSxcbiAgICBGbGF0OiAnRkxBVCcgYXMgVWlBY3Rpb25CdXR0b25UeXBlLFxuICAgIFN0cm9rZWQ6ICdTVFJPS0VEJyBhcyBVaUFjdGlvbkJ1dHRvblR5cGUsXG4gICAgUmFpc2VkOiAnUkFJU0VEJyBhcyBVaUFjdGlvbkJ1dHRvblR5cGUsXG4gICAgSWNvbjogJ0lDT04nIGFzIFVpQWN0aW9uQnV0dG9uVHlwZSxcbiAgICBNaW5pRmFiOiAnTUlOSV9GQUInIGFzIFVpQWN0aW9uQnV0dG9uVHlwZSxcbiAgICBGYWI6ICdGQUInIGFzIFVpQWN0aW9uQnV0dG9uVHlwZSxcbiAgICBTZXBhcmF0b3I6ICdTRVBBUkFUT1InIGFzIFVpQWN0aW9uQnV0dG9uVHlwZSxcbiAgICBTdWJtZW51OiAnU1VCTUVOVScgYXMgVWlBY3Rpb25CdXR0b25UeXBlXG59O1xuXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFZpZXcgQVBJXHJcbiAqIFZpZXcgQVBJXHJcbiAqXHJcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjAuMFxyXG4gKiBDb250YWN0OiBpbmZvQGl0NGFsbC5odVxyXG4gKlxyXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxyXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcclxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxyXG4gKi9cclxuaW1wb3J0IHsgVmlld0V2ZW50SGFuZGxlciB9IGZyb20gJy4vdmlld0V2ZW50SGFuZGxlcic7XHJcbmltcG9ydCB7IFNtYXJ0TGF5b3V0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NtYXJ0LWZvcm0vYXBpJztcclxuaW1wb3J0IHsgU21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc21hcnQtY29tcG9uZW50LWxheW91dC9hcGknO1xyXG5pbXBvcnQgeyBWaWV3U3RhdGUgfSBmcm9tICcuL3ZpZXdTdGF0ZSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uIH0gZnJvbSAnLi91aUFjdGlvbic7XHJcbmltcG9ydCB7IFZhbHVlU2V0IH0gZnJvbSAnLi92YWx1ZVNldCc7XHJcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi92aWV3VHlwZSc7XHJcbmltcG9ydCB7IFZpZXdDb25zdHJhaW50IH0gZnJvbSAnLi92aWV3Q29uc3RyYWludCc7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWaWV3IHsgXHJcbiAgICAvKipcclxuICAgICAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBWaWV3LlxyXG4gICAgICovXHJcbiAgICB1dWlkOiBzdHJpbmc7XHJcbiAgICB2aWV3TmFtZTogc3RyaW5nO1xyXG4gICAgb2JqZWN0VXJpPzogc3RyaW5nO1xyXG4gICAgYnJhbmNoVXJpPzogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5jb21pbmcgcGFyYW1ldGVycyBvZiB0aGUgdmlldy4gSWYgd2UgcmVzdGFydCB0aGUgZ2l2ZW4gdmlldyB3aXRoIHRoZSBzYW1lIG1vZGVsIHRoZW4gdGhpcyBwYXJhbWV0ZXJzIHJlbWFpbi5cclxuICAgICAqL1xyXG4gICAgcGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YXJpYWJsZSB0byBzdG9yZSB3aGlsZSB0aGUgcGFnZSBpcyBvcGVuZWQuIEl0IHdpbGwgYmUgY2xlYXJlZCBpZiB3ZSBvcGVuIGl0IGFnYWluLlxyXG4gICAgICovXHJcbiAgICB2YXJpYWJsZXM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xyXG4gICAgc3RhdGU6IFZpZXdTdGF0ZTtcclxuICAgIHR5cGU6IFZpZXdUeXBlO1xyXG4gICAgY29udGFpbmVyVXVpZD86IHN0cmluZztcclxuICAgIG1vZGVsPzogb2JqZWN0O1xyXG4gICAgY29uc3RyYWludD86IFZpZXdDb25zdHJhaW50O1xyXG4gICAgY2xvc2VkQ2hpbGRyZW5WaWV3czogQXJyYXk8Vmlldz47XHJcbiAgICBkb3dubG9hZGFibGVJdGVtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH07XHJcbiAgICBhY3Rpb25zOiBBcnJheTxVaUFjdGlvbj47XHJcbiAgICBldmVudEhhbmRsZXJzOiBBcnJheTxWaWV3RXZlbnRIYW5kbGVyPjtcclxuICAgIHdpZGdldE1vZGVsczogeyBba2V5OiBzdHJpbmddOiBvYmplY3Q7IH07XHJcbiAgICB2YWx1ZVNldHM6IHsgW2tleTogc3RyaW5nXTogVmFsdWVTZXQ7IH07XHJcbiAgICBrZWVwTW9kZWxPbkltcGxpY2l0Q2xvc2U/OiBib29sZWFuO1xyXG4gICAgY2FsbGJhY2tzOiB7IFtrZXk6IHN0cmluZ106IG9iamVjdDsgfTtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxheW91dHMgZGVmaW5lZCBpbiB0aGUgdmlldy4gVGhpcyBuYW1lZCBsYXlvdXRzIGNhbiBiZSB1c2VkIGJ5IHRoZSBVSSB0byByZW5kZXJcclxuICAgICAqL1xyXG4gICAgbGF5b3V0czogeyBba2V5OiBzdHJpbmddOiBTbWFydExheW91dERlZmluaXRpb247IH07XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb21wb25lbnRzIGxheW91dHMgZGVmaW5lZCBpbiB0aGUgdmlldy4gVGhpcyBuYW1lZCBsYXlvdXRzIGNhbiBiZSB1c2VkIGJ5IHRoZSBVSSB0byByZW5kZXJcclxuICAgICAqL1xyXG4gICAgY29tcG9uZW50TGF5b3V0czogeyBba2V5OiBzdHJpbmddOiBTbWFydENvbXBvbmVudExheW91dERlZmluaXRpb247IH07XHJcbn1cclxuZXhwb3J0IG5hbWVzcGFjZSBWaWV3IHtcclxufVxyXG5cclxuXHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWaWV3IEFQSVxuICogVmlldyBBUElcbiAqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4wLjBcbiAqIENvbnRhY3Q6IGluZm9AaXQ0YWxsLmh1XG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5pbXBvcnQgeyBWaWV3RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi92aWV3RXZlbnRIYW5kbGVyJztcbmltcG9ydCB7IFNtYXJ0TGF5b3V0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NtYXJ0LWZvcm0vYXBpJztcbmltcG9ydCB7IFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQvYXBpJztcbmltcG9ydCB7IFZpZXdTdGF0ZSB9IGZyb20gJy4vdmlld1N0YXRlJztcbmltcG9ydCB7IFVpQWN0aW9uIH0gZnJvbSAnLi91aUFjdGlvbic7XG5pbXBvcnQgeyBWYWx1ZVNldCB9IGZyb20gJy4vdmFsdWVTZXQnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuL3ZpZXdUeXBlJztcbmltcG9ydCB7IFZpZXdDb25zdHJhaW50IH0gZnJvbSAnLi92aWV3Q29uc3RyYWludCc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBWaWV3IHsgXG4gICAgLyoqXG4gICAgICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIFZpZXcuXG4gICAgICovXG4gICAgdXVpZDogc3RyaW5nO1xuICAgIHZpZXdOYW1lOiBzdHJpbmc7XG4gICAgb2JqZWN0VXJpPzogc3RyaW5nO1xuICAgIGJyYW5jaFVyaT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgaW5jb21pbmcgcGFyYW1ldGVycyBvZiB0aGUgdmlldy4gSWYgd2UgcmVzdGFydCB0aGUgZ2l2ZW4gdmlldyB3aXRoIHRoZSBzYW1lIG1vZGVsIHRoZW4gdGhpcyBwYXJhbWV0ZXJzIHJlbWFpbi5cbiAgICAgKi9cbiAgICBwYXJhbWV0ZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFyaWFibGUgdG8gc3RvcmUgd2hpbGUgdGhlIHBhZ2UgaXMgb3BlbmVkLiBJdCB3aWxsIGJlIGNsZWFyZWQgaWYgd2Ugb3BlbiBpdCBhZ2Fpbi5cbiAgICAgKi9cbiAgICB2YXJpYWJsZXM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgIHN0YXRlOiBWaWV3U3RhdGU7XG4gICAgdHlwZTogVmlld1R5cGU7XG4gICAgY29udGFpbmVyVXVpZD86IHN0cmluZztcbiAgICBtb2RlbD86IG9iamVjdDtcbiAgICBjb25zdHJhaW50PzogVmlld0NvbnN0cmFpbnQ7XG4gICAgY2xvc2VkQ2hpbGRyZW5WaWV3czogQXJyYXk8Vmlldz47XG4gICAgZG93bmxvYWRhYmxlSXRlbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9O1xuICAgIGFjdGlvbnM6IEFycmF5PFVpQWN0aW9uPjtcbiAgICBldmVudEhhbmRsZXJzOiBBcnJheTxWaWV3RXZlbnRIYW5kbGVyPjtcbiAgICB3aWRnZXRNb2RlbHM6IHsgW2tleTogc3RyaW5nXTogb2JqZWN0OyB9O1xuICAgIHdpZGdldFNlcnZlck1vZGVsczogeyBba2V5OiBzdHJpbmddOiBvYmplY3Q7IH07XG4gICAgdmFsdWVTZXRzOiB7IFtrZXk6IHN0cmluZ106IFZhbHVlU2V0OyB9O1xuICAgIGtlZXBNb2RlbE9uSW1wbGljaXRDbG9zZT86IGJvb2xlYW47XG4gICAgY2FsbGJhY2tzOiB7IFtrZXk6IHN0cmluZ106IG9iamVjdDsgfTtcbiAgICAvKipcbiAgICAgKiBUaGUgbGF5b3V0cyBkZWZpbmVkIGluIHRoZSB2aWV3LiBUaGlzIG5hbWVkIGxheW91dHMgY2FuIGJlIHVzZWQgYnkgdGhlIFVJIHRvIHJlbmRlclxuICAgICAqL1xuICAgIGxheW91dHM6IHsgW2tleTogc3RyaW5nXTogU21hcnRMYXlvdXREZWZpbml0aW9uOyB9O1xuICAgIC8qKlxuICAgICAqIFRoZSBjb21wb25lbnRzIGxheW91dHMgZGVmaW5lZCBpbiB0aGUgdmlldy4gVGhpcyBuYW1lZCBsYXlvdXRzIGNhbiBiZSB1c2VkIGJ5IHRoZSBVSSB0byByZW5kZXJcbiAgICAgKi9cbiAgICBjb21wb25lbnRMYXlvdXRzOiB7IFtrZXk6IHN0cmluZ106IFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbjsgfTtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgVmlldyB7XG59XG5cblxuIl19