igniteui-angular 17.0.13 → 17.0.14
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/esm2022/lib/accordion/accordion.component.mjs +3 -3
- package/esm2022/lib/accordion/accordion.module.mjs +4 -4
- package/esm2022/lib/action-strip/action-strip.component.mjs +6 -6
- package/esm2022/lib/action-strip/action-strip.module.mjs +4 -4
- package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +3 -3
- package/esm2022/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +3 -3
- package/esm2022/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +3 -3
- package/esm2022/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +3 -3
- package/esm2022/lib/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/avatar/avatar.module.mjs +4 -4
- package/esm2022/lib/badge/badge.component.mjs +3 -3
- package/esm2022/lib/badge/badge.module.mjs +4 -4
- package/esm2022/lib/banner/banner.component.mjs +3 -3
- package/esm2022/lib/banner/banner.directives.mjs +3 -3
- package/esm2022/lib/banner/banner.module.mjs +4 -4
- package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +26 -20
- package/esm2022/lib/buttonGroup/buttongroup.module.mjs +4 -4
- package/esm2022/lib/calendar/calendar-base.mjs +9 -7
- package/esm2022/lib/calendar/calendar.component.mjs +3 -3
- package/esm2022/lib/calendar/calendar.directives.mjs +15 -15
- package/esm2022/lib/calendar/calendar.module.mjs +4 -4
- package/esm2022/lib/calendar/days-view/day-item.component.mjs +3 -3
- package/esm2022/lib/calendar/days-view/days-view.component.mjs +3 -3
- package/esm2022/lib/calendar/days-view/daysview-navigation.service.mjs +3 -3
- package/esm2022/lib/calendar/month-picker/month-picker-base.mjs +3 -3
- package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +3 -3
- package/esm2022/lib/calendar/months-view/months-view.component.mjs +3 -3
- package/esm2022/lib/calendar/months-view.pipe.mjs +6 -6
- package/esm2022/lib/calendar/years-view/years-view.component.mjs +6 -6
- package/esm2022/lib/card/card.component.mjs +27 -27
- package/esm2022/lib/card/card.module.mjs +4 -4
- package/esm2022/lib/carousel/carousel.component.mjs +6 -6
- package/esm2022/lib/carousel/carousel.directives.mjs +9 -9
- package/esm2022/lib/carousel/carousel.module.mjs +4 -4
- package/esm2022/lib/carousel/slide.component.mjs +3 -3
- package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/lib/checkbox/checkbox.module.mjs +4 -4
- package/esm2022/lib/chips/chip.component.mjs +3 -3
- package/esm2022/lib/chips/chips-area.component.mjs +3 -3
- package/esm2022/lib/chips/chips.module.mjs +4 -4
- package/esm2022/lib/combo/combo-add-item.component.mjs +3 -3
- package/esm2022/lib/combo/combo-dropdown.component.mjs +3 -3
- package/esm2022/lib/combo/combo-item.component.mjs +3 -3
- package/esm2022/lib/combo/combo.api.mjs +3 -3
- package/esm2022/lib/combo/combo.common.mjs +3 -3
- package/esm2022/lib/combo/combo.component.mjs +3 -3
- package/esm2022/lib/combo/combo.directives.mjs +24 -24
- package/esm2022/lib/combo/combo.module.mjs +4 -4
- package/esm2022/lib/combo/combo.pipes.mjs +6 -6
- package/esm2022/lib/core/density.mjs +25 -21
- package/esm2022/lib/core/navigation/directives.mjs +6 -6
- package/esm2022/lib/core/navigation/nav.service.mjs +3 -3
- package/esm2022/lib/core/selection.mjs +3 -3
- package/esm2022/lib/core/touch.mjs +3 -3
- package/esm2022/lib/core/utils.mjs +3 -3
- package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +3 -3
- package/esm2022/lib/date-common/picker-base.directive.mjs +3 -3
- package/esm2022/lib/date-common/picker-icons.common.mjs +9 -9
- package/esm2022/lib/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/lib/date-picker/date-picker.module.mjs +4 -4
- package/esm2022/lib/date-range-picker/date-range-picker-inputs.common.mjs +15 -15
- package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +3 -3
- package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +4 -4
- package/esm2022/lib/dialog/dialog.component.mjs +3 -3
- package/esm2022/lib/dialog/dialog.directives.mjs +6 -6
- package/esm2022/lib/dialog/dialog.module.mjs +4 -4
- package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +3 -3
- package/esm2022/lib/directives/autocomplete/autocomplete.module.mjs +4 -4
- package/esm2022/lib/directives/button/button.directive.mjs +3 -3
- package/esm2022/lib/directives/button/button.module.mjs +4 -4
- package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +3 -3
- package/esm2022/lib/directives/date-time-editor/date-time-editor.module.mjs +4 -4
- package/esm2022/lib/directives/divider/divider.directive.mjs +3 -3
- package/esm2022/lib/directives/divider/divider.module.mjs +4 -4
- package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +12 -12
- package/esm2022/lib/directives/drag-drop/drag-drop.module.mjs +4 -4
- package/esm2022/lib/directives/filter/filter.directive.mjs +6 -6
- package/esm2022/lib/directives/filter/filter.module.mjs +4 -4
- package/esm2022/lib/directives/focus/focus.directive.mjs +3 -3
- package/esm2022/lib/directives/focus/focus.module.mjs +4 -4
- package/esm2022/lib/directives/focus-trap/focus-trap.directive.mjs +3 -3
- package/esm2022/lib/directives/focus-trap/focus-trap.module.mjs +4 -4
- package/esm2022/lib/directives/for-of/base.helper.component.mjs +3 -3
- package/esm2022/lib/directives/for-of/display.container.mjs +3 -3
- package/esm2022/lib/directives/for-of/for_of.directive.mjs +6 -6
- package/esm2022/lib/directives/for-of/for_of.module.mjs +4 -4
- package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +6 -6
- package/esm2022/lib/directives/for-of/horizontal.virtual.helper.component.mjs +3 -3
- package/esm2022/lib/directives/for-of/virtual.helper.component.mjs +3 -3
- package/esm2022/lib/directives/form-control/form-control.directive.mjs +3 -3
- package/esm2022/lib/directives/form-control/form-control.module.mjs +4 -4
- package/esm2022/lib/directives/hint/hint.directive.mjs +3 -3
- package/esm2022/lib/directives/input/input.directive.mjs +3 -3
- package/esm2022/lib/directives/label/label.directive.mjs +3 -3
- package/esm2022/lib/directives/layout/layout.directive.mjs +6 -6
- package/esm2022/lib/directives/layout/layout.module.mjs +4 -4
- package/esm2022/lib/directives/mask/mask-parsing.service.mjs +3 -3
- package/esm2022/lib/directives/mask/mask.directive.mjs +3 -3
- package/esm2022/lib/directives/mask/mask.module.mjs +4 -4
- package/esm2022/lib/directives/notification/notifications.directive.mjs +3 -3
- package/esm2022/lib/directives/prefix/prefix.directive.mjs +3 -3
- package/esm2022/lib/directives/radio/radio-group.directive.mjs +3 -3
- package/esm2022/lib/directives/radio/radio-group.module.mjs +4 -4
- package/esm2022/lib/directives/ripple/ripple.directive.mjs +3 -3
- package/esm2022/lib/directives/ripple/ripple.module.mjs +4 -4
- package/esm2022/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +3 -3
- package/esm2022/lib/directives/scroll-inertia/scroll_inertia.module.mjs +4 -4
- package/esm2022/lib/directives/suffix/suffix.directive.mjs +3 -3
- package/esm2022/lib/directives/template-outlet/template_outlet.directive.mjs +3 -3
- package/esm2022/lib/directives/text-highlight/text-highlight.directive.mjs +3 -3
- package/esm2022/lib/directives/text-highlight/text-highlight.module.mjs +4 -4
- package/esm2022/lib/directives/text-selection/text-selection.directive.mjs +3 -3
- package/esm2022/lib/directives/text-selection/text-selection.module.mjs +4 -4
- package/esm2022/lib/directives/toggle/toggle.directive.mjs +9 -9
- package/esm2022/lib/directives/toggle/toggle.module.mjs +4 -4
- package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +3 -3
- package/esm2022/lib/directives/tooltip/tooltip.component.mjs +3 -3
- package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +3 -3
- package/esm2022/lib/directives/tooltip/tooltip.module.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down-group.component.mjs +3 -3
- package/esm2022/lib/drop-down/drop-down-item.base.mjs +3 -3
- package/esm2022/lib/drop-down/drop-down-item.component.mjs +3 -3
- package/esm2022/lib/drop-down/drop-down-navigation.directive.mjs +3 -3
- package/esm2022/lib/drop-down/drop-down.base.mjs +3 -3
- package/esm2022/lib/drop-down/drop-down.component.mjs +3 -3
- package/esm2022/lib/drop-down/drop-down.module.mjs +4 -4
- package/esm2022/lib/expansion-panel/expansion-panel-body.component.mjs +3 -3
- package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +3 -3
- package/esm2022/lib/expansion-panel/expansion-panel.common.mjs +3 -3
- package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +3 -3
- package/esm2022/lib/expansion-panel/expansion-panel.directives.mjs +9 -9
- package/esm2022/lib/expansion-panel/expansion-panel.module.mjs +4 -4
- package/esm2022/lib/expansion-panel/toggle-animation-component.mjs +3 -3
- package/esm2022/lib/grids/api.service.mjs +3 -3
- package/esm2022/lib/grids/cell.component.mjs +3 -3
- package/esm2022/lib/grids/column-actions/column-actions-base.directive.mjs +3 -3
- package/esm2022/lib/grids/column-actions/column-actions.component.mjs +12 -12
- package/esm2022/lib/grids/column-actions/column-hiding.directive.mjs +3 -3
- package/esm2022/lib/grids/column-actions/column-pinning.directive.mjs +3 -3
- package/esm2022/lib/grids/columns/column-group.component.mjs +3 -3
- package/esm2022/lib/grids/columns/column-layout.component.mjs +3 -3
- package/esm2022/lib/grids/columns/column.component.mjs +3 -3
- package/esm2022/lib/grids/columns/templates.directive.mjs +24 -24
- package/esm2022/lib/grids/columns/validators.directive.mjs +21 -21
- package/esm2022/lib/grids/common/crud.service.mjs +3 -3
- package/esm2022/lib/grids/common/pipes.mjs +54 -54
- package/esm2022/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/base-filtering.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +9 -9
- package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +6 -6
- package/esm2022/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +3 -3
- package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +3 -3
- package/esm2022/lib/grids/grid/expandable-cell.component.mjs +3 -3
- package/esm2022/lib/grids/grid/grid-api.service.mjs +3 -3
- package/esm2022/lib/grids/grid/grid-row.component.mjs +3 -3
- package/esm2022/lib/grids/grid/grid-validation.service.mjs +3 -3
- package/esm2022/lib/grids/grid/grid.component.mjs +3 -3
- package/esm2022/lib/grids/grid/grid.details.pipe.mjs +3 -3
- package/esm2022/lib/grids/grid/grid.module.mjs +4 -4
- package/esm2022/lib/grids/grid/grid.pipes.mjs +12 -12
- package/esm2022/lib/grids/grid/grid.summary.pipe.mjs +3 -3
- package/esm2022/lib/grids/grid/groupby-row.component.mjs +3 -3
- package/esm2022/lib/grids/grid-base.directive.mjs +3 -3
- package/esm2022/lib/grids/grid-footer/grid-footer.component.mjs +3 -3
- package/esm2022/lib/grids/grid-mrl-navigation.service.mjs +3 -3
- package/esm2022/lib/grids/grid-navigation.service.mjs +3 -3
- package/esm2022/lib/grids/grid.common.mjs +3 -3
- package/esm2022/lib/grids/grid.directives.mjs +33 -33
- package/esm2022/lib/grids/grid.rowEdit.directive.mjs +15 -15
- package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +3 -3
- package/esm2022/lib/grids/grouping/group-by-area.directive.mjs +6 -6
- package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +3 -3
- package/esm2022/lib/grids/headers/grid-header-group.component.mjs +3 -3
- package/esm2022/lib/grids/headers/grid-header-row.component.mjs +3 -3
- package/esm2022/lib/grids/headers/grid-header.component.mjs +3 -3
- package/esm2022/lib/grids/headers/pipes.mjs +9 -9
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +3 -3
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +3 -3
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +3 -3
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -3
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +31 -24
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +6 -6
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +3 -3
- package/esm2022/lib/grids/hierarchical-grid/row-island-api.service.mjs +3 -3
- package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +3 -3
- package/esm2022/lib/grids/moving/moving.drag.directive.mjs +3 -3
- package/esm2022/lib/grids/moving/moving.drop.directive.mjs +3 -3
- package/esm2022/lib/grids/moving/moving.service.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-filtering.service.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-grid-navigation.service.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-grid.module.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +30 -30
- package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header.component.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +3 -3
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +3 -3
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +3 -3
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizing.service.mjs +3 -3
- package/esm2022/lib/grids/resizing/resize-handle.directive.mjs +3 -3
- package/esm2022/lib/grids/resizing/resizer.component.mjs +3 -3
- package/esm2022/lib/grids/resizing/resizer.directive.mjs +3 -3
- package/esm2022/lib/grids/resizing/resizing.service.mjs +3 -3
- package/esm2022/lib/grids/row-drag.directive.mjs +9 -9
- package/esm2022/lib/grids/row.directive.mjs +3 -3
- package/esm2022/lib/grids/selection/drag-select.directive.mjs +3 -3
- package/esm2022/lib/grids/selection/row-selectors.mjs +9 -9
- package/esm2022/lib/grids/selection/selection.service.mjs +3 -3
- package/esm2022/lib/grids/state.directive.mjs +3 -3
- package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +3 -3
- package/esm2022/lib/grids/summaries/grid-summary.service.mjs +3 -3
- package/esm2022/lib/grids/summaries/summary-cell.component.mjs +3 -3
- package/esm2022/lib/grids/summaries/summary-row.component.mjs +3 -3
- package/esm2022/lib/grids/toolbar/common.mjs +15 -15
- package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +3 -3
- package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +3 -3
- package/esm2022/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +3 -3
- package/esm2022/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +3 -3
- package/esm2022/lib/grids/toolbar/grid-toolbar.base.mjs +6 -6
- package/esm2022/lib/grids/toolbar/grid-toolbar.component.mjs +3 -3
- package/esm2022/lib/grids/tree-grid/tree-cell.component.mjs +3 -3
- package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +3 -3
- package/esm2022/lib/grids/tree-grid/tree-grid-row.component.mjs +3 -3
- package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +3 -3
- package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +3 -3
- package/esm2022/lib/grids/tree-grid/tree-grid.directives.mjs +3 -3
- package/esm2022/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +3 -3
- package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +3 -3
- package/esm2022/lib/grids/tree-grid/tree-grid.module.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.pipes.mjs +21 -21
- package/esm2022/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +3 -3
- package/esm2022/lib/icon/icon.component.mjs +3 -3
- package/esm2022/lib/icon/icon.module.mjs +4 -4
- package/esm2022/lib/icon/icon.service.mjs +3 -3
- package/esm2022/lib/input-group/input-group.component.mjs +3 -3
- package/esm2022/lib/input-group/input-group.module.mjs +4 -4
- package/esm2022/lib/list/list-item.component.mjs +3 -3
- package/esm2022/lib/list/list.common.mjs +15 -15
- package/esm2022/lib/list/list.component.mjs +18 -18
- package/esm2022/lib/list/list.module.mjs +4 -4
- package/esm2022/lib/navbar/navbar.component.mjs +9 -9
- package/esm2022/lib/navbar/navbar.module.mjs +4 -4
- package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +3 -3
- package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +9 -9
- package/esm2022/lib/navigation-drawer/navigation-drawer.module.mjs +4 -4
- package/esm2022/lib/paginator/paginator-interfaces.mjs +3 -3
- package/esm2022/lib/paginator/paginator.component.mjs +12 -12
- package/esm2022/lib/paginator/paginator.module.mjs +4 -4
- package/esm2022/lib/progressbar/progressbar.common.mjs +6 -6
- package/esm2022/lib/progressbar/progressbar.component.mjs +9 -9
- package/esm2022/lib/progressbar/progressbar.module.mjs +4 -4
- package/esm2022/lib/query-builder/query-builder-header.component.mjs +3 -3
- package/esm2022/lib/query-builder/query-builder.component.mjs +6 -6
- package/esm2022/lib/query-builder/query-builder.module.mjs +4 -4
- package/esm2022/lib/radio/radio.component.mjs +3 -3
- package/esm2022/lib/select/select-group.component.mjs +3 -3
- package/esm2022/lib/select/select-item.component.mjs +3 -3
- package/esm2022/lib/select/select-navigation.directive.mjs +3 -3
- package/esm2022/lib/select/select.component.mjs +12 -12
- package/esm2022/lib/select/select.module.mjs +4 -4
- package/esm2022/lib/services/animation/angular-animation-service.mjs +3 -3
- package/esm2022/lib/services/csv/csv-exporter.mjs +3 -3
- package/esm2022/lib/services/direction/directionality.mjs +3 -3
- package/esm2022/lib/services/excel/excel-exporter.mjs +3 -3
- package/esm2022/lib/services/excel/excel-files.mjs +5 -4
- package/esm2022/lib/services/exporter-common/base-export-service.mjs +2 -2
- package/esm2022/lib/services/overlay/overlay.mjs +3 -3
- package/esm2022/lib/services/transaction/transaction-factory.service.mjs +6 -6
- package/esm2022/lib/simple-combo/simple-combo.component.mjs +3 -3
- package/esm2022/lib/simple-combo/simple-combo.module.mjs +4 -4
- package/esm2022/lib/slider/label/thumb-label.component.mjs +3 -3
- package/esm2022/lib/slider/slider.common.mjs +9 -9
- package/esm2022/lib/slider/slider.component.mjs +3 -3
- package/esm2022/lib/slider/slider.module.mjs +4 -4
- package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +3 -3
- package/esm2022/lib/slider/ticks/tick.pipe.mjs +3 -3
- package/esm2022/lib/slider/ticks/ticks.component.mjs +3 -3
- package/esm2022/lib/snackbar/snackbar.component.mjs +3 -3
- package/esm2022/lib/snackbar/snackbar.module.mjs +4 -4
- package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +3 -3
- package/esm2022/lib/splitter/splitter.component.mjs +6 -6
- package/esm2022/lib/splitter/splitter.module.mjs +4 -4
- package/esm2022/lib/stepper/step/step.component.mjs +3 -3
- package/esm2022/lib/stepper/stepper.component.mjs +3 -3
- package/esm2022/lib/stepper/stepper.directive.mjs +21 -21
- package/esm2022/lib/stepper/stepper.module.mjs +4 -4
- package/esm2022/lib/stepper/stepper.service.mjs +3 -3
- package/esm2022/lib/switch/switch.component.mjs +3 -3
- package/esm2022/lib/switch/switch.module.mjs +4 -4
- package/esm2022/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +3 -3
- package/esm2022/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +3 -3
- package/esm2022/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +3 -3
- package/esm2022/lib/tabs/bottom-nav/bottom-nav.component.mjs +3 -3
- package/esm2022/lib/tabs/bottom-nav/bottom-nav.directives.mjs +6 -6
- package/esm2022/lib/tabs/bottom-nav/bottom-nav.module.mjs +4 -4
- package/esm2022/lib/tabs/tab-content.directive.mjs +3 -3
- package/esm2022/lib/tabs/tab-header.directive.mjs +3 -3
- package/esm2022/lib/tabs/tab-item.directive.mjs +3 -3
- package/esm2022/lib/tabs/tabs/tab-content.component.mjs +3 -3
- package/esm2022/lib/tabs/tabs/tab-header.component.mjs +3 -3
- package/esm2022/lib/tabs/tabs/tab-item.component.mjs +3 -3
- package/esm2022/lib/tabs/tabs/tabs.component.mjs +3 -3
- package/esm2022/lib/tabs/tabs/tabs.directives.mjs +6 -6
- package/esm2022/lib/tabs/tabs/tabs.module.mjs +4 -4
- package/esm2022/lib/tabs/tabs.directive.mjs +3 -3
- package/esm2022/lib/time-picker/time-picker.component.mjs +3 -3
- package/esm2022/lib/time-picker/time-picker.directives.mjs +6 -6
- package/esm2022/lib/time-picker/time-picker.module.mjs +4 -4
- package/esm2022/lib/time-picker/time-picker.pipes.mjs +6 -6
- package/esm2022/lib/toast/toast.component.mjs +3 -3
- package/esm2022/lib/toast/toast.module.mjs +4 -4
- package/esm2022/lib/tree/tree-navigation.service.mjs +3 -3
- package/esm2022/lib/tree/tree-node/tree-node.component.mjs +6 -6
- package/esm2022/lib/tree/tree-selection.service.mjs +3 -3
- package/esm2022/lib/tree/tree.component.mjs +9 -9
- package/esm2022/lib/tree/tree.module.mjs +4 -4
- package/esm2022/lib/tree/tree.service.mjs +3 -3
- package/fesm2022/igniteui-angular.mjs +1640 -1620
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/core/density.d.ts +0 -1
- package/lib/core/styles/components/button/_button-theme.scss +0 -6
- package/lib/core/styles/components/grid/_excel-filtering-theme.scss +5 -0
- package/lib/core/styles/components/grid/_grid-theme.scss +6 -0
- package/lib/directives/autocomplete/autocomplete.directive.d.ts +1 -1
- package/lib/grids/filtering/base/grid-filtering-row.component.d.ts +2 -2
- package/lib/grids/filtering/excel-style/excel-style-default-expression.component.d.ts +1 -1
- package/lib/grids/filtering/excel-style/excel-style-filtering.component.d.ts +1 -1
- package/lib/grids/grid-base.directive.d.ts +1 -1
- package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +4 -0
- package/lib/tabs/tab-content.directive.d.ts +1 -1
- package/package.json +1 -1
- package/schematics/tsconfig.tsbuildinfo +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -343,10 +343,10 @@ export class IgxColumnGroupComponent extends IgxColumnComponent {
|
|
|
343
343
|
const li = visibleChildren[visibleChildren.length - 1].visibleIndex;
|
|
344
344
|
return li - fi + 1;
|
|
345
345
|
}
|
|
346
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
347
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.
|
|
346
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
347
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.1", type: IgxColumnGroupComponent, isStandalone: true, selector: "igx-column-group", inputs: { collapsible: ["collapsible", "collapsible", booleanAttribute], expanded: ["expanded", "expanded", booleanAttribute], summaries: "summaries", searchable: ["searchable", "searchable", booleanAttribute], filters: "filters", collapsibleIndicatorTemplate: "collapsibleIndicatorTemplate", hidden: ["hidden", "hidden", booleanAttribute] }, providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(() => IgxColumnGroupComponent) }], queries: [{ propertyName: "children", predicate: IgxColumnComponent, read: IgxColumnComponent }], usesInheritance: true, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
348
348
|
}
|
|
349
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnGroupComponent, decorators: [{
|
|
350
350
|
type: Component,
|
|
351
351
|
args: [{
|
|
352
352
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -132,10 +132,10 @@ export class IgxColumnLayoutComponent extends IgxColumnGroupComponent {
|
|
|
132
132
|
this.childrenVisibleIndexes.push({ column: child, index: vIndex });
|
|
133
133
|
});
|
|
134
134
|
}
|
|
135
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
136
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.
|
|
135
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnLayoutComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
136
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.1", type: IgxColumnLayoutComponent, isStandalone: true, selector: "igx-column-layout", inputs: { hidden: ["hidden", "hidden", booleanAttribute] }, providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(() => IgxColumnLayoutComponent) }], usesInheritance: true, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
137
137
|
}
|
|
138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnLayoutComponent, decorators: [{
|
|
139
139
|
type: Component,
|
|
140
140
|
args: [{
|
|
141
141
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -1985,8 +1985,8 @@ export class IgxColumnComponent {
|
|
|
1985
1985
|
this._applySelectableClass = value;
|
|
1986
1986
|
}
|
|
1987
1987
|
}
|
|
1988
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
1989
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.
|
|
1988
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnComponent, deps: [{ token: IGX_GRID_BASE }, { token: NG_VALIDATORS, optional: true, self: true }, { token: i0.ChangeDetectorRef }, { token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1989
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.1", type: IgxColumnComponent, isStandalone: true, selector: "igx-column", inputs: { field: "field", header: "header", title: "title", sortable: ["sortable", "sortable", booleanAttribute], selectable: "selectable", groupable: ["groupable", "groupable", booleanAttribute], editable: ["editable", "editable", booleanAttribute], filterable: ["filterable", "filterable", booleanAttribute], resizable: ["resizable", "resizable", booleanAttribute], autosizeHeader: ["autosizeHeader", "autosizeHeader", booleanAttribute], hasSummary: ["hasSummary", "hasSummary", booleanAttribute], hidden: ["hidden", "hidden", booleanAttribute], disableHiding: ["disableHiding", "disableHiding", booleanAttribute], disablePinning: ["disablePinning", "disablePinning", booleanAttribute], movable: ["movable", "movable", booleanAttribute], width: "width", maxWidth: "maxWidth", headerClasses: "headerClasses", headerStyles: "headerStyles", headerGroupClasses: "headerGroupClasses", headerGroupStyles: "headerGroupStyles", cellClasses: "cellClasses", cellStyles: "cellStyles", formatter: "formatter", summaryFormatter: "summaryFormatter", filteringIgnoreCase: ["filteringIgnoreCase", "filteringIgnoreCase", booleanAttribute], sortingIgnoreCase: ["sortingIgnoreCase", "sortingIgnoreCase", booleanAttribute], searchable: ["searchable", "searchable", booleanAttribute], dataType: "dataType", collapsibleIndicatorTemplate: "collapsibleIndicatorTemplate", rowEnd: "rowEnd", colEnd: "colEnd", rowStart: "rowStart", colStart: "colStart", additionalTemplateContext: "additionalTemplateContext", minWidth: "minWidth", pinned: ["pinned", "pinned", booleanAttribute], summaries: "summaries", filters: "filters", sortStrategy: "sortStrategy", groupingComparer: "groupingComparer", summaryTemplate: "summaryTemplate", bodyTemplate: ["cellTemplate", "bodyTemplate"], headerTemplate: "headerTemplate", inlineEditorTemplate: ["cellEditorTemplate", "inlineEditorTemplate"], errorTemplate: "errorTemplate", filterCellTemplate: "filterCellTemplate", visibleWhenCollapsed: ["visibleWhenCollapsed", "visibleWhenCollapsed", booleanAttribute], pipeArgs: "pipeArgs" }, outputs: { hiddenChange: "hiddenChange", expandedChange: "expandedChange", collapsibleChange: "collapsibleChange", visibleWhenCollapsedChange: "visibleWhenCollapsedChange", columnChange: "columnChange", widthChange: "widthChange", pinnedChange: "pinnedChange" }, queries: [{ propertyName: "filterCellTemplateDirective", first: true, predicate: IgxFilterCellTemplateDirective, descendants: true, read: IgxFilterCellTemplateDirective }, { propertyName: "summaryTemplateDirective", first: true, predicate: IgxSummaryTemplateDirective, descendants: true, read: IgxSummaryTemplateDirective }, { propertyName: "cellTemplate", first: true, predicate: IgxCellTemplateDirective, descendants: true, read: IgxCellTemplateDirective }, { propertyName: "cellValidationErrorTemplate", first: true, predicate: IgxCellValidationErrorDirective, descendants: true, read: IgxCellValidationErrorDirective }, { propertyName: "editorTemplate", first: true, predicate: IgxCellEditorTemplateDirective, descendants: true, read: IgxCellEditorTemplateDirective }, { propertyName: "collapseIndicatorTemplate", first: true, predicate: IgxCollapsibleIndicatorTemplateDirective, descendants: true, read: IgxCollapsibleIndicatorTemplateDirective }, { propertyName: "headTemplate", predicate: IgxCellHeaderTemplateDirective, read: IgxCellHeaderTemplateDirective }], ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1990
1990
|
}
|
|
1991
1991
|
__decorate([
|
|
1992
1992
|
notifyChanges(),
|
|
@@ -2126,7 +2126,7 @@ __decorate([
|
|
|
2126
2126
|
notifyChanges(),
|
|
2127
2127
|
WatchColumnChanges()
|
|
2128
2128
|
], IgxColumnComponent.prototype, "pipeArgs", null);
|
|
2129
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
2129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnComponent, decorators: [{
|
|
2130
2130
|
type: Component,
|
|
2131
2131
|
args: [{
|
|
2132
2132
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -7,10 +7,10 @@ export class IgxFilterCellTemplateDirective {
|
|
|
7
7
|
static ngTemplateContextGuard(_directive, context) {
|
|
8
8
|
return true;
|
|
9
9
|
}
|
|
10
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
11
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxFilterCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
11
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxFilterCellTemplateDirective, isStandalone: true, selector: "[igxFilterCellTemplate]", ngImport: i0 }); }
|
|
12
12
|
}
|
|
13
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxFilterCellTemplateDirective, decorators: [{
|
|
14
14
|
type: Directive,
|
|
15
15
|
args: [{
|
|
16
16
|
selector: '[igxFilterCellTemplate]',
|
|
@@ -24,10 +24,10 @@ export class IgxCellTemplateDirective {
|
|
|
24
24
|
static ngTemplateContextGuard(_directive, context) {
|
|
25
25
|
return true;
|
|
26
26
|
}
|
|
27
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
28
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
28
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxCellTemplateDirective, isStandalone: true, selector: "[igxCell]", ngImport: i0 }); }
|
|
29
29
|
}
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellTemplateDirective, decorators: [{
|
|
31
31
|
type: Directive,
|
|
32
32
|
args: [{
|
|
33
33
|
selector: '[igxCell]',
|
|
@@ -41,10 +41,10 @@ export class IgxCellValidationErrorDirective {
|
|
|
41
41
|
static ngTemplateContextGuard(_directive, context) {
|
|
42
42
|
return true;
|
|
43
43
|
}
|
|
44
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
45
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
44
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellValidationErrorDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
45
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxCellValidationErrorDirective, isStandalone: true, selector: "[igxCellValidationError]", ngImport: i0 }); }
|
|
46
46
|
}
|
|
47
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellValidationErrorDirective, decorators: [{
|
|
48
48
|
type: Directive,
|
|
49
49
|
args: [{
|
|
50
50
|
selector: '[igxCellValidationError]',
|
|
@@ -58,10 +58,10 @@ export class IgxCellHeaderTemplateDirective {
|
|
|
58
58
|
static ngTemplateContextGuard(_directive, context) {
|
|
59
59
|
return true;
|
|
60
60
|
}
|
|
61
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
62
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellHeaderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
62
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxCellHeaderTemplateDirective, isStandalone: true, selector: "[igxHeader]", ngImport: i0 }); }
|
|
63
63
|
}
|
|
64
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellHeaderTemplateDirective, decorators: [{
|
|
65
65
|
type: Directive,
|
|
66
66
|
args: [{
|
|
67
67
|
selector: '[igxHeader]',
|
|
@@ -75,10 +75,10 @@ export class IgxCellFooterTemplateDirective {
|
|
|
75
75
|
constructor(template) {
|
|
76
76
|
this.template = template;
|
|
77
77
|
}
|
|
78
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
79
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
78
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellFooterTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
79
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxCellFooterTemplateDirective, isStandalone: true, selector: "[igxFooter]", ngImport: i0 }); }
|
|
80
80
|
}
|
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellFooterTemplateDirective, decorators: [{
|
|
82
82
|
type: Directive,
|
|
83
83
|
args: [{
|
|
84
84
|
selector: '[igxFooter]',
|
|
@@ -92,10 +92,10 @@ export class IgxCellEditorTemplateDirective {
|
|
|
92
92
|
static ngTemplateContextGuard(_directive, context) {
|
|
93
93
|
return true;
|
|
94
94
|
}
|
|
95
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
96
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
95
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellEditorTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
96
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxCellEditorTemplateDirective, isStandalone: true, selector: "[igxCellEditor]", ngImport: i0 }); }
|
|
97
97
|
}
|
|
98
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCellEditorTemplateDirective, decorators: [{
|
|
99
99
|
type: Directive,
|
|
100
100
|
args: [{
|
|
101
101
|
selector: '[igxCellEditor]',
|
|
@@ -109,10 +109,10 @@ export class IgxCollapsibleIndicatorTemplateDirective {
|
|
|
109
109
|
static ngTemplateContextGuard(_directive, context) {
|
|
110
110
|
return true;
|
|
111
111
|
}
|
|
112
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
113
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
112
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCollapsibleIndicatorTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
113
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxCollapsibleIndicatorTemplateDirective, isStandalone: true, selector: "[igxCollapsibleIndicator]", ngImport: i0 }); }
|
|
114
114
|
}
|
|
115
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
115
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxCollapsibleIndicatorTemplateDirective, decorators: [{
|
|
116
116
|
type: Directive,
|
|
117
117
|
args: [{
|
|
118
118
|
selector: '[igxCollapsibleIndicator]',
|
|
@@ -126,10 +126,10 @@ export class IgxSummaryTemplateDirective {
|
|
|
126
126
|
static ngTemplateContextGuard(_directive, context) {
|
|
127
127
|
return true;
|
|
128
128
|
}
|
|
129
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
130
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
129
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxSummaryTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
130
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxSummaryTemplateDirective, isStandalone: true, selector: "[igxSummary]", ngImport: i0 }); }
|
|
131
131
|
}
|
|
132
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxSummaryTemplateDirective, decorators: [{
|
|
133
133
|
type: Directive,
|
|
134
134
|
args: [{
|
|
135
135
|
selector: '[igxSummary]',
|
|
@@ -2,14 +2,14 @@ import { Directive } from '@angular/core';
|
|
|
2
2
|
import { RequiredValidator, NG_VALIDATORS, MinValidator, MaxValidator, EmailValidator, MinLengthValidator, MaxLengthValidator, PatternValidator } from '@angular/forms';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class IgxColumnRequiredValidatorDirective extends RequiredValidator {
|
|
5
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
6
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnRequiredValidatorDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
6
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxColumnRequiredValidatorDirective, isStandalone: true, selector: "igx-column[required]", providers: [{
|
|
7
7
|
provide: NG_VALIDATORS,
|
|
8
8
|
useExisting: IgxColumnRequiredValidatorDirective,
|
|
9
9
|
multi: true
|
|
10
10
|
}], usesInheritance: true, ngImport: i0 }); }
|
|
11
11
|
}
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnRequiredValidatorDirective, decorators: [{
|
|
13
13
|
type: Directive,
|
|
14
14
|
args: [{
|
|
15
15
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -23,14 +23,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
23
23
|
}]
|
|
24
24
|
}] });
|
|
25
25
|
export class IgxColumnMinValidatorDirective extends MinValidator {
|
|
26
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
27
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnMinValidatorDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
27
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxColumnMinValidatorDirective, isStandalone: true, selector: "igx-column[min]", providers: [{
|
|
28
28
|
provide: NG_VALIDATORS,
|
|
29
29
|
useExisting: IgxColumnMinValidatorDirective,
|
|
30
30
|
multi: true
|
|
31
31
|
}], usesInheritance: true, ngImport: i0 }); }
|
|
32
32
|
}
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnMinValidatorDirective, decorators: [{
|
|
34
34
|
type: Directive,
|
|
35
35
|
args: [{
|
|
36
36
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -44,14 +44,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
44
44
|
}]
|
|
45
45
|
}] });
|
|
46
46
|
export class IgxColumnMaxValidatorDirective extends MaxValidator {
|
|
47
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
48
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
47
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnMaxValidatorDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
48
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxColumnMaxValidatorDirective, isStandalone: true, selector: "igx-column[max]", providers: [{
|
|
49
49
|
provide: NG_VALIDATORS,
|
|
50
50
|
useExisting: IgxColumnMaxValidatorDirective,
|
|
51
51
|
multi: true
|
|
52
52
|
}], usesInheritance: true, ngImport: i0 }); }
|
|
53
53
|
}
|
|
54
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnMaxValidatorDirective, decorators: [{
|
|
55
55
|
type: Directive,
|
|
56
56
|
args: [{
|
|
57
57
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -65,14 +65,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
65
65
|
}]
|
|
66
66
|
}] });
|
|
67
67
|
export class IgxColumnEmailValidatorDirective extends EmailValidator {
|
|
68
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
69
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
68
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnEmailValidatorDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
69
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxColumnEmailValidatorDirective, isStandalone: true, selector: "igx-column[email]", providers: [{
|
|
70
70
|
provide: NG_VALIDATORS,
|
|
71
71
|
useExisting: IgxColumnEmailValidatorDirective,
|
|
72
72
|
multi: true
|
|
73
73
|
}], usesInheritance: true, ngImport: i0 }); }
|
|
74
74
|
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnEmailValidatorDirective, decorators: [{
|
|
76
76
|
type: Directive,
|
|
77
77
|
args: [{
|
|
78
78
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -86,14 +86,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
86
86
|
}]
|
|
87
87
|
}] });
|
|
88
88
|
export class IgxColumnMinLengthValidatorDirective extends MinLengthValidator {
|
|
89
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
90
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
89
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnMinLengthValidatorDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
90
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxColumnMinLengthValidatorDirective, isStandalone: true, selector: "igx-column[minlength]", providers: [{
|
|
91
91
|
provide: NG_VALIDATORS,
|
|
92
92
|
useExisting: IgxColumnMinLengthValidatorDirective,
|
|
93
93
|
multi: true
|
|
94
94
|
}], usesInheritance: true, ngImport: i0 }); }
|
|
95
95
|
}
|
|
96
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
96
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnMinLengthValidatorDirective, decorators: [{
|
|
97
97
|
type: Directive,
|
|
98
98
|
args: [{
|
|
99
99
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -107,14 +107,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
107
107
|
}]
|
|
108
108
|
}] });
|
|
109
109
|
export class IgxColumnMaxLengthValidatorDirective extends MaxLengthValidator {
|
|
110
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
111
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
110
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnMaxLengthValidatorDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
111
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxColumnMaxLengthValidatorDirective, isStandalone: true, selector: "igx-column[maxlength]", providers: [{
|
|
112
112
|
provide: NG_VALIDATORS,
|
|
113
113
|
useExisting: IgxColumnMaxLengthValidatorDirective,
|
|
114
114
|
multi: true
|
|
115
115
|
}], usesInheritance: true, ngImport: i0 }); }
|
|
116
116
|
}
|
|
117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumnMaxLengthValidatorDirective, decorators: [{
|
|
118
118
|
type: Directive,
|
|
119
119
|
args: [{
|
|
120
120
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -128,14 +128,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
128
128
|
}]
|
|
129
129
|
}] });
|
|
130
130
|
export class IgxColumPatternValidatorDirective extends PatternValidator {
|
|
131
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
132
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
131
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumPatternValidatorDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
132
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxColumPatternValidatorDirective, isStandalone: true, selector: "igx-column[pattern]", providers: [{
|
|
133
133
|
provide: NG_VALIDATORS,
|
|
134
134
|
useExisting: IgxColumPatternValidatorDirective,
|
|
135
135
|
multi: true
|
|
136
136
|
}], usesInheritance: true, ngImport: i0 }); }
|
|
137
137
|
}
|
|
138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxColumPatternValidatorDirective, decorators: [{
|
|
139
139
|
type: Directive,
|
|
140
140
|
args: [{
|
|
141
141
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -616,10 +616,10 @@ export class IgxGridCRUDService extends IgxRowAddCrudState {
|
|
|
616
616
|
}
|
|
617
617
|
return false;
|
|
618
618
|
}
|
|
619
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
620
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
619
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridCRUDService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
620
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridCRUDService }); }
|
|
621
621
|
}
|
|
622
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
622
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridCRUDService, decorators: [{
|
|
623
623
|
type: Injectable
|
|
624
624
|
}] });
|
|
625
625
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9jcnVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQUVyRSxNQUFNLE9BQU8sVUFBVTtJQU1uQixZQUFtQixFQUFPLEVBQVMsS0FBYSxFQUFTLElBQVMsRUFBUyxJQUFjO1FBQXRFLE9BQUUsR0FBRixFQUFFLENBQUs7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUFTLFNBQUksR0FBSixJQUFJLENBQVU7UUFGbEYsaUJBQVksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUdwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsS0FBYTtRQUM1RCxNQUFNLElBQUksR0FBdUI7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ25CLE9BQU8s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U0FDbkQ7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzhHQS9JUSxrQkFBa0I7a0hBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSUdyaWRFZGl0RG9uZUV2ZW50QXJncywgSUdyaWRFZGl0RXZlbnRBcmdzLCBJUm93RGF0YUV2ZW50QXJncyB9IGZyb20gJy4uL2NvbW1vbi9ldmVudHMnO1xuaW1wb3J0IHsgR3JpZFR5cGUsIFJvd1R5cGUgfSBmcm9tICcuL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvcHlEZXNjcmlwdG9ycywgaXNFcXVhbCwgaXNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlVGltZVV0aWwgfSBmcm9tICcuLi8uLi9kYXRlLWNvbW1vbi91dGlsL2RhdGUtdGltZS51dGlsJztcblxuZXhwb3J0IGNsYXNzIElneEVkaXRSb3cge1xuICAgIHB1YmxpYyB0cmFuc2FjdGlvblN0YXRlOiBhbnk7XG4gICAgcHVibGljIHN0YXRlOiBhbnk7XG4gICAgcHVibGljIG5ld0RhdGE6IGFueTtcbiAgICBwdWJsaWMgcm93Rm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgaWQ6IGFueSwgcHVibGljIGluZGV4OiBudW1iZXIsIHB1YmxpYyBkYXRhOiBhbnksIHB1YmxpYyBncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICB0aGlzLnJvd0Zvcm1Hcm91cCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmNyZWF0ZShpZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcHJpbWFyeUtleTogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGlzQWRkUm93OiBmYWxzZSxcbiAgICAgICAgICAgIHZhbGlkOiB0aGlzLnJvd0Zvcm1Hcm91cC52YWxpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbmNsdWRlTmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGFyZ3MubmV3VmFsdWUgPSB0aGlzLm5ld0RhdGEgPz8gdGhpcy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyhjYWNoZWRSb3dEYXRhOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgP1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5pZCwgdHJ1ZSkgOiB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQpO1xuICAgICAgICBjb25zdCByb3dEYXRhID0gdXBkYXRlZERhdGEgPz8gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Um93RGF0YSh0aGlzLmlkKTtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcHJpbWFyeUtleTogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogY2FjaGVkUm93RGF0YSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB1cGRhdGVkRGF0YSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hBZGRSb3cgZXh0ZW5kcyBJZ3hFZGl0Um93IHtcbiAgICBwdWJsaWMgaXNBZGRSb3cgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IGFueSxcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgZGF0YTogYW55LFxuICAgICAgICBwdWJsaWMgcmVjb3JkUmVmOiBhbnksXG4gICAgICAgIGdyaWQ6IEdyaWRUeXBlKSB7XG4gICAgICAgIHN1cGVyKGlkLCBpbmRleCwgZGF0YSwgZ3JpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZUVkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5jcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICBhcmdzLm9sZFZhbHVlID0gbnVsbDtcbiAgICAgICAgYXJncy5pc0FkZFJvdyA9IHRydWU7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyhjYWNoZWRSb3dEYXRhOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHN1cGVyLmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKG51bGwsIGV2ZW50KTtcbiAgICAgICAgYXJncy5pc0FkZFJvdyA9IHRydWU7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZ3hBZGRSb3dQYXJlbnQge1xuICAgIHJvd0lEOiBzdHJpbmc7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBhc0NoaWxkOiBib29sZWFuO1xuICAgIGlzUGlubmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgSWd4Q2VsbCB7XG4gICAgcHVibGljIHByaW1hcnlLZXk6IGFueTtcbiAgICBwdWJsaWMgc3RhdGU6IGFueTtcbiAgICBwdWJsaWMgcGVuZGluZ1ZhbHVlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkLFxuICAgICAgICBwdWJsaWMgcm93SW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNvbHVtbixcbiAgICAgICAgcHVibGljIHZhbHVlOiBhbnksXG4gICAgICAgIHB1YmxpYyBfZWRpdFZhbHVlOiBhbnksXG4gICAgICAgIHB1YmxpYyByb3dEYXRhOiBhbnksXG4gICAgICAgIHB1YmxpYyBncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICB0aGlzLmdyaWQudmFsaWRhdGlvbi5jcmVhdGUoaWQucm93SUQsIHJvd0RhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdFZhbHVlKCkge1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmdldEZvcm1Db250cm9sKHRoaXMuaWQucm93SUQsIHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGVkaXRWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmdldEZvcm1Db250cm9sKHRoaXMuaWQucm93SUQsIHRoaXMuY29sdW1uLmZpZWxkKTtcblxuICAgICAgICBpZiAodGhpcy5ncmlkLnZhbGlkYXRpb25UcmlnZ2VyID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgLy8gaW4gY2FzZSB0cmlnZ2VyIGlzIGNoYW5nZSwgbWFyayBhcyB0b3VjaGVkLlxuICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjYXN0VG9OdW1iZXIodmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gJ251bWJlcicgJiYgIXRoaXMuY29sdW1uLmlubGluZUVkaXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gIWlzTmFOKHYpICYmIGlzRmluaXRlKHYpID8gdiA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZ3JpZC52YWxpZGF0aW9uLmdldEZvcm1Db250cm9sKHRoaXMuaWQucm93SUQsIHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQucm93SUQsXG4gICAgICAgICAgICBwcmltYXJ5S2V5OiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgY2VsbElEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YTogdGhpcy5yb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICB2YWxpZDogZm9ybUNvbnRyb2wgPyBmb3JtQ29udHJvbC52YWxpZCA6IHRydWUsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5jYXN0VG9OdW1iZXIodGhpcy5lZGl0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyh2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMuaWQucm93SUQsIHRydWUpIDogdGhpcy5yb3dEYXRhO1xuICAgICAgICBjb25zdCByb3dEYXRhID0gdXBkYXRlZERhdGEgPT09IG51bGwgPyB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQucm93SUQpIDogdXBkYXRlZERhdGE7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5ncmlkLnZhbGlkYXRpb24uZ2V0Rm9ybUNvbnRyb2wodGhpcy5pZC5yb3dJRCwgdGhpcy5jb2x1bW4uZmllbGQpO1xuICAgICAgICBjb25zdCBhcmdzOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQucm93SUQsXG4gICAgICAgICAgICBwcmltYXJ5S2V5OiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgY2VsbElEOiB0aGlzLmlkLFxuICAgICAgICAgICAgLy8gcm93RGF0YSAtIHNob3VsZCBiZSB0aGUgdXBkYXRlZC9jb21taXR0ZWQgcm93RGF0YSAtIHRoaXMgZWZmZWN0aXZlbHkgc2hvdWxkIGJlIHRoZSBuZXdWYWx1ZVxuICAgICAgICAgICAgLy8gdGhlIG9ubHkgY2FzZSB3ZSB1c2UgdGhpcy5yb3dEYXRhIGRpcmVjdGx5LCBpcyB3aGVuIHRoZXJlIGlzIG5vIHJvd0VkaXRpbmcgb3IgdHJhbnNhY3Rpb25zIGVuYWJsZWRcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIHZhbGlkOiBmb3JtQ29udHJvbCA/IGZvcm1Db250cm9sLnZhbGlkIDogdHJ1ZSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgICAgICAgICBvd25lcjogdGhpcy5ncmlkLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4Q2VsbENydWRTdGF0ZSB7XG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuICAgIHB1YmxpYyBjZWxsOiBJZ3hDZWxsIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIHJvdzogSWd4RWRpdFJvdyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBpc0luQ29tcG9zaXRpb25Nb2RlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY3JlYXRlQ2VsbChjZWxsKTogSWd4Q2VsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNlbGwgPSBuZXcgSWd4Q2VsbChjZWxsLmNlbGxJRCB8fCBjZWxsLmlkLCBjZWxsLnJvdy5pbmRleCwgY2VsbC5jb2x1bW4sIGNlbGwudmFsdWUsIGNlbGwudmFsdWUsXG4gICAgICAgICAgICBjZWxsLnJvdy5kYXRhLCBjZWxsLmdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSb3coY2VsbDogSWd4Q2VsbCk6IElneEVkaXRSb3cge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cgPSBuZXcgSWd4RWRpdFJvdyhjZWxsLmlkLnJvd0lELCBjZWxsLnJvd0luZGV4LCBjZWxsLnJvd0RhdGEsIGNlbGwuZ3JpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNhbWVSb3cocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ICYmIHRoaXMucm93LmlkID09PSByb3dJRDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2FtZUNlbGwoY2VsbDogSWd4Q2VsbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuY2VsbC5pZC5yb3dJRCA9PT0gY2VsbC5pZC5yb3dJRCAmJlxuICAgICAgICAgICAgdGhpcy5jZWxsLmlkLmNvbHVtbklEID09PSBjZWxsLmlkLmNvbHVtbklEKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNlbGxJbkVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmNlbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGJlZ2luQ2VsbEVkaXQoZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsLmNyZWF0ZUVkaXRFdmVudEFyZ3MoZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0RW50ZXIuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIGNlbGxFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbC5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDZWxsKGV4aXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmdyaWQudmFsaWRhdGlvbi5nZXRGb3JtQ29udHJvbCh0aGlzLmNlbGwuaWQucm93SUQsIHRoaXMuY2VsbC5jb2x1bW4uZmllbGQpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnZhbGlkYXRpb25UcmlnZ2VyID09PSAnYmx1cicgJiYgdGhpcy5jZWxsLnBlbmRpbmdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRyaWdnZXIgaXMgYmx1ciwgdXBkYXRlIHZhbHVlIGlmIHRoZXJlJ3MgYSBwZW5kaW5nIG9uZSBhbmQgbWFyayBhcyB0b3VjaGVkLlxuICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5jZWxsLnBlbmRpbmdWYWx1ZSk7XG4gICAgICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncmlkLnZhbGlkYXRpb25UcmlnZ2VyID09PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkb25lQXJncztcbiAgICAgICAgaWYgKHRoaXMuY2VsbC5jb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJyAmJiAhaXNEYXRlKHRoaXMuY2VsbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChpc0VxdWFsKERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodGhpcy5jZWxsLnZhbHVlKSwgdGhpcy5jZWxsLmVkaXRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBkb25lQXJncyA9IHRoaXMuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRXF1YWwodGhpcy5jZWxsLnZhbHVlLCB0aGlzLmNlbGwuZWRpdFZhbHVlKSkge1xuICAgICAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsRWRpdChldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmNlbGwpO1xuXG4gICAgICAgIGRvbmVBcmdzID0gdGhpcy5jZWxsRWRpdERvbmUoZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKGV4aXQpIHtcbiAgICAgICAgICAgIGRvbmVBcmdzID0gdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uYXJncywgLi4uZG9uZUFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2VsbEVkaXREb25lKGV2ZW50LCBhZGRSb3c6IGJvb2xlYW4pOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmNlbGwuY2FzdFRvTnVtYmVyKHRoaXMuY2VsbC5lZGl0VmFsdWUpO1xuICAgICAgICBjb25zdCBkb25lQXJncyA9IHRoaXMuY2VsbC5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhuZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXREb25lLmVtaXQoZG9uZUFyZ3MpO1xuICAgICAgICBpZiAoYWRkUm93KSB7XG4gICAgICAgICAgICBkb25lQXJncy5yb3dEYXRhID0gdGhpcy5yb3cuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIEV4aXQgY2VsbCBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdENlbGxFZGl0KGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuY2VsbC5jYXN0VG9OdW1iZXIodGhpcy5jZWxsLmVkaXRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGw/LmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKG5ld1ZhbHVlLCBldmVudCk7XG5cbiAgICAgICAgdGhpcy5jZWxsLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdEV4aXQuZW1pdChhcmdzKTtcbiAgICAgICAgdGhpcy5lbmRDZWxsRWRpdCgpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cblxuICAgIC8qKiBDbGVhcnMgY2VsbCBlZGl0aW5nIHN0YXRlICovXG4gICAgcHVibGljIGVuZENlbGxFZGl0KCkge1xuICAgICAgICB0aGlzLmNlbGwgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHRhcmdldGVkIGNlbGwgaXMgaW4gZWRpdCBtb2RlICovXG4gICAgcHVibGljIHRhcmdldEluRWRpdChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5jZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5jZWxsLmNvbHVtbi5pbmRleCA9PT0gY29sdW1uSW5kZXggJiYgdGhpcy5jZWxsLnJvd0luZGV4ID09PSByb3dJbmRleDtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgSWd4Um93Q3J1ZFN0YXRlIGV4dGVuZHMgSWd4Q2VsbENydWRTdGF0ZSB7XG4gICAgcHVibGljIGNsb3NlUm93RWRpdGluZ092ZXJsYXkgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBfcm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9yb3dFZGl0aW5nU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGdldCBwcmltYXJ5S2V5KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0luRWRpdE1vZGUoKTogUm93VHlwZSB7XG4gICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMucm93O1xuICAgICAgICByZXR1cm4gZWRpdFJvd1N0YXRlICE9PSBudWxsID8gdGhpcy5ncmlkLnJvd0xpc3QuZmluZChlID0+IGUua2V5ID09PSBlZGl0Um93U3RhdGUuaWQpIDogbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0VkaXRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93RWRpdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBub25FZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSAmJiAodGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gbnVsbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFZGl0aW5nQmxvY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0VkaXRpbmdCbG9ja2VkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcm93RWRpdGluZ0Jsb2NrZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Jvd0VkaXRpbmdCbG9ja2VkID0gdmFsO1xuICAgIH1cblxuICAgIC8qKiBFbnRlcnMgcm93IGVkaXQgbW9kZSAqL1xuICAgIHB1YmxpYyBiZWdpblJvd0VkaXQoZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMucm93IHx8ICEodGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEVkaXRSb3cubmFtZSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVJvdyh0aGlzLmNlbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3Jvd0VkaXRpbmdTdGFydGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93QXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3MoZmFsc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0RW50ZXIuZW1pdChyb3dBcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAocm93QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRFZGl0TW9kZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9yb3dFZGl0aW5nU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93LnRyYW5zYWN0aW9uU3RhdGUgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvdy5pZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLnN0YXJ0UGVuZGluZygpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm9wZW5Sb3dPdmVybGF5KHRoaXMucm93LmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByb3dFZGl0KGV2ZW50OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXQuZW1pdChhcmdzKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVJvdyhjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSB8fFxuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRpbmdPdmVybGF5ICYmXG4gICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdGluZ092ZXJsYXkuY29sbGFwc2VkIHx8ICF0aGlzLnJvdykge1xuICAgICAgICAgICAgcmV0dXJuIHt9IGFzIElHcmlkRWRpdEV2ZW50QXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhcmdzO1xuICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICB0aGlzLnJvdy5uZXdEYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3cuaWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3dFZGl0RGF0YSh0aGlzLnJvdywgdGhpcy5yb3cubmV3RGF0YSk7XG4gICAgICAgICAgICBhcmdzID0gdGhpcy5yb3dFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXJncyA9IHRoaXMuZW5kUm93VHJhbnNhY3Rpb24oY29tbWl0LCBldmVudCk7XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5kUm93VHJhbnNhY3Rpb24oY29tbWl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgdGhpcy5yb3cubmV3RGF0YSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMucm93LmlkLCB0cnVlKTtcbiAgICAgICAgbGV0IHJvd0VkaXRBcmdzID0gdGhpcy5yb3cuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG5cbiAgICAgICAgbGV0IG5vbkNhbmNlbGFibGVBcmdzO1xuICAgICAgICBpZiAoIWNvbW1pdCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzQWRkUm93ID0gdGhpcy5yb3cgJiYgdGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEFkZFJvdy5uYW1lO1xuICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLnJvdyA/IHRoaXMucm93LmlkIDogdGhpcy5jZWxsLmlkLnJvd0lEO1xuICAgICAgICAgICAgaWYgKGlzQWRkUm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnZhbGlkYXRpb24uY2xlYXIoaWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmFsaWRhdGlvbi51cGRhdGUoaWQsIHJvd0VkaXRBcmdzLm9sZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4RWRpdFJvdy5uYW1lKSB7XG4gICAgICAgICAgICByb3dFZGl0QXJncyA9IHRoaXMuZ3JpZC5ncmlkQVBJLnVwZGF0ZV9yb3codGhpcy5yb3csIHRoaXMucm93Lm5ld0RhdGEsIGV2ZW50KTtcbiAgICAgICAgICAgIG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5yb3dFZGl0RG9uZShyb3dFZGl0QXJncy5vbGRWYWx1ZSwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm93QWRkQXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZC5lbWl0KHJvd0FkZEFyZ3MpO1xuICAgICAgICAgICAgaWYgKHJvd0FkZEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvd0FkZEFyZ3M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5nZXRQYXJlbnRSb3dJZCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkuYWRkUm93VG9EYXRhKHRoaXMucm93Lm5ld0RhdGEgPz8gdGhpcy5yb3cuZGF0YSwgcGFyZW50SWQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyaWdnZXJQaXBlcygpO1xuXG4gICAgICAgICAgICBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMucm93RWRpdERvbmUobnVsbCwgZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLmV4aXRSb3dFZGl0KHJvd0VkaXRBcmdzLm9sZFZhbHVlLCBldmVudCk7XG5cbiAgICAgICAgcmV0dXJuIHsgLi4ubm9uQ2FuY2VsYWJsZUFyZ3MsIC4uLnJvd0VkaXRBcmdzIH07XG4gICAgfVxuXG4gICAgcHVibGljIHJvd0VkaXREb25lKGNhY2hlZFJvd0RhdGEsIGV2ZW50OiBFdmVudCkge1xuICAgICAgICBjb25zdCBkb25lQXJncyA9IHRoaXMucm93LmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKGNhY2hlZFJvd0RhdGEsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXREb25lLmVtaXQoZG9uZUFyZ3MpO1xuICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgfVxuXG5cbiAgICAvKiogRXhpdCByb3cgZWRpdCBtb2RlICovXG4gICAgcHVibGljIGV4aXRSb3dFZGl0KGNhY2hlZFJvd0RhdGEsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3Qgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhjYWNoZWRSb3dEYXRhLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0RXhpdC5lbWl0KG5vbkNhbmNlbGFibGVBcmdzKTtcbiAgICAgICAgdGhpcy5ncmlkLmNsb3NlUm93RWRpdGluZ092ZXJsYXkoKTtcblxuICAgICAgICB0aGlzLmVuZFJvd0VkaXQoKTtcbiAgICAgICAgcmV0dXJuIG5vbkNhbmNlbGFibGVBcmdzO1xuICAgIH1cblxuICAgIC8qKiBDbGVhcnMgcm93IGVkaXRpbmcgc3RhdGUgKi9cbiAgICBwdWJsaWMgZW5kUm93RWRpdCgpIHtcbiAgICAgICAgdGhpcy5yb3cgPSBudWxsO1xuICAgICAgICB0aGlzLnJvd0VkaXRpbmdCbG9ja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Jvd0VkaXRpbmdTdGFydGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyBjZWxsIGFuZCByb3cgZWRpdGluZyBzdGF0ZSBhbmQgY2xvc2VzIHJvdyBlZGl0aW5nIHRlbXBsYXRlIGlmIGl0IGlzIG9wZW4gKi9cbiAgICBwdWJsaWMgZW5kRWRpdE1vZGUoKSB7XG4gICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5lbmRSb3dFZGl0KCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2xvc2VSb3dFZGl0aW5nT3ZlcmxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVJvd0VkaXREYXRhKHJvdzogSWd4RWRpdFJvdywgdmFsdWU/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcblxuICAgICAgICBjb25zdCByb3dJbkVkaXRNb2RlID0gZ3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLnJvdztcbiAgICAgICAgcm93Lm5ld0RhdGEgPSB2YWx1ZSA/PyByb3dJbkVkaXRNb2RlLnRyYW5zYWN0aW9uU3RhdGU7XG5cblxuICAgICAgICBpZiAocm93SW5FZGl0TW9kZSAmJiByb3cuaWQgPT09IHJvd0luRWRpdE1vZGUuaWQpIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdCB1c2Ugc3ByZWFkIG9wZXJhdG9yIGhlcmUgYXMgaXQgd2lsbCBjb3B5IGV2ZXJ5dGhpbmcgb3ZlciBhbiBlbXB0eSBvYmplY3Qgd2l0aCBubyBkZXNjcmlwdG9yc1xuICAgICAgICAgICAgcm93LmRhdGEgPSBPYmplY3QuYXNzaWduKGNvcHlEZXNjcmlwdG9ycyhyb3cuZGF0YSksIHJvdy5kYXRhLCByb3dJbkVkaXRNb2RlLnRyYW5zYWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgLy8gVE9ETzogV29ya2Fyb3VuZCBmb3IgdXBkYXRpbmcgYSByb3cgaW4gZWRpdCBtb2RlIHRocm91Z2ggdGhlIEFQSVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3cuaWQpO1xuICAgICAgICAgICAgcm93LmRhdGEgPSBzdGF0ZSA/IE9iamVjdC5hc3NpZ24oe30sIHJvdy5kYXRhLCBzdGF0ZS52YWx1ZSkgOiByb3cuZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQYXJlbnRSb3dJZCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4Um93QWRkQ3J1ZFN0YXRlIGV4dGVuZHMgSWd4Um93Q3J1ZFN0YXRlIHtcbiAgICBwdWJsaWMgYWRkUm93UGFyZW50OiBJZ3hBZGRSb3dQYXJlbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlQWRkUm93KHBhcmVudFJvdzogUm93VHlwZSwgYXNDaGlsZD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jcmVhdGVBZGRSb3dQYXJlbnQocGFyZW50Um93LCBhc0NoaWxkKTtcblxuICAgICAgICBjb25zdCBuZXdSZWMgPSB0aGlzLmdyaWQuZ2V0RW1wdHlSZWNvcmRPYmplY3RGb3IocGFyZW50Um93KTtcbiAgICAgICAgY29uc3QgYWRkUm93SW5kZXggPSB0aGlzLmFkZFJvd1BhcmVudC5pbmRleCArIDE7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdyA9IG5ldyBJZ3hBZGRSb3cobmV3UmVjLnJvd0lELCBhZGRSb3dJbmRleCwgbmV3UmVjLmRhdGEsIG5ld1JlYy5yZWNvcmRSZWYsIHRoaXMuZ3JpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlQWRkUm93UGFyZW50KHJvdzogUm93VHlwZSwgbmV3Um93QXNDaGlsZD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3cgPyByb3cuaW5kZXggOiAtMTtcbiAgICAgICAgY29uc3Qgcm93SWQgPSByb3cgPyByb3cua2V5IDogKHJvd0luZGV4ID49IDAgPyB0aGlzLmdyaWQucm93TGlzdC5sYXN0LmtleSA6IG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGlzSW5QaW5uZWRBcmVhID0gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkQnlWaWV3SW5kZXgocm93SW5kZXgpO1xuICAgICAgICBjb25zdCBwaW5JbmRleCA9IHRoaXMuZ3JpZC5waW5uZWRSZWNvcmRzLmZpbmRJbmRleCh4ID0+IHhbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcm93SWQpO1xuICAgICAgICBjb25zdCB1bnBpbkluZGV4ID0gdGhpcy5ncmlkLmdldFVucGlubmVkSW5kZXhCeUlkKHJvd0lkKTtcbiAgICAgICAgdGhpcy5hZGRSb3dQYXJlbnQgPSB7XG4gICAgICAgICAgICByb3dJRDogcm93SWQsXG4gICAgICAgICAgICBpbmRleDogaXNJblBpbm5lZEFyZWEgPyBwaW5JbmRleCA6IHVucGluSW5kZXgsXG4gICAgICAgICAgICBhc0NoaWxkOiBuZXdSb3dBc0NoaWxkLFxuICAgICAgICAgICAgaXNQaW5uZWQ6IGlzSW5QaW5uZWRBcmVhXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZW5kUm93VHJhbnNhY3Rpb24oY29tbWl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgaXNBZGRSb3cgPSB0aGlzLnJvdyAmJiB0aGlzLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4QWRkUm93Lm5hbWU7XG4gICAgICAgIGlmIChpc0FkZFJvdykge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChhZGRSb3dBcmdzOiBJUm93RGF0YUV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBhZGRSb3dBcmdzLmRhdGE7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlubmVkSW5kZXggPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkcy5maW5kSW5kZXgoeCA9PiB4W3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0RhdGFbdGhpcy5wcmltYXJ5S2V5XSk7XG4gICAgICAgICAgICAgICAgLy8gQSBjaGVjayB3aGV0aGVyIHRoZSByb3cgaXMgaW4gdGhlIGN1cnJlbnQgdmlld1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdJbmRleCA9IHBpbm5lZEluZGV4ICE9PSAtMSA/IHBpbm5lZEluZGV4IDogdGhpcy5fZmluZFJlY29yZEluZGV4SW5WaWV3KHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFJbmRleCA9IHRoaXMuZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGEuZmluZEluZGV4KGRhdGEgPT4gZGF0YVt0aGlzLnByaW1hcnlLZXldID09PSByb3dEYXRhW3RoaXMucHJpbWFyeUtleV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5WaWV3ID0gdmlld0luZGV4ICE9PSAtMSAmJiAhdGhpcy5ncmlkLm5hdmlnYXRpb24uc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHZpZXdJbmRleCwgMCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd0luZGV4ID0gaXNJblZpZXcgPyAtMSA6IGRhdGFJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2hvd1NuYWNrYmFyRm9yKHNob3dJbmRleCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5lbmRSb3dUcmFuc2FjdGlvbihjb21taXQsIGV2ZW50KTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0FkZFJvdykge1xuICAgICAgICAgICAgdGhpcy5lbmRBZGRSb3coKTtcbiAgICAgICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdyaWQucm93QWRkZWROb3RpZmllci5uZXh0KHsgZGF0YTogYXJncy5uZXdWYWx1ZSwgb3duZXI6IHRoaXMuZ3JpZCB9KTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdyaWQucm93QWRkZWQuZW1pdCh7IGRhdGE6IGFyZ3MubmV3VmFsdWUsIG93bmVyOiB0aGlzLmdyaWQgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93QWRkZWRFdmVudEFyZ3M6IElSb3dEYXRhRXZlbnRBcmdzID0geyBkYXRhOiBhcmdzLm5ld1ZhbHVlLCBvd25lcjogdGhpcy5ncmlkLCBwcmltYXJ5S2V5OiBhcmdzLm5ld1ZhbHVlW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSB9XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkTm90aWZpZXIubmV4dChyb3dBZGRlZEV2ZW50QXJncyk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkLmVtaXQocm93QWRkZWRFdmVudEFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5kQWRkUm93KCkge1xuICAgICAgICB0aGlzLmFkZFJvd1BhcmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICogVE9ETzogY29uc2lkZXIgY2hhbmdpbmcgbW9kaWZpZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgX2ZpbmRSZWNvcmRJbmRleEluVmlldyhyZWMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhVmlldy5maW5kSW5kZXgoZGF0YSA9PiBkYXRhW3RoaXMucHJpbWFyeUtleV0gPT09IHJlY1t0aGlzLnByaW1hcnlLZXldKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0UGFyZW50Um93SWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFkZFJvd1BhcmVudC5hc0NoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3dQYXJlbnQuYXNDaGlsZCA/IHRoaXMuYWRkUm93UGFyZW50LnJvd0lEIDogdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWRkUm93UGFyZW50LnJvd0lEICE9PSBudWxsICYmIHRoaXMuYWRkUm93UGFyZW50LnJvd0lEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYXduZWRGb3JSZWNvcmQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcmVjX2J5X2lkKHRoaXMuYWRkUm93UGFyZW50LnJvd0lEKTtcbiAgICAgICAgICAgIHJldHVybiBzcGF3bmVkRm9yUmVjb3JkPy5wYXJlbnQ/LnJvd0lEO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZENSVURTZXJ2aWNlIGV4dGVuZHMgSWd4Um93QWRkQ3J1ZFN0YXRlIHtcblxuICAgIHB1YmxpYyBlbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbkNvbXBvc2l0aW9uTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubm9uRWRpdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGdyaWQgbXVzdCBoYXZlIGEgYHByaW1hcnlLZXlgIHNwZWNpZmllZCB3aGVuIHVzaW5nIGByb3dFZGl0YWJsZWAhJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jZWxsSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogY2FzZSBzb2xlbHkgZm9yIGYyL2VudGVyIG5hdiB0aGF0IHVzZXMgZW50ZXJFZGl0TW9kZSBhcyB0b2dnbGUuIFJlZmFjdG9yLlxuICAgICAgICAgICAgY29uc3QgY2FuY2VsZWQgPSB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoIWNhbmNlbGVkIHx8ICF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMucm93RWRpdGluZykge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gcm93RGF0YVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvdyAmJiAhdGhpcy5zYW1lUm93KGNlbGw/LmNlbGxJRD8ucm93SUQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dFZGl0aW5nQmxvY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0VkaXRpbmdCbG9ja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUNlbGwoY2VsbCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjYW5jZWxlZCA9IHRoaXMuYmVnaW5Sb3dFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5DZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2VsbChjZWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJlZ2luQ2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW50ZXJzIGFkZCByb3cgbW9kZSBieSBjcmVhdGluZyB0ZW1wb3JhcnkgZHVtbXkgc28gdGhlIHVzZXIgY2FuIGZpbGwgaW4gbmV3IHJvdyBjZWxscy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRSb3cgUGFyZW50IHJvdyBhZnRlciB3aGljaCB0aGUgQWRkIFJvdyBVSSB3aWxsIGJlIHJlbmRlcmVkLlxuICAgICAqICAgICAgICAgICAgICAgICAgSWYgYG51bGxgIHdpbGwgc2hvdyBpdCBhdCB0aGUgYm90dG9tIGFmdGVyIGFsbCByb3dzIChvciB0b3AgaWYgdGhlcmUgYXJlIG5vdCByb3dzKS5cbiAgICAgKiBAcGFyYW0gYXNDaGlsZCBTcGVjaWZpZXMgaWYgdGhlIG5ldyByb3cgc2hvdWxkIGJlIGFkZGVkIGFzIGEgY2hpbGQgdG8gYSB0cmVlIHJvdy5cbiAgICAgKiBAcGFyYW0gZXZlbnQgQmFzZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgYWRkIHJvdyBtb2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyBlbnRlckFkZFJvd01vZGUocGFyZW50Um93OiBSb3dUeXBlLCBhc0NoaWxkPzogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMucm93RWRpdGluZyAmJiAodGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGdyaWQgbXVzdCB1c2Ugcm93IGVkaXQgbW9kZSB0byBwZXJmb3JtIHJvdyBhZGRpbmchIFBsZWFzZSBzZXQgcm93RWRpdGFibGUgdG8gdHJ1ZS4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgIGlmIChwYXJlbnRSb3cgIT0gbnVsbCAmJiB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChwYXJlbnRSb3cua2V5KSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNvbGxhcHNlUm93KHBhcmVudFJvdy5rZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jcmVhdGVBZGRSb3cocGFyZW50Um93LCBhc0NoaWxkKTtcblxuICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLnN0YXJ0UGVuZGluZygpO1xuICAgICAgICBpZiAodGhpcy5hZGRSb3dQYXJlbnQuaXNQaW5uZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHBhcmVudCBpcyBwaW5uZWQsIGFkZCB0aGUgbmV3IHJvdyB0byBwaW5uZWQgcmVjb3Jkc1xuICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLl9waW5uZWRSZWNvcmRJRHMuc3BsaWNlKHRoaXMucm93LmluZGV4LCAwLCB0aGlzLnJvdy5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKHRoaXMucm93LmluZGV4LCAtMSk7XG4gICAgICAgIC8vIHdoZW4gc2VsZWN0aW5nIHRoZSBkdW1teSByb3cgd2UgbmVlZCB0byBhZGp1c3QgZm9yIHRvcCBwaW5uZWQgcm93c1xuICAgICAgICBjb25zdCBpbmRleEFkanVzdCA9IHRoaXMuZ3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCA/XG4gICAgICAgICAgICAoIXRoaXMuYWRkUm93UGFyZW50LmlzUGlubmVkID8gdGhpcy5ncmlkLnBpbm5lZFJvd3MubGVuZ3RoIDogMCkgOlxuICAgICAgICAgICAgKCF0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCA/IDAgOiB0aGlzLmdyaWQudW5waW5uZWRSZWNvcmRzLmxlbmd0aCk7XG5cbiAgICAgICAgLy8gVE9ETzogVHlwZSB0aGlzIHdpdGhvdXQgc2hvdmluZyBhIGJ1bmNoIG9mIGludGVybmFsIHByb3BlcnRpZXMgaW4gdGhlIHJvdyB0eXBlXG4gICAgICAgIGNvbnN0IGR1bW15Um93ID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLnJvdy5pbmRleCArIGluZGV4QWRqdXN0KSBhcyBhbnk7XG4gICAgICAgIGR1bW15Um93LnRyaWdnZXJBZGRBbmltYXRpb24oKTtcbiAgICAgICAgZHVtbXlSb3cuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgZHVtbXlSb3cuYWRkQW5pbWF0aW9uRW5kLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkdW1teVJvdy5jZWxscy5maW5kKGMgPT4gYy5lZGl0YWJsZSk7XG4gICAgICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnVwZGF0ZV9jZWxsKHRoaXMuY2VsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBjZWxsLmFjdGl2YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmlzaGVzIHRoZSByb3cgdHJhbnNhY3Rpb25zIG9uIHRoZSBjdXJyZW50IHJvdyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZSBncmlkIGVkaXRpbmcgd2FzIGNhbmNlbGVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBgY29tbWl0ID09PSB0cnVlYCwgcGFzc2VzIHRoZW0gZnJvbSB0aGUgcGVuZGluZyBzdGF0ZSB0byB0aGUgZGF0YSAob3IgdHJhbnNhY3Rpb24gc2VydmljZSlcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b24gKGNsaWNrKT1cImdyaWQuZW5kRWRpdCh0cnVlKVwiPkNvbW1pdCBSb3c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gY29tbWl0XG4gICAgICovXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXRob2Qgd2l0aG91dCBldnQgZW1pc3Npb24uXG4gICAgcHVibGljIGVuZEVkaXQoY29tbWl0ID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMucm93ICYmICF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhcmdzO1xuICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICBhcmdzID0gdGhpcy51cGRhdGVDZWxsKHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChhcmdzICYmIGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbmVlZGVkZSBiZWNhdXNlIHRoaXMuY2VsbCBpcyBudWxsIGFmdGVyIGV4aXRDZWxsRWRpdFxuICAgICAgICAgICAgLy8gdGh1cyB0aGUgbmV4dCBpZiBpcyBhbHdheXMgZmFsc2VcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmNlbGw7XG4gICAgICAgICAgICB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSAmJiBjZWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZShjZWxsLmlkLnJvd0lELCB0cnVlKSB8fCBjZWxsLnJvd0RhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnZhbGlkYXRpb24udXBkYXRlKGNlbGwuaWQucm93SUQsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MgPSB0aGlzLnVwZGF0ZVJvdyhjb21taXQsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5yb3dFZGl0aW5nQmxvY2tlZCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aXZlQ2VsbCA9IHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChldmVudCAmJiBhY3RpdmVDZWxsKSB7XG4gICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IGFjdGl2ZUNlbGwucm93O1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZUNvbEluZGV4ID0gYWN0aXZlQ2VsbC5sYXlvdXQgPyBhY3RpdmVDZWxsLmxheW91dC5jb2x1bW5WaXNpYmxlSW5kZXggOiBhY3RpdmVDZWxsLmNvbHVtbjtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|