ng-prime-tools 1.0.3 → 1.0.4

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 (46) hide show
  1. package/README.md +185 -13
  2. package/esm2022/lib/enums/public_api.mjs +2 -1
  3. package/esm2022/lib/enums/search-criteria-type-enum.mjs +10 -0
  4. package/esm2022/lib/models/filter-option.mjs +2 -0
  5. package/esm2022/lib/models/public_api.mjs +3 -1
  6. package/esm2022/lib/models/search-criteria.mjs +2 -0
  7. package/esm2022/lib/multi-search-criteria/index.mjs +6 -0
  8. package/esm2022/lib/multi-search-criteria/multi-search-criteria.component.mjs +128 -0
  9. package/esm2022/lib/multi-search-criteria/multi-search-criteria.module.mjs +48 -0
  10. package/esm2022/lib/multi-search-criteria/public_api.mjs +4 -0
  11. package/esm2022/lib/ng-advanced-prime-table/index.mjs +2 -2
  12. package/esm2022/lib/ng-advanced-prime-table/ng-advanced-prime-table.component.mjs +4 -3
  13. package/esm2022/lib/ng-advanced-prime-table/ng-advanced-prime-table.module.mjs +4 -3
  14. package/esm2022/lib/ng-prime-tools.module.mjs +30 -0
  15. package/esm2022/lib/pipes/custom-date.pipe.mjs +44 -0
  16. package/esm2022/public-api.mjs +3 -1
  17. package/fesm2022/ng-prime-tools.mjs +253 -13
  18. package/fesm2022/ng-prime-tools.mjs.map +1 -1
  19. package/lib/enums/public_api.d.ts +1 -0
  20. package/lib/enums/public_api.d.ts.map +1 -1
  21. package/lib/enums/search-criteria-type-enum.d.ts +9 -0
  22. package/lib/enums/search-criteria-type-enum.d.ts.map +1 -0
  23. package/lib/models/filter-option.d.ts +5 -0
  24. package/lib/models/filter-option.d.ts.map +1 -0
  25. package/lib/models/public_api.d.ts +2 -0
  26. package/lib/models/public_api.d.ts.map +1 -1
  27. package/lib/models/search-criteria.d.ts +11 -0
  28. package/lib/models/search-criteria.d.ts.map +1 -0
  29. package/lib/multi-search-criteria/index.d.ts +6 -0
  30. package/lib/multi-search-criteria/index.d.ts.map +1 -0
  31. package/lib/multi-search-criteria/multi-search-criteria.component.d.ts +24 -0
  32. package/lib/multi-search-criteria/multi-search-criteria.component.d.ts.map +1 -0
  33. package/lib/multi-search-criteria/multi-search-criteria.module.d.ts +16 -0
  34. package/lib/multi-search-criteria/multi-search-criteria.module.d.ts.map +1 -0
  35. package/lib/multi-search-criteria/public_api.d.ts +3 -0
  36. package/lib/multi-search-criteria/public_api.d.ts.map +1 -0
  37. package/lib/ng-advanced-prime-table/index.d.ts +1 -1
  38. package/lib/ng-advanced-prime-table/ng-advanced-prime-table.module.d.ts +13 -12
  39. package/lib/ng-advanced-prime-table/ng-advanced-prime-table.module.d.ts.map +1 -1
  40. package/lib/ng-prime-tools.module.d.ts +11 -0
  41. package/lib/ng-prime-tools.module.d.ts.map +1 -0
  42. package/lib/pipes/custom-date.pipe.d.ts +8 -0
  43. package/lib/pipes/custom-date.pipe.d.ts.map +1 -0
  44. package/package.json +3 -3
  45. package/public-api.d.ts +2 -0
  46. package/public-api.d.ts.map +1 -1
@@ -14,6 +14,7 @@ import * as i9 from "primeng/tag";
14
14
  import * as i10 from "primeng/iconfield";
15
15
  import * as i11 from "primeng/inputicon";
16
16
  import * as i12 from "../pipes/custom-currency";
