@coolon/angular-ui-powerups 16.1.0-aplpha.189 → 16.1.0-aplpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -4
- package/assets/activities/activities.scss +6 -8
- package/assets/activities/input-activities.scss +6 -14
- package/assets/form.scss +23 -77
- package/assets/icons.scss +1 -2
- package/assets/interaction/editor/inline-string-editor.scss +0 -4
- package/assets/interaction.scss +1 -1
- package/assets/styles.scss +0 -4
- package/assets/table.scss +30 -55
- package/assets/tabs.scss +2 -15
- package/esm2022/lib/angular-ui-powerups.module.mjs +9 -9
- package/esm2022/lib/animations/slide-animations.mjs +10 -15
- package/esm2022/lib/components/alignment.mjs +1 -1
- package/esm2022/lib/components/busy-overlay/busy-overlay.component.mjs +12 -7
- package/esm2022/lib/components/cards/abstract-card-container.component.mjs +7 -30
- package/esm2022/lib/components/cards/card-container/card-container.component.mjs +6 -6
- package/esm2022/lib/components/cards/card-stack/card-stack.component.mjs +81 -0
- package/esm2022/lib/components/commands/command/command.component.mjs +33 -35
- package/esm2022/lib/components/commands/command-face/command-face.component.mjs +5 -13
- package/esm2022/lib/components/commands/command-face.mjs +11 -12
- package/esm2022/lib/components/commands/flex.component.mjs +4 -4
- package/esm2022/lib/components/commands/group/command-container.mjs +1 -1
- package/esm2022/lib/components/commands/group/popup-aware.component.mjs +8 -31
- package/esm2022/lib/components/commands/group/popup-container.mjs +1 -1
- package/esm2022/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +25 -27
- package/esm2022/lib/components/commands/group/popup-menu/more-menu.component.mjs +22 -13
- package/esm2022/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.mjs +12 -17
- package/esm2022/lib/components/commands/group/popup-menu/popup-menu.component.mjs +23 -14
- package/esm2022/lib/components/commands/group/tool-bar/tool-bar.component.mjs +19 -12
- package/esm2022/lib/components/commands/separator.component.mjs +14 -8
- package/esm2022/lib/components/components.module.mjs +59 -79
- package/esm2022/lib/components/disposable-component.mjs +42 -38
- package/esm2022/lib/components/empty-state/empty-state.component.mjs +9 -5
- package/esm2022/lib/components/exports.mjs +7 -15
- package/esm2022/lib/components/focus-container/focus-container.component.mjs +4 -4
- package/esm2022/lib/components/focusable.component.mjs +5 -5
- package/esm2022/lib/components/forms/abstract-input.component.mjs +18 -66
- package/esm2022/lib/components/forms/abstract-list-input.component.mjs +4 -4
- package/esm2022/lib/components/forms/abstract-value-input.component.mjs +4 -4
- package/esm2022/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +13 -12
- package/esm2022/lib/components/forms/checkbox-input/checkbox-input.component.mjs +8 -10
- package/esm2022/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +10 -10
- package/esm2022/lib/components/forms/number-input/number-input.component.mjs +13 -90
- package/esm2022/lib/components/forms/password-input/password-input.component.mjs +7 -44
- package/esm2022/lib/components/forms/select-input/select-input.component.mjs +16 -17
- package/esm2022/lib/components/forms/string-input/string-input.component.mjs +16 -35
- package/esm2022/lib/components/forms/text-input/text-input.component.mjs +8 -12
- package/esm2022/lib/components/icon/icon.component.mjs +7 -10
- package/esm2022/lib/components/labelled-value/labelled-value.component.mjs +4 -4
- package/esm2022/lib/components/loading-container/loading-container.component.mjs +12 -7
- package/esm2022/lib/components/noop/noop.component.mjs +7 -5
- package/esm2022/lib/components/resize-aware.component.mjs +27 -64
- package/esm2022/lib/components/scroll-container/scroll-container.component.mjs +5 -5
- package/esm2022/lib/components/section-header/section-header.component.mjs +4 -4
- package/esm2022/lib/components/switch-case/switch-case.component.mjs +17 -15
- package/esm2022/lib/components/tables/abstract-table-model.mjs +63 -112
- package/esm2022/lib/components/tables/abstract-table.component.mjs +8 -22
- package/esm2022/lib/components/tables/column/column-list-model.mjs +44 -0
- package/esm2022/lib/components/tables/column/column-model.mjs +10 -21
- package/esm2022/lib/components/tables/column/column-template/column-template.directive.mjs +4 -4
- package/esm2022/lib/components/tables/column/custom-template-column-model.mjs +3 -3
- package/esm2022/lib/components/tables/column/custom-value-column-model.mjs +5 -5
- package/esm2022/lib/components/tables/column/editor-controls-column-model.mjs +5 -5
- package/esm2022/lib/components/tables/column/list-propery-column-model.mjs +5 -6
- package/esm2022/lib/components/tables/column/property-column-model.mjs +5 -5
- package/esm2022/lib/components/tables/column/selection-column-model.mjs +13 -35
- package/esm2022/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +7 -7
- package/esm2022/lib/components/tables/editor/edit-session.mjs +2 -4
- package/esm2022/lib/components/tables/editor/editable-cell-renderer.mjs +1 -1
- package/esm2022/lib/components/tables/filter/column-text-search-formatter.mjs +1 -1
- package/esm2022/lib/components/tables/filter/enable-cell-text-search.decorator.mjs +2 -3
- package/esm2022/lib/components/tables/filter/table-filter-model.mjs +9 -14
- package/esm2022/lib/components/tables/filter/text-search-predicate.mjs +2 -16
- package/esm2022/lib/components/tables/paginator/paginator.component.mjs +5 -5
- package/esm2022/lib/components/tables/renderer/cell-editors.mjs +1 -1
- package/esm2022/lib/components/tables/renderer/cell-portal-ref.mjs +7 -23
- package/esm2022/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +8 -6
- package/esm2022/lib/components/tables/renderer/default-header-cell-renderer/default-header-cell-renderer.component.mjs +7 -5
- package/esm2022/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +8 -18
- package/esm2022/lib/components/tables/renderer/selection-cell/selection-cell.component.mjs +8 -11
- package/esm2022/lib/components/tables/renderer/table-body/table-body.component.mjs +51 -161
- package/esm2022/lib/components/tables/renderer/table-cell/table-cell.component.mjs +9 -9
- package/esm2022/lib/components/tables/renderer/table-header-cell/table-header-cell.component.mjs +7 -5
- package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu-popup/table-more-menu-popup.component.mjs +33 -0
- package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu.component.mjs +60 -0
- package/esm2022/lib/components/tables/table/table-model.mjs +3 -12
- package/esm2022/lib/components/tables/table/table.component.mjs +64 -42
- package/esm2022/lib/components/tables/table-row-menu/table-row-menu.component.mjs +84 -0
- package/esm2022/lib/components/tables/tree-table/decorated-tree-node.mjs +4 -5
- package/esm2022/lib/components/tables/tree-table/flattened-tree-list-model.mjs +1 -1
- package/esm2022/lib/components/tables/tree-table/tree-expansion-model.mjs +1 -1
- package/esm2022/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.mjs +7 -5
- package/esm2022/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +5 -5
- package/esm2022/lib/components/tables/tree-table/tree-label-column-model.mjs +4 -4
- package/esm2022/lib/components/tables/tree-table/tree-table-component.mjs +8 -15
- package/esm2022/lib/components/tables/tree-table/tree-table-model.mjs +7 -4
- package/esm2022/lib/components/text/markdown/markdown.component.mjs +6 -6
- package/esm2022/lib/components/track.mjs +1 -1
- package/esm2022/lib/components/types/bounds.class.mjs +1 -1
- package/esm2022/lib/components/types/loadable.mjs +2 -0
- package/esm2022/lib/components/vertical-focus-container/vertical-focus-container.component.mjs +4 -4
- package/esm2022/lib/directives/command.directive.mjs +14 -25
- package/esm2022/lib/directives/directives.module.mjs +10 -10
- package/esm2022/lib/directives/exports.mjs +1 -2
- package/esm2022/lib/directives/focus-binding-factory.mjs +4 -4
- package/esm2022/lib/directives/focus-binding.directive.mjs +5 -5
- package/esm2022/lib/directives/focus-binding.mjs +1 -1
- package/esm2022/lib/directives/garbage-collector.directive.mjs +4 -5
- package/esm2022/lib/directives/highlight-text-model.directive.mjs +4 -4
- package/esm2022/lib/directives/highlight.pipe.mjs +11 -12
- package/esm2022/lib/interaction/abstract-interaction-context.mjs +7 -6
- package/esm2022/lib/interaction/activity-ref.mjs +2 -2
- package/esm2022/lib/interaction/activity.mjs +23 -23
- package/esm2022/lib/interaction/alert.mjs +2 -2
- package/esm2022/lib/interaction/components/abstract-confirm-dialog.component.mjs +10 -13
- package/esm2022/lib/interaction/components/abstract-dialog.component.mjs +45 -4
- package/esm2022/lib/interaction/components/activity-actions/activity-actions.component.mjs +17 -29
- package/esm2022/lib/interaction/components/activity-body/activity-body.component.mjs +4 -10
- package/esm2022/lib/interaction/components/activity-container/activity-container.component.mjs +19 -50
- package/esm2022/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.mjs +19 -55
- package/esm2022/lib/interaction/components/activity-title/activity-title.component.mjs +6 -6
- package/esm2022/lib/interaction/components/activity-triggers/abstract-activity-trigger.component.mjs +3 -3
- package/esm2022/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.mjs +4 -4
- package/esm2022/lib/interaction/components/activity-triggers/modal-activity-trigger/modal-activity-trigger.component.mjs +4 -4
- package/esm2022/lib/interaction/components/activity-triggers/popup-activity-trigger/popup-activity-trigger.component.mjs +4 -4
- package/esm2022/lib/interaction/components/add-card-activity/add-card-activity.component.mjs +4 -4
- package/esm2022/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.mjs +4 -4
- package/esm2022/lib/interaction/components/alert-dialog/alert-dialog.component.mjs +12 -12
- package/esm2022/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.mjs +10 -6
- package/esm2022/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.mjs +10 -6
- package/esm2022/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.mjs +11 -9
- package/esm2022/lib/interaction/components/editors/edit-context.mjs +1 -1
- package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-editor-model.mjs +2 -2
- package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +9 -9
- package/esm2022/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +9 -25
- package/esm2022/lib/interaction/components/input-activities/input-activity.mjs +5 -6
- package/esm2022/lib/interaction/components/input-activities/select-input-activity.mjs +38 -44
- package/esm2022/lib/interaction/components/input-activities/string-input-activity.mjs +12 -14
- package/esm2022/lib/interaction/components/popup-interaction-context/popup-interaction-context.component.mjs +5 -6
- package/esm2022/lib/interaction/confirm.mjs +2 -26
- package/esm2022/lib/interaction/directives/interaction-context-trigger-for.directive.mjs +6 -6
- package/esm2022/lib/interaction/exports.mjs +1 -6
- package/esm2022/lib/interaction/in-place-interaction-context.mjs +1 -1
- package/esm2022/lib/interaction/interaction-context.mjs +2 -3
- package/esm2022/lib/interaction/interaction.module.mjs +36 -44
- package/esm2022/lib/interaction/route-synchronisation-adapter.mjs +1 -1
- package/esm2022/lib/interaction/services/interaction-service-routing-adapter.mjs +4 -4
- package/esm2022/lib/interaction/services/interaction.service.mjs +10 -22
- package/esm2022/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.mjs +10 -9
- package/esm2022/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.mjs +5 -23
- package/esm2022/lib/interaction/services/modal-interaction-context.factory.mjs +1 -1
- package/esm2022/lib/place/components/abstract-place-navigation.component.mjs +5 -15
- package/esm2022/lib/place/components/list-place-nav/list-place-nav.component.mjs +9 -8
- package/esm2022/lib/place/components/not-authorised-notice/not-authorised-notice.component.mjs +7 -5
- package/esm2022/lib/place/components/place-outlet/place-outlet.component.mjs +12 -10
- package/esm2022/lib/place/components/place-outlet/route-animations.mjs +1 -1
- package/esm2022/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +10 -15
- package/esm2022/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.mjs +7 -7
- package/esm2022/lib/place/guards/consolidated-param-map.mjs +4 -4
- package/esm2022/lib/place/guards/noop-auth-guard.service.mjs +7 -5
- package/esm2022/lib/place/guards/place.guard.mjs +9 -10
- package/esm2022/lib/place/navigation/place-component-deactivation-handler.mjs +2 -2
- package/esm2022/lib/place/navigation/session/abstract-pop-state-navigation.mjs +1 -1
- package/esm2022/lib/place/navigation/session/event-cleanup/event-clean-up-session.mjs +1 -1
- package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-leaving-interaction-transition-cancelled.mjs +1 -1
- package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-link-triggered-navigation-interaction-cancelation-type-determined.mjs +1 -1
- package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-popstate-during-can-deactivate-transition-finishes.mjs +1 -1
- package/esm2022/lib/place/navigation/session/interactions/navigating-during-interaction.mjs +2 -2
- package/esm2022/lib/place/navigation/session/interactions/pop-state-during-interaction-navigation.mjs +1 -1
- package/esm2022/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.mjs +3 -3
- package/esm2022/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs +6 -3
- package/esm2022/lib/place/navigation/session/navigating.mjs +2 -2
- package/esm2022/lib/place/navigation/session/navigation-context.mjs +1 -1
- package/esm2022/lib/place/navigation/session/navigation-session.mjs +2 -2
- package/esm2022/lib/place/navigation/session/pop-state-navigation.mjs +1 -1
- package/esm2022/lib/place/place-access-guard.mjs +1 -1
- package/esm2022/lib/place/place-auth-service.mjs +6 -7
- package/esm2022/lib/place/place-component.mjs +58 -54
- package/esm2022/lib/place/place-config.mjs +1 -1
- package/esm2022/lib/place/place-definition.mjs +4 -15
- package/esm2022/lib/place/place-history.mjs +8 -6
- package/esm2022/lib/place/place-router.mjs +68 -84
- package/esm2022/lib/place/place.decorator.mjs +2 -2
- package/esm2022/lib/place/place.module.mjs +16 -16
- package/esm2022/lib/place/route/formatter.mjs +2 -2
- package/esm2022/lib/place/route/json-types.mjs +1 -1
- package/esm2022/lib/place/route/parameter-decorators.mjs +50 -54
- package/esm2022/lib/place/route/parameter-definition.mjs +2 -6
- package/esm2022/lib/place/route/parameter-sanitiser.mjs +2 -7
- package/esm2022/lib/place/route/parameter-snapshot.mjs +1 -1
- package/esm2022/lib/place/route/visit-segment-sanitiser.mjs +1 -1
- package/esm2022/lib/place/url-service.mjs +4 -4
- package/esm2022/lib/place/url-snapshot.mjs +3 -3
- package/esm2022/lib/place/visit-segment.mjs +2 -2
- package/esm2022/lib/place/visit.mjs +2 -2
- package/esm2022/lib/services/markdown/markdown.service.mjs +7 -5
- package/esm2022/lib/services/markdown/pill-plugin.mjs +3 -1
- package/esm2022/lib/services/visibility-service.mjs +7 -7
- package/fesm2022/coolon-angular-ui-powerups.mjs +3003 -4341
- package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
- package/lib/angular-ui-powerups.module.d.ts +5 -5
- package/lib/animations/slide-animations.d.ts +0 -1
- package/lib/components/busy-overlay/busy-overlay.component.d.ts +4 -1
- package/lib/components/cards/abstract-card-container.component.d.ts +3 -6
- package/lib/components/cards/card-container/card-container.component.d.ts +1 -1
- package/lib/components/cards/card-stack/card-stack.component.d.ts +68 -0
- package/lib/components/commands/command/command.component.d.ts +10 -9
- package/lib/components/commands/command-face/command-face.component.d.ts +0 -2
- package/lib/components/commands/command-face.d.ts +9 -8
- package/lib/components/commands/group/popup-aware.component.d.ts +4 -9
- package/lib/components/commands/group/popup-menu/abstract-popup-menu.component.d.ts +5 -5
- package/lib/components/commands/group/popup-menu/more-menu.component.d.ts +4 -2
- package/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.d.ts +1 -3
- package/lib/components/commands/group/popup-menu/popup-menu.component.d.ts +4 -2
- package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +7 -3
- package/lib/components/commands/separator.component.d.ts +4 -2
- package/lib/components/components.module.d.ts +53 -57
- package/lib/components/disposable-component.d.ts +9 -17
- package/lib/components/empty-state/empty-state.component.d.ts +4 -1
- package/lib/components/exports.d.ts +6 -14
- package/lib/components/forms/abstract-input.component.d.ts +7 -16
- package/lib/components/forms/autocomplete-input/autocomplete-input.component.d.ts +2 -2
- package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +0 -2
- package/lib/components/forms/number-input/number-input.component.d.ts +4 -16
- package/lib/components/forms/password-input/password-input.component.d.ts +1 -7
- package/lib/components/forms/select-input/select-input.component.d.ts +3 -4
- package/lib/components/forms/string-input/string-input.component.d.ts +1 -7
- package/lib/components/forms/text-input/text-input.component.d.ts +0 -3
- package/lib/components/loading-container/loading-container.component.d.ts +4 -1
- package/lib/components/noop/noop.component.d.ts +1 -0
- package/lib/components/resize-aware.component.d.ts +6 -25
- package/lib/components/switch-case/switch-case.component.d.ts +7 -6
- package/lib/components/tables/abstract-table-model.d.ts +25 -50
- package/lib/components/tables/abstract-table.component.d.ts +5 -6
- package/lib/components/tables/column/column-list-model.d.ts +13 -0
- package/lib/components/tables/column/column-model.d.ts +4 -8
- package/lib/components/tables/column/custom-template-column-model.d.ts +2 -3
- package/lib/components/tables/column/custom-value-column-model.d.ts +2 -3
- package/lib/components/tables/column/editor-controls-column-model.d.ts +2 -3
- package/lib/components/tables/column/list-propery-column-model.d.ts +2 -3
- package/lib/components/tables/column/property-column-model.d.ts +2 -3
- package/lib/components/tables/column/selection-column-model.d.ts +4 -10
- package/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.d.ts +3 -3
- package/lib/components/tables/editor/edit-session.d.ts +1 -1
- package/lib/components/tables/editor/editable-cell-renderer.d.ts +1 -1
- package/lib/components/tables/filter/enable-cell-text-search.decorator.d.ts +1 -1
- package/lib/components/tables/filter/text-search-predicate.d.ts +0 -9
- package/lib/components/tables/renderer/cell-portal-ref.d.ts +14 -21
- package/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.d.ts +1 -0
- package/lib/components/tables/renderer/default-header-cell-renderer/default-header-cell-renderer.component.d.ts +1 -0
- package/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.d.ts +1 -2
- package/lib/components/tables/renderer/table-body/table-body.component.d.ts +19 -43
- package/lib/components/tables/renderer/table-cell/table-cell.component.d.ts +3 -2
- package/lib/components/tables/renderer/table-header-cell/table-header-cell.component.d.ts +1 -0
- package/lib/components/tables/renderer/table-more-menu/table-more-menu-popup/table-more-menu-popup.component.d.ts +15 -0
- package/lib/components/tables/renderer/{table-custom-more-menu/table-custom-more-menu.component.d.ts → table-more-menu/table-more-menu.component.d.ts} +8 -9
- package/lib/components/tables/table/table-model.d.ts +4 -4
- package/lib/components/tables/table/table.component.d.ts +11 -15
- package/lib/components/tables/table-row-menu/table-row-menu.component.d.ts +28 -0
- package/lib/components/tables/tree-table/tree-expansion-model.d.ts +2 -2
- package/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.d.ts +1 -0
- package/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +1 -1
- package/lib/components/tables/tree-table/tree-label-column-model.d.ts +2 -3
- package/lib/components/tables/tree-table/tree-table-component.d.ts +2 -5
- package/lib/components/tables/tree-table/tree-table-model.d.ts +5 -4
- package/lib/components/text/markdown/markdown.component.d.ts +1 -1
- package/lib/components/types/loadable.d.ts +5 -0
- package/lib/directives/command.directive.d.ts +5 -7
- package/lib/directives/directives.module.d.ts +5 -5
- package/lib/directives/exports.d.ts +0 -1
- package/lib/interaction/abstract-interaction-context.d.ts +1 -1
- package/lib/interaction/activity-ref.d.ts +2 -2
- package/lib/interaction/activity.d.ts +7 -7
- package/lib/interaction/components/abstract-confirm-dialog.component.d.ts +1 -2
- package/lib/interaction/components/abstract-dialog.component.d.ts +14 -5
- package/lib/interaction/components/activity-actions/activity-actions.component.d.ts +9 -12
- package/lib/interaction/components/activity-body/activity-body.component.d.ts +1 -2
- package/lib/interaction/components/activity-container/activity-container.component.d.ts +5 -11
- package/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.d.ts +5 -4
- package/lib/interaction/components/activity-title/activity-title.component.d.ts +1 -1
- package/lib/interaction/components/alert-dialog/alert-dialog.component.d.ts +1 -6
- package/lib/interaction/components/editors/edit-context.d.ts +1 -1
- package/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.d.ts +4 -6
- package/lib/interaction/components/input-activities/string-input-activity.d.ts +1 -1
- package/lib/interaction/confirm.d.ts +0 -4
- package/lib/interaction/directives/interaction-context-trigger-for.directive.d.ts +3 -3
- package/lib/interaction/exports.d.ts +0 -5
- package/lib/interaction/interaction-context.d.ts +1 -7
- package/lib/interaction/interaction.module.d.ts +33 -35
- package/lib/interaction/services/interaction-service-routing-adapter.d.ts +2 -2
- package/lib/interaction/services/interaction.service.d.ts +1 -2
- package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.d.ts +3 -2
- package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.d.ts +3 -4
- package/lib/place/components/abstract-place-navigation.component.d.ts +0 -1
- package/lib/place/components/not-authorised-notice/not-authorised-notice.component.d.ts +1 -0
- package/lib/place/components/place-outlet/place-outlet.component.d.ts +4 -3
- package/lib/place/components/side-place-navigation/side-place-navigation.component.d.ts +1 -2
- package/lib/place/guards/noop-auth-guard.service.d.ts +1 -0
- package/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.d.ts +1 -0
- package/lib/place/place-auth-service.d.ts +4 -4
- package/lib/place/place-component.d.ts +16 -8
- package/lib/place/place-definition.d.ts +0 -2
- package/lib/place/place-history.d.ts +1 -0
- package/lib/place/place-router.d.ts +5 -10
- package/lib/place/place.decorator.d.ts +1 -1
- package/lib/place/place.module.d.ts +8 -8
- package/lib/place/route/json-types.d.ts +3 -1
- package/lib/place/route/parameter-decorators.d.ts +4 -3
- package/lib/place/route/parameter-definition.d.ts +2 -2
- package/lib/place/route/parameter-sanitiser.d.ts +0 -7
- package/lib/place/visit-segment.d.ts +4 -4
- package/lib/place/visit.d.ts +2 -2
- package/lib/services/markdown/markdown.service.d.ts +1 -0
- package/lib/services/visibility-service.d.ts +1 -1
- package/package.json +19 -18
- package/assets/draw.scss +0 -20
- package/assets/layout.scss +0 -3
- package/assets/place.scss +0 -31
- package/esm2022/lib/components/commands/button-renderer/button-renderer.component.mjs +0 -115
- package/esm2022/lib/components/file/file-download/file-download.component.mjs +0 -89
- package/esm2022/lib/components/forms/form-field.mjs +0 -2
- package/esm2022/lib/components/forms/search-input/search-input.component.mjs +0 -33
- package/esm2022/lib/components/loadable-component.mjs +0 -69
- package/esm2022/lib/components/tables/column/column-manager.mjs +0 -81
- package/esm2022/lib/components/tables/column/column-order-manager.mjs +0 -19
- package/esm2022/lib/components/tables/footer/footer-row-model.mjs +0 -38
- package/esm2022/lib/components/tables/renderer/abstract-cell-renderer.mjs +0 -7
- package/esm2022/lib/components/tables/renderer/table-action-column/menu-builder.mjs +0 -2
- package/esm2022/lib/components/tables/renderer/table-action-column/table-action-column.component.mjs +0 -153
- package/esm2022/lib/components/tables/renderer/table-custom-more-menu/table-custom-more-menu-popup.component.mjs +0 -45
- package/esm2022/lib/components/tables/renderer/table-custom-more-menu/table-custom-more-menu.component.mjs +0 -71
- package/esm2022/lib/components/tables/renderer/table-footer-row/table-footer-row.component.mjs +0 -30
- package/esm2022/lib/directives/resize-observer.directive.mjs +0 -40
- package/esm2022/lib/interaction/activity-context.mjs +0 -4
- package/esm2022/lib/interaction/components/alert-renderer/alert-renderer.component.mjs +0 -55
- package/esm2022/lib/interaction/components/confirm-renderer/confirm-renderer.component.mjs +0 -54
- package/esm2022/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.mjs +0 -134
- package/esm2022/lib/interaction/interaction-context-provider.mjs +0 -17
- package/lib/components/commands/button-renderer/button-renderer.component.d.ts +0 -30
- package/lib/components/file/file-download/file-download.component.d.ts +0 -45
- package/lib/components/forms/form-field.d.ts +0 -5
- package/lib/components/forms/search-input/search-input.component.d.ts +0 -10
- package/lib/components/loadable-component.d.ts +0 -20
- package/lib/components/tables/column/column-manager.d.ts +0 -19
- package/lib/components/tables/column/column-order-manager.d.ts +0 -20
- package/lib/components/tables/footer/footer-row-model.d.ts +0 -22
- package/lib/components/tables/renderer/abstract-cell-renderer.d.ts +0 -6
- package/lib/components/tables/renderer/table-action-column/menu-builder.d.ts +0 -7
- package/lib/components/tables/renderer/table-action-column/table-action-column.component.d.ts +0 -42
- package/lib/components/tables/renderer/table-custom-more-menu/table-custom-more-menu-popup.component.d.ts +0 -19
- package/lib/components/tables/renderer/table-footer-row/table-footer-row.component.d.ts +0 -11
- package/lib/directives/resize-observer.directive.d.ts +0 -16
- package/lib/interaction/activity-context.d.ts +0 -9
- package/lib/interaction/components/alert-renderer/alert-renderer.component.d.ts +0 -17
- package/lib/interaction/components/confirm-renderer/confirm-renderer.component.d.ts +0 -15
- package/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.d.ts +0 -53
- package/lib/interaction/interaction-context-provider.d.ts +0 -11
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import { Injector } from
|
|
2
|
-
import { assert, DelegatingListModel,
|
|
3
|
-
import { lang } from
|
|
4
|
-
import { isFunction } from
|
|
5
|
-
import {
|
|
6
|
-
import { CustomTemplateColumnModel } from
|
|
7
|
-
import { CustomValueColumnModel } from
|
|
8
|
-
import { EditorControlColumnModel } from
|
|
9
|
-
import { ListPropertyColumnModel } from
|
|
10
|
-
import { PropertyColumnModel } from
|
|
11
|
-
import { SelectionColumnModel } from
|
|
12
|
-
import { EditSession } from
|
|
13
|
-
import { ColumnTextSearchFormatter } from
|
|
14
|
-
import {
|
|
15
|
-
import { TableActionColumnComponent } from './renderer/table-action-column/table-action-column.component';
|
|
16
|
-
import { TableCustomMoreMenuComponent } from './renderer/table-custom-more-menu/table-custom-more-menu.component';
|
|
1
|
+
import { Injector } from "@angular/core";
|
|
2
|
+
import { assert, DelegatingListModel, DirtyTrackingForm, Dsl, EventListenerList, GarbageCollector, MutableListModel, SelectionModel, ValueModel, proxify, ProxyRegistry } from "@coolon/pectin";
|
|
3
|
+
import { lang } from "@coolon/typescript-utilities";
|
|
4
|
+
import { isFunction, isNil } from "lodash-es";
|
|
5
|
+
import { ColumnListModel } from "./column/column-list-model";
|
|
6
|
+
import { CustomTemplateColumnModel } from "./column/custom-template-column-model";
|
|
7
|
+
import { CustomValueColumnModel } from "./column/custom-value-column-model";
|
|
8
|
+
import { EditorControlColumnModel } from "./column/editor-controls-column-model";
|
|
9
|
+
import { ListPropertyColumnModel } from "./column/list-propery-column-model";
|
|
10
|
+
import { PropertyColumnModel } from "./column/property-column-model";
|
|
11
|
+
import { SelectionColumnModel } from "./column/selection-column-model";
|
|
12
|
+
import { EditSession } from "./editor/edit-session";
|
|
13
|
+
import { ColumnTextSearchFormatter } from "./filter/column-text-search-formatter";
|
|
14
|
+
import { TableMoreMenuComponent } from "./renderer/table-more-menu/table-more-menu.component";
|
|
17
15
|
var DefaultArrayFormatter = ColumnTextSearchFormatter.DefaultArrayFormatter;
|
|
18
16
|
var DefaultValueFormatter = ColumnTextSearchFormatter.DefaultValueFormatter;
|
|
19
17
|
// export type StringPropertiesOf<T> = { [K in keyof T]: T[K] extends string ? K : never }[keyof T];
|
|
@@ -26,25 +24,16 @@ class RowClass {
|
|
|
26
24
|
this.matches = matches;
|
|
27
25
|
}
|
|
28
26
|
}
|
|
29
|
-
class RowAttribute {
|
|
30
|
-
attributeName;
|
|
31
|
-
getValue;
|
|
32
|
-
constructor(attributeName, getValue) {
|
|
33
|
-
this.attributeName = attributeName;
|
|
34
|
-
this.getValue = getValue;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
27
|
export class AbstractTableModel extends GarbageCollector {
|
|
38
28
|
_dataSource$ = this.registerDisposable(new DelegatingListModel());
|
|
39
29
|
_filteredRows$ = this.registerDisposable(new DelegatingListModel());
|
|
40
30
|
_visibleRows$ = this.registerDisposable(new DelegatingListModel());
|
|
41
|
-
|
|
31
|
+
_columnList = this.registerDisposable(new ColumnListModel());
|
|
42
32
|
_editorSessions = new MutableListModel();
|
|
43
33
|
_rowsBeingEdited$;
|
|
44
34
|
saveCommandFactory;
|
|
45
35
|
_editorSessionByRowId;
|
|
46
36
|
rowClassNamePredicates = [];
|
|
47
|
-
rowAttributeGenerators = [];
|
|
48
37
|
_columnTextPropertiesLookup;
|
|
49
38
|
editing$;
|
|
50
39
|
firstEditableColumn$;
|
|
@@ -57,34 +46,30 @@ export class AbstractTableModel extends GarbageCollector {
|
|
|
57
46
|
textSearchPredicate$;
|
|
58
47
|
identityOf;
|
|
59
48
|
dataSourceEmpty$;
|
|
49
|
+
selectionModelProxy = proxify((SelectionModel));
|
|
60
50
|
selectedItems$;
|
|
61
51
|
leadSelection$;
|
|
62
52
|
hasSelection$;
|
|
63
|
-
footerRowModel;
|
|
64
|
-
_viewDependencies = new Set();
|
|
65
53
|
constructor() {
|
|
66
54
|
super();
|
|
67
55
|
const { chain } = Dsl.disposeWith(this);
|
|
68
56
|
this._rowsBeingEdited$ = new MutableListModel([], {
|
|
69
57
|
identifiedWith: row => this.identityOf(row)
|
|
70
58
|
});
|
|
71
|
-
this._editorSessionByRowId = chain(this._editorSessions).indexBy(
|
|
59
|
+
this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
|
|
72
60
|
this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
|
|
73
|
-
this.textSearchPredicate$ = chain(this.visibleColumns
|
|
61
|
+
this.textSearchPredicate$ = chain(this.visibleColumns).reduce(columns => {
|
|
74
62
|
return (row, regex) => {
|
|
75
63
|
return (!regex || !!columns.find(c => regex.test(c.getSearchTextFor(row))));
|
|
76
64
|
};
|
|
77
65
|
});
|
|
78
|
-
this.
|
|
79
|
-
this.
|
|
80
|
-
this.
|
|
81
|
-
this.
|
|
82
|
-
this.firstVisibleColumn$ = chain(this.visibleColumns$).first();
|
|
83
|
-
this.lastVisibleColumn$ = chain(this.visibleColumns$).last();
|
|
84
|
-
this.rowSelectionDisabledOnAllColumns$ = chain(this.columnManager.visibleColumns$).select(column => column.isRowSelectionEnabled()).count().equals(0);
|
|
66
|
+
this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
|
|
67
|
+
this.firstVisibleColumn$ = chain(this._columnList).first();
|
|
68
|
+
this.lastVisibleColumn$ = chain(this._columnList).last();
|
|
69
|
+
this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
|
|
85
70
|
this.dataSourceEmpty$ = chain(this.dataSource$).isEmpty();
|
|
86
|
-
this.selectedItems$ = this.
|
|
87
|
-
this.leadSelection$ = this.
|
|
71
|
+
this.selectedItems$ = this.selectionModelProxy.selectedItems$;
|
|
72
|
+
this.leadSelection$ = this.selectionModelProxy.leadSelection$;
|
|
88
73
|
this.hasSelection$ = chain(this.selectedItems$).isNotEmpty();
|
|
89
74
|
}
|
|
90
75
|
setDataSource(dataSource$) {
|
|
@@ -105,23 +90,9 @@ export class AbstractTableModel extends GarbageCollector {
|
|
|
105
90
|
],
|
|
106
91
|
parent: injector
|
|
107
92
|
});
|
|
108
|
-
this.columns
|
|
93
|
+
this.columns.value.forEach(c => c.initialise(customInjector));
|
|
109
94
|
this.identityOf = identityOf;
|
|
110
95
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Adds additional models that will trigger a table repaint. This is required if the table
|
|
113
|
-
* needs to be redrawn outside of changes to the rows of filters. i.e. some eternal state is used
|
|
114
|
-
* to assign row classes etc.
|
|
115
|
-
*
|
|
116
|
-
* Note: This function must be called before the table is bound to the model.
|
|
117
|
-
* @param hasValues
|
|
118
|
-
*/
|
|
119
|
-
viewStateDependsOn(...hasValues) {
|
|
120
|
-
hasValues.forEach(it => this._viewDependencies.add(it));
|
|
121
|
-
}
|
|
122
|
-
get viewStateDependencies() {
|
|
123
|
-
return Array.from(this._viewDependencies.values());
|
|
124
|
-
}
|
|
125
96
|
get dataSource$() {
|
|
126
97
|
return this._dataSource$.readonly$;
|
|
127
98
|
}
|
|
@@ -154,7 +125,7 @@ export class AbstractTableModel extends GarbageCollector {
|
|
|
154
125
|
const { when } = Dsl.disposeWith(editSession);
|
|
155
126
|
when(editSession.liveRowValue$).changes((editedValue) => {
|
|
156
127
|
this._rowsBeingEdited$.replaceOrPush(editedValue);
|
|
157
|
-
}, { initialValue:
|
|
128
|
+
}, { initialValue: "triggerChangeUnlessNil" });
|
|
158
129
|
this._editorSessions.push(editSession);
|
|
159
130
|
editSession.onDispose(() => {
|
|
160
131
|
this._rowsBeingEdited$.remove(editSession.liveRowValue$.value);
|
|
@@ -172,80 +143,64 @@ export class AbstractTableModel extends GarbageCollector {
|
|
|
172
143
|
});
|
|
173
144
|
});
|
|
174
145
|
}
|
|
175
|
-
get columns
|
|
176
|
-
return this.
|
|
146
|
+
get columns() {
|
|
147
|
+
return this._columnList.allColumns$;
|
|
177
148
|
}
|
|
178
|
-
get visibleColumns
|
|
179
|
-
return this.
|
|
149
|
+
get visibleColumns() {
|
|
150
|
+
return this._columnList.readonly$;
|
|
180
151
|
}
|
|
181
152
|
pluck(property, options) {
|
|
182
153
|
const columnId = options?.columnId || property.toString();
|
|
183
|
-
return this.addColumn(new PropertyColumnModel(columnId,
|
|
154
|
+
return this.addColumn(new PropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
|
|
184
155
|
}
|
|
185
156
|
pluckList(property, options) {
|
|
186
157
|
const columnId = options?.columnId || property.toString();
|
|
187
|
-
return this.addColumn(new ListPropertyColumnModel(columnId,
|
|
188
|
-
}
|
|
189
|
-
|
|
158
|
+
return this.addColumn(new ListPropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
|
|
159
|
+
}
|
|
160
|
+
// TODO: clean this up and assign the selection model on teh table directly.
|
|
161
|
+
// tableModel.useSelectionModel(model) and have the seleciton column automatically
|
|
162
|
+
// added. Need to look at how we're using the visibility controls as well.
|
|
163
|
+
// Should also lazy create the selection column model if someone accesses it.
|
|
164
|
+
_addSelectionColumn(selectionModel, visible) {
|
|
165
|
+
assert.isNil(this.selectionColumnModel);
|
|
166
|
+
const columnId = "selection-column";
|
|
167
|
+
this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
|
|
190
168
|
this.selectionColumnModel.useSelectionModel(selectionModel);
|
|
169
|
+
this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
|
|
170
|
+
const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
|
|
171
|
+
if (!isNil(visible)) {
|
|
172
|
+
selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
|
|
173
|
+
}
|
|
174
|
+
return selectionColumnModel;
|
|
191
175
|
}
|
|
192
176
|
addEditControls(saveCommandFactory, formFactory) {
|
|
193
177
|
this.saveCommandFactory = saveCommandFactory;
|
|
194
178
|
if (isFunction(formFactory)) {
|
|
195
179
|
this._createForm = formFactory;
|
|
196
180
|
}
|
|
197
|
-
const columnId =
|
|
198
|
-
return this.addColumn(new EditorControlColumnModel(columnId,
|
|
181
|
+
const columnId = "editControls";
|
|
182
|
+
return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
|
|
199
183
|
}
|
|
200
184
|
addCustomColumn(columnId, dataAccessor) {
|
|
201
|
-
return this.addColumn(new CustomValueColumnModel(columnId,
|
|
185
|
+
return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), dataAccessor));
|
|
202
186
|
}
|
|
203
187
|
addComponentColumn(columnId, component, onComponentInitOrOptions) {
|
|
204
|
-
return this.addColumn(new CustomValueColumnModel(columnId,
|
|
188
|
+
return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), row => row)).cellRenderer(component, onComponentInitOrOptions);
|
|
205
189
|
}
|
|
206
|
-
addMoreMenu(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
component.addMoreMenu(builder);
|
|
190
|
+
addMoreMenu(componentClass) {
|
|
191
|
+
return this.addComponentColumn("more-menu", TableMoreMenuComponent, (component) => {
|
|
192
|
+
component.configurePopupComponentType(componentClass);
|
|
210
193
|
}).columnTextProperties({
|
|
211
194
|
headerText() {
|
|
212
|
-
return
|
|
195
|
+
return "";
|
|
213
196
|
}
|
|
214
197
|
});
|
|
215
198
|
}
|
|
216
|
-
/**
|
|
217
|
-
* Use this method if the more menu popup needs custom components
|
|
218
|
-
*/
|
|
219
|
-
addCustomMoreMenu(componentClass, initialiseCallback) {
|
|
220
|
-
return this.addComponentColumn('custom-more-menu', TableCustomMoreMenuComponent, (component) => {
|
|
221
|
-
component.configurePopupComponentType(componentClass, initialiseCallback);
|
|
222
|
-
}).columnTextProperties({
|
|
223
|
-
headerText() {
|
|
224
|
-
return '';
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
addActionColumn(builder) {
|
|
229
|
-
return this.addComponentColumn("actions", TableActionColumnComponent, (c) => {
|
|
230
|
-
builder(c);
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
addFooterRow(component, initialiseCallback) {
|
|
234
|
-
assert.isNil(this.footerRowModel);
|
|
235
|
-
this.footerRowModel = new FooterRowModel.Impl(component, initialiseCallback);
|
|
236
|
-
return this.footerRowModel;
|
|
237
|
-
}
|
|
238
199
|
addTemplateColumn(columnId) {
|
|
239
|
-
return this.addColumn(new CustomTemplateColumnModel(columnId,
|
|
200
|
+
return this.addColumn(new CustomTemplateColumnModel(columnId, () => this.getColumnTextProperties(columnId)));
|
|
240
201
|
}
|
|
241
|
-
addRowClass(className, predicate
|
|
202
|
+
addRowClass(className, predicate) {
|
|
242
203
|
this.rowClassNamePredicates.push(new RowClass(className, predicate));
|
|
243
|
-
if (options) {
|
|
244
|
-
this.viewStateDependsOn(...DependsOnOptions.extract(options));
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
addRowAttribute(attributeName, getValue) {
|
|
248
|
-
this.rowAttributeGenerators.push(new RowAttribute(attributeName, getValue));
|
|
249
204
|
}
|
|
250
205
|
getRowClasses(row) {
|
|
251
206
|
const classNames = [];
|
|
@@ -256,13 +211,8 @@ export class AbstractTableModel extends GarbageCollector {
|
|
|
256
211
|
});
|
|
257
212
|
return classNames;
|
|
258
213
|
}
|
|
259
|
-
|
|
260
|
-
return this.
|
|
261
|
-
return { ...result, [generator.attributeName]: generator.getValue(row) };
|
|
262
|
-
}, {});
|
|
263
|
-
}
|
|
264
|
-
addColumn(column, position) {
|
|
265
|
-
return this.columnManager.addColumn(column, position);
|
|
214
|
+
addColumn(column, index) {
|
|
215
|
+
return this._columnList.addColumn(column, index);
|
|
266
216
|
}
|
|
267
217
|
columnTextProperties(columnTextProperties) {
|
|
268
218
|
this._columnTextPropertiesLookup = columnTextProperties;
|
|
@@ -277,10 +227,11 @@ export class AbstractTableModel extends GarbageCollector {
|
|
|
277
227
|
return this.hasUserSelectionModelThatIsEnabled() && !this.rowSelectionDisabledOnAllColumns$.value;
|
|
278
228
|
}
|
|
279
229
|
hasUserSelectionModelThatIsEnabled() {
|
|
280
|
-
|
|
230
|
+
const userSelectionModel = this.selectionColumnModel?.selectionModel.getProxyTarget();
|
|
231
|
+
return !!userSelectionModel && userSelectionModel.enabled$.value;
|
|
281
232
|
}
|
|
282
233
|
getSelectionModel() {
|
|
283
|
-
return this.selectionColumnModel
|
|
234
|
+
return this.selectionColumnModel?.selectionModel;
|
|
284
235
|
}
|
|
285
236
|
isHoverEnabled() {
|
|
286
237
|
return this.isRowSelectionEnabled() || this.rowClickListeners.listenerCount > 0;
|
|
@@ -310,4 +261,4 @@ export class AbstractTableModel extends GarbageCollector {
|
|
|
310
261
|
}
|
|
311
262
|
}
|
|
312
263
|
ProxyRegistry.registerOneTimeBinding(AbstractTableModel);
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxNQUFNLEVBSU4sbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFakIsR0FBRyxFQUNILGlCQUFpQixFQUNqQixnQkFBZ0IsRUFJaEIsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFLZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixD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QUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUE0QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGtCQUFrQixDQUFDLFdBQTZCLEVBQUUsR0FBUTtRQUN4RCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO2FBQU07WUFDTCxnQkFBZ0I7WUFDaEIsNkVBQTZFO1lBQzdFLHdFQUF3RTtZQUN4RSx1REFBdUQ7WUFDdkQsc0VBQXNFO1lBQ3RFLEtBQUs7U0FDTjtRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBRUY7QUFFRCxhQUFhLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgYXNzZXJ0LFxuICBCb29sZWFuVmFsdWVNb2RlbENoYWluLFxuICBDb21tYW5kLFxuICBDb25zdHJ1Y3RhYmxlLFxuICBEZWxlZ2F0aW5nTGlzdE1vZGVsLFxuICBEZXBlbmRzT25PcHRpb25zLFxuICBEaXJ0eVRyYWNraW5nRm9ybSxcbiAgRGlzcG9zYWJsZSxcbiAgRHNsLFxuICBFdmVudExpc3RlbmVyTGlzdCxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgSGFzVmFsdWUsXG4gIExpc3RNb2RlbCxcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZUxpc3RNb2RlbCxcbiAgUHJveHlSZWdpc3RyeSxcbiAgU2VsZWN0aW9uTW9kZWwsXG4gIFR5cGVzLFxuICBWYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsQ2hhaW5cbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgbGFuZyB9IGZyb20gJ0Bjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXMnO1xuXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IENvbHVtbk1hbmFnZXIgfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4tbWFuYWdlcic7XG5pbXBvcnQgeyBDZWxsUmVuZGVyZXJPcHRpb25zLCBDb2x1bW5Nb2RlbCwgT25Db21wb25lbnRJbml0IH0gZnJvbSAnLi9jb2x1bW4vY29sdW1uLW1vZGVsJztcbmltcG9ydCB7IENvbHVtbk9yZGVyTWFuYWdlciB9IGZyb20gJy4vY29sdW1uL2NvbHVtbi1vcmRlci1tYW5hZ2VyJztcbmltcG9ydCB7IENvbHVtblRleHRQcm9wZXJ0aWVzIH0gZnJvbSAnLi9jb2x1bW4vY29sdW1uLXRleHQtcHJvcGVydGllcyc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi9jb2x1bW4vY3VzdG9tLXRlbXBsYXRlLWNvbHVtbi1tb2RlbCc7XG5pbXBvcnQgeyBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi9jb2x1bW4vY3VzdG9tLXZhbHVlLWNvbHVtbi1tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWwgfSBmcm9tICcuL2NvbHVtbi9lZGl0b3ItY29udHJvbHMtY29sdW1uLW1vZGVsJztcbmltcG9ydCB7IExpc3RQcm9wZXJ0eUNvbHVtbk1vZGVsIH0gZnJvbSAnLi9jb2x1bW4vbGlzdC1wcm9wZXJ5LWNvbHVtbi1tb2RlbCc7XG5pbXBvcnQgeyBQcm9wZXJ0eUNvbHVtbk1vZGVsIH0gZnJvbSAnLi9jb2x1bW4vcHJvcGVydHktY29sdW1uLW1vZGVsJztcbmltcG9ydCB7IFNlbGVjdGlvbkNvbHVtbk1vZGVsIH0gZnJvbSAnLi9jb2x1bW4vc2VsZWN0aW9uLWNvbHVtbi1tb2RlbCc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4vZWRpdG9yL2VkaXQtc2Vzc2lvbic7XG5cbmltcG9ydCB7IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIgfSBmcm9tICcuL2ZpbHRlci9jb2x1bW4tdGV4dC1zZWFyY2gtZm9ybWF0dGVyJztcbmltcG9ydCB7IFRleHRTZWFyY2hQcmVkaWNhdGUgfSBmcm9tICcuL2ZpbHRlci90ZXh0LXNlYXJjaC1wcmVkaWNhdGUnO1xuaW1wb3J0IHsgRm9vdGVyUm93TW9kZWwgfSBmcm9tICcuL2Zvb3Rlci9mb290ZXItcm93LW1vZGVsJztcbmltcG9ydCB7IENlbGxSZW5kZXJlciB9IGZyb20gJy4vcmVuZGVyZXIvY2VsbC1yZW5kZXJlcic7XG5pbXBvcnQgeyBNZW51QnVpbGRlciB9IGZyb20gJy4vcmVuZGVyZXIvdGFibGUtYWN0aW9uLWNvbHVtbi9tZW51LWJ1aWxkZXInO1xuaW1wb3J0IHsgVGFibGVBY3Rpb25Db2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3JlbmRlcmVyL3RhYmxlLWFjdGlvbi1jb2x1bW4vdGFibGUtYWN0aW9uLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVDdXN0b21Nb3JlTWVudVBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi9yZW5kZXJlci90YWJsZS1jdXN0b20tbW9yZS1tZW51L3RhYmxlLWN1c3RvbS1tb3JlLW1lbnUtcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlQ3VzdG9tTW9yZU1lbnVDb21wb25lbnQgfSBmcm9tICcuL3JlbmRlcmVyL3RhYmxlLWN1c3RvbS1tb3JlLW1lbnUvdGFibGUtY3VzdG9tLW1vcmUtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IERlZmF1bHRBcnJheUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdEFycmF5Rm9ybWF0dGVyO1xuaW1wb3J0IERlZmF1bHRWYWx1ZUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdFZhbHVlRm9ybWF0dGVyO1xuXG4vLyBleHBvcnQgdHlwZSBTdHJpbmdQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgc3RyaW5nID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG4vLyBleHBvcnQgdHlwZSBOdW1iZXJQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG5cbmNsYXNzIFJvd0NsYXNzPFJvdz4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjbGFzc05hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgbWF0Y2hlczogKHJvdzogUm93KSA9PiBib29sZWFuKSB7XG4gIH1cbn1cblxuY2xhc3MgUm93QXR0cmlidXRlPFJvdz4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGdldFZhbHVlOiAocm93OiBSb3cpID0+IHN0cmluZykge1xuICB9XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGFibGVNb2RlbDxSb3cgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kYXRhU291cmNlJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfZmlsdGVyZWRSb3dzJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfdmlzaWJsZVJvd3MkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29sdW1uTWFuYWdlciA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBDb2x1bW5NYW5hZ2VyPFJvdz4oKSk7XG5cbiAgcHJpdmF0ZSBfZWRpdG9yU2Vzc2lvbnMgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxFZGl0U2Vzc2lvbjxSb3c+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3dzQmVpbmdFZGl0ZWQkOiBNdXRhYmxlTGlzdE1vZGVsPFJvdz47XG4gIHByaXZhdGUgc2F2ZUNvbW1hbmRGYWN0b3J5OiBDb21tYW5kLkZhY3Rvcnk8RGlydHlUcmFja2luZ0Zvcm08Um93PiwgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+O1xuICBwcml2YXRlIF9lZGl0b3JTZXNzaW9uQnlSb3dJZDogTWFwTW9kZWxDaGFpbjxhbnksIEVkaXRTZXNzaW9uPFJvdz4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcm93Q2xhc3NOYW1lUHJlZGljYXRlczogUm93Q2xhc3M8Um93PltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcm93QXR0cmlidXRlR2VuZXJhdG9yczogUm93QXR0cmlidXRlPFJvdz5bXSA9IFtdO1xuXG4gIHByaXZhdGUgX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiBDb2x1bW5UZXh0UHJvcGVydGllcyB9O1xuXG4gIHJlYWRvbmx5IGVkaXRpbmckOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICByZWFkb25seSBmaXJzdEVkaXRhYmxlQ29sdW1uJDogVmFsdWVNb2RlbENoYWluPENvbHVtbk1vZGVsPFJvdz4+O1xuICByZWFkb25seSBzZWxlY3Rpb25Db2x1bW5Nb2RlbDogU2VsZWN0aW9uQ29sdW1uTW9kZWw8Um93PjtcbiAgcHJpdmF0ZSByb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQ6IEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW47XG4gIHByaXZhdGUgcmVhZG9ubHkgcm93Q2xpY2tMaXN0ZW5lcnMgPSBuZXcgRXZlbnRMaXN0ZW5lckxpc3Q8KHJvdzogUm93KSA9PiB2b2lkPigpO1xuICByZWFkb25seSBmaXJzdFZpc2libGVDb2x1bW4kOiBWYWx1ZU1vZGVsPENvbHVtbk1vZGVsPFJvdz4+O1xuICByZWFkb25seSBsYXN0VmlzaWJsZUNvbHVtbiQ6IFZhbHVlTW9kZWw8Q29sdW1uTW9kZWw8Um93Pj47XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRm9ybTogKHJvdzogUm93KSA9PiBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+ID0gKHJvdykgPT4gbmV3IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4oKTtcbiAgcmVhZG9ubHkgdGV4dFNlYXJjaFByZWRpY2F0ZSQ6IFZhbHVlTW9kZWw8VGV4dFNlYXJjaFByZWRpY2F0ZTxSb3c+PjtcbiAgcHJvdGVjdGVkIGlkZW50aXR5T2Y6IChpdGVtOiBSb3cpID0+IGFueTtcbiAgcmVhZG9ubHkgZGF0YVNvdXJjZUVtcHR5JDogVmFsdWVNb2RlbDxib29sZWFuPjtcblxuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMkOiBMaXN0TW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgbGVhZFNlbGVjdGlvbiQ6IFZhbHVlTW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgaGFzU2VsZWN0aW9uJDogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcbiAgZm9vdGVyUm93TW9kZWw6IEZvb3RlclJvd01vZGVsLkltcGw8YW55PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0RlcGVuZGVuY2llcyA9IG5ldyBTZXQ8SGFzVmFsdWU8YW55Pj4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7IGNoYWluIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJCA9IG5ldyBNdXRhYmxlTGlzdE1vZGVsPFJvdz4oW10sIHtcbiAgICAgIGlkZW50aWZpZWRXaXRoOiByb3cgPT4gdGhpcy5pZGVudGl0eU9mKHJvdylcbiAgICB9KTtcbiAgICB0aGlzLl9lZGl0b3JTZXNzaW9uQnlSb3dJZCA9IGNoYWluKHRoaXMuX2VkaXRvclNlc3Npb25zKS5pbmRleEJ5KCdyb3dJZCcpO1xuICAgIHRoaXMuZWRpdGluZyQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuY291bnQoKS5pc0dyZWF0ZXJUaGFuKDApO1xuXG4gICAgdGhpcy50ZXh0U2VhcmNoUHJlZGljYXRlJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMkKS5yZWR1Y2VBbGwoY29sdW1ucyA9PiB7XG4gICAgICByZXR1cm4gKHJvdzogUm93LCByZWdleDogUmVnRXhwKSA9PiB7XG4gICAgICAgIHJldHVybiAoIXJlZ2V4IHx8ICEhY29sdW1ucy5maW5kKGMgPT4gcmVnZXgudGVzdChjLmdldFNlYXJjaFRleHRGb3Iocm93KSkpKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsID0gbmV3IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz4oJ3NlbGVjdGlvbi1jb2x1bW4nLCB0aGlzLmNvbHVtbk1hbmFnZXIsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoJ3NlbGVjdGlvbi1jb2x1bW4nKSk7XG4gICAgdGhpcy5hZGRDb2x1bW4odGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbCwgeyBiZWZvcmU6IG51bGwgfSk7IC8vIGZpcnN0IGNvbHVtblxuICAgIHRoaXMuYWRkUm93Q2xhc3MoJ2F1cC1yb3ctc2VsZWN0ZWQnLCByb3cgPT4gdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbC5pc1NlbGVjdGVkKHJvdykpO1xuXG4gICAgdGhpcy5maXJzdEVkaXRhYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMuY29sdW1ucyQpLnNlbGVjdChjID0+IGMuaGFzRWRpdG9yUG9ydGFsKCkpLmZpcnN0KCk7XG4gICAgdGhpcy5maXJzdFZpc2libGVDb2x1bW4kID0gY2hhaW4odGhpcy52aXNpYmxlQ29sdW1ucyQpLmZpcnN0KCk7XG4gICAgdGhpcy5sYXN0VmlzaWJsZUNvbHVtbiQgPSBjaGFpbih0aGlzLnZpc2libGVDb2x1bW5zJCkubGFzdCgpO1xuXG4gICAgdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQgPSBjaGFpbih0aGlzLmNvbHVtbk1hbmFnZXIudmlzaWJsZUNvbHVtbnMkKS5zZWxlY3QoY29sdW1uID0+IGNvbHVtbi5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSkuY291bnQoKS5lcXVhbHMoMCk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2VFbXB0eSQgPSBjaGFpbih0aGlzLmRhdGFTb3VyY2UkKS5pc0VtcHR5KCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMkID0gdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbC5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZEl0ZW1zJDtcbiAgICB0aGlzLmxlYWRTZWxlY3Rpb24kID0gdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbC5zZWxlY3Rpb25Nb2RlbC5sZWFkU2VsZWN0aW9uJDtcbiAgICB0aGlzLmhhc1NlbGVjdGlvbiQgPSBjaGFpbih0aGlzLnNlbGVjdGVkSXRlbXMkKS5pc05vdEVtcHR5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlJCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UkLnNldERlbGVnYXRlKGRhdGFTb3VyY2UkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2RvOiBtYWtlIHRoaXMgZm9yY2Ugb25lIHRhYmxlIGF0IGEgdGltZVxuICAgKiBAcGFyYW0gaW5qZWN0b3JcbiAgICogQHBhcmFtIGlkZW50aXR5T2ZcbiAgICogQHBhcmFtIHJlc3RcbiAgICovXG4gIGluaXRpYWxpc2UoaW5qZWN0b3I6IEluamVjdG9yLCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnkpIHtcbiAgICAvLyBub3Qgc3VyZSBpZiBJIHNob3VsZCBkZWZpbmUgdGhlc2UgYXQgdGhlIG1vZHVsZSBsZXZlbCBvciBub3QuLi5cbiAgICBjb25zdCBjdXN0b21JbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBEZWZhdWx0VmFsdWVGb3JtYXR0ZXIgfSxcbiAgICAgICAgeyBwcm92aWRlOiBEZWZhdWx0QXJyYXlGb3JtYXR0ZXIgfVxuICAgICAgXSxcbiAgICAgIHBhcmVudDogaW5qZWN0b3JcbiAgICB9KTtcbiAgICB0aGlzLmNvbHVtbnMkLnZhbHVlLmZvckVhY2goYyA9PiBjLmluaXRpYWxpc2UoY3VzdG9tSW5qZWN0b3IpKTtcbiAgICB0aGlzLmlkZW50aXR5T2YgPSBpZGVudGl0eU9mO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYWRkaXRpb25hbCBtb2RlbHMgdGhhdCB3aWxsIHRyaWdnZXIgYSB0YWJsZSByZXBhaW50LiAgVGhpcyBpcyByZXF1aXJlZCBpZiB0aGUgdGFibGVcbiAgICogbmVlZHMgdG8gYmUgcmVkcmF3biBvdXRzaWRlIG9mIGNoYW5nZXMgdG8gdGhlIHJvd3Mgb2YgZmlsdGVycy4gIGkuZS4gc29tZSBldGVybmFsIHN0YXRlIGlzIHVzZWRcbiAgICogdG8gYXNzaWduIHJvdyBjbGFzc2VzIGV0Yy5cbiAgICpcbiAgICogTm90ZTogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIHRhYmxlIGlzIGJvdW5kIHRvIHRoZSBtb2RlbC5cbiAgICogQHBhcmFtIGhhc1ZhbHVlc1xuICAgKi9cbiAgdmlld1N0YXRlRGVwZW5kc09uKC4uLmhhc1ZhbHVlczogUmVhZG9ubHlBcnJheTxIYXNWYWx1ZTxhbnk+Pikge1xuICAgIGhhc1ZhbHVlcy5mb3JFYWNoKGl0ID0+IHRoaXMuX3ZpZXdEZXBlbmRlbmNpZXMuYWRkKGl0KSk7XG4gIH1cblxuICBnZXQgdmlld1N0YXRlRGVwZW5kZW5jaWVzKCk6IFJlYWRvbmx5QXJyYXk8SGFzVmFsdWU8YW55Pj4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3ZpZXdEZXBlbmRlbmNpZXMudmFsdWVzKCkpO1xuICB9XG5cbiAgZ2V0IGRhdGFTb3VyY2UkKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlJC5yZWFkb25seSQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcm93cyB0aGF0IGFyZSB2aXNpYmxlIGFmdGVyIGFueSBmaWx0ZXJzIGFyZSBhcHBsaWVkLiAgSWYgdGhlcmUgYXJlXG4gICAqIG5vIGZpbHRlcnMgdGhlbiB0aGlzIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHJvb3QgZGF0YXNldC5cbiAgICovXG4gIGdldCBmaWx0ZXJlZFJvd3MkKCk6IExpc3RNb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWRSb3dzJC5yZWFkb25seSQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcm93cyBhcmUgY3VycmVudGx5IHZpc2libGUgdG8gdGhlIHVzZXIuICBJLmUuIHRoZSBjdXJyZW50IHBhZ2UgaW4gYSBwYWdlZCB0YWJsZSBvciB0aGVcbiAgICogZXhwYW5kZWQgcm93cyBpbiBhIHRyZWUgdGFibGUuXG4gICAqL1xuICBnZXQgdmlzaWJsZVJvd3MkKCk6IExpc3RNb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVJvd3MkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIGdldCByb3dzQmVpbmdFZGl0ZWQkKCk6IExpc3RNb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5yZWFkb25seSQ7XG4gIH1cblxuICBzdGFydEVkaXRTZXNzaW9uKHJvdzogUm93KTogRWRpdFNlc3Npb248Um93PiB7XG4gICAgY29uc3Qgcm93SWQgPSB0aGlzLmlkZW50aXR5T2Yocm93KTtcbiAgICBpZiAodGhpcy5fcm93c0JlaW5nRWRpdGVkJC5xdWVyeSgpLmluZGV4T2Yocm93KSA+IC0xKSB7XG4gICAgICByZXR1cm4gbGFuZy5pbGxlZ2FsU3RhdGUoYFJvdyB3aXRoIGlkPSR7cm93SWR9IGFscmVhZHkgYmVpbmcgZWRpdGVkYCk7XG4gICAgfVxuXG4gICAgLy8gdG9kbzogcGFzcyB0aGUgZmFjdG9yaWVzIHRvIHRoZSBlZGl0IHNlc3Npb24gc28gd2UgY2FuIG1ha2UgdGhlIHdob2xlIGxvdCBwbHVnZ2FibGU/XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuX2NyZWF0ZUZvcm0ocm93KTtcbiAgICBjb25zdCBzYXZlQ29tbWFuZCA9IHRoaXMuc2F2ZUNvbW1hbmRGYWN0b3J5LmNyZWF0ZShmb3JtLCB7IGRpc3Bvc2VkV2l0aDogdGhpcyB9KTtcbiAgICBjb25zdCBlZGl0U2Vzc2lvbiA9IG5ldyBFZGl0U2Vzc2lvbjxSb3c+KHJvd0lkLCByb3csIGZvcm0sIHNhdmVDb21tYW5kKTtcbiAgICBjb25zdCB7IHdoZW4gfSA9IERzbC5kaXNwb3NlV2l0aChlZGl0U2Vzc2lvbik7XG4gICAgd2hlbihlZGl0U2Vzc2lvbi5saXZlUm93VmFsdWUkKS5jaGFuZ2VzKChlZGl0ZWRWYWx1ZSkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5yZXBsYWNlT3JQdXNoKGVkaXRlZFZhbHVlKTtcbiAgICB9LCB7IGluaXRpYWxWYWx1ZTogJ3RyaWdnZXJDaGFuZ2VVbmxlc3NOaWwnIH0pO1xuXG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucHVzaChlZGl0U2Vzc2lvbik7XG4gICAgZWRpdFNlc3Npb24ub25EaXNwb3NlKCgpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVtb3ZlKGVkaXRTZXNzaW9uLmxpdmVSb3dWYWx1ZSQudmFsdWUpO1xuICAgICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucmVtb3ZlKGVkaXRTZXNzaW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZWRpdFNlc3Npb247XG4gIH1cblxuICBnZXRFZGl0U2Vzc2lvbkZvcihyb3c6IFJvdyk6IEVkaXRTZXNzaW9uPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JTZXNzaW9uQnlSb3dJZC5nZXQodGhpcy5pZGVudGl0eU9mKHJvdykpO1xuICB9XG5cbiAgY2FuY2VsQWxsRWRpdG9yU2Vzc2lvbnMoKSB7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucnVuSW5UcmFuc2FjdGlvbigoZHJhZnQpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucnVuSW5UcmFuc2FjdGlvbigoKSA9PiB7XG4gICAgICAgIGRyYWZ0LnZhbHVlLmZvckVhY2goc2Vzc2lvbiA9PiBzZXNzaW9uLmRpc3Bvc2UoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgZ2V0IGNvbHVtbnMkKCk6IExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTWFuYWdlci5hbGxDb2x1bW5zJDtcbiAgfVxuXG4gIGdldCB2aXNpYmxlQ29sdW1ucyQoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5NYW5hZ2VyLnZpc2libGVDb2x1bW5zJDtcbiAgfVxuXG4gIHBsdWNrPFAgZXh0ZW5kcyBUeXBlcy5WYWx1ZVByb3BlcnRpZXNPZjxSb3c+Pihwcm9wZXJ0eTogUCwgb3B0aW9ucz86IHtcbiAgICBjb2x1bW5JZDogc3RyaW5nXG4gIH0pOiBQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4ge1xuICAgIGNvbnN0IGNvbHVtbklkID0gb3B0aW9ucz8uY29sdW1uSWQgfHwgcHJvcGVydHkudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgdGhpcy5jb2x1bW5NYW5hZ2VyLCBwcm9wZXJ0eSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIHBsdWNrTGlzdDxQIGV4dGVuZHMgVHlwZXMuQXJyYXlQcm9wZXJ0aWVzT2Y8Um93Pj4ocHJvcGVydHk6IFAsIG9wdGlvbnM/OiB7XG4gICAgY29sdW1uSWQ6IHN0cmluZ1xuICB9KTogTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPiB7XG4gICAgY29uc3QgY29sdW1uSWQgPSBvcHRpb25zPy5jb2x1bW5JZCB8fCBwcm9wZXJ0eS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgdGhpcy5jb2x1bW5NYW5hZ2VyLCBwcm9wZXJ0eSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIHVzZVNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbk1vZGVsPzogU2VsZWN0aW9uTW9kZWw8Um93Pikge1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwudXNlU2VsZWN0aW9uTW9kZWwoc2VsZWN0aW9uTW9kZWwpO1xuICB9XG5cbiAgYWRkRWRpdENvbnRyb2xzKHNhdmVDb21tYW5kRmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PERpcnR5VHJhY2tpbmdGb3JtPFJvdz4sIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PiwgZm9ybUZhY3Rvcnk/OiAocm93OiBSb3cpID0+IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4pOiBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgdGhpcy5zYXZlQ29tbWFuZEZhY3RvcnkgPSBzYXZlQ29tbWFuZEZhY3Rvcnk7XG4gICAgaWYgKGlzRnVuY3Rpb24oZm9ybUZhY3RvcnkpKSB7XG4gICAgICB0aGlzLl9jcmVhdGVGb3JtID0gZm9ybUZhY3Rvcnk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbklkID0gJ2VkaXRDb250cm9scyc7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWw8Um93Pihjb2x1bW5JZCwgdGhpcy5jb2x1bW5NYW5hZ2VyLCBzYXZlQ29tbWFuZEZhY3RvcnksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBhZGRDdXN0b21Db2x1bW48Vj4oY29sdW1uSWQ6IHN0cmluZywgZGF0YUFjY2Vzc29yOiAocm93OiBSb3cpID0+IFYpOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgVj4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFY+KGNvbHVtbklkLCB0aGlzLmNvbHVtbk1hbmFnZXIsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpLCBkYXRhQWNjZXNzb3IpKTtcbiAgfVxuXG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb25Jbml0PzogT25Db21wb25lbnRJbml0PEM+KTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz5cbiAgYWRkQ29tcG9uZW50Q29sdW1uPEMgZXh0ZW5kcyBDZWxsUmVuZGVyZXI8UGFydGlhbDxSb3c+Pj4oY29sdW1uSWQ6IHN0cmluZywgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPEM+LCBvcHRpb25zPzogQ2VsbFJlbmRlcmVyT3B0aW9uczxSb3csIEM+KTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz5cbiAgYWRkQ29tcG9uZW50Q29sdW1uPEMgZXh0ZW5kcyBDZWxsUmVuZGVyZXI8UGFydGlhbDxSb3c+Pj4oY29sdW1uSWQ6IHN0cmluZywgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPEM+LCBvbkNvbXBvbmVudEluaXRPck9wdGlvbnM/OiBPbkNvbXBvbmVudEluaXQ8Qz4gfCBDZWxsUmVuZGVyZXJPcHRpb25zPFJvdywgQz4pOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93PiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93Pihjb2x1bW5JZCwgdGhpcy5jb2x1bW5NYW5hZ2VyLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgcm93ID0+IHJvdykpLmNlbGxSZW5kZXJlcihjb21wb25lbnQsIG9uQ29tcG9uZW50SW5pdE9yT3B0aW9ucyk7XG4gIH1cblxuICBhZGRNb3JlTWVudTxDIGV4dGVuZHMgVGFibGVDdXN0b21Nb3JlTWVudVBvcHVwQ29tcG9uZW50PFJvdz4+KGJ1aWxkZXI6IChtZW51OiBNZW51QnVpbGRlcjxSb3c+KSA9PiB2b2lkKSB7XG4gICAgLy8gcmUtdXNpbmcgdGhlIGFjdGlvbiBjb2x1bW4gYXMgaXQgbXVjaCBzaW1wbGVyIGluIHRlaCBjYXNlIG9mIGp1c3QgY29tbWFuZHNcbiAgICByZXR1cm4gdGhpcy5hZGRBY3Rpb25Db2x1bW4oKGNvbXBvbmVudCkgPT4ge1xuICAgICAgY29tcG9uZW50LmFkZE1vcmVNZW51KGJ1aWxkZXIpO1xuICAgIH0pLmNvbHVtblRleHRQcm9wZXJ0aWVzKHtcbiAgICAgIGhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCBpZiB0aGUgbW9yZSBtZW51IHBvcHVwIG5lZWRzIGN1c3RvbSBjb21wb25lbnRzXG4gICAqL1xuICBhZGRDdXN0b21Nb3JlTWVudTxDIGV4dGVuZHMgVGFibGVDdXN0b21Nb3JlTWVudVBvcHVwQ29tcG9uZW50PFJvdz4+KGNvbXBvbmVudENsYXNzOiBDb25zdHJ1Y3RhYmxlPEM+LCBpbml0aWFsaXNlQ2FsbGJhY2s/OiAoY29tcG9uZW50OiBDKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q29sdW1uKCdjdXN0b20tbW9yZS1tZW51JywgVGFibGVDdXN0b21Nb3JlTWVudUNvbXBvbmVudCwgKGNvbXBvbmVudDogVGFibGVDdXN0b21Nb3JlTWVudUNvbXBvbmVudDxSb3c+KSA9PiB7XG4gICAgICBjb21wb25lbnQuY29uZmlndXJlUG9wdXBDb21wb25lbnRUeXBlKGNvbXBvbmVudENsYXNzLCBpbml0aWFsaXNlQ2FsbGJhY2spO1xuICAgIH0pLmNvbHVtblRleHRQcm9wZXJ0aWVzKHtcbiAgICAgIGhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkQWN0aW9uQ29sdW1uKGJ1aWxkZXI6IChtZW51OiBUYWJsZUFjdGlvbkNvbHVtbkNvbXBvbmVudDxSb3c+KSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q29sdW1uKFwiYWN0aW9uc1wiLCBUYWJsZUFjdGlvbkNvbHVtbkNvbXBvbmVudCwgKGM6IFRhYmxlQWN0aW9uQ29sdW1uQ29tcG9uZW50PFJvdz4pID0+IHtcbiAgICAgIGJ1aWxkZXIoYyk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRGb290ZXJSb3c8Qz4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPEM+LCBpbml0aWFsaXNlQ2FsbGJhY2s/OiAoY29tcG9uZW50OiBDKSA9PiB2b2lkKTogRm9vdGVyUm93TW9kZWw8Qz4ge1xuICAgIGFzc2VydC5pc05pbCh0aGlzLmZvb3RlclJvd01vZGVsKTtcbiAgICB0aGlzLmZvb3RlclJvd01vZGVsID0gbmV3IEZvb3RlclJvd01vZGVsLkltcGwoY29tcG9uZW50LCBpbml0aWFsaXNlQ2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzLmZvb3RlclJvd01vZGVsO1xuICB9XG5cbiAgYWRkVGVtcGxhdGVDb2x1bW48Vj4oY29sdW1uSWQ6IHN0cmluZyk6IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsPFJvdz4oY29sdW1uSWQsIHRoaXMuY29sdW1uTWFuYWdlciwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIGFkZFJvd0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBwcmVkaWNhdGU6IChyb3c6IFJvdykgPT4gYm9vbGVhbiwgb3B0aW9ucz86IERlcGVuZHNPbk9wdGlvbnMpIHtcbiAgICB0aGlzLnJvd0NsYXNzTmFtZVByZWRpY2F0ZXMucHVzaChuZXcgUm93Q2xhc3M8Um93PihjbGFzc05hbWUsIHByZWRpY2F0ZSkpO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnZpZXdTdGF0ZURlcGVuZHNPbiguLi5EZXBlbmRzT25PcHRpb25zLmV4dHJhY3Qob3B0aW9ucykpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJvd0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIGdldFZhbHVlOiAocm93OiBSb3cpID0+IHN0cmluZykge1xuICAgIHRoaXMucm93QXR0cmlidXRlR2VuZXJhdG9ycy5wdXNoKG5ldyBSb3dBdHRyaWJ1dGU8Um93PihhdHRyaWJ1dGVOYW1lLCBnZXRWYWx1ZSkpO1xuICB9XG5cbiAgZ2V0Um93Q2xhc3Nlcyhyb3c6IFJvdyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMucm93Q2xhc3NOYW1lUHJlZGljYXRlcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKGkubWF0Y2hlcyhyb3cpKSB7XG4gICAgICAgIGNsYXNzTmFtZXMucHVzaChpLmNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsYXNzTmFtZXM7XG4gIH1cblxuICBnZXRSb3dBdHRyaWJ1dGVzKHJvdzogUm93KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMucm93QXR0cmlidXRlR2VuZXJhdG9ycy5yZWR1Y2UoKHJlc3VsdCwgZ2VuZXJhdG9yKSA9PiB7XG4gICAgICByZXR1cm4geyAuLi5yZXN1bHQsIFtnZW5lcmF0b3IuYXR0cmlidXRlTmFtZV06IGdlbmVyYXRvci5nZXRWYWx1ZShyb3cpIH07XG4gICAgfSwge30pO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgYWRkQ29sdW1uPEMgZXh0ZW5kcyBDb2x1bW5Nb2RlbDxSb3c+Pihjb2x1bW46IEMsIHBvc2l0aW9uPzogQ29sdW1uT3JkZXJNYW5hZ2VyLlBvc2l0aW9uKTogQyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTWFuYWdlci5hZGRDb2x1bW4oY29sdW1uLCBwb3NpdGlvbik7XG4gIH1cblxuICBjb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5UZXh0UHJvcGVydGllczogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogQ29sdW1uVGV4dFByb3BlcnRpZXMgfSkge1xuICAgIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwID0gY29sdW1uVGV4dFByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZDogc3RyaW5nKTogQ29sdW1uVGV4dFByb3BlcnRpZXMge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5UZXh0UHJvcGVydGllc0xvb2t1cCA/IHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwW2NvbHVtbklkXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbjogQ29sdW1uTW9kZWw8Um93Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpICYmIGNvbHVtbi5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKTtcbiAgfVxuXG4gIGlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCkgJiYgIXRoaXMucm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkLnZhbHVlO1xuICB9XG5cbiAgaGFzVXNlclNlbGVjdGlvbk1vZGVsVGhhdElzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbC5zZWxlY3Rpb25Nb2RlbC5lbmFibGVkJC52YWx1ZTtcbiAgfVxuXG4gIGdldFNlbGVjdGlvbk1vZGVsKCk6IFNlbGVjdGlvbk1vZGVsPFJvdz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLnNlbGVjdGlvbk1vZGVsO1xuICB9XG5cbiAgaXNIb3ZlckVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkgfHwgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5saXN0ZW5lckNvdW50ID4gMDtcbiAgfVxuXG4gIGlzQ3Vyc29yRW5hYmxlZChjb2x1bW46IENvbHVtbk1vZGVsPFJvdz4pIHtcbiAgICByZXR1cm4gdGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uKSB8fCB0aGlzLnJvd0NsaWNrTGlzdGVuZXJzLmxpc3RlbmVyQ291bnQgPiAwO1xuICB9XG5cbiAgc2VsZWN0Um93KHJvdzogUm93KSB7XG4gICAgdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbD8uc2VsZWN0Um93KHJvdyk7XG4gIH1cblxuICBvblJvd0NsaWNrZWQoY2FsbGJhY2s6IChyb3c6IFJvdykgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLnJvd0NsaWNrTGlzdGVuZXJzLmFkZChjYWxsYmFjayk7XG4gIH1cblxuICBfbm90aWZ5Q2VsbENsaWNrZWQoY29sdW1uTW9kZWw6IENvbHVtbk1vZGVsPFJvdz4sIHJvdzogUm93KSB7XG4gICAgaWYgKHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbk1vZGVsKSkge1xuICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29uc29sZS5sb2coe1xuICAgICAgLy8gICBoYXNFbmFibGVkVXNlclNlbGVjdGlvbk1vZGVsOiB0aGlzLmhhc1VzZXJTZWxlY3Rpb25Nb2RlbFRoYXRJc0VuYWJsZWQoKSxcbiAgICAgIC8vICAgYWxsU2VsZWN0aW9uRGlzYWJsZWQ6IHRoaXMucm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkLnZhbHVlLFxuICAgICAgLy8gICByb3dTZWxlY3Rpb25FbmFibGVkOiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpLFxuICAgICAgLy8gICByb3dTZWxlY3Rpb25FbmFibGVkRm9yQ29sdW1uOiBjb2x1bW5Nb2RlbC5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKVxuICAgICAgLy8gfSlcbiAgICB9XG5cbiAgICB0aGlzLnJvd0NsaWNrTGlzdGVuZXJzLmZpcmUobCA9PiBsKHJvdykpO1xuICB9XG5cbn1cblxuUHJveHlSZWdpc3RyeS5yZWdpc3Rlck9uZVRpbWVCaW5kaW5nKEFic3RyYWN0VGFibGVNb2RlbCk7XG4iXX0=
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBSU4sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUVqQixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUdkLFVBQVUsRUFDTyxPQUFPLEVBQWEsYUFBYSxFQUNuRCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUU1QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2xELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBS2hGLE9BQU8s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QztDQUVGO0FBQ0QsYUFBYSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHtJbmplY3Rvcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgQm9vbGVhblZhbHVlTW9kZWxDaGFpbixcbiAgQ2FuSWRlbnRpZnksXG4gIENvbW1hbmQsIENvbnN0cnVjdGFibGUsXG4gIERlbGVnYXRpbmdMaXN0TW9kZWwsXG4gIERpcnR5VHJhY2tpbmdGb3JtLFxuICBEaXNwb3NhYmxlLFxuICBEc2wsXG4gIEV2ZW50TGlzdGVuZXJMaXN0LFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBMaXN0TW9kZWwsIE1hcE1vZGVsQ2hhaW4sXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIFNlbGVjdGlvbk1vZGVsLFxuICBQcm94aWZ5LFxuICBUeXBlcyxcbiAgVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbENoYWluLCBwcm94aWZ5LCBQcm94aWZpZWQsIFByb3h5UmVnaXN0cnlcbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQgeyBsYW5nIH0gZnJvbSBcIkBjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXNcIjtcblxuaW1wb3J0IHtpc0Z1bmN0aW9uLCBpc05pbH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFRhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi9hYnN0cmFjdC10YWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7Q29sdW1uTGlzdE1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vY29sdW1uLWxpc3QtbW9kZWxcIjtcbmltcG9ydCB7Q2VsbFJlbmRlcmVyT3B0aW9ucywgQ29sdW1uTW9kZWwsIE9uQ29tcG9uZW50SW5pdH0gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtDb2x1bW5UZXh0UHJvcGVydGllc30gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi10ZXh0LXByb3BlcnRpZXNcIjtcbmltcG9ydCB7Q3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2N1c3RvbS10ZW1wbGF0ZS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7Q3VzdG9tVmFsdWVDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2N1c3RvbS12YWx1ZS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7RWRpdG9yQ29udHJvbENvbHVtbk1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vZWRpdG9yLWNvbnRyb2xzLWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtMaXN0UHJvcGVydHlDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2xpc3QtcHJvcGVyeS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7UHJvcGVydHlDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL3Byb3BlcnR5LWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtTZWxlY3Rpb25Db2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL3NlbGVjdGlvbi1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7RWRpdFNlc3Npb259IGZyb20gXCIuL2VkaXRvci9lZGl0LXNlc3Npb25cIjtcbmltcG9ydCB7Q2VsbFJlbmRlcmVyfSBmcm9tIFwiLi9yZW5kZXJlci9jZWxsLXJlbmRlcmVyXCI7XG5cbmltcG9ydCB7Q29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcn0gZnJvbSBcIi4vZmlsdGVyL2NvbHVtbi10ZXh0LXNlYXJjaC1mb3JtYXR0ZXJcIjtcbmltcG9ydCB7VGV4dFNlYXJjaFByZWRpY2F0ZX0gZnJvbSBcIi4vZmlsdGVyL3RleHQtc2VhcmNoLXByZWRpY2F0ZVwiO1xuaW1wb3J0IHtcbiAgVGFibGVNb3JlTWVudVBvcHVwQ29tcG9uZW50XG59IGZyb20gXCIuL3JlbmRlcmVyL3RhYmxlLW1vcmUtbWVudS90YWJsZS1tb3JlLW1lbnUtcG9wdXAvdGFibGUtbW9yZS1tZW51LXBvcHVwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZU1vcmVNZW51Q29tcG9uZW50fSBmcm9tIFwiLi9yZW5kZXJlci90YWJsZS1tb3JlLW1lbnUvdGFibGUtbW9yZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZU1vZGVsfSBmcm9tIFwiLi90YWJsZS90YWJsZS1tb2RlbFwiO1xuaW1wb3J0IERlZmF1bHRBcnJheUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdEFycmF5Rm9ybWF0dGVyO1xuaW1wb3J0IERlZmF1bHRWYWx1ZUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdFZhbHVlRm9ybWF0dGVyO1xuXG4vLyBleHBvcnQgdHlwZSBTdHJpbmdQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgc3RyaW5nID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG4vLyBleHBvcnQgdHlwZSBOdW1iZXJQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG5cbmNsYXNzIFJvd0NsYXNzPFJvdz4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjbGFzc05hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgbWF0Y2hlczogKHJvdzogUm93KSA9PiBib29sZWFuKSB7XG4gIH1cbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFTb3VyY2UkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9maWx0ZXJlZFJvd3MkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbkxpc3QgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgQ29sdW1uTGlzdE1vZGVsPFJvdz4oKSk7XG5cbiAgcHJpdmF0ZSBfZWRpdG9yU2Vzc2lvbnMgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxFZGl0U2Vzc2lvbjxSb3c+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3dzQmVpbmdFZGl0ZWQkOiBNdXRhYmxlTGlzdE1vZGVsPFJvdz47XG4gIHByaXZhdGUgc2F2ZUNvbW1hbmRGYWN0b3J5OiBDb21tYW5kLkZhY3Rvcnk8RGlydHlUcmFja2luZ0Zvcm08Um93PiwgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+O1xuICBwcml2YXRlIF9lZGl0b3JTZXNzaW9uQnlSb3dJZDogTWFwTW9kZWxDaGFpbjxhbnksIEVkaXRTZXNzaW9uPFJvdz4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcm93Q2xhc3NOYW1lUHJlZGljYXRlczogUm93Q2xhc3M8Um93PltdID0gW107XG5cbiAgcHJpdmF0ZSBfY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXA6IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IENvbHVtblRleHRQcm9wZXJ0aWVzIH07XG5cbiAgcmVhZG9ubHkgZWRpdGluZyQ6IEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW47XG4gIHJlYWRvbmx5IGZpcnN0RWRpdGFibGVDb2x1bW4kOiBWYWx1ZU1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIHByaXZhdGUgc2VsZWN0aW9uQ29sdW1uTW9kZWw6IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz47XG4gIHByaXZhdGUgcm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NsaWNrTGlzdGVuZXJzID0gbmV3IEV2ZW50TGlzdGVuZXJMaXN0PChyb3c6IFJvdykgPT4gdm9pZD4oKTtcbiAgcmVhZG9ubHkgZmlyc3RWaXNpYmxlQ29sdW1uJDogVmFsdWVNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgcmVhZG9ubHkgbGFzdFZpc2libGVDb2x1bW4kOiBWYWx1ZU1vZGVsPENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIHByaXZhdGUgX2NyZWF0ZUZvcm06IChyb3c6IFJvdykgPT4gRGlydHlUcmFja2luZ0Zvcm08Um93PiA9IChyb3cpID0+IG5ldyBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+KCk7XG4gIHJlYWRvbmx5IHRleHRTZWFyY2hQcmVkaWNhdGUkOiBWYWx1ZU1vZGVsPFRleHRTZWFyY2hQcmVkaWNhdGU8Um93Pj47XG4gIHByb3RlY3RlZCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnk7XG4gIHJlYWRvbmx5IGRhdGFTb3VyY2VFbXB0eSQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZWxQcm94eSA9IHByb3hpZnkoU2VsZWN0aW9uTW9kZWw8Um93PikgYXMgUHJveGlmaWVkPFNlbGVjdGlvbk1vZGVsPFJvdz4+O1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMkOiBMaXN0TW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgbGVhZFNlbGVjdGlvbiQ6IFZhbHVlTW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgaGFzU2VsZWN0aW9uJDogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxSb3c+KFtdLCB7XG4gICAgICBpZGVudGlmaWVkV2l0aDogcm93ID0+IHRoaXMuaWRlbnRpdHlPZihyb3cpXG4gICAgfSk7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbkJ5Um93SWQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuaW5kZXhCeShcInJvd0lkXCIpO1xuICAgIHRoaXMuZWRpdGluZyQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuY291bnQoKS5pc0dyZWF0ZXJUaGFuKDApO1xuXG4gICAgdGhpcy50ZXh0U2VhcmNoUHJlZGljYXRlJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMpLnJlZHVjZShjb2x1bW5zID0+IHtcbiAgICAgIHJldHVybiAocm93OiBSb3csIHJlZ2V4OiBSZWdFeHApID0+IHtcbiAgICAgICAgcmV0dXJuICghcmVnZXggfHwgISFjb2x1bW5zLmZpbmQoYyA9PiByZWdleC50ZXN0KGMuZ2V0U2VhcmNoVGV4dEZvcihyb3cpKSkpO1xuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmZpcnN0RWRpdGFibGVDb2x1bW4kID0gY2hhaW4odGhpcy5jb2x1bW5zKS5zZWxlY3QoYyA9PiBjLmhhc0VkaXRvclBvcnRhbCgpKS5maXJzdCgpO1xuICAgIHRoaXMuZmlyc3RWaXNpYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QpLmZpcnN0KCk7XG4gICAgdGhpcy5sYXN0VmlzaWJsZUNvbHVtbiQgPSBjaGFpbih0aGlzLl9jb2x1bW5MaXN0KS5sYXN0KCk7XG5cbiAgICB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJCA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QpLnNlbGVjdChjb2x1bW4gPT4gY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpKS5jb3VudCgpLmVxdWFscygwKTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZUVtcHR5JCA9IGNoYWluKHRoaXMuZGF0YVNvdXJjZSQpLmlzRW1wdHkoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsUHJveHkuc2VsZWN0ZWRJdGVtcyQ7XG4gICAgdGhpcy5sZWFkU2VsZWN0aW9uJCA9IHRoaXMuc2VsZWN0aW9uTW9kZWxQcm94eS5sZWFkU2VsZWN0aW9uJDtcbiAgICB0aGlzLmhhc1NlbGVjdGlvbiQgPSBjaGFpbih0aGlzLnNlbGVjdGVkSXRlbXMkKS5pc05vdEVtcHR5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlJCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UkLnNldERlbGVnYXRlKGRhdGFTb3VyY2UkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2RvOiBtYWtlIHRoaXMgZm9yY2Ugb25lIHRhYmxlIGF0IGEgdGltZVxuICAgKiBAcGFyYW0gaW5qZWN0b3JcbiAgICogQHBhcmFtIGlkZW50aXR5T2ZcbiAgICogQHBhcmFtIHJlc3RcbiAgICovXG4gIGluaXRpYWxpc2UoaW5qZWN0b3I6IEluamVjdG9yLCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnkpIHtcbiAgICAvLyBub3Qgc3VyZSBpZiBJIHNob3VsZCBkZWZpbmUgdGhlc2UgYXQgdGhlIG1vZHVsZSBsZXZlbCBvciBub3QuLi5cbiAgICBjb25zdCBjdXN0b21JbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge3Byb3ZpZGU6IERlZmF1bHRWYWx1ZUZvcm1hdHRlcn0sXG4gICAgICAgIHtwcm92aWRlOiBEZWZhdWx0QXJyYXlGb3JtYXR0ZXJ9XG4gICAgICBdLFxuICAgICAgcGFyZW50OiBpbmplY3RvclxuICAgIH0pO1xuICAgIHRoaXMuY29sdW1ucy52YWx1ZS5mb3JFYWNoKGMgPT4gYy5pbml0aWFsaXNlKGN1c3RvbUluamVjdG9yKSk7XG4gICAgdGhpcy5pZGVudGl0eU9mID0gaWRlbnRpdHlPZjtcbiAgfVxuXG4gIGdldCBkYXRhU291cmNlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSQucmVhZG9ubHkkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvd3MgdGhhdCBhcmUgdmlzaWJsZSBhZnRlciBhbnkgZmlsdGVycyBhcmUgYXBwbGllZC4gIElmIHRoZXJlIGFyZVxuICAgKiBubyBmaWx0ZXJzIHRoZW4gdGhpcyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSByb290IGRhdGFzZXQuXG4gICAqL1xuICBnZXQgZmlsdGVyZWRSb3dzJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcmVkUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvd3MgYXJlIGN1cnJlbnRseSB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgSS5lLiB0aGUgY3VycmVudCBwYWdlIGluIGEgcGFnZWQgdGFibGUgb3IgdGhlXG4gICAqIGV4cGFuZGVkIHJvd3MgaW4gYSB0cmVlIHRhYmxlLlxuICAgKi9cbiAgZ2V0IHZpc2libGVSb3dzJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVSb3dzJC5yZWFkb25seSQ7XG4gIH1cblxuICBnZXQgcm93c0JlaW5nRWRpdGVkJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVhZG9ubHkkO1xuICB9XG5cbiAgc3RhcnRFZGl0U2Vzc2lvbihyb3c6IFJvdyk6IEVkaXRTZXNzaW9uPFJvdz4ge1xuICAgIGNvbnN0IHJvd0lkID0gdGhpcy5pZGVudGl0eU9mKHJvdyk7XG4gICAgaWYgKHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucXVlcnkoKS5pbmRleE9mKHJvdykgPiAtMSkge1xuICAgICAgcmV0dXJuIGxhbmcuaWxsZWdhbFN0YXRlKGBSb3cgd2l0aCBpZD0ke3Jvd0lkfSBhbHJlYWR5IGJlaW5nIGVkaXRlZGApO1xuICAgIH1cblxuICAgIC8vIHRvZG86IHBhc3MgdGhlIGZhY3RvcmllcyB0byB0aGUgZWRpdCBzZXNzaW9uIHNvIHdlIGNhbiBtYWtlIHRoZSB3aG9sZSBsb3QgcGx1Z2dhYmxlP1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9jcmVhdGVGb3JtKHJvdyk7XG4gICAgY29uc3Qgc2F2ZUNvbW1hbmQgPSB0aGlzLnNhdmVDb21tYW5kRmFjdG9yeS5jcmVhdGUoZm9ybSwge2Rpc3Bvc2VkV2l0aDogdGhpc30pO1xuICAgIGNvbnN0IGVkaXRTZXNzaW9uID0gbmV3IEVkaXRTZXNzaW9uPFJvdz4ocm93SWQsIHJvdywgZm9ybSwgc2F2ZUNvbW1hbmQpO1xuICAgIGNvbnN0IHt3aGVufSA9IERzbC5kaXNwb3NlV2l0aChlZGl0U2Vzc2lvbik7XG4gICAgd2hlbihlZGl0U2Vzc2lvbi5saXZlUm93VmFsdWUkKS5jaGFuZ2VzKChlZGl0ZWRWYWx1ZSkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5yZXBsYWNlT3JQdXNoKGVkaXRlZFZhbHVlKTtcbiAgICB9LCB7aW5pdGlhbFZhbHVlOiBcInRyaWdnZXJDaGFuZ2VVbmxlc3NOaWxcIn0pO1xuXG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucHVzaChlZGl0U2Vzc2lvbik7XG4gICAgZWRpdFNlc3Npb24ub25EaXNwb3NlKCgpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVtb3ZlKGVkaXRTZXNzaW9uLmxpdmVSb3dWYWx1ZSQudmFsdWUpO1xuICAgICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucmVtb3ZlKGVkaXRTZXNzaW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZWRpdFNlc3Npb247XG4gIH1cblxuICBnZXRFZGl0U2Vzc2lvbkZvcihyb3c6IFJvdyk6IEVkaXRTZXNzaW9uPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JTZXNzaW9uQnlSb3dJZC5nZXQodGhpcy5pZGVudGl0eU9mKHJvdykpO1xuICB9XG5cbiAgY2FuY2VsQWxsRWRpdG9yU2Vzc2lvbnMoKSB7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucnVuSW5UcmFuc2FjdGlvbigoZHJhZnQpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucnVuSW5UcmFuc2FjdGlvbigoKSA9PiB7XG4gICAgICAgIGRyYWZ0LnZhbHVlLmZvckVhY2goc2Vzc2lvbiA9PiBzZXNzaW9uLmRpc3Bvc2UoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgZ2V0IGNvbHVtbnMoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uTGlzdC5hbGxDb2x1bW5zJDtcbiAgfVxuXG4gIGdldCB2aXNpYmxlQ29sdW1ucygpOiBMaXN0TW9kZWw8Q29sdW1uTW9kZWw8Um93Pj4ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5MaXN0LnJlYWRvbmx5JDtcbiAgfVxuXG4gIHBsdWNrPFAgZXh0ZW5kcyBUeXBlcy5WYWx1ZVByb3BlcnRpZXNPZjxSb3c+Pihwcm9wZXJ0eTogUCwgb3B0aW9ucz86IHsgY29sdW1uSWQ6IHN0cmluZyB9KTogUHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+IHtcbiAgICBjb25zdCBjb2x1bW5JZCA9IG9wdGlvbnM/LmNvbHVtbklkIHx8IHByb3BlcnR5LnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4oY29sdW1uSWQsIHByb3BlcnR5LCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgcGx1Y2tMaXN0PFAgZXh0ZW5kcyBUeXBlcy5BcnJheVByb3BlcnRpZXNPZjxSb3c+Pihwcm9wZXJ0eTogUCwgb3B0aW9ucz86IHsgY29sdW1uSWQ6IHN0cmluZyB9KTogTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPiB7XG4gICAgY29uc3QgY29sdW1uSWQgPSBvcHRpb25zPy5jb2x1bW5JZCB8fCBwcm9wZXJ0eS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgcHJvcGVydHksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICAvLyBUT0RPOiBjbGVhbiB0aGlzIHVwIGFuZCBhc3NpZ24gdGhlIHNlbGVjdGlvbiBtb2RlbCBvbiB0ZWggdGFibGUgZGlyZWN0bHkuXG4gIC8vICAgICAgIHRhYmxlTW9kZWwudXNlU2VsZWN0aW9uTW9kZWwobW9kZWwpIGFuZCBoYXZlIHRoZSBzZWxlY2l0b24gY29sdW1uIGF1dG9tYXRpY2FsbHlcbiAgLy8gICAgICAgYWRkZWQuICBOZWVkIHRvIGxvb2sgYXQgaG93IHdlJ3JlIHVzaW5nIHRoZSB2aXNpYmlsaXR5IGNvbnRyb2xzIGFzIHdlbGwuXG4gIC8vICAgICAgIFNob3VsZCBhbHNvIGxhenkgY3JlYXRlIHRoZSBzZWxlY3Rpb24gY29sdW1uIG1vZGVsIGlmIHNvbWVvbmUgYWNjZXNzZXMgaXQuXG4gIHByb3RlY3RlZCBfYWRkU2VsZWN0aW9uQ29sdW1uKHNlbGVjdGlvbk1vZGVsPzogU2VsZWN0aW9uTW9kZWw8Um93PiwgdmlzaWJsZT86IFZhbHVlTW9kZWw8Ym9vbGVhbj4gfCBib29sZWFuKTogU2VsZWN0aW9uQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgYXNzZXJ0LmlzTmlsKHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwpO1xuICAgIGNvbnN0IGNvbHVtbklkID0gXCJzZWxlY3Rpb24tY29sdW1uXCI7XG4gICAgdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Db2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgdGhpcy5zZWxlY3Rpb25Nb2RlbFByb3h5KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLnVzZVNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbk1vZGVsKVxuICAgIHRoaXMuYWRkUm93Q2xhc3MoXCJhdXAtcm93LXNlbGVjdGVkXCIsIHJvdyA9PiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLmlzU2VsZWN0ZWQocm93KSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ29sdW1uTW9kZWwgPSB0aGlzLmFkZENvbHVtbih0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLCAwKTtcbiAgICBpZiAoIWlzTmlsKHZpc2libGUpKSB7XG4gICAgICBzZWxlY3Rpb25Db2x1bW5Nb2RlbC52aXNpYmxlV2hpbGUodmlzaWJsZSBpbnN0YW5jZW9mIFZhbHVlTW9kZWwgPyB2aXNpYmxlIDogVmFsdWVNb2RlbC5jb25zdGFudCh2aXNpYmxlKSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25Db2x1bW5Nb2RlbDtcbiAgfVxuXG5cbiAgYWRkRWRpdENvbnRyb2xzKHNhdmVDb21tYW5kRmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PERpcnR5VHJhY2tpbmdGb3JtPFJvdz4sIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PiwgZm9ybUZhY3Rvcnk/OiAocm93OiBSb3cpID0+IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4pOiBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgdGhpcy5zYXZlQ29tbWFuZEZhY3RvcnkgPSBzYXZlQ29tbWFuZEZhY3Rvcnk7XG4gICAgaWYgKGlzRnVuY3Rpb24oZm9ybUZhY3RvcnkpKSB7XG4gICAgICB0aGlzLl9jcmVhdGVGb3JtID0gZm9ybUZhY3Rvcnk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbklkID0gXCJlZGl0Q29udHJvbHNcIjtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEVkaXRvckNvbnRyb2xDb2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCBzYXZlQ29tbWFuZEZhY3RvcnksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBhZGRDdXN0b21Db2x1bW48Vj4oY29sdW1uSWQ6IHN0cmluZywgZGF0YUFjY2Vzc29yOiAocm93OiBSb3cpID0+IFYpOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgVj4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFY+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgZGF0YUFjY2Vzc29yKSk7XG4gIH1cblxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9uSW5pdD86IE9uQ29tcG9uZW50SW5pdDxDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb3B0aW9ucz86IENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb25Db21wb25lbnRJbml0T3JPcHRpb25zPzogT25Db21wb25lbnRJbml0PEM+IHwgQ2VsbFJlbmRlcmVyT3B0aW9uczxSb3csIEM+KTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpLCByb3cgPT4gcm93KSkuY2VsbFJlbmRlcmVyKGNvbXBvbmVudCwgb25Db21wb25lbnRJbml0T3JPcHRpb25zKTtcbiAgfVxuXG4gIGFkZE1vcmVNZW51KGNvbXBvbmVudENsYXNzOiBDb25zdHJ1Y3RhYmxlPFRhYmxlTW9yZU1lbnVQb3B1cENvbXBvbmVudDxSb3c+Pikge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENvbHVtbihcIm1vcmUtbWVudVwiLCBUYWJsZU1vcmVNZW51Q29tcG9uZW50LCAoY29tcG9uZW50OlRhYmxlTW9yZU1lbnVDb21wb25lbnQ8Um93PikgPT4ge1xuICAgICAgY29tcG9uZW50LmNvbmZpZ3VyZVBvcHVwQ29tcG9uZW50VHlwZShjb21wb25lbnRDbGFzcyk7XG4gICAgfSkuY29sdW1uVGV4dFByb3BlcnRpZXMoe1xuICAgICAgaGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIlxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBhZGRUZW1wbGF0ZUNvbHVtbjxWPihjb2x1bW5JZDogc3RyaW5nKTogQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWw8Um93Pihjb2x1bW5JZCwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIGFkZFJvd0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBwcmVkaWNhdGU6IChyb3c6IFJvdykgPT4gYm9vbGVhbikge1xuICAgIHRoaXMucm93Q2xhc3NOYW1lUHJlZGljYXRlcy5wdXNoKG5ldyBSb3dDbGFzczxSb3c+KGNsYXNzTmFtZSwgcHJlZGljYXRlKSk7XG4gIH1cblxuICBnZXRSb3dDbGFzc2VzKHJvdzogUm93KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5yb3dDbGFzc05hbWVQcmVkaWNhdGVzLmZvckVhY2goaSA9PiB7XG4gICAgICBpZiAoaS5tYXRjaGVzKHJvdykpIHtcbiAgICAgICAgY2xhc3NOYW1lcy5wdXNoKGkuY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xhc3NOYW1lcztcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGFkZENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uTW9kZWw8Um93Pj4oY29sdW1uOiBDLCBpbmRleD86IG51bWJlcik6IEMge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5MaXN0LmFkZENvbHVtbihjb2x1bW4sIGluZGV4KTtcbiAgfVxuXG4gIGNvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiBDb2x1bW5UZXh0UHJvcGVydGllcyB9KSB7XG4gICAgdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXAgPSBjb2x1bW5UZXh0UHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkOiBzdHJpbmcpOiBDb2x1bW5UZXh0UHJvcGVydGllcyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwID8gdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXBbY29sdW1uSWRdIDogdW5kZWZpbmVkO1xuICB9XG5cblxuICBpc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkgJiYgY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmhhc1VzZXJTZWxlY3Rpb25Nb2RlbFRoYXRJc0VuYWJsZWQoKSAmJiAhdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQudmFsdWU7XG4gIH1cblxuICBoYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCkge1xuICAgIGNvbnN0IHVzZXJTZWxlY3Rpb25Nb2RlbCA9IHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdGlvbk1vZGVsLmdldFByb3h5VGFyZ2V0KCk7XG4gICAgcmV0dXJuICEhdXNlclNlbGVjdGlvbk1vZGVsICYmIHVzZXJTZWxlY3Rpb25Nb2RlbC5lbmFibGVkJC52YWx1ZTtcbiAgfVxuXG4gIGdldFNlbGVjdGlvbk1vZGVsKCk6IFNlbGVjdGlvbk1vZGVsPFJvdz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3Rpb25Nb2RlbDtcbiAgfVxuXG4gIGlzSG92ZXJFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHx8IHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMubGlzdGVuZXJDb3VudCA+IDA7XG4gIH1cblxuICBpc0N1cnNvckVuYWJsZWQoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbikgfHwgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5saXN0ZW5lckNvdW50ID4gMDtcbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IFJvdykge1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdFJvdyhyb3cpO1xuICB9XG5cbiAgb25Sb3dDbGlja2VkKGNhbGxiYWNrOiAocm93OiBSb3cpID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5yb3dDbGlja0xpc3RlbmVycy5hZGQoY2FsbGJhY2spO1xuICB9XG5cbiAgX25vdGlmeUNlbGxDbGlja2VkKGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+LCByb3c6IFJvdykge1xuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZEZvcihjb2x1bW5Nb2RlbCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93KHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHtcbiAgICAgIC8vICAgaGFzRW5hYmxlZFVzZXJTZWxlY3Rpb25Nb2RlbDogdGhpcy5oYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCksXG4gICAgICAvLyAgIGFsbFNlbGVjdGlvbkRpc2FibGVkOiB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJC52YWx1ZSxcbiAgICAgIC8vICAgcm93U2VsZWN0aW9uRW5hYmxlZDogdGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSxcbiAgICAgIC8vICAgcm93U2VsZWN0aW9uRW5hYmxlZEZvckNvbHVtbjogY29sdW1uTW9kZWwuaXNSb3dTZWxlY3Rpb25FbmFibGVkKClcbiAgICAgIC8vIH0pXG4gICAgfVxuXG4gICAgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5maXJlKGwgPT4gbChyb3cpKTtcbiAgfVxuXG59XG5Qcm94eVJlZ2lzdHJ5LnJlZ2lzdGVyT25lVGltZUJpbmRpbmcoQWJzdHJhY3RUYWJsZU1vZGVsKVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { Component, HostBinding, Injector, Input } from "@angular/core";
|
|
3
|
-
import { DelegatingListModel, DelegatingValueModel, Dsl, MutableValueModel,
|
|
3
|
+
import { DelegatingListModel, DelegatingValueModel, Dsl, MutableValueModel, StoreInValueModel, Proxify, ValueModel, proxify } from "@coolon/pectin";
|
|
4
4
|
import { lang } from '@coolon/typescript-utilities';
|
|
5
5
|
import { DisposableComponent } from "../disposable-component";
|
|
6
6
|
import { CustomTemplateColumnModel } from "./column/custom-template-column-model";
|
|
@@ -72,17 +72,12 @@ export class AbstractTableComponent extends DisposableComponent {
|
|
|
72
72
|
#showHeader_accessor_storage = true;
|
|
73
73
|
get showHeader() { return this.#showHeader_accessor_storage; }
|
|
74
74
|
set showHeader(value) { this.#showHeader_accessor_storage = value; }
|
|
75
|
-
#enableScrolling$_accessor_storage = proxify((ValueModel));
|
|
76
75
|
/**
|
|
77
76
|
* Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
|
|
78
77
|
* need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
|
|
79
78
|
* containment area.
|
|
80
79
|
*/
|
|
81
|
-
|
|
82
|
-
set enableScrolling$(value) { this.#enableScrolling$_accessor_storage = value; }
|
|
83
|
-
#enableScrolling_accessor_storage = false;
|
|
84
|
-
get enableScrolling() { return this.#enableScrolling_accessor_storage; }
|
|
85
|
-
set enableScrolling(value) { this.#enableScrolling_accessor_storage = value; }
|
|
80
|
+
enableScrolling = false;
|
|
86
81
|
columns;
|
|
87
82
|
columnIds;
|
|
88
83
|
columnsById;
|
|
@@ -101,6 +96,7 @@ export class AbstractTableComponent extends DisposableComponent {
|
|
|
101
96
|
super();
|
|
102
97
|
this.injector = injector;
|
|
103
98
|
const { chain, when } = Dsl.disposeWith(this);
|
|
99
|
+
this._visibleRows$.setDelegate(this._dataSource$);
|
|
104
100
|
when(chain(this._dataSource$).first()).becomesTruthy(it => {
|
|
105
101
|
if (it === this.identityOf(it)) {
|
|
106
102
|
console.warn("Table model identity function is using reference equality. This can cause lots of table re-rendering", {
|
|
@@ -119,7 +115,7 @@ export class AbstractTableComponent extends DisposableComponent {
|
|
|
119
115
|
if (!model) {
|
|
120
116
|
lang.illegalState("aup-table tableModel is nil");
|
|
121
117
|
}
|
|
122
|
-
this.columnsById = chain(model.columns
|
|
118
|
+
this.columnsById = chain(model.columns).indexBy('columnId');
|
|
123
119
|
this._dataSource$.setDelegate(model.dataSource$);
|
|
124
120
|
model.initialise(this.injector, (row) => this.identityOf(row));
|
|
125
121
|
}
|
|
@@ -135,8 +131,8 @@ export class AbstractTableComponent extends DisposableComponent {
|
|
|
135
131
|
column.setTemplate(templateRef, viewContainer, fillCell, padChild);
|
|
136
132
|
}
|
|
137
133
|
}
|
|
138
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
139
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
|
134
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
135
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeader$: "showHeader$", showHeader: "showHeader", enableScrolling: "enableScrolling" }, host: { properties: { "class": "this.baseCssClass" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
|
|
140
136
|
}
|
|
141
137
|
__decorate([
|
|
142
138
|
Proxify(),
|
|
@@ -146,15 +142,7 @@ __decorate([
|
|
|
146
142
|
StoreInValueModel(),
|
|
147
143
|
__metadata("design:type", Object)
|
|
148
144
|
], AbstractTableComponent.prototype, "showHeader", null);
|
|
149
|
-
|
|
150
|
-
Proxify(),
|
|
151
|
-
__metadata("design:type", ValueModel)
|
|
152
|
-
], AbstractTableComponent.prototype, "enableScrolling$", null);
|
|
153
|
-
__decorate([
|
|
154
|
-
StoreInValueModel(),
|
|
155
|
-
__metadata("design:type", Boolean)
|
|
156
|
-
], AbstractTableComponent.prototype, "enableScrolling", null);
|
|
157
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, decorators: [{
|
|
145
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: AbstractTableComponent, decorators: [{
|
|
158
146
|
type: Component,
|
|
159
147
|
args: [{
|
|
160
148
|
selector: 'aup-abstract-table',
|
|
@@ -164,12 +152,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
164
152
|
type: Input
|
|
165
153
|
}], showHeader: [{
|
|
166
154
|
type: Input
|
|
167
|
-
}], enableScrolling$: [{
|
|
168
|
-
type: Input
|
|
169
155
|
}], enableScrolling: [{
|
|
170
156
|
type: Input
|
|
171
157
|
}], baseCssClass: [{
|
|
172
158
|
type: HostBinding,
|
|
173
159
|
args: ['class']
|
|
174
160
|
}] } });
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF3QyxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixHQUFHLEVBR0gsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUc1RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQzs7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwREc7QUFLSCxNQUFNLE9BQU8sc0JBQTJDLFNBQVEsbUJBQW1CO0lBMEM1RDtJQXZDWixnQ0FBYyxPQUFPLENBQUMsQ0FBQSxVQUFtQixDQUFBLENBQUMsQ0FBQztJQUEzQyxJQUFBLFdBQVcsaURBQWdDO0lBQTNDLElBQUEsV0FBVyx1REFBZ0M7SUFHM0MsK0JBQWEsSUFBSSxDQUFDO0lBQWxCLElBQUEsVUFBVSxnREFBUTtJQUFsQixJQUFBLFVBQVUsc0RBQVE7SUFRbEIscUNBQXVDLE9BQU8sQ0FBQyxDQUFBLFVBQW1CLENBQUEsQ0FBQyxDQUFDO0lBTjdFOzs7O09BSUc7SUFFTSxJQUFBLGdCQUFnQixzREFBb0Q7SUFBcEUsSUFB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O0lBRUQsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxXQUE2QixFQUFFLGFBQStCLEVBQUUsUUFBaUIsRUFBRSxRQUFpQjtRQUMzSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLE1BQU0sWUFBWSx5QkFBeUIsRUFBRTtZQUMvQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQzt1R0FwRlUsc0JBQXNCOzJGQUF0QixzQkFBc0IscVJBRnZCLEVBQUU7O0FBS0g7SUFEQyxPQUFPLEVBQUU7O3lEQUNpQztBQUczQztJQURDLGlCQUFpQixFQUFFOzt3REFDRjtBQVFsQjtJQURDLE9BQU8sRUFBRTs4QkFDTyxVQUFVOzhEQUF5QztBQUdwRTtJQURDLGlCQUFpQixFQUFFOzs2REFDYTsyRkFqQi9CLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsRUFBRTtpQkFDYjsrRkFJVSxXQUFXO3NCQURuQixLQUFLO2dCQUlHLFVBQVU7c0JBRGxCLEtBQUs7Z0JBU0csZ0JBQWdCO3NCQUR4QixLQUFLO2dCQUlHLGVBQWU7c0JBRHZCLEtBQUs7Z0JBb0JOLFlBQVk7c0JBRFgsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBEZWxlZ2F0aW5nTGlzdE1vZGVsLFxuICBEZWxlZ2F0aW5nVmFsdWVNb2RlbCxcbiAgRHNsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFByb3hpZnksXG4gIHByb3hpZnksXG4gIFN0b3JlSW5WYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsXG59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHtsYW5nfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2Rpc3Bvc2FibGUtY29tcG9uZW50XCI7XG5pbXBvcnQge0Fic3RyYWN0VGFibGVNb2RlbH0gZnJvbSAnLi9hYnN0cmFjdC10YWJsZS1tb2RlbCc7XG5pbXBvcnQge0NvbHVtbk1vZGVsfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4tbW9kZWwnO1xuaW1wb3J0IHtDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vY3VzdG9tLXRlbXBsYXRlLWNvbHVtbi1tb2RlbFwiO1xuXG4vKipcbiAqIENyZWF0ZSB5b3VyIG1vZGVsOlxuICogQGV4YW1wbGVcbiAqIHRoaXMuaGVyb1RhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbChoZXJvTGlzdCwgdGFibGUgPT4ge1xuICogICB0YWJsZS5wbHVjayhcImZpcnN0TmFtZVwiKTtcbiAqICAgdGFibGUucGx1Y2soXCJsYXN0TmFtZVwiKTtcbiAqICAgdGFibGUuYWRkQ3VzdG9tQ29sdW1uKFwiZnVsbE5hbWVcIiwgaGVybyA9PiBgJHtoZXJvLmZpcnN0TmFtZX0gJHtoZXJvLmxhc3ROYW1lfWApO1xuICogfSk7XG4gKlxuICogQ3JlYXRlIHlvdXIgdGFibGVcbiAqIEBleGFtcGxlXG4gKiA8YXVwLXRhYmxlIFt0YWJsZU1vZGVsXT1cImhlcm9UYWJsZU1vZGVsXCI+PC9hdXAtdGFibGU+XG4gKlxuICogQ29sdW1uIHRlbXBsYXRlc1xuICogQGV4YW1wbGVcbiAqIHRoaXMuaGVyb1RhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbChoZXJvTGlzdCwgdGFibGUgPT4ge1xuICogICB0YWJsZS5wbHVjayhcImZpcnN0TmFtZVwiKTtcbiAqICAgdGFibGUucGx1Y2soXCJsYXN0TmFtZVwiKTtcbiAqICAgdGFibGUuYWRkVGVtcGxhdGVDb2x1bW4oXCJzcGVjaWFsQ29sdW1uXCIpO1xuICogfSk7XG4gKiA8YXVwLXRhYmxlIFt0YWJsZU1vZGVsXT1cImhlcm9UYWJsZU1vZGVsXCI+XG4gKiAgIDxkaXYgKmF1cENvbHVtblRlbXBsYXRlPVwibGV0IGhlcm87IGNvbHVtbklkOiAnc3BlY2lhbENvbHVtbic7IGZpbGxDZWxsOiB0cnVlOyBwYWRDaGlsZDpmYWxzZVwiPlxuICogICAgIHt7aGVyby5uYW1lfX1cbiAqICAgPC9kaXY+XG4gKiA8L2F1cC10YWJsZT5cbiAqXG4gKiBTdHlsaW5nXG4gKiBAZXhhbXBsZVxuICogIC8vIGdsb2JhbCBzZXR0aW5nc1xuICogOnJvb3Qge1xuICogICAtLWF1cC10YWJsZS1jb2x1bW4tZ2FwOiAxMHB4OyAvLyBkZWZhdWx0cyB0byAyNHB4XG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yOiByZWJlY2NhcHVycGxlOyAvLyBkZWZhdWx0cyB0byB0cmFuc3BhcmVudFxuICogICAtLWF1cC10YWJsZS1maXJzdC1jb2x1bW4tcGFkZGluZy1sZWZ0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICAtLWF1cC10YWJsZS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogfVxuICpcbiAqIC8vIHBlciB0YWJsZSBzZXR0aW5ncy5cbiAqIGF1cC10YWJsZSB7XG4gKiAgIC0tY29sdW1uLWdhcDogMTBweDsgLy8gZGVmYXVsdHMgdG8gMjRweFxuICogICAtLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6IHJlYmVjY2FwdXJwbGU7IC8vIGRlZmF1bHRzIHRvIHRyYW5zcGFyZW50XG4gKiAgIC0tZmlyc3QtY29sdW1uLXBhZGRpbmctbGVmdDogMThweCAvLyBkZWZhdWx0cyB0byAtLWNvbHVtbi1nYXBcbiAqICAgLS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICpcbiAqICAgYXVwLXRhYmxlLWhlYWRlci1jZWxsLXJlbmRlcmVyLFxuICogICBhdXAtdGFibGUtY2VsbC1yZW5kZXJlciB7XG4gKiAgICAgJi5hdXAtY29sLW15LWRhc2hlcmlzZWQtY29sdW1uLWlkIHtcbiAqICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgfVxuICogICAgICYuZmlyc3QtdmlzaWJsZS1jb2x1bW4ge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgICAgJi5sYXN0LXZpc2libGUtY29sdW1uIHtcbiAqICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F1cC1hYnN0cmFjdC10YWJsZScsXG4gIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRhYmxlQ29tcG9uZW50PFJvdyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBAUHJveGlmeSgpXG4gIGFjY2Vzc29yIHNob3dIZWFkZXIkID0gcHJveGlmeShWYWx1ZU1vZGVsPGJvb2xlYW4+KTtcblxuICBASW5wdXQoKSBAU3RvcmVJblZhbHVlTW9kZWwoKVxuICBhY2Nlc3NvciBzaG93SGVhZGVyID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHNjcm9sbGluZy4gIE9uY2UgZW5hYmxlZCB0aGUgdGFibGUgd2lsbCBoYXZlIDAgaW1wbGljaXQgaGVpZ2h0LiAgWW91IHdpbGwgZWl0aGVyXG4gICAqIG5lZWQgdG8gc2V0IGl0IGV4cGxpY2l0bHkgZS5nLiBoZWlnaHQ6IDQwMHB4OyBvciBieSB1c2luZyBmbGV4IG9yIGdyaWQgbGF5b3V0IHRvIG1ha2UgaXQgZmlsbCBpdCdzXG4gICAqIGNvbnRhaW5tZW50IGFyZWEuXG4gICAqL1xuICBASW5wdXQoKSBAUHJveGlmeSgpXG4gIGFjY2Vzc29yIGVuYWJsZVNjcm9sbGluZyQ6VmFsdWVNb2RlbDxib29sZWFuPiA9IHByb3hpZnkoVmFsdWVNb2RlbDxib29sZWFuPik7XG5cbiAgQElucHV0KCkgQFN0b3JlSW5WYWx1ZU1vZGVsKClcbiAgYWNjZXNzb3IgZW5hYmxlU2Nyb2xsaW5nOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBjb2x1bW5zOiBMaXN0TW9kZWxDaGFpbjxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgY29sdW1uSWRzOiBMaXN0TW9kZWxDaGFpbjxzdHJpbmc+O1xuICBwcml2YXRlIGNvbHVtbnNCeUlkOiBNYXBNb2RlbENoYWluPHN0cmluZywgQ29sdW1uTW9kZWw8Um93Pj47XG5cbiAgcmVhZG9ubHkgdmlzaWJsZVJvd0NvdW50OiBWYWx1ZU1vZGVsPG51bWJlcj47XG5cbiAgLy8gVE9ETzogc3VwcG9ydCB1c2VyIGRlZmluZWQgaGVhZGVyIGFuZCByb3cgaGVpZ2h0cyB2aWEgY3NzIHZhcnMuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySGVpZ2h0ID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPG51bWJlcj4oNTYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0hlaWdodCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxudW1iZXI+KDQ4KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Zpc2libGVSb3dzJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSk7XG4gIHJlYWRvbmx5IGhpZ2hsaWdodFRleHQkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdWYWx1ZU1vZGVsPHN0cmluZz4oKSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kYXRhU291cmNlJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSlcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgYmFzZUNzc0NsYXNzID0gJ2F1cC10YWJsZS1jb21wb25lbnQnO1xuXG4gIHJlYWRvbmx5IHRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogUm93KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlPZiA/IHRoaXMuaWRlbnRpdHlPZihpdGVtKSA6IGluZGV4O1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3Qge2NoYWluLCB3aGVufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcblxuICAgIHdoZW4oY2hhaW4odGhpcy5fZGF0YVNvdXJjZSQpLmZpcnN0KCkpLmJlY29tZXNUcnV0aHkoaXQgPT4ge1xuICAgICAgaWYgKGl0ID09PSB0aGlzLmlkZW50aXR5T2YoaXQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlRhYmxlIG1vZGVsIGlkZW50aXR5IGZ1bmN0aW9uIGlzIHVzaW5nIHJlZmVyZW5jZSBlcXVhbGl0eS4gIFRoaXMgY2FuIGNhdXNlIGxvdHMgb2YgdGFibGUgcmUtcmVuZGVyaW5nXCIsIHtcbiAgICAgICAgICByb3dUeXBlOiBpdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCB7b25jZTogdHJ1ZX0pO1xuICB9XG5cbiAgaWRlbnRpdHlPZihyb3c6IFJvdyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UkLmlkZW50aXR5T2Yocm93KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgY29uc3Qge2NoYWlufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZShcImF1cC10YWJsZSB0YWJsZU1vZGVsIGlzIG5pbFwiKVxuICAgIH1cbiAgICB0aGlzLmNvbHVtbnNCeUlkID0gY2hhaW4obW9kZWwuY29sdW1ucyQpLmluZGV4QnkoJ2NvbHVtbklkJyk7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSQuc2V0RGVsZWdhdGUobW9kZWwuZGF0YVNvdXJjZSQpO1xuICAgIG1vZGVsLmluaXRpYWxpc2UodGhpcy5pbmplY3RvciwgKHJvdykgPT4gIHRoaXMuaWRlbnRpdHlPZihyb3cpKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlUm93cyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVSb3dzJC5yZWFkb25seSQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4ge1xuICAgIHJldHVybiBsYW5nLmFic3RyYWN0TWV0aG9kKHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG5cbiAgcmVnaXN0ZXJDb2x1bW5UZW1wbGF0ZShjb2x1bW5JZDogc3RyaW5nLCB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgZmlsbENlbGw6IGJvb2xlYW4sIHBhZENoaWxkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zQnlJZC5nZXQoY29sdW1uSWQpO1xuICAgIGlmIChjb2x1bW4gaW5zdGFuY2VvZiBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsKSB7XG4gICAgICBjb2x1bW4uc2V0VGVtcGxhdGUodGVtcGxhdGVSZWYsIHZpZXdDb250YWluZXIsIGZpbGxDZWxsLCBwYWRDaGlsZCk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF3QyxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixHQUFHLEVBSUgsaUJBQWlCLEVBRWpCLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsVUFBVSxFQUFFLE9BQU8sRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHNUQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7O0FBR2hGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERHO0FBS0gsTUFBTSxPQUFPLHNCQUE0QixTQUFRLG1CQUFtQjtJQXVDN0M7SUFwQ1osZ0NBQWMsT0FBTyxDQUFDLENBQUEsVUFBbUIsQ0FBQSxDQUFDLENBQUM7SUFBM0MsSUFBQSxXQUFXLGlEQUFnQztJQUEzQyxJQUFBLFdBQVcsdURBQWdDO0lBRzNDLCtCQUFhLElBQUksQ0FBQztJQUFsQixJQUFBLFVBQVUsZ0RBQVE7SUFBbEIsSUFBQSxVQUFVLHNEQUFRO0lBRTNCOzs7O09BSUc7SUFFSCxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBR3hCLE9BQU8sQ0FBbUM7SUFDMUMsU0FBUyxDQUF5QjtJQUMxQixXQUFXLENBQTBDO0lBRXBE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QUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxNQUFNLFlBQVkseUJBQXlCLEVBQUU7WUFDL0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7dUdBbkZVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLCtPQUZ2QixFQUFFOztBQUtIO0lBREMsT0FBTyxFQUFFOzt5REFDaUM7QUFHM0M7SUFEQyxpQkFBaUIsRUFBRTs7d0RBQ0Y7MkZBTmhCLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsRUFBRTtpQkFDYjsrRkFJVSxXQUFXO3NCQURuQixLQUFLO2dCQUlHLFVBQVU7c0JBRGxCLEtBQUs7Z0JBU04sZUFBZTtzQkFEZCxLQUFLO2dCQW9CTixZQUFZO3NCQURYLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgRGVsZWdhdGluZ0xpc3RNb2RlbCxcbiAgRGVsZWdhdGluZ1ZhbHVlTW9kZWwsXG4gIERzbCxcbiAgTGlzdE1vZGVsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFN0b3JlSW5MaXN0TW9kZWwsXG4gIFN0b3JlSW5WYWx1ZU1vZGVsLFxuICBQcm94aWZ5LFxuICBWYWx1ZU1vZGVsLCBwcm94aWZ5XG59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHtsYW5nfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2Rpc3Bvc2FibGUtY29tcG9uZW50XCI7XG5pbXBvcnQge0Fic3RyYWN0VGFibGVNb2RlbH0gZnJvbSAnLi9hYnN0cmFjdC10YWJsZS1tb2RlbCc7XG5pbXBvcnQge0NvbHVtbk1vZGVsfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4tbW9kZWwnO1xuaW1wb3J0IHtDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vY3VzdG9tLXRlbXBsYXRlLWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtUYWJsZUZpbHRlck1vZGVsfSBmcm9tIFwiLi9maWx0ZXIvdGFibGUtZmlsdGVyLW1vZGVsXCI7XG5cbi8qKlxuICogQ3JlYXRlIHlvdXIgbW9kZWw6XG4gKiBAZXhhbXBsZVxuICogdGhpcy5oZXJvVGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKGhlcm9MaXN0LCB0YWJsZSA9PiB7XG4gKiAgIHRhYmxlLnBsdWNrKFwiZmlyc3ROYW1lXCIpO1xuICogICB0YWJsZS5wbHVjayhcImxhc3ROYW1lXCIpO1xuICogICB0YWJsZS5hZGRDdXN0b21Db2x1bW4oXCJmdWxsTmFtZVwiLCBoZXJvID0+IGAke2hlcm8uZmlyc3ROYW1lfSAke2hlcm8ubGFzdE5hbWV9YCk7XG4gKiB9KTtcbiAqXG4gKiBDcmVhdGUgeW91ciB0YWJsZVxuICogQGV4YW1wbGVcbiAqIDxhdXAtdGFibGUgW3RhYmxlTW9kZWxdPVwiaGVyb1RhYmxlTW9kZWxcIj48L2F1cC10YWJsZT5cbiAqXG4gKiBDb2x1bW4gdGVtcGxhdGVzXG4gKiBAZXhhbXBsZVxuICogdGhpcy5oZXJvVGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKGhlcm9MaXN0LCB0YWJsZSA9PiB7XG4gKiAgIHRhYmxlLnBsdWNrKFwiZmlyc3ROYW1lXCIpO1xuICogICB0YWJsZS5wbHVjayhcImxhc3ROYW1lXCIpO1xuICogICB0YWJsZS5hZGRUZW1wbGF0ZUNvbHVtbihcInNwZWNpYWxDb2x1bW5cIik7XG4gKiB9KTtcbiAqIDxhdXAtdGFibGUgW3RhYmxlTW9kZWxdPVwiaGVyb1RhYmxlTW9kZWxcIj5cbiAqICAgPGRpdiAqYXVwQ29sdW1uVGVtcGxhdGU9XCJsZXQgaGVybzsgY29sdW1uSWQ6ICdzcGVjaWFsQ29sdW1uJzsgZmlsbENlbGw6IHRydWU7IHBhZENoaWxkOmZhbHNlXCI+XG4gKiAgICAge3toZXJvLm5hbWV9fVxuICogICA8L2Rpdj5cbiAqIDwvYXVwLXRhYmxlPlxuICpcbiAqIFN0eWxpbmdcbiAqIEBleGFtcGxlXG4gKiAgLy8gZ2xvYmFsIHNldHRpbmdzXG4gKiA6cm9vdCB7XG4gKiAgIC0tYXVwLXRhYmxlLWNvbHVtbi1nYXA6IDEwcHg7IC8vIGRlZmF1bHRzIHRvIDI0cHhcbiAqICAgLS1hdXAtdGFibGUtcm93LWhvdmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNSlcbiAqICAgLS1hdXAtdGFibGUtcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6IHJlYmVjY2FwdXJwbGU7IC8vIGRlZmF1bHRzIHRvIHRyYW5zcGFyZW50XG4gKiAgIC0tYXVwLXRhYmxlLWZpcnN0LWNvbHVtbi1wYWRkaW5nLWxlZnQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiAgIC0tYXVwLXRhYmxlLWxhc3QtY29sdW1uLXBhZGRpbmctcmlnaHQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiB9XG4gKlxuICogLy8gcGVyIHRhYmxlIHNldHRpbmdzLlxuICogYXVwLXRhYmxlIHtcbiAqICAgLS1jb2x1bW4tZ2FwOiAxMHB4OyAvLyBkZWZhdWx0cyB0byAyNHB4XG4gKiAgIC0tcm93LWhvdmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNSlcbiAqICAgLS1yb3ctc2VsZWN0ZWQtYmFja2dyb3VuZC1jb2xvcjogcmViZWNjYXB1cnBsZTsgLy8gZGVmYXVsdHMgdG8gdHJhbnNwYXJlbnRcbiAqICAgLS1maXJzdC1jb2x1bW4tcGFkZGluZy1sZWZ0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICAtLWxhc3QtY29sdW1uLXBhZGRpbmctcmlnaHQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKlxuICogICBhdXAtdGFibGUtaGVhZGVyLWNlbGwtcmVuZGVyZXIsXG4gKiAgIGF1cC10YWJsZS1jZWxsLXJlbmRlcmVyIHtcbiAqICAgICAmLmF1cC1jb2wtbXktZGFzaGVyaXNlZC1jb2x1bW4taWQge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgICAgJi5maXJzdC12aXNpYmxlLWNvbHVtbiB7XG4gKiAgICAgICAvLyBkbyBzdHVmZlxuICogICAgIH1cbiAqICAgICAmLmxhc3QtdmlzaWJsZS1jb2x1bW4ge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVwLWFic3RyYWN0LXRhYmxlJyxcbiAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEFic3RyYWN0VGFibGVDb21wb25lbnQ8Um93PiBleHRlbmRzIERpc3Bvc2FibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3Igc2hvd0hlYWRlciQgPSBwcm94aWZ5KFZhbHVlTW9kZWw8Ym9vbGVhbj4pO1xuXG4gIEBJbnB1dCgpIEBTdG9yZUluVmFsdWVNb2RlbCgpXG4gIGFjY2Vzc29yIHNob3dIZWFkZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgc2Nyb2xsaW5nLiAgT25jZSBlbmFibGVkIHRoZSB0YWJsZSB3aWxsIGhhdmUgMCBpbXBsaWNpdCBoZWlnaHQuICBZb3Ugd2lsbCBlaXRoZXJcbiAgICogbmVlZCB0byBzZXQgaXQgZXhwbGljaXRseSBlLmcuIGhlaWdodDogNDAwcHg7IG9yIGJ5IHVzaW5nIGZsZXggb3IgZ3JpZCBsYXlvdXQgdG8gbWFrZSBpdCBmaWxsIGl0J3NcbiAgICogY29udGFpbm1lbnQgYXJlYS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGVuYWJsZVNjcm9sbGluZyA9IGZhbHNlO1xuXG5cbiAgY29sdW1uczogTGlzdE1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIGNvbHVtbklkczogTGlzdE1vZGVsQ2hhaW48c3RyaW5nPjtcbiAgcHJpdmF0ZSBjb2x1bW5zQnlJZDogTWFwTW9kZWxDaGFpbjxzdHJpbmcsIENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIHJlYWRvbmx5IHZpc2libGVSb3dDb3VudDogVmFsdWVNb2RlbDxudW1iZXI+O1xuXG4gIC8vIFRPRE86IHN1cHBvcnQgdXNlciBkZWZpbmVkIGhlYWRlciBhbmQgcm93IGhlaWdodHMgdmlhIGNzcyB2YXJzLlxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckhlaWdodCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxudW1iZXI+KDU2KTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3dIZWlnaHQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8bnVtYmVyPig0OCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpO1xuICByZWFkb25seSBoaWdobGlnaHRUZXh0JCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxzdHJpbmc+KCkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfZGF0YVNvdXJjZSQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGJhc2VDc3NDbGFzcyA9ICdhdXAtdGFibGUtY29tcG9uZW50JztcblxuICByZWFkb25seSB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IFJvdykgPT4ge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5T2YgPyB0aGlzLmlkZW50aXR5T2YoaXRlbSkgOiBpbmRleDtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHtjaGFpbiwgd2hlbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG5cbiAgICB0aGlzLl92aXNpYmxlUm93cyQuc2V0RGVsZWdhdGUodGhpcy5fZGF0YVNvdXJjZSQpO1xuXG4gICAgd2hlbihjaGFpbih0aGlzLl9kYXRhU291cmNlJCkuZmlyc3QoKSkuYmVjb21lc1RydXRoeShpdCA9PiB7XG4gICAgICBpZiAoaXQgPT09IHRoaXMuaWRlbnRpdHlPZihpdCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiVGFibGUgbW9kZWwgaWRlbnRpdHkgZnVuY3Rpb24gaXMgdXNpbmcgcmVmZXJlbmNlIGVxdWFsaXR5LiAgVGhpcyBjYW4gY2F1c2UgbG90cyBvZiB0YWJsZSByZS1yZW5kZXJpbmdcIiwge1xuICAgICAgICAgIHJvd1R5cGU6IGl0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtvbmNlOiB0cnVlfSk7XG4gIH1cblxuICBpZGVudGl0eU9mKHJvdzogUm93KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSQuaWRlbnRpdHlPZihyb3cpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKFwiYXVwLXRhYmxlIHRhYmxlTW9kZWwgaXMgbmlsXCIpXG4gICAgfVxuICAgIHRoaXMuY29sdW1uc0J5SWQgPSBjaGFpbihtb2RlbC5jb2x1bW5zKS5pbmRleEJ5KCdjb2x1bW5JZCcpO1xuICAgIHRoaXMuX2RhdGFTb3VyY2UkLnNldERlbGVnYXRlKG1vZGVsLmRhdGFTb3VyY2UkKTtcbiAgICBtb2RlbC5pbml0aWFsaXNlKHRoaXMuaW5qZWN0b3IsIChyb3cpID0+ICB0aGlzLmlkZW50aXR5T2Yocm93KSk7XG4gIH1cblxuICBnZXQgdmlzaWJsZVJvd3MkKCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEFic3RyYWN0VGFibGVNb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gbGFuZy5hYnN0cmFjdE1ldGhvZCh0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29sdW1uVGVtcGxhdGUoY29sdW1uSWQ6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIGZpbGxDZWxsOiBib29sZWFuLCBwYWRDaGlsZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc0J5SWQuZ2V0KGNvbHVtbklkKTtcbiAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbCkge1xuICAgICAgY29sdW1uLnNldFRlbXBsYXRlKHRlbXBsYXRlUmVmLCB2aWV3Q29udGFpbmVyLCBmaWxsQ2VsbCwgcGFkQ2hpbGQpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
|