igniteui-angular 16.0.0-beta.2 → 16.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/accordion/accordion.component.mjs +4 -4
- package/esm2022/lib/accordion/accordion.module.mjs +5 -5
- package/esm2022/lib/action-strip/action-strip.component.mjs +7 -7
- package/esm2022/lib/action-strip/action-strip.module.mjs +5 -5
- package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +4 -4
- package/esm2022/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +4 -4
- package/esm2022/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +4 -4
- package/esm2022/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +4 -4
- package/esm2022/lib/avatar/avatar.component.mjs +4 -4
- package/esm2022/lib/avatar/avatar.module.mjs +5 -5
- package/esm2022/lib/badge/badge.component.mjs +4 -4
- package/esm2022/lib/badge/badge.module.mjs +5 -5
- package/esm2022/lib/banner/banner.component.mjs +4 -4
- package/esm2022/lib/banner/banner.directives.mjs +4 -4
- package/esm2022/lib/banner/banner.module.mjs +5 -5
- package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +4 -4
- package/esm2022/lib/buttonGroup/buttongroup.module.mjs +5 -5
- package/esm2022/lib/calendar/calendar-base.mjs +4 -4
- package/esm2022/lib/calendar/calendar.component.mjs +4 -4
- package/esm2022/lib/calendar/calendar.directives.mjs +16 -16
- package/esm2022/lib/calendar/calendar.module.mjs +5 -5
- package/esm2022/lib/calendar/days-view/day-item.component.mjs +4 -4
- package/esm2022/lib/calendar/days-view/days-view.component.mjs +4 -4
- package/esm2022/lib/calendar/days-view/daysview-navigation.service.mjs +4 -4
- package/esm2022/lib/calendar/month-picker/month-picker-base.mjs +4 -4
- package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +4 -4
- package/esm2022/lib/calendar/months-view/months-view.component.mjs +4 -4
- package/esm2022/lib/calendar/months-view.pipe.mjs +7 -7
- package/esm2022/lib/calendar/years-view/years-view.component.mjs +7 -7
- package/esm2022/lib/card/card.component.mjs +28 -28
- package/esm2022/lib/card/card.module.mjs +5 -5
- package/esm2022/lib/carousel/carousel.component.mjs +7 -7
- package/esm2022/lib/carousel/carousel.directives.mjs +10 -10
- package/esm2022/lib/carousel/carousel.module.mjs +5 -5
- package/esm2022/lib/carousel/slide.component.mjs +4 -4
- package/esm2022/lib/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/lib/checkbox/checkbox.module.mjs +5 -5
- package/esm2022/lib/chips/chip.component.mjs +4 -4
- package/esm2022/lib/chips/chips-area.component.mjs +4 -4
- package/esm2022/lib/chips/chips.module.mjs +5 -5
- package/esm2022/lib/combo/combo-add-item.component.mjs +4 -4
- package/esm2022/lib/combo/combo-dropdown.component.mjs +4 -4
- package/esm2022/lib/combo/combo-item.component.mjs +4 -4
- package/esm2022/lib/combo/combo.api.mjs +4 -4
- package/esm2022/lib/combo/combo.common.mjs +4 -4
- package/esm2022/lib/combo/combo.component.mjs +4 -4
- package/esm2022/lib/combo/combo.directives.mjs +25 -25
- package/esm2022/lib/combo/combo.module.mjs +5 -5
- package/esm2022/lib/combo/combo.pipes.mjs +7 -7
- package/esm2022/lib/core/density.mjs +4 -4
- package/esm2022/lib/core/navigation/directives.mjs +7 -7
- package/esm2022/lib/core/navigation/nav.service.mjs +4 -4
- package/esm2022/lib/core/selection.mjs +4 -4
- package/esm2022/lib/core/touch.mjs +4 -4
- package/esm2022/lib/core/utils.mjs +4 -4
- package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +4 -4
- package/esm2022/lib/date-common/picker-base.directive.mjs +4 -4
- package/esm2022/lib/date-common/picker-icons.common.mjs +10 -10
- package/esm2022/lib/date-picker/date-picker.component.mjs +4 -4
- package/esm2022/lib/date-picker/date-picker.module.mjs +5 -5
- package/esm2022/lib/date-range-picker/date-range-picker-inputs.common.mjs +16 -16
- package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +4 -4
- package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +5 -5
- package/esm2022/lib/dialog/dialog.component.mjs +4 -4
- package/esm2022/lib/dialog/dialog.directives.mjs +7 -7
- package/esm2022/lib/dialog/dialog.module.mjs +5 -5
- package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +4 -4
- package/esm2022/lib/directives/autocomplete/autocomplete.module.mjs +5 -5
- package/esm2022/lib/directives/button/button.directive.mjs +4 -4
- package/esm2022/lib/directives/button/button.module.mjs +5 -5
- package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +4 -4
- package/esm2022/lib/directives/date-time-editor/date-time-editor.module.mjs +5 -5
- package/esm2022/lib/directives/divider/divider.directive.mjs +4 -4
- package/esm2022/lib/directives/divider/divider.module.mjs +5 -5
- package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +13 -13
- package/esm2022/lib/directives/drag-drop/drag-drop.module.mjs +5 -5
- package/esm2022/lib/directives/filter/filter.directive.mjs +7 -7
- package/esm2022/lib/directives/filter/filter.module.mjs +5 -5
- package/esm2022/lib/directives/focus/focus.directive.mjs +4 -4
- package/esm2022/lib/directives/focus/focus.module.mjs +5 -5
- package/esm2022/lib/directives/focus-trap/focus-trap.directive.mjs +4 -4
- package/esm2022/lib/directives/focus-trap/focus-trap.module.mjs +5 -5
- package/esm2022/lib/directives/for-of/base.helper.component.mjs +4 -4
- package/esm2022/lib/directives/for-of/display.container.mjs +4 -4
- package/esm2022/lib/directives/for-of/for_of.directive.mjs +7 -7
- package/esm2022/lib/directives/for-of/for_of.module.mjs +5 -5
- package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +7 -7
- package/esm2022/lib/directives/for-of/horizontal.virtual.helper.component.mjs +4 -4
- package/esm2022/lib/directives/for-of/virtual.helper.component.mjs +4 -4
- package/esm2022/lib/directives/form-control/form-control.directive.mjs +4 -4
- package/esm2022/lib/directives/form-control/form-control.module.mjs +5 -5
- package/esm2022/lib/directives/hint/hint.directive.mjs +4 -4
- package/esm2022/lib/directives/input/input.directive.mjs +14 -4
- package/esm2022/lib/directives/label/label.directive.mjs +4 -4
- package/esm2022/lib/directives/layout/layout.directive.mjs +7 -7
- package/esm2022/lib/directives/layout/layout.module.mjs +5 -5
- package/esm2022/lib/directives/mask/mask-parsing.service.mjs +4 -4
- package/esm2022/lib/directives/mask/mask.directive.mjs +4 -4
- package/esm2022/lib/directives/mask/mask.module.mjs +5 -5
- package/esm2022/lib/directives/notification/notifications.directive.mjs +4 -4
- package/esm2022/lib/directives/prefix/prefix.directive.mjs +4 -4
- package/esm2022/lib/directives/radio/radio-group.directive.mjs +4 -4
- package/esm2022/lib/directives/radio/radio-group.module.mjs +5 -5
- package/esm2022/lib/directives/ripple/ripple.directive.mjs +4 -4
- package/esm2022/lib/directives/ripple/ripple.module.mjs +5 -5
- package/esm2022/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +4 -4
- package/esm2022/lib/directives/scroll-inertia/scroll_inertia.module.mjs +5 -5
- package/esm2022/lib/directives/suffix/suffix.directive.mjs +4 -4
- package/esm2022/lib/directives/template-outlet/template_outlet.directive.mjs +4 -4
- package/esm2022/lib/directives/text-highlight/text-highlight.directive.mjs +4 -4
- package/esm2022/lib/directives/text-highlight/text-highlight.module.mjs +5 -5
- package/esm2022/lib/directives/text-selection/text-selection.directive.mjs +4 -4
- package/esm2022/lib/directives/text-selection/text-selection.module.mjs +5 -5
- package/esm2022/lib/directives/toggle/toggle.directive.mjs +10 -10
- package/esm2022/lib/directives/toggle/toggle.module.mjs +5 -5
- package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +4 -4
- package/esm2022/lib/directives/tooltip/tooltip.component.mjs +4 -4
- package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +4 -4
- package/esm2022/lib/directives/tooltip/tooltip.module.mjs +5 -5
- package/esm2022/lib/drop-down/drop-down-group.component.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down-item.base.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down-item.component.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down-navigation.directive.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down.base.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down.component.mjs +4 -4
- package/esm2022/lib/drop-down/drop-down.module.mjs +5 -5
- package/esm2022/lib/expansion-panel/expansion-panel-body.component.mjs +4 -4
- package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +4 -4
- package/esm2022/lib/expansion-panel/expansion-panel.common.mjs +4 -4
- package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +4 -4
- package/esm2022/lib/expansion-panel/expansion-panel.directives.mjs +10 -10
- package/esm2022/lib/expansion-panel/expansion-panel.module.mjs +5 -5
- package/esm2022/lib/expansion-panel/toggle-animation-component.mjs +4 -4
- package/esm2022/lib/grids/api.service.mjs +4 -4
- package/esm2022/lib/grids/cell.component.mjs +4 -4
- package/esm2022/lib/grids/column-actions/column-actions-base.directive.mjs +4 -4
- package/esm2022/lib/grids/column-actions/column-actions.component.mjs +13 -13
- package/esm2022/lib/grids/column-actions/column-hiding.directive.mjs +4 -4
- package/esm2022/lib/grids/column-actions/column-pinning.directive.mjs +4 -4
- package/esm2022/lib/grids/column-actions/public_api.mjs +13 -0
- package/esm2022/lib/grids/columns/column-group.component.mjs +4 -4
- package/esm2022/lib/grids/columns/column-layout.component.mjs +4 -4
- package/esm2022/lib/grids/columns/column.component.mjs +4 -4
- package/esm2022/lib/grids/columns/templates.directive.mjs +25 -25
- package/esm2022/lib/grids/columns/validators.directive.mjs +22 -22
- package/esm2022/lib/grids/common/crud.service.mjs +4 -4
- package/esm2022/lib/grids/common/pipes.mjs +55 -55
- package/esm2022/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/base-filtering.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +10 -10
- package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +7 -7
- package/esm2022/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +4 -4
- package/esm2022/lib/grids/grid/expandable-cell.component.mjs +4 -4
- package/esm2022/lib/grids/grid/grid-api.service.mjs +4 -4
- package/esm2022/lib/grids/grid/grid-row.component.mjs +4 -4
- package/esm2022/lib/grids/grid/grid-validation.service.mjs +4 -4
- package/esm2022/lib/grids/grid/grid.component.mjs +5 -6
- package/esm2022/lib/grids/grid/grid.details.pipe.mjs +4 -4
- package/esm2022/lib/grids/grid/grid.directives.mjs +34 -34
- package/esm2022/lib/grids/grid/grid.module.mjs +27 -24
- package/esm2022/lib/grids/grid/grid.pipes.mjs +13 -13
- package/esm2022/lib/grids/grid/grid.summary.pipe.mjs +4 -4
- package/esm2022/lib/grids/grid/groupby-row.component.mjs +4 -4
- package/esm2022/lib/grids/grid-base.directive.mjs +4 -4
- package/esm2022/lib/grids/grid-footer/grid-footer.component.mjs +4 -4
- package/esm2022/lib/grids/grid-mrl-navigation.service.mjs +4 -4
- package/esm2022/lib/grids/grid-navigation.service.mjs +4 -4
- package/esm2022/lib/grids/grid.common.mjs +4 -4
- package/esm2022/lib/grids/grid.rowEdit.directive.mjs +16 -16
- package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +4 -4
- package/esm2022/lib/grids/grouping/group-by-area.directive.mjs +7 -7
- package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +4 -4
- package/esm2022/lib/grids/headers/grid-header-group.component.mjs +4 -4
- package/esm2022/lib/grids/headers/grid-header-row.component.mjs +4 -4
- package/esm2022/lib/grids/headers/grid-header.component.mjs +4 -4
- package/esm2022/lib/grids/headers/pipes.mjs +10 -10
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +7 -7
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +27 -24
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +7 -7
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/row-island-api.service.mjs +4 -4
- package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +4 -4
- package/esm2022/lib/grids/moving/moving.drag.directive.mjs +4 -4
- package/esm2022/lib/grids/moving/moving.drop.directive.mjs +4 -4
- package/esm2022/lib/grids/moving/moving.service.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-filtering.service.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-grid-navigation.service.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-grid.module.mjs +27 -24
- package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +31 -31
- package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header.component.mjs +4 -4
- package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +4 -4
- package/esm2022/lib/grids/public_api.mjs +5 -2
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +4 -4
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +4 -4
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizing.service.mjs +4 -4
- package/esm2022/lib/grids/resizing/resize-handle.directive.mjs +4 -4
- package/esm2022/lib/grids/resizing/resizer.component.mjs +4 -4
- package/esm2022/lib/grids/resizing/resizer.directive.mjs +4 -4
- package/esm2022/lib/grids/resizing/resizing.service.mjs +4 -4
- package/esm2022/lib/grids/row-drag.directive.mjs +10 -10
- package/esm2022/lib/grids/row.directive.mjs +4 -4
- package/esm2022/lib/grids/selection/drag-select.directive.mjs +4 -4
- package/esm2022/lib/grids/selection/row-selectors.mjs +10 -10
- package/esm2022/lib/grids/selection/selection.service.mjs +4 -4
- package/esm2022/lib/grids/state.directive.mjs +4 -4
- package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +4 -4
- package/esm2022/lib/grids/summaries/grid-summary.service.mjs +4 -4
- package/esm2022/lib/grids/summaries/summary-cell.component.mjs +4 -4
- package/esm2022/lib/grids/summaries/summary-row.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/common.mjs +16 -16
- package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +4 -4
- package/esm2022/lib/grids/toolbar/grid-toolbar.base.mjs +7 -7
- package/esm2022/lib/grids/toolbar/grid-toolbar.component.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/public_api.mjs +7 -1
- package/esm2022/lib/grids/tree-grid/tree-cell.component.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid-row.component.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.directives.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.module.mjs +44 -39
- package/esm2022/lib/grids/tree-grid/tree-grid.pipes.mjs +22 -22
- package/esm2022/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +4 -4
- package/esm2022/lib/icon/icon.component.mjs +4 -4
- package/esm2022/lib/icon/icon.module.mjs +5 -5
- package/esm2022/lib/icon/icon.service.mjs +4 -4
- package/esm2022/lib/input-group/input-group.component.mjs +4 -4
- package/esm2022/lib/input-group/input-group.module.mjs +5 -5
- package/esm2022/lib/list/list-item.component.mjs +4 -4
- package/esm2022/lib/list/list.common.mjs +16 -16
- package/esm2022/lib/list/list.component.mjs +19 -19
- package/esm2022/lib/list/list.module.mjs +5 -5
- package/esm2022/lib/navbar/navbar.component.mjs +10 -10
- package/esm2022/lib/navbar/navbar.module.mjs +5 -5
- package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +4 -4
- package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +10 -10
- package/esm2022/lib/navigation-drawer/navigation-drawer.module.mjs +5 -5
- package/esm2022/lib/paginator/paginator-interfaces.mjs +4 -4
- package/esm2022/lib/paginator/paginator.component.mjs +13 -13
- package/esm2022/lib/paginator/paginator.module.mjs +5 -5
- package/esm2022/lib/progressbar/progressbar.common.mjs +7 -7
- package/esm2022/lib/progressbar/progressbar.component.mjs +10 -10
- package/esm2022/lib/progressbar/progressbar.module.mjs +5 -5
- package/esm2022/lib/query-builder/query-builder-header.component.mjs +4 -4
- package/esm2022/lib/query-builder/query-builder.component.mjs +7 -7
- package/esm2022/lib/query-builder/query-builder.module.mjs +5 -5
- package/esm2022/lib/radio/radio.component.mjs +4 -4
- package/esm2022/lib/select/select-group.component.mjs +4 -4
- package/esm2022/lib/select/select-item.component.mjs +4 -4
- package/esm2022/lib/select/select-navigation.directive.mjs +4 -4
- package/esm2022/lib/select/select.component.mjs +13 -13
- package/esm2022/lib/select/select.module.mjs +5 -5
- package/esm2022/lib/services/animation/angular-animation-service.mjs +4 -4
- package/esm2022/lib/services/csv/csv-exporter.mjs +4 -4
- package/esm2022/lib/services/direction/directionality.mjs +4 -4
- package/esm2022/lib/services/excel/excel-exporter.mjs +4 -4
- package/esm2022/lib/services/overlay/overlay.mjs +4 -4
- package/esm2022/lib/services/transaction/transaction-factory.service.mjs +7 -7
- package/esm2022/lib/simple-combo/simple-combo.component.mjs +4 -4
- package/esm2022/lib/simple-combo/simple-combo.module.mjs +5 -5
- package/esm2022/lib/slider/label/thumb-label.component.mjs +4 -4
- package/esm2022/lib/slider/slider.common.mjs +10 -10
- package/esm2022/lib/slider/slider.component.mjs +4 -4
- package/esm2022/lib/slider/slider.module.mjs +5 -5
- package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +4 -4
- package/esm2022/lib/slider/ticks/tick.pipe.mjs +4 -4
- package/esm2022/lib/slider/ticks/ticks.component.mjs +4 -4
- package/esm2022/lib/snackbar/snackbar.component.mjs +4 -4
- package/esm2022/lib/snackbar/snackbar.module.mjs +5 -5
- package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +4 -4
- package/esm2022/lib/splitter/splitter.component.mjs +7 -7
- package/esm2022/lib/splitter/splitter.module.mjs +5 -5
- package/esm2022/lib/stepper/step/step.component.mjs +4 -4
- package/esm2022/lib/stepper/stepper.component.mjs +4 -4
- package/esm2022/lib/stepper/stepper.directive.mjs +22 -22
- package/esm2022/lib/stepper/stepper.module.mjs +5 -5
- package/esm2022/lib/stepper/stepper.service.mjs +4 -4
- package/esm2022/lib/switch/switch.component.mjs +4 -4
- package/esm2022/lib/switch/switch.module.mjs +5 -5
- package/esm2022/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +4 -4
- package/esm2022/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +4 -4
- package/esm2022/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +4 -4
- package/esm2022/lib/tabs/bottom-nav/bottom-nav.component.mjs +4 -4
- package/esm2022/lib/tabs/bottom-nav/bottom-nav.directives.mjs +7 -7
- package/esm2022/lib/tabs/bottom-nav/bottom-nav.module.mjs +5 -5
- package/esm2022/lib/tabs/tab-content.directive.mjs +4 -4
- package/esm2022/lib/tabs/tab-header.directive.mjs +4 -4
- package/esm2022/lib/tabs/tab-item.directive.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tab-content.component.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tab-header.component.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tab-item.component.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tabs.component.mjs +4 -4
- package/esm2022/lib/tabs/tabs/tabs.directives.mjs +7 -7
- package/esm2022/lib/tabs/tabs/tabs.module.mjs +5 -5
- package/esm2022/lib/tabs/tabs.directive.mjs +4 -4
- package/esm2022/lib/time-picker/time-picker.component.mjs +4 -4
- package/esm2022/lib/time-picker/time-picker.directives.mjs +7 -7
- package/esm2022/lib/time-picker/time-picker.module.mjs +5 -5
- package/esm2022/lib/time-picker/time-picker.pipes.mjs +7 -7
- package/esm2022/lib/toast/toast.component.mjs +4 -4
- package/esm2022/lib/toast/toast.module.mjs +5 -5
- package/esm2022/lib/tree/tree-navigation.service.mjs +4 -4
- package/esm2022/lib/tree/tree-node/tree-node.component.mjs +7 -7
- package/esm2022/lib/tree/tree-selection.service.mjs +4 -4
- package/esm2022/lib/tree/tree.component.mjs +10 -10
- package/esm2022/lib/tree/tree.module.mjs +5 -5
- package/esm2022/lib/tree/tree.service.mjs +4 -4
- package/fesm2022/igniteui-angular.mjs +3098 -3079
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/directives/input/input.directive.d.ts +3 -0
- package/lib/grids/column-actions/public_api.d.ts +7 -0
- package/lib/grids/grid/grid.module.d.ts +23 -20
- package/lib/grids/grid/public_api.d.ts +1 -1
- package/lib/grids/hierarchical-grid/hierarchical-grid.module.d.ts +23 -20
- package/lib/grids/hierarchical-grid/public_api.d.ts +1 -1
- package/lib/grids/pivot-grid/pivot-grid.module.d.ts +23 -20
- package/lib/grids/pivot-grid/public_api.d.ts +1 -1
- package/lib/grids/public_api.d.ts +2 -1
- package/lib/grids/tree-grid/public_api.d.ts +5 -1
- package/lib/grids/tree-grid/tree-grid.module.d.ts +40 -35
- package/package.json +6 -6
|
@@ -343,10 +343,10 @@ export class IgxButtonGroupComponent extends DisplayDensityBase {
|
|
|
343
343
|
this.deselectButton(i);
|
|
344
344
|
}
|
|
345
345
|
}
|
|
346
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
347
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0
|
|
346
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxButtonGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
347
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxButtonGroupComponent, isStandalone: true, selector: "igx-buttongroup", inputs: { id: "id", itemContentCssClass: "itemContentCssClass", multiSelection: "multiSelection", values: "values", disabled: "disabled", alignment: "alignment" }, outputs: { selected: "selected", deselected: "deselected" }, host: { properties: { "attr.id": "this.id", "style.zIndex": "this.zIndex" } }, queries: [{ propertyName: "templateButtons", predicate: IgxButtonDirective }], viewQueries: [{ propertyName: "viewButtons", predicate: IgxButtonDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"igx-button-group\" role=\"group\" [class.igx-button-group--vertical]=\"isVertical\">\n <button *ngFor=\"let button of values; let i = 'index'\"\n type=\"button\"\n igxButton=\"flat\"\n [displayDensity]=\"displayDensity\"\n [selected]=\"button.selected\"\n [attr.data-togglable]=\"button.togglable\"\n [disabled]=\"disabled || button.disabled\"\n [igxButtonColor]=\"button.color\"\n [igxButtonBackground]=\"button.bgcolor\"\n [igxLabel]=\"button.label\"\n [igxRipple]=\"button.ripple\"\n >\n <span class=\"igx-button-group__item-content {{ itemContentCssClass }}\">\n <igx-icon *ngIf=\"button.icon\">{{button.icon}}</igx-icon>\n <span class=\"igx-button-group__button-text\" *ngIf=\"button.label\">{{button.label}}</span>\n </span>\n </button>\n <ng-content></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }] }); }
|
|
348
348
|
}
|
|
349
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxButtonGroupComponent, decorators: [{
|
|
350
350
|
type: Component,
|
|
351
351
|
args: [{ selector: 'igx-buttongroup', standalone: true, imports: [NgFor, IgxButtonDirective, IgxRippleDirective, NgIf, IgxIconComponent], template: "<div class=\"igx-button-group\" role=\"group\" [class.igx-button-group--vertical]=\"isVertical\">\n <button *ngFor=\"let button of values; let i = 'index'\"\n type=\"button\"\n igxButton=\"flat\"\n [displayDensity]=\"displayDensity\"\n [selected]=\"button.selected\"\n [attr.data-togglable]=\"button.togglable\"\n [disabled]=\"disabled || button.disabled\"\n [igxButtonColor]=\"button.color\"\n [igxButtonBackground]=\"button.bgcolor\"\n [igxLabel]=\"button.label\"\n [igxRipple]=\"button.ripple\"\n >\n <span class=\"igx-button-group__item-content {{ itemContentCssClass }}\">\n <igx-icon *ngIf=\"button.icon\">{{button.icon}}</igx-icon>\n <span class=\"igx-button-group__button-text\" *ngIf=\"button.label\">{{button.label}}</span>\n </span>\n </button>\n <ng-content></ng-content>\n</div>\n" }]
|
|
352
352
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
@@ -383,4 +383,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
|
|
|
383
383
|
type: ContentChildren,
|
|
384
384
|
args: [IgxButtonDirective]
|
|
385
385
|
}] } });
|
|
386
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uR3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2J1dHRvbkdyb3VwL2J1dHRvbkdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9idXR0b25Hcm91cC9idXR0b25ncm91cC1jb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUdILFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBR1IsWUFBWSxFQUVmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUUxRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztJQUN2QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixRQUFRLEVBQUUsVUFBVTtDQUN2QixDQUFDLENBQUM7QUFHSCxJQUFJLE9B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c0JBQXBELFlBQVk7dUJBQUMsa0JBQWtCO2dCQUNhLGVBQWU7c0JBQTNELGVBQWU7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJZ3hCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFJpcHBsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eUJhc2UsIERpc3BsYXlEZW5zaXR5VG9rZW4sIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IG1rZW51bSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIEJ1dHRvbiBHcm91cCBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IEJ1dHRvbkdyb3VwQWxpZ25tZW50ID0gbWtlbnVtKHtcbiAgICBob3Jpem9udGFsOiAnaG9yaXpvbnRhbCcsXG4gICAgdmVydGljYWw6ICd2ZXJ0aWNhbCdcbn0pO1xuZXhwb3J0IHR5cGUgQnV0dG9uR3JvdXBBbGlnbm1lbnQgPSB0eXBlb2YgQnV0dG9uR3JvdXBBbGlnbm1lbnRba2V5b2YgdHlwZW9mIEJ1dHRvbkdyb3VwQWxpZ25tZW50XTtcblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIEJ1dHRvbiBHcm91cCoqIC1cbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b25ncm91cC5odG1sKVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgQnV0dG9uIEdyb3VwIGRpc3BsYXlzIGEgZ3JvdXAgb2YgYnV0dG9ucyBlaXRoZXIgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkuICBUaGUgZ3JvdXAgc3VwcG9ydHNcbiAqIHNpbmdsZSwgbXVsdGlwbGUgYW5kIHRvZ2dsZSBzZWxlY3Rpb24uXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtYnV0dG9uZ3JvdXAgbXVsdGlTZWxlY3Rpb249XCJ0cnVlXCIgW3ZhbHVlc109XCJmb250T3B0aW9uc1wiPlxuICogPC9pZ3gtYnV0dG9uZ3JvdXA+XG4gKiBgYGBcbiAqIFRoZSBgZm9udE9wdGlvbnNgIHZhbHVlIHNob3duIGFib3ZlIGlzIGRlZmluZWQgYXM6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmZvbnRPcHRpb25zID0gW1xuICogICB7IGljb246ICdmb3JtYXRfYm9sZCcsIHNlbGVjdGVkOiBmYWxzZSB9LFxuICogICB7IGljb246ICdmb3JtYXRfaXRhbGljJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXG4gKiAgIHsgaWNvbjogJ2Zvcm1hdF91bmRlcmxpbmVkJywgc2VsZWN0ZWQ6IGZhbHNlIH1dO1xuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWJ1dHRvbmdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2J1dHRvbmdyb3VwLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nRm9yLCBJZ3hCdXR0b25EaXJlY3RpdmUsIElneFJpcHBsZURpcmVjdGl2ZSwgTmdJZiwgSWd4SWNvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4QnV0dG9uR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2UgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEEgY29sbGVjdGlvbiBjb250YWluaW5nIGFsbCBidXR0b25zIGluc2lkZSB0aGUgYnV0dG9uIGdyb3VwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYnV0dG9ucygpOiBJZ3hCdXR0b25EaXJlY3RpdmVbXSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy52aWV3QnV0dG9ucy50b0FycmF5KCksIC4uLnRoaXMudGVtcGxhdGVCdXR0b25zLnRvQXJyYXkoKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLiBJZiBub3Qgc2V0IGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWJ1dHRvbmdyb3VwIFtpZF09XCInaWd4LWRpYWxvZy01NidcIiBbbXVsdGlTZWxlY3Rpb25dPVwiIW11bHRpXCIgW3ZhbHVlc109XCJhbGlnbk9wdGlvbnNcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1idXR0b25ncm91cC0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuekluZGV4JylcbiAgICBwdWJsaWMgekluZGV4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyB5b3UgdG8gc2V0IGEgc3R5bGUgdXNpbmcgdGhlIGBpdGVtQ29udGVudENzc0NsYXNzYCBpbnB1dC5cbiAgICAgKiBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBDU1MgY2xhc3MgbmFtZSB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgYnV0dG9uIGdyb3VwLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgc3R5bGUxID0gXCJzdHlsZUNsYXNzXCI7XG4gICAgICogIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiAgYGBgaHRtbFxuICAgICAqIDxpZ3gtYnV0dG9uZ3JvdXAgW2l0ZW1Db250ZW50Q3NzQ2xhc3NdPVwic3R5bGUxXCIgW211bHRpU2VsZWN0aW9uXT1cIiFtdWx0aVwiIFt2YWx1ZXNdPVwiYWxpZ25PcHRpb25zXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGl0ZW1Db250ZW50Q3NzQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pdGVtQ29udGVudENzc0NsYXNzID0gdmFsdWUgfHwgdGhpcy5faXRlbUNvbnRlbnRDc3NDbGFzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGl0ZW0gY29udGVudCBvZiB0aGUgYElneEJ1dHRvbkdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJNeUNoaWxkXCIpXG4gICAgICogcHVibGljIGJ1dHRvbkc6IElneEJ1dHRvbkdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBidXR0b25TZWxlY3QgPSB0aGlzLmJ1dHRvbkcuaXRlbUNvbnRlbnRDc3NDbGFzcztcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpdGVtQ29udGVudENzc0NsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtQ29udGVudENzc0NsYXNzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGVuYWJsZXMgc2VsZWN0aW5nIG11bHRpcGxlIGJ1dHRvbnMuIEJ5IGRlZmF1bHQsIG11bHRpLXNlbGVjdGlvbiBpcyBmYWxzZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1idXR0b25ncm91cCBbbXVsdGlTZWxlY3Rpb25dPVwiZmFsc2VcIiBbYWxpZ25tZW50XT1cImFsaWdubWVudFwiPjwvaWd4LWJ1dHRvbmdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aVNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhlIGJ1dHRvbnMgaW4gdGhlIGJ1dHRvbiBncm91cC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgKiAgICAgIHRoaXMuY2l0aWVzID0gW1xuICAgICAqICAgICAgICBuZXcgQnV0dG9uKHtcbiAgICAgKiAgICAgICAgICBsYWJlbDogXCJTb2ZpYVwiXG4gICAgICogICAgICB9KSxcbiAgICAgKiAgICAgICAgbmV3IEJ1dHRvbih7XG4gICAgICogICAgICAgICAgbGFiZWw6IFwiTG9uZG9uXCJcbiAgICAgKiAgICAgIH0pLFxuICAgICAqICAgICAgICBuZXcgQnV0dG9uKHtcbiAgICAgKiAgICAgICAgICBsYWJlbDogXCJOZXcgWW9ya1wiLFxuICAgICAqICAgICAgICAgIHNlbGVjdGVkOiB0cnVlXG4gICAgICogICAgICB9KSxcbiAgICAgKiAgICAgICAgbmV3IEJ1dHRvbih7XG4gICAgICogICAgICAgICAgbGFiZWw6IFwiVG9reW9cIlxuICAgICAqICAgICAgfSlcbiAgICAgKiAgXTtcbiAgICAgKiAgfVxuICAgICAqICAvLy4uXG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWJ1dHRvbmdyb3VwIFttdWx0aVNlbGVjdGlvbl09XCJmYWxzZVwiIFt2YWx1ZXNdPVwiY2l0aWVzXCI+PC9pZ3gtYnV0dG9uZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHZhbHVlczogYW55O1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoZSBgaWd4LWJ1dHRvbmdyb3VwYCBjb21wb25lbnQuIEJ5IGRlZmF1bHQgaXQncyBmYWxzZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1idXR0b25ncm91cCBbZGlzYWJsZWRdPVwidHJ1ZVwiIFttdWx0aVNlbGVjdGlvbl09XCJtdWx0aVwiIFt2YWx1ZXNdPVwiZm9udE9wdGlvbnNcIj48L2lneC1idXR0b25ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy52aWV3QnV0dG9ucyAmJiB0aGlzLnRlbXBsYXRlQnV0dG9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5mb3JFYWNoKChiKSA9PiAoYi5kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgeW91IHRvIHNldCB0aGUgYnV0dG9uIGdyb3VwIGFsaWdubWVudC5cbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmUgYEJ1dHRvbkdyb3VwQWxpZ25tZW50Lmhvcml6b250YWxgIChkZWZhdWx0KSBhbmQgYEJ1dHRvbkdyb3VwQWxpZ25tZW50LnZlcnRpY2FsYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGFsaWdubWVudCA9IEJ1dHRvbkdyb3VwQWxpZ25tZW50LnZlcnRpY2FsO1xuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1idXR0b25ncm91cCBbbXVsdGlTZWxlY3Rpb25dPVwiZmFsc2VcIiBbdmFsdWVzXT1cImNpdGllc1wiIFthbGlnbm1lbnRdPVwiYWxpZ25tZW50XCI+PC9pZ3gtYnV0dG9uZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGFsaWdubWVudCh2YWx1ZTogQnV0dG9uR3JvdXBBbGlnbm1lbnQpIHtcbiAgICAgICAgdGhpcy5faXNWZXJ0aWNhbCA9IHZhbHVlID09PSBCdXR0b25Hcm91cEFsaWdubWVudC52ZXJ0aWNhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWxpZ25tZW50IG9mIHRoZSBgaWd4LWJ1dHRvbmdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwdWJsaWMgYnV0dG9uRzogSWd4QnV0dG9uR3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGJ1dHRvbkFsaWdubWVudCA9IHRoaXMuYnV0dG9uRy5hbGlnbm1lbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWxpZ25tZW50KCk6IEJ1dHRvbkdyb3VwQWxpZ25tZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmVydGljYWwgPyBCdXR0b25Hcm91cEFsaWdubWVudC52ZXJ0aWNhbCA6IEJ1dHRvbkdyb3VwQWxpZ25tZW50Lmhvcml6b250YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQE91cHV0IHByb3BlcnR5IHRoYXQgZW1pdHMgYW4gZXZlbnQgd2hlbiBhIGJ1dHRvbiBpcyBzZWxlY3RlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInRvYXN0XCIpXG4gICAgICogcHJpdmF0ZSB0b2FzdDogSWd4VG9hc3RDb21wb25lbnQ7XG4gICAgICogcHVibGljIHNlbGVjdGVkSGFuZGxlcihidXR0b25ncm91cCkge1xuICAgICAqICAgICB0aGlzLnRvYXN0Lm9wZW4oKVxuICAgICAqIH1cbiAgICAgKiAgLy8uLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1idXR0b25ncm91cCAjTXlDaGlsZCBbbXVsdGlTZWxlY3Rpb25dPVwiIW11bHRpXCIgKHNlbGVjdGVkKT1cInNlbGVjdGVkSGFuZGxlcigkZXZlbnQpXCI+PC9pZ3gtYnV0dG9uZ3JvdXA+XG4gICAgICogPGlneC10b2FzdCAjdG9hc3Q+WW91IGhhdmUgbWFkZSBhIHNlbGVjdGlvbiE8L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCdXR0b25Hcm91cEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBPdXB1dCBwcm9wZXJ0eSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gYSBidXR0b24gaXMgZGVzZWxlY3RlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJ0b2FzdFwiKVxuICAgICAqICBwcml2YXRlIHRvYXN0OiBJZ3hUb2FzdENvbXBvbmVudDtcbiAgICAgKiAgcHVibGljIGRlc2VsZWN0ZWRIYW5kbGVyKGJ1dHRvbmdyb3VwKXtcbiAgICAgKiAgICAgdGhpcy50b2FzdC5vcGVuKClcbiAgICAgKiB9XG4gICAgICogIC8vLi4uXG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYnV0dG9uZ3JvdXA+ICNNeUNoaWxkIFttdWx0aVNlbGVjdGlvbl09XCJtdWx0aVwiIChkZXNlbGVjdGVkKT1cImRlc2VsZWN0ZWRIYW5kbGVyKCRldmVudClcIj48L2lneC1idXR0b25ncm91cD5cbiAgICAgKiA8aWd4LXRvYXN0ICN0b2FzdD5Zb3UgaGF2ZSBkZXNlbGVjdGVkIGEgYnV0dG9uITwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkZXNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJQnV0dG9uR3JvdXBFdmVudEFyZ3M+KCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKElneEJ1dHRvbkRpcmVjdGl2ZSkgcHJpdmF0ZSB2aWV3QnV0dG9uczogUXVlcnlMaXN0PElneEJ1dHRvbkRpcmVjdGl2ZT47XG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hCdXR0b25EaXJlY3RpdmUpIHByaXZhdGUgdGVtcGxhdGVCdXR0b25zOiBRdWVyeUxpc3Q8SWd4QnV0dG9uRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYGlneC1idXR0b25ncm91cGAgYWxpZ25tZW50IGlzIHZlcnRpY2FsLlxuICAgICAqIE5vdGUgdGhhdCBpbiBvcmRlciBmb3IgdGhlIGFjY2Vzc29yIHRvIHdvcmsgY29ycmVjdGx5IHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgc2V0IGV4cGxpY2l0bHkuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYnV0dG9uZ3JvdXAgI015Q2hpbGQgW2FsaWdubWVudF09XCJhbGlnbm1lbnRcIiBbdmFsdWVzXT1cImFsaWduT3B0aW9uc1wiPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLy4uLlxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUNoaWxkXCIpXG4gICAgICogcHJpdmF0ZSBidXR0b25HOiBJZ3hCdXR0b25Hcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgb3JpZW50YXRpb24gPSB0aGlzLmJ1dHRvbkcuaXNWZXJ0aWNhbDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1ZlcnRpY2FsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWZXJ0aWNhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkSW5kZXhlczogbnVtYmVyW10gPSBbXTtcblxuICAgIHByb3RlY3RlZCBidXR0b25DbGlja05vdGlmaWVyJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJvdGVjdGVkIGJ1dHRvblNlbGVjdGVkTm90aWZpZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcm90ZWN0ZWQgcXVlcnlMaXN0Tm90aWZpZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgX2lzVmVydGljYWw6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfaXRlbUNvbnRlbnRDc3NDbGFzczogc3RyaW5nO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9uc1xuICAgICkge1xuICAgICAgICBzdXBlcihfZGlzcGxheURlbnNpdHlPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzZWxlY3RlZCBidXR0b24vYnV0dG9ucy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwcml2YXRlIGJ1dHRvbkc6IElneEJ1dHRvbkdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBzZWxlY3RlZEJ1dHRvbiA9IHRoaXMuYnV0dG9uRy5zZWxlY3RlZEJ1dHRvbnM7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRCdXR0b25zKCk6IElneEJ1dHRvbkRpcmVjdGl2ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9ucy5maWx0ZXIoKF8sIGkpID0+IHRoaXMuc2VsZWN0ZWRJbmRleGVzLmluZGV4T2YoaSkgIT09IC0xKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIGEgYnV0dG9uIGJ5IGl0cyBpbmRleC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwcml2YXRlIGJ1dHRvbkc6IElneEJ1dHRvbkdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIHRoaXMuYnV0dG9uRy5zZWxlY3RCdXR0b24oMik7XG4gICAgICogICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiB7QGxpbmsgSWd4QnV0dG9uR3JvdXBDb21wb25lbnR9XG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdEJ1dHRvbihpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChpbmRleCA+PSB0aGlzLmJ1dHRvbnMubGVuZ3RoIHx8IGluZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5idXR0b25zW2luZGV4XTtcbiAgICAgICAgYnV0dG9uLnNlbGVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlU2VsZWN0ZWQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLmJ1dHRvbnNbaW5kZXhdO1xuXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJbmRleGVzLmluZGV4T2YoaW5kZXgpID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoeyBidXR0b24sIGluZGV4IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKGJ1dHRvbi5uYXRpdmVFbGVtZW50LCAnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3MoYnV0dG9uLm5hdGl2ZUVsZW1lbnQsICdpZ3gtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZCcpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4SW5WaWV3QnV0dG9ucyA9IHRoaXMudmlld0J1dHRvbnMudG9BcnJheSgpLmluZGV4T2YoYnV0dG9uKTtcbiAgICAgICAgaWYgKGluZGV4SW5WaWV3QnV0dG9ucyAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4SW5WaWV3QnV0dG9uc10uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVzZWxlY3Qgb3RoZXIgYnV0dG9ucyBpZiBtdWx0aVNlbGVjdGlvbiBpcyBub3QgZW5hYmxlZFxuICAgICAgICBpZiAoIXRoaXMubXVsdGlTZWxlY3Rpb24gJiYgdGhpcy5zZWxlY3RlZEluZGV4ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5idXR0b25zLmZvckVhY2goKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaSAhPT0gaW5kZXggJiYgdGhpcy5zZWxlY3RlZEluZGV4ZXMuaW5kZXhPZihpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdEJ1dHRvbihpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0cyBhIGJ1dHRvbiBieSBpdHMgaW5kZXguXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUNoaWxkXCIpXG4gICAgICogcHJpdmF0ZSBidXR0b25HOiBJZ3hCdXR0b25Hcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICB0aGlzLmJ1dHRvbkcuZGVzZWxlY3RCdXR0b24oMik7XG4gICAgICogICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiB7QGxpbmsgSWd4QnV0dG9uR3JvdXBDb21wb25lbnR9XG4gICAgICovXG4gICAgcHVibGljIGRlc2VsZWN0QnV0dG9uKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuYnV0dG9ucy5sZW5ndGggfHwgaW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLmJ1dHRvbnNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlcy5zcGxpY2UodGhpcy5zZWxlY3RlZEluZGV4ZXMuaW5kZXhPZihpbmRleCksIDEpO1xuXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShidXR0b24ubmF0aXZlRWxlbWVudCwgJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyhidXR0b24ubmF0aXZlRWxlbWVudCwgJ2lneC1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkJyk7XG4gICAgICAgIGJ1dHRvbi5kZXNlbGVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4SW5WaWV3QnV0dG9ucyA9IHRoaXMudmlld0J1dHRvbnMudG9BcnJheSgpLmluZGV4T2YoYnV0dG9uKTtcbiAgICAgICAgaWYgKGluZGV4SW5WaWV3QnV0dG9ucyAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4SW5WaWV3QnV0dG9uc10uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGVzZWxlY3RlZC5lbWl0KHsgYnV0dG9uLCBpbmRleCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWJ1dHRvbi5pbml0aWFsRGVuc2l0eSkge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNwbGF5RGVuc2l0eSA9IHRoaXMuZGlzcGxheURlbnNpdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBpbml0QnV0dG9ucyA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIENhbmNlbCBhbnkgZXhpc3RpbmcgYnV0dG9uQ2xpY2sgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgdGhpcy5idXR0b25DbGlja05vdGlmaWVyJC5uZXh0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkSW5kZXhlcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAvLyBpbml0aWFsIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbWVudCA9IGJ1dHRvbi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKGJ1dHRvbkVsZW1lbnQsICdpZ3gtYnV0dG9uLWdyb3VwX19pdGVtJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChidXR0b24uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnV0dG9uLmJ1dHRvbkNsaWNrLnBpcGUodGFrZVVudGlsKHRoaXMuYnV0dG9uQ2xpY2tOb3RpZmllciQpKS5zdWJzY3JpYmUoKF8pID0+IHRoaXMuX2NsaWNrSGFuZGxlcihpbmRleCkpO1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5idXR0b25TZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5idXR0b25TZWxlY3RlZE5vdGlmaWVyJCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHRoaXMudXBkYXRlU2VsZWN0ZWQoaW5kZXgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudmlld0J1dHRvbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLnF1ZXJ5TGlzdE5vdGlmaWVyJCkpLnN1YnNjcmliZSgoKSA9PiBpbml0QnV0dG9ucygpKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUJ1dHRvbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLnF1ZXJ5TGlzdE5vdGlmaWVyJCkpLnN1YnNjcmliZSgoKSA9PiBpbml0QnV0dG9ucygpKTtcbiAgICAgICAgaW5pdEJ1dHRvbnMoKTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2tOb3RpZmllciQubmV4dCgpO1xuICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrTm90aWZpZXIkLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgdGhpcy5idXR0b25TZWxlY3RlZE5vdGlmaWVyJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuYnV0dG9uU2VsZWN0ZWROb3RpZmllciQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdE5vdGlmaWVyJC5uZXh0KCk7XG4gICAgICAgIHRoaXMucXVlcnlMaXN0Tm90aWZpZXIkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBfY2xpY2tIYW5kbGVyKGk6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ZXMuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QnV0dG9uKGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdEJ1dHRvbihpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnV0dG9uR3JvdXBFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgYnV0dG9uOiBJZ3hCdXR0b25EaXJlY3RpdmU7XG4gICAgaW5kZXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuIiwiPGRpdiBjbGFzcz1cImlneC1idXR0b24tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBbY2xhc3MuaWd4LWJ1dHRvbi1ncm91cC0tdmVydGljYWxdPVwiaXNWZXJ0aWNhbFwiPlxuICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiB2YWx1ZXM7IGxldCBpID0gJ2luZGV4J1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZ3hCdXR0b249XCJmbGF0XCJcbiAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgW3NlbGVjdGVkXT1cImJ1dHRvbi5zZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtdG9nZ2xhYmxlXT1cImJ1dHRvbi50b2dnbGFibGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgYnV0dG9uLmRpc2FibGVkXCJcbiAgICAgICAgW2lneEJ1dHRvbkNvbG9yXT1cImJ1dHRvbi5jb2xvclwiXG4gICAgICAgIFtpZ3hCdXR0b25CYWNrZ3JvdW5kXT1cImJ1dHRvbi5iZ2NvbG9yXCJcbiAgICAgICAgW2lneExhYmVsXT1cImJ1dHRvbi5sYWJlbFwiXG4gICAgICAgIFtpZ3hSaXBwbGVdPVwiYnV0dG9uLnJpcHBsZVwiXG4gICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1idXR0b24tZ3JvdXBfX2l0ZW0tY29udGVudCB7eyBpdGVtQ29udGVudENzc0NsYXNzIH19XCI+XG4gICAgICAgICAgICA8aWd4LWljb24gKm5nSWY9XCJidXR0b24uaWNvblwiPnt7YnV0dG9uLmljb259fTwvaWd4LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1idXR0b24tZ3JvdXBfX2J1dHRvbi10ZXh0XCIgKm5nSWY9XCJidXR0b24ubGFiZWxcIj57e2J1dHRvbi5sYWJlbH19PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uR3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2J1dHRvbkdyb3VwL2J1dHRvbkdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9idXR0b25Hcm91cC9idXR0b25ncm91cC1jb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUdILFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBR1IsWUFBWSxFQUVmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUUxRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztJQUN2QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixRQUFRLEVBQUUsVUFBVTtDQUN2QixDQUFDLENBQUM7QUFHSCxJQUFJLE9B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c0JBQXBELFlBQVk7dUJBQUMsa0JBQWtCO2dCQUNhLGVBQWU7c0JBQTNELGVBQWU7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJZ3hCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFJpcHBsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eUJhc2UsIERpc3BsYXlEZW5zaXR5VG9rZW4sIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IG1rZW51bSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIEJ1dHRvbiBHcm91cCBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IEJ1dHRvbkdyb3VwQWxpZ25tZW50ID0gbWtlbnVtKHtcbiAgICBob3Jpem9udGFsOiAnaG9yaXpvbnRhbCcsXG4gICAgdmVydGljYWw6ICd2ZXJ0aWNhbCdcbn0pO1xuZXhwb3J0IHR5cGUgQnV0dG9uR3JvdXBBbGlnbm1lbnQgPSB0eXBlb2YgQnV0dG9uR3JvdXBBbGlnbm1lbnRba2V5b2YgdHlwZW9mIEJ1dHRvbkdyb3VwQWxpZ25tZW50XTtcblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIEJ1dHRvbiBHcm91cCoqIC1cbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b25ncm91cC5odG1sKVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgQnV0dG9uIEdyb3VwIGRpc3BsYXlzIGEgZ3JvdXAgb2YgYnV0dG9ucyBlaXRoZXIgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkuICBUaGUgZ3JvdXAgc3VwcG9ydHNcbiAqIHNpbmdsZSwgbXVsdGlwbGUgYW5kIHRvZ2dsZSBzZWxlY3Rpb24uXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtYnV0dG9uZ3JvdXAgbXVsdGlTZWxlY3Rpb249XCJ0cnVlXCIgW3ZhbHVlc109XCJmb250T3B0aW9uc1wiPlxuICogPC9pZ3gtYnV0dG9uZ3JvdXA+XG4gKiBgYGBcbiAqIFRoZSBgZm9udE9wdGlvbnNgIHZhbHVlIHNob3duIGFib3ZlIGlzIGRlZmluZWQgYXM6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmZvbnRPcHRpb25zID0gW1xuICogICB7IGljb246ICdmb3JtYXRfYm9sZCcsIHNlbGVjdGVkOiBmYWxzZSB9LFxuICogICB7IGljb246ICdmb3JtYXRfaXRhbGljJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXG4gKiAgIHsgaWNvbjogJ2Zvcm1hdF91bmRlcmxpbmVkJywgc2VsZWN0ZWQ6IGZhbHNlIH1dO1xuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWJ1dHRvbmdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2J1dHRvbmdyb3VwLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nRm9yLCBJZ3hCdXR0b25EaXJlY3RpdmUsIElneFJpcHBsZURpcmVjdGl2ZSwgTmdJZiwgSWd4SWNvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4QnV0dG9uR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2UgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEEgY29sbGVjdGlvbiBjb250YWluaW5nIGFsbCBidXR0b25zIGluc2lkZSB0aGUgYnV0dG9uIGdyb3VwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYnV0dG9ucygpOiBJZ3hCdXR0b25EaXJlY3RpdmVbXSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy52aWV3QnV0dG9ucy50b0FycmF5KCksIC4uLnRoaXMudGVtcGxhdGVCdXR0b25zLnRvQXJyYXkoKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLiBJZiBub3Qgc2V0IGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWJ1dHRvbmdyb3VwIFtpZF09XCInaWd4LWRpYWxvZy01NidcIiBbbXVsdGlTZWxlY3Rpb25dPVwiIW11bHRpXCIgW3ZhbHVlc109XCJhbGlnbk9wdGlvbnNcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1idXR0b25ncm91cC0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuekluZGV4JylcbiAgICBwdWJsaWMgekluZGV4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyB5b3UgdG8gc2V0IGEgc3R5bGUgdXNpbmcgdGhlIGBpdGVtQ29udGVudENzc0NsYXNzYCBpbnB1dC5cbiAgICAgKiBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBDU1MgY2xhc3MgbmFtZSB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgYnV0dG9uIGdyb3VwLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgc3R5bGUxID0gXCJzdHlsZUNsYXNzXCI7XG4gICAgICogIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiAgYGBgaHRtbFxuICAgICAqIDxpZ3gtYnV0dG9uZ3JvdXAgW2l0ZW1Db250ZW50Q3NzQ2xhc3NdPVwic3R5bGUxXCIgW211bHRpU2VsZWN0aW9uXT1cIiFtdWx0aVwiIFt2YWx1ZXNdPVwiYWxpZ25PcHRpb25zXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGl0ZW1Db250ZW50Q3NzQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pdGVtQ29udGVudENzc0NsYXNzID0gdmFsdWUgfHwgdGhpcy5faXRlbUNvbnRlbnRDc3NDbGFzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGl0ZW0gY29udGVudCBvZiB0aGUgYElneEJ1dHRvbkdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJNeUNoaWxkXCIpXG4gICAgICogcHVibGljIGJ1dHRvbkc6IElneEJ1dHRvbkdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBidXR0b25TZWxlY3QgPSB0aGlzLmJ1dHRvbkcuaXRlbUNvbnRlbnRDc3NDbGFzcztcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpdGVtQ29udGVudENzc0NsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtQ29udGVudENzc0NsYXNzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGVuYWJsZXMgc2VsZWN0aW5nIG11bHRpcGxlIGJ1dHRvbnMuIEJ5IGRlZmF1bHQsIG11bHRpLXNlbGVjdGlvbiBpcyBmYWxzZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1idXR0b25ncm91cCBbbXVsdGlTZWxlY3Rpb25dPVwiZmFsc2VcIiBbYWxpZ25tZW50XT1cImFsaWdubWVudFwiPjwvaWd4LWJ1dHRvbmdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aVNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhlIGJ1dHRvbnMgaW4gdGhlIGJ1dHRvbiBncm91cC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgKiAgICAgIHRoaXMuY2l0aWVzID0gW1xuICAgICAqICAgICAgICBuZXcgQnV0dG9uKHtcbiAgICAgKiAgICAgICAgICBsYWJlbDogXCJTb2ZpYVwiXG4gICAgICogICAgICB9KSxcbiAgICAgKiAgICAgICAgbmV3IEJ1dHRvbih7XG4gICAgICogICAgICAgICAgbGFiZWw6IFwiTG9uZG9uXCJcbiAgICAgKiAgICAgIH0pLFxuICAgICAqICAgICAgICBuZXcgQnV0dG9uKHtcbiAgICAgKiAgICAgICAgICBsYWJlbDogXCJOZXcgWW9ya1wiLFxuICAgICAqICAgICAgICAgIHNlbGVjdGVkOiB0cnVlXG4gICAgICogICAgICB9KSxcbiAgICAgKiAgICAgICAgbmV3IEJ1dHRvbih7XG4gICAgICogICAgICAgICAgbGFiZWw6IFwiVG9reW9cIlxuICAgICAqICAgICAgfSlcbiAgICAgKiAgXTtcbiAgICAgKiAgfVxuICAgICAqICAvLy4uXG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWJ1dHRvbmdyb3VwIFttdWx0aVNlbGVjdGlvbl09XCJmYWxzZVwiIFt2YWx1ZXNdPVwiY2l0aWVzXCI+PC9pZ3gtYnV0dG9uZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHZhbHVlczogYW55O1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoZSBgaWd4LWJ1dHRvbmdyb3VwYCBjb21wb25lbnQuIEJ5IGRlZmF1bHQgaXQncyBmYWxzZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1idXR0b25ncm91cCBbZGlzYWJsZWRdPVwidHJ1ZVwiIFttdWx0aVNlbGVjdGlvbl09XCJtdWx0aVwiIFt2YWx1ZXNdPVwiZm9udE9wdGlvbnNcIj48L2lneC1idXR0b25ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy52aWV3QnV0dG9ucyAmJiB0aGlzLnRlbXBsYXRlQnV0dG9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5mb3JFYWNoKChiKSA9PiAoYi5kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgeW91IHRvIHNldCB0aGUgYnV0dG9uIGdyb3VwIGFsaWdubWVudC5cbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmUgYEJ1dHRvbkdyb3VwQWxpZ25tZW50Lmhvcml6b250YWxgIChkZWZhdWx0KSBhbmQgYEJ1dHRvbkdyb3VwQWxpZ25tZW50LnZlcnRpY2FsYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGFsaWdubWVudCA9IEJ1dHRvbkdyb3VwQWxpZ25tZW50LnZlcnRpY2FsO1xuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1idXR0b25ncm91cCBbbXVsdGlTZWxlY3Rpb25dPVwiZmFsc2VcIiBbdmFsdWVzXT1cImNpdGllc1wiIFthbGlnbm1lbnRdPVwiYWxpZ25tZW50XCI+PC9pZ3gtYnV0dG9uZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGFsaWdubWVudCh2YWx1ZTogQnV0dG9uR3JvdXBBbGlnbm1lbnQpIHtcbiAgICAgICAgdGhpcy5faXNWZXJ0aWNhbCA9IHZhbHVlID09PSBCdXR0b25Hcm91cEFsaWdubWVudC52ZXJ0aWNhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWxpZ25tZW50IG9mIHRoZSBgaWd4LWJ1dHRvbmdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwdWJsaWMgYnV0dG9uRzogSWd4QnV0dG9uR3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGJ1dHRvbkFsaWdubWVudCA9IHRoaXMuYnV0dG9uRy5hbGlnbm1lbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWxpZ25tZW50KCk6IEJ1dHRvbkdyb3VwQWxpZ25tZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmVydGljYWwgPyBCdXR0b25Hcm91cEFsaWdubWVudC52ZXJ0aWNhbCA6IEJ1dHRvbkdyb3VwQWxpZ25tZW50Lmhvcml6b250YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQE91cHV0IHByb3BlcnR5IHRoYXQgZW1pdHMgYW4gZXZlbnQgd2hlbiBhIGJ1dHRvbiBpcyBzZWxlY3RlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInRvYXN0XCIpXG4gICAgICogcHJpdmF0ZSB0b2FzdDogSWd4VG9hc3RDb21wb25lbnQ7XG4gICAgICogcHVibGljIHNlbGVjdGVkSGFuZGxlcihidXR0b25ncm91cCkge1xuICAgICAqICAgICB0aGlzLnRvYXN0Lm9wZW4oKVxuICAgICAqIH1cbiAgICAgKiAgLy8uLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1idXR0b25ncm91cCAjTXlDaGlsZCBbbXVsdGlTZWxlY3Rpb25dPVwiIW11bHRpXCIgKHNlbGVjdGVkKT1cInNlbGVjdGVkSGFuZGxlcigkZXZlbnQpXCI+PC9pZ3gtYnV0dG9uZ3JvdXA+XG4gICAgICogPGlneC10b2FzdCAjdG9hc3Q+WW91IGhhdmUgbWFkZSBhIHNlbGVjdGlvbiE8L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCdXR0b25Hcm91cEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBPdXB1dCBwcm9wZXJ0eSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gYSBidXR0b24gaXMgZGVzZWxlY3RlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJ0b2FzdFwiKVxuICAgICAqICBwcml2YXRlIHRvYXN0OiBJZ3hUb2FzdENvbXBvbmVudDtcbiAgICAgKiAgcHVibGljIGRlc2VsZWN0ZWRIYW5kbGVyKGJ1dHRvbmdyb3VwKXtcbiAgICAgKiAgICAgdGhpcy50b2FzdC5vcGVuKClcbiAgICAgKiB9XG4gICAgICogIC8vLi4uXG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYnV0dG9uZ3JvdXA+ICNNeUNoaWxkIFttdWx0aVNlbGVjdGlvbl09XCJtdWx0aVwiIChkZXNlbGVjdGVkKT1cImRlc2VsZWN0ZWRIYW5kbGVyKCRldmVudClcIj48L2lneC1idXR0b25ncm91cD5cbiAgICAgKiA8aWd4LXRvYXN0ICN0b2FzdD5Zb3UgaGF2ZSBkZXNlbGVjdGVkIGEgYnV0dG9uITwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkZXNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJQnV0dG9uR3JvdXBFdmVudEFyZ3M+KCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKElneEJ1dHRvbkRpcmVjdGl2ZSkgcHJpdmF0ZSB2aWV3QnV0dG9uczogUXVlcnlMaXN0PElneEJ1dHRvbkRpcmVjdGl2ZT47XG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hCdXR0b25EaXJlY3RpdmUpIHByaXZhdGUgdGVtcGxhdGVCdXR0b25zOiBRdWVyeUxpc3Q8SWd4QnV0dG9uRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYGlneC1idXR0b25ncm91cGAgYWxpZ25tZW50IGlzIHZlcnRpY2FsLlxuICAgICAqIE5vdGUgdGhhdCBpbiBvcmRlciBmb3IgdGhlIGFjY2Vzc29yIHRvIHdvcmsgY29ycmVjdGx5IHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgc2V0IGV4cGxpY2l0bHkuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYnV0dG9uZ3JvdXAgI015Q2hpbGQgW2FsaWdubWVudF09XCJhbGlnbm1lbnRcIiBbdmFsdWVzXT1cImFsaWduT3B0aW9uc1wiPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLy4uLlxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUNoaWxkXCIpXG4gICAgICogcHJpdmF0ZSBidXR0b25HOiBJZ3hCdXR0b25Hcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgb3JpZW50YXRpb24gPSB0aGlzLmJ1dHRvbkcuaXNWZXJ0aWNhbDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1ZlcnRpY2FsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWZXJ0aWNhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkSW5kZXhlczogbnVtYmVyW10gPSBbXTtcblxuICAgIHByb3RlY3RlZCBidXR0b25DbGlja05vdGlmaWVyJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJvdGVjdGVkIGJ1dHRvblNlbGVjdGVkTm90aWZpZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcm90ZWN0ZWQgcXVlcnlMaXN0Tm90aWZpZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgX2lzVmVydGljYWw6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfaXRlbUNvbnRlbnRDc3NDbGFzczogc3RyaW5nO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9uc1xuICAgICkge1xuICAgICAgICBzdXBlcihfZGlzcGxheURlbnNpdHlPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzZWxlY3RlZCBidXR0b24vYnV0dG9ucy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwcml2YXRlIGJ1dHRvbkc6IElneEJ1dHRvbkdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBzZWxlY3RlZEJ1dHRvbiA9IHRoaXMuYnV0dG9uRy5zZWxlY3RlZEJ1dHRvbnM7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRCdXR0b25zKCk6IElneEJ1dHRvbkRpcmVjdGl2ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9ucy5maWx0ZXIoKF8sIGkpID0+IHRoaXMuc2VsZWN0ZWRJbmRleGVzLmluZGV4T2YoaSkgIT09IC0xKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIGEgYnV0dG9uIGJ5IGl0cyBpbmRleC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwcml2YXRlIGJ1dHRvbkc6IElneEJ1dHRvbkdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIHRoaXMuYnV0dG9uRy5zZWxlY3RCdXR0b24oMik7XG4gICAgICogICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiB7QGxpbmsgSWd4QnV0dG9uR3JvdXBDb21wb25lbnR9XG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdEJ1dHRvbihpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChpbmRleCA+PSB0aGlzLmJ1dHRvbnMubGVuZ3RoIHx8IGluZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5idXR0b25zW2luZGV4XTtcbiAgICAgICAgYnV0dG9uLnNlbGVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlU2VsZWN0ZWQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLmJ1dHRvbnNbaW5kZXhdO1xuXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJbmRleGVzLmluZGV4T2YoaW5kZXgpID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoeyBidXR0b24sIGluZGV4IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKGJ1dHRvbi5uYXRpdmVFbGVtZW50LCAnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3MoYnV0dG9uLm5hdGl2ZUVsZW1lbnQsICdpZ3gtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZCcpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4SW5WaWV3QnV0dG9ucyA9IHRoaXMudmlld0J1dHRvbnMudG9BcnJheSgpLmluZGV4T2YoYnV0dG9uKTtcbiAgICAgICAgaWYgKGluZGV4SW5WaWV3QnV0dG9ucyAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4SW5WaWV3QnV0dG9uc10uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVzZWxlY3Qgb3RoZXIgYnV0dG9ucyBpZiBtdWx0aVNlbGVjdGlvbiBpcyBub3QgZW5hYmxlZFxuICAgICAgICBpZiAoIXRoaXMubXVsdGlTZWxlY3Rpb24gJiYgdGhpcy5zZWxlY3RlZEluZGV4ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5idXR0b25zLmZvckVhY2goKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaSAhPT0gaW5kZXggJiYgdGhpcy5zZWxlY3RlZEluZGV4ZXMuaW5kZXhPZihpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdEJ1dHRvbihpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0cyBhIGJ1dHRvbiBieSBpdHMgaW5kZXguXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUNoaWxkXCIpXG4gICAgICogcHJpdmF0ZSBidXR0b25HOiBJZ3hCdXR0b25Hcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICB0aGlzLmJ1dHRvbkcuZGVzZWxlY3RCdXR0b24oMik7XG4gICAgICogICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiB7QGxpbmsgSWd4QnV0dG9uR3JvdXBDb21wb25lbnR9XG4gICAgICovXG4gICAgcHVibGljIGRlc2VsZWN0QnV0dG9uKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuYnV0dG9ucy5sZW5ndGggfHwgaW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLmJ1dHRvbnNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlcy5zcGxpY2UodGhpcy5zZWxlY3RlZEluZGV4ZXMuaW5kZXhPZihpbmRleCksIDEpO1xuXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShidXR0b24ubmF0aXZlRWxlbWVudCwgJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyhidXR0b24ubmF0aXZlRWxlbWVudCwgJ2lneC1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkJyk7XG4gICAgICAgIGJ1dHRvbi5kZXNlbGVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4SW5WaWV3QnV0dG9ucyA9IHRoaXMudmlld0J1dHRvbnMudG9BcnJheSgpLmluZGV4T2YoYnV0dG9uKTtcbiAgICAgICAgaWYgKGluZGV4SW5WaWV3QnV0dG9ucyAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4SW5WaWV3QnV0dG9uc10uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGVzZWxlY3RlZC5lbWl0KHsgYnV0dG9uLCBpbmRleCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWJ1dHRvbi5pbml0aWFsRGVuc2l0eSkge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNwbGF5RGVuc2l0eSA9IHRoaXMuZGlzcGxheURlbnNpdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBpbml0QnV0dG9ucyA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIENhbmNlbCBhbnkgZXhpc3RpbmcgYnV0dG9uQ2xpY2sgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgdGhpcy5idXR0b25DbGlja05vdGlmaWVyJC5uZXh0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkSW5kZXhlcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAvLyBpbml0aWFsIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbWVudCA9IGJ1dHRvbi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKGJ1dHRvbkVsZW1lbnQsICdpZ3gtYnV0dG9uLWdyb3VwX19pdGVtJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChidXR0b24uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnV0dG9uLmJ1dHRvbkNsaWNrLnBpcGUodGFrZVVudGlsKHRoaXMuYnV0dG9uQ2xpY2tOb3RpZmllciQpKS5zdWJzY3JpYmUoKF8pID0+IHRoaXMuX2NsaWNrSGFuZGxlcihpbmRleCkpO1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5idXR0b25TZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5idXR0b25TZWxlY3RlZE5vdGlmaWVyJCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHRoaXMudXBkYXRlU2VsZWN0ZWQoaW5kZXgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudmlld0J1dHRvbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLnF1ZXJ5TGlzdE5vdGlmaWVyJCkpLnN1YnNjcmliZSgoKSA9PiBpbml0QnV0dG9ucygpKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUJ1dHRvbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLnF1ZXJ5TGlzdE5vdGlmaWVyJCkpLnN1YnNjcmliZSgoKSA9PiBpbml0QnV0dG9ucygpKTtcbiAgICAgICAgaW5pdEJ1dHRvbnMoKTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2tOb3RpZmllciQubmV4dCgpO1xuICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrTm90aWZpZXIkLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgdGhpcy5idXR0b25TZWxlY3RlZE5vdGlmaWVyJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuYnV0dG9uU2VsZWN0ZWROb3RpZmllciQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdE5vdGlmaWVyJC5uZXh0KCk7XG4gICAgICAgIHRoaXMucXVlcnlMaXN0Tm90aWZpZXIkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBfY2xpY2tIYW5kbGVyKGk6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ZXMuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QnV0dG9uKGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdEJ1dHRvbihpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnV0dG9uR3JvdXBFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgYnV0dG9uOiBJZ3hCdXR0b25EaXJlY3RpdmU7XG4gICAgaW5kZXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuIiwiPGRpdiBjbGFzcz1cImlneC1idXR0b24tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBbY2xhc3MuaWd4LWJ1dHRvbi1ncm91cC0tdmVydGljYWxdPVwiaXNWZXJ0aWNhbFwiPlxuICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiB2YWx1ZXM7IGxldCBpID0gJ2luZGV4J1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZ3hCdXR0b249XCJmbGF0XCJcbiAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImRpc3BsYXlEZW5zaXR5XCJcbiAgICAgICAgW3NlbGVjdGVkXT1cImJ1dHRvbi5zZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtdG9nZ2xhYmxlXT1cImJ1dHRvbi50b2dnbGFibGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgYnV0dG9uLmRpc2FibGVkXCJcbiAgICAgICAgW2lneEJ1dHRvbkNvbG9yXT1cImJ1dHRvbi5jb2xvclwiXG4gICAgICAgIFtpZ3hCdXR0b25CYWNrZ3JvdW5kXT1cImJ1dHRvbi5iZ2NvbG9yXCJcbiAgICAgICAgW2lneExhYmVsXT1cImJ1dHRvbi5sYWJlbFwiXG4gICAgICAgIFtpZ3hSaXBwbGVdPVwiYnV0dG9uLnJpcHBsZVwiXG4gICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1idXR0b24tZ3JvdXBfX2l0ZW0tY29udGVudCB7eyBpdGVtQ29udGVudENzc0NsYXNzIH19XCI+XG4gICAgICAgICAgICA8aWd4LWljb24gKm5nSWY9XCJidXR0b24uaWNvblwiPnt7YnV0dG9uLmljb259fTwvaWd4LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1idXR0b24tZ3JvdXBfX2J1dHRvbi10ZXh0XCIgKm5nSWY9XCJidXR0b24ubGFiZWxcIj57e2J1dHRvbi5sYWJlbH19PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
|
|
@@ -8,15 +8,15 @@ import * as i2 from "../directives/button/button.directive";
|
|
|
8
8
|
* IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components
|
|
9
9
|
*/
|
|
10
10
|
export class IgxButtonGroupModule {
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
12
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0
|
|
13
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxButtonGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
12
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: IgxButtonGroupModule, imports: [i1.IgxButtonGroupComponent, i2.IgxButtonDirective], exports: [i1.IgxButtonGroupComponent, i2.IgxButtonDirective] }); }
|
|
13
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxButtonGroupModule }); }
|
|
14
14
|
}
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxButtonGroupModule, decorators: [{
|
|
16
16
|
type: NgModule,
|
|
17
17
|
args: [{
|
|
18
18
|
imports: [...IGX_BUTTON_GROUP_DIRECTIVES],
|
|
19
19
|
exports: [...IGX_BUTTON_GROUP_DIRECTIVES]
|
|
20
20
|
}]
|
|
21
21
|
}] });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uZ3JvdXAubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2J1dHRvbkdyb3VwL2J1dHRvbmdyb3VwLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7OztBQUUzRDs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sb0JBQW9COzhHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQjsrR0FBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUpoQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLEdBQUcsMkJBQTJCLENBQUM7b0JBQ3pDLE9BQU8sRUFBRSxDQUFDLEdBQUcsMkJBQTJCLENBQUM7aUJBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElHWF9CVVRUT05fR1JPVVBfRElSRUNUSVZFUyB9IGZyb20gJy4vcHVibGljX2FwaSc7XG5cbi8qKlxuICogQGhpZGRlblxuICogSU1QT1JUQU5UOiBUaGUgZm9sbG93aW5nIGlzIE5nTW9kdWxlIGV4cG9ydGVkIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBiZWZvcmUgc3RhbmRhbG9uZSBjb21wb25lbnRzXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogWy4uLklHWF9CVVRUT05fR1JPVVBfRElSRUNUSVZFU10sXG4gICAgZXhwb3J0czogWy4uLklHWF9CVVRUT05fR1JPVVBfRElSRUNUSVZFU11cbn0pXG5leHBvcnQgY2xhc3MgSWd4QnV0dG9uR3JvdXBNb2R1bGUge31cbiJdfQ==
|
|
@@ -660,10 +660,10 @@ export class IgxCalendarBaseDirective {
|
|
|
660
660
|
validateDate(value) {
|
|
661
661
|
return DateTimeUtil.isValidDate(value) ? value : new Date();
|
|
662
662
|
}
|
|
663
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0
|
|
664
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0
|
|
663
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxCalendarBaseDirective, deps: [{ token: i1.PlatformUtil }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
664
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: IgxCalendarBaseDirective, isStandalone: true, selector: "[igxCalendarBase]", inputs: { hideOutsideDays: "hideOutsideDays", resourceStrings: "resourceStrings", weekStart: "weekStart", locale: "locale", formatOptions: "formatOptions", formatViews: "formatViews", selection: "selection", value: "value", viewDate: "viewDate", disabledDates: "disabledDates", specialDates: "specialDates" }, outputs: { selected: "selected", viewDateChanged: "viewDateChanged", activeViewChanged: "activeViewChanged" }, host: { listeners: { "pointerdown": "onPointerdown($event)" } }, ngImport: i0 }); }
|
|
665
665
|
}
|
|
666
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0
|
|
666
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxCalendarBaseDirective, decorators: [{
|
|
667
667
|
type: Directive,
|
|
668
668
|
args: [{
|
|
669
669
|
selector: '[igxCalendarBase]',
|
|
@@ -704,4 +704,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
|
|
|
704
704
|
type: HostListener,
|
|
705
705
|
args: ['pointerdown', ['$event']]
|
|
706
706
|
}] } });
|
|
707
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFZLFFBQVEsRUFBRSxjQUFjLEVBQWtFLFdBQVcsRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHakwsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFMUQsd0JBQXdCO0FBS3hCLE1BQU0sT0FBTyx3QkFBd0I7SUF3TWpDOzs7T0FHRztJQUNILElBQ1csZUFBZSxDQUFDLEtBQStCO1FBQ3RELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxlQUFlO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdC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QkFEckIsTUFBTTtnQkFlQSxpQkFBaUI7c0JBRHZCLE1BQU07Z0JBOEpJLGVBQWU7c0JBRHpCLEtBQUs7Z0JBcUJLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBbUJLLE1BQU07c0JBRGhCLEtBQUs7Z0JBK0JLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBbUJLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBcUJLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBaUNLLEtBQUs7c0JBRGYsS0FBSztnQkErQkssUUFBUTtzQkFEbEIsS0FBSztnQkF5QkssYUFBYTtzQkFEdkIsS0FBSztnQkF5QkssWUFBWTtzQkFEdEIsS0FBSztnQkFzQ0MsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIERpcmVjdGl2ZSwgSW5qZWN0LCBMT0NBTEVfSUQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV0VFS0RBWVMsIENhbGVuZGFyLCBpc0RhdGVJblJhbmdlcywgSUZvcm1hdHRpbmdPcHRpb25zLCBJRm9ybWF0dGluZ1ZpZXdzLCBJVmlld0RhdGVDaGFuZ2VFdmVudEFyZ3MsIFNjcm9sbE1vbnRoLCBJZ3hDYWxlbmRhclZpZXcsIENhbGVuZGFyU2VsZWN0aW9uIH0gZnJvbSAnLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGVSYW5nZURlc2NyaXB0b3IgfSBmcm9tICcuLi9jb3JlL2RhdGVzJztcbmltcG9ydCB7IG5vb3AsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRGF0ZSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vY2FsZW5kYXItcmVzb3VyY2VzJztcbmltcG9ydCB7IERhdGVUaW1lVXRpbCB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3V0aWwvZGF0ZS10aW1lLnV0aWwnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlRmlyc3REYXlPZldlZWsgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4Q2FsZW5kYXJCYXNlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDYWxlbmRhckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIG91dHNpZGUgZGF0ZXMgKGRhdGVzIHRoYXQgYXJlIG91dCBvZiB0aGUgY3VycmVudCBtb250aCkgd2lsbCBiZSBoaWRkZW4uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhbGVuZGFyIFtoaWRlT3V0c2lkZURheXNdID0gXCJ0cnVlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWRlT3V0c2lkZURheXMgPSB0aGlzLmNhbGVuZGFyLmhpZGVPdXRzaWRlRGF5cztcbiAgICAgKiBgYGBcbiAgICAgKi9cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVPdXRzaWRlRGF5cyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIGRhdGUgaXMgc2VsZWN0ZWQuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlIHRoZSBgc2VsZWN0ZWREYXRlc2AgcHJvcGVydHkuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgRGF0ZVtdPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgbW9udGggaW4gdmlldyBpcyBjaGFuZ2VkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhbGVuZGFyICh2aWV3RGF0ZUNoYW5nZWQpPVwidmlld0RhdGVDaGFuZ2VkKCRldmVudClcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIHZpZXdEYXRlQ2hhbmdlZChldmVudDogSVZpZXdEYXRlQ2hhbmdlRXZlbnRBcmdzKSB7XG4gICAgICogIGxldCB2aWV3RGF0ZSA9IGV2ZW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZpZXdEYXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVZpZXdEYXRlQ2hhbmdlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYWN0aXZlIHZpZXcgaXMgY2hhbmdlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciAoYWN0aXZlVmlld0NoYW5nZWQpPVwiYWN0aXZlVmlld0NoYW5nZWQoJGV2ZW50KVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgYWN0aXZlVmlld0NoYW5nZWQoZXZlbnQ6IENhbGVuZGFyVmlldykge1xuICAgICAqICBsZXQgYWN0aXZlVmlldyA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWN0aXZlVmlld0NoYW5nZWQgID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJhbmdlU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBtb250aFNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbE1vbnRoLk5PTkU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbE1vbnRoJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHN0b3BNb250aFNjcm9sbCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGFydE1vbnRoU2Nyb2xsJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkRGF0ZXM7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNoaWZ0S2V5ID0gZmFsc2U7XG5cbiAgICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBsYXN0U2VsZWN0ZWREYXRlOiBEYXRlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXR0ZXJXZWVrZGF5O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXR0ZXJEYXk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGZvcm1hdHRlck1vbnRoO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXR0ZXJZZWFyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXR0ZXJNb250aGRheTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY2FsZW5kYXJNb2RlbDogQ2FsZW5kYXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfb25DaGFuZ2VDYWxsYmFjazogKF86IERhdGUpID0+IHZvaWQgPSBub29wO1xuXG4gICAgLyoqXG4gICAgICAqIEBoaWRkZW5cbiAgICAgICovXG4gICAgcHJvdGVjdGVkIF9kZXNlbGVjdERhdGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RlZERhdGVzV2l0aG91dEZvY3VzO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2xvY2FsZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3dlZWtTdGFydDogV0VFS0RBWVMgfCBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmlld0RhdGU6IERhdGU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc3RhcnREYXRlOiBEYXRlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2VuZERhdGU6IERhdGU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWREYXRlczogRGF0ZVJhbmdlRGVzY3JpcHRvcltdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3NwZWNpYWxEYXRlczogRGF0ZVJhbmdlRGVzY3JpcHRvcltdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbjogQ2FsZW5kYXJTZWxlY3Rpb24gfCBzdHJpbmcgPSBDYWxlbmRhclNlbGVjdGlvbi5TSU5HTEU7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5DYWxlbmRhclJlc1N0cmluZ3M7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0T3B0aW9uczogSUZvcm1hdHRpbmdPcHRpb25zID0ge1xuICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgIHdlZWtkYXk6ICdzaG9ydCcsXG4gICAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0Vmlld3M6IElGb3JtYXR0aW5nVmlld3MgPSB7XG4gICAgICAgIGRheTogZmFsc2UsXG4gICAgICAgIG1vbnRoOiB0cnVlLFxuICAgICAgICB5ZWFyOiBmYWxzZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJQ2FsZW5kYXJSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElDYWxlbmRhclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIGlmICghdGhpcy5fcmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLkNhbGVuZGFyUmVzU3RyaW5ncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YXJ0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgKiBDYW4gcmV0dXJuIGEgbnVtZXJpYyBvciBhbiBlbnVtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3ZWVrIGRheS5cbiAgICAgKiBJZiBub3Qgc2V0LCBkZWZhdWx0cyB0byB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIGZvciB0aGUgYXBwbGljYXRpb24gbG9jYWxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB3ZWVrU3RhcnQoKTogV0VFS0RBWVMgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxlbmRhck1vZGVsLmZpcnN0V2Vla0RheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGFydCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICogQ2FuIGJlIGFzc2lnbmVkIHRvIGEgbnVtZXJpYyB2YWx1ZSBvciB0byBgV0VFS0RBWVNgIGVudW0gdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIHNldCB3ZWVrU3RhcnQodmFsdWU6IFdFRUtEQVlTIHwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3dlZWtTdGFydCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNhbGVuZGFyTW9kZWwuZmlyc3RXZWVrRGF5ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGxvY2FsZWAgb2YgdGhlIGNhbGVuZGFyLlxuICAgICAqIElmIG5vdCBzZXQsIGRlZmF1bHRzIHRvIGFwcGxpY2F0aW9uJ3MgbG9jYWxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgY2FsZW5kYXIuXG4gICAgICogRXhwZWN0cyBhIHZhbGlkIEJDUCA0NyBsYW5ndWFnZSB0YWcuXG4gICAgICovXG4gICAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcblxuICAgICAgICAvLyBpZiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBCQ1AgNDcgdGFnLCBzZXQgaXQgYmFjayB0byBfbG9jYWxlSWRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldExvY2FsZUZpcnN0RGF5T2ZXZWVrKHRoaXMuX2xvY2FsZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IHRoaXMuX2xvY2FsZUlkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hhbmdpbmcgbG9jYWxlIHJ1bnRpbWUgbmVlZHMgdG8gdXBkYXRlIHRoZSBgd2Vla1N0YXJ0YCB0b28sIGlmIGB3ZWVrU3RhcnRgIGlzIG5vdCBleHBsaWNpdGx5IHNldFxuICAgICAgICBpZiAodGhpcy5fd2Vla1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJNb2RlbC5maXJzdFdlZWtEYXkgPSBnZXRMb2NhbGVGaXJzdERheU9mV2Vlayh0aGlzLl9sb2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0Rm9ybWF0dGVycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRhdGUgZm9ybWF0IG9wdGlvbnMgb2YgdGhlIGRheXMgdmlldy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZm9ybWF0T3B0aW9ucygpOiBJRm9ybWF0dGluZ09wdGlvbnMge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0T3B0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkYXRlIGZvcm1hdCBvcHRpb25zIG9mIHRoZSBkYXlzIHZpZXcuXG4gICAgICogRGVmYXVsdCBpcyB7IGRheTogJ251bWVyaWMnLCBtb250aDogJ3Nob3J0Jywgd2Vla2RheTogJ3Nob3J0JywgeWVhcjogJ251bWVyaWMnIH1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZvcm1hdE9wdGlvbnMoZm9ybWF0T3B0aW9uczogSUZvcm1hdHRpbmdPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHRoaXMuX2Zvcm1hdE9wdGlvbnMsIGZvcm1hdE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmluaXRGb3JtYXR0ZXJzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBgZGF5YCwgYG1vbnRoYCBhbmQgYHllYXJgIHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAqIGFjY29yZGluZyB0byB0aGUgbG9jYWxlIGFuZCBmb3JtYXRPcHRpb25zLCBpZiBhbnkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGZvcm1hdFZpZXdzKCk6IElGb3JtYXR0aW5nVmlld3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0Vmlld3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBgZGF5YCwgYG1vbnRoYCBhbmQgYHllYXJgIHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAqIGFjY29yZGluZyB0byB0aGUgbG9jYWxlIGFuZCBmb3JtYXRPcHRpb25zLCBpZiBhbnkuXG4gICAgICovXG4gICAgcHVibGljIHNldCBmb3JtYXRWaWV3cyhmb3JtYXRWaWV3czogSUZvcm1hdHRpbmdWaWV3cykge1xuICAgICAgICB0aGlzLl9mb3JtYXRWaWV3cyA9IE9iamVjdC5hc3NpZ24odGhpcy5fZm9ybWF0Vmlld3MsIGZvcm1hdFZpZXdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEdldHMgdGhlIHNlbGVjdGlvbiB0eXBlLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwic2luZ2xlXCJgLlxuICAgICAqIENoYW5naW5nIHRoZSB0eXBlIG9mIHNlbGVjdGlvbiByZXNldHMgdGhlIGN1cnJlbnRseVxuICAgICAqIHNlbGVjdGVkIHZhbHVlcyBpZiBhbnkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGlvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNlbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJTZWxlY3Rpb24uU0lOR0xFOlxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENhbGVuZGFyU2VsZWN0aW9uLk1VTFRJOlxuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5SQU5HRTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlbGVjdGlvbiB2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZShzKS5cbiAgICAgKlxuICAgICAqIFdoZW4gc2VsZWN0aW9uIGlzIHNldCB0byBgc2luZ2xlYCwgaXQgcmV0dXJuc1xuICAgICAqIGEgc2luZ2xlIGBEYXRlYCBvYmplY3QuXG4gICAgICogT3RoZXJ3aXNlIGl0IGlzIGFuIGFycmF5IG9mIGBEYXRlYCBvYmplY3RzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBEYXRlIHwgRGF0ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBkYXRlKHMpLlxuICAgICAqXG4gICAgICogV2hlbiBzZWxlY3Rpb24gaXMgc2V0IHRvIGBzaW5nbGVgLCBpdCBhY2NlcHRzXG4gICAgICogYSBzaW5nbGUgYERhdGVgIG9iamVjdC5cbiAgICAgKiBPdGhlcndpc2UgaXQgaXMgYW4gYXJyYXkgb2YgYERhdGVgIG9iamVjdHMuXG4gICAgICovXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZSB8IERhdGVbXSkge1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICEhdmFsdWUgJiYgKHZhbHVlIGFzIERhdGVbXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXNXaXRob3V0Rm9jdXMgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZERhdGVzV2l0aG91dEZvY3VzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZURhdGUgPSB2YWx1ZVswXSA/IE1hdGgubWluLmFwcGx5KG51bGwsIHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZ2V0RGF0ZU9ubHkobmV3IERhdGUodmFsdWVEYXRlKSkuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdERhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXNXaXRob3V0Rm9jdXMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBkYXRlIHRoYXQgaXMgcHJlc2VudGVkLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgdGhlIGN1cnJlbnQgZGF0ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdmlld0RhdGUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aWV3RGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkYXRlIHRoYXQgd2lsbCBiZSBwcmVzZW50ZWQgaW4gdGhlIGRlZmF1bHQgdmlldyB3aGVuIHRoZSBjb21wb25lbnQgcmVuZGVycy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHZpZXdEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsaWREYXRlID0gdGhpcy52YWxpZGF0ZURhdGUodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5fdmlld0RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlc1dpdGhvdXRGb2N1cyA9IHZhbGlkRGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5nZXREYXRlT25seSh2YWxpZERhdGUpLnNldERhdGUoMSk7XG4gICAgICAgIHRoaXMuX3ZpZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZGlzYWJsZWQgZGF0ZXMgZGVzY3JpcHRvcnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRGF0ZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzYWJsZWQgZGF0ZXMnIGRlc2NyaXB0b3JzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlDYWxlbmRhclwiKVxuICAgICAqIHB1YmxpYyBjYWxlbmRhcjogSWd4Q2FsZW5kYXJDb21wb25lbnQ7XG4gICAgICogbmdPbkluaXQoKXtcbiAgICAgKiAgICB0aGlzLmNhbGVuZGFyLmRpc2FibGVkRGF0ZXMgPSBbXG4gICAgICogICAgIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLkJldHdlZW4sIGRhdGVSYW5nZTogW25ldyBEYXRlKFwiMjAyMC0xLTFcIiksIG5ldyBEYXRlKFwiMjAyMC0xLTE1XCIpXX0sXG4gICAgICogICAgIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLldlZWtlbmRzfV07XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkRGF0ZXMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzcGVjaWFsIGRhdGVzIGRlc2NyaXB0b3JzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzcGVjaWFsRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxEYXRlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzcGVjaWFsIGRhdGVzJyBkZXNjcmlwdG9ycy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2FsZW5kYXJcIilcbiAgICAgKiBwdWJsaWMgY2FsZW5kYXI6IElneENhbGVuZGFyQ29tcG9uZW50O1xuICAgICAqIG5nT25Jbml0KCl7XG4gICAgICogICAgdGhpcy5jYWxlbmRhci5zcGVjaWFsRGF0ZXMgPSBbXG4gICAgICogICAgIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLkJldHdlZW4sIGRhdGVSYW5nZTogW25ldyBEYXRlKFwiMjAyMC0xLTFcIiksIG5ldyBEYXRlKFwiMjAyMC0xLTE1XCIpXX0sXG4gICAgICogICAgIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLldlZWtlbmRzfV07XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc3BlY2lhbERhdGVzKHZhbHVlOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10pIHtcbiAgICAgICAgdGhpcy5fc3BlY2lhbERhdGVzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLCBASW5qZWN0KExPQ0FMRV9JRCkgcHJvdGVjdGVkIF9sb2NhbGVJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJNb2RlbCA9IG5ldyBDYWxlbmRhcigpO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IF9sb2NhbGVJZDtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMudmlld0RhdGUgPyB0aGlzLnZpZXdEYXRlIDogbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5pbml0Rm9ybWF0dGVycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE11bHRpL1JhbmdlIHNlbGVjdGlvbiB3aXRoIHNoaWZ0IGtleVxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Qb2ludGVyZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnNoaWZ0S2V5ID0gZXZlbnQuYnV0dG9uID09PSAwICYmIGV2ZW50LnNoaWZ0S2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGRlc2VsZWN0aW9uIG9mIGRhdGUvZGF0ZXMsIHdoZW4gc2VsZWN0aW9uIGlzIG11bHRpXG4gICAgICogVXN1YWxseSBwZXJmb3JtZWQgYnkgdGhlIHNlbGVjdE11bHRpcGxlIG1ldGhvZCwgYnV0IGxlYWRzIHRvIGJ1ZyB3aGVuIG11bHRpcGxlIG1vbnRocyBhcmUgaW4gdmlld1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdE11bHRpcGxlSW5Nb250aCh2YWx1ZTogRGF0ZSkge1xuICAgICAgICAvLyBkZXNlbGVjdCBtdWx0aXBsZSBkYXRlcyBmcm9tIGxhc3QgY2xpY2tlZCB0byBzaGlmdCBjbGlja2VkIGRhdGUgKGV4Y2x1ZGluZylcbiAgICAgICAgaWYgKHRoaXMuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIGxldCBzdGFydDogRGF0ZTtcbiAgICAgICAgICAgIGxldCBlbmQ6IERhdGU7XG5cbiAgICAgICAgICAgIFtzdGFydCwgZW5kXSA9IHRoaXMubGFzdFNlbGVjdGVkRGF0ZS5nZXRUaW1lKCkgPCB2YWx1ZS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICA/IFt0aGlzLmxhc3RTZWxlY3RlZERhdGUsIHZhbHVlXVxuICAgICAgICAgICAgICAgIDogW3ZhbHVlLCB0aGlzLmxhc3RTZWxlY3RlZERhdGVdO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChkYXRlOiBEYXRlKSA9PiBkYXRlLmdldFRpbWUoKSA8IHN0YXJ0LmdldFRpbWUoKSB8fCBkYXRlLmdldFRpbWUoKSA+IGVuZC5nZXRUaW1lKClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcy5wdXNoKHZhbHVlKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZGVzZWxlY3QgYSBzaW5nbGUgZGF0ZVxuICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRlT25seSA9IHRoaXMuZ2V0RGF0ZU9ubHkodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZGF0ZTogRGF0ZSkgPT4gZGF0ZS5nZXRUaW1lKCkgIT09IHZhbHVlRGF0ZU9ubHkuZ2V0VGltZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodjogRGF0ZSkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IERhdGVbXSkge1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUodmFsdWUgYXMgRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgYSBkYXRlIGlzIGRpc2FibGVkLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0RhdGVEaXNhYmxlZChkYXRlOiBEYXRlKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc0RhdGVJblJhbmdlcyhkYXRlLCB0aGlzLmRpc2FibGVkRGF0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgZGF0ZShzKSAoYmFzZWQgb24gdGhlIHNlbGVjdGlvbiB0eXBlKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0RGF0ZSh2YWx1ZTogRGF0ZSB8IERhdGVbXSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5TSU5HTEU6XG4gICAgICAgICAgICAgICAgaWYgKGlzRGF0ZSh2YWx1ZSkgJiYgIXRoaXMuaXNEYXRlRGlzYWJsZWQodmFsdWUgYXMgRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTaW5nbGUodmFsdWUgYXMgRGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5NVUxUSTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE11bHRpcGxlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0U6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSYW5nZSh2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdHMgZGF0ZShzKSAoYmFzZWQgb24gdGhlIHNlbGVjdGlvbiB0eXBlKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3REYXRlKHZhbHVlPzogRGF0ZSB8IERhdGVbXSkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWREYXRlcyB8fCB0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3Rpb24gPT09IENhbGVuZGFyU2VsZWN0aW9uLlNJTkdMRSA/IG51bGwgOiBbXTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWREYXRlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIENhbGVuZGFyU2VsZWN0aW9uLlNJTkdMRTpcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0U2luZ2xlKHZhbHVlIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5NVUxUSTpcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0TXVsdGlwbGUodmFsdWUgYXMgRGF0ZVtdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0U6XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFJhbmdlKHZhbHVlIGFzIERhdGVbXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdERhdGVGcm9tQ2xpZW50KHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJTZWxlY3Rpb24uU0lOR0xFOlxuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5NVUxUSTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5SQU5HRTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJhbmdlKHZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaW5pdEZvcm1hdHRlcnMoKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyRGF5ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5fbG9jYWxlLCB7IGRheTogdGhpcy5fZm9ybWF0T3B0aW9ucy5kYXkgfSk7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyV2Vla2RheSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuX2xvY2FsZSwgeyB3ZWVrZGF5OiB0aGlzLl9mb3JtYXRPcHRpb25zLndlZWtkYXkgfSk7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyTW9udGggPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLl9sb2NhbGUsIHsgbW9udGg6IHRoaXMuX2Zvcm1hdE9wdGlvbnMubW9udGggfSk7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyWWVhciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuX2xvY2FsZSwgeyB5ZWFyOiB0aGlzLl9mb3JtYXRPcHRpb25zLnllYXIgfSk7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyTW9udGhkYXkgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLl9sb2NhbGUsIHsgbW9udGg6IHRoaXMuX2Zvcm1hdE9wdGlvbnMubW9udGgsIGRheTogdGhpcy5fZm9ybWF0T3B0aW9ucy5kYXkgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXREYXRlT25seShkYXRlOiBEYXRlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkRGF0ZSA9IHRoaXMudmFsaWRhdGVEYXRlKGRhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsaWREYXRlLmdldEZ1bGxZZWFyKCksIHZhbGlkRGF0ZS5nZXRNb250aCgpLCB2YWxpZERhdGUuZ2V0RGF0ZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRlT25seUluTXMoZGF0ZTogRGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlT25seShkYXRlKS5nZXRUaW1lKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2VuZXJhdGVEYXRlUmFuZ2Uoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IERhdGVbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBzdGFydCA9IHRoaXMuZ2V0RGF0ZU9ubHkoc3RhcnQpO1xuICAgICAgICBlbmQgPSB0aGlzLmdldERhdGVPbmx5KGVuZCk7XG4gICAgICAgIHdoaWxlIChzdGFydC5nZXRUaW1lKCkgPCBlbmQuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBzdGFydCA9IHRoaXMuY2FsZW5kYXJNb2RlbC50aW1lZGVsdGEoc3RhcnQsICdkYXknLCAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN0YXJ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBzaW5nbGUgc2VsZWN0aW9uLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0U2luZ2xlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IHRoaXMuZ2V0RGF0ZU9ubHkodmFsdWUpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWREYXRlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNlbGVjdE11bHRpcGxlKHZhbHVlOiBEYXRlIHwgRGF0ZVtdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZXMgPSB2YWx1ZS5tYXAodiA9PiB0aGlzLmdldERhdGVPbmx5KHYpLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBjb25zdCBzZWxEYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcy5tYXAodiA9PiB0aGlzLmdldERhdGVPbmx5KHYpLmdldFRpbWUoKSk7XG5cbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShuZXdEYXRlcykgPT09IEpTT04uc3RyaW5naWZ5KHNlbERhdGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5uZXdEYXRlcywgLi4uc2VsRGF0ZXNdKSkubWFwKHYgPT4gbmV3IERhdGUodikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5ld1NlbGVjdGlvbiA9IFtdO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zaGlmdEtleSAmJiB0aGlzLmxhc3RTZWxlY3RlZERhdGUpIHtcblxuICAgICAgICAgICAgICAgIFt0aGlzLl9zdGFydERhdGUsIHRoaXMuX2VuZERhdGVdID0gdGhpcy5sYXN0U2VsZWN0ZWREYXRlLmdldFRpbWUoKSA8IHZhbHVlLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICA/IFt0aGlzLmxhc3RTZWxlY3RlZERhdGUsIHZhbHVlXVxuICAgICAgICAgICAgICAgICAgICA6IFt2YWx1ZSwgdGhpcy5sYXN0U2VsZWN0ZWREYXRlXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHVuc2VsZWN0ZWREYXRlcyA9IFt0aGlzLl9zdGFydERhdGUsIC4uLnRoaXMuZ2VuZXJhdGVEYXRlUmFuZ2UodGhpcy5fc3RhcnREYXRlLCB0aGlzLl9lbmREYXRlKV1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihkYXRlID0+ICF0aGlzLmlzRGF0ZURpc2FibGVkKGRhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNlbGVjdGVkRGF0ZXMuZXZlcnkoKGQ6IERhdGUpID0+IGQuZ2V0VGltZSgpICE9PSBkYXRlLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBhbGwgZGF0ZXMgZnJvbSBsYXN0IHNlbGVjdGVkIHRvIHNoaWZ0IGNsaWNrZWQgZGF0ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMuc29tZSgoZGF0ZTogRGF0ZSkgPT4gZGF0ZS5nZXRUaW1lKCkgPT09IHRoaXMubGFzdFNlbGVjdGVkRGF0ZS5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgICYmIHVuc2VsZWN0ZWREYXRlcy5sZW5ndGgpIHtcblxuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSB1bnNlbGVjdGVkRGF0ZXM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXNlY3QgYWxsIGRhdGVzIGZyb20gbGFzdCBjbGlja2VkIHRvIHNoaWZ0IGNsaWNrZWQgZGF0ZSAoZXhjbHVkaW5nKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKChkYXRlOiBEYXRlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXRUaW1lKCkgPCB0aGlzLl9zdGFydERhdGUuZ2V0VGltZSgpIHx8IGRhdGUuZ2V0VGltZSgpID4gdGhpcy5fZW5kRGF0ZS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2VsZWN0RGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnREYXRlID0gdGhpcy5fZW5kRGF0ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMuZXZlcnkoKGRhdGU6IERhdGUpID0+IGRhdGUuZ2V0VGltZSgpICE9PSB2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uLnB1c2godmFsdWUpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChkYXRlOiBEYXRlKSA9PiBkYXRlLmdldFRpbWUoKSAhPT0gdmFsdWUuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2VsZWN0RGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcy5jb25jYXQobmV3U2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZXNlbGVjdERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWREYXRlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKGQgPT4gIXRoaXMuaXNEYXRlRGlzYWJsZWQoZCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMuc29ydCgoYTogRGF0ZSwgYjogRGF0ZSkgPT4gYS52YWx1ZU9mKCkgLSBiLnZhbHVlT2YoKSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RSYW5nZSh2YWx1ZTogRGF0ZSB8IERhdGVbXSwgZXhjbHVkZURpc2FibGVkRGF0ZXMgPSBmYWxzZSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlLnNvcnQoKGE6IERhdGUsIGI6IERhdGUpID0+IGEudmFsdWVPZigpIC0gYi52YWx1ZU9mKCkpO1xuICAgICAgICAgICAgdGhpcy5fc3RhcnREYXRlID0gdGhpcy5nZXREYXRlT25seSh2YWx1ZVswXSk7XG4gICAgICAgICAgICB0aGlzLl9lbmREYXRlID0gdGhpcy5nZXREYXRlT25seSh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSk7XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNoaWZ0S2V5ICYmIHRoaXMubGFzdFNlbGVjdGVkRGF0ZSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkRGF0ZS5nZXRUaW1lKCkgPT09IHZhbHVlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxID8gW10gOiBbdmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJhbmdlU3RhcnRlZCA9ICEhdGhpcy5zZWxlY3RlZERhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gc2hvcnRlbnMgdGhlIHJhbmdlIHdoZW4gc2VsZWN0aW5nIGEgZGF0ZSBpbnNpZGUgb2YgaXRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZERhdGVzLnNvbWUoKGRhdGU6IERhdGUpID0+IGRhdGUuZ2V0VGltZSgpID09PSB2YWx1ZS5nZXRUaW1lKCkpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWREYXRlLmdldFRpbWUoKSA8IHZhbHVlLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9zdGFydERhdGUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9lbmREYXRlID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBleHRlbmRzIHRoZSByYW5nZSB3aGVuIHNlbGVjdGluZyBhIGRhdGUgb3V0c2lkZSBvZiBpdFxuICAgICAgICAgICAgICAgICAgICAvLyBhbGxvd3Mgc2VsZWN0aW9uIGZyb20gbGFzdCBkZXNlbGVjdGVkIHRvIGN1cnJlbnQgc2VsZWN0ZWQgZGF0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWREYXRlLmdldFRpbWUoKSA8IHZhbHVlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnREYXRlID0gdGhpcy5fc3RhcnREYXRlID8/IHRoaXMubGFzdFNlbGVjdGVkRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZERhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0RGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5kRGF0ZSA9IHRoaXMuX2VuZERhdGUgPz8gdGhpcy5sYXN0U2VsZWN0ZWREYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5yYW5nZVN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gW3ZhbHVlXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydERhdGUgPSB0aGlzLl9lbmREYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKCkgPT09IHZhbHVlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgW3RoaXMuX3N0YXJ0RGF0ZSwgdGhpcy5fZW5kRGF0ZV0gPSB0aGlzLmxhc3RTZWxlY3RlZERhdGUuZ2V0VGltZSgpIDwgdmFsdWUuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgID8gW3RoaXMubGFzdFNlbGVjdGVkRGF0ZSwgdmFsdWVdXG4gICAgICAgICAgICAgICAgICAgIDogW3ZhbHVlLCB0aGlzLmxhc3RTZWxlY3RlZERhdGVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZERhdGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zdGFydERhdGUgJiYgdGhpcy5fZW5kRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gW3RoaXMuX3N0YXJ0RGF0ZSwgLi4udGhpcy5nZW5lcmF0ZURhdGVSYW5nZSh0aGlzLl9zdGFydERhdGUsIHRoaXMuX2VuZERhdGUpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGNsdWRlRGlzYWJsZWREYXRlcykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzLmZpbHRlcihkID0+ICF0aGlzLmlzRGF0ZURpc2FibGVkKGQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIHNpbmdsZSBkZXNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc2VsZWN0U2luZ2xlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHZhbHVlIGFzIERhdGUpID09PSB0aGlzLmdldERhdGVPbmx5SW5Ncyh0aGlzLnNlbGVjdGVkRGF0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBtdWx0aXBsZSBkZXNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc2VsZWN0TXVsdGlwbGUodmFsdWU6IERhdGVbXSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGVzQ291bnQgPSB0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBkYXRlc0luTXNUb0Rlc2VsZWN0OiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQ8bnVtYmVyPihcbiAgICAgICAgICAgIHZhbHVlLm1hcCh2ID0+IHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHYpKSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc2VsZWN0ZWREYXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGRhdGVzSW5Nc1RvRGVzZWxlY3QuaGFzKHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHRoaXMuc2VsZWN0ZWREYXRlc1tpXSkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICE9PSBzZWxlY3RlZERhdGVzQ291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgcmFuZ2UgZGVzZWxlY3Rpb24uXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXNlbGVjdFJhbmdlKHZhbHVlOiBEYXRlW10pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIodiA9PiB2ICE9PSBudWxsKTtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlLnNvcnQoKGE6IERhdGUsIGI6IERhdGUpID0+IGEudmFsdWVPZigpIC0gYi52YWx1ZU9mKCkpO1xuICAgICAgICBjb25zdCB2YWx1ZVN0YXJ0ID0gdGhpcy5nZXREYXRlT25seUluTXModmFsdWVbMF0pO1xuICAgICAgICBjb25zdCB2YWx1ZUVuZCA9IHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMuc29ydCgoYTogRGF0ZSwgYjogRGF0ZSkgPT4gYS52YWx1ZU9mKCkgLSBiLnZhbHVlT2YoKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZXNTdGFydCA9IHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHRoaXMuc2VsZWN0ZWREYXRlc1swXSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZXNFbmQgPSB0aGlzLmdldERhdGVPbmx5SW5Ncyh0aGlzLnNlbGVjdGVkRGF0ZXNbdGhpcy5zZWxlY3RlZERhdGVzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICBpZiAoISh2YWx1ZUVuZCA8IHNlbGVjdGVkRGF0ZXNTdGFydCkgJiYgISh2YWx1ZVN0YXJ0ID4gc2VsZWN0ZWREYXRlc0VuZCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodmFsdWUpID8gdmFsdWUgOiBuZXcgRGF0ZSgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
707
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFZLFFBQVEsRUFBRSxjQUFjLEVBQWtFLFdBQVcsRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHakwsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFMUQsd0JBQXdCO0FBS3hCLE1BQU0sT0FBTyx3QkFBd0I7SUF3TWpDOzs7T0FHRztJQUNILElBQ1csZUFBZSxDQUFDLEtBQStCO1FBQ3RELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxlQUFlO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdC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QkFEckIsTUFBTTtnQkFlQSxpQkFBaUI7c0JBRHZCLE1BQU07Z0JBOEpJLGVBQWU7c0JBRHpCLEtBQUs7Z0JBcUJLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBbUJLLE1BQU07c0JBRGhCLEtBQUs7Z0JBK0JLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBbUJLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBcUJLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBaUNLLEtBQUs7c0JBRGYsS0FBSztnQkErQkssUUFBUTtzQkFEbEIsS0FBSztnQkF5QkssYUFBYTtzQkFEdkIsS0FBSztnQkF5QkssWUFBWTtzQkFEdEIsS0FBSztnQkFzQ0MsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIERpcmVjdGl2ZSwgSW5qZWN0LCBMT0NBTEVfSUQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV0VFS0RBWVMsIENhbGVuZGFyLCBpc0RhdGVJblJhbmdlcywgSUZvcm1hdHRpbmdPcHRpb25zLCBJRm9ybWF0dGluZ1ZpZXdzLCBJVmlld0RhdGVDaGFuZ2VFdmVudEFyZ3MsIFNjcm9sbE1vbnRoLCBJZ3hDYWxlbmRhclZpZXcsIENhbGVuZGFyU2VsZWN0aW9uIH0gZnJvbSAnLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGVSYW5nZURlc2NyaXB0b3IgfSBmcm9tICcuLi9jb3JlL2RhdGVzJztcbmltcG9ydCB7IG5vb3AsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRGF0ZSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vY2FsZW5kYXItcmVzb3VyY2VzJztcbmltcG9ydCB7IERhdGVUaW1lVXRpbCB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3V0aWwvZGF0ZS10aW1lLnV0aWwnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlRmlyc3REYXlPZldlZWsgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4Q2FsZW5kYXJCYXNlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDYWxlbmRhckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIG91dHNpZGUgZGF0ZXMgKGRhdGVzIHRoYXQgYXJlIG91dCBvZiB0aGUgY3VycmVudCBtb250aCkgd2lsbCBiZSBoaWRkZW4uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhbGVuZGFyIFtoaWRlT3V0c2lkZURheXNdID0gXCJ0cnVlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWRlT3V0c2lkZURheXMgPSB0aGlzLmNhbGVuZGFyLmhpZGVPdXRzaWRlRGF5cztcbiAgICAgKiBgYGBcbiAgICAgKi9cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVPdXRzaWRlRGF5cyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIGRhdGUgaXMgc2VsZWN0ZWQuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlIHRoZSBgc2VsZWN0ZWREYXRlc2AgcHJvcGVydHkuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgRGF0ZVtdPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgbW9udGggaW4gdmlldyBpcyBjaGFuZ2VkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhbGVuZGFyICh2aWV3RGF0ZUNoYW5nZWQpPVwidmlld0RhdGVDaGFuZ2VkKCRldmVudClcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIHZpZXdEYXRlQ2hhbmdlZChldmVudDogSVZpZXdEYXRlQ2hhbmdlRXZlbnRBcmdzKSB7XG4gICAgICogIGxldCB2aWV3RGF0ZSA9IGV2ZW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZpZXdEYXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVZpZXdEYXRlQ2hhbmdlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYWN0aXZlIHZpZXcgaXMgY2hhbmdlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciAoYWN0aXZlVmlld0NoYW5nZWQpPVwiYWN0aXZlVmlld0NoYW5nZWQoJGV2ZW50KVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgYWN0aXZlVmlld0NoYW5nZWQoZXZlbnQ6IENhbGVuZGFyVmlldykge1xuICAgICAqICBsZXQgYWN0aXZlVmlldyA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWN0aXZlVmlld0NoYW5nZWQgID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJhbmdlU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBtb250aFNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbE1vbnRoLk5PTkU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbE1vbnRoJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHN0b3BNb250aFNjcm9sbCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGFydE1vbnRoU2Nyb2xsJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkRGF0ZXM7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNoaWZ0S2V5ID0gZmFsc2U7XG5cbiAgICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBsYXN0U2VsZWN0ZWREYXRlOiBEYXRlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXR0ZXJXZWVrZGF5O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXR0ZXJEYXk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGZvcm1hdHRlck1vbnRoO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXR0ZXJZZWFyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXR0ZXJNb250aGRheTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY2FsZW5kYXJNb2RlbDogQ2FsZW5kYXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfb25DaGFuZ2VDYWxsYmFjazogKF86IERhdGUpID0+IHZvaWQgPSBub29wO1xuXG4gICAgLyoqXG4gICAgICAqIEBoaWRkZW5cbiAgICAgICovXG4gICAgcHJvdGVjdGVkIF9kZXNlbGVjdERhdGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RlZERhdGVzV2l0aG91dEZvY3VzO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2xvY2FsZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3dlZWtTdGFydDogV0VFS0RBWVMgfCBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmlld0RhdGU6IERhdGU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc3RhcnREYXRlOiBEYXRlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2VuZERhdGU6IERhdGU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWREYXRlczogRGF0ZVJhbmdlRGVzY3JpcHRvcltdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3NwZWNpYWxEYXRlczogRGF0ZVJhbmdlRGVzY3JpcHRvcltdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbjogQ2FsZW5kYXJTZWxlY3Rpb24gfCBzdHJpbmcgPSBDYWxlbmRhclNlbGVjdGlvbi5TSU5HTEU7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5DYWxlbmRhclJlc1N0cmluZ3M7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0T3B0aW9uczogSUZvcm1hdHRpbmdPcHRpb25zID0ge1xuICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgIHdlZWtkYXk6ICdzaG9ydCcsXG4gICAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0Vmlld3M6IElGb3JtYXR0aW5nVmlld3MgPSB7XG4gICAgICAgIGRheTogZmFsc2UsXG4gICAgICAgIG1vbnRoOiB0cnVlLFxuICAgICAgICB5ZWFyOiBmYWxzZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJQ2FsZW5kYXJSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElDYWxlbmRhclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIGlmICghdGhpcy5fcmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLkNhbGVuZGFyUmVzU3RyaW5ncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YXJ0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgKiBDYW4gcmV0dXJuIGEgbnVtZXJpYyBvciBhbiBlbnVtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3ZWVrIGRheS5cbiAgICAgKiBJZiBub3Qgc2V0LCBkZWZhdWx0cyB0byB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIGZvciB0aGUgYXBwbGljYXRpb24gbG9jYWxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB3ZWVrU3RhcnQoKTogV0VFS0RBWVMgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxlbmRhck1vZGVsLmZpcnN0V2Vla0RheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGFydCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICogQ2FuIGJlIGFzc2lnbmVkIHRvIGEgbnVtZXJpYyB2YWx1ZSBvciB0byBgV0VFS0RBWVNgIGVudW0gdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIHNldCB3ZWVrU3RhcnQodmFsdWU6IFdFRUtEQVlTIHwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3dlZWtTdGFydCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNhbGVuZGFyTW9kZWwuZmlyc3RXZWVrRGF5ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGxvY2FsZWAgb2YgdGhlIGNhbGVuZGFyLlxuICAgICAqIElmIG5vdCBzZXQsIGRlZmF1bHRzIHRvIGFwcGxpY2F0aW9uJ3MgbG9jYWxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgY2FsZW5kYXIuXG4gICAgICogRXhwZWN0cyBhIHZhbGlkIEJDUCA0NyBsYW5ndWFnZSB0YWcuXG4gICAgICovXG4gICAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcblxuICAgICAgICAvLyBpZiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBCQ1AgNDcgdGFnLCBzZXQgaXQgYmFjayB0byBfbG9jYWxlSWRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldExvY2FsZUZpcnN0RGF5T2ZXZWVrKHRoaXMuX2xvY2FsZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IHRoaXMuX2xvY2FsZUlkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hhbmdpbmcgbG9jYWxlIHJ1bnRpbWUgbmVlZHMgdG8gdXBkYXRlIHRoZSBgd2Vla1N0YXJ0YCB0b28sIGlmIGB3ZWVrU3RhcnRgIGlzIG5vdCBleHBsaWNpdGx5IHNldFxuICAgICAgICBpZiAodGhpcy5fd2Vla1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJNb2RlbC5maXJzdFdlZWtEYXkgPSBnZXRMb2NhbGVGaXJzdERheU9mV2Vlayh0aGlzLl9sb2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0Rm9ybWF0dGVycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRhdGUgZm9ybWF0IG9wdGlvbnMgb2YgdGhlIGRheXMgdmlldy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZm9ybWF0T3B0aW9ucygpOiBJRm9ybWF0dGluZ09wdGlvbnMge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0T3B0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkYXRlIGZvcm1hdCBvcHRpb25zIG9mIHRoZSBkYXlzIHZpZXcuXG4gICAgICogRGVmYXVsdCBpcyB7IGRheTogJ251bWVyaWMnLCBtb250aDogJ3Nob3J0Jywgd2Vla2RheTogJ3Nob3J0JywgeWVhcjogJ251bWVyaWMnIH1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZvcm1hdE9wdGlvbnMoZm9ybWF0T3B0aW9uczogSUZvcm1hdHRpbmdPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHRoaXMuX2Zvcm1hdE9wdGlvbnMsIGZvcm1hdE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmluaXRGb3JtYXR0ZXJzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBgZGF5YCwgYG1vbnRoYCBhbmQgYHllYXJgIHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAqIGFjY29yZGluZyB0byB0aGUgbG9jYWxlIGFuZCBmb3JtYXRPcHRpb25zLCBpZiBhbnkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGZvcm1hdFZpZXdzKCk6IElGb3JtYXR0aW5nVmlld3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0Vmlld3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBgZGF5YCwgYG1vbnRoYCBhbmQgYHllYXJgIHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAqIGFjY29yZGluZyB0byB0aGUgbG9jYWxlIGFuZCBmb3JtYXRPcHRpb25zLCBpZiBhbnkuXG4gICAgICovXG4gICAgcHVibGljIHNldCBmb3JtYXRWaWV3cyhmb3JtYXRWaWV3czogSUZvcm1hdHRpbmdWaWV3cykge1xuICAgICAgICB0aGlzLl9mb3JtYXRWaWV3cyA9IE9iamVjdC5hc3NpZ24odGhpcy5fZm9ybWF0Vmlld3MsIGZvcm1hdFZpZXdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEdldHMgdGhlIHNlbGVjdGlvbiB0eXBlLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwic2luZ2xlXCJgLlxuICAgICAqIENoYW5naW5nIHRoZSB0eXBlIG9mIHNlbGVjdGlvbiByZXNldHMgdGhlIGN1cnJlbnRseVxuICAgICAqIHNlbGVjdGVkIHZhbHVlcyBpZiBhbnkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGlvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNlbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJTZWxlY3Rpb24uU0lOR0xFOlxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENhbGVuZGFyU2VsZWN0aW9uLk1VTFRJOlxuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5SQU5HRTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlbGVjdGlvbiB2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZShzKS5cbiAgICAgKlxuICAgICAqIFdoZW4gc2VsZWN0aW9uIGlzIHNldCB0byBgc2luZ2xlYCwgaXQgcmV0dXJuc1xuICAgICAqIGEgc2luZ2xlIGBEYXRlYCBvYmplY3QuXG4gICAgICogT3RoZXJ3aXNlIGl0IGlzIGFuIGFycmF5IG9mIGBEYXRlYCBvYmplY3RzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBEYXRlIHwgRGF0ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBkYXRlKHMpLlxuICAgICAqXG4gICAgICogV2hlbiBzZWxlY3Rpb24gaXMgc2V0IHRvIGBzaW5nbGVgLCBpdCBhY2NlcHRzXG4gICAgICogYSBzaW5nbGUgYERhdGVgIG9iamVjdC5cbiAgICAgKiBPdGhlcndpc2UgaXQgaXMgYW4gYXJyYXkgb2YgYERhdGVgIG9iamVjdHMuXG4gICAgICovXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZSB8IERhdGVbXSkge1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICEhdmFsdWUgJiYgKHZhbHVlIGFzIERhdGVbXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXNXaXRob3V0Rm9jdXMgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZERhdGVzV2l0aG91dEZvY3VzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZURhdGUgPSB2YWx1ZVswXSA/IE1hdGgubWluLmFwcGx5KG51bGwsIHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZ2V0RGF0ZU9ubHkobmV3IERhdGUodmFsdWVEYXRlKSkuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdERhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXNXaXRob3V0Rm9jdXMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBkYXRlIHRoYXQgaXMgcHJlc2VudGVkLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgdGhlIGN1cnJlbnQgZGF0ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdmlld0RhdGUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aWV3RGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkYXRlIHRoYXQgd2lsbCBiZSBwcmVzZW50ZWQgaW4gdGhlIGRlZmF1bHQgdmlldyB3aGVuIHRoZSBjb21wb25lbnQgcmVuZGVycy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHZpZXdEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsaWREYXRlID0gdGhpcy52YWxpZGF0ZURhdGUodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5fdmlld0RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlc1dpdGhvdXRGb2N1cyA9IHZhbGlkRGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5nZXREYXRlT25seSh2YWxpZERhdGUpLnNldERhdGUoMSk7XG4gICAgICAgIHRoaXMuX3ZpZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZGlzYWJsZWQgZGF0ZXMgZGVzY3JpcHRvcnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRGF0ZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzYWJsZWQgZGF0ZXMnIGRlc2NyaXB0b3JzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlDYWxlbmRhclwiKVxuICAgICAqIHB1YmxpYyBjYWxlbmRhcjogSWd4Q2FsZW5kYXJDb21wb25lbnQ7XG4gICAgICogbmdPbkluaXQoKXtcbiAgICAgKiAgICB0aGlzLmNhbGVuZGFyLmRpc2FibGVkRGF0ZXMgPSBbXG4gICAgICogICAgIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLkJldHdlZW4sIGRhdGVSYW5nZTogW25ldyBEYXRlKFwiMjAyMC0xLTFcIiksIG5ldyBEYXRlKFwiMjAyMC0xLTE1XCIpXX0sXG4gICAgICogICAgIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLldlZWtlbmRzfV07XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkRGF0ZXMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzcGVjaWFsIGRhdGVzIGRlc2NyaXB0b3JzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzcGVjaWFsRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxEYXRlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzcGVjaWFsIGRhdGVzJyBkZXNjcmlwdG9ycy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2FsZW5kYXJcIilcbiAgICAgKiBwdWJsaWMgY2FsZW5kYXI6IElneENhbGVuZGFyQ29tcG9uZW50O1xuICAgICAqIG5nT25Jbml0KCl7XG4gICAgICogICAgdGhpcy5jYWxlbmRhci5zcGVjaWFsRGF0ZXMgPSBbXG4gICAgICogICAgIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLkJldHdlZW4sIGRhdGVSYW5nZTogW25ldyBEYXRlKFwiMjAyMC0xLTFcIiksIG5ldyBEYXRlKFwiMjAyMC0xLTE1XCIpXX0sXG4gICAgICogICAgIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLldlZWtlbmRzfV07XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc3BlY2lhbERhdGVzKHZhbHVlOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10pIHtcbiAgICAgICAgdGhpcy5fc3BlY2lhbERhdGVzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLCBASW5qZWN0KExPQ0FMRV9JRCkgcHJvdGVjdGVkIF9sb2NhbGVJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJNb2RlbCA9IG5ldyBDYWxlbmRhcigpO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IF9sb2NhbGVJZDtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMudmlld0RhdGUgPyB0aGlzLnZpZXdEYXRlIDogbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5pbml0Rm9ybWF0dGVycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE11bHRpL1JhbmdlIHNlbGVjdGlvbiB3aXRoIHNoaWZ0IGtleVxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Qb2ludGVyZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnNoaWZ0S2V5ID0gZXZlbnQuYnV0dG9uID09PSAwICYmIGV2ZW50LnNoaWZ0S2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGRlc2VsZWN0aW9uIG9mIGRhdGUvZGF0ZXMsIHdoZW4gc2VsZWN0aW9uIGlzIG11bHRpXG4gICAgICogVXN1YWxseSBwZXJmb3JtZWQgYnkgdGhlIHNlbGVjdE11bHRpcGxlIG1ldGhvZCwgYnV0IGxlYWRzIHRvIGJ1ZyB3aGVuIG11bHRpcGxlIG1vbnRocyBhcmUgaW4gdmlld1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdE11bHRpcGxlSW5Nb250aCh2YWx1ZTogRGF0ZSkge1xuICAgICAgICAvLyBkZXNlbGVjdCBtdWx0aXBsZSBkYXRlcyBmcm9tIGxhc3QgY2xpY2tlZCB0byBzaGlmdCBjbGlja2VkIGRhdGUgKGV4Y2x1ZGluZylcbiAgICAgICAgaWYgKHRoaXMuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIGxldCBzdGFydDogRGF0ZTtcbiAgICAgICAgICAgIGxldCBlbmQ6IERhdGU7XG5cbiAgICAgICAgICAgIFtzdGFydCwgZW5kXSA9IHRoaXMubGFzdFNlbGVjdGVkRGF0ZS5nZXRUaW1lKCkgPCB2YWx1ZS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICA/IFt0aGlzLmxhc3RTZWxlY3RlZERhdGUsIHZhbHVlXVxuICAgICAgICAgICAgICAgIDogW3ZhbHVlLCB0aGlzLmxhc3RTZWxlY3RlZERhdGVdO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChkYXRlOiBEYXRlKSA9PiBkYXRlLmdldFRpbWUoKSA8IHN0YXJ0LmdldFRpbWUoKSB8fCBkYXRlLmdldFRpbWUoKSA+IGVuZC5nZXRUaW1lKClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcy5wdXNoKHZhbHVlKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZGVzZWxlY3QgYSBzaW5nbGUgZGF0ZVxuICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRlT25seSA9IHRoaXMuZ2V0RGF0ZU9ubHkodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZGF0ZTogRGF0ZSkgPT4gZGF0ZS5nZXRUaW1lKCkgIT09IHZhbHVlRGF0ZU9ubHkuZ2V0VGltZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodjogRGF0ZSkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IERhdGVbXSkge1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUodmFsdWUgYXMgRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgYSBkYXRlIGlzIGRpc2FibGVkLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0RhdGVEaXNhYmxlZChkYXRlOiBEYXRlKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc0RhdGVJblJhbmdlcyhkYXRlLCB0aGlzLmRpc2FibGVkRGF0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgZGF0ZShzKSAoYmFzZWQgb24gdGhlIHNlbGVjdGlvbiB0eXBlKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0RGF0ZSh2YWx1ZTogRGF0ZSB8IERhdGVbXSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5TSU5HTEU6XG4gICAgICAgICAgICAgICAgaWYgKGlzRGF0ZSh2YWx1ZSkgJiYgIXRoaXMuaXNEYXRlRGlzYWJsZWQodmFsdWUgYXMgRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTaW5nbGUodmFsdWUgYXMgRGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5NVUxUSTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE11bHRpcGxlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0U6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSYW5nZSh2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdHMgZGF0ZShzKSAoYmFzZWQgb24gdGhlIHNlbGVjdGlvbiB0eXBlKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3REYXRlKHZhbHVlPzogRGF0ZSB8IERhdGVbXSkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWREYXRlcyB8fCB0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3Rpb24gPT09IENhbGVuZGFyU2VsZWN0aW9uLlNJTkdMRSA/IG51bGwgOiBbXTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWREYXRlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIENhbGVuZGFyU2VsZWN0aW9uLlNJTkdMRTpcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0U2luZ2xlKHZhbHVlIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5NVUxUSTpcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0TXVsdGlwbGUodmFsdWUgYXMgRGF0ZVtdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0U6XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFJhbmdlKHZhbHVlIGFzIERhdGVbXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdERhdGVGcm9tQ2xpZW50KHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJTZWxlY3Rpb24uU0lOR0xFOlxuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5NVUxUSTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclNlbGVjdGlvbi5SQU5HRTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJhbmdlKHZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaW5pdEZvcm1hdHRlcnMoKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyRGF5ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5fbG9jYWxlLCB7IGRheTogdGhpcy5fZm9ybWF0T3B0aW9ucy5kYXkgfSk7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyV2Vla2RheSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuX2xvY2FsZSwgeyB3ZWVrZGF5OiB0aGlzLl9mb3JtYXRPcHRpb25zLndlZWtkYXkgfSk7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyTW9udGggPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLl9sb2NhbGUsIHsgbW9udGg6IHRoaXMuX2Zvcm1hdE9wdGlvbnMubW9udGggfSk7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyWWVhciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuX2xvY2FsZSwgeyB5ZWFyOiB0aGlzLl9mb3JtYXRPcHRpb25zLnllYXIgfSk7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyTW9udGhkYXkgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLl9sb2NhbGUsIHsgbW9udGg6IHRoaXMuX2Zvcm1hdE9wdGlvbnMubW9udGgsIGRheTogdGhpcy5fZm9ybWF0T3B0aW9ucy5kYXkgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXREYXRlT25seShkYXRlOiBEYXRlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkRGF0ZSA9IHRoaXMudmFsaWRhdGVEYXRlKGRhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsaWREYXRlLmdldEZ1bGxZZWFyKCksIHZhbGlkRGF0ZS5nZXRNb250aCgpLCB2YWxpZERhdGUuZ2V0RGF0ZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRlT25seUluTXMoZGF0ZTogRGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlT25seShkYXRlKS5nZXRUaW1lKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2VuZXJhdGVEYXRlUmFuZ2Uoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IERhdGVbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBzdGFydCA9IHRoaXMuZ2V0RGF0ZU9ubHkoc3RhcnQpO1xuICAgICAgICBlbmQgPSB0aGlzLmdldERhdGVPbmx5KGVuZCk7XG4gICAgICAgIHdoaWxlIChzdGFydC5nZXRUaW1lKCkgPCBlbmQuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBzdGFydCA9IHRoaXMuY2FsZW5kYXJNb2RlbC50aW1lZGVsdGEoc3RhcnQsICdkYXknLCAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN0YXJ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBzaW5nbGUgc2VsZWN0aW9uLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0U2luZ2xlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IHRoaXMuZ2V0RGF0ZU9ubHkodmFsdWUpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWREYXRlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNlbGVjdE11bHRpcGxlKHZhbHVlOiBEYXRlIHwgRGF0ZVtdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZXMgPSB2YWx1ZS5tYXAodiA9PiB0aGlzLmdldERhdGVPbmx5KHYpLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBjb25zdCBzZWxEYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcy5tYXAodiA9PiB0aGlzLmdldERhdGVPbmx5KHYpLmdldFRpbWUoKSk7XG5cbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShuZXdEYXRlcykgPT09IEpTT04uc3RyaW5naWZ5KHNlbERhdGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5uZXdEYXRlcywgLi4uc2VsRGF0ZXNdKSkubWFwKHYgPT4gbmV3IERhdGUodikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5ld1NlbGVjdGlvbiA9IFtdO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zaGlmdEtleSAmJiB0aGlzLmxhc3RTZWxlY3RlZERhdGUpIHtcblxuICAgICAgICAgICAgICAgIFt0aGlzLl9zdGFydERhdGUsIHRoaXMuX2VuZERhdGVdID0gdGhpcy5sYXN0U2VsZWN0ZWREYXRlLmdldFRpbWUoKSA8IHZhbHVlLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICA/IFt0aGlzLmxhc3RTZWxlY3RlZERhdGUsIHZhbHVlXVxuICAgICAgICAgICAgICAgICAgICA6IFt2YWx1ZSwgdGhpcy5sYXN0U2VsZWN0ZWREYXRlXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHVuc2VsZWN0ZWREYXRlcyA9IFt0aGlzLl9zdGFydERhdGUsIC4uLnRoaXMuZ2VuZXJhdGVEYXRlUmFuZ2UodGhpcy5fc3RhcnREYXRlLCB0aGlzLl9lbmREYXRlKV1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihkYXRlID0+ICF0aGlzLmlzRGF0ZURpc2FibGVkKGRhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNlbGVjdGVkRGF0ZXMuZXZlcnkoKGQ6IERhdGUpID0+IGQuZ2V0VGltZSgpICE9PSBkYXRlLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBhbGwgZGF0ZXMgZnJvbSBsYXN0IHNlbGVjdGVkIHRvIHNoaWZ0IGNsaWNrZWQgZGF0ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMuc29tZSgoZGF0ZTogRGF0ZSkgPT4gZGF0ZS5nZXRUaW1lKCkgPT09IHRoaXMubGFzdFNlbGVjdGVkRGF0ZS5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgICYmIHVuc2VsZWN0ZWREYXRlcy5sZW5ndGgpIHtcblxuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSB1bnNlbGVjdGVkRGF0ZXM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXNlY3QgYWxsIGRhdGVzIGZyb20gbGFzdCBjbGlja2VkIHRvIHNoaWZ0IGNsaWNrZWQgZGF0ZSAoZXhjbHVkaW5nKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKChkYXRlOiBEYXRlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXRUaW1lKCkgPCB0aGlzLl9zdGFydERhdGUuZ2V0VGltZSgpIHx8IGRhdGUuZ2V0VGltZSgpID4gdGhpcy5fZW5kRGF0ZS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2VsZWN0RGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnREYXRlID0gdGhpcy5fZW5kRGF0ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMuZXZlcnkoKGRhdGU6IERhdGUpID0+IGRhdGUuZ2V0VGltZSgpICE9PSB2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uLnB1c2godmFsdWUpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChkYXRlOiBEYXRlKSA9PiBkYXRlLmdldFRpbWUoKSAhPT0gdmFsdWUuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2VsZWN0RGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcy5jb25jYXQobmV3U2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZXNlbGVjdERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWREYXRlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKGQgPT4gIXRoaXMuaXNEYXRlRGlzYWJsZWQoZCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMuc29ydCgoYTogRGF0ZSwgYjogRGF0ZSkgPT4gYS52YWx1ZU9mKCkgLSBiLnZhbHVlT2YoKSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RSYW5nZSh2YWx1ZTogRGF0ZSB8IERhdGVbXSwgZXhjbHVkZURpc2FibGVkRGF0ZXMgPSBmYWxzZSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlLnNvcnQoKGE6IERhdGUsIGI6IERhdGUpID0+IGEudmFsdWVPZigpIC0gYi52YWx1ZU9mKCkpO1xuICAgICAgICAgICAgdGhpcy5fc3RhcnREYXRlID0gdGhpcy5nZXREYXRlT25seSh2YWx1ZVswXSk7XG4gICAgICAgICAgICB0aGlzLl9lbmREYXRlID0gdGhpcy5nZXREYXRlT25seSh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSk7XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNoaWZ0S2V5ICYmIHRoaXMubGFzdFNlbGVjdGVkRGF0ZSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkRGF0ZS5nZXRUaW1lKCkgPT09IHZhbHVlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxID8gW10gOiBbdmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJhbmdlU3RhcnRlZCA9ICEhdGhpcy5zZWxlY3RlZERhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gc2hvcnRlbnMgdGhlIHJhbmdlIHdoZW4gc2VsZWN0aW5nIGEgZGF0ZSBpbnNpZGUgb2YgaXRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZERhdGVzLnNvbWUoKGRhdGU6IERhdGUpID0+IGRhdGUuZ2V0VGltZSgpID09PSB2YWx1ZS5nZXRUaW1lKCkpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWREYXRlLmdldFRpbWUoKSA8IHZhbHVlLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9zdGFydERhdGUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9lbmREYXRlID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBleHRlbmRzIHRoZSByYW5nZSB3aGVuIHNlbGVjdGluZyBhIGRhdGUgb3V0c2lkZSBvZiBpdFxuICAgICAgICAgICAgICAgICAgICAvLyBhbGxvd3Mgc2VsZWN0aW9uIGZyb20gbGFzdCBkZXNlbGVjdGVkIHRvIGN1cnJlbnQgc2VsZWN0ZWQgZGF0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWREYXRlLmdldFRpbWUoKSA8IHZhbHVlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnREYXRlID0gdGhpcy5fc3RhcnREYXRlID8/IHRoaXMubGFzdFNlbGVjdGVkRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZERhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0RGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5kRGF0ZSA9IHRoaXMuX2VuZERhdGUgPz8gdGhpcy5sYXN0U2VsZWN0ZWREYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5yYW5nZVN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gW3ZhbHVlXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydERhdGUgPSB0aGlzLl9lbmREYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKCkgPT09IHZhbHVlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgW3RoaXMuX3N0YXJ0RGF0ZSwgdGhpcy5fZW5kRGF0ZV0gPSB0aGlzLmxhc3RTZWxlY3RlZERhdGUuZ2V0VGltZSgpIDwgdmFsdWUuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgID8gW3RoaXMubGFzdFNlbGVjdGVkRGF0ZSwgdmFsdWVdXG4gICAgICAgICAgICAgICAgICAgIDogW3ZhbHVlLCB0aGlzLmxhc3RTZWxlY3RlZERhdGVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZERhdGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zdGFydERhdGUgJiYgdGhpcy5fZW5kRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gW3RoaXMuX3N0YXJ0RGF0ZSwgLi4udGhpcy5nZW5lcmF0ZURhdGVSYW5nZSh0aGlzLl9zdGFydERhdGUsIHRoaXMuX2VuZERhdGUpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGNsdWRlRGlzYWJsZWREYXRlcykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzLmZpbHRlcihkID0+ICF0aGlzLmlzRGF0ZURpc2FibGVkKGQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIHNpbmdsZSBkZXNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc2VsZWN0U2luZ2xlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHZhbHVlIGFzIERhdGUpID09PSB0aGlzLmdldERhdGVPbmx5SW5Ncyh0aGlzLnNlbGVjdGVkRGF0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBtdWx0aXBsZSBkZXNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc2VsZWN0TXVsdGlwbGUodmFsdWU6IERhdGVbXSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGVzQ291bnQgPSB0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBkYXRlc0luTXNUb0Rlc2VsZWN0OiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQ8bnVtYmVyPihcbiAgICAgICAgICAgIHZhbHVlLm1hcCh2ID0+IHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHYpKSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc2VsZWN0ZWREYXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGRhdGVzSW5Nc1RvRGVzZWxlY3QuaGFzKHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHRoaXMuc2VsZWN0ZWREYXRlc1tpXSkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICE9PSBzZWxlY3RlZERhdGVzQ291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgcmFuZ2UgZGVzZWxlY3Rpb24uXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXNlbGVjdFJhbmdlKHZhbHVlOiBEYXRlW10pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIodiA9PiB2ICE9PSBudWxsKTtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlLnNvcnQoKGE6IERhdGUsIGI6IERhdGUpID0+IGEudmFsdWVPZigpIC0gYi52YWx1ZU9mKCkpO1xuICAgICAgICBjb25zdCB2YWx1ZVN0YXJ0ID0gdGhpcy5nZXREYXRlT25seUluTXModmFsdWVbMF0pO1xuICAgICAgICBjb25zdCB2YWx1ZUVuZCA9IHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMuc29ydCgoYTogRGF0ZSwgYjogRGF0ZSkgPT4gYS52YWx1ZU9mKCkgLSBiLnZhbHVlT2YoKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZXNTdGFydCA9IHRoaXMuZ2V0RGF0ZU9ubHlJbk1zKHRoaXMuc2VsZWN0ZWREYXRlc1swXSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZXNFbmQgPSB0aGlzLmdldERhdGVPbmx5SW5Ncyh0aGlzLnNlbGVjdGVkRGF0ZXNbdGhpcy5zZWxlY3RlZERhdGVzLmxlbmd0aCAtIDFdKTtcblxuICAgICAgICBpZiAoISh2YWx1ZUVuZCA8IHNlbGVjdGVkRGF0ZXNTdGFydCkgJiYgISh2YWx1ZVN0YXJ0ID4gc2VsZWN0ZWREYXRlc0VuZCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodmFsdWUpID8gdmFsdWUgOiBuZXcgRGF0ZSgpO1xuICAgIH1cbn1cbiJdfQ==
|