17
+ import * as i13 from "../pipes/custom-date.pipe";
17
18
  export class NgAdvancedPrimeTableComponent {
18
19
  constructor() {
19
20
  // Inputs
@@ -281,11 +282,11 @@ export class NgAdvancedPrimeTableComponent {
281
282
  return '';
282
283
  }
283
284
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgAdvancedPrimeTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
284
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NgAdvancedPrimeTableComponent, selector: "ng-advanced-prime-table", inputs: { data: "data", columns: "columns", totalRecords: "totalRecords", rowsPerPage: "rowsPerPage", hasSearchFilter: "hasSearchFilter", hasColumnFilter: "hasColumnFilter", isPaginated: "isPaginated", actions: "actions", isSortable: "isSortable" }, outputs: { filter: "filter", search: "search" }, viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n dataKey=\"id\"\n styleClass=\"p-datatable-gridlines\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <p-button\n label=\"Clear\"\n [outlined]=\"true\"\n icon=\"pi pi-filter-slash\"\n (click)=\"clear(dt)\"\n class=\"bt-filter-btn\"\n />\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | date : \"dd/MM/yyyy\" }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i2.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i2.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i2.SaveEditableRow, selector: "[pSaveEditableRow]" }, { kind: "directive", type: i2.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i2.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i6.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i9.Tag, selector: "p-tag", inputs: ["style", "styleClass", "severity", "value", "icon", "rounded"] }, { kind: "component", type: i10.IconField, selector: "p-iconField", inputs: ["iconPosition"] }, { kind: "component", type: i11.InputIcon, selector: "p-inputIcon", inputs: ["styleClass"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i12.CustomCurrencyPipe, name: "customCurrency" }] }); }
285
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NgAdvancedPrimeTableComponent, selector: "ng-advanced-prime-table", inputs: { data: "data", columns: "columns", totalRecords: "totalRecords", rowsPerPage: "rowsPerPage", hasSearchFilter: "hasSearchFilter", hasColumnFilter: "hasColumnFilter", isPaginated: "isPaginated", actions: "actions", isSortable: "isSortable" }, outputs: { filter: "filter", search: "search" }, viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n dataKey=\"id\"\n styleClass=\"p-datatable-gridlines\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <p-button\n label=\"Clear\"\n [outlined]=\"true\"\n icon=\"pi pi-filter-slash\"\n (click)=\"clear(dt)\"\n class=\"bt-filter-btn\"\n />\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | customDate }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i2.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i2.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i2.SaveEditableRow, selector: "[pSaveEditableRow]" }, { kind: "directive", type: i2.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i2.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i6.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i9.Tag, selector: "p-tag", inputs: ["style", "styleClass", "severity", "value", "icon", "rounded"] }, { kind: "component", type: i10.IconField, selector: "p-iconField", inputs: ["iconPosition"] }, { kind: "component", type: i11.InputIcon, selector: "p-inputIcon", inputs: ["styleClass"] }, { kind: "pipe", type: i12.CustomCurrencyPipe, name: "customCurrency" }, { kind: "pipe", type: i13.CustomDatePipe, name: "customDate" }] }); }
285
286
  }
286
287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgAdvancedPrimeTableComponent, decorators: [{
287
288
  type: Component,
288
- args: [{ selector: 'ng-advanced-prime-table', template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n dataKey=\"id\"\n styleClass=\"p-datatable-gridlines\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <p-button\n label=\"Clear\"\n [outlined]=\"true\"\n icon=\"pi pi-filter-slash\"\n (click)=\"clear(dt)\"\n class=\"bt-filter-btn\"\n />\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | date : \"dd/MM/yyyy\" }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}\n"] }]
289
+ args: [{ selector: 'ng-advanced-prime-table', template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n dataKey=\"id\"\n styleClass=\"p-datatable-gridlines\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <p-button\n label=\"Clear\"\n [outlined]=\"true\"\n icon=\"pi pi-filter-slash\"\n (click)=\"clear(dt)\"\n class=\"bt-filter-btn\"\n />\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | customDate }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}\n"] }]
289
290
  }], ctorParameters: () => [], propDecorators: { data: [{
290
291
  type: Input
291
292
  }], columns: [{
@@ -312,4 +313,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
312
313
  type: ViewChild,
313
314
  args: ['dt', { static: false }]
314
315
  }] } });
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYWR2YW5jZWQtcHJpbWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBTzlELE1BQU0sT0FBTyw2QkFBNkI7SUF3Q3hDO1FBdkNBLFNBQVM7UUFDQSxTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQzNCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFDcEIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUVyQyxrREFBa0Q7UUFDeEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFJM0MsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFakIsdUJB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LEVBQUUsQ0FBQztJQUNaLENBQUM7K0dBalRVLDZCQUE2QjttR0FBN0IsNkJBQTZCLG9jQ1YxQyw0N2FBZ1ZBOzs0RkR0VWEsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLHlCQUF5Qjt3REFNMUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFFNkIsRUFBRTtzQkFBckMsU0FBUzt1QkFBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4sIFRhYmxlVHlwZUVudW0gfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmctYWR2YW5jZWQtcHJpbWUtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmctYWR2YW5jZWQtcHJpbWUtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbmctYWR2YW5jZWQtcHJpbWUtdGFibGUuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE5nQWR2YW5jZWRQcmltZVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gSW5wdXRzXG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSByb3dzUGVyUGFnZTogbnVtYmVyW10gPSBbXTtcbiAgQElucHV0KCkgaGFzU2VhcmNoRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhhc0NvbHVtbkZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc1BhZ2luYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBpc1NvcnRhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gT3V0cHV0czogRXZlbnRzIGVtaXR0ZWQgdG8gdGhlIHBhcmVudCBjb21wb25lbnRcbiAgQE91dHB1dCgpIGZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2R0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGR0ITogVGFibGU7XG5cbiAgc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgdmFsaWRDdXJyZW5jeUNvZGVzID0gWydVU0QnLCAnRVVSJywgJ01BRCddO1xuXG4gIC8vIENvbXBvbmVudCBzdGF0ZSBwcm9wZXJ0aWVzXG4gIGlzRGVsZXRlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICByb3dzOiBudW1iZXIgPSAwO1xuXG4gIC8vIERhdGEgbWFuYWdlbWVudCBwcm9wZXJ0aWVzXG4gIGRhdGFNYXAgPSBuZXcgTWFwKCk7XG4gIG1hcCA9IG5ldyBNYXAoKTtcbiAgb3B0aW9uRW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcbiAgb3B0aW9uVmFsdWVzOiBhbnlbXSA9IFtdO1xuICBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gQ1JVRCBvcGVyYXRpb24gaGFuZGxlcnNcbiAgRGVsZXRlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBpbml0RWRpdGFibGVSb3c6IChkYXRhOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgc2F2ZUVkaXRhYmxlUm93OiAoZGF0YTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIGNhbmNlbEVkaXRhYmxlUm93OiAoaXRlbTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFRyYW5zZm9ybSB0aGUgZGF0ZSBmaWVsZHMgYmFzZWQgb24gY29sdW1uIG1ldGFkYXRhXG4gICAgdGhpcy5kYXRhID0gdGhpcy5mb3JtYXRpbmdEYXRlRmllbGRzKCk7XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMgPSB0aGlzLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLmNvZGUgIT09IHVuZGVmaW5lZCAmJiBjb2wuaXNGaWx0ZXIgIT09IGZhbHNlKVxuICAgICAgLm1hcCgoY29sKSA9PiBjb2wuY29kZSBhcyBzdHJpbmcpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLmluaXRpYWxpemVBY3Rpb25zKCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgaXNTb3J0YWJsZVxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVUeXBlRW51bS5BQ1RJT04pIHtcbiAgICAgICAgY29sLmlzRWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgY29sLmlzRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIGNvbC5pc1NvcnRhYmxlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2wuaXNTb3J0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbC5pc1NvcnRhYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbC5pc0VkaXRhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sLmlzRWRpdGFibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sLmlzRmlsdGVyICE9PSBmYWxzZSAmJiBjb2wuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzLnB1c2goY29sLmNvZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gSW5pdGlhbGl6YXRpb24gTWV0aG9kc1xuICBwcml2YXRlIGZvcm1hdGluZ0RhdGVGaWVsZHMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRJdGVtID0geyAuLi5pdGVtIH07XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gVGFibGVUeXBlRW51bS5EQVRFICYmXG4gICAgICAgICAgY29sdW1uLmNvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRyYW5zZm9ybWVkSXRlbVtjb2x1bW4uY29kZV0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBkYXRlVmFsdWUgPSB0aGlzLnBhcnNlRGF0ZSh0cmFuc2Zvcm1lZEl0ZW1bY29sdW1uLmNvZGVdKTtcbiAgICAgICAgICB0cmFuc2Zvcm1lZEl0ZW1bY29sdW1uLmNvZGVdID0gZGF0ZVZhbHVlID8gZGF0ZVZhbHVlIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtZWRJdGVtO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXIodGFibGU6IFRhYmxlKSB7XG4gICAgdGFibGUuY2xlYXIoKTtcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgcGFydHMgPSBkYXRlU3RyaW5nLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgLy8gQXNzdW1pbmcgZGF0ZSBmb3JtYXQgaXMgREQvTU0vWVlZWVxuICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQocGFydHNbMV0sIDEwKSAtIDE7XG4gICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQocGFydHNbMl0sIDEwKTtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcbiAgICAgIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSkgPyBudWxsIDogZGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVQYWdpbmF0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUGFnaW5hdGVkKSB7XG4gICAgICAvLyBDaGVjayBpZiByb3dzUGVyUGFnZSBpcyB1bmRlZmluZWQgb3IgYW4gZW1wdHkgYXJyYXlcbiAgICAgIGlmICghdGhpcy5yb3dzUGVyUGFnZSB8fCB0aGlzLnJvd3NQZXJQYWdlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnJvd3NQZXJQYWdlID0gWzIwLCAzMCwgNDBdO1xuICAgICAgfVxuICAgICAgdGhpcy5yb3dzID0gdGhpcy5yb3dzUGVyUGFnZVswXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVBY3Rpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGlvbnMpIHtcbiAgICAgIHRoaXMuYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24uY29kZSkge1xuICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgICAgICB0aGlzLmlzRGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuRGVsZXRlID0gKHZhbHVlOiBhbnkpID0+IGFjdGlvbi5hY3Rpb24odmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZWRpdCc6XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVFZGl0QWN0aW9ucyhhY3Rpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRoaXMuaXNEZWxldGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNFZGl0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUVkaXRBY3Rpb25zKGFjdGlvbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xuICAgIHRoaXMuaW5pdEVkaXRhYmxlUm93ID0gKGRhdGE6IGFueSkgPT4gYWN0aW9uLmFjdGlvbi5pbml0KGRhdGEpO1xuICAgIHRoaXMuc2F2ZUVkaXRhYmxlUm93ID0gKGRhdGE6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkID0gdGhpcy5tYXAuZ2V0KGRhdGEuaWQpO1xuICAgICAgYWN0aW9uLmFjdGlvbi5zYXZlKGRhdGEsIHJlY29yZCk7XG4gICAgICB0aGlzLmRhdGFNYXAuY2xlYXIoKTtcbiAgICB9O1xuICAgIHRoaXMuY2FuY2VsRWRpdGFibGVSb3cgPSAoaXRlbTogYW55KSA9PiBjb25zb2xlLmxvZyhpdGVtKTtcbiAgfVxuXG4gIG9uQ2hhbmdlKGV2ZW50OiBFdmVudCwgaWQ6IG51bWJlciwga2V5OiBhbnkpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLmNoYW5nZUhhbmRsZXIoaWQsIGtleSwgdGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIGNoYW5nZUhhbmRsZXIoaWQ6IG51bWJlciwga2V5OiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29kZSA9PT0ga2V5KTtcbiAgICBpZiAoIXRoaXMubWFwLmdldChpZCkpIHtcbiAgICAgIGlmIChjb2x1bW4/LnR5cGUgPT09IFRhYmxlVHlwZUVudW0uREFURSkge1xuICAgICAgICBsZXQgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5kYXRhTWFwLnNldChrZXksIGRhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhTWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWFwLnNldChpZCwgbmV3IE1hcCh0aGlzLmRhdGFNYXApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG1hcEl0ZW0gPSB0aGlzLm1hcC5nZXQoaWQpO1xuICAgICAgaWYgKGNvbHVtbj8udHlwZSA9PT0gVGFibGVUeXBlRW51bS5EQVRFKSB7XG4gICAgICAgIGxldCBkYXRlID0gdGhpcy5wYXJzZURhdGUodmFsdWUpO1xuICAgICAgICBtYXBJdGVtLnNldChrZXksIGRhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFwSXRlbS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2x1bW46IFRhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG4gICAgICBjYXNlIFRhYmxlVHlwZUVudW0uU1RSSU5HOlxuICAgICAgICByZXR1cm4gJ3RleHQnO1xuICAgICAgY2FzZSBUYWJsZVR5cGVFbnVtLkFNT1VOVDpcbiAgICAgICAgcmV0dXJuICdudW1lcmljJztcbiAgICAgIGNhc2UgVGFibGVUeXBlRW51bS5OVU1CRVI6XG4gICAgICAgIHJldHVybiAnbnVtZXJpYyc7XG4gICAgICBjYXNlIFRhYmxlVHlwZUVudW0uREFURTpcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIGNhc2UgVGFibGVUeXBlRW51bS5NVUxUSVNFTEVDVDpcbiAgICAgICAgcmV0dXJuICdtdWx0aVNlbGVjdCc7XG4gICAgICBjYXNlIFRhYmxlVHlwZUVudW0uQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuICdib29sZWFuJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndGV4dCc7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGUgQ2hlY2sgTWV0aG9kc1xuICBpc0VkaXRhYmxlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGtleSk7XG4gICAgcmV0dXJuIGNvbHVtbj8uaXNFZGl0YWJsZSAhPT0gZmFsc2U7XG4gIH1cblxuICBpc011bHRpU2VsZWN0KGtleTogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGtleSk7XG4gICAgaWYgKFxuICAgICAgY29sdW1uPy50eXBlID09PSBUYWJsZVR5cGVFbnVtLk1VTFRJU0VMRUNUICYmXG4gICAgICBjb2x1bW4ub3B0aW9ucyAmJlxuICAgICAgY29sdW1uLmNvZGUgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25FbnRyaWVzID0gbmV3IE1hcChbXG4gICAgICAgIFtjb2x1bW4uY29kZSwgT2JqZWN0LnZhbHVlcyhjb2x1bW4ub3B0aW9ucyldLFxuICAgICAgXSk7XG4gICAgICB0aGlzLm9wdGlvblZhbHVlcyA9IHRoaXMub3B0aW9uRW50cmllcy5nZXQoa2V5KSB8fCBbXTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc0RhdGVQaWNrZXIoa2V5OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb2x1bW5zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29kZSA9PT0ga2V5KT8udHlwZSA9PT1cbiAgICAgIFRhYmxlVHlwZUVudW0uREFURVxuICAgICk7XG4gIH1cblxuICAvLyBVdGlsaXR5IE1ldGhvZHNcbiAgZGF0ZUNvbnZlcnRlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnKTtcbiAgfVxuXG4gIGdldEN1cnJlbmN5U3ltYm9sKGNvbHVtbjogVGFibGVDb2x1bW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBjb2x1bW4udHlwZSA9PT0gVGFibGVUeXBlRW51bS5BTU9VTlQgJiZcbiAgICAgIGNvbHVtbi5jdXJyZW5jeSAmJlxuICAgICAgdGhpcy5pc1ZhbGlkQ3VycmVuY3lDb2RlKGNvbHVtbi5jdXJyZW5jeSlcbiAgICAgID8gY29sdW1uLmN1cnJlbmN5XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZEN1cnJlbmN5Q29kZShjdXJyZW5jeUNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkQ3VycmVuY3lDb2Rlcy5pbmNsdWRlcyhjdXJyZW5jeUNvZGUpO1xuICB9XG5cbiAgY3VzdG9tRGF0ZUZpbHRlcih2YWx1ZTogYW55LCBmaWx0ZXI6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghZmlsdGVyIHx8ICF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyRGF0ZSA9IG5ldyBEYXRlKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWVEYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlRGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gZmlsdGVyRGF0ZS50b0RhdGVTdHJpbmcoKTtcbiAgfVxuXG4gIGZpbHRlckdsb2JhbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGZpbHRlcmVkIGRhdGFzZXRcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMuc29tZSgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmNvZGUgPT09IGZpZWxkKTtcbiAgICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbHVtbiB0eXBlc1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IFRhYmxlVHlwZUVudW0uREFURSkge1xuICAgICAgICAgIGNvbnN0IGl0ZW1EYXRlID0gdGhpcy5mb3JtYXREYXRlKGl0ZW1bZmllbGRdKTtcbiAgICAgICAgICByZXR1cm4gaXRlbURhdGUgJiYgaXRlbURhdGUuaW5jbHVkZXModmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGNvbHVtbi50eXBlID09PSBUYWJsZVR5cGVFbnVtLkFNT1VOVCB8fFxuICAgICAgICAgIGNvbHVtbi50eXBlID09PSBUYWJsZVR5cGVFbnVtLk5VTUJFUlxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXRlbVtmaWVsZF0gJiYgaXRlbVtmaWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGl0ZW1bZmllbGRdICYmIGl0ZW1bZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgdGFibGUncyB2YWx1ZVxuICAgIHRoaXMuZHQudmFsdWUgPSBmaWx0ZXJlZERhdGE7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGUoZGF0ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIC8vIEhhbmRsZSBEYXRlIG9iamVjdFxuICAgICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgbW9udGggPSAoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIEhhbmRsZSBzdHJpbmcgZGF0ZVxuICAgICAgY29uc3QgcGFydHMgPSBkYXRlLnNwbGl0KCcvJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHJldHVybiBgJHtwYXJ0c1swXX0vJHtwYXJ0c1sxXX0vJHtwYXJ0c1syXX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFuZGxlIHBhcnRpYWwgZGF0ZXNcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxuICA8ZGl2PlxuICAgIDxwLXRhYmxlXG4gICAgICAjZHRcbiAgICAgIFt2YWx1ZV09XCJkYXRhXCJcbiAgICAgIFtyb3dzXT1cInJvd3NcIlxuICAgICAgW3BhZ2luYXRvcl09XCJpc1BhZ2luYXRlZFwiXG4gICAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlXCJcbiAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtZ3JpZGxpbmVzXCJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCJcbiAgICAgIGVkaXRNb2RlPVwicm93XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDM+VG90YWw6IHt7IHRvdGFsUmVjb3JkcyB9fTwvaDM+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgIGxhYmVsPVwiQ2xlYXJcIlxuICAgICAgICAgICAgICBbb3V0bGluZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS1maWx0ZXItc2xhc2hcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoZHQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidC1maWx0ZXItYnRuXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG9cIiAqbmdJZj1cImhhc1NlYXJjaEZpbHRlclwiPlxuICAgICAgICAgICAgPCEtLSBBZGQgdGhpcyB3cmFwcGVyIGRpdiB3aXRoIG1sLWF1dG8gY2xhc3MgLS0+XG4gICAgICAgICAgICA8cC1pY29uRmllbGQgaWNvblBvc2l0aW9uPVwibGVmdFwiIGNsYXNzPVwibWwtYXV0b1wiPlxuICAgICAgICAgICAgICA8cC1pbnB1dEljb24+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XG4gICAgICAgICAgICAgIDwvcC1pbnB1dEljb24+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlckdsb2JhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBrZXl3b3JkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvcC1pY29uRmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdJZj1cImlzU29ydGFibGUgJiYgY29sLmlzU29ydGFibGUgIT09IGZhbHNlOyBlbHNlIG5vU29ydEhlYWRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx0aCBwU29ydGFibGVDb2x1bW49XCJ7eyBjb2wuY29kZSB9fVwiIHN0eWxlPVwid2lkdGg6IDIwJVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cInt7IGNvbC5jb2RlIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNGaWx0ZXIgIT09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgPT09ICdBTU9VTlQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeV09XCJnZXRDdXJyZW5jeVN5bWJvbChjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudHlwZSAhPT0gJ0FNT1VOVCdcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sLmNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHBUZW1wbGF0ZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1maWx0ZXJDYWxsYmFjaz1cImZpbHRlckNhbGxiYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyQ2FsbGJhY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkZC9tbS95eSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBwVGVtcGxhdGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZmlsdGVyQ2FsbGJhY2s9XCJmaWx0ZXJDYWxsYmFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKSA9PT0gJ211bHRpU2VsZWN0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY29sLmZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNhbGxiYWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheV09XCInY2hpcCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLW11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vU29ydEhlYWRlcj5cbiAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzRmlsdGVyICE9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlID09PSAnQU1PVU5UJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheT1cIm1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3ldPVwiZ2V0Q3VycmVuY3lTeW1ib2woY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgIT09ICdBTU9VTlQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBwVGVtcGxhdGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZmlsdGVyQ2FsbGJhY2s9XCJmaWx0ZXJDYWxsYmFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKSA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1jYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNhbGxiYWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZGQvbW0veXknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgcFRlbXBsYXRlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWZpbHRlckNhbGxiYWNrPVwiZmlsdGVyQ2FsbGJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbCkgPT09ICdtdWx0aVNlbGVjdCdcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbC5maWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJDYWxsYmFjaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiJ2NoaXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1tdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgICAgbGV0LWRhdGFcbiAgICAgICAgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCJcbiAgICAgICAgbGV0LXJpPVwicm93SW5kZXhcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFJlbmRlciBhIHRhYmxlIHJvdyBhbmQgbWFrZSBpdCBlZGl0YWJsZSBpZiBgaXNFZGl0YCBpcyB0cnVlIC0tPlxuICAgICAgICA8dHIgW3BFZGl0YWJsZVJvd109XCJpc0VkaXQgPyBkYXRhIDogbnVsbFwiPlxuICAgICAgICAgIDwhLS0gTG9vcCB0aHJvdWdoIGVhY2ggY29sdW1uIGFuZCByZW5kZXIgY29ycmVzcG9uZGluZyB0YWJsZSBjZWxscyAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jb2RlICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgPCEtLSBDaGVjayBpZiB0aGUgZGF0YSBmb3IgdGhlIGNvbHVtbiBleGlzdHMgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhW2NvbC5jb2RlXSAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBSZW5kZXIgYW4gZWRpdGFibGUgY2VsbCBpZiB0aGUgY29sdW1uIGlzIGVkaXRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImlzRWRpdGFibGUoY29sLmNvZGUpOyBlbHNlIG5vcm1hbFREXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIE11bHRpLXNlbGVjdCBpbnB1dCBmb3IgY29sdW1ucyB0aGF0IGFyZSBtdWx0aS1zZWxlY3RhYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlTZWxlY3QoY29sLmNvZGUpOyBlbHNlIGRhdGVQaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YVtjb2wuY29kZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VIYW5kbGVyKGRhdGEuaWQsIGNvbC5jb2RlLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvblZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpLXNlbGVjdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVjIG9mIGRhdGFbY29sLmNvZGVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFnIFt2YWx1ZV09XCJyZWNcIj48L3AtdGFnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRGF0ZSBwaWNrZXIgaW5wdXQgZm9yIGNvbHVtbnMgdGhhdCByZXF1aXJlIGRhdGUgc2VsZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlUGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0RhdGVQaWNrZXIoY29sLmNvZGUpOyBlbHNlIG5vcm1hbElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJkYXRhW2NvbC5jb2RlXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YVtjb2wuY29kZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlSGFuZGxlcihkYXRhLmlkLCBjb2wuY29kZSwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2RkL21tL3l5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhW2NvbC5jb2RlXSB8IGRhdGUgOiBcImRkL01NL3l5eXlcIiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIE5vcm1hbCB0ZXh0IGlucHV0IGZvciBvdGhlciBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxJbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YVtjb2wuY29kZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgZGF0YS5pZCwgY29sLmNvZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFVzZSBjdXJyZW5jeSBwaXBlIHRvIGZvcm1hdCB0aGUgb3V0cHV0IGZvciBBTU9VTlQgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudHlwZSA9PT0gJ0FNT1VOVCc7IGVsc2Ugbm9ybWFsT3V0cHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2NvbC5jb2RlXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjdXN0b21DdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldEN1cnJlbmN5U3ltYm9sKGNvbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2wuZGVjaW1hbFBsYWNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbE91dHB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YVtjb2wuY29kZV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFJlbmRlciBhIG5vcm1hbCB0YWJsZSBjZWxsIGlmIHRoZSBjb2x1bW4gaXMgbm90IGVkaXRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsVEQ+XG4gICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVXNlIGN1c3RvbUN1cnJlbmN5IHBpcGUgdG8gZm9ybWF0IHRoZSBvdXRwdXQgZm9yIEFNT1VOVCB0eXBlIHdpdGggb3B0aW9uYWwgZGVjaW1hbCBwbGFjZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlID09PSAnQU1PVU5UJzsgZWxzZSBub3JtYWxUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtjb2wuY29kZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjdXN0b21DdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0Q3VycmVuY3lTeW1ib2woY29sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sLmRlY2ltYWxQbGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGFbY29sLmNvZGVdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIFJlbmRlciBhY3Rpb24gYnV0dG9ucyBpZiB0aGVyZSBhcmUgYW55IGFjdGlvbnMgZGVmaW5lZCAtLT5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJhY3Rpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPCEtLSBEZWxldGUgYnV0dG9uIGlmIGRlbGV0aW9uIGlzIGFsbG93ZWQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0RlbGV0ZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJEZWxldGUoZGF0YS5pZClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwhLS0gRWRpdCwgc2F2ZSwgYW5kIGNhbmNlbCBidXR0b25zIGZvciByb3cgZWRpdGluZyAtLT5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBwSW5pdEVkaXRhYmxlUm93XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFlZGl0aW5nXCJcbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5pdEVkaXRhYmxlUm93KGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0aW5nXCJcbiAgICAgICAgICAgICAgICAgIHBTYXZlRWRpdGFibGVSb3dcbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNoZWNrXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRWRpdGFibGVSb3coZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgcENhbmNlbEVkaXRhYmxlUm93XG4gICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsRWRpdGFibGVSb3coZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtdGFibGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYWR2YW5jZWQtcHJpbWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU85RCxNQUFNLE9BQU8sNkJBQTZCO0lBd0N4QztRQXZDQSxTQUFTO1FBQ0EsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUNqQixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUN6QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFckMsa0RBQWtEO1FBQ3hDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSTNDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRWpCLHVC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TyxFQUFFLENBQUM7SUFDWixDQUFDOytHQWpUVSw2QkFBNkI7bUdBQTdCLDZCQUE2QixvY0NWMUMsaTdhQWdWQTs7NEZEdFVhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSx5QkFBeUI7d0RBTTFCLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBRTZCLEVBQUU7c0JBQXJDLFNBQVM7dUJBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uLCBUYWJsZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLWFkdmFuY2VkLXByaW1lLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0FkdmFuY2VkUHJpbWVUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIElucHV0c1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkczogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgcm93c1BlclBhZ2U6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIGhhc1NlYXJjaEZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNDb2x1bW5GaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNQYWdpbmF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aW9uczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaXNTb3J0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE91dHB1dHM6IEV2ZW50cyBlbWl0dGVkIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gIEBPdXRwdXQoKSBmaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAVmlld0NoaWxkKCdkdCcsIHsgc3RhdGljOiBmYWxzZSB9KSBkdCE6IFRhYmxlO1xuXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIHZhbGlkQ3VycmVuY3lDb2RlcyA9IFsnVVNEJywgJ0VVUicsICdNQUQnXTtcblxuICAvLyBDb21wb25lbnQgc3RhdGUgcHJvcGVydGllc1xuICBpc0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0VkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcm93czogbnVtYmVyID0gMDtcblxuICAvLyBEYXRhIG1hbmFnZW1lbnQgcHJvcGVydGllc1xuICBkYXRhTWFwID0gbmV3IE1hcCgpO1xuICBtYXAgPSBuZXcgTWFwKCk7XG4gIG9wdGlvbkVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG4gIG9wdGlvblZhbHVlczogYW55W10gPSBbXTtcbiAgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIENSVUQgb3BlcmF0aW9uIGhhbmRsZXJzXG4gIERlbGV0ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgaW5pdEVkaXRhYmxlUm93OiAoZGF0YTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHNhdmVFZGl0YWJsZVJvdzogKGRhdGE6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBjYW5jZWxFZGl0YWJsZVJvdzogKGl0ZW06IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBUcmFuc2Zvcm0gdGhlIGRhdGUgZmllbGRzIGJhc2VkIG9uIGNvbHVtbiBtZXRhZGF0YVxuICAgIHRoaXMuZGF0YSA9IHRoaXMuZm9ybWF0aW5nRGF0ZUZpZWxkcygpO1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzID0gdGhpcy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5jb2RlICE9PSB1bmRlZmluZWQgJiYgY29sLmlzRmlsdGVyICE9PSBmYWxzZSlcbiAgICAgIC5tYXAoKGNvbCkgPT4gY29sLmNvZGUgYXMgc3RyaW5nKTtcbiAgICB0aGlzLmluaXRpYWxpemVQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQWN0aW9ucygpO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgdmFsdWUgZm9yIGlzU29ydGFibGVcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlVHlwZUVudW0uQUNUSU9OKSB7XG4gICAgICAgIGNvbC5pc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIGNvbC5pc0ZpbHRlciA9IGZhbHNlO1xuICAgICAgICBjb2wuaXNTb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sLmlzU29ydGFibGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2wuaXNTb3J0YWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2wuaXNFZGl0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbC5pc0VkaXRhYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbC5pc0ZpbHRlciAhPT0gZmFsc2UgJiYgY29sLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5wdXNoKGNvbC5jb2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemF0aW9uIE1ldGhvZHNcbiAgcHJpdmF0ZSBmb3JtYXRpbmdEYXRlRmllbGRzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkSXRlbSA9IHsgLi4uaXRlbSB9O1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IFRhYmxlVHlwZUVudW0uREFURSAmJlxuICAgICAgICAgIGNvbHVtbi5jb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0cmFuc2Zvcm1lZEl0ZW1bY29sdW1uLmNvZGVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gdGhpcy5wYXJzZURhdGUodHJhbnNmb3JtZWRJdGVtW2NvbHVtbi5jb2RlXSk7XG4gICAgICAgICAgdHJhbnNmb3JtZWRJdGVtW2NvbHVtbi5jb2RlXSA9IGRhdGVWYWx1ZSA/IGRhdGVWYWx1ZSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkSXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyKHRhYmxlOiBUYWJsZSkge1xuICAgIHRhYmxlLmNsZWFyKCk7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURhdGUoZGF0ZVN0cmluZzogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IHBhcnRzID0gZGF0ZVN0cmluZy5zcGxpdCgnLycpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8vIEFzc3VtaW5nIGRhdGUgZm9ybWF0IGlzIEREL01NL1lZWVlcbiAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCk7XG4gICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KHBhcnRzWzFdLCAxMCkgLSAxO1xuICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KHBhcnRzWzJdLCAxMCk7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XG4gICAgICByZXR1cm4gaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gbnVsbCA6IGRhdGU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1BhZ2luYXRlZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgcm93c1BlclBhZ2UgaXMgdW5kZWZpbmVkIG9yIGFuIGVtcHR5IGFycmF5XG4gICAgICBpZiAoIXRoaXMucm93c1BlclBhZ2UgfHwgdGhpcy5yb3dzUGVyUGFnZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5yb3dzUGVyUGFnZSA9IFsyMCwgMzAsIDQwXTtcbiAgICAgIH1cbiAgICAgIHRoaXMucm93cyA9IHRoaXMucm93c1BlclBhZ2VbMF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQWN0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3Rpb25zKSB7XG4gICAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLmNvZGUpIHtcbiAgICAgICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICAgICAgdGhpcy5pc0RlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLkRlbGV0ZSA9ICh2YWx1ZTogYW55KSA9PiBhY3Rpb24uYWN0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplRWRpdEFjdGlvbnMoYWN0aW9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLmlzRGVsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVFZGl0QWN0aW9ucyhhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0ID0gdHJ1ZTtcbiAgICB0aGlzLmluaXRFZGl0YWJsZVJvdyA9IChkYXRhOiBhbnkpID0+IGFjdGlvbi5hY3Rpb24uaW5pdChkYXRhKTtcbiAgICB0aGlzLnNhdmVFZGl0YWJsZVJvdyA9IChkYXRhOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMubWFwLmdldChkYXRhLmlkKTtcbiAgICAgIGFjdGlvbi5hY3Rpb24uc2F2ZShkYXRhLCByZWNvcmQpO1xuICAgICAgdGhpcy5kYXRhTWFwLmNsZWFyKCk7XG4gICAgfTtcbiAgICB0aGlzLmNhbmNlbEVkaXRhYmxlUm93ID0gKGl0ZW06IGFueSkgPT4gY29uc29sZS5sb2coaXRlbSk7XG4gIH1cblxuICBvbkNoYW5nZShldmVudDogRXZlbnQsIGlkOiBudW1iZXIsIGtleTogYW55KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgdGhpcy5jaGFuZ2VIYW5kbGVyKGlkLCBrZXksIHRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBjaGFuZ2VIYW5kbGVyKGlkOiBudW1iZXIsIGtleTogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgbGV0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGtleSk7XG4gICAgaWYgKCF0aGlzLm1hcC5nZXQoaWQpKSB7XG4gICAgICBpZiAoY29sdW1uPy50eXBlID09PSBUYWJsZVR5cGVFbnVtLkRBVEUpIHtcbiAgICAgICAgbGV0IGRhdGUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuZGF0YU1hcC5zZXQoa2V5LCBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YU1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcC5zZXQoaWQsIG5ldyBNYXAodGhpcy5kYXRhTWFwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBtYXBJdGVtID0gdGhpcy5tYXAuZ2V0KGlkKTtcbiAgICAgIGlmIChjb2x1bW4/LnR5cGUgPT09IFRhYmxlVHlwZUVudW0uREFURSkge1xuICAgICAgICBsZXQgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgbWFwSXRlbS5zZXQoa2V5LCBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcEl0ZW0uc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENvbHVtbkZpbHRlclR5cGUoY29sdW1uOiBUYWJsZUNvbHVtbik6IHN0cmluZyB7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSBUYWJsZVR5cGVFbnVtLlNUUklORzpcbiAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgIGNhc2UgVGFibGVUeXBlRW51bS5BTU9VTlQ6XG4gICAgICAgIHJldHVybiAnbnVtZXJpYyc7XG4gICAgICBjYXNlIFRhYmxlVHlwZUVudW0uTlVNQkVSOlxuICAgICAgICByZXR1cm4gJ251bWVyaWMnO1xuICAgICAgY2FzZSBUYWJsZVR5cGVFbnVtLkRBVEU6XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICBjYXNlIFRhYmxlVHlwZUVudW0uTVVMVElTRUxFQ1Q6XG4gICAgICAgIHJldHVybiAnbXVsdGlTZWxlY3QnO1xuICAgICAgY2FzZSBUYWJsZVR5cGVFbnVtLkJPT0xFQU46XG4gICAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3RleHQnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRlIENoZWNrIE1ldGhvZHNcbiAgaXNFZGl0YWJsZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2RlID09PSBrZXkpO1xuICAgIHJldHVybiBjb2x1bW4/LmlzRWRpdGFibGUgIT09IGZhbHNlO1xuICB9XG5cbiAgaXNNdWx0aVNlbGVjdChrZXk6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2RlID09PSBrZXkpO1xuICAgIGlmIChcbiAgICAgIGNvbHVtbj8udHlwZSA9PT0gVGFibGVUeXBlRW51bS5NVUxUSVNFTEVDVCAmJlxuICAgICAgY29sdW1uLm9wdGlvbnMgJiZcbiAgICAgIGNvbHVtbi5jb2RlICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMub3B0aW9uRW50cmllcyA9IG5ldyBNYXAoW1xuICAgICAgICBbY29sdW1uLmNvZGUsIE9iamVjdC52YWx1ZXMoY29sdW1uLm9wdGlvbnMpXSxcbiAgICAgIF0pO1xuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSB0aGlzLm9wdGlvbkVudHJpZXMuZ2V0KGtleSkgfHwgW107XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNEYXRlUGlja2VyKGtleTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGtleSk/LnR5cGUgPT09XG4gICAgICBUYWJsZVR5cGVFbnVtLkRBVEVcbiAgICApO1xuICB9XG5cbiAgLy8gVXRpbGl0eSBNZXRob2RzXG4gIGRhdGVDb252ZXJ0ZXIodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJyk7XG4gIH1cblxuICBnZXRDdXJyZW5jeVN5bWJvbChjb2x1bW46IFRhYmxlQ29sdW1uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29sdW1uLnR5cGUgPT09IFRhYmxlVHlwZUVudW0uQU1PVU5UICYmXG4gICAgICBjb2x1bW4uY3VycmVuY3kgJiZcbiAgICAgIHRoaXMuaXNWYWxpZEN1cnJlbmN5Q29kZShjb2x1bW4uY3VycmVuY3kpXG4gICAgICA/IGNvbHVtbi5jdXJyZW5jeVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRDdXJyZW5jeUNvZGUoY3VycmVuY3lDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZEN1cnJlbmN5Q29kZXMuaW5jbHVkZXMoY3VycmVuY3lDb2RlKTtcbiAgfVxuXG4gIGN1c3RvbURhdGVGaWx0ZXIodmFsdWU6IGFueSwgZmlsdGVyOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWZpbHRlciB8fCAhdmFsdWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlckRhdGUgPSBuZXcgRGF0ZShmaWx0ZXIpO1xuICAgIGNvbnN0IHZhbHVlRGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblxuICAgIHJldHVybiB2YWx1ZURhdGUudG9EYXRlU3RyaW5nKCkgPT09IGZpbHRlckRhdGUudG9EYXRlU3RyaW5nKCk7XG4gIH1cblxuICBmaWx0ZXJHbG9iYWwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBmaWx0ZXJlZCBkYXRhc2V0XG4gICAgY29uc3QgZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzLnNvbWUoKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5jb2RlID09PSBmaWVsZCk7XG4gICAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb2x1bW4gdHlwZXNcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBUYWJsZVR5cGVFbnVtLkRBVEUpIHtcbiAgICAgICAgICBjb25zdCBpdGVtRGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShpdGVtW2ZpZWxkXSk7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1EYXRlICYmIGl0ZW1EYXRlLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gVGFibGVUeXBlRW51bS5BTU9VTlQgfHxcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gVGFibGVUeXBlRW51bS5OVU1CRVJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGl0ZW1bZmllbGRdICYmIGl0ZW1bZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpdGVtW2ZpZWxkXSAmJiBpdGVtW2ZpZWxkXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHRhYmxlJ3MgdmFsdWVcbiAgICB0aGlzLmR0LnZhbHVlID0gZmlsdGVyZWREYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRlKGRhdGU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gJyc7XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAvLyBIYW5kbGUgRGF0ZSBvYmplY3RcbiAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gKGRhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBIYW5kbGUgc3RyaW5nIGRhdGVcbiAgICAgIGNvbnN0IHBhcnRzID0gZGF0ZS5zcGxpdCgnLycpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICByZXR1cm4gYCR7cGFydHNbMF19LyR7cGFydHNbMV19LyR7cGFydHNbMl19YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEhhbmRsZSBwYXJ0aWFsIGRhdGVzXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cbiAgPGRpdj5cbiAgICA8cC10YWJsZVxuICAgICAgI2R0XG4gICAgICBbdmFsdWVdPVwiZGF0YVwiXG4gICAgICBbcm93c109XCJyb3dzXCJcbiAgICAgIFtwYWdpbmF0b3JdPVwiaXNQYWdpbmF0ZWRcIlxuICAgICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxuICAgICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZVwiXG4gICAgICBkYXRhS2V5PVwiaWRcIlxuICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLWdyaWRsaW5lc1wiXG4gICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiXG4gICAgICBlZGl0TW9kZT1cInJvd1wiXG4gICAgPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgzPlRvdGFsOiB7eyB0b3RhbFJlY29yZHMgfX08L2gzPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICBsYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgICAgW291dGxpbmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktZmlsdGVyLXNsYXNoXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKGR0KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnQtZmlsdGVyLWJ0blwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1hdXRvXCIgKm5nSWY9XCJoYXNTZWFyY2hGaWx0ZXJcIj5cbiAgICAgICAgICAgIDwhLS0gQWRkIHRoaXMgd3JhcHBlciBkaXYgd2l0aCBtbC1hdXRvIGNsYXNzIC0tPlxuICAgICAgICAgICAgPHAtaWNvbkZpZWxkIGljb25Qb3NpdGlvbj1cImxlZnRcIiBjbGFzcz1cIm1sLWF1dG9cIj5cbiAgICAgICAgICAgICAgPHAtaW5wdXRJY29uPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgICA8L3AtaW5wdXRJY29uPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJHbG9iYWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2gga2V5d29yZFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3AtaWNvbkZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc1NvcnRhYmxlICYmIGNvbC5pc1NvcnRhYmxlICE9PSBmYWxzZTsgZWxzZSBub1NvcnRIZWFkZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dGggcFNvcnRhYmxlQ29sdW1uPVwie3sgY29sLmNvZGUgfX1cIiBzdHlsZT1cIndpZHRoOiAyMCVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJ7eyBjb2wuY29kZSB9fVwiIC8+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzRmlsdGVyICE9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlID09PSAnQU1PVU5UJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheT1cIm1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3ldPVwiZ2V0Q3VycmVuY3lTeW1ib2woY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgIT09ICdBTU9VTlQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBwVGVtcGxhdGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZmlsdGVyQ2FsbGJhY2s9XCJmaWx0ZXJDYWxsYmFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKSA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1jYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNhbGxiYWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZGQvbW0veXknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgcFRlbXBsYXRlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWZpbHRlckNhbGxiYWNrPVwiZmlsdGVyQ2FsbGJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbCkgPT09ICdtdWx0aVNlbGVjdCdcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbC5maWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJDYWxsYmFjaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiJ2NoaXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1tdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1NvcnRIZWFkZXI+XG4gICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc0ZpbHRlciAhPT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudHlwZSA9PT0gJ0FNT1VOVCdcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sLmNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5XT1cImdldEN1cnJlbmN5U3ltYm9sKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlICE9PSAnQU1PVU5UJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheT1cIm1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgcFRlbXBsYXRlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWZpbHRlckNhbGxiYWNrPVwiZmlsdGVyQ2FsbGJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbCkgPT09ICdkYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJDYWxsYmFjaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2RkL21tL3l5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHBUZW1wbGF0ZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1maWx0ZXJDYWxsYmFjaz1cImZpbHRlckNhbGxiYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpID09PSAnbXVsdGlTZWxlY3QnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjb2wuZmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyQ2FsbGJhY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5XT1cIidjaGlwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tbXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgICAgIGxldC1kYXRhXG4gICAgICAgIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiXG4gICAgICAgIGxldC1yaT1cInJvd0luZGV4XCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBSZW5kZXIgYSB0YWJsZSByb3cgYW5kIG1ha2UgaXQgZWRpdGFibGUgaWYgYGlzRWRpdGAgaXMgdHJ1ZSAtLT5cbiAgICAgICAgPHRyIFtwRWRpdGFibGVSb3ddPVwiaXNFZGl0ID8gZGF0YSA6IG51bGxcIj5cbiAgICAgICAgICA8IS0tIExvb3AgdGhyb3VnaCBlYWNoIGNvbHVtbiBhbmQgcmVuZGVyIGNvcnJlc3BvbmRpbmcgdGFibGUgY2VsbHMgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY29kZSAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICAgIDwhLS0gQ2hlY2sgaWYgdGhlIGRhdGEgZm9yIHRoZSBjb2x1bW4gZXhpc3RzIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVtjb2wuY29kZV0gIT09IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gUmVuZGVyIGFuIGVkaXRhYmxlIGNlbGwgaWYgdGhlIGNvbHVtbiBpcyBlZGl0YWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJpc0VkaXRhYmxlKGNvbC5jb2RlKTsgZWxzZSBub3JtYWxURFwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBNdWx0aS1zZWxlY3QgaW5wdXQgZm9yIGNvbHVtbnMgdGhhdCBhcmUgbXVsdGktc2VsZWN0YWJsZSAtLT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc011bHRpU2VsZWN0KGNvbC5jb2RlKTsgZWxzZSBkYXRlUGlja2VyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImRhdGFbY29sLmNvZGVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlSGFuZGxlcihkYXRhLmlkLCBjb2wuY29kZSwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25WYWx1ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdWx0aS1zZWxlY3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlYyBvZiBkYXRhW2NvbC5jb2RlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhZyBbdmFsdWVdPVwicmVjXCI+PC9wLXRhZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIERhdGUgcGlja2VyIGlucHV0IGZvciBjb2x1bW5zIHRoYXQgcmVxdWlyZSBkYXRlIHNlbGVjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNEYXRlUGlja2VyKGNvbC5jb2RlKTsgZWxzZSBub3JtYWxJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiZGF0YVtjb2wuY29kZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImRhdGFbY29sLmNvZGVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUhhbmRsZXIoZGF0YS5pZCwgY29sLmNvZGUsICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkZC9tbS95eSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YVtjb2wuY29kZV0gfCBjdXN0b21EYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gTm9ybWFsIHRleHQgaW5wdXQgZm9yIG90aGVyIGNvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbElucHV0PlxuICAgICAgICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJkYXRhW2NvbC5jb2RlXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBkYXRhLmlkLCBjb2wuY29kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVXNlIGN1cnJlbmN5IHBpcGUgdG8gZm9ybWF0IHRoZSBvdXRwdXQgZm9yIEFNT1VOVCB0eXBlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlID09PSAnQU1PVU5UJzsgZWxzZSBub3JtYWxPdXRwdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbY29sLmNvZGVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGN1c3RvbUN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0Q3VycmVuY3lTeW1ib2woY29sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbC5kZWNpbWFsUGxhY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsT3V0cHV0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhW2NvbC5jb2RlXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgICAgIDwhLS0gUmVuZGVyIGEgbm9ybWFsIHRhYmxlIGNlbGwgaWYgdGhlIGNvbHVtbiBpcyBub3QgZWRpdGFibGUgLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxURD5cbiAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBVc2UgY3VzdG9tQ3VycmVuY3kgcGlwZSB0byBmb3JtYXQgdGhlIG91dHB1dCBmb3IgQU1PVU5UIHR5cGUgd2l0aCBvcHRpb25hbCBkZWNpbWFsIHBsYWNlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgPT09ICdBTU9VTlQnOyBlbHNlIG5vcm1hbFRleHRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2NvbC5jb2RlXVxuICAgICAgICAgICAgICAgICAgICAgICAgICB8IGN1c3RvbUN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRDdXJyZW5jeVN5bWJvbChjb2wpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2wuZGVjaW1hbFBsYWNlc1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YVtjb2wuY29kZV0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gUmVuZGVyIGFjdGlvbiBidXR0b25zIGlmIHRoZXJlIGFyZSBhbnkgYWN0aW9ucyBkZWZpbmVkIC0tPlxuICAgICAgICAgIDx0ZCAqbmdJZj1cImFjdGlvbnM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8IS0tIERlbGV0ZSBidXR0b24gaWYgZGVsZXRpb24gaXMgYWxsb3dlZCAtLT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRGVsZXRlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkRlbGV0ZShkYXRhLmlkKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPCEtLSBFZGl0LCBzYXZlLCBhbmQgY2FuY2VsIGJ1dHRvbnMgZm9yIHJvdyBlZGl0aW5nIC0tPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHBJbml0RWRpdGFibGVSb3dcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWVkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktcGVuY2lsXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbml0RWRpdGFibGVSb3coZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgcFNhdmVFZGl0YWJsZVJvd1xuICAgICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVFZGl0YWJsZVJvdyhkYXRhKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgICBwQ2FuY2VsRWRpdGFibGVSb3dcbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxFZGl0YWJsZVJvdyhkYXRhKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10YWJsZT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -11,10 +11,11 @@ import { TagModule } from 'primeng/tag';
11
11
  import { CustomCurrencyPipe } from '../pipes/custom-currency';
