@coreui/angular-pro 4.3.15 → 4.3.18
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.
- package/README.md +1 -1
- package/esm2020/lib/accordion/accordion/accordion.component.mjs +3 -3
- package/esm2020/lib/accordion/accordion-button/accordion-button.directive.mjs +3 -3
- package/esm2020/lib/accordion/accordion-item/accordion-item.component.mjs +3 -3
- package/esm2020/lib/accordion/accordion.module.mjs +4 -4
- package/esm2020/lib/accordion/accordion.service.mjs +3 -3
- package/esm2020/lib/alert/alert-heading.directive.mjs +3 -3
- package/esm2020/lib/alert/alert-link.directive.mjs +3 -3
- package/esm2020/lib/alert/alert.component.mjs +3 -3
- package/esm2020/lib/alert/alert.module.mjs +4 -4
- package/esm2020/lib/avatar/avatar.component.mjs +3 -3
- package/esm2020/lib/avatar/avatar.module.mjs +4 -4
- package/esm2020/lib/backdrop/backdrop.service.mjs +3 -3
- package/esm2020/lib/badge/badge.component.mjs +3 -3
- package/esm2020/lib/badge/badge.module.mjs +4 -4
- package/esm2020/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2020/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +3 -3
- package/esm2020/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +3 -3
- package/esm2020/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +3 -3
- package/esm2020/lib/breadcrumb/breadcrumb.module.mjs +4 -4
- package/esm2020/lib/button/button-close.directive.mjs +3 -3
- package/esm2020/lib/button/button.directive.mjs +3 -3
- package/esm2020/lib/button/button.module.mjs +4 -4
- package/esm2020/lib/button-group/button-group/button-group.component.mjs +3 -3
- package/esm2020/lib/button-group/button-group.module.mjs +4 -4
- package/esm2020/lib/button-group/button-toolbar/button-toolbar.component.mjs +3 -3
- package/esm2020/lib/calendar/calendar/calendar-class-view.pipe.mjs +3 -3
- package/esm2020/lib/calendar/calendar/calendar.component.mjs +3 -3
- package/esm2020/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +3 -3
- package/esm2020/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +3 -3
- package/esm2020/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +3 -3
- package/esm2020/lib/calendar/calendar-month/calendar-day-title.pipe.mjs +3 -3
- package/esm2020/lib/calendar/calendar-month/calendar-day.directive.mjs +3 -3
- package/esm2020/lib/calendar/calendar-month/calendar-day.pipe.mjs +3 -3
- package/esm2020/lib/calendar/calendar-month/calendar-month.component.mjs +3 -3
- package/esm2020/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +3 -3
- package/esm2020/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +3 -3
- package/esm2020/lib/calendar/calendar.module.mjs +4 -4
- package/esm2020/lib/calendar/calendar.service.mjs +3 -3
- package/esm2020/lib/callout/callout.component.mjs +3 -3
- package/esm2020/lib/callout/callout.module.mjs +4 -4
- package/esm2020/lib/card/card-body.component.mjs +3 -3
- package/esm2020/lib/card/card-footer.component.mjs +3 -3
- package/esm2020/lib/card/card-group.component.mjs +3 -3
- package/esm2020/lib/card/card-header-actions.component.mjs +3 -3
- package/esm2020/lib/card/card-header.component.mjs +3 -3
- package/esm2020/lib/card/card-img-overlay/card-img-overlay.component.mjs +3 -3
- package/esm2020/lib/card/card-img.directive.mjs +3 -3
- package/esm2020/lib/card/card-link.directive.mjs +3 -3
- package/esm2020/lib/card/card-subtitle.directive.mjs +3 -3
- package/esm2020/lib/card/card-text.directive.mjs +3 -3
- package/esm2020/lib/card/card-title.directive.mjs +3 -3
- package/esm2020/lib/card/card.component.mjs +3 -3
- package/esm2020/lib/card/card.module.mjs +4 -4
- package/esm2020/lib/carousel/carousel/carousel.component.mjs +3 -3
- package/esm2020/lib/carousel/carousel-caption/carousel-caption.component.mjs +3 -3
- package/esm2020/lib/carousel/carousel-control/carousel-control.component.mjs +3 -3
- package/esm2020/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +3 -3
- package/esm2020/lib/carousel/carousel-inner/carousel-inner.component.mjs +3 -3
- package/esm2020/lib/carousel/carousel-item/carousel-item.component.mjs +3 -3
- package/esm2020/lib/carousel/carousel-state.mjs +3 -3
- package/esm2020/lib/carousel/carousel.config.mjs +3 -3
- package/esm2020/lib/carousel/carousel.module.mjs +4 -4
- package/esm2020/lib/carousel/carousel.service.mjs +3 -3
- package/esm2020/lib/collapse/collapse.directive.mjs +3 -3
- package/esm2020/lib/collapse/collapse.module.mjs +4 -4
- package/esm2020/lib/date-picker/date-picker.component.mjs +3 -3
- package/esm2020/lib/date-picker/date-picker.module.mjs +4 -4
- package/esm2020/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +3 -3
- package/esm2020/lib/date-range-picker/date-range-picker.module.mjs +4 -4
- package/esm2020/lib/dropdown/dropdown/dropdown.component.mjs +6 -6
- package/esm2020/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +3 -3
- package/esm2020/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +3 -3
- package/esm2020/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +3 -3
- package/esm2020/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +3 -3
- package/esm2020/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +3 -3
- package/esm2020/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +3 -3
- package/esm2020/lib/dropdown/dropdown.module.mjs +4 -4
- package/esm2020/lib/dropdown/dropdown.service.mjs +3 -3
- package/esm2020/lib/element-cover/element-cover.component.mjs +3 -3
- package/esm2020/lib/element-cover/element-cover.module.mjs +4 -4
- package/esm2020/lib/footer/footer.component.mjs +3 -3
- package/esm2020/lib/footer/footer.module.mjs +4 -4
- package/esm2020/lib/form/form/form.directive.mjs +3 -3
- package/esm2020/lib/form/form-check/form-check-input.directive.mjs +3 -3
- package/esm2020/lib/form/form-check/form-check-label.directive.mjs +3 -3
- package/esm2020/lib/form/form-check/form-check.component.mjs +3 -3
- package/esm2020/lib/form/form-control/form-control.directive.mjs +3 -3
- package/esm2020/lib/form/form-feedback/form-feedback.component.mjs +3 -3
- package/esm2020/lib/form/form-floating/form-floating.directive.mjs +3 -3
- package/esm2020/lib/form/form-label/form-label.directive.mjs +3 -3
- package/esm2020/lib/form/form-select/form-select.directive.mjs +3 -3
- package/esm2020/lib/form/form-text/form-text.directive.mjs +3 -3
- package/esm2020/lib/form/form.module.mjs +4 -4
- package/esm2020/lib/form/input-group/input-group.component.mjs +3 -3
- package/esm2020/lib/form/input-group-text/input-group-text.directive.mjs +3 -3
- package/esm2020/lib/grid/col.component.mjs +3 -3
- package/esm2020/lib/grid/col.directive.mjs +3 -3
- package/esm2020/lib/grid/container.component.mjs +3 -3
- package/esm2020/lib/grid/grid.module.mjs +4 -4
- package/esm2020/lib/grid/gutter.directive.mjs +3 -3
- package/esm2020/lib/grid/row.component.mjs +3 -3
- package/esm2020/lib/grid/row.directive.mjs +3 -3
- package/esm2020/lib/header/header/header.component.mjs +3 -3
- package/esm2020/lib/header/header-brand/header-brand.component.mjs +3 -3
- package/esm2020/lib/header/header-divider/header-divider.component.mjs +3 -3
- package/esm2020/lib/header/header-nav/header-nav.component.mjs +3 -3
- package/esm2020/lib/header/header-text/header-text.component.mjs +3 -3
- package/esm2020/lib/header/header-toggler/header-toggler.directive.mjs +3 -3
- package/esm2020/lib/header/header.module.mjs +4 -4
- package/esm2020/lib/image/img.directive.mjs +3 -3
- package/esm2020/lib/image/img.module.mjs +4 -4
- package/esm2020/lib/list-group/list-group-item.directive.mjs +3 -3
- package/esm2020/lib/list-group/list-group.directive.mjs +3 -3
- package/esm2020/lib/list-group/list-group.module.mjs +4 -4
- package/esm2020/lib/loading-button/loading-button.component.mjs +3 -3
- package/esm2020/lib/loading-button/loading-button.module.mjs +4 -4
- package/esm2020/lib/modal/modal/modal.component.mjs +3 -3
- package/esm2020/lib/modal/modal-body/modal-body.component.mjs +3 -3
- package/esm2020/lib/modal/modal-content/modal-content.component.mjs +3 -3
- package/esm2020/lib/modal/modal-dialog/modal-dialog.component.mjs +3 -3
- package/esm2020/lib/modal/modal-dismiss/modal-toggle.directive.mjs +3 -3
- package/esm2020/lib/modal/modal-footer/modal-footer.component.mjs +3 -3
- package/esm2020/lib/modal/modal-header/modal-header.component.mjs +3 -3
- package/esm2020/lib/modal/modal-title/modal-title.directive.mjs +3 -3
- package/esm2020/lib/modal/modal.module.mjs +4 -4
- package/esm2020/lib/modal/modal.service.mjs +3 -3
- package/esm2020/lib/multi-select/multi-select/multi-select-search.directive.mjs +68 -0
- package/esm2020/lib/multi-select/multi-select/multi-select.component.mjs +612 -175
- package/esm2020/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +5 -5
- package/esm2020/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +3 -3
- package/esm2020/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +7 -7
- package/esm2020/lib/multi-select/multi-select-option/multi-select-option.component.mjs +194 -59
- package/esm2020/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +15 -8
- package/esm2020/lib/multi-select/multi-select.module.mjs +13 -9
- package/esm2020/lib/multi-select/multi-select.service.mjs +27 -10
- package/esm2020/lib/multi-select/multi-select.type.mjs +1 -1
- package/esm2020/lib/multi-select/public_api.mjs +1 -1
- package/esm2020/lib/nav/nav-item.component.mjs +3 -3
- package/esm2020/lib/nav/nav-link.directive.mjs +3 -3
- package/esm2020/lib/nav/nav.component.mjs +3 -3
- package/esm2020/lib/nav/nav.module.mjs +4 -4
- package/esm2020/lib/navbar/navbar-brand/navbar-brand.directive.mjs +3 -3
- package/esm2020/lib/navbar/navbar-nav/navbar-nav.component.mjs +3 -3
- package/esm2020/lib/navbar/navbar-text/navbar-text.component.mjs +3 -3
- package/esm2020/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +3 -3
- package/esm2020/lib/navbar/navbar.component.mjs +3 -3
- package/esm2020/lib/navbar/navbar.module.mjs +4 -4
- package/esm2020/lib/offcanvas/offcanvas/offcanvas.component.mjs +3 -3
- package/esm2020/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +3 -3
- package/esm2020/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +3 -3
- package/esm2020/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +3 -3
- package/esm2020/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +3 -3
- package/esm2020/lib/offcanvas/offcanvas.module.mjs +4 -4
- package/esm2020/lib/offcanvas/offcanvas.service.mjs +3 -3
- package/esm2020/lib/pagination/page-item/page-item.component.mjs +3 -3
- package/esm2020/lib/pagination/page-item/page-item.directive.mjs +3 -3
- package/esm2020/lib/pagination/page-link/page-link.directive.mjs +3 -3
- package/esm2020/lib/pagination/pagination/pagination.component.mjs +3 -3
- package/esm2020/lib/pagination/pagination.module.mjs +4 -4
- package/esm2020/lib/placeholder/placeholder-animation.directive.mjs +3 -3
- package/esm2020/lib/placeholder/placeholder.directive.mjs +3 -3
- package/esm2020/lib/placeholder/placeholder.module.mjs +4 -4
- package/esm2020/lib/popover/popover/popover.component.mjs +3 -3
- package/esm2020/lib/popover/popover.directive.mjs +3 -3
- package/esm2020/lib/popover/popover.module.mjs +4 -4
- package/esm2020/lib/progress/progress-bar.component.mjs +3 -3
- package/esm2020/lib/progress/progress.component.mjs +3 -3
- package/esm2020/lib/progress/progress.module.mjs +4 -4
- package/esm2020/lib/services/class-toggle.service.mjs +3 -3
- package/esm2020/lib/services/intersection.service.mjs +3 -3
- package/esm2020/lib/services/listeners.service.mjs +3 -3
- package/esm2020/lib/shared/html-attr.directive.mjs +3 -3
- package/esm2020/lib/shared/shared.module.mjs +4 -4
- package/esm2020/lib/shared/template-id.directive.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar/sidebar.component.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-header/sidebar-header.component.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-group.service.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +6 -6
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +6 -6
- package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +6 -6
- package/esm2020/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar-toggler/sidebar-toggler.component.mjs +3 -3
- package/esm2020/lib/sidebar/sidebar.module.mjs +4 -4
- package/esm2020/lib/sidebar/sidebar.service.mjs +3 -3
- package/esm2020/lib/smart-pagination/smart-pagination.component.mjs +3 -3
- package/esm2020/lib/smart-pagination/smart-pagination.module.mjs +4 -4
- package/esm2020/lib/smart-table/smart-table/smart-table.component.mjs +32 -24
- package/esm2020/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs +3 -3
- package/esm2020/lib/smart-table/smart-table-filter/filter-input.directive.mjs +3 -3
- package/esm2020/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +3 -3
- package/esm2020/lib/smart-table/smart-table-head/smart-table-head.component.mjs +6 -6
- package/esm2020/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +3 -3
- package/esm2020/lib/smart-table/smart-table.module.mjs +4 -4
- package/esm2020/lib/smart-table/smart-table.type.mjs +1 -1
- package/esm2020/lib/spinner/spinner.component.mjs +3 -3
- package/esm2020/lib/spinner/spinner.module.mjs +4 -4
- package/esm2020/lib/table/table-active.directive.mjs +3 -3
- package/esm2020/lib/table/table-color.directive.mjs +3 -3
- package/esm2020/lib/table/table.directive.mjs +3 -3
- package/esm2020/lib/table/table.module.mjs +4 -4
- package/esm2020/lib/tabs/tab-content/tab-content.component.mjs +3 -3
- package/esm2020/lib/tabs/tab-content-ref.directive.mjs +3 -3
- package/esm2020/lib/tabs/tab-pane/tab-pane.component.mjs +3 -3
- package/esm2020/lib/tabs/tab.service.mjs +3 -3
- package/esm2020/lib/tabs/tabs.module.mjs +4 -4
- package/esm2020/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +6 -6
- package/esm2020/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +6 -6
- package/esm2020/lib/time-picker/time-picker.component.mjs +3 -3
- package/esm2020/lib/time-picker/time-picker.module.mjs +4 -4
- package/esm2020/lib/toast/toast/toast.component.mjs +3 -3
- package/esm2020/lib/toast/toast-body/toast-body.component.mjs +3 -3
- package/esm2020/lib/toast/toast-close.directive.mjs +3 -3
- package/esm2020/lib/toast/toast-header/toast-header.component.mjs +3 -3
- package/esm2020/lib/toast/toast.module.mjs +4 -4
- package/esm2020/lib/toast/toaster/toaster-host.directive.mjs +3 -3
- package/esm2020/lib/toast/toaster/toaster.component.mjs +3 -3
- package/esm2020/lib/toast/toaster/toaster.service.mjs +3 -3
- package/esm2020/lib/tooltip/tooltip/tooltip.component.mjs +3 -3
- package/esm2020/lib/tooltip/tooltip.directive.mjs +3 -3
- package/esm2020/lib/tooltip/tooltip.module.mjs +4 -4
- package/esm2020/lib/utilities/align.directive.mjs +3 -3
- package/esm2020/lib/utilities/bg-color.directive.mjs +3 -3
- package/esm2020/lib/utilities/border.directive.mjs +3 -3
- package/esm2020/lib/utilities/rounded.directive.mjs +3 -3
- package/esm2020/lib/utilities/text-color.directive.mjs +3 -3
- package/esm2020/lib/utilities/utilities.module.mjs +4 -4
- package/esm2020/lib/widget/widget-stat-a/widget-stat-a.component.mjs +3 -3
- package/esm2020/lib/widget/widget-stat-b/widget-stat-b.component.mjs +3 -3
- package/esm2020/lib/widget/widget-stat-c/widget-stat-c.component.mjs +3 -3
- package/esm2020/lib/widget/widget-stat-d/widget-stat-d.component.mjs +3 -3
- package/esm2020/lib/widget/widget-stat-e/widget-stat-e.component.mjs +3 -3
- package/esm2020/lib/widget/widget-stat-f/widget-stat-f.component.mjs +3 -3
- package/esm2020/lib/widget/widget.module.mjs +4 -4
- package/fesm2015/coreui-angular-pro.mjs +1726 -1052
- package/fesm2015/coreui-angular-pro.mjs.map +1 -1
- package/fesm2020/coreui-angular-pro.mjs +1707 -1041
- package/fesm2020/coreui-angular-pro.mjs.map +1 -1
- package/lib/multi-select/multi-select/multi-select-search.directive.d.ts +15 -0
- package/lib/multi-select/multi-select/multi-select.component.d.ts +160 -27
- package/lib/multi-select/multi-select-option/multi-select-option.component.d.ts +58 -16
- package/lib/multi-select/multi-select-tag/multi-select-tag.component.d.ts +5 -2
- package/lib/multi-select/multi-select.module.d.ts +8 -6
- package/lib/multi-select/multi-select.service.d.ts +14 -7
- package/lib/multi-select/multi-select.type.d.ts +4 -2
- package/lib/multi-select/public_api.d.ts +1 -0
- package/lib/smart-table/smart-table/smart-table.component.d.ts +8 -6
- package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +2 -2
- package/lib/smart-table/smart-table.type.d.ts +7 -7
- package/package.json +1 -1
|
@@ -78,7 +78,7 @@ export class SmartTableComponent {
|
|
|
78
78
|
return this._clickableRows;
|
|
79
79
|
}
|
|
80
80
|
set columns(value) {
|
|
81
|
-
this._columns = value;
|
|
81
|
+
this._columns = value.map(column => typeof column === 'string' ? { key: column } : { ...column });
|
|
82
82
|
}
|
|
83
83
|
get columns() {
|
|
84
84
|
return this._columns || this.rawColumnNames;
|
|
@@ -216,34 +216,40 @@ export class SmartTableComponent {
|
|
|
216
216
|
return Object.keys(this._items ? this._items[0] ?? {} : {}).filter((el) => el.charAt(0) !== '_');
|
|
217
217
|
}
|
|
218
218
|
get rawColumnNames() {
|
|
219
|
-
return this._columns ? this._columns.map(
|
|
219
|
+
return this._columns ? this._columns.map(column => typeof column === 'object' ? column.key : column)
|
|
220
220
|
: this.genCols;
|
|
221
221
|
}
|
|
222
222
|
get itemsDataColumns() {
|
|
223
223
|
return this.rawColumnNames.filter((name) => this.genCols.includes(name));
|
|
224
224
|
}
|
|
225
225
|
get sortedItems() {
|
|
226
|
-
const
|
|
227
|
-
if (!
|
|
228
|
-
!this.itemsDataColumns.includes(
|
|
226
|
+
const columnKey = this.sorterValue.column;
|
|
227
|
+
if (!columnKey ||
|
|
228
|
+
!this.itemsDataColumns.includes(columnKey) ||
|
|
229
229
|
(this.columnSorter &&
|
|
230
230
|
typeof this.columnSorter === 'object' &&
|
|
231
231
|
this.columnSorter.external)) {
|
|
232
232
|
return this.tableFiltered;
|
|
233
233
|
}
|
|
234
|
-
|
|
235
|
-
//
|
|
234
|
+
const tableFiltered = [...this.tableFiltered];
|
|
235
|
+
// if values in column are to be sorted by numeric value they all have to be a type of number
|
|
236
236
|
const flip = this.sorterValue.state === 'asc' ? 1 : this.sorterValue.state === 'desc' ? -1 : 0;
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
const
|
|
237
|
+
if (flip === 0) {
|
|
238
|
+
return tableFiltered;
|
|
239
|
+
}
|
|
240
|
+
const currentColumn = this.columns.find((column) => typeof column === 'object' && column.key === columnKey);
|
|
241
|
+
if (typeof currentColumn === 'object' && typeof currentColumn.sorter === 'function') {
|
|
242
|
+
const sorted = tableFiltered.slice().sort(currentColumn.sorter);
|
|
243
|
+
return flip < 0 ? sorted.reverse() : sorted;
|
|
244
|
+
}
|
|
245
|
+
const compareFn = (item1, item2) => {
|
|
246
|
+
const value1 = item1[columnKey];
|
|
247
|
+
const value2 = item2[columnKey];
|
|
248
|
+
const a = typeof value1 === 'number' ? value1 : String(value1).toLowerCase();
|
|
243
249
|
const b = typeof value2 === 'number' ? value2 : String(value2).toLowerCase();
|
|
244
250
|
return a > b ? 1 * flip : b > a ? -1 * flip : 0;
|
|
245
|
-
}
|
|
246
|
-
return
|
|
251
|
+
};
|
|
252
|
+
return tableFiltered.slice().sort(compareFn);
|
|
247
253
|
}
|
|
248
254
|
get tableFilterEvent() {
|
|
249
255
|
return (typeof this.tableFilter === 'object' && this.tableFilter.lazy) ? 'change' : 'input';
|
|
@@ -255,7 +261,6 @@ export class SmartTableComponent {
|
|
|
255
261
|
typeof this.columnFilter === 'object' &&
|
|
256
262
|
this.columnFilter.external) {
|
|
257
263
|
this._columnFiltered = _items;
|
|
258
|
-
// @ts-ignore
|
|
259
264
|
return _items;
|
|
260
265
|
}
|
|
261
266
|
Object.entries(this.columnFilterState).forEach(([key, value]) => {
|
|
@@ -263,14 +268,17 @@ export class SmartTableComponent {
|
|
|
263
268
|
_items = _items.filter((item) => value(item[key]));
|
|
264
269
|
return;
|
|
265
270
|
}
|
|
271
|
+
const currentColumn = this.columns.find(column => typeof column === 'object' && column.key === key);
|
|
272
|
+
if (typeof currentColumn === 'object' && typeof currentColumn.filter === 'function') {
|
|
273
|
+
_items = _items.filter((item) => (typeof currentColumn.filter === 'function' && currentColumn.filter(item, value)) ?? !value);
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
266
276
|
const columnFilter = String(value).toLowerCase();
|
|
267
277
|
if (columnFilter && this.itemsDataColumns.includes(key)) {
|
|
268
|
-
// @ts-ignore
|
|
269
278
|
_items = _items.filter((item) => String(item[key]).toLowerCase().includes(columnFilter));
|
|
270
279
|
}
|
|
271
280
|
});
|
|
272
281
|
this._columnFiltered = _items;
|
|
273
|
-
// @ts-ignore
|
|
274
282
|
return _items;
|
|
275
283
|
}
|
|
276
284
|
get tableFiltered() {
|
|
@@ -401,8 +409,8 @@ export class SmartTableComponent {
|
|
|
401
409
|
return props;
|
|
402
410
|
}
|
|
403
411
|
tableDataCellClasses(item, colName) {
|
|
404
|
-
const column = this.columns.filter((column) => column['key'] === colName);
|
|
405
|
-
return column[0]
|
|
412
|
+
const column = this.columns.filter((column) => typeof column === 'string' ? column === colName : column['key'] === colName);
|
|
413
|
+
return column[0] && typeof column[0] === 'object' ? column[0]._classes : undefined;
|
|
406
414
|
}
|
|
407
415
|
getColumnName($event) {
|
|
408
416
|
const target = $event.target;
|
|
@@ -433,9 +441,9 @@ export class SmartTableComponent {
|
|
|
433
441
|
}
|
|
434
442
|
}
|
|
435
443
|
}
|
|
436
|
-
SmartTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
437
|
-
SmartTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: SmartTableComponent, selector: "c-smart-table", inputs: { activePage: "activePage", cleaner: "cleaner", clickableRows: "clickableRows", columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: "footer", header: "header", items: "items", itemsPerPage: "itemsPerPage", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: "pagination", selectable: "selectable", sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner\" class=\"row my-2 mx-0\">\n <ng-template [ngIf]=\"tableFilter || cleaner\">\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\"></ng-container>\n </div>\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\"></ng-container>\n </div>\n </ng-template>\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n [tabindex]=\"0\"\n cButton\n variant=\"ghost\"\n color=\"transparent\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\n </button>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered\"\n [borderless]=\"tableProps?.borderless\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small\"\n [striped]=\"tableProps?.striped\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilter]=\"columnFilter\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [cAlign]=\"tableHeadProps?.align\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [cAlign]=\"tableFootProps?.align\"\n component=\"tfoot\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n ></c-element-cover>\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\">\n </c-smart-pagination>\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n >\n </c-smart-table-items-per-page-selector>\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\n </td>\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\n </tbody>\n</ng-template>\n\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\n <td\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: i3.TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }, { kind: "directive", type: i4.TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: i5.TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "component", type: i6.SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "directive", type: i7.FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "directive", type: i9.HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "directive", type: i10.AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "component", type: i11.SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "sizing"] }, { kind: "component", type: i12.SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "component", type: i13.SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "selectable", "selectAll", "sorterValue", "columnFilterTemplates"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }, { kind: "directive", type: i14.FilterInputDirective, selector: "[cFilterInput]", inputs: ["delay", "onEvent", "value"], outputs: ["valueChange"], exportAs: ["cFilterInput"] }] });
|
|
438
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
444
|
+
SmartTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: SmartTableComponent, deps: [{ token: i0.IterableDiffers }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Component });
|
|
445
|
+
SmartTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.4", type: SmartTableComponent, selector: "c-smart-table", inputs: { activePage: "activePage", cleaner: "cleaner", clickableRows: "clickableRows", columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: "footer", header: "header", items: "items", itemsPerPage: "itemsPerPage", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: "pagination", selectable: "selectable", sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner\" class=\"row my-2 mx-0\">\n <ng-template [ngIf]=\"tableFilter || cleaner\">\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\"></ng-container>\n </div>\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\"></ng-container>\n </div>\n </ng-template>\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n [tabindex]=\"0\"\n cButton\n variant=\"ghost\"\n color=\"transparent\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\n </button>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered\"\n [borderless]=\"tableProps?.borderless\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small\"\n [striped]=\"tableProps?.striped\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilter]=\"columnFilter\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [cAlign]=\"tableHeadProps?.align\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [cAlign]=\"tableFootProps?.align\"\n component=\"tfoot\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n ></c-element-cover>\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\">\n </c-smart-pagination>\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n >\n </c-smart-table-items-per-page-selector>\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\n </td>\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\n </tbody>\n</ng-template>\n\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\n <td\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: i3.TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }, { kind: "directive", type: i4.TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: i5.TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "component", type: i6.SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "directive", type: i7.FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "directive", type: i9.HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "directive", type: i10.AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "component", type: i11.SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "sizing"] }, { kind: "component", type: i12.SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "component", type: i13.SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "selectable", "selectAll", "sorterValue", "columnFilterTemplates"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }, { kind: "directive", type: i14.FilterInputDirective, selector: "[cFilterInput]", inputs: ["delay", "onEvent", "value"], outputs: ["valueChange"], exportAs: ["cFilterInput"] }] });
|
|
446
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: SmartTableComponent, decorators: [{
|
|
439
447
|
type: Component,
|
|
440
448
|
args: [{ selector: 'c-smart-table', exportAs: 'cSmartTable', template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner\" class=\"row my-2 mx-0\">\n <ng-template [ngIf]=\"tableFilter || cleaner\">\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\"></ng-container>\n </div>\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\"></ng-container>\n </div>\n </ng-template>\n\n <ng-template #tableFilterTemplate>\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n *ngIf=\"tableFilter\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n >\n </c-smart-table-filter>\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n <button\n (click)=\"clean($event)\"\n *ngIf=\"cleaner\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n [tabindex]=\"0\"\n cButton\n variant=\"ghost\"\n color=\"transparent\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\n </button>\n </ng-template>\n</div>\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered\"\n [borderless]=\"tableProps?.borderless\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small\"\n [striped]=\"tableProps?.striped\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n cTable\n >\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"header\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilter]=\"columnFilter\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [cAlign]=\"tableHeadProps?.align\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\n\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n *ngIf=\"footer\"\n [columns]=\"columns\"\n [selectAll]=\"selectedAll\"\n [selectable]=\"selectable\"\n [columnSorter]=\"columnSorter\"\n [sorterValue]=\"sorterValue\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [cAlign]=\"tableFootProps?.align\"\n component=\"tfoot\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n ></c-smart-table-head>\n\n </table>\n <c-element-cover\n *ngIf=\"loading\"\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n ></c-element-cover>\n</div>\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\n <div class=\"row\">\n <div class=\"col\">\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n *ngIf=\"pagination && numberOfPages > 1\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\">\n </c-smart-pagination>\n </div>\n <div class=\"col-auto ms-auto\">\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n *ngIf=\"itemsPerPageSelect\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n >\n </c-smart-table-items-per-page-selector>\n </div>\n </div>\n</ng-template>\n\n<ng-template #tbodyDefaultTemplate>\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n [cAlign]=\"tableBodyProps?.align\"\n >\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n (click)=\"handleRowClick({$event, item, i})\"\n [cTableActive]=\"item._props?.active\"\n [cTableColor]=\"item._props?.color\"\n [cAlign]=\"item._props?.align\"\n >\n <td *ngIf=\"selectable\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\n >\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\n </td>\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\">\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\n </ng-template>\n </tr>\n <ng-template [ngIf]=\"templates['tableDetails']\">\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\n </td>\n </tr>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\n </tbody>\n</ng-template>\n\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\n <td\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\n >\n {{tdContent}}\n </td>\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n <tr *ngIf=\"!currentItems.length\">\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\n </tr>\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\" role=\"img\"\n class=\"icon icon-custom-size\" width=\"18\">\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"\n class=\"ci-primary\">\n </polygon>\n <polygon\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"\n class=\"ci-primary\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
|
|
441
449
|
}], ctorParameters: function () { return [{ type: i0.IterableDiffers }, { type: i0.KeyValueDiffers }]; }, propDecorators: { activePage: [{
|
|
@@ -512,4 +520,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImpor
|
|
|
512
520
|
type: ContentChildren,
|
|
513
521
|
args: [TemplateIdDirective]
|
|
514
522
|
}] } });
|
|
515
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBTUwsTUFBTSxFQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQWdCL0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBUW5ELE1BQU0sT0FBTyxtQkFBbUI7SUFXOUIsWUFDVSxlQUFnQyxFQUNoQyxlQUFnQztRQURoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBdUJsQyxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQVdoQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBVzFCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBK0JoQyx1QkFBa0IsR0FBdUIsRUFBRSxDQUFDO1FBYTVDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFXekIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQWdCekIsV0FBTSxHQUFvQixFQUFnQyxDQUFDO1FBVzNELGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRTFCLHNCQUFpQixHQUFXLGlCQUFpQixDQUFDO1FBQzlDLHdCQUFtQixHQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxF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QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFK0IsZUFBZTtzQkFBcEQsZUFBZTt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgSXRlcmFibGVEaWZmZXIsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgS2V5VmFsdWVEaWZmZXIsXG4gIEtleVZhbHVlRGlmZmVycyxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuaW1wb3J0IHsgSVRhYmxlIH0gZnJvbSAnLi4vLi4vdGFibGUvdGFibGUudHlwZSc7XG5pbXBvcnQge1xuICBJQ29sdW1uLFxuICBJQ29sdW1uRmlsdGVyLFxuICBJQ29sdW1uRmlsdGVyVmFsdWUsXG4gIElJdGVtLFxuICBJSXRlbUludGVybmFsLFxuICBJU21hcnRUYWJsZSxcbiAgSVNvcnRlcixcbiAgSVNvcnRlclZhbHVlLFxuICBJVGFibGVGaWx0ZXIsXG4gIElUYWJsZUdyb3VwUHJvcHMsXG4gIEl0ZW1zUGVyUGFnZVNlbGVjdFxufSBmcm9tICcuLi9zbWFydC10YWJsZS50eXBlJztcbmltcG9ydCB7IFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLXNtYXJ0LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjU21hcnRUYWJsZSdcbn0pXG5leHBvcnQgY2xhc3MgU21hcnRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIElTbWFydFRhYmxlLCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMge1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hY3RpdmVQYWdlOiBOdW1iZXJJbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NsZWFuZXI6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NsaWNrYWJsZVJvd3M6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Zvb3RlcjogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGVhZGVyOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9pdGVtc1BlclBhZ2U6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcGFnaW5hdGlvbjogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2VsZWN0YWJsZTogQm9vbGVhbklucHV0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgcHJpdmF0ZSBrZXlWYWx1ZURpZmZlcnM6IEtleVZhbHVlRGlmZmVyc1xuICApIHtcbiAgICB0aGlzLml0ZW1zRGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLml0ZW1zKS5jcmVhdGUoKTtcbiAgICB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX2NvbHVtbkZpbHRlcmVkKS5jcmVhdGUoKTtcbiAgICB0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIgPSB0aGlzLmtleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuY29sdW1uRmlsdGVyVmFsdWUpLmNyZWF0ZSgpO1xuICAgIHRoaXMuc29ydGVyVmFsdWVEaWZmZXIgPSB0aGlzLmtleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuc29ydGVyVmFsdWUpLmNyZWF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpdGVtc0RpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PiB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXNGaWx0ZXJlZERpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PiB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1GaWx0ZXJWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3J0ZXJWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgYWN0aXZlUGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fYWN0aXZlUGFnZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKSB8fCAxO1xuICAgIHRoaXMuYWN0aXZlUGFnZUNoYW5nZS5lbWl0KHRoaXMuX2FjdGl2ZVBhZ2UpO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZVBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgX2FjdGl2ZVBhZ2UgPSAxO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjbGVhbmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xlYW5lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgY2xlYW5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYW5lcjtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFuZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgY2xpY2thYmxlUm93cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsaWNrYWJsZVJvd3MgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNsaWNrYWJsZVJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWNrYWJsZVJvd3M7XG4gIH1cblxuICBwcml2YXRlIF9jbGlja2FibGVSb3dzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbHVtbnModmFsdWUpIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWU7XG4gIH1cblxuICBnZXQgY29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucyB8fCB0aGlzLnJhd0NvbHVtbk5hbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29sdW1ucz86IChzdHJpbmcgfCBJQ29sdW1uKVtdO1xuXG4gIEBJbnB1dCgpIGNvbHVtbkZpbHRlcj86IGJvb2xlYW4gfCBJQ29sdW1uRmlsdGVyO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW5GaWx0ZXJWYWx1ZSh2YWx1ZTogSUNvbHVtbkZpbHRlclZhbHVlKSB7XG4gICAgaWYgKHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlci5kaWZmKHZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbkZpbHRlclZhbHVlID0geyAuLi52YWx1ZSB9O1xuICAgICAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi50aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZSB9KTtcbiAgICAgICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvLyBlbWl0cyB0YWJsZUZpbHRlcmVkIGNoYW5nZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBjb2x1bW5GaWx0ZXJWYWx1ZSgpOiBJQ29sdW1uRmlsdGVyVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbHVtbkZpbHRlclZhbHVlOiBJQ29sdW1uRmlsdGVyVmFsdWUgPSB7fTtcblxuICBASW5wdXQoKSBjb2x1bW5Tb3J0ZXI/OiBib29sZWFuIHwgSVNvcnRlcjtcblxuICBASW5wdXQoKVxuICBzZXQgZm9vdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZm9vdGVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBmb290ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvb3RlcjtcbiAgfVxuXG4gIHByaXZhdGUgX2Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBoZWFkZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oZWFkZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGhlYWRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGl0ZW1zKHZhbHVlOiBJSXRlbVtdKSB7XG4gICAgaWYgKHRoaXMuaXRlbXNEaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRGlmZmVyLmRpZmYodmFsdWUpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLnNldEl0ZW1zKHZhbHVlKSBhcyBBcnJheTxUeXBlPElJdGVtSW50ZXJuYWw+PjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXRlbXM6IElJdGVtSW50ZXJuYWxbXSA9IFtdIGFzIEFycmF5PFR5cGU8SUl0ZW1JbnRlcm5hbD4+O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpdGVtc1BlclBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXRlbXNQZXJQYWdlOiBudW1iZXIgPSAxMDtcblxuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VMYWJlbDogc3RyaW5nID0gJ0l0ZW1zIHBlciBwYWdlOic7XG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgNTBdO1xuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VTZWxlY3Q/OiBib29sZWFuIHwgSXRlbXNQZXJQYWdlU2VsZWN0O1xuICBASW5wdXQoKSBsb2FkaW5nPzogYm9vbGVhbjtcbiAgQElucHV0KCkgbm9JdGVtc0xhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJ05vIGl0ZW1zIGZvdW5kJztcblxuICBASW5wdXQoKVxuICBzZXQgcGFnaW5hdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3BhZ2luYXRpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb247XG4gIH1cblxuICBwcml2YXRlIF9wYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IHNlbGVjdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWxlY3RhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzb3J0ZXJWYWx1ZSh2YWx1ZTogSVNvcnRlclZhbHVlKSB7XG4gICAgaWYgKHRoaXMuc29ydGVyVmFsdWVEaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLnNvcnRlclZhbHVlRGlmZmVyLmRpZmYodmFsdWUpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5fc29ydGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zb3J0ZXJWYWx1ZUNoYW5nZS5lbWl0KHsgLi4udmFsdWUgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNvcnRlclZhbHVlKCk6IElTb3J0ZXJWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc29ydGVyVmFsdWU6IElTb3J0ZXJWYWx1ZSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIHNldCB0YWJsZUZpbHRlcihmaWx0ZXIpIHtcbiAgICB0aGlzLl90YWJsZUZpbHRlciA9IGZpbHRlcjtcbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJMYWJlbCA9IHR5cGVvZiBmaWx0ZXIubGFiZWwgPT09ICdzdHJpbmcnID8gZmlsdGVyLmxhYmVsIDogdGhpcy50YWJsZUZpbHRlckxhYmVsO1xuICAgICAgdGhpcy50YWJsZUZpbHRlclBsYWNlaG9sZGVyID0gdHlwZW9mIGZpbHRlci5wbGFjZWhvbGRlciA9PT0gJ3N0cmluZycgPyBmaWx0ZXIucGxhY2Vob2xkZXIgOiB0aGlzLnRhYmxlRmlsdGVyUGxhY2Vob2xkZXI7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPSB0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyA/IGZpbHRlci52YWx1ZSA6IHRoaXMudGFibGVGaWx0ZXJWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlRmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFibGVGaWx0ZXI/OiBib29sZWFuIHwgSVRhYmxlRmlsdGVyO1xuXG4gIEBJbnB1dCgpIHRhYmxlRmlsdGVyTGFiZWwgPSAnRmlsdGVyOic7XG4gIEBJbnB1dCgpIHRhYmxlRmlsdGVyUGxhY2Vob2xkZXIgPSAndHlwZSBzdHJpbmcuLi4nO1xuXG4gIEBJbnB1dCgpXG4gIHNldCB0YWJsZUZpbHRlclZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmxlRmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJlZDsgLy8gZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcbiAgICB9XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUZpbHRlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFibGVGaWx0ZXJWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgdGFibGVCb2R5UHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XG4gIEBJbnB1dCgpIHRhYmxlRm9vdFByb3BzPzogSVRhYmxlR3JvdXBQcm9wcyA9IHt9O1xuICBASW5wdXQoKSB0YWJsZUhlYWRQcm9wcz86IElUYWJsZUdyb3VwUHJvcHMgPSB7fTtcbiAgQElucHV0KCkgdGFibGVQcm9wcz86IElUYWJsZSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc29ydGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVQYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaXRlbXNQZXJQYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZpbHRlcmVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSB0YWJsZUZpbHRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVJZERpcmVjdGl2ZSkgY29sdW1uVGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlSWREaXJlY3RpdmU+O1xuICB0ZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogKFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB9ID0geyB0YWJsZURldGFpbHM6IG51bGwsIHRhYmxlRGF0YTogbnVsbCB9O1xuICBjb2x1bW5GaWx0ZXJUZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogKFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB9ID0ge307XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uVGVtcGxhdGVzLmZvckVhY2goKGNoaWxkOiBUZW1wbGF0ZUlkRGlyZWN0aXZlKSA9PiB7XG4gICAgICBpZiAoY2hpbGQuaWQuc3RhcnRzV2l0aCgnY29sdW1uRmlsdGVyXycpKSB7XG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICB9KTtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclRlbXBsYXRlcyA9IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXMgfTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZEFsbCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkLmxlbmd0aCA9PT0gMCA/IGZhbHNlIDogc2VsZWN0ZWQubGVuZ3RoID09PSB0aGlzLml0ZW1zLmxlbmd0aCA/IHRydWUgOiAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgLy8gcmV0dXJuIHRoaXMuX3NlbGVjdGVkQWxsO1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkQWxsKHZhbHVlKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IHRydWUpO1xuICAgIHRoaXMuX3NlbGVjdGVkQWxsID0gc2VsZWN0ZWQubGVuZ3RoID09PSAwID8gZmFsc2UgOiBzZWxlY3RlZC5sZW5ndGggPT09IHRoaXMuaXRlbXMubGVuZ3RoID8gdHJ1ZSA6ICdpbmRldGVybWluYXRlJztcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdChzZWxlY3RlZCk7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZEFsbDogKGJvb2xlYW4gfCBzdHJpbmcpID0gZmFsc2U7XG5cbiAgZ2V0IHRhYmxlRmlsdGVyU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA/IHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA6ICcnO1xuICB9XG5cbiAgZ2V0IGNvbHVtbkZpbHRlclN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID8gdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA6IHt9O1xuICB9XG5cbiAgZ2V0IG51bWJlck9mUGFnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlID8gTWF0aC5jZWlsKHRoaXMuc29ydGVkSXRlbXMubGVuZ3RoIC8gdGhpcy5faXRlbXNQZXJQYWdlKSA6IDE7XG4gIH1cblxuICBnZXQgY29sc3BhbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlID8gdGhpcy5yYXdDb2x1bW5OYW1lcy5sZW5ndGggKyAxIDogdGhpcy5yYXdDb2x1bW5OYW1lcy5sZW5ndGg7XG4gIH1cblxuICBnZXQgZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUGFnZSA/ICh0aGlzLl9hY3RpdmVQYWdlIC0gMSkgKiB0aGlzLl9pdGVtc1BlclBhZ2UgOiAwO1xuICB9XG5cbiAgZ2V0IGl0ZW1zT25BY3RpdmVQYWdlKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkSXRlbXMuc2xpY2UoXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LFxuICAgICAgdGhpcy5maXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCArIHRoaXMuX2l0ZW1zUGVyUGFnZVxuICAgICk7XG4gIH1cblxuICBnZXQgY3VycmVudEl0ZW1zKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2UgPyB0aGlzLml0ZW1zT25BY3RpdmVQYWdlIDogdGhpcy5zb3J0ZWRJdGVtcyA/PyBbXTtcbiAgICAvLyByZXR1cm4gdGhpcy5pdGVtcyA/PyBbXTtcbiAgfVxuXG4gIGdldCBnZW5Db2xzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9pdGVtcyA/IHRoaXMuX2l0ZW1zWzBdID8/IHt9IDoge30pLmZpbHRlcigoZWwpID0+IGVsLmNoYXJBdCgwKSAhPT0gJ18nKTtcbiAgfVxuXG4gIGdldCByYXdDb2x1bW5OYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucyA/IHRoaXMuX2NvbHVtbnMubWFwKChjb2x1bW46IGFueSkgPT4geyByZXR1cm4gKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnKSA/IGNvbHVtbi5rZXkgOiBjb2x1bW47IH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmdlbkNvbHM7XG4gIH1cblxuICBnZXQgaXRlbXNEYXRhQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5yYXdDb2x1bW5OYW1lcy5maWx0ZXIoKG5hbWUpID0+IHRoaXMuZ2VuQ29scy5pbmNsdWRlcyhuYW1lKSk7XG4gIH1cblxuICBnZXQgc29ydGVkSXRlbXMoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICBjb25zdCBjb2wgPSB0aGlzLnNvcnRlclZhbHVlLmNvbHVtbjtcbiAgICBpZiAoXG4gICAgICAhY29sIHx8XG4gICAgICAhdGhpcy5pdGVtc0RhdGFDb2x1bW5zLmluY2x1ZGVzKGNvbCkgfHxcbiAgICAgICh0aGlzLmNvbHVtblNvcnRlciAmJlxuICAgICAgICB0eXBlb2YgdGhpcy5jb2x1bW5Tb3J0ZXIgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHRoaXMuY29sdW1uU29ydGVyLmV4dGVybmFsKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJlZDtcbiAgICB9XG4gICAgLy8gaWYgdmFsdWVzIGluIGNvbHVtbiBhcmUgdG8gYmUgc29ydGVkIGJ5IG51bWVyaWMgdmFsdWUgdGhleSBhbGwgaGF2ZSB0byBiZSB0eXBlIG51bWJlclxuICAgIC8vIGNvbnN0IGZsaXAgPSBzb3J0ZXJTdGF0ZS5hc2MgPyAxIDogLTFcbiAgICBjb25zdCBmbGlwID0gdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2FzYycgPyAxIDogdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2Rlc2MnID8gLTEgOiAwO1xuICAgIGNvbnN0IHRhYmxlRmlsdGVyZWQgPSB0aGlzLnRhYmxlRmlsdGVyZWQ7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHNvcnRlZCA9IHRhYmxlRmlsdGVyZWQuc2xpY2UoKS5zb3J0KChpdGVtOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0sIGl0ZW0yOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2xdO1xuICAgICAgY29uc3QgdmFsdWUyID0gaXRlbTJbY29sXTtcbiAgICAgIGNvbnN0IGEgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBiID0gdHlwZW9mIHZhbHVlMiA9PT0gJ251bWJlcicgPyB2YWx1ZTIgOiBTdHJpbmcodmFsdWUyKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGEgPiBiID8gMSAqIGZsaXAgOiBiID4gYSA/IC0xICogZmxpcCA6IDA7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvcnRlZDtcbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlckV2ZW50KCk6ICdjaGFuZ2UnIHwgJ2lucHV0JyB7XG4gICAgcmV0dXJuICh0eXBlb2YgdGhpcy50YWJsZUZpbHRlciA9PT0gJ29iamVjdCcgJiYgdGhpcy50YWJsZUZpbHRlci5sYXp5KSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgfTtcblxuICBwcml2YXRlIF9jb2x1bW5GaWx0ZXJlZDogSUl0ZW1JbnRlcm5hbFtdID0gW107XG5cbiAgZ2V0IGNvbHVtbkZpbHRlcmVkKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgbGV0IF9pdGVtcyA9IHRoaXMuX2l0ZW1zO1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29sdW1uRmlsdGVyICYmXG4gICAgICB0eXBlb2YgdGhpcy5jb2x1bW5GaWx0ZXIgPT09ICdvYmplY3QnICYmXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlci5leHRlcm5hbFxuICAgICkge1xuICAgICAgdGhpcy5fY29sdW1uRmlsdGVyZWQgPSBfaXRlbXM7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gX2l0ZW1zO1xuICAgIH1cbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbHVtbkZpbHRlclN0YXRlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcblxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgX2l0ZW1zID0gX2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gdmFsdWUoaXRlbVtrZXldKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29sdW1uRmlsdGVyID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbHVtbkZpbHRlciAmJiB0aGlzLml0ZW1zRGF0YUNvbHVtbnMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IFN0cmluZyhpdGVtW2tleV0pLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY29sdW1uRmlsdGVyKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5fY29sdW1uRmlsdGVyZWQgPSBfaXRlbXM7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBfaXRlbXM7XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGxldCBpdGVtcyA9IHRoaXMuY29sdW1uRmlsdGVyZWQ7XG4gICAgaWYgKFxuICAgICAgIXRoaXMudGFibGVGaWx0ZXJTdGF0ZSB8fFxuICAgICAgKHRoaXMudGFibGVGaWx0ZXIgJiYgdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIuZXh0ZXJuYWwpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIuZGlmZihpdGVtcyk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMudGFibGVGaWx0ZXJTdGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHZhbHVlQ29udGFpbkZpbHRlciA9ICh2YWw6IGFueSkgPT4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XG4gICAgICByZXR1cm4gISF0aGlzLml0ZW1zRGF0YUNvbHVtbnMuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5GaWx0ZXIoaXRlbVtrZXldKSk7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlci5kaWZmKGl0ZW1zKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgZ2V0IGlzRmlsdGVyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJTdGF0ZSB8fCB0aGlzLnNvcnRlclZhbHVlPy5jb2x1bW4gfHwgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbkZpbHRlclN0YXRlKS5qb2luKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbXMoaXRlbXM6IElJdGVtW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IElJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLml0ZW0sIF9pZDogaW5kZXggfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gPElJdGVtSW50ZXJuYWw+W107XG4gIH1cblxuICBoYW5kbGVTb3J0Q2hhbmdlKCRldmVudDogeyBjb2x1bW5LZXk6IHN0cmluZzsgaW5kZXg6IG51bWJlcjsgfSkge1xuICAgIHRoaXMuaGFuZGxlU29ydGVyQ2hhbmdlKCRldmVudC5jb2x1bW5LZXksICRldmVudC5pbmRleCk7XG4gIH1cblxuICBpc1NvcnRhYmxlKGk6IG51bWJlcik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRGF0YUNvbHVtbiA9IHRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyh0aGlzLnJhd0NvbHVtbk5hbWVzW2ldKTtcbiAgICBsZXQgY29sdW1uO1xuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29sdW1uU29ydGVyICYmXG4gICAgICAoIXRoaXMuY29sdW1ucyB8fFxuICAgICAgICB0eXBlb2YgY29sdW1uICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAodHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgJiYgKHR5cGVvZiBjb2x1bW4uc29ydGVyID09PSAndW5kZWZpbmVkJyB8fCBjb2x1bW4uc29ydGVyKSlcbiAgICAgICkgJiYgaXNEYXRhQ29sdW1uXG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZVNvcnRlckNoYW5nZShjb2x1bW46IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1NvcnRhYmxlKGluZGV4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL2lmIGNvbHVtbiBjaGFuZ2VkIG9yIHNvcnQgd2FzIGRlc2NlbmRpbmcgY2hhbmdlIGFzYyB0byB0cnVlXG4gICAgY29uc3Qgc3RhdGUgPSB7IC4uLnRoaXMuc29ydGVyVmFsdWUgfTtcblxuICAgIGlmIChzdGF0ZS5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgaWYgKHN0YXRlLnN0YXRlID09PSAwKSB7XG4gICAgICAgIHN0YXRlLnN0YXRlID0gJ2FzYyc7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnN0YXRlID09PSAnYXNjJykge1xuICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdkZXNjJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2x1bW5Tb3J0ZXIgPT09ICdvYmplY3QnICYmICF0aGlzLmNvbHVtblNvcnRlci5yZXNldGFibGUpIHtcbiAgICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnN0YXRlID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb2x1bW4gPSBjb2x1bW47XG4gICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgIH1cbiAgICB0aGlzLnNvcnRlclZhbHVlID0geyAuLi5zdGF0ZSB9O1xuICB9XG5cbiAgc2V0QWN0aXZlUGFnZSgkZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlUGFnZSA9ICRldmVudDtcbiAgfVxuXG4gIGhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID0geyAuLi50aGlzLmNvbHVtbkZpbHRlclZhbHVlLCBbYCR7Y29sdW1ufWBdOiB2YWx1ZSB9O1xuICB9XG5cbiAgaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyB9KSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xuICAgIGNvbnN0IGlzTGF6eSA9IHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmxhenkgPT09IHRydWU7XG4gICAgaWYgKCgoaXNMYXp5ICYmIHR5cGUgPT09ICdpbnB1dCcpIHx8ICghaXNMYXp5ICYmIHR5cGUgPT09ICdjaGFuZ2UnKSkgJiYgdmFsdWUubGVuZ3RoICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGNsZWFuKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPSB7fTtcbiAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPSAnJztcbiAgICB0aGlzLnNvcnRlclZhbHVlID0ge307XG4gICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvL2VtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXG4gIH1cblxuICBoYW5kbGVJdGVtc1BlclBhZ2VDaGFuZ2UodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5faXRlbXNQZXJQYWdlKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaXRlbXNQZXJQYWdlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVJvd0NoZWNrZWQoJGV2ZW50OiBFdmVudCwgaXRlbTogSUl0ZW1JbnRlcm5hbCkge1xuICAgIGl0ZW0uX3NlbGVjdGVkID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbTogSUl0ZW1JbnRlcm5hbCkgPT4ge1xuICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgX3NlbGVjdGVkOiAkZXZlbnQgfTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkQWxsID0gJGV2ZW50O1xuICB9XG5cbiAgdGFibGVEYXRhQ2VsbFByb3BzKGl0ZW06IElJdGVtLCBjb2xOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcm9wcyA9IGl0ZW1bJ19jZWxsUHJvcHMnXSAmJiB7XG4gICAgICAuLi4oaXRlbVsnX2NlbGxQcm9wcyddWydfYWxsJ10gJiYgeyAuLi5pdGVtWydfY2VsbFByb3BzJ11bJ19hbGwnXSB9KSxcbiAgICAgIC4uLihpdGVtWydfY2VsbFByb3BzJ11bY29sTmFtZV0gJiYgeyAuLi5pdGVtWydfY2VsbFByb3BzJ11bY29sTmFtZV0gfSlcbiAgICB9O1xuICAgIHJldHVybiBwcm9wcztcbiAgfVxuXG4gIHRhYmxlRGF0YUNlbGxDbGFzc2VzKGl0ZW06IElJdGVtLCBjb2xOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW46IElDb2x1bW4pID0+IGNvbHVtblsna2V5J10gPT09IGNvbE5hbWUpO1xuICAgIHJldHVybiBjb2x1bW5bMF0/Ll9jbGFzc2VzO1xuICB9XG5cbiAgZ2V0Q29sdW1uTmFtZSgkZXZlbnQ6IE1vdXNlRXZlbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBjbG9zZXN0ID0gdGFyZ2V0LmNsb3Nlc3QoJ3RyJyk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjbG9zZXN0ID8gQXJyYXkuZnJvbShjbG9zZXN0LmNoaWxkcmVuKSA6IFtdO1xuICAgIGNvbnN0IGNsaWNrZWRDZWxsID0gY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQuY29udGFpbnModGFyZ2V0KSlbMF07XG4gICAgcmV0dXJuIHRoaXMucmF3Q29sdW1uTmFtZXNbY2hpbGRyZW4uaW5kZXhPZihjbGlja2VkQ2VsbCkgLSAodGhpcy5fc2VsZWN0YWJsZSA/IDEgOiAwKV07XG4gIH1cblxuICBoYW5kbGVSb3dDbGljayhwYXJhbTogeyAkZXZlbnQ6IE1vdXNlRXZlbnQ7IGl0ZW06IElJdGVtSW50ZXJuYWw7IGk6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyAkZXZlbnQsIGl0ZW0sIGkgfSA9IHsgLi4ucGFyYW0gfTtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5nZXRDb2x1bW5OYW1lKHBhcmFtLiRldmVudCk7XG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHsgaXRlbTogaXRlbSwgaW5kZXg6IGkgKyB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LCBjb2x1bW5OYW1lLCBldmVudDogJGV2ZW50IH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5GaWx0ZXJWYWx1ZSddKSB7XG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZSA9IGNoYW5nZXNbJ2NvbHVtbkZpbHRlclZhbHVlJ107XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoY3VycmVudFZhbHVlID8/IHt9KS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sndGFibGVGaWx0ZXJWYWx1ZSddKSB7XG4gICAgICBjb25zdCB0YWJsZUZpbHRlclZhbHVlQ2hhbmdlID0gY2hhbmdlc1sndGFibGVGaWx0ZXJWYWx1ZSddO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAoY3VycmVudFZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiaXRlbXNQZXJQYWdlU2VsZWN0IHx8IHRhYmxlRmlsdGVyIHx8IGNsZWFuZXJcIiBjbGFzcz1cInJvdyBteS0yIG14LTBcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRhYmxlRmlsdGVyIHx8IGNsZWFuZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcC0wXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVGaWx0ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZUNsZWFuZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVGaWx0ZXJUZW1wbGF0ZT5cbiAgICA8Yy1zbWFydC10YWJsZS1maWx0ZXJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVUYWJsZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwidGFibGVGaWx0ZXJcIlxuICAgICAgW2RlbGF5XT1cIjMwMFwiXG4gICAgICBbZmlsdGVyTGFiZWxdPVwidGFibGVGaWx0ZXJMYWJlbFwiXG4gICAgICBbZmlsdGVyUGxhY2Vob2xkZXJdPVwidGFibGVGaWx0ZXJQbGFjZWhvbGRlclwiXG4gICAgICBbb25FdmVudF09XCJ0YWJsZUZpbHRlckV2ZW50XCJcbiAgICAgIFt2YWx1ZV09XCJ0YWJsZUZpbHRlclN0YXRlXCJcbiAgICAgIGNGaWx0ZXJJbnB1dFxuICAgID5cbiAgICA8L2Mtc21hcnQtdGFibGUtZmlsdGVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVDbGVhbmVyVGVtcGxhdGU+XG4gICAgPGJ1dHRvblxuICAgICAgKGNsaWNrKT1cImNsZWFuKCRldmVudClcIlxuICAgICAgKm5nSWY9XCJjbGVhbmVyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNGaWx0ZXJlZFwiXG4gICAgICBbbmdDbGFzc109XCJ7J21zLTEnOiB0YWJsZUZpbHRlcn1cIlxuICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgY0J1dHRvblxuICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgIGNvbG9yPVwidHJhbnNwYXJlbnRcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gIDx0YWJsZSBbYWxpZ25dPVwidGFibGVQcm9wcz8uYWxpZ25cIlxuICAgICAgICAgW2JvcmRlckNvbG9yXT1cInRhYmxlUHJvcHM/LmJvcmRlckNvbG9yXCJcbiAgICAgICAgIFtib3JkZXJlZF09XCJ0YWJsZVByb3BzPy5ib3JkZXJlZFwiXG4gICAgICAgICBbYm9yZGVybGVzc109XCJ0YWJsZVByb3BzPy5ib3JkZXJsZXNzXCJcbiAgICAgICAgIFtjYXB0aW9uXT1cInRhYmxlUHJvcHM/LmNhcHRpb25cIlxuICAgICAgICAgW2NvbG9yXT1cInRhYmxlUHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIFtob3Zlcl09XCJ0YWJsZVByb3BzPy5ob3ZlclwiXG4gICAgICAgICBbcmVzcG9uc2l2ZV09XCJ0YWJsZVByb3BzPy5yZXNwb25zaXZlXCJcbiAgICAgICAgIFtzbWFsbF09XCJ0YWJsZVByb3BzPy5zbWFsbFwiXG4gICAgICAgICBbc3RyaXBlZF09XCJ0YWJsZVByb3BzPy5zdHJpcGVkXCJcbiAgICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVQcm9wcz8uY29sb3JcIlxuICAgICAgICAgY1RhYmxlXG4gID5cbiAgICA8Yy1zbWFydC10YWJsZS1oZWFkXG4gICAgICAoY29sdW1uRmlsdGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlQ29sdW1uRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoc29ydGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwiaGVhZGVyXCJcbiAgICAgIFtjb2x1bW5GaWx0ZXJTdGF0ZV09XCJjb2x1bW5GaWx0ZXJTdGF0ZVwiXG4gICAgICBbY29sdW1uRmlsdGVyXT1cImNvbHVtbkZpbHRlclwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0ZWRBbGxcIlxuICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICBbY29sdW1uU29ydGVyXT1cImNvbHVtblNvcnRlclwiXG4gICAgICBbc29ydGVyVmFsdWVdPVwic29ydGVyVmFsdWVcIlxuICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUhlYWRQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVIZWFkUHJvcHM/LmNvbG9yXCJcbiAgICAgIFtjQWxpZ25dPVwidGFibGVIZWFkUHJvcHM/LmFsaWduXCJcbiAgICAgIFtjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNdPVwiY29sdW1uRmlsdGVyVGVtcGxhdGVzXCJcbiAgICA+PC9jLXNtYXJ0LXRhYmxlLWhlYWQ+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGJvZHlEZWZhdWx0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDxjLXNtYXJ0LXRhYmxlLWhlYWRcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNvcnRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAqbmdJZj1cImZvb3RlclwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0ZWRBbGxcIlxuICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICBbY29sdW1uU29ydGVyXT1cImNvbHVtblNvcnRlclwiXG4gICAgICBbc29ydGVyVmFsdWVdPVwic29ydGVyVmFsdWVcIlxuICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUZvb3RQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVGb290UHJvcHM/LmNvbG9yXCJcbiAgICAgIFtjQWxpZ25dPVwidGFibGVGb290UHJvcHM/LmFsaWduXCJcbiAgICAgIGNvbXBvbmVudD1cInRmb290XCJcbiAgICAgIFtjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNdPVwiY29sdW1uRmlsdGVyVGVtcGxhdGVzXCJcbiAgICA+PC9jLXNtYXJ0LXRhYmxlLWhlYWQ+XG5cbiAgPC90YWJsZT5cbiAgPGMtZWxlbWVudC1jb3ZlclxuICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgW2JvdW5kYXJpZXNdPVwiW1xuICAgICAgeyBzaWRlczogWyd0b3AnXSwgcXVlcnk6ICd0ZCcgfSxcbiAgICAgIHsgc2lkZXM6IFsnYm90dG9tJ10sIHF1ZXJ5OiAndGJvZHknIH1cbiAgICBdXCJcbiAgPjwvYy1lbGVtZW50LWNvdmVyPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgW25nSWZdPVwicGFnaW5hdGlvbiB8fCBpdGVtc1BlclBhZ2VTZWxlY3RcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgIDxjLXNtYXJ0LXBhZ2luYXRpb25cbiAgICAgICAgKGFjdGl2ZVBhZ2VDaGFuZ2UpPVwic2V0QWN0aXZlUGFnZSgkZXZlbnQpXCJcbiAgICAgICAgKm5nSWY9XCJwYWdpbmF0aW9uICYmIG51bWJlck9mUGFnZXMgPiAxXCJcbiAgICAgICAgW2FjdGl2ZVBhZ2VdPVwiYWN0aXZlUGFnZVwiXG4gICAgICAgIFtwYWdlc109XCJudW1iZXJPZlBhZ2VzXCI+XG4gICAgICA8L2Mtc21hcnQtcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbXMtYXV0b1wiPlxuICAgICAgPGMtc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3JcbiAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJoYW5kbGVJdGVtc1BlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICpuZ0lmPVwiaXRlbXNQZXJQYWdlU2VsZWN0XCJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZUxhYmVsXT1cIml0ZW1zUGVyUGFnZUxhYmVsXCJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZU9wdGlvbnNdPVwiaXRlbXNQZXJQYWdlT3B0aW9uc1wiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcbiAgICAgID5cbiAgICAgIDwvYy1zbWFydC10YWJsZS1pdGVtcy1wZXItcGFnZS1zZWxlY3Rvcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rib2R5RGVmYXVsdFRlbXBsYXRlPlxuICA8dGJvZHkgW2NIdG1sQXR0cl09XCJ0YWJsZUJvZHlQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVCb2R5UHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIFtjQWxpZ25dPVwidGFibGVCb2R5UHJvcHM/LmFsaWduXCJcbiAgPlxuICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWl0ZW0gW25nRm9yT2ZdPVwiY3VycmVudEl0ZW1zXCIgbGV0LWNudD1cImNvdW50XCIgbGV0LWk9XCJpbmRleFwiIGxldC1pc0V2ZW49XCJldmVuXCIgbGV0LWlzT2RkPVwib2RkXCI+XG4gICAgPHRyIFt0YWJpbmRleF09XCJjbGlja2FibGVSb3dzID8gMCA6IC0xXCJcbiAgICAgICAgW25nU3R5bGVdPVwie2N1cnNvcjogY2xpY2thYmxlUm93cyA/ICdwb2ludGVyJyA6ICdhdXRvJ31cIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlUm93Q2xpY2soeyRldmVudCwgaXRlbSwgaX0pXCJcbiAgICAgICAgW2NUYWJsZUFjdGl2ZV09XCJpdGVtLl9wcm9wcz8uYWN0aXZlXCJcbiAgICAgICAgW2NUYWJsZUNvbG9yXT1cIml0ZW0uX3Byb3BzPy5jb2xvclwiXG4gICAgICAgIFtjQWxpZ25dPVwiaXRlbS5fcHJvcHM/LmFsaWduXCJcbiAgICA+XG4gICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hY3RpdmVcIlxuICAgICAgICAgIFtjVGFibGVDb2xvcl09XCJpdGVtPy5bJ19jZWxsUHJvcHMnXT8uX2FsbD8uY29sb3JcIlxuICAgICAgICAgIFtjQWxpZ25dPVwiaXRlbT8uWydfY2VsbFByb3BzJ10/Ll9hbGw/LmFsaWduXCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwiaGFuZGxlUm93Q2hlY2tlZCgkZXZlbnQsIGl0ZW0pXCIgW2NoZWNrZWRdPVwiaXRlbS5fc2VsZWN0ZWQgPz8gZmFsc2VcIiBjRm9ybUNoZWNrSW5wdXQ+XG4gICAgICA8L3RkPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW5OYW1lIFtuZ0Zvck9mXT1cInJhd0NvbHVtbk5hbWVzXCIgbGV0LWk9XCJpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlRGF0YSddIHx8IGNvbHVtbkRlZmF1bHRUZW1wbGF0ZTsgY29udGV4dDoge2l0ZW0sIGNvbHVtbk5hbWUsIHRkQ29udGVudDogaXRlbVtjb2x1bW5OYW1lXSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdHI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ11cIj5cbiAgICAgIDwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93RGV0YWlsc0RlZmF1bHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPi0tPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgdGFiaW5kZXg9XCItMVwiIFtuZ1N0eWxlXT1cIntib3JkZXJCb3R0b21XaWR0aDogMH1cIj48L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInAtMFwiPlxuICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgW25nU3R5bGVdPVwie2JvcmRlcjogMH1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzWyd0YWJsZURldGFpbHMnXTsgY29udGV4dDoge2l0ZW0sIGluZGV4OiBpfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9JdGVtc0RlZmF1bHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L3Rib2R5PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5EZWZhdWx0VGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWNvbHVtbk5hbWU9XCJjb2x1bW5OYW1lXCIgbGV0LXRkQ29udGVudD1cInRkQ29udGVudFwiPlxuICA8dGRcbiAgICBbY1RhYmxlQWN0aXZlXT1cInRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtLCBjb2x1bW5OYW1lKT8uWydhY3RpdmUnXVwiXG4gICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtLCBjb2x1bW5OYW1lKT8uY29sb3JcIlxuICAgIFtjQWxpZ25dPVwidGFibGVEYXRhQ2VsbFByb3BzKGl0ZW0sIGNvbHVtbk5hbWUpPy5hbGlnblwiXG4gICAgW25nQ2xhc3NdPVwidGFibGVEYXRhQ2VsbENsYXNzZXMoaXRlbSwgY29sdW1uTmFtZSlcIlxuICA+XG4gICAge3t0ZENvbnRlbnR9fVxuICA8L3RkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLTxuZy10ZW1wbGF0ZSAjcm93RGV0YWlsc0RlZmF1bHRUZW1wbGF0ZSBsZXQtaXRlbSBsZXQtaW5kZXg+LS0+XG48IS0tICA8dHI+PHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cInAtMFwiIHRhYmluZGV4PVwiLTFcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyQm90dG9tV2lkdGg6IDB9XCI+PC90ZD48L3RyPi0tPlxuPCEtLSAgPHRyIGNsYXNzPVwicC0wXCI+LS0+XG48IS0tICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyOiAwfVwiPi0tPlxuPCEtLSAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXM/LnRhYmxlRGV0YWlsc1wiPjwvbmctY29udGFpbmVyPi0tPlxuPCEtLSAgICA8L3RkPi0tPlxuPCEtLSAgPC90cj4tLT5cbjwhLS08L25nLXRlbXBsYXRlPi0tPlxuXG48bmctdGVtcGxhdGUgI25vSXRlbXNEZWZhdWx0VGVtcGxhdGU+XG4gIDx0ciAqbmdJZj1cIiFjdXJyZW50SXRlbXMubGVuZ3RoXCI+XG4gICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cImp1c3RpZnktY29udGVudC1jZW50ZXJcIj57e25vSXRlbXNMYWJlbH19PC90ZD5cbiAgPC90cj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS10b2RvOiBmaWx0ZXJJY29uQ3VzdG9tVGVtcGxhdGUtLT5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVySWNvblRlbXBsYXRlPlxuICA8c3ZnIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBwb2ludGVyLWV2ZW50cz1cIm5vbmVcIiByb2xlPVwiaW1nXCJcbiAgICAgICBjbGFzcz1cImljb24gaWNvbi1jdXN0b20tc2l6ZVwiIHdpZHRoPVwiMThcIj5cbiAgICA8cG9seWdvblxuICAgICAgZmlsbD1cInZhcigtLWNpLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcilcIlxuICAgICAgcG9pbnRzPVwiNDAgMTYgNDAgNTMuODI4IDEwOS4wMjQgMTM2IDE1MC44MTUgMTM2IDc2Ljg5NiA0OCA0NTkuNTEgNDggMzA0IDI0Mi4zODggMzA0IDQwMS4zNzMgMjQxLjM3MyA0NjQgMjQwIDQ2NCAyNDAgMzY4IDIwOCAzNjggMjA4IDQ5NiAyNTQuNjI3IDQ5NiAzMzYgNDE0LjYyNyAzMzYgMjUzLjYxMiA0OTYgNTMuNjEyIDQ5NiAxNiA0MCAxNlwiXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIj5cbiAgICA8L3BvbHlnb24+XG4gICAgPHBvbHlnb25cbiAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcbiAgICAgIHBvaW50cz1cIjE2Ni40MDMgMjQ4LjIyNSAyMjYuODY0IDE4Ny43NjMgMjA0LjIzNyAxNjUuMTM1IDE0My43NzUgMjI1LjU5NyA4My4zMTMgMTY1LjEzNSA2MC42ODcgMTg3Ljc2MyAxMjEuMTQ4IDI0OC4yMjUgNjAuNjg3IDMwOC42ODcgODMuMzEzIDMzMS4zMTQgMTQzLjc3NSAyNzAuODUyIDIwNC4yMzcgMzMxLjMxNCAyMjYuODY0IDMwOC42ODcgMTY2LjQwMyAyNDguMjI1XCJcbiAgICAgIGNsYXNzPVwiY2ktcHJpbWFyeVwiPlxuICAgIDwvcG9seWdvbj5cbiAgPC9zdmc+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
523
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBTUwsTUFBTSxFQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQWdCL0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBUW5ELE1BQU0sT0FBTyxtQkFBbUI7SUFXOUIsWUFDVSxlQUFnQyxFQUNoQyxlQUFnQztRQURoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBdUJsQyxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQVdoQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBVzFCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBK0JoQyx1QkFBa0IsR0FBdUIsRUFBRSxDQUFDO1FBYTVDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFXekIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQWdCekIsV0FBTSxHQUFvQixFQUFnQyxDQUFDO1FBVzNELGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRTFCLHNCQUFpQixHQUFXLGlCQUFpQixDQUFDO1FBQzlDLHdCQUFtQixHQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxF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O3NCQURuQixLQUFLO2dCQWVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRStCLGVBQWU7c0JBQXBELGVBQWU7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlRGlmZmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIEtleVZhbHVlRGlmZmVyLFxuICBLZXlWYWx1ZURpZmZlcnMsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmltcG9ydCB7IElUYWJsZSB9IGZyb20gJy4uLy4uL3RhYmxlL3RhYmxlLnR5cGUnO1xuaW1wb3J0IHtcbiAgSUNvbHVtbixcbiAgSUNvbHVtbkZpbHRlcixcbiAgSUNvbHVtbkZpbHRlclZhbHVlLFxuICBJSXRlbSxcbiAgSUl0ZW1JbnRlcm5hbCxcbiAgSVNtYXJ0VGFibGUsXG4gIElTb3J0ZXIsXG4gIElTb3J0ZXJWYWx1ZSxcbiAgSVRhYmxlRmlsdGVyLFxuICBJVGFibGVHcm91cFByb3BzLFxuICBJdGVtc1BlclBhZ2VTZWxlY3Rcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUudHlwZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1zbWFydC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnY1NtYXJ0VGFibGUnXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBJU21hcnRUYWJsZSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYWN0aXZlUGFnZTogTnVtYmVySW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jbGVhbmVyOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jbGlja2FibGVSb3dzOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9mb290ZXI6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hlYWRlcjogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaXRlbXNQZXJQYWdlOiBOdW1iZXJJbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3BhZ2luYXRpb246IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdGFibGU6IEJvb2xlYW5JbnB1dDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgIHByaXZhdGUga2V5VmFsdWVEaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnNcbiAgKSB7XG4gICAgdGhpcy5pdGVtc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5pdGVtcykuY3JlYXRlKCk7XG4gICAgdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9jb2x1bW5GaWx0ZXJlZCkuY3JlYXRlKCk7XG4gICAgdGhpcy5jb2x1bUZpbHRlclZhbHVlRGlmZmVyID0gdGhpcy5rZXlWYWx1ZURpZmZlcnMuZmluZCh0aGlzLmNvbHVtbkZpbHRlclZhbHVlKS5jcmVhdGUoKTtcbiAgICB0aGlzLnNvcnRlclZhbHVlRGlmZmVyID0gdGhpcy5rZXlWYWx1ZURpZmZlcnMuZmluZCh0aGlzLnNvcnRlclZhbHVlKS5jcmVhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXNEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT4gfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zRmlsdGVyZWREaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT4gfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtRmlsdGVyVmFsdWVEaWZmZXI6IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc29ydGVyVmFsdWVEaWZmZXI6IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB8IG51bGw7XG5cbiAgQElucHV0KClcbiAgc2V0IGFjdGl2ZVBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2FjdGl2ZVBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSkgfHwgMTtcbiAgICB0aGlzLmFjdGl2ZVBhZ2VDaGFuZ2UuZW1pdCh0aGlzLl9hY3RpdmVQYWdlKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2U7XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmVQYWdlID0gMTtcblxuICBASW5wdXQoKVxuICBzZXQgY2xlYW5lcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsZWFuZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNsZWFuZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFuZXI7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhbmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGNsaWNrYWJsZVJvd3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGlja2FibGVSb3dzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBjbGlja2FibGVSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGlja2FibGVSb3dzO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xpY2thYmxlUm93czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW5zKHZhbHVlOiAoc3RyaW5nIHwgSUNvbHVtbilbXSkge1xuICAgIHRoaXMuX2NvbHVtbnMgPSB2YWx1ZS5tYXAoY29sdW1uID0+IHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnID8geyBrZXk6IGNvbHVtbiB9IDogeyAuLi5jb2x1bW4gfSk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiAoc3RyaW5nIHwgSUNvbHVtbilbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMgfHwgdGhpcy5yYXdDb2x1bW5OYW1lcztcbiAgfVxuXG4gIHByaXZhdGUgX2NvbHVtbnM/OiAoc3RyaW5nIHwgSUNvbHVtbilbXTtcblxuICBASW5wdXQoKSBjb2x1bW5GaWx0ZXI/OiBib29sZWFuIHwgSUNvbHVtbkZpbHRlcjtcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1uRmlsdGVyVmFsdWUodmFsdWU6IElDb2x1bW5GaWx0ZXJWYWx1ZSkge1xuICAgIGlmICh0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZSA9IHsgLi4udmFsdWUgfTtcbiAgICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHsgLi4udGhpcy5fY29sdW1uRmlsdGVyVmFsdWUgfSk7XG4gICAgICAgIHRoaXMudGFibGVGaWx0ZXJlZDsgLy8gZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY29sdW1uRmlsdGVyVmFsdWUoKTogSUNvbHVtbkZpbHRlclZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uRmlsdGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9jb2x1bW5GaWx0ZXJWYWx1ZTogSUNvbHVtbkZpbHRlclZhbHVlID0ge307XG5cbiAgQElucHV0KCkgY29sdW1uU29ydGVyPzogYm9vbGVhbiB8IElTb3J0ZXI7XG5cbiAgQElucHV0KClcbiAgc2V0IGZvb3Rlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Zvb3RlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb290ZXI7XG4gIH1cblxuICBwcml2YXRlIF9mb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgaGVhZGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGVhZGVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBoZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlcjtcbiAgfVxuXG4gIHByaXZhdGUgX2hlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpdGVtcyh2YWx1ZTogSUl0ZW1bXSkge1xuICAgIGlmICh0aGlzLml0ZW1zRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0RpZmZlci5kaWZmKHZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5zZXRJdGVtcyh2YWx1ZSkgYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX2l0ZW1zOiBJSXRlbUludGVybmFsW10gPSBbXSBhcyBBcnJheTxUeXBlPElJdGVtSW50ZXJuYWw+PjtcblxuICBASW5wdXQoKVxuICBzZXQgaXRlbXNQZXJQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaXRlbXNQZXJQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgX2l0ZW1zUGVyUGFnZTogbnVtYmVyID0gMTA7XG5cbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlTGFiZWw6IHN0cmluZyA9ICdJdGVtcyBwZXIgcGFnZTonO1xuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDUwXTtcbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlU2VsZWN0PzogYm9vbGVhbiB8IEl0ZW1zUGVyUGFnZVNlbGVjdDtcbiAgQElucHV0KCkgbG9hZGluZz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIG5vSXRlbXNMYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICdObyBpdGVtcyBmb3VuZCc7XG5cbiAgQElucHV0KClcbiAgc2V0IHBhZ2luYXRpb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9wYWdpbmF0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBwYWdpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFnaW5hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0YWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgc29ydGVyVmFsdWUodmFsdWU6IElTb3J0ZXJWYWx1ZSkge1xuICAgIGlmICh0aGlzLnNvcnRlclZhbHVlRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5zb3J0ZXJWYWx1ZURpZmZlci5kaWZmKHZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuX3NvcnRlclZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc29ydGVyVmFsdWVDaGFuZ2UuZW1pdCh7IC4uLnZhbHVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzb3J0ZXJWYWx1ZSgpOiBJU29ydGVyVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9zb3J0ZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NvcnRlclZhbHVlOiBJU29ydGVyVmFsdWUgPSB7fTtcblxuICBASW5wdXQoKVxuICBzZXQgdGFibGVGaWx0ZXIoZmlsdGVyKSB7XG4gICAgdGhpcy5fdGFibGVGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyTGFiZWwgPSB0eXBlb2YgZmlsdGVyLmxhYmVsID09PSAnc3RyaW5nJyA/IGZpbHRlci5sYWJlbCA6IHRoaXMudGFibGVGaWx0ZXJMYWJlbDtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJQbGFjZWhvbGRlciA9IHR5cGVvZiBmaWx0ZXIucGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnID8gZmlsdGVyLnBsYWNlaG9sZGVyIDogdGhpcy50YWJsZUZpbHRlclBsYWNlaG9sZGVyO1xuICAgICAgdGhpcy50YWJsZUZpbHRlclZhbHVlID0gdHlwZW9mIGZpbHRlci52YWx1ZSA9PT0gJ3N0cmluZycgPyBmaWx0ZXIudmFsdWUgOiB0aGlzLnRhYmxlRmlsdGVyVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUZpbHRlcjtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlRmlsdGVyPzogYm9vbGVhbiB8IElUYWJsZUZpbHRlcjtcblxuICBASW5wdXQoKSB0YWJsZUZpbHRlckxhYmVsID0gJ0ZpbHRlcjonO1xuICBASW5wdXQoKSB0YWJsZUZpbHRlclBsYWNlaG9sZGVyID0gJ3R5cGUgc3RyaW5nLi4uJztcblxuICBASW5wdXQoKVxuICBzZXQgdGFibGVGaWx0ZXJWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuX3RhYmxlRmlsdGVyVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJsZUZpbHRlclZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vIGVtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXG4gICAgfVxuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVGaWx0ZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlRmlsdGVyVmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIHRhYmxlQm9keVByb3BzPzogSVRhYmxlR3JvdXBQcm9wcyA9IHt9O1xuICBASW5wdXQoKSB0YWJsZUZvb3RQcm9wcz86IElUYWJsZUdyb3VwUHJvcHMgPSB7fTtcbiAgQElucHV0KCkgdGFibGVIZWFkUHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XG4gIEBJbnB1dCgpIHRhYmxlUHJvcHM/OiBJVGFibGUgPSB7fTtcblxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNvcnRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYWN0aXZlUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zUGVyUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUpIGNvbHVtblRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcbiAgdGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IChUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkgfSA9IHsgdGFibGVEZXRhaWxzOiBudWxsLCB0YWJsZURhdGE6IG51bGwgfTtcbiAgY29sdW1uRmlsdGVyVGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IChUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkgfSA9IHt9O1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtblRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgaWYgKGNoaWxkLmlkLnN0YXJ0c1dpdGgoJ2NvbHVtbkZpbHRlcl8nKSkge1xuICAgICAgICB0aGlzLmNvbHVtbkZpbHRlclRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgfSk7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXMgPSB7IC4uLnRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzIH07XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRBbGwoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IHRydWUpO1xuICAgIHJldHVybiBzZWxlY3RlZC5sZW5ndGggPT09IDAgPyBmYWxzZSA6IHNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5pdGVtcy5sZW5ndGggPyB0cnVlIDogJ2luZGV0ZXJtaW5hdGUnO1xuICAgIC8vIHJldHVybiB0aGlzLl9zZWxlY3RlZEFsbDtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZEFsbCh2YWx1ZSkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKTtcbiAgICB0aGlzLl9zZWxlY3RlZEFsbCA9IHNlbGVjdGVkLmxlbmd0aCA9PT0gMCA/IGZhbHNlIDogc2VsZWN0ZWQubGVuZ3RoID09PSB0aGlzLml0ZW1zLmxlbmd0aCA/IHRydWUgOiAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRBbGw6IChib29sZWFuIHwgc3RyaW5nKSA9IGZhbHNlO1xuXG4gIGdldCB0YWJsZUZpbHRlclN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPyB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgOiAnJztcbiAgfVxuXG4gIGdldCBjb2x1bW5GaWx0ZXJTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA/IHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgOiB7fTtcbiAgfVxuXG4gIGdldCBudW1iZXJPZlBhZ2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZSA/IE1hdGguY2VpbCh0aGlzLnNvcnRlZEl0ZW1zLmxlbmd0aCAvIHRoaXMuX2l0ZW1zUGVyUGFnZSkgOiAxO1xuICB9XG5cbiAgZ2V0IGNvbHNwYW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZSA/IHRoaXMucmF3Q29sdW1uTmFtZXMubGVuZ3RoICsgMSA6IHRoaXMucmF3Q29sdW1uTmFtZXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2UgPyAodGhpcy5fYWN0aXZlUGFnZSAtIDEpICogdGhpcy5faXRlbXNQZXJQYWdlIDogMDtcbiAgfVxuXG4gIGdldCBpdGVtc09uQWN0aXZlUGFnZSgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zLnNsaWNlKFxuICAgICAgdGhpcy5maXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCxcbiAgICAgIHRoaXMuZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXggKyB0aGlzLl9pdGVtc1BlclBhZ2VcbiAgICApO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlID8gdGhpcy5pdGVtc09uQWN0aXZlUGFnZSA6IHRoaXMuc29ydGVkSXRlbXMgPz8gW107XG4gICAgLy8gcmV0dXJuIHRoaXMuaXRlbXMgPz8gW107XG4gIH1cblxuICBnZXQgZ2VuQ29scygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5faXRlbXMgPyB0aGlzLl9pdGVtc1swXSA/PyB7fSA6IHt9KS5maWx0ZXIoKGVsKSA9PiBlbC5jaGFyQXQoMCkgIT09ICdfJyk7XG4gIH1cblxuICBnZXQgcmF3Q29sdW1uTmFtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMgPyB0aGlzLl9jb2x1bW5zLm1hcChjb2x1bW4gPT4gdHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgPyBjb2x1bW4ua2V5IDogY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5nZW5Db2xzO1xuICB9XG5cbiAgZ2V0IGl0ZW1zRGF0YUNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmF3Q29sdW1uTmFtZXMuZmlsdGVyKChuYW1lKSA9PiB0aGlzLmdlbkNvbHMuaW5jbHVkZXMobmFtZSkpO1xuICB9XG5cbiAgZ2V0IHNvcnRlZEl0ZW1zKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgY29uc3QgY29sdW1uS2V5ID0gdGhpcy5zb3J0ZXJWYWx1ZS5jb2x1bW47XG4gICAgaWYgKFxuICAgICAgIWNvbHVtbktleSB8fFxuICAgICAgIXRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5LZXkpIHx8XG4gICAgICAodGhpcy5jb2x1bW5Tb3J0ZXIgJiZcbiAgICAgICAgdHlwZW9mIHRoaXMuY29sdW1uU29ydGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0aGlzLmNvbHVtblNvcnRlci5leHRlcm5hbClcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyZWQ7XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlRmlsdGVyZWQgPSBbLi4udGhpcy50YWJsZUZpbHRlcmVkXTtcblxuICAgIC8vIGlmIHZhbHVlcyBpbiBjb2x1bW4gYXJlIHRvIGJlIHNvcnRlZCBieSBudW1lcmljIHZhbHVlIHRoZXkgYWxsIGhhdmUgdG8gYmUgYSB0eXBlIG9mIG51bWJlclxuICAgIGNvbnN0IGZsaXAgPSB0aGlzLnNvcnRlclZhbHVlLnN0YXRlID09PSAnYXNjJyA/IDEgOiB0aGlzLnNvcnRlclZhbHVlLnN0YXRlID09PSAnZGVzYycgPyAtMSA6IDA7XG5cbiAgICBpZiAoZmxpcCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRhYmxlRmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmIGNvbHVtbi5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50Q29sdW1uID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgY3VycmVudENvbHVtbi5zb3J0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHNvcnRlZCA9IHRhYmxlRmlsdGVyZWQuc2xpY2UoKS5zb3J0KGN1cnJlbnRDb2x1bW4uc29ydGVyKTtcbiAgICAgIHJldHVybiBmbGlwIDwgMCA/IHNvcnRlZC5yZXZlcnNlKCkgOiBzb3J0ZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGFyZUZuID0gKGl0ZW0xOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0sIGl0ZW0yOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IGl0ZW0xW2NvbHVtbktleV07XG4gICAgICBjb25zdCB2YWx1ZTIgPSBpdGVtMltjb2x1bW5LZXldO1xuICAgICAgY29uc3QgYSA9IHR5cGVvZiB2YWx1ZTEgPT09ICdudW1iZXInID8gdmFsdWUxIDogU3RyaW5nKHZhbHVlMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGIgPSB0eXBlb2YgdmFsdWUyID09PSAnbnVtYmVyJyA/IHZhbHVlMiA6IFN0cmluZyh2YWx1ZTIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gYSA+IGIgPyAxICogZmxpcCA6IGIgPiBhID8gLTEgKiBmbGlwIDogMDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRhYmxlRmlsdGVyZWQuc2xpY2UoKS5zb3J0KGNvbXBhcmVGbik7XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJFdmVudCgpOiAnY2hhbmdlJyB8ICdpbnB1dCcge1xuICAgIHJldHVybiAodHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIubGF6eSkgPyAnY2hhbmdlJyA6ICdpbnB1dCc7XG4gIH07XG5cbiAgcHJpdmF0ZSBfY29sdW1uRmlsdGVyZWQ6IElJdGVtSW50ZXJuYWxbXSA9IFtdO1xuXG4gIGdldCBjb2x1bW5GaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGxldCBfaXRlbXMgPSB0aGlzLl9pdGVtcztcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlciAmJlxuICAgICAgdHlwZW9mIHRoaXMuY29sdW1uRmlsdGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXIuZXh0ZXJuYWxcbiAgICApIHtcbiAgICAgIHRoaXMuX2NvbHVtbkZpbHRlcmVkID0gX2l0ZW1zO1xuICAgICAgcmV0dXJuIF9pdGVtcztcbiAgICB9XG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHZhbHVlKGl0ZW1ba2V5XSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2x1bW4gPT4gdHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgJiYgY29sdW1uLmtleSA9PT0ga2V5KTtcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudENvbHVtbiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGN1cnJlbnRDb2x1bW4uZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICh0eXBlb2YgY3VycmVudENvbHVtbi5maWx0ZXIgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudENvbHVtbi5maWx0ZXIoaXRlbSwgdmFsdWUpKSA/PyAhdmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbHVtbkZpbHRlciA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjb2x1bW5GaWx0ZXIgJiYgdGhpcy5pdGVtc0RhdGFDb2x1bW5zLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgX2l0ZW1zID0gX2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gU3RyaW5nKGl0ZW1ba2V5XSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjb2x1bW5GaWx0ZXIpKTtcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIHRoaXMuX2NvbHVtbkZpbHRlcmVkID0gX2l0ZW1zO1xuICAgIHJldHVybiBfaXRlbXM7XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGxldCBpdGVtcyA9IHRoaXMuY29sdW1uRmlsdGVyZWQ7XG4gICAgaWYgKFxuICAgICAgIXRoaXMudGFibGVGaWx0ZXJTdGF0ZSB8fFxuICAgICAgKHRoaXMudGFibGVGaWx0ZXIgJiYgdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIuZXh0ZXJuYWwpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIuZGlmZihpdGVtcyk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMudGFibGVGaWx0ZXJTdGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHZhbHVlQ29udGFpbkZpbHRlciA9ICh2YWw6IGFueSkgPT4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XG4gICAgICByZXR1cm4gISF0aGlzLml0ZW1zRGF0YUNvbHVtbnMuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5GaWx0ZXIoaXRlbVtrZXldKSk7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlci5kaWZmKGl0ZW1zKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgZ2V0IGlzRmlsdGVyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJTdGF0ZSB8fCB0aGlzLnNvcnRlclZhbHVlPy5jb2x1bW4gfHwgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbkZpbHRlclN0YXRlKS5qb2luKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbXMoaXRlbXM6IElJdGVtW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IElJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLml0ZW0sIF9pZDogaW5kZXggfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gPElJdGVtSW50ZXJuYWw+W107XG4gIH1cblxuICBoYW5kbGVTb3J0Q2hhbmdlKCRldmVudDogeyBjb2x1bW5LZXk6IHN0cmluZzsgaW5kZXg6IG51bWJlcjsgfSkge1xuICAgIHRoaXMuaGFuZGxlU29ydGVyQ2hhbmdlKCRldmVudC5jb2x1bW5LZXksICRldmVudC5pbmRleCk7XG4gIH1cblxuICBpc1NvcnRhYmxlKGk6IG51bWJlcik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRGF0YUNvbHVtbiA9IHRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyh0aGlzLnJhd0NvbHVtbk5hbWVzW2ldKTtcbiAgICBsZXQgY29sdW1uO1xuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29sdW1uU29ydGVyICYmXG4gICAgICAoIXRoaXMuY29sdW1ucyB8fFxuICAgICAgICB0eXBlb2YgY29sdW1uICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAodHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgJiYgKHR5cGVvZiBjb2x1bW4uc29ydGVyID09PSAndW5kZWZpbmVkJyB8fCBjb2x1bW4uc29ydGVyKSlcbiAgICAgICkgJiYgaXNEYXRhQ29sdW1uXG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZVNvcnRlckNoYW5nZShjb2x1bW46IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1NvcnRhYmxlKGluZGV4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL2lmIGNvbHVtbiBjaGFuZ2VkIG9yIHNvcnQgd2FzIGRlc2NlbmRpbmcgY2hhbmdlIGFzYyB0byB0cnVlXG4gICAgY29uc3Qgc3RhdGUgPSB7IC4uLnRoaXMuc29ydGVyVmFsdWUgfTtcblxuICAgIGlmIChzdGF0ZS5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgaWYgKHN0YXRlLnN0YXRlID09PSAwKSB7XG4gICAgICAgIHN0YXRlLnN0YXRlID0gJ2FzYyc7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnN0YXRlID09PSAnYXNjJykge1xuICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdkZXNjJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2x1bW5Tb3J0ZXIgPT09ICdvYmplY3QnICYmICF0aGlzLmNvbHVtblNvcnRlci5yZXNldGFibGUpIHtcbiAgICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnN0YXRlID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb2x1bW4gPSBjb2x1bW47XG4gICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgIH1cbiAgICB0aGlzLnNvcnRlclZhbHVlID0geyAuLi5zdGF0ZSB9O1xuICB9XG5cbiAgc2V0QWN0aXZlUGFnZSgkZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlUGFnZSA9ICRldmVudDtcbiAgfVxuXG4gIGhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID0geyAuLi50aGlzLmNvbHVtbkZpbHRlclZhbHVlLCBbYCR7Y29sdW1ufWBdOiB2YWx1ZSB9O1xuICB9XG5cbiAgaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyB9KSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xuICAgIGNvbnN0IGlzTGF6eSA9IHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmxhenkgPT09IHRydWU7XG4gICAgaWYgKCgoaXNMYXp5ICYmIHR5cGUgPT09ICdpbnB1dCcpIHx8ICghaXNMYXp5ICYmIHR5cGUgPT09ICdjaGFuZ2UnKSkgJiYgdmFsdWUubGVuZ3RoICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGNsZWFuKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPSB7fTtcbiAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPSAnJztcbiAgICB0aGlzLnNvcnRlclZhbHVlID0ge307XG4gICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvL2VtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXG4gIH1cblxuICBoYW5kbGVJdGVtc1BlclBhZ2VDaGFuZ2UodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5faXRlbXNQZXJQYWdlKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaXRlbXNQZXJQYWdlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVJvd0NoZWNrZWQoJGV2ZW50OiBFdmVudCwgaXRlbTogSUl0ZW1JbnRlcm5hbCkge1xuICAgIGl0ZW0uX3NlbGVjdGVkID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbTogSUl0ZW1JbnRlcm5hbCkgPT4ge1xuICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgX3NlbGVjdGVkOiAkZXZlbnQgfTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkQWxsID0gJGV2ZW50O1xuICB9XG5cbiAgdGFibGVEYXRhQ2VsbFByb3BzKGl0ZW06IElJdGVtLCBjb2xOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcm9wcyA9IGl0ZW1bJ19jZWxsUHJvcHMnXSAmJiB7XG4gICAgICAuLi4oaXRlbVsnX2NlbGxQcm9wcyddWydfYWxsJ10gJiYgeyAuLi5pdGVtWydfY2VsbFByb3BzJ11bJ19hbGwnXSB9KSxcbiAgICAgIC4uLihpdGVtWydfY2VsbFByb3BzJ11bY29sTmFtZV0gJiYgeyAuLi5pdGVtWydfY2VsbFByb3BzJ11bY29sTmFtZV0gfSlcbiAgICB9O1xuICAgIHJldHVybiBwcm9wcztcbiAgfVxuXG4gIHRhYmxlRGF0YUNlbGxDbGFzc2VzKGl0ZW06IElJdGVtLCBjb2xOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnID8gY29sdW1uID09PSBjb2xOYW1lIDogY29sdW1uWydrZXknXSA9PT0gY29sTmFtZSk7XG4gICAgcmV0dXJuIGNvbHVtblswXSAmJiB0eXBlb2YgY29sdW1uWzBdID09PSAnb2JqZWN0JyA/IGNvbHVtblswXS5fY2xhc3NlcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldENvbHVtbk5hbWUoJGV2ZW50OiBNb3VzZUV2ZW50KTogc3RyaW5nIHtcbiAgICBjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgY29uc3QgY2xvc2VzdCA9IHRhcmdldC5jbG9zZXN0KCd0cicpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2xvc2VzdCA/IEFycmF5LmZyb20oY2xvc2VzdC5jaGlsZHJlbikgOiBbXTtcbiAgICBjb25zdCBjbGlja2VkQ2VsbCA9IGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmNvbnRhaW5zKHRhcmdldCkpWzBdO1xuICAgIHJldHVybiB0aGlzLnJhd0NvbHVtbk5hbWVzW2NoaWxkcmVuLmluZGV4T2YoY2xpY2tlZENlbGwpIC0gKHRoaXMuX3NlbGVjdGFibGUgPyAxIDogMCldO1xuICB9XG5cbiAgaGFuZGxlUm93Q2xpY2socGFyYW06IHsgJGV2ZW50OiBNb3VzZUV2ZW50OyBpdGVtOiBJSXRlbUludGVybmFsOyBpOiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHsgJGV2ZW50LCBpdGVtLCBpIH0gPSB7IC4uLnBhcmFtIH07XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuZ2V0Q29sdW1uTmFtZShwYXJhbS4kZXZlbnQpO1xuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IGl0ZW06IGl0ZW0sIGluZGV4OiBpICsgdGhpcy5maXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCwgY29sdW1uTmFtZSwgZXZlbnQ6ICRldmVudCB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1uRmlsdGVyVmFsdWUnXSkge1xuICAgICAgY29uc3QgY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWydjb2x1bW5GaWx0ZXJWYWx1ZSddO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSA/PyB7fSkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlRmlsdGVyVmFsdWUnXSkge1xuICAgICAgY29uc3QgdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZSA9IGNoYW5nZXNbJ3RhYmxlRmlsdGVyVmFsdWUnXTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIml0ZW1zUGVyUGFnZVNlbGVjdCB8fCB0YWJsZUZpbHRlciB8fCBjbGVhbmVyXCIgY2xhc3M9XCJyb3cgbXktMiBteC0wXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ0YWJsZUZpbHRlciB8fCBjbGVhbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHAtMFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlRmlsdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcC0wXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVDbGVhbmVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI3RhYmxlRmlsdGVyVGVtcGxhdGU+XG4gICAgPGMtc21hcnQtdGFibGUtZmlsdGVyXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAqbmdJZj1cInRhYmxlRmlsdGVyXCJcbiAgICAgIFtkZWxheV09XCIzMDBcIlxuICAgICAgW2ZpbHRlckxhYmVsXT1cInRhYmxlRmlsdGVyTGFiZWxcIlxuICAgICAgW2ZpbHRlclBsYWNlaG9sZGVyXT1cInRhYmxlRmlsdGVyUGxhY2Vob2xkZXJcIlxuICAgICAgW29uRXZlbnRdPVwidGFibGVGaWx0ZXJFdmVudFwiXG4gICAgICBbdmFsdWVdPVwidGFibGVGaWx0ZXJTdGF0ZVwiXG4gICAgICBjRmlsdGVySW5wdXRcbiAgICA+XG4gICAgPC9jLXNtYXJ0LXRhYmxlLWZpbHRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI3RhYmxlQ2xlYW5lclRlbXBsYXRlPlxuICAgIDxidXR0b25cbiAgICAgIChjbGljayk9XCJjbGVhbigkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwiY2xlYW5lclwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzRmlsdGVyZWRcIlxuICAgICAgW25nQ2xhc3NdPVwieydtcy0xJzogdGFibGVGaWx0ZXJ9XCJcbiAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgIGNCdXR0b25cbiAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICBjb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVySWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICA8dGFibGUgW2FsaWduXT1cInRhYmxlUHJvcHM/LmFsaWduXCJcbiAgICAgICAgIFtib3JkZXJDb2xvcl09XCJ0YWJsZVByb3BzPy5ib3JkZXJDb2xvclwiXG4gICAgICAgICBbYm9yZGVyZWRdPVwidGFibGVQcm9wcz8uYm9yZGVyZWRcIlxuICAgICAgICAgW2JvcmRlcmxlc3NdPVwidGFibGVQcm9wcz8uYm9yZGVybGVzc1wiXG4gICAgICAgICBbY2FwdGlvbl09XCJ0YWJsZVByb3BzPy5jYXB0aW9uXCJcbiAgICAgICAgIFtjb2xvcl09XCJ0YWJsZVByb3BzPy5jb2xvclwiXG4gICAgICAgICBbaG92ZXJdPVwidGFibGVQcm9wcz8uaG92ZXJcIlxuICAgICAgICAgW3Jlc3BvbnNpdmVdPVwidGFibGVQcm9wcz8ucmVzcG9uc2l2ZVwiXG4gICAgICAgICBbc21hbGxdPVwidGFibGVQcm9wcz8uc21hbGxcIlxuICAgICAgICAgW3N0cmlwZWRdPVwidGFibGVQcm9wcz8uc3RyaXBlZFwiXG4gICAgICAgICBbY0h0bWxBdHRyXT1cInRhYmxlUHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlUHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIGNUYWJsZVxuICA+XG4gICAgPGMtc21hcnQtdGFibGUtaGVhZFxuICAgICAgKGNvbHVtbkZpbHRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHNvcnRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAqbmdJZj1cImhlYWRlclwiXG4gICAgICBbY29sdW1uRmlsdGVyU3RhdGVdPVwiY29sdW1uRmlsdGVyU3RhdGVcIlxuICAgICAgW2NvbHVtbkZpbHRlcl09XCJjb2x1bW5GaWx0ZXJcIlxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdGVkQWxsXCJcbiAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgICAgW2NvbHVtblNvcnRlcl09XCJjb2x1bW5Tb3J0ZXJcIlxuICAgICAgW3NvcnRlclZhbHVlXT1cInNvcnRlclZhbHVlXCJcbiAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVIZWFkUHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlSGVhZFByb3BzPy5jb2xvclwiXG4gICAgICBbY0FsaWduXT1cInRhYmxlSGVhZFByb3BzPy5hbGlnblwiXG4gICAgICBbY29sdW1uRmlsdGVyVGVtcGxhdGVzXT1cImNvbHVtbkZpbHRlclRlbXBsYXRlc1wiXG4gICAgPjwvYy1zbWFydC10YWJsZS1oZWFkPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRib2R5RGVmYXVsdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8Yy1zbWFydC10YWJsZS1oZWFkXG4gICAgICAoc2VsZWN0QWxsQ2hhbmdlKT1cImhhbmRsZVNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChzb3J0ZXJTdGF0ZUNoYW5nZSk9XCJoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgKm5nSWY9XCJmb290ZXJcIlxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdGVkQWxsXCJcbiAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgICAgW2NvbHVtblNvcnRlcl09XCJjb2x1bW5Tb3J0ZXJcIlxuICAgICAgW3NvcnRlclZhbHVlXT1cInNvcnRlclZhbHVlXCJcbiAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVGb290UHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlRm9vdFByb3BzPy5jb2xvclwiXG4gICAgICBbY0FsaWduXT1cInRhYmxlRm9vdFByb3BzPy5hbGlnblwiXG4gICAgICBjb21wb25lbnQ9XCJ0Zm9vdFwiXG4gICAgICBbY29sdW1uRmlsdGVyVGVtcGxhdGVzXT1cImNvbHVtbkZpbHRlclRlbXBsYXRlc1wiXG4gICAgPjwvYy1zbWFydC10YWJsZS1oZWFkPlxuXG4gIDwvdGFibGU+XG4gIDxjLWVsZW1lbnQtY292ZXJcbiAgICAqbmdJZj1cImxvYWRpbmdcIlxuICAgIFtib3VuZGFyaWVzXT1cIltcbiAgICAgIHsgc2lkZXM6IFsndG9wJ10sIHF1ZXJ5OiAndGQnIH0sXG4gICAgICB7IHNpZGVzOiBbJ2JvdHRvbSddLCBxdWVyeTogJ3Rib2R5JyB9XG4gICAgXVwiXG4gID48L2MtZWxlbWVudC1jb3Zlcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInBhZ2luYXRpb24gfHwgaXRlbXNQZXJQYWdlU2VsZWN0XCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICA8Yy1zbWFydC1wYWdpbmF0aW9uXG4gICAgICAgIChhY3RpdmVQYWdlQ2hhbmdlKT1cInNldEFjdGl2ZVBhZ2UoJGV2ZW50KVwiXG4gICAgICAgICpuZ0lmPVwicGFnaW5hdGlvbiAmJiBudW1iZXJPZlBhZ2VzID4gMVwiXG4gICAgICAgIFthY3RpdmVQYWdlXT1cImFjdGl2ZVBhZ2VcIlxuICAgICAgICBbcGFnZXNdPVwibnVtYmVyT2ZQYWdlc1wiPlxuICAgICAgPC9jLXNtYXJ0LXBhZ2luYXRpb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIG1zLWF1dG9cIj5cbiAgICAgIDxjLXNtYXJ0LXRhYmxlLWl0ZW1zLXBlci1wYWdlLXNlbGVjdG9yXG4gICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwiaGFuZGxlSXRlbXNQZXJQYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAqbmdJZj1cIml0ZW1zUGVyUGFnZVNlbGVjdFwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VMYWJlbF09XCJpdGVtc1BlclBhZ2VMYWJlbFwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cIml0ZW1zUGVyUGFnZU9wdGlvbnNcIlxuICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiXG4gICAgICA+XG4gICAgICA8L2Mtc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3I+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0Ym9keURlZmF1bHRUZW1wbGF0ZT5cbiAgPHRib2R5IFtjSHRtbEF0dHJdPVwidGFibGVCb2R5UHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlQm9keVByb3BzPy5jb2xvclwiXG4gICAgICAgICBbY0FsaWduXT1cInRhYmxlQm9keVByb3BzPy5hbGlnblwiXG4gID5cbiAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1pdGVtIFtuZ0Zvck9mXT1cImN1cnJlbnRJdGVtc1wiIGxldC1jbnQ9XCJjb3VudFwiIGxldC1pPVwiaW5kZXhcIiBsZXQtaXNFdmVuPVwiZXZlblwiIGxldC1pc09kZD1cIm9kZFwiPlxuICAgIDx0ciBbdGFiaW5kZXhdPVwiY2xpY2thYmxlUm93cyA/IDAgOiAtMVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntjdXJzb3I6IGNsaWNrYWJsZVJvd3MgPyAncG9pbnRlcicgOiAnYXV0byd9XCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVJvd0NsaWNrKHskZXZlbnQsIGl0ZW0sIGl9KVwiXG4gICAgICAgIFtjVGFibGVBY3RpdmVdPVwiaXRlbS5fcHJvcHM/LmFjdGl2ZVwiXG4gICAgICAgIFtjVGFibGVDb2xvcl09XCJpdGVtLl9wcm9wcz8uY29sb3JcIlxuICAgICAgICBbY0FsaWduXT1cIml0ZW0uX3Byb3BzPy5hbGlnblwiXG4gICAgPlxuICAgICAgPHRkICpuZ0lmPVwic2VsZWN0YWJsZVwiXG4gICAgICAgICAgW2NUYWJsZUFjdGl2ZV09XCJpdGVtPy5bJ19jZWxsUHJvcHMnXT8uX2FsbD8uYWN0aXZlXCJcbiAgICAgICAgICBbY1RhYmxlQ29sb3JdPVwiaXRlbT8uWydfY2VsbFByb3BzJ10/Ll9hbGw/LmNvbG9yXCJcbiAgICAgICAgICBbY0FsaWduXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hbGlnblwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZVJvd0NoZWNrZWQoJGV2ZW50LCBpdGVtKVwiIFtjaGVja2VkXT1cIml0ZW0uX3NlbGVjdGVkID8/IGZhbHNlXCIgY0Zvcm1DaGVja0lucHV0PlxuICAgICAgPC90ZD5cbiAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY29sdW1uTmFtZSBbbmdGb3JPZl09XCJyYXdDb2x1bW5OYW1lc1wiIGxldC1pPVwiaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzWyd0YWJsZURhdGEnXSB8fCBjb2x1bW5EZWZhdWx0VGVtcGxhdGU7IGNvbnRleHQ6IHtpdGVtLCBjb2x1bW5OYW1lLCB0ZENvbnRlbnQ6IGl0ZW1bY29sdW1uTmFtZV0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3RyPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ0ZW1wbGF0ZXNbJ3RhYmxlRGV0YWlscyddXCI+XG4gICAgICA8IS0tICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd0RldGFpbHNEZWZhdWx0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj4tLT5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cInAtMFwiIHRhYmluZGV4PVwiLTFcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyQm90dG9tV2lkdGg6IDB9XCI+PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJwLTBcIj5cbiAgICAgICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cInAtMFwiIFtuZ1N0eWxlXT1cIntib3JkZXI6IDB9XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ107IGNvbnRleHQ6IHtpdGVtLCBpbmRleDogaX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vSXRlbXNEZWZhdWx0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC90Ym9keT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uRGVmYXVsdFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jb2x1bW5OYW1lPVwiY29sdW1uTmFtZVwiIGxldC10ZENvbnRlbnQ9XCJ0ZENvbnRlbnRcIj5cbiAgPHRkXG4gICAgW2NUYWJsZUFjdGl2ZV09XCJ0YWJsZURhdGFDZWxsUHJvcHMoaXRlbSwgY29sdW1uTmFtZSk/LlsnYWN0aXZlJ11cIlxuICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZURhdGFDZWxsUHJvcHMoaXRlbSwgY29sdW1uTmFtZSk/LmNvbG9yXCJcbiAgICBbY0FsaWduXT1cInRhYmxlRGF0YUNlbGxQcm9wcyhpdGVtLCBjb2x1bW5OYW1lKT8uYWxpZ25cIlxuICAgIFtuZ0NsYXNzXT1cInRhYmxlRGF0YUNlbGxDbGFzc2VzKGl0ZW0sIGNvbHVtbk5hbWUpXCJcbiAgPlxuICAgIHt7dGRDb250ZW50fX1cbiAgPC90ZD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS08bmctdGVtcGxhdGUgI3Jvd0RldGFpbHNEZWZhdWx0VGVtcGxhdGUgbGV0LWl0ZW0gbGV0LWluZGV4Pi0tPlxuPCEtLSAgPHRyPjx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiB0YWJpbmRleD1cIi0xXCIgW25nU3R5bGVdPVwie2JvcmRlckJvdHRvbVdpZHRoOiAwfVwiPjwvdGQ+PC90cj4tLT5cbjwhLS0gIDx0ciBjbGFzcz1cInAtMFwiPi0tPlxuPCEtLSAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgW25nU3R5bGVdPVwie2JvcmRlcjogMH1cIj4tLT5cbjwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy50YWJsZURldGFpbHNcIj48L25nLWNvbnRhaW5lcj4tLT5cbjwhLS0gICAgPC90ZD4tLT5cbjwhLS0gIDwvdHI+LS0+XG48IS0tPC9uZy10ZW1wbGF0ZT4tLT5cblxuPG5nLXRlbXBsYXRlICNub0l0ZW1zRGVmYXVsdFRlbXBsYXRlPlxuICA8dHIgKm5nSWY9XCIhY3VycmVudEl0ZW1zLmxlbmd0aFwiPlxuICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+e3tub0l0ZW1zTGFiZWx9fTwvdGQ+XG4gIDwvdHI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tdG9kbzogZmlsdGVySWNvbkN1c3RvbVRlbXBsYXRlLS0+XG48bmctdGVtcGxhdGUgI2ZpbHRlckljb25UZW1wbGF0ZT5cbiAgPHN2ZyB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgcG9pbnRlci1ldmVudHM9XCJub25lXCIgcm9sZT1cImltZ1wiXG4gICAgICAgY2xhc3M9XCJpY29uIGljb24tY3VzdG9tLXNpemVcIiB3aWR0aD1cIjE4XCI+XG4gICAgPHBvbHlnb25cbiAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcbiAgICAgIHBvaW50cz1cIjQwIDE2IDQwIDUzLjgyOCAxMDkuMDI0IDEzNiAxNTAuODE1IDEzNiA3Ni44OTYgNDggNDU5LjUxIDQ4IDMwNCAyNDIuMzg4IDMwNCA0MDEuMzczIDI0MS4zNzMgNDY0IDI0MCA0NjQgMjQwIDM2OCAyMDggMzY4IDIwOCA0OTYgMjU0LjYyNyA0OTYgMzM2IDQxNC42MjcgMzM2IDI1My42MTIgNDk2IDUzLjYxMiA0OTYgMTYgNDAgMTZcIlxuICAgICAgY2xhc3M9XCJjaS1wcmltYXJ5XCI+XG4gICAgPC9wb2x5Z29uPlxuICAgIDxwb2x5Z29uXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXG4gICAgICBwb2ludHM9XCIxNjYuNDAzIDI0OC4yMjUgMjI2Ljg2NCAxODcuNzYzIDIwNC4yMzcgMTY1LjEzNSAxNDMuNzc1IDIyNS41OTcgODMuMzEzIDE2NS4xMzUgNjAuNjg3IDE4Ny43NjMgMTIxLjE0OCAyNDguMjI1IDYwLjY4NyAzMDguNjg3IDgzLjMxMyAzMzEuMzE0IDE0My43NzUgMjcwLjg1MiAyMDQuMjM3IDMzMS4zMTQgMjI2Ljg2NCAzMDguNjg3IDE2Ni40MDMgMjQ4LjIyNVwiXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIj5cbiAgICA8L3BvbHlnb24+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
package/esm2020/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs
CHANGED
|
@@ -17,9 +17,9 @@ export class SmartTableColumnFilterComponent {
|
|
|
17
17
|
;
|
|
18
18
|
}
|
|
19
19
|
_SmartTableColumnFilterComponent_filterInputDirective = new WeakMap();
|
|
20
|
-
SmartTableColumnFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
21
|
-
SmartTableColumnFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
20
|
+
SmartTableColumnFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: SmartTableColumnFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21
|
+
SmartTableColumnFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.4", type: SmartTableColumnFilterComponent, selector: "c-smart-table-column-filter", inputs: { column: "column", sizing: "sizing" }, ngImport: i0, template: "<input\n [sizing]=\"sizing\"\n [value]=\"value$ | async\"\n autocomplete=\"off\"\n cFormControl\n/>\n", dependencies: [{ kind: "directive", type: i1.FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: SmartTableColumnFilterComponent, decorators: [{
|
|
23
23
|
type: Component,
|
|
24
24
|
args: [{ selector: 'c-smart-table-column-filter', changeDetection: ChangeDetectionStrategy.OnPush, template: "<input\n [sizing]=\"sizing\"\n [value]=\"value$ | async\"\n autocomplete=\"off\"\n cFormControl\n/>\n" }]
|
|
25
25
|
}], ctorParameters: function () { return []; }, propDecorators: { column: [{
|
|
@@ -58,9 +58,9 @@ export class FilterInputDirective {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
_FilterInputDirective_value = new WeakMap(), _FilterInputDirective_valueSubscription = new WeakMap(), _FilterInputDirective_inputSubscription = new WeakMap(), _FilterInputDirective_destroy$ = new WeakMap();
|
|
61
|
-
FilterInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
62
|
-
FilterInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
61
|
+
FilterInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: FilterInputDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
62
|
+
FilterInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.4", type: FilterInputDirective, selector: "[cFilterInput]", inputs: { delay: "delay", onEvent: "onEvent", value: "value" }, outputs: { valueChange: "valueChange" }, exportAs: ["cFilterInput"], ngImport: i0 });
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: FilterInputDirective, decorators: [{
|
|
64
64
|
type: Directive,
|
|
65
65
|
args: [{
|
|
66
66
|
selector: '[cFilterInput]',
|
|
@@ -28,9 +28,9 @@ export class SmartTableFilterComponent {
|
|
|
28
28
|
;
|
|
29
29
|
}
|
|
30
30
|
_SmartTableFilterComponent_filterInputDirective = new WeakMap();
|
|
31
|
-
SmartTableFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
32
|
-
SmartTableFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
31
|
+
SmartTableFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: SmartTableFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32
|
+
SmartTableFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.4", type: SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: { filterLabel: "filterLabel", filterPlaceholder: "filterPlaceholder", sizing: "sizing" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<label *ngIf=\"!!filterLabel\" [ngClass]=\"labelClasses\" cLabel=\"col\" class=\"col-auto\">\n {{ filterLabel }}\n</label>\n<div class=\"col-auto\">\n <input\n [placeholder]=\"filterPlaceholder\"\n [sizing]=\"sizing\"\n [value]=\"value$ | async\"\n autocomplete=\"off\"\n cFormControl\n size=\"10\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "directive", type: i3.FormLabelDirective, selector: "[cLabel]", inputs: ["cLabel", "sizing"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: SmartTableFilterComponent, decorators: [{
|
|
34
34
|
type: Component,
|
|
35
35
|
args: [{ selector: 'c-smart-table-filter', changeDetection: ChangeDetectionStrategy.OnPush, template: "<label *ngIf=\"!!filterLabel\" [ngClass]=\"labelClasses\" cLabel=\"col\" class=\"col-auto\">\n {{ filterLabel }}\n</label>\n<div class=\"col-auto\">\n <input\n [placeholder]=\"filterPlaceholder\"\n [sizing]=\"sizing\"\n [value]=\"value$ | async\"\n autocomplete=\"off\"\n cFormControl\n size=\"10\"\n />\n</div>\n" }]
|
|
36
36
|
}], ctorParameters: function () { return []; }, propDecorators: { filterLabel: [{
|