@rivet-health/design-system 40.44.4 → 41.0.0
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/fesm2022/rivet-health-design-system.mjs +23103 -18810
- package/fesm2022/rivet-health-design-system.mjs.map +1 -1
- package/package.json +8 -9
- package/types/rivet-health-design-system.d.ts +6566 -0
- package/esm2022/lib/accessibility/sr-only/sr-only.component.mjs +0 -18
- package/esm2022/lib/download/download.service.mjs +0 -47
- package/esm2022/lib/format/pipes/common.mjs +0 -24
- package/esm2022/lib/format/pipes/date.pipe.mjs +0 -20
- package/esm2022/lib/format/pipes/days.pipe.mjs +0 -20
- package/esm2022/lib/format/pipes/dollars.pipe.mjs +0 -19
- package/esm2022/lib/format/pipes/number.pipe.mjs +0 -19
- package/esm2022/lib/format/pipes/percentage.pipe.mjs +0 -19
- package/esm2022/lib/format/pipes/sentence-case.pipe.mjs +0 -61
- package/esm2022/lib/format/pipes/small-currency.pipe.mjs +0 -24
- package/esm2022/lib/format/pipes/small-number.pipe.mjs +0 -29
- package/esm2022/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +0 -62
- package/esm2022/lib/format/truncate/truncate.component.mjs +0 -51
- package/esm2022/lib/icon/dom-cache.mjs +0 -32
- package/esm2022/lib/icon/icon.component.mjs +0 -86
- package/esm2022/lib/icon/icons.mjs +0 -271
- package/esm2022/lib/input/alphabetic-field/alphabetic-field.component.mjs +0 -42
- package/esm2022/lib/input/auto-focus/auto-focus.directive.mjs +0 -48
- package/esm2022/lib/input/button/button.component.mjs +0 -139
- package/esm2022/lib/input/button-group/button-group.component.mjs +0 -39
- package/esm2022/lib/input/calendar/calendar.component.mjs +0 -318
- package/esm2022/lib/input/card-checkbox/card-checkbox.component.mjs +0 -13
- package/esm2022/lib/input/checkbox/checkbox.component.mjs +0 -84
- package/esm2022/lib/input/currency-field/currency-field.component.mjs +0 -26
- package/esm2022/lib/input/date/date.component.mjs +0 -279
- package/esm2022/lib/input/date-range/date-range.component.mjs +0 -478
- package/esm2022/lib/input/filter-chip/filter-chip.component.mjs +0 -47
- package/esm2022/lib/input/filter-dropdown/filter-dropdown.component.mjs +0 -89
- package/esm2022/lib/input/input-label/input-label.component.mjs +0 -38
- package/esm2022/lib/input/mentions-input/mentions-input.component.mjs +0 -745
- package/esm2022/lib/input/number-field/number-field.component.mjs +0 -125
- package/esm2022/lib/input/percentage-field/percentage-field.component.mjs +0 -20
- package/esm2022/lib/input/phone-field/phone-field.component.mjs +0 -74
- package/esm2022/lib/input/radio/radio.component.mjs +0 -58
- package/esm2022/lib/input/search/search.component.mjs +0 -26
- package/esm2022/lib/input/search-select/search-select.component.mjs +0 -189
- package/esm2022/lib/input/select/select/select.component.mjs +0 -179
- package/esm2022/lib/input/select/select-node/select-node.component.mjs +0 -60
- package/esm2022/lib/input/select/state.mjs +0 -882
- package/esm2022/lib/input/simple-select/option-group.pipe.mjs +0 -19
- package/esm2022/lib/input/simple-select/simple-select.component.mjs +0 -178
- package/esm2022/lib/input/switch-checkbox/switch-checkbox.component.mjs +0 -33
- package/esm2022/lib/input/text-field/text-field.component.mjs +0 -115
- package/esm2022/lib/input/textarea-field/textarea-field.component.mjs +0 -21
- package/esm2022/lib/input/validation-message/validation-message.component.mjs +0 -17
- package/esm2022/lib/layout/card/card-actions.component.mjs +0 -72
- package/esm2022/lib/layout/card/card-content.component.mjs +0 -64
- package/esm2022/lib/layout/card/card-header.component.mjs +0 -201
- package/esm2022/lib/layout/card/card-link.component.mjs +0 -115
- package/esm2022/lib/layout/card/card-media.component.mjs +0 -70
- package/esm2022/lib/layout/card/card.component.mjs +0 -306
- package/esm2022/lib/layout/setting-row/setting-row.component.mjs +0 -111
- package/esm2022/lib/load/loading/loading.component.mjs +0 -43
- package/esm2022/lib/load/loading-cover/loading-cover.component.mjs +0 -25
- package/esm2022/lib/navigation/editable-heading/editable-heading.component.mjs +0 -243
- package/esm2022/lib/navigation/link/link.component.mjs +0 -48
- package/esm2022/lib/navigation/page-header/page-header.component.mjs +0 -68
- package/esm2022/lib/navigation/simple-tabs/simple-tab/simple-tab.component.mjs +0 -43
- package/esm2022/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.mjs +0 -11
- package/esm2022/lib/navigation/tabs/tab/tab.component.mjs +0 -16
- package/esm2022/lib/navigation/tabs/tabs/tabs.component.mjs +0 -11
- package/esm2022/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +0 -43
- package/esm2022/lib/navigation/views/edit-view/edit-view.component.mjs +0 -118
- package/esm2022/lib/navigation/views/permission-picker/permission-picker.component.mjs +0 -151
- package/esm2022/lib/navigation/views/state.mjs +0 -456
- package/esm2022/lib/navigation/views/view-menu/view-menu.component.mjs +0 -30
- package/esm2022/lib/navigation/views/views/views.component.mjs +0 -90
- package/esm2022/lib/notification/badge/badge.component.mjs +0 -45
- package/esm2022/lib/notification/banner/banner-action.component.mjs +0 -48
- package/esm2022/lib/notification/banner/banner.component.mjs +0 -61
- package/esm2022/lib/notification/map-indicator/map-indicator.component.mjs +0 -50
- package/esm2022/lib/notification/map-indicator/map-indicators.mjs +0 -15
- package/esm2022/lib/notification/notification-badge/notification-badge.component.mjs +0 -26
- package/esm2022/lib/overlay/callout/callout.component.mjs +0 -130
- package/esm2022/lib/overlay/callout/callout.helpers.mjs +0 -113
- package/esm2022/lib/overlay/callout/help/help.component.mjs +0 -23
- package/esm2022/lib/overlay/callout/lock-scroll.directive.mjs +0 -69
- package/esm2022/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +0 -71
- package/esm2022/lib/overlay/callout/menu/menu.component.mjs +0 -39
- package/esm2022/lib/overlay/callout/select-callout-defaults.mjs +0 -13
- package/esm2022/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +0 -30
- package/esm2022/lib/overlay/callout/tooltip/tooltip.component.mjs +0 -57
- package/esm2022/lib/overlay/callout/tooltip/tooltip.directive.mjs +0 -138
- package/esm2022/lib/overlay/modal/dialog/dialog.component.mjs +0 -47
- package/esm2022/lib/overlay/modal/dialog-stack.service.mjs +0 -41
- package/esm2022/lib/overlay/modal/form-dialog/form-dialog.component.mjs +0 -146
- package/esm2022/lib/overlay/modal/modal.component.mjs +0 -31
- package/esm2022/lib/overlay/modal/side-sheet/side-sheet.component.mjs +0 -30
- package/esm2022/lib/overlay/overlay-outlet.component.mjs +0 -98
- package/esm2022/lib/overlay/overlay.directive.mjs +0 -25
- package/esm2022/lib/overlay/overlay.service.mjs +0 -35
- package/esm2022/lib/overlay/toast/toast-action.component.mjs +0 -11
- package/esm2022/lib/overlay/toast/toast.component.mjs +0 -41
- package/esm2022/lib/riv.module.mjs +0 -580
- package/esm2022/lib/size/size.directive.mjs +0 -33
- package/esm2022/lib/table/simple-table/coordinate-helper.mjs +0 -61
- package/esm2022/lib/table/simple-table/simple-table-cell.component.mjs +0 -36
- package/esm2022/lib/table/simple-table/simple-table-header-cell.component.mjs +0 -37
- package/esm2022/lib/table/simple-table/simple-table-row.component.mjs +0 -19
- package/esm2022/lib/table/simple-table/simple-table.component.mjs +0 -104
- package/esm2022/lib/table/table/clipboard.mjs +0 -182
- package/esm2022/lib/table/table/state-helpers/collapse-helpers.mjs +0 -116
- package/esm2022/lib/table/table/state-helpers/column-helpers.mjs +0 -383
- package/esm2022/lib/table/table/state-helpers/display-helpers.mjs +0 -50
- package/esm2022/lib/table/table/state-helpers/nesting-helpers.mjs +0 -123
- package/esm2022/lib/table/table/state-helpers/order-helpers.mjs +0 -164
- package/esm2022/lib/table/table/state-helpers/pagination-helpers.mjs +0 -139
- package/esm2022/lib/table/table/state-helpers/result-helpers.mjs +0 -70
- package/esm2022/lib/table/table/state-helpers/search-helpers.mjs +0 -72
- package/esm2022/lib/table/table/state-helpers/selection-helpers.mjs +0 -180
- package/esm2022/lib/table/table/state.mjs +0 -1035
- package/esm2022/lib/table/table/table/table.component.mjs +0 -367
- package/esm2022/lib/table/table/table-collapse-all/table-collapse-all.component.mjs +0 -25
- package/esm2022/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +0 -227
- package/esm2022/lib/table/table/table-column-settings/table-column-settings.component.mjs +0 -134
- package/esm2022/lib/table/table/table-csv-export/table-csv-export.component.mjs +0 -35
- package/esm2022/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +0 -28
- package/esm2022/lib/table/table/table-search/table-search.component.mjs +0 -71
- package/esm2022/lib/table/table/table-search-columns/table-search-columns.component.mjs +0 -57
- package/esm2022/lib/util/local-storage.mjs +0 -17
- package/esm2022/lib/visibility/visibility.directive.mjs +0 -34
- package/esm2022/lib/visualization/chart/chart-scaling.mjs +0 -380
- package/esm2022/lib/visualization/chart/chart.component.mjs +0 -626
- package/esm2022/lib/visualization/chart/chart.mjs +0 -3768
- package/esm2022/lib/visualization/data-table/data-table-cell.component.mjs +0 -22
- package/esm2022/lib/visualization/data-table/data-table-header-cell.component.mjs +0 -11
- package/esm2022/lib/visualization/data-table/data-table-row.component.mjs +0 -19
- package/esm2022/lib/visualization/data-table/data-table.component.mjs +0 -17
- package/esm2022/lib/visualization/donut/donut.component.mjs +0 -54
- package/esm2022/lib/visualization/funnel-chart/funnel-chart.component.mjs +0 -73
- package/esm2022/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +0 -33
- package/esm2022/lib/visualization/highlight/highlight.component.mjs +0 -24
- package/esm2022/lib/visualization/highlight/highlight.helpers.mjs +0 -20
- package/esm2022/lib/visualization/intervals.mjs +0 -63
- package/esm2022/lib/visualization/issue/issue.component.mjs +0 -30
- package/esm2022/lib/visualization/legend-item/legend-item.component.mjs +0 -49
- package/esm2022/lib/visualization/metric/metric.component.mjs +0 -52
- package/esm2022/lib/visualization/mini-pie/mini-pie.component.mjs +0 -51
- package/esm2022/lib/visualization/progress/progress.component.mjs +0 -24
- package/esm2022/lib/visualization/stacked-column/stacked-column.component.mjs +0 -377
- package/esm2022/lib/visualization/stacked-column/stacked-column.helpers.mjs +0 -18
- package/esm2022/lib/visualization/stacked-row/stacked-row.component.mjs +0 -270
- package/esm2022/lib/visualization/stacked-row/stacked-row.helpers.mjs +0 -74
- package/esm2022/lib/visualization/time-series/time-series.component.mjs +0 -374
- package/esm2022/lib/visualization/time-series/time-series.helpers.mjs +0 -15
- package/esm2022/lib/visualization/trend/trend.component.mjs +0 -51
- package/esm2022/lib/visualization/zero-state/zero-state.component.mjs +0 -22
- package/esm2022/public-api.mjs +0 -118
- package/esm2022/rivet-health-design-system.mjs +0 -5
- package/index.d.ts +0 -5
- package/lib/accessibility/sr-only/sr-only.component.d.ts +0 -12
- package/lib/download/download.service.d.ts +0 -9
- package/lib/format/pipes/common.d.ts +0 -6
- package/lib/format/pipes/date.pipe.d.ts +0 -8
- package/lib/format/pipes/days.pipe.d.ts +0 -8
- package/lib/format/pipes/dollars.pipe.d.ts +0 -9
- package/lib/format/pipes/number.pipe.d.ts +0 -8
- package/lib/format/pipes/percentage.pipe.d.ts +0 -8
- package/lib/format/pipes/sentence-case.pipe.d.ts +0 -8
- package/lib/format/pipes/small-currency.pipe.d.ts +0 -8
- package/lib/format/pipes/small-number.pipe.d.ts +0 -8
- package/lib/format/svg-text-truncate/svg-text-truncate.directive.d.ts +0 -14
- package/lib/format/truncate/truncate.component.d.ts +0 -17
- package/lib/icon/dom-cache.d.ts +0 -13
- package/lib/icon/icon.component.d.ts +0 -27
- package/lib/icon/icons.d.ts +0 -137
- package/lib/input/alphabetic-field/alphabetic-field.component.d.ts +0 -14
- package/lib/input/auto-focus/auto-focus.directive.d.ts +0 -21
- package/lib/input/button/button.component.d.ts +0 -37
- package/lib/input/button-group/button-group.component.d.ts +0 -11
- package/lib/input/calendar/calendar.component.d.ts +0 -67
- package/lib/input/card-checkbox/card-checkbox.component.d.ts +0 -6
- package/lib/input/checkbox/checkbox.component.d.ts +0 -32
- package/lib/input/currency-field/currency-field.component.d.ts +0 -9
- package/lib/input/date/date.component.d.ts +0 -62
- package/lib/input/date-range/date-range.component.d.ts +0 -97
- package/lib/input/filter-chip/filter-chip.component.d.ts +0 -13
- package/lib/input/filter-dropdown/filter-dropdown.component.d.ts +0 -30
- package/lib/input/input-label/input-label.component.d.ts +0 -17
- package/lib/input/mentions-input/mentions-input.component.d.ts +0 -93
- package/lib/input/number-field/number-field.component.d.ts +0 -36
- package/lib/input/percentage-field/percentage-field.component.d.ts +0 -7
- package/lib/input/phone-field/phone-field.component.d.ts +0 -17
- package/lib/input/radio/radio.component.d.ts +0 -28
- package/lib/input/search/search.component.d.ts +0 -10
- package/lib/input/search-select/search-select.component.d.ts +0 -62
- package/lib/input/select/select/select.component.d.ts +0 -63
- package/lib/input/select/select-node/select-node.component.d.ts +0 -30
- package/lib/input/select/state.d.ts +0 -250
- package/lib/input/simple-select/option-group.pipe.d.ts +0 -8
- package/lib/input/simple-select/simple-select.component.d.ts +0 -63
- package/lib/input/switch-checkbox/switch-checkbox.component.d.ts +0 -18
- package/lib/input/text-field/text-field.component.d.ts +0 -38
- package/lib/input/textarea-field/textarea-field.component.d.ts +0 -8
- package/lib/input/validation-message/validation-message.component.d.ts +0 -6
- package/lib/layout/card/card-actions.component.d.ts +0 -38
- package/lib/layout/card/card-content.component.d.ts +0 -33
- package/lib/layout/card/card-header.component.d.ts +0 -132
- package/lib/layout/card/card-link.component.d.ts +0 -64
- package/lib/layout/card/card-media.component.d.ts +0 -43
- package/lib/layout/card/card.component.d.ts +0 -225
- package/lib/layout/setting-row/setting-row.component.d.ts +0 -72
- package/lib/load/loading/loading.component.d.ts +0 -17
- package/lib/load/loading-cover/loading-cover.component.d.ts +0 -10
- package/lib/navigation/editable-heading/editable-heading.component.d.ts +0 -118
- package/lib/navigation/link/link.component.d.ts +0 -19
- package/lib/navigation/page-header/page-header.component.d.ts +0 -50
- package/lib/navigation/simple-tabs/simple-tab/simple-tab.component.d.ts +0 -11
- package/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.d.ts +0 -5
- package/lib/navigation/tabs/tab/tab.component.d.ts +0 -6
- package/lib/navigation/tabs/tabs/tabs.component.d.ts +0 -5
- package/lib/navigation/views/all-views-modal/all-views-modal.component.d.ts +0 -14
- package/lib/navigation/views/edit-view/edit-view.component.d.ts +0 -31
- package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +0 -37
- package/lib/navigation/views/state.d.ts +0 -175
- package/lib/navigation/views/view-menu/view-menu.component.d.ts +0 -13
- package/lib/navigation/views/views/views.component.d.ts +0 -25
- package/lib/notification/badge/badge.component.d.ts +0 -14
- package/lib/notification/banner/banner-action.component.d.ts +0 -15
- package/lib/notification/banner/banner.component.d.ts +0 -25
- package/lib/notification/map-indicator/map-indicator.component.d.ts +0 -24
- package/lib/notification/map-indicator/map-indicators.d.ts +0 -9
- package/lib/notification/notification-badge/notification-badge.component.d.ts +0 -11
- package/lib/overlay/callout/callout.component.d.ts +0 -36
- package/lib/overlay/callout/callout.helpers.d.ts +0 -16
- package/lib/overlay/callout/help/help.component.d.ts +0 -11
- package/lib/overlay/callout/lock-scroll.directive.d.ts +0 -22
- package/lib/overlay/callout/menu/menu-item/menu-item.component.d.ts +0 -27
- package/lib/overlay/callout/menu/menu.component.d.ts +0 -17
- package/lib/overlay/callout/select-callout-defaults.d.ts +0 -5
- package/lib/overlay/callout/tooltip/locked-tooltip.directive.d.ts +0 -14
- package/lib/overlay/callout/tooltip/tooltip.component.d.ts +0 -26
- package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +0 -48
- package/lib/overlay/modal/dialog/dialog.component.d.ts +0 -19
- package/lib/overlay/modal/dialog-stack.service.d.ts +0 -23
- package/lib/overlay/modal/form-dialog/form-dialog.component.d.ts +0 -63
- package/lib/overlay/modal/modal.component.d.ts +0 -11
- package/lib/overlay/modal/side-sheet/side-sheet.component.d.ts +0 -13
- package/lib/overlay/overlay-outlet.component.d.ts +0 -19
- package/lib/overlay/overlay.directive.d.ts +0 -13
- package/lib/overlay/overlay.service.d.ts +0 -14
- package/lib/overlay/toast/toast-action.component.d.ts +0 -5
- package/lib/overlay/toast/toast.component.d.ts +0 -17
- package/lib/riv.module.d.ts +0 -122
- package/lib/size/size.directive.d.ts +0 -12
- package/lib/table/simple-table/coordinate-helper.d.ts +0 -13
- package/lib/table/simple-table/simple-table-cell.component.d.ts +0 -19
- package/lib/table/simple-table/simple-table-header-cell.component.d.ts +0 -20
- package/lib/table/simple-table/simple-table-row.component.d.ts +0 -6
- package/lib/table/simple-table/simple-table.component.d.ts +0 -11
- package/lib/table/table/clipboard.d.ts +0 -38
- package/lib/table/table/state-helpers/collapse-helpers.d.ts +0 -9
- package/lib/table/table/state-helpers/column-helpers.d.ts +0 -29
- package/lib/table/table/state-helpers/display-helpers.d.ts +0 -5
- package/lib/table/table/state-helpers/nesting-helpers.d.ts +0 -13
- package/lib/table/table/state-helpers/order-helpers.d.ts +0 -13
- package/lib/table/table/state-helpers/pagination-helpers.d.ts +0 -12
- package/lib/table/table/state-helpers/result-helpers.d.ts +0 -10
- package/lib/table/table/state-helpers/search-helpers.d.ts +0 -17
- package/lib/table/table/state-helpers/selection-helpers.d.ts +0 -13
- package/lib/table/table/state.d.ts +0 -512
- package/lib/table/table/table/table.component.d.ts +0 -88
- package/lib/table/table/table-collapse-all/table-collapse-all.component.d.ts +0 -10
- package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +0 -52
- package/lib/table/table/table-column-settings/table-column-settings.component.d.ts +0 -37
- package/lib/table/table/table-csv-export/table-csv-export.component.d.ts +0 -14
- package/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.d.ts +0 -11
- package/lib/table/table/table-search/table-search.component.d.ts +0 -21
- package/lib/table/table/table-search-columns/table-search-columns.component.d.ts +0 -23
- package/lib/util/local-storage.d.ts +0 -14
- package/lib/visibility/visibility.directive.d.ts +0 -12
- package/lib/visualization/chart/chart-scaling.d.ts +0 -100
- package/lib/visualization/chart/chart.component.d.ts +0 -116
- package/lib/visualization/chart/chart.d.ts +0 -354
- package/lib/visualization/data-table/data-table-cell.component.d.ts +0 -11
- package/lib/visualization/data-table/data-table-header-cell.component.d.ts +0 -5
- package/lib/visualization/data-table/data-table-row.component.d.ts +0 -6
- package/lib/visualization/data-table/data-table.component.d.ts +0 -6
- package/lib/visualization/donut/donut.component.d.ts +0 -22
- package/lib/visualization/funnel-chart/funnel-chart.component.d.ts +0 -30
- package/lib/visualization/funnel-chart/funnel-chart.helpers.d.ts +0 -4
- package/lib/visualization/highlight/highlight.component.d.ts +0 -15
- package/lib/visualization/highlight/highlight.helpers.d.ts +0 -2
- package/lib/visualization/intervals.d.ts +0 -8
- package/lib/visualization/issue/issue.component.d.ts +0 -10
- package/lib/visualization/legend-item/legend-item.component.d.ts +0 -22
- package/lib/visualization/metric/metric.component.d.ts +0 -20
- package/lib/visualization/mini-pie/mini-pie.component.d.ts +0 -17
- package/lib/visualization/progress/progress.component.d.ts +0 -8
- package/lib/visualization/stacked-column/stacked-column.component.d.ts +0 -129
- package/lib/visualization/stacked-column/stacked-column.helpers.d.ts +0 -3
- package/lib/visualization/stacked-row/stacked-row.component.d.ts +0 -109
- package/lib/visualization/stacked-row/stacked-row.helpers.d.ts +0 -53
- package/lib/visualization/time-series/time-series.component.d.ts +0 -126
- package/lib/visualization/time-series/time-series.helpers.d.ts +0 -34
- package/lib/visualization/trend/trend.component.d.ts +0 -13
- package/lib/visualization/zero-state/zero-state.component.d.ts +0 -9
- package/public-api.d.ts +0 -118
|
@@ -1,456 +0,0 @@
|
|
|
1
|
-
import Fuse from 'fuse.js';
|
|
2
|
-
import { debounce, defaultsDeep, sortBy } from 'lodash';
|
|
3
|
-
import { connectable, from, map, mergeScan, ReplaySubject, startWith, Subject, } from 'rxjs';
|
|
4
|
-
export var RivViews;
|
|
5
|
-
(function (RivViews) {
|
|
6
|
-
RivViews.ViewPermissions = ['private', 'shared', 'public'];
|
|
7
|
-
RivViews.MenuContexts = ['tab', 'all-views', 'overflow'];
|
|
8
|
-
RivViews.UserSelectModes = ['select', 'search-select'];
|
|
9
|
-
function createManager({ source, save, duplicate, userSource, userSelectMode, onAddUser, newTooltip, copyLink, options, setActiveViewId, }) {
|
|
10
|
-
const defaultState = {
|
|
11
|
-
views: [],
|
|
12
|
-
activeViewId: null,
|
|
13
|
-
temporaryViewId: null,
|
|
14
|
-
containerWidth: 0,
|
|
15
|
-
editingViewContext: null,
|
|
16
|
-
deletingViewContext: null,
|
|
17
|
-
overflow: {
|
|
18
|
-
search: '',
|
|
19
|
-
pickerOpen: false,
|
|
20
|
-
},
|
|
21
|
-
all: {
|
|
22
|
-
search: '',
|
|
23
|
-
privateOpen: true,
|
|
24
|
-
sharedOpen: true,
|
|
25
|
-
publicOpen: true,
|
|
26
|
-
},
|
|
27
|
-
userSource,
|
|
28
|
-
userSelectMode: userSelectMode ?? 'select',
|
|
29
|
-
onAddUser,
|
|
30
|
-
newTooltip,
|
|
31
|
-
hasSystemView: true,
|
|
32
|
-
};
|
|
33
|
-
const defaultedInitialState = defaultsDeep({}, options?.initialState, defaultState);
|
|
34
|
-
const actions = new Subject();
|
|
35
|
-
const coreState = actions.pipe(mergeScan((state, action) => from(reduce(state, action, source, debounce(save, 200), duplicate, copyLink, setActiveViewId)), defaultedInitialState, 1), startWith(defaultedInitialState));
|
|
36
|
-
const state = connectable(coreState.pipe(map(s => {
|
|
37
|
-
const enabledNormalViews = getEnabledViews(s.views);
|
|
38
|
-
const activeView = enabledNormalViews.find(view => view.id === s.activeViewId);
|
|
39
|
-
// If for some reason the active view is not currently enabled, we'll
|
|
40
|
-
// default to making the first enabled view active instead.
|
|
41
|
-
const activeViewId = activeView
|
|
42
|
-
? activeView.id
|
|
43
|
-
: enabledNormalViews.length > 0
|
|
44
|
-
? enabledNormalViews[0].id
|
|
45
|
-
: null;
|
|
46
|
-
const allViews = s.views.map((view, i) => {
|
|
47
|
-
const isSystemView = s.hasSystemView && i === 0;
|
|
48
|
-
const isTemporaryView = s.temporaryViewId === view.id;
|
|
49
|
-
return {
|
|
50
|
-
...view,
|
|
51
|
-
enabled: view.enabled || isSystemView || isTemporaryView,
|
|
52
|
-
active: activeViewId === view.id,
|
|
53
|
-
system: isSystemView,
|
|
54
|
-
temporary: isTemporaryView,
|
|
55
|
-
};
|
|
56
|
-
});
|
|
57
|
-
const allEnabledViews = getEnabledViews(allViews);
|
|
58
|
-
const displayedViews = calculateDisplayedViews(allEnabledViews, calculateOverflowViewIndex(s), activeViewId, s.temporaryViewId);
|
|
59
|
-
const enabledViews = s.overflow.search
|
|
60
|
-
? searchViews(allEnabledViews, s.overflow.search, options?.fuseOptions)
|
|
61
|
-
: allEnabledViews;
|
|
62
|
-
const allPermanentViews = allViews.filter(view => !view.temporary);
|
|
63
|
-
const allViewsFiltered = s.all.search
|
|
64
|
-
? searchViews(allPermanentViews, s.all.search, options?.fuseOptions)
|
|
65
|
-
: allPermanentViews;
|
|
66
|
-
const searchingAllViews = !!s.all.search;
|
|
67
|
-
return {
|
|
68
|
-
...s,
|
|
69
|
-
allViews,
|
|
70
|
-
displayedViews,
|
|
71
|
-
enabledViews,
|
|
72
|
-
allEnabledViews,
|
|
73
|
-
all: {
|
|
74
|
-
...s.all,
|
|
75
|
-
privateOpen: searchingAllViews || s.all.privateOpen,
|
|
76
|
-
privateViews: viewsByPermission(allViewsFiltered, 'private'),
|
|
77
|
-
sharedOpen: searchingAllViews || s.all.sharedOpen,
|
|
78
|
-
sharedViews: viewsByPermission(allViewsFiltered, 'shared'),
|
|
79
|
-
publicOpen: searchingAllViews || s.all.publicOpen,
|
|
80
|
-
publicViews: viewsByPermission(allViewsFiltered, 'public'),
|
|
81
|
-
},
|
|
82
|
-
activeViewId: activeViewId,
|
|
83
|
-
};
|
|
84
|
-
})), {
|
|
85
|
-
connector: () => new ReplaySubject(1),
|
|
86
|
-
resetOnDisconnect: false,
|
|
87
|
-
});
|
|
88
|
-
state.connect();
|
|
89
|
-
// Load the views immediately
|
|
90
|
-
actions.next({ type: 'load' });
|
|
91
|
-
return { actions, state };
|
|
92
|
-
}
|
|
93
|
-
RivViews.createManager = createManager;
|
|
94
|
-
function getEnabledViews(views) {
|
|
95
|
-
return views.filter((v, i) => v.enabled || v.system || v.temporary);
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Translates an index in the enabled views list to the corresponding index
|
|
99
|
-
* in the full views list. This is used to resolve UI indices (which only
|
|
100
|
-
* show enabled views) to state.views indices (which includes all views).
|
|
101
|
-
*/
|
|
102
|
-
function mapEnabledIndexToViewIndex(views, enabledIndex) {
|
|
103
|
-
const enabledViews = getEnabledViews(views);
|
|
104
|
-
const targetView = enabledViews[enabledIndex];
|
|
105
|
-
if (!targetView)
|
|
106
|
-
return enabledIndex;
|
|
107
|
-
const viewIndex = views.findIndex(view => view.id === targetView.id);
|
|
108
|
-
return viewIndex === -1 ? enabledIndex : viewIndex;
|
|
109
|
-
}
|
|
110
|
-
function calculateOverflowViewIndex(state) {
|
|
111
|
-
const enabledViews = getEnabledViews(state.views);
|
|
112
|
-
// Tabs have a minimum width of 92px.
|
|
113
|
-
const possibleSlotCount = Math.floor(state.containerWidth / 92);
|
|
114
|
-
// The "all views" sidebar trigger takes up one slot.
|
|
115
|
-
const availableSlotCount = possibleSlotCount - 1;
|
|
116
|
-
// If there are too many tabs, the "N more" trigger takes up one slot as well.
|
|
117
|
-
// But we want to avoid the "1 more" case, so we only use a slot for "N more" if N != 1.
|
|
118
|
-
if (availableSlotCount >= enabledViews.length)
|
|
119
|
-
return enabledViews.length;
|
|
120
|
-
else
|
|
121
|
-
return availableSlotCount - 1; // the "N more" uses up a slot.
|
|
122
|
-
}
|
|
123
|
-
function calculateDisplayedViews(fullViews, overflowViewIndex, activeViewId, temporaryViewId) {
|
|
124
|
-
const displayedViews = fullViews.slice(0, overflowViewIndex);
|
|
125
|
-
const viewsToAlwaysDisplay = [];
|
|
126
|
-
// The active view should always be displayed if it exists
|
|
127
|
-
const activeViewInDisplay = displayedViews.some(view => view.id === activeViewId);
|
|
128
|
-
if (activeViewId !== null && !activeViewInDisplay) {
|
|
129
|
-
const activeView = fullViews.find(view => view.id === activeViewId);
|
|
130
|
-
if (activeView && displayedViews.length > 0) {
|
|
131
|
-
viewsToAlwaysDisplay.push(activeView);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
// We should try to display the temporary view if it exists
|
|
135
|
-
const temporaryViewInDisplay = displayedViews.some(view => view.id === temporaryViewId);
|
|
136
|
-
if (temporaryViewId !== null &&
|
|
137
|
-
!temporaryViewInDisplay &&
|
|
138
|
-
temporaryViewId != activeViewId) {
|
|
139
|
-
const temporaryView = fullViews.find(view => view.id === temporaryViewId);
|
|
140
|
-
if (temporaryView &&
|
|
141
|
-
displayedViews.length > viewsToAlwaysDisplay.length) {
|
|
142
|
-
viewsToAlwaysDisplay.push(temporaryView);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
if (viewsToAlwaysDisplay.length > 0) {
|
|
146
|
-
const numViewsToReplace = viewsToAlwaysDisplay.length;
|
|
147
|
-
return [
|
|
148
|
-
...displayedViews.slice(0, -1 * numViewsToReplace),
|
|
149
|
-
...viewsToAlwaysDisplay,
|
|
150
|
-
];
|
|
151
|
-
}
|
|
152
|
-
return displayedViews;
|
|
153
|
-
}
|
|
154
|
-
function viewsByPermission(views, permission) {
|
|
155
|
-
return sortBy(views.filter(view => view.permission === permission), [v => !v.system, 'title']);
|
|
156
|
-
}
|
|
157
|
-
function searchViews(views, query, options) {
|
|
158
|
-
const fuse = new Fuse(views, {
|
|
159
|
-
threshold: 0.2,
|
|
160
|
-
keys: ['title'],
|
|
161
|
-
includeMatches: true,
|
|
162
|
-
...options,
|
|
163
|
-
});
|
|
164
|
-
const matchedOptions = fuse.search(query);
|
|
165
|
-
return matchedOptions.map(result => ({
|
|
166
|
-
...result.item,
|
|
167
|
-
titleHighlightIndices: [
|
|
168
|
-
...(result.matches?.find(match => match.key === 'title')?.indices ??
|
|
169
|
-
[]),
|
|
170
|
-
],
|
|
171
|
-
}));
|
|
172
|
-
}
|
|
173
|
-
function getNextBestActiveView(state) {
|
|
174
|
-
const enabledViews = getEnabledViews(state.views);
|
|
175
|
-
const currentActiveViewIndex = enabledViews.findIndex(view => view.id === state.activeViewId);
|
|
176
|
-
if (enabledViews.length == 0) {
|
|
177
|
-
return null;
|
|
178
|
-
}
|
|
179
|
-
if (currentActiveViewIndex === -1)
|
|
180
|
-
return enabledViews[0].id;
|
|
181
|
-
return (enabledViews[currentActiveViewIndex + 1]?.id ??
|
|
182
|
-
enabledViews[currentActiveViewIndex - 1]?.id ??
|
|
183
|
-
enabledViews[0].id);
|
|
184
|
-
}
|
|
185
|
-
function deleteView(state, id) {
|
|
186
|
-
const activeViewId = state.activeViewId === id
|
|
187
|
-
? getNextBestActiveView(state)
|
|
188
|
-
: state.activeViewId;
|
|
189
|
-
const temporaryViewId = state.temporaryViewId === id ? null : state.temporaryViewId;
|
|
190
|
-
const views = state.views.filter(view => view.id !== id);
|
|
191
|
-
return {
|
|
192
|
-
...state,
|
|
193
|
-
views,
|
|
194
|
-
activeViewId,
|
|
195
|
-
temporaryViewId,
|
|
196
|
-
deletingViewContext: null,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
function setEnabled(state, id, enabled) {
|
|
200
|
-
return {
|
|
201
|
-
...state,
|
|
202
|
-
views: state.views.map(view => view.id === id ? { ...view, enabled } : view),
|
|
203
|
-
activeViewId: !enabled && state.activeViewId === id
|
|
204
|
-
? getNextBestActiveView(state)
|
|
205
|
-
: state.activeViewId,
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
function withDuplicateView(views, duplicatedView, newView) {
|
|
209
|
-
const sourceIndex = views.findIndex(view => view.id === duplicatedView.id);
|
|
210
|
-
if (sourceIndex === -1) {
|
|
211
|
-
return [newView, ...views];
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
return [
|
|
215
|
-
...views.slice(0, sourceIndex + 1),
|
|
216
|
-
newView,
|
|
217
|
-
...views.slice(sourceIndex + 1),
|
|
218
|
-
];
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
function viewOrderChange(state, previousEnabledIndex, newEnabledIndex) {
|
|
222
|
-
if (state.hasSystemView &&
|
|
223
|
-
(previousEnabledIndex === 0 || newEnabledIndex === 0)) {
|
|
224
|
-
return { state, shouldSave: false }; // Keep system view (index 0) in place
|
|
225
|
-
}
|
|
226
|
-
const actualPreviousIndex = mapEnabledIndexToViewIndex(state.views, previousEnabledIndex);
|
|
227
|
-
const actualNewIndex = mapEnabledIndexToViewIndex(state.views, newEnabledIndex);
|
|
228
|
-
const item = state.views[actualPreviousIndex];
|
|
229
|
-
const withoutItem = state.views.filter((_, i) => i !== actualPreviousIndex);
|
|
230
|
-
return {
|
|
231
|
-
state: {
|
|
232
|
-
...state,
|
|
233
|
-
views: [
|
|
234
|
-
...withoutItem.slice(0, actualNewIndex),
|
|
235
|
-
item,
|
|
236
|
-
...withoutItem.slice(actualNewIndex),
|
|
237
|
-
],
|
|
238
|
-
},
|
|
239
|
-
shouldSave: true,
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
function getPermanentViews(views, temporaryViewId) {
|
|
243
|
-
return views.filter(view => view.id != temporaryViewId);
|
|
244
|
-
}
|
|
245
|
-
function savePermanentViews(save, views, temporaryViewId) {
|
|
246
|
-
const permanentViews = getPermanentViews(views, temporaryViewId);
|
|
247
|
-
save(permanentViews);
|
|
248
|
-
}
|
|
249
|
-
async function reduce(state, action, source, save, duplicate, copyLink, setActiveViewId) {
|
|
250
|
-
switch (action.type) {
|
|
251
|
-
case 'load':
|
|
252
|
-
const views = await source();
|
|
253
|
-
return {
|
|
254
|
-
...state,
|
|
255
|
-
views,
|
|
256
|
-
};
|
|
257
|
-
case 'setActiveView': {
|
|
258
|
-
const activeView = state.views.find(v => v.id === action.id);
|
|
259
|
-
const views = activeView && !activeView.enabled
|
|
260
|
-
? state.views.map(view => view.id === action.id ? { ...view, enabled: true } : view)
|
|
261
|
-
: state.views;
|
|
262
|
-
// If enabling the view changed the views, we need to save.
|
|
263
|
-
if (views !== state.views) {
|
|
264
|
-
savePermanentViews(save, views, state.temporaryViewId);
|
|
265
|
-
}
|
|
266
|
-
// notify the caller that the active view has changed
|
|
267
|
-
setActiveViewId(action.id);
|
|
268
|
-
return {
|
|
269
|
-
...state,
|
|
270
|
-
activeViewId: action.id,
|
|
271
|
-
views,
|
|
272
|
-
all: {
|
|
273
|
-
...state.all,
|
|
274
|
-
search: '',
|
|
275
|
-
},
|
|
276
|
-
overflow: {
|
|
277
|
-
...state.overflow,
|
|
278
|
-
search: '',
|
|
279
|
-
},
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
case 'setEnabled': {
|
|
283
|
-
const newState = setEnabled(state, action.id, action.enabled);
|
|
284
|
-
savePermanentViews(save, newState.views, newState.temporaryViewId);
|
|
285
|
-
return newState;
|
|
286
|
-
}
|
|
287
|
-
case 'setContainerWidth':
|
|
288
|
-
return {
|
|
289
|
-
...state,
|
|
290
|
-
containerWidth: action.width,
|
|
291
|
-
};
|
|
292
|
-
case 'setOverflowPickerOpen':
|
|
293
|
-
return {
|
|
294
|
-
...state,
|
|
295
|
-
overflow: {
|
|
296
|
-
...state.overflow,
|
|
297
|
-
pickerOpen: action.open,
|
|
298
|
-
},
|
|
299
|
-
};
|
|
300
|
-
case 'setOverflowSearchQuery':
|
|
301
|
-
return {
|
|
302
|
-
...state,
|
|
303
|
-
overflow: {
|
|
304
|
-
...state.overflow,
|
|
305
|
-
search: action.query,
|
|
306
|
-
},
|
|
307
|
-
};
|
|
308
|
-
case 'setAllViewsSearchQuery':
|
|
309
|
-
return {
|
|
310
|
-
...state,
|
|
311
|
-
all: {
|
|
312
|
-
...state.all,
|
|
313
|
-
search: action.query,
|
|
314
|
-
},
|
|
315
|
-
};
|
|
316
|
-
case 'updateView': {
|
|
317
|
-
if (action.view.id != state.temporaryViewId) {
|
|
318
|
-
const views = state.views.map(view => view.id === action.view.id ? action.view : view);
|
|
319
|
-
savePermanentViews(save, views, state.temporaryViewId);
|
|
320
|
-
return {
|
|
321
|
-
...state,
|
|
322
|
-
views: views,
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
326
|
-
// Updating a temporary view saves the view and makes it permanent
|
|
327
|
-
const temporaryViewToSave = await duplicate({ ...action.view });
|
|
328
|
-
const views = state.views.map(view => view.id === action.view.id ? temporaryViewToSave : view);
|
|
329
|
-
savePermanentViews(save, views, null);
|
|
330
|
-
// Make sure the view we just saved is the active view
|
|
331
|
-
setActiveViewId(temporaryViewToSave.id);
|
|
332
|
-
return {
|
|
333
|
-
...state,
|
|
334
|
-
views: views,
|
|
335
|
-
activeViewId: temporaryViewToSave.id,
|
|
336
|
-
temporaryViewId: null,
|
|
337
|
-
};
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
case 'deleteView': {
|
|
341
|
-
const newState = deleteView(state, action.view.id);
|
|
342
|
-
savePermanentViews(save, newState.views, state.temporaryViewId);
|
|
343
|
-
return newState;
|
|
344
|
-
}
|
|
345
|
-
case 'duplicateView': {
|
|
346
|
-
const newView = await duplicate({ ...action.view });
|
|
347
|
-
return {
|
|
348
|
-
...state,
|
|
349
|
-
views: withDuplicateView(state.views, action.view, newView),
|
|
350
|
-
editingViewContext: {
|
|
351
|
-
id: newView.id,
|
|
352
|
-
autoRename: true,
|
|
353
|
-
menuContext: action.menuContext,
|
|
354
|
-
},
|
|
355
|
-
activeViewId: newView.id,
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
case 'copyLinkToView':
|
|
359
|
-
await copyLink(action.view);
|
|
360
|
-
return state;
|
|
361
|
-
case 'viewOrderChange': {
|
|
362
|
-
const { state: newState, shouldSave } = viewOrderChange(state, action.previousEnabledIndex, action.newEnabledIndex);
|
|
363
|
-
if (shouldSave) {
|
|
364
|
-
savePermanentViews(save, newState.views, state.temporaryViewId);
|
|
365
|
-
}
|
|
366
|
-
return newState;
|
|
367
|
-
}
|
|
368
|
-
case 'setAllViewsToggle':
|
|
369
|
-
return {
|
|
370
|
-
...state,
|
|
371
|
-
all: {
|
|
372
|
-
...state.all,
|
|
373
|
-
privateOpen: action.permission === 'private'
|
|
374
|
-
? action.open
|
|
375
|
-
: state.all.privateOpen,
|
|
376
|
-
sharedOpen: action.permission === 'shared'
|
|
377
|
-
? action.open
|
|
378
|
-
: state.all.sharedOpen,
|
|
379
|
-
publicOpen: action.permission === 'public'
|
|
380
|
-
? action.open
|
|
381
|
-
: state.all.publicOpen,
|
|
382
|
-
},
|
|
383
|
-
};
|
|
384
|
-
case 'setEditingView':
|
|
385
|
-
return {
|
|
386
|
-
...state,
|
|
387
|
-
editingViewContext: action.context,
|
|
388
|
-
};
|
|
389
|
-
case 'setDeletingView':
|
|
390
|
-
return {
|
|
391
|
-
...state,
|
|
392
|
-
deletingViewContext: action.context,
|
|
393
|
-
};
|
|
394
|
-
case 'createTemporaryView':
|
|
395
|
-
const existingPermanentViews = getPermanentViews(state.views, state.temporaryViewId);
|
|
396
|
-
// Swap the active view to the temporary view
|
|
397
|
-
setActiveViewId(action.view.id);
|
|
398
|
-
return {
|
|
399
|
-
...state,
|
|
400
|
-
temporaryViewId: action.view.id,
|
|
401
|
-
activeViewId: action.view.id,
|
|
402
|
-
views: [...existingPermanentViews, action.view],
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
///////////////
|
|
407
|
-
// Utilities //
|
|
408
|
-
///////////////
|
|
409
|
-
function getPermissionTitle(permission) {
|
|
410
|
-
switch (permission) {
|
|
411
|
-
case 'private':
|
|
412
|
-
return 'Private';
|
|
413
|
-
case 'shared':
|
|
414
|
-
return 'Shared';
|
|
415
|
-
case 'public':
|
|
416
|
-
return 'Public';
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
RivViews.getPermissionTitle = getPermissionTitle;
|
|
420
|
-
function getPermissionDescription(permission) {
|
|
421
|
-
switch (permission) {
|
|
422
|
-
case 'private':
|
|
423
|
-
return 'Private - Only available to you';
|
|
424
|
-
case 'shared':
|
|
425
|
-
return 'Shared - Only visible to those with access';
|
|
426
|
-
case 'public':
|
|
427
|
-
return 'Public - Visible to everyone';
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
RivViews.getPermissionDescription = getPermissionDescription;
|
|
431
|
-
function isSharedView(view) {
|
|
432
|
-
return view?.permission === 'shared';
|
|
433
|
-
}
|
|
434
|
-
RivViews.isSharedView = isSharedView;
|
|
435
|
-
/**
|
|
436
|
-
* Converts SearchSelectUser<U> items back to U[] for storage in sharedUsers.
|
|
437
|
-
*
|
|
438
|
-
* Cast required because TypeScript cannot prove that destructuring `new`
|
|
439
|
-
* from `U & { new: boolean }` yields exactly `U` (spread/rest doesn't
|
|
440
|
-
* narrow intersection types).
|
|
441
|
-
*
|
|
442
|
-
* - Strips `new: false` so isEqual() comparisons work (original users lack `new`)
|
|
443
|
-
* - Preserves `new: true` so the backend knows which users to create
|
|
444
|
-
*/
|
|
445
|
-
function toSharedUsers(users) {
|
|
446
|
-
return users.map(user => {
|
|
447
|
-
if (user.new) {
|
|
448
|
-
return user;
|
|
449
|
-
}
|
|
450
|
-
const { new: _isNew, ...rest } = user;
|
|
451
|
-
return rest;
|
|
452
|
-
});
|
|
453
|
-
}
|
|
454
|
-
RivViews.toSharedUsers = toSharedUsers;
|
|
455
|
-
})(RivViews || (RivViews = {}));
|
|
456
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL3N0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBa0MsTUFBTSxTQUFTLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3hELE9BQU8sRUFDTCxXQUFXLEVBRVgsSUFBSSxFQUNKLEdBQUcsRUFDSCxTQUFTLEVBRVQsYUFBYSxFQUNiLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxNQUFNLENBQUM7QUFLZCxNQUFNLEtBQVcsUUFBUSxDQTB6QnhCO0FBMXpCRCxXQUFpQixRQUFRO0lBQ1Ysd0JBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFVLENBQUM7SUFHM0QscUJBQVksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFVLENBQUM7SUFLekQsd0JBQWUsR0FBRyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQVUsQ0FBQztJQWtLcEUsU0FBZ0IsYUFBYSxDQUFvQyxFQUMvRCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVCxVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxVQUFVLEVBQ1YsUUFBUSxFQUNSLE9BQU8sRUFDUCxlQUFlLEdBQ1U7UUFDekIsTUFBTSxZQUFZLEdBQW9CO1lBQ3BDLEtBQUssRUFBRSxFQUFFO1lBQ1QsWUFBWSxFQUFFLElBQUk7WUFDbEIsZUFBZSxFQUFFLElBQUk7WUFDckIsY0FBYyxFQUFFLENBQUM7WUFDakIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUUsRUFBRTtnQkFDVixVQUFVLEVBQUUsS0FBSzthQUNsQjtZQUNELEdB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Q0FBQyxVQUEwQjtRQUNqRSxRQUFRLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEtBQUssU0FBUztnQkFDWixPQUFPLGlDQUFpQyxDQUFDO1lBQzNDLEtBQUssUUFBUTtnQkFDWCxPQUFPLDRDQUE0QyxDQUFDO1lBQ3RELEtBQUssUUFBUTtnQkFDWCxPQUFPLDhCQUE4QixDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBVGUsaUNBQXdCLDJCQVN2QyxDQUFBO0lBRUQsU0FBZ0IsWUFBWSxDQUMxQixJQUFxQjtRQUVyQixPQUFPLElBQUksRUFBRSxVQUFVLEtBQUssUUFBUSxDQUFDO0lBQ3ZDLENBQUM7SUFKZSxxQkFBWSxlQUkzQixDQUFBO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsU0FBZ0IsYUFBYSxDQUMzQixLQUE0QjtRQUU1QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxJQUFvQixDQUFDO1lBQzlCLENBQUM7WUFDRCxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztZQUN0QyxPQUFPLElBQW9CLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBVmUsc0JBQWEsZ0JBVTVCLENBQUE7QUFDSCxDQUFDLEVBMXpCZ0IsUUFBUSxLQUFSLFFBQVEsUUEwekJ4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBGdXNlLCB7IEZ1c2VSZXN1bHQsIElGdXNlT3B0aW9ucyB9IGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgZGVib3VuY2UsIGRlZmF1bHRzRGVlcCwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIGNvbm5lY3RhYmxlLFxuICBDb25uZWN0YWJsZSxcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZVNjYW4sXG4gIE9ic2VydmFibGUsXG4gIFJlcGxheVN1YmplY3QsXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZWVwUGFydGlhbCB9IGZyb20gJ3V0aWxpdHktdHlwZXMnO1xuaW1wb3J0IHsgUml2U2VsZWN0IH0gZnJvbSAnLi4vLi4vaW5wdXQvc2VsZWN0L3N0YXRlJztcbmltcG9ydCB7IEhpZ2hsaWdodENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Zpc3VhbGl6YXRpb24vaGlnaGxpZ2h0L2hpZ2hsaWdodC5jb21wb25lbnQnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFJpdlZpZXdzIHtcbiAgZXhwb3J0IGNvbnN0IFZpZXdQZXJtaXNzaW9ucyA9IFsncHJpdmF0ZScsICdzaGFyZWQnLCAncHVibGljJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFZpZXdQZXJtaXNzaW9uID0gKHR5cGVvZiBWaWV3UGVybWlzc2lvbnMpW251bWJlcl07XG5cbiAgZXhwb3J0IGNvbnN0IE1lbnVDb250ZXh0cyA9IFsndGFiJywgJ2FsbC12aWV3cycsICdvdmVyZmxvdyddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBNZW51Q29udGV4dCA9ICh0eXBlb2YgTWVudUNvbnRleHRzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCB0eXBlIFVzZXIgPSBSaXZTZWxlY3QuQmFzZU9wdGlvbjtcblxuICBleHBvcnQgY29uc3QgVXNlclNlbGVjdE1vZGVzID0gWydzZWxlY3QnLCAnc2VhcmNoLXNlbGVjdCddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBVc2VyU2VsZWN0TW9kZSA9ICh0eXBlb2YgVXNlclNlbGVjdE1vZGVzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCB0eXBlIFNlYXJjaFNlbGVjdFVzZXI8VSBleHRlbmRzIFVzZXI+ID0gVSAmIHsgbmV3OiBib29sZWFuIH07XG5cbiAgZXhwb3J0IHR5cGUgT25BZGRVc2VyPFUgZXh0ZW5kcyBVc2VyPiA9IChcbiAgICBzZWFyY2hUZXh0OiBzdHJpbmcsXG4gICkgPT4gU2VhcmNoU2VsZWN0VXNlcjxVPjtcblxuICBleHBvcnQgdHlwZSBWaWV3PFUgZXh0ZW5kcyBVc2VyPiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgfSAmIChcbiAgICB8IHtcbiAgICAgICAgcGVybWlzc2lvbjogJ3ByaXZhdGUnIHwgJ3B1YmxpYyc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHBlcm1pc3Npb246ICdzaGFyZWQnO1xuICAgICAgICBzaGFyZWRVc2VyczogVVtdO1xuICAgICAgfVxuICApO1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxWaWV3PFUgZXh0ZW5kcyBVc2VyLCBWIGV4dGVuZHMgVmlldzxVPj4gPSBWICYge1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICBzeXN0ZW06IGJvb2xlYW47XG4gICAgdGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICB0ZW1wb3Jhcnk6IGJvb2xlYW47XG4gIH07XG5cbiAgLy8vLy8vLy8vLy9cbiAgLy8gU3RhdGUgLy9cbiAgLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBDb3JlU3RhdGU8VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PiA9IHtcbiAgICB2aWV3czogVltdO1xuICAgIGFjdGl2ZVZpZXdJZDogVlsnaWQnXSB8IG51bGw7XG4gICAgdGVtcG9yYXJ5Vmlld0lkOiBWWydpZCddIHwgbnVsbDtcbiAgICBjb250YWluZXJXaWR0aDogbnVtYmVyO1xuICAgIGVkaXRpbmdWaWV3Q29udGV4dDoge1xuICAgICAgaWQ6IFZbJ2lkJ107XG4gICAgICBhdXRvUmVuYW1lOiBib29sZWFuO1xuICAgICAgbWVudUNvbnRleHQ6IE1lbnVDb250ZXh0O1xuICAgIH0gfCBudWxsO1xuICAgIGRlbGV0aW5nVmlld0NvbnRleHQ6IHsgaWQ6IFZbJ2lkJ107IG1lbnVDb250ZXh0OiBNZW51Q29udGV4dCB9IHwgbnVsbDtcbiAgICBvdmVyZmxvdzoge1xuICAgICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgICBwaWNrZXJPcGVuOiBib29sZWFuO1xuICAgIH07XG4gICAgYWxsOiB7XG4gICAgICBzZWFyY2g6IHN0cmluZztcbiAgICAgIHByaXZhdGVPcGVuOiBib29sZWFuO1xuICAgICAgc2hhcmVkT3BlbjogYm9vbGVhbjtcbiAgICAgIHB1YmxpY09wZW46IGJvb2xlYW47XG4gICAgfTtcbiAgICB1c2VyU291cmNlOiBVc2VyU291cmNlPFU+O1xuICAgIHVzZXJTZWxlY3RNb2RlOiBVc2VyU2VsZWN0TW9kZTtcbiAgICBvbkFkZFVzZXI/OiBPbkFkZFVzZXI8VT47XG4gICAgbmV3VG9vbHRpcD86IHN0cmluZztcbiAgICBoYXNTeXN0ZW1WaWV3OiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxTdGF0ZTxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+ID0gQ29yZVN0YXRlPFUsIFY+ICYge1xuICAgIGFsbFZpZXdzOiBGdWxsVmlldzxVLCBWPltdO1xuICAgIGRpc3BsYXllZFZpZXdzOiBGdWxsVmlldzxVLCBWPltdO1xuICAgIGVuYWJsZWRWaWV3czogRnVsbFZpZXc8VSwgVj5bXTtcbiAgICBhbGxFbmFibGVkVmlld3M6IEZ1bGxWaWV3PFUsIFY+W107XG4gICAgYWxsOiB7XG4gICAgICBwcml2YXRlVmlld3M6IEZ1bGxWaWV3PFUsIFY+W107XG4gICAgICBzaGFyZWRWaWV3czogRnVsbFZpZXc8VSwgVj5bXTtcbiAgICAgIHB1YmxpY1ZpZXdzOiBGdWxsVmlldzxVLCBWPltdO1xuICAgIH07XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBBY3Rpb25zIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBBY3Rpb248VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PiA9XG4gICAgfCB7IHR5cGU6ICdsb2FkJyB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZXRBY3RpdmVWaWV3JztcbiAgICAgICAgaWQ6IFZbJ2lkJ107XG4gICAgICAgIHNvdXJjZT86ICd0YWInIHwgJ21lbnUnIHwgJ292ZXJmbG93JztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NldEVuYWJsZWQnO1xuICAgICAgICBpZDogVlsnaWQnXTtcbiAgICAgICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAgICAgc291cmNlPzogJ21lbnUnIHwgJ2V5ZUljb24nO1xuICAgICAgfVxuICAgIHwgeyB0eXBlOiAnc2V0Q29udGFpbmVyV2lkdGgnOyB3aWR0aDogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ3NldE92ZXJmbG93UGlja2VyT3Blbic7IG9wZW46IGJvb2xlYW4gfVxuICAgIHwgeyB0eXBlOiAnc2V0T3ZlcmZsb3dTZWFyY2hRdWVyeSc7IHF1ZXJ5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiAnc2V0QWxsVmlld3NTZWFyY2hRdWVyeSc7IHF1ZXJ5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiAndXBkYXRlVmlldyc7IHZpZXc6IFYgfVxuICAgIHwgeyB0eXBlOiAnZGVsZXRlVmlldyc7IHZpZXc6IFYgfVxuICAgIHwgeyB0eXBlOiAnZHVwbGljYXRlVmlldyc7IHZpZXc6IFY7IG1lbnVDb250ZXh0OiBNZW51Q29udGV4dCB9XG4gICAgfCB7IHR5cGU6ICdjb3B5TGlua1RvVmlldyc7IHZpZXc6IFYgfVxuICAgIHwgeyB0eXBlOiAnc2V0RWRpdGluZ1ZpZXcnOyBjb250ZXh0OiBDb3JlU3RhdGU8VSwgVj5bJ2VkaXRpbmdWaWV3Q29udGV4dCddIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NldERlbGV0aW5nVmlldyc7XG4gICAgICAgIGNvbnRleHQ6IENvcmVTdGF0ZTxVLCBWPlsnZGVsZXRpbmdWaWV3Q29udGV4dCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndmlld09yZGVyQ2hhbmdlJztcbiAgICAgICAgcHJldmlvdXNFbmFibGVkSW5kZXg6IG51bWJlcjtcbiAgICAgICAgbmV3RW5hYmxlZEluZGV4OiBudW1iZXI7XG4gICAgICAgIHNvdXJjZT86ICd0YWJEcmFnJyB8ICdvdmVyZmxvd0RyYWcnO1xuICAgICAgICB2aWV3VGl0bGU/OiBWWyd0aXRsZSddO1xuICAgICAgfVxuICAgIHwgeyB0eXBlOiAnc2V0QWxsVmlld3NUb2dnbGUnOyBwZXJtaXNzaW9uOiBWaWV3UGVybWlzc2lvbjsgb3BlbjogYm9vbGVhbiB9XG4gICAgfCB7IHR5cGU6ICdjcmVhdGVUZW1wb3JhcnlWaWV3JzsgdmlldzogViB9O1xuXG4gIC8vLy8vLy8vLy8vL1xuICAvLyBTb3VyY2UgLy9cbiAgLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgU291cmNlPFUgZXh0ZW5kcyBVc2VyLCBWIGV4dGVuZHMgVmlldzxVPj4gPSAoKSA9PlxuICAgIHwgVltdXG4gICAgfCBQcm9taXNlPFZbXT47XG4gIGV4cG9ydCB0eXBlIFNhdmU8VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PiA9IChcbiAgICB2aWV3czogVltdLFxuICApID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBleHBvcnQgdHlwZSBEdXBsaWNhdGU8VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PiA9IChcbiAgICB2aWV3VG9EdXBsaWNhdGU6IFYsXG4gICkgPT4gViB8IFByb21pc2U8Vj47XG4gIGV4cG9ydCB0eXBlIFVzZXJTb3VyY2U8VSBleHRlbmRzIFVzZXI+ID0gKCkgPT4gVVtdIHwgUHJvbWlzZTxVW10+O1xuICBleHBvcnQgdHlwZSBDb3B5TGluazxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+ID0gKFxuICAgIHZpZXc6IFYsXG4gICkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIGV4cG9ydCB0eXBlIFNldEFjdGl2ZVZpZXdJZDxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+ID0gKFxuICAgIGlkOiBWWydpZCddLFxuICApID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gTWFuYWdlciAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlcjxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+ID0ge1xuICAgIGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPFUsIFY+PjtcbiAgICBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFUsIFY+PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+ID0ge1xuICAgIGluaXRpYWxTdGF0ZT86IERlZXBQYXJ0aWFsPENvcmVTdGF0ZTxVLCBWPj47XG4gICAgZnVzZU9wdGlvbnM/OiBJRnVzZU9wdGlvbnM8Vj47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQ3JlYXRlTWFuYWdlcklucHV0PFUgZXh0ZW5kcyBVc2VyLCBWIGV4dGVuZHMgVmlldzxVPj4gPSB7XG4gICAgc291cmNlOiBTb3VyY2U8VSwgVj47XG4gICAgc2F2ZTogU2F2ZTxVLCBWPjtcbiAgICBkdXBsaWNhdGU6IER1cGxpY2F0ZTxVLCBWPjtcbiAgICB1c2VyU291cmNlOiBVc2VyU291cmNlPFU+O1xuICAgIHVzZXJTZWxlY3RNb2RlPzogVXNlclNlbGVjdE1vZGU7XG4gICAgb25BZGRVc2VyPzogT25BZGRVc2VyPFU+O1xuICAgIG5ld1Rvb2x0aXA/OiBzdHJpbmc7XG4gICAgY29weUxpbms6IENvcHlMaW5rPFUsIFY+O1xuICAgIHNldEFjdGl2ZVZpZXdJZDogU2V0QWN0aXZlVmlld0lkPFUsIFY+O1xuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxVLCBWPjtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFuYWdlcjxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+KHtcbiAgICBzb3VyY2UsXG4gICAgc2F2ZSxcbiAgICBkdXBsaWNhdGUsXG4gICAgdXNlclNvdXJjZSxcbiAgICB1c2VyU2VsZWN0TW9kZSxcbiAgICBvbkFkZFVzZXIsXG4gICAgbmV3VG9vbHRpcCxcbiAgICBjb3B5TGluayxcbiAgICBvcHRpb25zLFxuICAgIHNldEFjdGl2ZVZpZXdJZCxcbiAgfTogQ3JlYXRlTWFuYWdlcklucHV0PFUsIFY+KTogTWFuYWdlcjxVLCBWPiB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXRlOiBDb3JlU3RhdGU8VSwgVj4gPSB7XG4gICAgICB2aWV3czogW10sXG4gICAgICBhY3RpdmVWaWV3SWQ6IG51bGwsXG4gICAgICB0ZW1wb3JhcnlWaWV3SWQ6IG51bGwsXG4gICAgICBjb250YWluZXJXaWR0aDogMCxcbiAgICAgIGVkaXRpbmdWaWV3Q29udGV4dDogbnVsbCxcbiAgICAgIGRlbGV0aW5nVmlld0NvbnRleHQ6IG51bGwsXG4gICAgICBvdmVyZmxvdzoge1xuICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICBwaWNrZXJPcGVuOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBhbGw6IHtcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgICAgcHJpdmF0ZU9wZW46IHRydWUsXG4gICAgICAgIHNoYXJlZE9wZW46IHRydWUsXG4gICAgICAgIHB1YmxpY09wZW46IHRydWUsXG4gICAgICB9LFxuICAgICAgdXNlclNvdXJjZSxcbiAgICAgIHVzZXJTZWxlY3RNb2RlOiB1c2VyU2VsZWN0TW9kZSA/PyAnc2VsZWN0JyxcbiAgICAgIG9uQWRkVXNlcixcbiAgICAgIG5ld1Rvb2x0aXAsXG4gICAgICBoYXNTeXN0ZW1WaWV3OiB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0ZWRJbml0aWFsU3RhdGU6IENvcmVTdGF0ZTxVLCBWPiA9IGRlZmF1bHRzRGVlcChcbiAgICAgIHt9LFxuICAgICAgb3B0aW9ucz8uaW5pdGlhbFN0YXRlLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICk7XG5cbiAgICBjb25zdCBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxVLCBWPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGNvcmVTdGF0ZTogT2JzZXJ2YWJsZTxDb3JlU3RhdGU8VSwgVj4+ID0gYWN0aW9ucy5waXBlKFxuICAgICAgbWVyZ2VTY2FuKFxuICAgICAgICAoc3RhdGUsIGFjdGlvbikgPT5cbiAgICAgICAgICBmcm9tKFxuICAgICAgICAgICAgcmVkdWNlKFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGRlYm91bmNlKHNhdmUsIDIwMCksXG4gICAgICAgICAgICAgIGR1cGxpY2F0ZSxcbiAgICAgICAgICAgICAgY29weUxpbmssXG4gICAgICAgICAgICAgIHNldEFjdGl2ZVZpZXdJZCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdGVkSW5pdGlhbFN0YXRlLFxuICAgICAgICAxLFxuICAgICAgKSxcbiAgICAgIHN0YXJ0V2l0aChkZWZhdWx0ZWRJbml0aWFsU3RhdGUpLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFUsIFY+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcChzID0+IHtcbiAgICAgICAgICBjb25zdCBlbmFibGVkTm9ybWFsVmlld3M6IFZbXSA9IGdldEVuYWJsZWRWaWV3cyhzLnZpZXdzKTtcbiAgICAgICAgICBjb25zdCBhY3RpdmVWaWV3OiBWIHwgdW5kZWZpbmVkID0gZW5hYmxlZE5vcm1hbFZpZXdzLmZpbmQoXG4gICAgICAgICAgICB2aWV3ID0+IHZpZXcuaWQgPT09IHMuYWN0aXZlVmlld0lkLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBhY3RpdmUgdmlldyBpcyBub3QgY3VycmVudGx5IGVuYWJsZWQsIHdlJ2xsXG4gICAgICAgICAgLy8gZGVmYXVsdCB0byBtYWtpbmcgdGhlIGZpcnN0IGVuYWJsZWQgdmlldyBhY3RpdmUgaW5zdGVhZC5cbiAgICAgICAgICBjb25zdCBhY3RpdmVWaWV3SWQ6IFZbJ2lkJ10gfCBudWxsID0gYWN0aXZlVmlld1xuICAgICAgICAgICAgPyBhY3RpdmVWaWV3LmlkXG4gICAgICAgICAgICA6IGVuYWJsZWROb3JtYWxWaWV3cy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IGVuYWJsZWROb3JtYWxWaWV3c1swXS5pZFxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgY29uc3QgYWxsVmlld3M6IEZ1bGxWaWV3PFUsIFY+W10gPSBzLnZpZXdzLm1hcCgodmlldywgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTeXN0ZW1WaWV3OiBib29sZWFuID0gcy5oYXNTeXN0ZW1WaWV3ICYmIGkgPT09IDA7XG4gICAgICAgICAgICBjb25zdCBpc1RlbXBvcmFyeVZpZXc6IGJvb2xlYW4gPSBzLnRlbXBvcmFyeVZpZXdJZCA9PT0gdmlldy5pZDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnZpZXcsXG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHZpZXcuZW5hYmxlZCB8fCBpc1N5c3RlbVZpZXcgfHwgaXNUZW1wb3JhcnlWaWV3LFxuICAgICAgICAgICAgICBhY3RpdmU6IGFjdGl2ZVZpZXdJZCA9PT0gdmlldy5pZCxcbiAgICAgICAgICAgICAgc3lzdGVtOiBpc1N5c3RlbVZpZXcsXG4gICAgICAgICAgICAgIHRlbXBvcmFyeTogaXNUZW1wb3JhcnlWaWV3LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGFsbEVuYWJsZWRWaWV3cyA9IGdldEVuYWJsZWRWaWV3cyhhbGxWaWV3cyk7XG5cbiAgICAgICAgICBjb25zdCBkaXNwbGF5ZWRWaWV3cyA9IGNhbGN1bGF0ZURpc3BsYXllZFZpZXdzKFxuICAgICAgICAgICAgYWxsRW5hYmxlZFZpZXdzLFxuICAgICAgICAgICAgY2FsY3VsYXRlT3ZlcmZsb3dWaWV3SW5kZXgocyksXG4gICAgICAgICAgICBhY3RpdmVWaWV3SWQsXG4gICAgICAgICAgICBzLnRlbXBvcmFyeVZpZXdJZCxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZW5hYmxlZFZpZXdzID0gcy5vdmVyZmxvdy5zZWFyY2hcbiAgICAgICAgICAgID8gc2VhcmNoVmlld3MoXG4gICAgICAgICAgICAgICAgYWxsRW5hYmxlZFZpZXdzLFxuICAgICAgICAgICAgICAgIHMub3ZlcmZsb3cuc2VhcmNoLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IGFsbEVuYWJsZWRWaWV3cztcblxuICAgICAgICAgIGNvbnN0IGFsbFBlcm1hbmVudFZpZXdzID0gYWxsVmlld3MuZmlsdGVyKHZpZXcgPT4gIXZpZXcudGVtcG9yYXJ5KTtcbiAgICAgICAgICBjb25zdCBhbGxWaWV3c0ZpbHRlcmVkID0gcy5hbGwuc2VhcmNoXG4gICAgICAgICAgICA/IHNlYXJjaFZpZXdzKGFsbFBlcm1hbmVudFZpZXdzLCBzLmFsbC5zZWFyY2gsIG9wdGlvbnM/LmZ1c2VPcHRpb25zKVxuICAgICAgICAgICAgOiBhbGxQZXJtYW5lbnRWaWV3cztcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaGluZ0FsbFZpZXdzID0gISFzLmFsbC5zZWFyY2g7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgIGFsbFZpZXdzLFxuICAgICAgICAgICAgZGlzcGxheWVkVmlld3MsXG4gICAgICAgICAgICBlbmFibGVkVmlld3MsXG4gICAgICAgICAgICBhbGxFbmFibGVkVmlld3MsXG4gICAgICAgICAgICBhbGw6IHtcbiAgICAgICAgICAgICAgLi4ucy5hbGwsXG4gICAgICAgICAgICAgIHByaXZhdGVPcGVuOiBzZWFyY2hpbmdBbGxWaWV3cyB8fCBzLmFsbC5wcml2YXRlT3BlbixcbiAgICAgICAgICAgICAgcHJpdmF0ZVZpZXdzOiB2aWV3c0J5UGVybWlzc2lvbihhbGxWaWV3c0ZpbHRlcmVkLCAncHJpdmF0ZScpLFxuICAgICAgICAgICAgICBzaGFyZWRPcGVuOiBzZWFyY2hpbmdBbGxWaWV3cyB8fCBzLmFsbC5zaGFyZWRPcGVuLFxuICAgICAgICAgICAgICBzaGFyZWRWaWV3czogdmlld3NCeVBlcm1pc3Npb24oYWxsVmlld3NGaWx0ZXJlZCwgJ3NoYXJlZCcpLFxuICAgICAgICAgICAgICBwdWJsaWNPcGVuOiBzZWFyY2hpbmdBbGxWaWV3cyB8fCBzLmFsbC5wdWJsaWNPcGVuLFxuICAgICAgICAgICAgICBwdWJsaWNWaWV3czogdmlld3NCeVBlcm1pc3Npb24oYWxsVmlld3NGaWx0ZXJlZCwgJ3B1YmxpYycpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjdGl2ZVZpZXdJZDogYWN0aXZlVmlld0lkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSxcbiAgICAgICAgcmVzZXRPbkRpc2Nvbm5lY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIHN0YXRlLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgdGhlIHZpZXdzIGltbWVkaWF0ZWx5XG4gICAgYWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWQnIH0pO1xuXG4gICAgcmV0dXJuIHsgYWN0aW9ucywgc3RhdGUgfTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gU3RhdGUgcmVkdWNlciAod2l0aCBoZWxwZXJzKSAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gZ2V0RW5hYmxlZFZpZXdzPFUgZXh0ZW5kcyBVc2VyLCBWIGV4dGVuZHMgVmlldzxVPj4odmlld3M6IFZbXSk6IFZbXTtcbiAgZnVuY3Rpb24gZ2V0RW5hYmxlZFZpZXdzPFUgZXh0ZW5kcyBVc2VyLCBWIGV4dGVuZHMgVmlldzxVPj4oXG4gICAgdmlld3M6IEZ1bGxWaWV3PFUsIFY+W10sXG4gICk6IEZ1bGxWaWV3PFUsIFY+W10ge1xuICAgIHJldHVybiB2aWV3cy5maWx0ZXIoKHYsIGkpID0+IHYuZW5hYmxlZCB8fCB2LnN5c3RlbSB8fCB2LnRlbXBvcmFyeSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlcyBhbiBpbmRleCBpbiB0aGUgZW5hYmxlZCB2aWV3cyBsaXN0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4XG4gICAqIGluIHRoZSBmdWxsIHZpZXdzIGxpc3QuIFRoaXMgaXMgdXNlZCB0byByZXNvbHZlIFVJIGluZGljZXMgKHdoaWNoIG9ubHlcbiAgICogc2hvdyBlbmFibGVkIHZpZXdzKSB0byBzdGF0ZS52aWV3cyBpbmRpY2VzICh3aGljaCBpbmNsdWRlcyBhbGwgdmlld3MpLlxuICAgKi9cbiAgZnVuY3Rpb24gbWFwRW5hYmxlZEluZGV4VG9WaWV3SW5kZXg8VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PihcbiAgICB2aWV3czogVltdLFxuICAgIGVuYWJsZWRJbmRleDogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGVuYWJsZWRWaWV3cyA9IGdldEVuYWJsZWRWaWV3cyh2aWV3cyk7XG5cbiAgICBjb25zdCB0YXJnZXRWaWV3ID0gZW5hYmxlZFZpZXdzW2VuYWJsZWRJbmRleF07XG4gICAgaWYgKCF0YXJnZXRWaWV3KSByZXR1cm4gZW5hYmxlZEluZGV4O1xuXG4gICAgY29uc3Qgdmlld0luZGV4ID0gdmlld3MuZmluZEluZGV4KHZpZXcgPT4gdmlldy5pZCA9PT0gdGFyZ2V0Vmlldy5pZCk7XG4gICAgcmV0dXJuIHZpZXdJbmRleCA9PT0gLTEgPyBlbmFibGVkSW5kZXggOiB2aWV3SW5kZXg7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVPdmVyZmxvd1ZpZXdJbmRleDxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8VSwgVj4sXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgZW5hYmxlZFZpZXdzID0gZ2V0RW5hYmxlZFZpZXdzKHN0YXRlLnZpZXdzKTtcblxuICAgIC8vIFRhYnMgaGF2ZSBhIG1pbmltdW0gd2lkdGggb2YgOTJweC5cbiAgICBjb25zdCBwb3NzaWJsZVNsb3RDb3VudCA9IE1hdGguZmxvb3Ioc3RhdGUuY29udGFpbmVyV2lkdGggLyA5Mik7XG5cbiAgICAvLyBUaGUgXCJhbGwgdmlld3NcIiBzaWRlYmFyIHRyaWdnZXIgdGFrZXMgdXAgb25lIHNsb3QuXG4gICAgY29uc3QgYXZhaWxhYmxlU2xvdENvdW50ID0gcG9zc2libGVTbG90Q291bnQgLSAxO1xuXG4gICAgLy8gSWYgdGhlcmUgYXJlIHRvbyBtYW55IHRhYnMsIHRoZSBcIk4gbW9yZVwiIHRyaWdnZXIgdGFrZXMgdXAgb25lIHNsb3QgYXMgd2VsbC5cbiAgICAvLyBCdXQgd2Ugd2FudCB0byBhdm9pZCB0aGUgXCIxIG1vcmVcIiBjYXNlLCBzbyB3ZSBvbmx5IHVzZSBhIHNsb3QgZm9yIFwiTiBtb3JlXCIgaWYgTiAhPSAxLlxuICAgIGlmIChhdmFpbGFibGVTbG90Q291bnQgPj0gZW5hYmxlZFZpZXdzLmxlbmd0aCkgcmV0dXJuIGVuYWJsZWRWaWV3cy5sZW5ndGg7XG4gICAgZWxzZSByZXR1cm4gYXZhaWxhYmxlU2xvdENvdW50IC0gMTsgLy8gdGhlIFwiTiBtb3JlXCIgdXNlcyB1cCBhIHNsb3QuXG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVEaXNwbGF5ZWRWaWV3czxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+KFxuICAgIGZ1bGxWaWV3czogRnVsbFZpZXc8VSwgVj5bXSxcbiAgICBvdmVyZmxvd1ZpZXdJbmRleDogbnVtYmVyLFxuICAgIGFjdGl2ZVZpZXdJZDogQ29yZVN0YXRlPFUsIFY+WydhY3RpdmVWaWV3SWQnXSxcbiAgICB0ZW1wb3JhcnlWaWV3SWQ6IENvcmVTdGF0ZTxVLCBWPlsndGVtcG9yYXJ5Vmlld0lkJ10sXG4gICk6IEZ1bGxWaWV3PFUsIFY+W10ge1xuICAgIGNvbnN0IGRpc3BsYXllZFZpZXdzID0gZnVsbFZpZXdzLnNsaWNlKDAsIG92ZXJmbG93Vmlld0luZGV4KTtcblxuICAgIGNvbnN0IHZpZXdzVG9BbHdheXNEaXNwbGF5OiBGdWxsVmlldzxVLCBWPltdID0gW107XG5cbiAgICAvLyBUaGUgYWN0aXZlIHZpZXcgc2hvdWxkIGFsd2F5cyBiZSBkaXNwbGF5ZWQgaWYgaXQgZXhpc3RzXG4gICAgY29uc3QgYWN0aXZlVmlld0luRGlzcGxheSA9IGRpc3BsYXllZFZpZXdzLnNvbWUoXG4gICAgICB2aWV3ID0+IHZpZXcuaWQgPT09IGFjdGl2ZVZpZXdJZCxcbiAgICApO1xuICAgIGlmIChhY3RpdmVWaWV3SWQgIT09IG51bGwgJiYgIWFjdGl2ZVZpZXdJbkRpc3BsYXkpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSBmdWxsVmlld3MuZmluZCh2aWV3ID0+IHZpZXcuaWQgPT09IGFjdGl2ZVZpZXdJZCk7XG4gICAgICBpZiAoYWN0aXZlVmlldyAmJiBkaXNwbGF5ZWRWaWV3cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZpZXdzVG9BbHdheXNEaXNwbGF5LnB1c2goYWN0aXZlVmlldyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIHRyeSB0byBkaXNwbGF5IHRoZSB0ZW1wb3JhcnkgdmlldyBpZiBpdCBleGlzdHNcbiAgICBjb25zdCB0ZW1wb3JhcnlWaWV3SW5EaXNwbGF5ID0gZGlzcGxheWVkVmlld3Muc29tZShcbiAgICAgIHZpZXcgPT4gdmlldy5pZCA9PT0gdGVtcG9yYXJ5Vmlld0lkLFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgdGVtcG9yYXJ5Vmlld0lkICE9PSBudWxsICYmXG4gICAgICAhdGVtcG9yYXJ5Vmlld0luRGlzcGxheSAmJlxuICAgICAgdGVtcG9yYXJ5Vmlld0lkICE9IGFjdGl2ZVZpZXdJZFxuICAgICkge1xuICAgICAgY29uc3QgdGVtcG9yYXJ5VmlldyA9IGZ1bGxWaWV3cy5maW5kKHZpZXcgPT4gdmlldy5pZCA9PT0gdGVtcG9yYXJ5Vmlld0lkKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGVtcG9yYXJ5VmlldyAmJlxuICAgICAgICBkaXNwbGF5ZWRWaWV3cy5sZW5ndGggPiB2aWV3c1RvQWx3YXlzRGlzcGxheS5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICB2aWV3c1RvQWx3YXlzRGlzcGxheS5wdXNoKHRlbXBvcmFyeVZpZXcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2aWV3c1RvQWx3YXlzRGlzcGxheS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBudW1WaWV3c1RvUmVwbGFjZTogbnVtYmVyID0gdmlld3NUb0Fsd2F5c0Rpc3BsYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZGlzcGxheWVkVmlld3Muc2xpY2UoMCwgLTEgKiBudW1WaWV3c1RvUmVwbGFjZSksXG4gICAgICAgIC4uLnZpZXdzVG9BbHdheXNEaXNwbGF5LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGxheWVkVmlld3M7XG4gIH1cblxuICBmdW5jdGlvbiB2aWV3c0J5UGVybWlzc2lvbjxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+KFxuICAgIHZpZXdzOiBGdWxsVmlldzxVLCBWPltdLFxuICAgIHBlcm1pc3Npb246IFZpZXdQZXJtaXNzaW9uLFxuICApOiBGdWxsVmlldzxVLCBWPltdIHtcbiAgICByZXR1cm4gc29ydEJ5KFxuICAgICAgdmlld3MuZmlsdGVyKHZpZXcgPT4gdmlldy5wZXJtaXNzaW9uID09PSBwZXJtaXNzaW9uKSxcbiAgICAgIFt2ID0+ICF2LnN5c3RlbSwgJ3RpdGxlJ10sXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlYXJjaFZpZXdzPFUgZXh0ZW5kcyBVc2VyLCBWIGV4dGVuZHMgVmlldzxVPj4oXG4gICAgdmlld3M6IEZ1bGxWaWV3PFUsIFY+W10sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSUZ1c2VPcHRpb25zPFY+LFxuICApOiBGdWxsVmlldzxVLCBWPltdIHtcbiAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2Uodmlld3MsIHtcbiAgICAgIHRocmVzaG9sZDogMC4yLFxuICAgICAga2V5czogWyd0aXRsZSddLFxuICAgICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbWF0Y2hlZE9wdGlvbnM6IEZ1c2VSZXN1bHQ8RnVsbFZpZXc8VSwgVj4+W10gPSBmdXNlLnNlYXJjaChxdWVyeSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiAoe1xuICAgICAgLi4ucmVzdWx0Lml0ZW0sXG4gICAgICB0aXRsZUhpZ2hsaWdodEluZGljZXM6IFtcbiAgICAgICAgLi4uKHJlc3VsdC5tYXRjaGVzPy5maW5kKG1hdGNoID0+IG1hdGNoLmtleSA9PT0gJ3RpdGxlJyk/LmluZGljZXMgPz9cbiAgICAgICAgICBbXSksXG4gICAgICBdLFxuICAgIH0pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5leHRCZXN0QWN0aXZlVmlldzxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8VSwgVj4sXG4gICk6IFZbJ2lkJ10gfCBudWxsIHtcbiAgICBjb25zdCBlbmFibGVkVmlld3MgPSBnZXRFbmFibGVkVmlld3Moc3RhdGUudmlld3MpO1xuICAgIGNvbnN0IGN1cnJlbnRBY3RpdmVWaWV3SW5kZXggPSBlbmFibGVkVmlld3MuZmluZEluZGV4KFxuICAgICAgdmlldyA9PiB2aWV3LmlkID09PSBzdGF0ZS5hY3RpdmVWaWV3SWQsXG4gICAgKTtcblxuICAgIGlmIChlbmFibGVkVmlld3MubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoY3VycmVudEFjdGl2ZVZpZXdJbmRleCA9PT0gLTEpIHJldHVybiBlbmFibGVkVmlld3NbMF0uaWQ7XG4gICAgcmV0dXJuIChcbiAgICAgIGVuYWJsZWRWaWV3c1tjdXJyZW50QWN0aXZlVmlld0luZGV4ICsgMV0/LmlkID8/XG4gICAgICBlbmFibGVkVmlld3NbY3VycmVudEFjdGl2ZVZpZXdJbmRleCAtIDFdPy5pZCA/P1xuICAgICAgZW5hYmxlZFZpZXdzWzBdLmlkXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVZpZXc8VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPFUsIFY+LFxuICAgIGlkOiBWWydpZCddLFxuICApOiBDb3JlU3RhdGU8VSwgVj4ge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXdJZCA9XG4gICAgICBzdGF0ZS5hY3RpdmVWaWV3SWQgPT09IGlkXG4gICAgICAgID8gZ2V0TmV4dEJlc3RBY3RpdmVWaWV3KHN0YXRlKVxuICAgICAgICA6IHN0YXRlLmFjdGl2ZVZpZXdJZDtcbiAgICBjb25zdCB0ZW1wb3JhcnlWaWV3SWQgPVxuICAgICAgc3RhdGUudGVtcG9yYXJ5Vmlld0lkID09PSBpZCA/IG51bGwgOiBzdGF0ZS50ZW1wb3JhcnlWaWV3SWQ7XG4gICAgY29uc3Qgdmlld3MgPSBzdGF0ZS52aWV3cy5maWx0ZXIodmlldyA9PiB2aWV3LmlkICE9PSBpZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgdmlld3MsXG4gICAgICBhY3RpdmVWaWV3SWQsXG4gICAgICB0ZW1wb3JhcnlWaWV3SWQsXG4gICAgICBkZWxldGluZ1ZpZXdDb250ZXh0OiBudWxsLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzZXRFbmFibGVkPFUgZXh0ZW5kcyBVc2VyLCBWIGV4dGVuZHMgVmlldzxVPj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxVLCBWPixcbiAgICBpZDogVlsnaWQnXSxcbiAgICBlbmFibGVkOiBib29sZWFuLFxuICApOiBDb3JlU3RhdGU8VSwgVj4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHZpZXdzOiBzdGF0ZS52aWV3cy5tYXAodmlldyA9PlxuICAgICAgICB2aWV3LmlkID09PSBpZCA/IHsgLi4udmlldywgZW5hYmxlZCB9IDogdmlldyxcbiAgICAgICksXG4gICAgICBhY3RpdmVWaWV3SWQ6XG4gICAgICAgICFlbmFibGVkICYmIHN0YXRlLmFjdGl2ZVZpZXdJZCA9PT0gaWRcbiAgICAgICAgICA/IGdldE5leHRCZXN0QWN0aXZlVmlldyhzdGF0ZSlcbiAgICAgICAgICA6IHN0YXRlLmFjdGl2ZVZpZXdJZCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gd2l0aER1cGxpY2F0ZVZpZXc8VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PihcbiAgICB2aWV3czogVltdLFxuICAgIGR1cGxpY2F0ZWRWaWV3OiBWLFxuICAgIG5ld1ZpZXc6IFYsXG4gICk6IFZbXSB7XG4gICAgY29uc3Qgc291cmNlSW5kZXggPSB2aWV3cy5maW5kSW5kZXgodmlldyA9PiB2aWV3LmlkID09PSBkdXBsaWNhdGVkVmlldy5pZCk7XG4gICAgaWYgKHNvdXJjZUluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIFtuZXdWaWV3LCAuLi52aWV3c107XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLnZpZXdzLnNsaWNlKDAsIHNvdXJjZUluZGV4ICsgMSksXG4gICAgICAgIG5ld1ZpZXcsXG4gICAgICAgIC4uLnZpZXdzLnNsaWNlKHNvdXJjZUluZGV4ICsgMSksXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHZpZXdPcmRlckNoYW5nZTxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8VSwgVj4sXG4gICAgcHJldmlvdXNFbmFibGVkSW5kZXg6IG51bWJlcixcbiAgICBuZXdFbmFibGVkSW5kZXg6IG51bWJlcixcbiAgKTogeyBzdGF0ZTogQ29yZVN0YXRlPFUsIFY+OyBzaG91bGRTYXZlOiBib29sZWFuIH0ge1xuICAgIGlmIChcbiAgICAgIHN0YXRlLmhhc1N5c3RlbVZpZXcgJiZcbiAgICAgIChwcmV2aW91c0VuYWJsZWRJbmRleCA9PT0gMCB8fCBuZXdFbmFibGVkSW5kZXggPT09IDApXG4gICAgKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZSwgc2hvdWxkU2F2ZTogZmFsc2UgfTsgLy8gS2VlcCBzeXN0ZW0gdmlldyAoaW5kZXggMCkgaW4gcGxhY2VcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxQcmV2aW91c0luZGV4ID0gbWFwRW5hYmxlZEluZGV4VG9WaWV3SW5kZXgoXG4gICAgICBzdGF0ZS52aWV3cyxcbiAgICAgIHByZXZpb3VzRW5hYmxlZEluZGV4LFxuICAgICk7XG4gICAgY29uc3QgYWN0dWFsTmV3SW5kZXggPSBtYXBFbmFibGVkSW5kZXhUb1ZpZXdJbmRleChcbiAgICAgIHN0YXRlLnZpZXdzLFxuICAgICAgbmV3RW5hYmxlZEluZGV4LFxuICAgICk7XG5cbiAgICBjb25zdCBpdGVtID0gc3RhdGUudmlld3NbYWN0dWFsUHJldmlvdXNJbmRleF07XG4gICAgY29uc3Qgd2l0aG91dEl0ZW0gPSBzdGF0ZS52aWV3cy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGFjdHVhbFByZXZpb3VzSW5kZXgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2aWV3czogW1xuICAgICAgICAgIC4uLndpdGhvdXRJdGVtLnNsaWNlKDAsIGFjdHVhbE5ld0luZGV4KSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIC4uLndpdGhvdXRJdGVtLnNsaWNlKGFjdHVhbE5ld0luZGV4KSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBzaG91bGRTYXZlOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQZXJtYW5lbnRWaWV3czxVIGV4dGVuZHMgVXNlciwgViBleHRlbmRzIFZpZXc8VT4+KFxuICAgIHZpZXdzOiBWW10sXG4gICAgdGVtcG9yYXJ5Vmlld0lkOiBDb3JlU3RhdGU8VSwgVj5bJ3RlbXBvcmFyeVZpZXdJZCddLFxuICApOiBWW10ge1xuICAgIHJldHVybiB2aWV3cy5maWx0ZXIodmlldyA9PiB2aWV3LmlkICE9IHRlbXBvcmFyeVZpZXdJZCk7XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlUGVybWFuZW50Vmlld3M8VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PihcbiAgICBzYXZlOiBTYXZlPFUsIFY+LFxuICAgIHZpZXdzOiBWW10sXG4gICAgdGVtcG9yYXJ5Vmlld0lkOiBDb3JlU3RhdGU8VSwgVj5bJ3RlbXBvcmFyeVZpZXdJZCddLFxuICApIHtcbiAgICBjb25zdCBwZXJtYW5lbnRWaWV3cyA9IGdldFBlcm1hbmVudFZpZXdzKHZpZXdzLCB0ZW1wb3JhcnlWaWV3SWQpO1xuXG4gICAgc2F2ZShwZXJtYW5lbnRWaWV3cyk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWR1Y2U8VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPFUsIFY+LFxuICAgIGFjdGlvbjogQWN0aW9uPFUsIFY+LFxuICAgIHNvdXJjZTogU291cmNlPFUsIFY+LFxuICAgIHNhdmU6IFNhdmU8VSwgVj4sXG4gICAgZHVwbGljYXRlOiBEdXBsaWNhdGU8VSwgVj4sXG4gICAgY29weUxpbms6IENvcHlMaW5rPFUsIFY+LFxuICAgIHNldEFjdGl2ZVZpZXdJZDogU2V0QWN0aXZlVmlld0lkPFUsIFY+LFxuICApOiBQcm9taXNlPENvcmVTdGF0ZTxVLCBWPj4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2xvYWQnOlxuICAgICAgICBjb25zdCB2aWV3cyA9IGF3YWl0IHNvdXJjZSgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHZpZXdzLFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdzZXRBY3RpdmVWaWV3Jzoge1xuICAgICAgICBjb25zdCBhY3RpdmVWaWV3ID0gc3RhdGUudmlld3MuZmluZCh2ID0+IHYuaWQgPT09IGFjdGlvbi5pZCk7XG4gICAgICAgIGNvbnN0IHZpZXdzID1cbiAgICAgICAgICBhY3RpdmVWaWV3ICYmICFhY3RpdmVWaWV3LmVuYWJsZWRcbiAgICAgICAgICAgID8gc3RhdGUudmlld3MubWFwKHZpZXcgPT5cbiAgICAgICAgICAgICAgICB2aWV3LmlkID09PSBhY3Rpb24uaWQgPyB7IC4uLnZpZXcsIGVuYWJsZWQ6IHRydWUgfSA6IHZpZXcsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogc3RhdGUudmlld3M7XG4gICAgICAgIC8vIElmIGVuYWJsaW5nIHRoZSB2aWV3IGNoYW5nZWQgdGhlIHZpZXdzLCB3ZSBuZWVkIHRvIHNhdmUuXG4gICAgICAgIGlmICh2aWV3cyAhPT0gc3RhdGUudmlld3MpIHtcbiAgICAgICAgICBzYXZlUGVybWFuZW50Vmlld3Moc2F2ZSwgdmlld3MsIHN0YXRlLnRlbXBvcmFyeVZpZXdJZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90aWZ5IHRoZSBjYWxsZXIgdGhhdCB0aGUgYWN0aXZlIHZpZXcgaGFzIGNoYW5nZWRcbiAgICAgICAgc2V0QWN0aXZlVmlld0lkKGFjdGlvbi5pZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgYWN0aXZlVmlld0lkOiBhY3Rpb24uaWQsXG4gICAgICAgICAgdmlld3MsXG4gICAgICAgICAgYWxsOiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5hbGwsXG4gICAgICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLm92ZXJmbG93LFxuICAgICAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlICdzZXRFbmFibGVkJzoge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHNldEVuYWJsZWQoc3RhdGUsIGFjdGlvbi5pZCwgYWN0aW9uLmVuYWJsZWQpO1xuICAgICAgICBzYXZlUGVybWFuZW50Vmlld3Moc2F2ZSwgbmV3U3RhdGUudmlld3MsIG5ld1N0YXRlLnRlbXBvcmFyeVZpZXdJZCk7XG4gICAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnc2V0Q29udGFpbmVyV2lkdGgnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBhY3Rpb24ud2lkdGgsXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ3NldE92ZXJmbG93UGlja2VyT3Blbic6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgb3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLm92ZXJmbG93LFxuICAgICAgICAgICAgcGlja2VyT3BlbjogYWN0aW9uLm9wZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnc2V0T3ZlcmZsb3dTZWFyY2hRdWVyeSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgb3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLm92ZXJmbG93LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucXVlcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnc2V0QWxsVmlld3NTZWFyY2hRdWVyeSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgYWxsOiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5hbGwsXG4gICAgICAgICAgICBzZWFyY2g6IGFjdGlvbi5xdWVyeSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICd1cGRhdGVWaWV3Jzoge1xuICAgICAgICBpZiAoYWN0aW9uLnZpZXcuaWQgIT0gc3RhdGUudGVtcG9yYXJ5Vmlld0lkKSB7XG4gICAgICAgICAgY29uc3Qgdmlld3MgPSBzdGF0ZS52aWV3cy5tYXAodmlldyA9PlxuICAgICAgICAgICAgdmlldy5pZCA9PT0gYWN0aW9uLnZpZXcuaWQgPyBhY3Rpb24udmlldyA6IHZpZXcsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzYXZlUGVybWFuZW50Vmlld3Moc2F2ZSwgdmlld3MsIHN0YXRlLnRlbXBvcmFyeVZpZXdJZCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXBkYXRpbmcgYSB0ZW1wb3JhcnkgdmlldyBzYXZlcyB0aGUgdmlldyBhbmQgbWFrZXMgaXQgcGVybWFuZW50XG4gICAgICAgICAgY29uc3QgdGVtcG9yYXJ5Vmlld1RvU2F2ZSA9IGF3YWl0IGR1cGxpY2F0ZSh7IC4uLmFjdGlvbi52aWV3IH0pO1xuXG4gICAgICAgICAgY29uc3Qgdmlld3MgPSBzdGF0ZS52aWV3cy5tYXAodmlldyA9PlxuICAgICAgICAgICAgdmlldy5pZCA9PT0gYWN0aW9uLnZpZXcuaWQgPyB0ZW1wb3JhcnlWaWV3VG9TYXZlIDogdmlldyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgc2F2ZVBlcm1hbmVudFZpZXdzKHNhdmUsIHZpZXdzLCBudWxsKTtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHZpZXcgd2UganVzdCBzYXZlZCBpcyB0aGUgYWN0aXZlIHZpZXdcbiAgICAgICAgICBzZXRBY3RpdmVWaWV3SWQodGVtcG9yYXJ5Vmlld1RvU2F2ZS5pZCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLFxuICAgICAgICAgICAgYWN0aXZlVmlld0lkOiB0ZW1wb3JhcnlWaWV3VG9TYXZlLmlkLFxuICAgICAgICAgICAgdGVtcG9yYXJ5Vmlld0lkOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSAnZGVsZXRlVmlldyc6IHtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBkZWxldGVWaWV3KHN0YXRlLCBhY3Rpb24udmlldy5pZCk7XG4gICAgICAgIHNhdmVQZXJtYW5lbnRWaWV3cyhzYXZlLCBuZXdTdGF0ZS52aWV3cywgc3RhdGUudGVtcG9yYXJ5Vmlld0lkKTtcbiAgICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdkdXBsaWNhdGVWaWV3Jzoge1xuICAgICAgICBjb25zdCBuZXdWaWV3ID0gYXdhaXQgZHVwbGljYXRlKHsgLi4uYWN0aW9uLnZpZXcgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgdmlld3M6IHdpdGhEdXBsaWNhdGVWaWV3KHN0YXRlLnZpZXdzLCBhY3Rpb24udmlldywgbmV3VmlldyksXG4gICAgICAgICAgZWRpdGluZ1ZpZXdDb250ZXh0OiB7XG4gICAgICAgICAgICBpZDogbmV3Vmlldy5pZCxcbiAgICAgICAgICAgIGF1dG9SZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZW51Q29udGV4dDogYWN0aW9uLm1lbnVDb250ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aXZlVmlld0lkOiBuZXdWaWV3LmlkLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjb3B5TGlua1RvVmlldyc6XG4gICAgICAgIGF3YWl0IGNvcHlMaW5rKGFjdGlvbi52aWV3KTtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuXG4gICAgICBjYXNlICd2aWV3T3JkZXJDaGFuZ2UnOiB7XG4gICAgICAgIGNvbnN0IHsgc3RhdGU6IG5ld1N0YXRlLCBzaG91bGRTYXZlIH0gPSB2aWV3T3JkZXJDaGFuZ2UoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgYWN0aW9uLnByZXZpb3VzRW5hYmxlZEluZGV4LFxuICAgICAgICAgIGFjdGlvbi5uZXdFbmFibGVkSW5kZXgsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzaG91bGRTYXZlKSB7XG4gICAgICAgICAgc2F2ZVBlcm1hbmVudFZpZXdzKHNhdmUsIG5ld1N0YXRlLnZpZXdzLCBzdGF0ZS50ZW1wb3JhcnlWaWV3SWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnc2V0QWxsVmlld3NUb2dnbGUnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGFsbDoge1xuICAgICAgICAgICAgLi4uc3RhdGUuYWxsLFxuICAgICAgICAgICAgcHJpdmF0ZU9wZW46XG4gICAgICAgICAgICAgIGFjdGlvbi5wZXJtaXNzaW9uID09PSAncHJpdmF0ZSdcbiAgICAgICAgICAgICAgICA/IGFjdGlvbi5vcGVuXG4gICAgICAgICAgICAgICAgOiBzdGF0ZS5hbGwucHJpdmF0ZU9wZW4sXG4gICAgICAgICAgICBzaGFyZWRPcGVuOlxuICAgICAgICAgICAgICBhY3Rpb24ucGVybWlzc2lvbiA9PT0gJ3NoYXJlZCdcbiAgICAgICAgICAgICAgICA/IGFjdGlvbi5vcGVuXG4gICAgICAgICAgICAgICAgOiBzdGF0ZS5hbGwuc2hhcmVkT3BlbixcbiAgICAgICAgICAgIHB1YmxpY09wZW46XG4gICAgICAgICAgICAgIGFjdGlvbi5wZXJtaXNzaW9uID09PSAncHVibGljJ1xuICAgICAgICAgICAgICAgID8gYWN0aW9uLm9wZW5cbiAgICAgICAgICAgICAgICA6IHN0YXRlLmFsbC5wdWJsaWNPcGVuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ3NldEVkaXRpbmdWaWV3JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBlZGl0aW5nVmlld0NvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdzZXREZWxldGluZ1ZpZXcnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGRlbGV0aW5nVmlld0NvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdjcmVhdGVUZW1wb3JhcnlWaWV3JzpcbiAgICAgICAgY29uc3QgZXhpc3RpbmdQZXJtYW5lbnRWaWV3cyA9IGdldFBlcm1hbmVudFZpZXdzKFxuICAgICAgICAgIHN0YXRlLnZpZXdzLFxuICAgICAgICAgIHN0YXRlLnRlbXBvcmFyeVZpZXdJZCxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBTd2FwIHRoZSBhY3RpdmUgdmlldyB0byB0aGUgdGVtcG9yYXJ5IHZpZXdcbiAgICAgICAgc2V0QWN0aXZlVmlld0lkKGFjdGlvbi52aWV3LmlkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICB0ZW1wb3JhcnlWaWV3SWQ6IGFjdGlvbi52aWV3LmlkLFxuICAgICAgICAgIGFjdGl2ZVZpZXdJZDogYWN0aW9uLnZpZXcuaWQsXG4gICAgICAgICAgdmlld3M6IFsuLi5leGlzdGluZ1Blcm1hbmVudFZpZXdzLCBhY3Rpb24udmlld10sXG4gICAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFV0aWxpdGllcyAvL1xuICAvLy8vLy8vLy8vLy8vLy9cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UGVybWlzc2lvblRpdGxlKHBlcm1pc3Npb246IFZpZXdQZXJtaXNzaW9uKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHBlcm1pc3Npb24pIHtcbiAgICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgICByZXR1cm4gJ1ByaXZhdGUnO1xuICAgICAgY2FzZSAnc2hhcmVkJzpcbiAgICAgICAgcmV0dXJuICdTaGFyZWQnO1xuICAgICAgY2FzZSAncHVibGljJzpcbiAgICAgICAgcmV0dXJuICdQdWJsaWMnO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQZXJtaXNzaW9uRGVzY3JpcHRpb24ocGVybWlzc2lvbjogVmlld1Blcm1pc3Npb24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAocGVybWlzc2lvbikge1xuICAgICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICAgIHJldHVybiAnUHJpdmF0ZSAtIE9ubHkgYXZhaWxhYmxlIHRvIHlvdSc7XG4gICAgICBjYXNlICdzaGFyZWQnOlxuICAgICAgICByZXR1cm4gJ1NoYXJlZCAtIE9ubHkgdmlzaWJsZSB0byB0aG9zZSB3aXRoIGFjY2Vzcyc7XG4gICAgICBjYXNlICdwdWJsaWMnOlxuICAgICAgICByZXR1cm4gJ1B1YmxpYyAtIFZpc2libGUgdG8gZXZlcnlvbmUnO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1NoYXJlZFZpZXc8VSBleHRlbmRzIFVzZXIsIFYgZXh0ZW5kcyBWaWV3PFU+PihcbiAgICB2aWV3PzogRnVsbFZpZXc8VSwgVj4sXG4gICk6IHZpZXcgaXMgRnVsbFZpZXc8VSwgVj4gJiB7IHBlcm1pc3Npb246ICdzaGFyZWQnOyBzaGFyZWRVc2VyczogVVtdIH0ge1xuICAgIHJldHVybiB2aWV3Py5wZXJtaXNzaW9uID09PSAnc2hhcmVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBTZWFyY2hTZWxlY3RVc2VyPFU+IGl0ZW1zIGJhY2sgdG8gVVtdIGZvciBzdG9yYWdlIGluIHNoYXJlZFVzZXJzLlxuICAgKlxuICAgKiBDYXN0IHJlcXVpcmVkIGJlY2F1c2UgVHlwZVNjcmlwdCBjYW5ub3QgcHJvdmUgdGhhdCBkZXN0cnVjdHVyaW5nIGBuZXdgXG4gICAqIGZyb20gYFUgJiB7IG5ldzogYm9vbGVhbiB9YCB5aWVsZHMgZXhhY3RseSBgVWAgKHNwcmVhZC9yZXN0IGRvZXNuJ3RcbiAgICogbmFycm93IGludGVyc2VjdGlvbiB0eXBlcykuXG4gICAqXG4gICAqIC0gU3RyaXBzIGBuZXc6IGZhbHNlYCBzbyBpc0VxdWFsKCkgY29tcGFyaXNvbnMgd29yayAob3JpZ2luYWwgdXNlcnMgbGFjayBgbmV3YClcbiAgICogLSBQcmVzZXJ2ZXMgYG5ldzogdHJ1ZWAgc28gdGhlIGJhY2tlbmQga25vd3Mgd2hpY2ggdXNlcnMgdG8gY3JlYXRlXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gdG9TaGFyZWRVc2VyczxVIGV4dGVuZHMgVXNlcj4oXG4gICAgdXNlcnM6IFNlYXJjaFNlbGVjdFVzZXI8VT5bXSxcbiAgKTogVVtdIHtcbiAgICByZXR1cm4gdXNlcnMubWFwKHVzZXIgPT4ge1xuICAgICAgaWYgKHVzZXIubmV3KSB7XG4gICAgICAgIHJldHVybiB1c2VyIGFzIHVua25vd24gYXMgVTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgbmV3OiBfaXNOZXcsIC4uLnJlc3QgfSA9IHVzZXI7XG4gICAgICByZXR1cm4gcmVzdCBhcyB1bmtub3duIGFzIFU7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ContentChild, Input, } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common";
|
|
4
|
-
import * as i2 from "../../../input/button/button.component";
|
|
5
|
-
import * as i3 from "../../../overlay/modal/dialog/dialog.component";
|
|
6
|
-
import * as i4 from "../edit-view/edit-view.component";
|
|
7
|
-
import * as i5 from "../../../overlay/callout/menu/menu.component";
|
|
8
|
-
import * as i6 from "../../../overlay/callout/menu/menu-item/menu-item.component";
|
|
9
|
-
export class ViewMenuComponent {
|
|
10
|
-
constructor(el) {
|
|
11
|
-
this.el = el;
|
|
12
|
-
this.menuContext = 'tab';
|
|
13
|
-
}
|
|
14
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ViewMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ViewMenuComponent, selector: "riv-view-menu", inputs: { manager: "manager", view: "view", menuContext: "menuContext" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["menuTrigger"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"view\">\n <riv-menu\n #menu\n [preferredPosition]=\"'bottom-right'\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngIf=\"triggerTemplate\">\n <ng-template #trigger>\n <ng-container [ngTemplateOutlet]=\"triggerTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled,\n source: 'menu'\n })\n \"\n [disabled]=\"view.system || view.temporary\"\n [attr.aria-disabled]=\"view.system || view.temporary ? 'true' : null\"\n >\n {{ view.enabled ? 'Hide tab' : 'Show tab' }}\n </button>\n <div class=\"riv-divider\"></div>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: false, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n Edit view\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: true, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n Rename view\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({ type: 'duplicateView', view, menuContext })\n \"\n [disabled]=\"view.temporary\"\n [attr.aria-disabled]=\"view.temporary ? 'true' : null\"\n >\n Duplicate view\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setDeletingView',\n context: { id: view.id, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n Delete view\n </button>\n <div class=\"riv-divider\"></div>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"manager?.actions?.next({ type: 'copyLinkToView', view })\"\n [disabled]=\"view.temporary\"\n [attr.aria-disabled]=\"view.temporary ? 'true' : null\"\n >\n Copy link to view\n </button>\n </riv-menu>\n\n <ng-container *ngIf=\"manager?.state | async; let state\">\n <ng-container *ngIf=\"state.editingViewContext; let editingViewContext\">\n <riv-edit-view\n *ngIf=\"\n editingViewContext.id === view.id &&\n editingViewContext.menuContext === menuContext\n \"\n [view]=\"view\"\n [userSource]=\"state.userSource\"\n [userSelectMode]=\"state.userSelectMode\"\n [onAddUser]=\"state.onAddUser\"\n [newTooltip]=\"state.newTooltip\"\n [autoSelectName]=\"editingViewContext.autoRename\"\n [anchor]=\"el.nativeElement\"\n (save)=\"manager?.actions?.next({ type: 'updateView', view: $event })\"\n (delete)=\"manager?.actions?.next({ type: 'deleteView', view: $event })\"\n (close)=\"\n manager?.actions?.next({ type: 'setEditingView', context: null })\n \"\n ></riv-edit-view>\n </ng-container>\n\n <ng-container *ngIf=\"state.deletingViewContext; let deletingViewContext\">\n <riv-dialog\n *ngIf=\"\n deletingViewContext.id === view.id &&\n deletingViewContext.menuContext === menuContext\n \"\n [title]=\"'Delete view'\"\n (close)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n <div class=\"delete-dialog\">\n <div class=\"delete-title\">\n Are you sure you want to delete the following view?\n </div>\n <p>{{ view.title }}</p>\n </div>\n <footer class=\"delete-footer\">\n <button\n type=\"button\"\n rivButton\n (click)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'danger'\"\n (click)=\"\n manager?.actions?.next({\n type: 'deleteView',\n view\n })\n \"\n >\n Delete view\n </button>\n </footer>\n </riv-dialog>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:inline-flex;align-items:stretch}riv-menu{width:100%;max-width:100%;height:100%;max-height:100%}.delete-dialog{padding:var(--size-xlarge);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 120);max-width:100%}.delete-title{font:var(--title-02)}.delete-footer{padding:var(--size-medium);display:flex;justify-content:space-between;gap:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.DialogComponent, selector: "riv-dialog", inputs: ["title", "minWidth", "customBody", "customFooter"], outputs: ["close"] }, { kind: "component", type: i4.EditViewComponent, selector: "riv-edit-view", inputs: ["anchor", "autoSelectName", "view", "userSource", "userSelectMode", "onAddUser", "newTooltip", "mode"], outputs: ["save", "delete", "close"] }, { kind: "component", type: i5.MenuComponent, selector: "riv-menu", inputs: ["preferredPosition", "disabled"] }, { kind: "component", type: i6.MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
16
|
-
}
|
|
17
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ViewMenuComponent, decorators: [{
|
|
18
|
-
type: Component,
|
|
19
|
-
args: [{ selector: 'riv-view-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"view\">\n <riv-menu\n #menu\n [preferredPosition]=\"'bottom-right'\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngIf=\"triggerTemplate\">\n <ng-template #trigger>\n <ng-container [ngTemplateOutlet]=\"triggerTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled,\n source: 'menu'\n })\n \"\n [disabled]=\"view.system || view.temporary\"\n [attr.aria-disabled]=\"view.system || view.temporary ? 'true' : null\"\n >\n {{ view.enabled ? 'Hide tab' : 'Show tab' }}\n </button>\n <div class=\"riv-divider\"></div>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: false, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n Edit view\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: true, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n Rename view\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({ type: 'duplicateView', view, menuContext })\n \"\n [disabled]=\"view.temporary\"\n [attr.aria-disabled]=\"view.temporary ? 'true' : null\"\n >\n Duplicate view\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setDeletingView',\n context: { id: view.id, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n Delete view\n </button>\n <div class=\"riv-divider\"></div>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"manager?.actions?.next({ type: 'copyLinkToView', view })\"\n [disabled]=\"view.temporary\"\n [attr.aria-disabled]=\"view.temporary ? 'true' : null\"\n >\n Copy link to view\n </button>\n </riv-menu>\n\n <ng-container *ngIf=\"manager?.state | async; let state\">\n <ng-container *ngIf=\"state.editingViewContext; let editingViewContext\">\n <riv-edit-view\n *ngIf=\"\n editingViewContext.id === view.id &&\n editingViewContext.menuContext === menuContext\n \"\n [view]=\"view\"\n [userSource]=\"state.userSource\"\n [userSelectMode]=\"state.userSelectMode\"\n [onAddUser]=\"state.onAddUser\"\n [newTooltip]=\"state.newTooltip\"\n [autoSelectName]=\"editingViewContext.autoRename\"\n [anchor]=\"el.nativeElement\"\n (save)=\"manager?.actions?.next({ type: 'updateView', view: $event })\"\n (delete)=\"manager?.actions?.next({ type: 'deleteView', view: $event })\"\n (close)=\"\n manager?.actions?.next({ type: 'setEditingView', context: null })\n \"\n ></riv-edit-view>\n </ng-container>\n\n <ng-container *ngIf=\"state.deletingViewContext; let deletingViewContext\">\n <riv-dialog\n *ngIf=\"\n deletingViewContext.id === view.id &&\n deletingViewContext.menuContext === menuContext\n \"\n [title]=\"'Delete view'\"\n (close)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n <div class=\"delete-dialog\">\n <div class=\"delete-title\">\n Are you sure you want to delete the following view?\n </div>\n <p>{{ view.title }}</p>\n </div>\n <footer class=\"delete-footer\">\n <button\n type=\"button\"\n rivButton\n (click)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'danger'\"\n (click)=\"\n manager?.actions?.next({\n type: 'deleteView',\n view\n })\n \"\n >\n Delete view\n </button>\n </footer>\n </riv-dialog>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:inline-flex;align-items:stretch}riv-menu{width:100%;max-width:100%;height:100%;max-height:100%}.delete-dialog{padding:var(--size-xlarge);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 120);max-width:100%}.delete-title{font:var(--title-02)}.delete-footer{padding:var(--size-medium);display:flex;justify-content:space-between;gap:var(--size-medium)}\n"] }]
|
|
20
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { manager: [{
|
|
21
|
-
type: Input
|
|
22
|
-
}], view: [{
|
|
23
|
-
type: Input
|
|
24
|
-
}], menuContext: [{
|
|
25
|
-
type: Input
|
|
26
|
-
}], triggerTemplate: [{
|
|
27
|
-
type: ContentChild,
|
|
28
|
-
args: ['menuTrigger']
|
|
29
|
-
}] } });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL25hdmlnYXRpb24vdmlld3Mvdmlldy1tZW51L3ZpZXctbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL3ZpZXctbWVudS92aWV3LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLEtBQUssR0FFTixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTdkIsTUFBTSxPQUFPLGlCQUFpQjtJQUk1QixZQUFxQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQVNuQyxnQkFBVyxHQUF5QixLQUFLLENBQUM7SUFUSixDQUFDOytHQUo1QixpQkFBaUI7bUdBQWpCLGlCQUFpQiwyT0NoQjlCLGdzSkFnS0E7OzRGRGhKYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxNQUFNOytFQVMvQyxPQUFPO3NCQUROLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixlQUFlO3NCQURkLFlBQVk7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJpdlZpZXdzIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtdmlldy1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXctbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZpZXctbWVudS5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3TWVudUNvbXBvbmVudDxcbiAgVSBleHRlbmRzIFJpdlZpZXdzLlVzZXIsXG4gIFYgZXh0ZW5kcyBSaXZWaWV3cy5WaWV3PFU+LFxuPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmKSB7fVxuXG4gIEBJbnB1dCgpXG4gIG1hbmFnZXI/OiBSaXZWaWV3cy5NYW5hZ2VyPFUsIFY+O1xuXG4gIEBJbnB1dCgpXG4gIHZpZXc/OiBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcblxuICBASW5wdXQoKVxuICBtZW51Q29udGV4dDogUml2Vmlld3MuTWVudUNvbnRleHQgPSAndGFiJztcblxuICBAQ29udGVudENoaWxkKCdtZW51VHJpZ2dlcicpXG4gIHRyaWdnZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHZvaWQ+O1xufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdcIj5cbiAgPHJpdi1tZW51XG4gICAgI21lbnVcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1yaWdodCdcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyaWdnZXJUZW1wbGF0ZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlICN0cmlnZ2VyPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyaWdnZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJpdi1tZW51LWl0ZW1cbiAgICAgIChjbGljayk9XCJcbiAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7XG4gICAgICAgICAgdHlwZTogJ3NldEVuYWJsZWQnLFxuICAgICAgICAgIGlkOiB2aWV3LmlkLFxuICAgICAgICAgIGVuYWJsZWQ6ICF2aWV3LmVuYWJsZWQsXG4gICAgICAgICAgc291cmNlOiAnbWVudSdcbiAgICAgICAgfSlcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwidmlldy5zeXN0ZW0gfHwgdmlldy50ZW1wb3JhcnlcIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ2aWV3LnN5c3RlbSB8fCB2aWV3LnRlbXBvcmFyeSA/ICd0cnVlJyA6IG51bGxcIlxuICAgID5cbiAgICAgIHt7IHZpZXcuZW5hYmxlZCA/ICdIaWRlIHRhYicgOiAnU2hvdyB0YWInIH19XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cInJpdi1kaXZpZGVyXCI+PC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByaXYtbWVudS1pdGVtXG4gICAgICAoY2xpY2spPVwiXG4gICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgIHR5cGU6ICdzZXRFZGl0aW5nVmlldycsXG4gICAgICAgICAgY29udGV4dDogeyBpZDogdmlldy5pZCwgYXV0b1JlbmFtZTogZmFsc2UsIG1lbnVDb250ZXh0IH1cbiAgICAgICAgfSlcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwidmlldy5zeXN0ZW1cIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ2aWV3LnN5c3RlbSA/ICd0cnVlJyA6IG51bGxcIlxuICAgID5cbiAgICAgIEVkaXQgdmlld1xuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgKGNsaWNrKT1cIlxuICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICB0eXBlOiAnc2V0RWRpdGluZ1ZpZXcnLFxuICAgICAgICAgIGNvbnRleHQ6IHsgaWQ6IHZpZXcuaWQsIGF1dG9SZW5hbWU6IHRydWUsIG1lbnVDb250ZXh0IH1cbiAgICAgICAgfSlcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwidmlldy5zeXN0ZW1cIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ2aWV3LnN5c3RlbSA/ICd0cnVlJyA6IG51bGxcIlxuICAgID5cbiAgICAgIFJlbmFtZSB2aWV3XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByaXYtbWVudS1pdGVtXG4gICAgICAoY2xpY2spPVwiXG4gICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAnZHVwbGljYXRlVmlldycsIHZpZXcsIG1lbnVDb250ZXh0IH0pXG4gICAgICBcIlxuICAgICAgW2Rpc2FibGVkXT1cInZpZXcudGVtcG9yYXJ5XCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwidmlldy50ZW1wb3JhcnkgPyAndHJ1ZScgOiBudWxsXCJcbiAgICA+XG4gICAgICBEdXBsaWNhdGUgdmlld1xuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgKGNsaWNrKT1cIlxuICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICB0eXBlOiAnc2V0RGVsZXRpbmdWaWV3JyxcbiAgICAgICAgICBjb250ZXh0OiB7IGlkOiB2aWV3LmlkLCBtZW51Q29udGV4dCB9XG4gICAgICAgIH0pXG4gICAgICBcIlxuICAgICAgW2Rpc2FibGVkXT1cInZpZXcuc3lzdGVtXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwidmlldy5zeXN0ZW0gPyAndHJ1ZScgOiBudWxsXCJcbiAgICA+XG4gICAgICBEZWxldGUgdmlld1xuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJyaXYtZGl2aWRlclwiPjwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgKGNsaWNrKT1cIm1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAnY29weUxpbmtUb1ZpZXcnLCB2aWV3IH0pXCJcbiAgICAgIFtkaXNhYmxlZF09XCJ2aWV3LnRlbXBvcmFyeVwiXG4gICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInZpZXcudGVtcG9yYXJ5ID8gJ3RydWUnIDogbnVsbFwiXG4gICAgPlxuICAgICAgQ29weSBsaW5rIHRvIHZpZXdcbiAgICA8L2J1dHRvbj5cbiAgPC9yaXYtbWVudT5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibWFuYWdlcj8uc3RhdGUgfCBhc3luYzsgbGV0IHN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlLmVkaXRpbmdWaWV3Q29udGV4dDsgbGV0IGVkaXRpbmdWaWV3Q29udGV4dFwiPlxuICAgICAgPHJpdi1lZGl0LXZpZXdcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBlZGl0aW5nVmlld0NvbnRleHQuaWQgPT09IHZpZXcuaWQgJiZcbiAgICAgICAgICBlZGl0aW5nVmlld0NvbnRleHQubWVudUNvbnRleHQgPT09IG1lbnVDb250ZXh0XG4gICAgICAgIFwiXG4gICAgICAgIFt2aWV3XT1cInZpZXdcIlxuICAgICAgICBbdXNlclNvdXJjZV09XCJzdGF0ZS51c2VyU291cmNlXCJcbiAgICAgICAgW3VzZXJTZWxlY3RNb2RlXT1cInN0YXRlLnVzZXJTZWxlY3RNb2RlXCJcbiAgICAgICAgW29uQWRkVXNlcl09XCJzdGF0ZS5vbkFkZFVzZXJcIlxuICAgICAgICBbbmV3VG9vbHRpcF09XCJzdGF0ZS5uZXdUb29sdGlwXCJcbiAgICAgICAgW2F1dG9TZWxlY3ROYW1lXT1cImVkaXRpbmdWaWV3Q29udGV4dC5hdXRvUmVuYW1lXCJcbiAgICAgICAgW2FuY2hvcl09XCJlbC5uYXRpdmVFbGVtZW50XCJcbiAgICAgICAgKHNhdmUpPVwibWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICd1cGRhdGVWaWV3JywgdmlldzogJGV2ZW50IH0pXCJcbiAgICAgICAgKGRlbGV0ZSk9XCJtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ2RlbGV0ZVZpZXcnLCB2aWV3OiAkZXZlbnQgfSlcIlxuICAgICAgICAoY2xvc2UpPVwiXG4gICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdzZXRFZGl0aW5nVmlldycsIGNvbnRleHQ6IG51bGwgfSlcbiAgICAgICAgXCJcbiAgICAgID48L3Jpdi1lZGl0LXZpZXc+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUuZGVsZXRpbmdWaWV3Q29udGV4dDsgbGV0IGRlbGV0aW5nVmlld0NvbnRleHRcIj5cbiAgICAgIDxyaXYtZGlhbG9nXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgZGVsZXRpbmdWaWV3Q29udGV4dC5pZCA9PT0gdmlldy5pZCAmJlxuICAgICAgICAgIGRlbGV0aW5nVmlld0NvbnRleHQubWVudUNvbnRleHQgPT09IG1lbnVDb250ZXh0XG4gICAgICAgIFwiXG4gICAgICAgIFt0aXRsZV09XCInRGVsZXRlIHZpZXcnXCJcbiAgICAgICAgKGNsb3NlKT1cIlxuICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAnc2V0RGVsZXRpbmdWaWV3JywgY29udGV4dDogbnVsbCB9KVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlLWRpYWxvZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGUtdGl0bGVcIj5cbiAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIGZvbGxvd2luZyB2aWV3P1xuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwPnt7IHZpZXcudGl0bGUgfX08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Zm9vdGVyIGNsYXNzPVwiZGVsZXRlLWZvb3RlclwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAnc2V0RGVsZXRpbmdWaWV3JywgY29udGV4dDogbnVsbCB9KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2RhbmdlcidcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGVsZXRlVmlldycsXG4gICAgICAgICAgICAgICAgdmlld1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBEZWxldGUgdmlld1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgIDwvcml2LWRpYWxvZz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|