12
12
  import { IconFieldModule } from 'primeng/iconfield';
13
13
  import { InputIconModule } from 'primeng/inputicon';
14
+ import { CustomDatePipe } from '../pipes/custom-date.pipe';
14
15
  import * as i0 from "@angular/core";
15
16
  export class NgAdvancedPrimeTableModule {
16
17
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgAdvancedPrimeTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
17
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: NgAdvancedPrimeTableModule, declarations: [NgAdvancedPrimeTableComponent], imports: [CommonModule,
18
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: NgAdvancedPrimeTableModule, declarations: [NgAdvancedPrimeTableComponent, CustomDatePipe], imports: [CommonModule,
18
19
  TableModule,
19
20
  InputTextModule,
20
21
  ButtonModule,
@@ -39,7 +40,7 @@ export class NgAdvancedPrimeTableModule {
39
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgAdvancedPrimeTableModule, decorators: [{
40
41
  type: NgModule,
41
42
  args: [{
42
- declarations: [NgAdvancedPrimeTableComponent],
43
+ declarations: [NgAdvancedPrimeTableComponent, CustomDatePipe],
43
44
  imports: [
44
45
  CommonModule,
45
46
  TableModule,
@@ -56,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
56
57
  exports: [NgAdvancedPrimeTableComponent],
57
58
  }]
58
59
  }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYWR2YW5jZWQtcHJpbWUtdGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQW1CcEQsTUFBTSxPQUFPLDBCQUEwQjsrR0FBMUIsMEJBQTBCO2dIQUExQiwwQkFBMEIsaUJBaEJ0Qiw2QkFBNkIsYUFFMUMsWUFBWTtZQUNaLFdBQVc7WUFDWCxlQUFlO1lBQ2YsWUFBWTtZQUNaLGNBQWM7WUFDZCxXQUFXO1lBQ1gsaUJBQWlCO1lBQ2pCLFNBQVM7WUFDVCxrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLGVBQWUsYUFFUCw2QkFBNkI7Z0hBRTVCLDBCQUEwQixZQWRuQyxZQUFZO1lBQ1osV0FBVztZQUNYLGVBQWU7WUFDZixZQUFZO1lBQ1osY0FBYztZQUNkLFdBQVc7WUFDWCxpQkFBaUI7WUFDakIsU0FBUztZQUVULGVBQWU7WUFDZixlQUFlOzs0RkFJTiwwQkFBMEI7a0JBakJ0QyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLDZCQUE2QixDQUFDO29CQUM3QyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixTQUFTO3dCQUNULGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdBZHZhbmNlZFByaW1lVGFibGVDb21wb25lbnQgfSBmcm9tICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBDYWxlbmRhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2FsZW5kYXInO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUYWdNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhZyc7XG5pbXBvcnQgeyBDdXN0b21DdXJyZW5jeVBpcGUgfSBmcm9tICcuLi9waXBlcy9jdXN0b20tY3VycmVuY3knO1xuaW1wb3J0IHsgSWNvbkZpZWxkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pY29uZmllbGQnO1xuaW1wb3J0IHsgSW5wdXRJY29uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dGljb24nO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtOZ0FkdmFuY2VkUHJpbWVUYWJsZUNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVGFibGVNb2R1bGUsXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBDYWxlbmRhck1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNdWx0aVNlbGVjdE1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgQ3VzdG9tQ3VycmVuY3lQaXBlLFxuICAgIEljb25GaWVsZE1vZHVsZSxcbiAgICBJbnB1dEljb25Nb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtOZ0FkdmFuY2VkUHJpbWVUYWJsZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIE5nQWR2YW5jZWRQcmltZVRhYmxlTW9kdWxlIHt9XG4iXX0=
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYWR2YW5jZWQtcHJpbWUtdGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFtQjNELE1BQU0sT0FBTywwQkFBMEI7K0dBQTFCLDBCQUEwQjtnSEFBMUIsMEJBQTBCLGlCQWhCdEIsNkJBQTZCLEVBQUUsY0FBYyxhQUUxRCxZQUFZO1lBQ1osV0FBVztZQUNYLGVBQWU7WUFDZixZQUFZO1lBQ1osY0FBYztZQUNkLFdBQVc7WUFDWCxpQkFBaUI7WUFDakIsU0FBUztZQUNULGtCQUFrQjtZQUNsQixlQUFlO1lBQ2YsZUFBZSxhQUVQLDZCQUE2QjtnSEFFNUIsMEJBQTBCLFlBZG5DLFlBQVk7WUFDWixXQUFXO1lBQ1gsZUFBZTtZQUNmLFlBQVk7WUFDWixjQUFjO1lBQ2QsV0FBVztZQUNYLGlCQUFpQjtZQUNqQixTQUFTO1lBRVQsZUFBZTtZQUNmLGVBQWU7OzRGQUlOLDBCQUEwQjtrQkFqQnRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsNkJBQTZCLEVBQUUsY0FBYyxDQUFDO29CQUM3RCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixTQUFTO3dCQUNULGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdBZHZhbmNlZFByaW1lVGFibGVDb21wb25lbnQgfSBmcm9tICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBDYWxlbmRhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2FsZW5kYXInO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUYWdNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhZyc7XG5pbXBvcnQgeyBDdXN0b21DdXJyZW5jeVBpcGUgfSBmcm9tICcuLi9waXBlcy9jdXN0b20tY3VycmVuY3knO1xuaW1wb3J0IHsgSWNvbkZpZWxkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pY29uZmllbGQnO1xuaW1wb3J0IHsgSW5wdXRJY29uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dGljb24nO1xuaW1wb3J0IHsgQ3VzdG9tRGF0ZVBpcGUgfSBmcm9tICcuLi9waXBlcy9jdXN0b20tZGF0ZS5waXBlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTmdBZHZhbmNlZFByaW1lVGFibGVDb21wb25lbnQsIEN1c3RvbURhdGVQaXBlXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUYWJsZU1vZHVsZSxcbiAgICBJbnB1dFRleHRNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhbGVuZGFyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE11bHRpU2VsZWN0TW9kdWxlLFxuICAgIFRhZ01vZHVsZSxcbiAgICBDdXN0b21DdXJyZW5jeVBpcGUsXG4gICAgSWNvbkZpZWxkTW9kdWxlLFxuICAgIElucHV0SWNvbk1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW05nQWR2YW5jZWRQcmltZVRhYmxlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTmdBZHZhbmNlZFByaW1lVGFibGVNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { NgAdvancedPrimeTableModule } from './ng-advanced-prime-table/ng-advanced-prime-table.module';
5
+ import { MultiSearchCriteriaModule } from './multi-search-criteria/multi-search-criteria.module';
6
+ import * as i0 from "@angular/core";
7
+ export class NgPrimeToolsModule {
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgPrimeToolsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: NgPrimeToolsModule, imports: [CommonModule,
10
+ FormsModule,
11
+ NgAdvancedPrimeTableModule,
12
+ MultiSearchCriteriaModule], exports: [NgAdvancedPrimeTableModule, MultiSearchCriteriaModule] }); }
13
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgPrimeToolsModule, imports: [CommonModule,
14
+ FormsModule,
15
+ NgAdvancedPrimeTableModule,
16
+ MultiSearchCriteriaModule, NgAdvancedPrimeTableModule, MultiSearchCriteriaModule] }); }
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgPrimeToolsModule, decorators: [{
19
+ type: NgModule,
20
+ args: [{
21
+ imports: [
22
+ CommonModule,
23
+ FormsModule,
24
+ NgAdvancedPrimeTableModule,
25
+ MultiSearchCriteriaModule,
26
+ ],
27
+ exports: [NgAdvancedPrimeTableModule, MultiSearchCriteriaModule],
28
+ }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcHJpbWUtdG9vbHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9uZy1wcmltZS10b29scy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOztBQVdqRyxNQUFNLE9BQU8sa0JBQWtCOytHQUFsQixrQkFBa0I7Z0hBQWxCLGtCQUFrQixZQVAzQixZQUFZO1lBQ1osV0FBVztZQUNYLDBCQUEwQjtZQUMxQix5QkFBeUIsYUFFakIsMEJBQTBCLEVBQUUseUJBQXlCO2dIQUVwRCxrQkFBa0IsWUFQM0IsWUFBWTtZQUNaLFdBQVc7WUFDWCwwQkFBMEI7WUFDMUIseUJBQXlCLEVBRWpCLDBCQUEwQixFQUFFLHlCQUF5Qjs7NEZBRXBELGtCQUFrQjtrQkFUOUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLDBCQUEwQjt3QkFDMUIseUJBQXlCO3FCQUMxQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSx5QkFBeUIsQ0FBQztpQkFDakUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdBZHZhbmNlZFByaW1lVGFibGVNb2R1bGUgfSBmcm9tICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLm1vZHVsZSc7XG5pbXBvcnQgeyBNdWx0aVNlYXJjaENyaXRlcmlhTW9kdWxlIH0gZnJvbSAnLi9tdWx0aS1zZWFyY2gtY3JpdGVyaWEvbXVsdGktc2VhcmNoLWNyaXRlcmlhLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdBZHZhbmNlZFByaW1lVGFibGVNb2R1bGUsXG4gICAgTXVsdGlTZWFyY2hDcml0ZXJpYU1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW05nQWR2YW5jZWRQcmltZVRhYmxlTW9kdWxlLCBNdWx0aVNlYXJjaENyaXRlcmlhTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdQcmltZVRvb2xzTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,44 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CustomDatePipe {
4
+ transform(value, format = 'dd/MM/yyyy') {
5
+ if (!value)
6
+ return null;
7
+ if (typeof value === 'string') {
8
+ const parts = value.split('/');
9
+ if (parts.length === 3) {
10
+ const day = parseInt(parts[0], 10);
11
+ const month = parseInt(parts[1], 10) - 1;
12
+ const year = parseInt(parts[2], 10);
13
+ const date = new Date(year, month, day);
14
+ if (isNaN(date.getTime()))
15
+ return null;
16
+ const options = {
17
+ year: 'numeric',
18
+ month: '2-digit',
19
+ day: '2-digit',
20
+ };
21
+ return new Intl.DateTimeFormat('en-GB', options).format(date);
22
+ }
23
+ }
24
+ else if (value instanceof Date) {
25
+ // If the value is already a Date object
26
+ const options = {
27
+ year: 'numeric',
28
+ month: '2-digit',
29
+ day: '2-digit',
30
+ };
31
+ return new Intl.DateTimeFormat('en-GB', options).format(value);
32
+ }
33
+ return null;
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CustomDatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
36
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: CustomDatePipe, name: "customDate" }); }
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CustomDatePipe, decorators: [{
39
+ type: Pipe,
40
+ args: [{
41
+ name: 'customDate',
42
+ }]
43
+ }] });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWRhdGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcGlwZXMvY3VzdG9tLWRhdGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLGNBQWM7SUFDekIsU0FBUyxDQUFDLEtBQVUsRUFBRSxTQUFpQixZQUFZO1FBQ2pELElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFeEIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBRXhDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQztnQkFFdkMsTUFBTSxPQUFPLEdBQStCO29CQUMxQyxJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsU0FBUztvQkFDaEIsR0FBRyxFQUFFLFNBQVM7aUJBQ2YsQ0FBQztnQkFDRixPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDakMsd0NBQXdDO1lBQ3hDLE1BQU0sT0FBTyxHQUErQjtnQkFDMUMsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEdBQUcsRUFBRSxTQUFTO2FBQ2YsQ0FBQztZQUNGLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0FoQ1UsY0FBYzs2R0FBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUgxQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxZQUFZO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnY3VzdG9tRGF0ZScsXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBmb3JtYXQ6IHN0cmluZyA9ICdkZC9NTS95eXl5Jyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJy8nKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChwYXJ0c1sxXSwgMTApIC0gMTtcbiAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KHBhcnRzWzJdLCAxMCk7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblxuICAgICAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBvcHRpb25zOiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IHtcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1HQicsIG9wdGlvbnMpLmZvcm1hdChkYXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSBEYXRlIG9iamVjdFxuICAgICAgY29uc3Qgb3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7XG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1HQicsIG9wdGlvbnMpLmZvcm1hdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,7 @@
1
1
  // projects/ng-prime-tools/src/public-api.ts
2
2
  export * from './lib/ng-advanced-prime-table';
3
+ export * from './lib/multi-search-criteria';
4
+ export * from './lib/ng-prime-tools.module';
3
5
  export * from './lib/models';
4
6
  export * from './lib/enums';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRDQUE0QztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL3B1YmxpYy1hcGkudHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbnVtcyc7XG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRDQUE0QztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHByb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9wdWJsaWMtYXBpLnRzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZy1hZHZhbmNlZC1wcmltZS10YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tdWx0aS1zZWFyY2gtY3JpdGVyaWEnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctcHJpbWUtdG9vbHMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbnVtcyc7XG4iXX0=