@scion/workbench 17.0.0-beta.7 → 17.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/esm2022/lib/activation-instant.provider.mjs +3 -3
- package/esm2022/lib/common/asserts.util.mjs +2 -2
- package/esm2022/lib/common/coerce-observable.pipe.mjs +3 -3
- package/esm2022/lib/common/filter-by-predicate.pipe.mjs +3 -3
- package/esm2022/lib/common/filter-by-text.pipe.mjs +3 -3
- package/esm2022/lib/common/grid-element-if-visible.pipe.mjs +6 -6
- package/esm2022/lib/common/instanceof.pipe.mjs +3 -3
- package/esm2022/lib/common/map-coerce.pipe.mjs +3 -3
- package/esm2022/lib/common/null-if-empty.pipe.mjs +3 -3
- package/esm2022/lib/common/objects.util.mjs +34 -0
- package/esm2022/lib/common/typeof.pipe.mjs +3 -3
- package/esm2022/lib/common/uuid.util.mjs +17 -0
- package/esm2022/lib/content-projection/content-as-overlay.component.mjs +3 -3
- package/esm2022/lib/content-projection/content-projection.directive.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/dialog-action-filter.pipe.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/dialog-footer.component.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/workbench-dialog-action.directive.mjs +9 -6
- package/esm2022/lib/dialog/dialog-footer/workbench-dialog-footer.directive.mjs +9 -6
- package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +3 -3
- package/esm2022/lib/dialog/dialog-header/workbench-dialog-header.directive.mjs +9 -6
- package/esm2022/lib/dialog/movable.directive.mjs +3 -3
- package/esm2022/lib/dialog/resizable.directive.mjs +3 -3
- package/esm2022/lib/dialog/workbench-dialog.component.mjs +53 -24
- package/esm2022/lib/dialog/workbench-dialog.mjs +1 -1
- package/esm2022/lib/dialog/workbench-dialog.options.mjs +1 -1
- package/esm2022/lib/dialog/workbench-dialog.registry.mjs +4 -4
- package/esm2022/lib/dialog/workbench-dialog.service.mjs +5 -5
- package/esm2022/lib/dialog//311/265workbench-dialog.mjs +7 -7
- package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +3 -3
- package/esm2022/lib/executor/single-task-executor.mjs +26 -7
- package/esm2022/lib/filter-field/filter-field.component.mjs +6 -6
- package/esm2022/lib/glass-pane/glass-pane.directive.mjs +15 -7
- package/esm2022/lib/layout/grid-element/grid-element.component.mjs +10 -10
- package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +6 -4
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v1.model.mjs +11 -0
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v2.model.mjs +11 -0
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v3.model.mjs +11 -0
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v4.model.mjs +11 -0
- package/esm2022/lib/layout/migration/workbench-layout-migration-v2.service.mjs +59 -0
- package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +117 -0
- package/esm2022/lib/layout/migration/workbench-layout-migration-v4.service.mjs +57 -0
- package/esm2022/lib/layout/workbench-layout.component.mjs +6 -4
- package/esm2022/lib/layout/workbench-layout.factory.mjs +4 -4
- package/esm2022/lib/layout/workbench-layout.mjs +1 -1
- package/esm2022/lib/layout/workbench-layout.model.mjs +5 -6
- package/esm2022/lib/layout/workbench-layout.service.mjs +3 -3
- package/esm2022/lib/layout/workbench-layouts.util.mjs +37 -1
- package/esm2022/lib/layout/workench-layout-serializer.service.mjs +53 -21
- package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +8 -5
- package/esm2022/lib/layout//311/265workbench-layout.mjs +382 -195
- package/esm2022/lib/logging/console-appender.service.mjs +3 -3
- package/esm2022/lib/logging/logger.mjs +3 -3
- package/esm2022/lib/logging/logging-support.mjs +4 -4
- package/esm2022/lib/logging/logging.model.mjs +3 -3
- package/esm2022/lib/logging//311/265logger.mjs +3 -3
- package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +18 -20
- package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +3 -3
- package/esm2022/lib/message-box/workbench-message-box.component.mjs +15 -6
- package/esm2022/lib/message-box/workbench-message-box.options.mjs +1 -1
- package/esm2022/lib/message-box/workbench-message-box.service.mjs +5 -5
- package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +5 -5
- package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +26 -13
- package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +25 -13
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-intent-handler.interceptor.mjs +11 -11
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +5 -5
- package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +11 -9
- package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.mjs +112 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +43 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +16 -13
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +34 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.interceptor.mjs +88 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-legacy-intent-translator.interceptor.mjs +32 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +121 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-notification/microfrontend-notification-intent-handler.service.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-platform-config-loader.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +9 -6
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +9 -15
- package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +4 -4
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +37 -32
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +13 -11
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +14 -9
- package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +54 -23
- package/esm2022/lib/migration/workbench-migration.mjs +11 -0
- package/esm2022/lib/migration/workbench-migrator.mjs +38 -0
- package/esm2022/lib/notification/notification-css-classes.pipe.mjs +3 -3
- package/esm2022/lib/notification/notification-list.component.mjs +3 -3
- package/esm2022/lib/notification/notification.component.mjs +3 -3
- package/esm2022/lib/notification/notification.config.mjs +1 -1
- package/esm2022/lib/notification/notification.mjs +1 -1
- package/esm2022/lib/notification/notification.service.mjs +9 -9
- package/esm2022/lib/notification/text-notification.component.mjs +3 -3
- package/esm2022/lib/page-not-found/format-url.pipe.mjs +26 -0
- package/esm2022/lib/page-not-found/page-not-found.component.mjs +28 -0
- package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +3 -3
- package/esm2022/lib/part/part-action-bar/part-action-filter.pipe.mjs +3 -3
- package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +4 -4
- package/esm2022/lib/part/part-bar/part-bar.component.mjs +10 -8
- package/esm2022/lib/part/part-portal.pipe.mjs +3 -3
- package/esm2022/lib/part/part.component.mjs +6 -4
- package/esm2022/lib/part/view-context-menu/accelerator-format.pipe.mjs +3 -3
- package/esm2022/lib/part/view-context-menu/text.component.mjs +3 -3
- package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +3 -3
- package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +4 -4
- package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +18 -18
- package/esm2022/lib/part/view-list/view-list.component.mjs +3 -3
- package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +3 -3
- package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +9 -9
- package/esm2022/lib/part/view-tab/view-tab.component.mjs +13 -11
- package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +5 -5
- package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +9 -9
- package/esm2022/lib/part/workbench-part-action.registry.mjs +3 -3
- package/esm2022/lib/part/workbench-part.model.mjs +1 -1
- package/esm2022/lib/part/workbench-part.registry.mjs +3 -3
- package/esm2022/lib/part//311/265workbench-part.model.mjs +3 -3
- package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v1.model.mjs +11 -0
- package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v2.model.mjs +11 -0
- package/esm2022/lib/perspective/migration/workbench-perspective-migration-v2.service.mjs +57 -0
- package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +19 -51
- package/esm2022/lib/perspective/workbench-perspective-storage.service.mjs +23 -18
- package/esm2022/lib/perspective/workbench-perspective-view-conflict-resolver.service.mjs +27 -42
- package/esm2022/lib/perspective/workbench-perspective.model.mjs +1 -1
- package/esm2022/lib/perspective/workbench-perspective.registry.mjs +3 -3
- package/esm2022/lib/perspective/workbench-perspective.service.mjs +15 -10
- package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +62 -0
- package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +98 -78
- package/esm2022/lib/popup/popup.component.mjs +22 -10
- package/esm2022/lib/popup/popup.config.mjs +3 -1
- package/esm2022/lib/popup/popup.service.mjs +4 -4
- package/esm2022/lib/portal/workbench-portal-outlet.directive.mjs +6 -6
- package/esm2022/lib/public_api.mjs +3 -2
- package/esm2022/lib/registry/workbench-object-registry.mjs +3 -3
- package/esm2022/lib/routing/empty-outlet/empty-outlet.component.mjs +31 -0
- package/esm2022/lib/routing/public_api.mjs +1 -1
- package/esm2022/lib/routing/router.util.mjs +89 -35
- package/esm2022/lib/routing/routing.model.mjs +1 -1
- package/esm2022/lib/routing/url-segment-matcher.mjs +46 -0
- package/esm2022/lib/routing/workbench-auxiliary-routes-registrator.service.mjs +58 -49
- package/esm2022/lib/routing/workbench-dialog-differ.mjs +6 -6
- package/esm2022/lib/routing/workbench-layout-differ.mjs +14 -17
- package/esm2022/lib/routing/workbench-message-box-differ.mjs +51 -0
- package/esm2022/lib/routing/workbench-navigational-states.mjs +4 -28
- package/esm2022/lib/routing/workbench-popup-differ.mjs +6 -6
- package/esm2022/lib/routing/workbench-route-data.mjs +14 -4
- package/esm2022/lib/routing/workbench-router-link.directive.mjs +24 -32
- package/esm2022/lib/routing/workbench-router.service.mjs +13 -378
- package/esm2022/lib/routing/workbench-url-observer.service.mjs +69 -82
- package/esm2022/lib/routing//311/265location.mjs +3 -3
- package/esm2022/lib/routing//311/265workbench-router.service.mjs +314 -0
- package/esm2022/lib/startup/splash/splash.component.mjs +3 -3
- package/esm2022/lib/startup/workbench-launcher.service.mjs +11 -11
- package/esm2022/lib/storage/workbench-storage.mjs +3 -3
- package/esm2022/lib/testing/public_api.mjs +2 -1
- package/esm2022/lib/testing/workbench-testing.module.mjs +13 -39
- package/esm2022/lib/testing/workbench.provider.mjs +60 -0
- package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +3 -3
- package/esm2022/lib/view/public_api.mjs +2 -1
- package/esm2022/lib/view/view-move-handler.service.mjs +42 -62
- package/esm2022/lib/view/view-portal.pipe.mjs +4 -4
- package/esm2022/lib/view/view.component.mjs +20 -40
- package/esm2022/lib/view/workbench-view-route-guards.mjs +47 -0
- package/esm2022/lib/view/workbench-view.model.mjs +6 -4
- package/esm2022/lib/view/workbench-view.registry.mjs +4 -4
- package/esm2022/lib/view//311/265workbench-view.model.mjs +106 -27
- package/esm2022/lib/view-dnd/requires-drop-zone.pipe.mjs +7 -7
- package/esm2022/lib/view-dnd/view-drag.service.mjs +6 -6
- package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +3 -3
- package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +4 -4
- package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +6 -4
- package/esm2022/lib/workbench-config.mjs +15 -0
- package/esm2022/lib/workbench-id.mjs +3 -3
- package/esm2022/lib/workbench.component.mjs +20 -12
- package/esm2022/lib/workbench.constants.mjs +7 -9
- package/esm2022/lib/workbench.model.mjs +1 -1
- package/esm2022/lib/workbench.module.mjs +15 -86
- package/esm2022/lib/workbench.provider.mjs +117 -0
- package/esm2022/lib/workbench.service.mjs +5 -5
- package/esm2022/lib//311/265workbench.service.mjs +15 -21
- package/fesm2022/scion-workbench.mjs +5490 -4166
- package/fesm2022/scion-workbench.mjs.map +1 -1
- package/lib/common/objects.util.d.ts +17 -0
- package/lib/common/uuid.util.d.ts +8 -0
- package/lib/dialog/workbench-dialog.component.d.ts +16 -7
- package/lib/dialog/workbench-dialog.d.ts +1 -1
- package/lib/dialog/workbench-dialog.options.d.ts +4 -3
- package/lib/dialog/workbench-dialog.registry.d.ts +4 -3
- package/lib/dialog/workbench-dialog.service.d.ts +1 -1
- package/lib/dialog//311/265workbench-dialog.d.ts +2 -2
- package/lib/executor/single-task-executor.d.ts +6 -1
- package/lib/filter-field/filter-field.component.d.ts +1 -1
- package/lib/glass-pane/glass-pane.directive.d.ts +21 -0
- package/lib/layout/grid-element/grid-element.component.d.ts +2 -2
- package/lib/layout/migration/model/workbench-layout-migration-v1.model.d.ts +16 -0
- package/lib/layout/migration/model/workbench-layout-migration-v2.model.d.ts +22 -0
- package/lib/layout/migration/model/workbench-layout-migration-v3.model.d.ts +30 -0
- package/lib/layout/migration/model/workbench-layout-migration-v4.model.d.ts +31 -0
- package/lib/layout/migration/workbench-layout-migration-v2.service.d.ts +13 -0
- package/lib/layout/migration/workbench-layout-migration-v3.service.d.ts +16 -0
- package/lib/layout/migration/workbench-layout-migration-v4.service.d.ts +12 -0
- package/lib/layout/workbench-layout.d.ts +61 -7
- package/lib/layout/workbench-layout.factory.d.ts +1 -1
- package/lib/layout/workbench-layout.model.d.ts +19 -9
- package/lib/layout/workbench-layouts.util.d.ts +18 -0
- package/lib/layout/workench-layout-serializer.service.d.ts +28 -7
- package/lib/layout//311/265workbench-layout.d.ts +172 -98
- package/lib/layout//311/265workbench-layout.factory.d.ts +4 -0
- package/lib/logging/logging-support.d.ts +2 -2
- package/lib/message-box/workbench-message-box.component.d.ts +3 -0
- package/lib/message-box/workbench-message-box.options.d.ts +4 -3
- package/lib/message-box/workbench-message-box.service.d.ts +1 -1
- package/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.d.ts +7 -1
- package/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.d.ts +1 -0
- package/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.d.ts +39 -0
- package/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.d.ts +25 -0
- package/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.d.ts +4 -2
- package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.d.ts +10 -0
- package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.interceptor.d.ts +28 -0
- package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-legacy-intent-translator.interceptor.d.ts +11 -0
- package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.d.ts +48 -0
- package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.d.ts +3 -7
- package/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.d.ts +4 -9
- package/lib/microfrontend-platform/workbench-microfrontend-support.d.ts +3 -3
- package/lib/migration/workbench-migration.d.ts +9 -0
- package/lib/migration/workbench-migrator.d.ts +18 -0
- package/lib/notification/notification.config.d.ts +1 -1
- package/lib/notification/notification.d.ts +1 -3
- package/lib/page-not-found/format-url.pipe.d.ts +11 -0
- package/lib/page-not-found/page-not-found.component.d.ts +8 -0
- package/lib/part/part-action-bar/part-action.directive.d.ts +1 -1
- package/lib/part/part-bar/part-bar.component.d.ts +4 -3
- package/lib/part/view-context-menu/view-menu.directive.d.ts +1 -1
- package/lib/part/view-context-menu/view-menu.service.d.ts +5 -4
- package/lib/part/view-list-item/view-list-item.component.d.ts +5 -4
- package/lib/part/view-tab/view-tab.component.d.ts +6 -5
- package/lib/part/view-tab-drag-image/view-tab-drag-image.component.d.ts +3 -3
- package/lib/part/workbench-part.model.d.ts +5 -4
- package/lib/part//311/265workbench-part.model.d.ts +5 -4
- package/lib/perspective/migration/model/workbench-perspective-migration-v1.model.d.ts +8 -0
- package/lib/perspective/migration/model/workbench-perspective-migration-v2.model.d.ts +10 -0
- package/lib/perspective/migration/workbench-perspective-migration-v2.service.d.ts +13 -0
- package/lib/perspective/workbench-grid-merger.service.d.ts +9 -16
- package/lib/perspective/workbench-perspective-storage.service.d.ts +10 -28
- package/lib/perspective/workbench-perspective-view-conflict-resolver.service.d.ts +8 -25
- package/lib/perspective/workbench-perspective.model.d.ts +123 -14
- package/lib/perspective/workbench-perspective.service.d.ts +10 -3
- package/lib/perspective/workench-perspective-serializer.service.d.ts +26 -0
- package/lib/perspective//311/265workbench-perspective.model.d.ts +16 -14
- package/lib/popup/popup.component.d.ts +1 -0
- package/lib/popup/popup.config.d.ts +4 -3
- package/lib/portal/workbench-portal-outlet.directive.d.ts +2 -2
- package/lib/public_api.d.ts +4 -3
- package/lib/registry/workbench-object-registry.d.ts +2 -2
- package/lib/routing/empty-outlet/empty-outlet.component.d.ts +15 -0
- package/lib/routing/public_api.d.ts +2 -2
- package/lib/routing/router.util.d.ts +45 -19
- package/lib/routing/routing.model.d.ts +107 -8
- package/lib/routing/url-segment-matcher.d.ts +20 -0
- package/lib/routing/workbench-auxiliary-routes-registrator.service.d.ts +25 -15
- package/lib/routing/workbench-layout-differ.d.ts +4 -7
- package/lib/routing/workbench-message-box-differ.d.ts +25 -0
- package/lib/routing/workbench-navigational-states.d.ts +6 -19
- package/lib/routing/workbench-route-data.d.ts +13 -3
- package/lib/routing/workbench-router-link.directive.d.ts +22 -7
- package/lib/routing/workbench-router.service.d.ts +42 -142
- package/lib/routing/workbench-url-observer.service.d.ts +10 -28
- package/lib/routing//311/265workbench-router.service.d.ts +74 -0
- package/lib/startup/workbench-launcher.service.d.ts +4 -4
- package/lib/testing/public_api.d.ts +1 -0
- package/lib/testing/workbench-testing.module.d.ts +7 -6
- package/lib/testing/workbench.provider.d.ts +29 -0
- package/lib/view/public_api.d.ts +2 -1
- package/lib/view/view-move-handler.service.d.ts +2 -4
- package/lib/view/view-portal.pipe.d.ts +2 -1
- package/lib/view/view.component.d.ts +1 -11
- package/lib/view/workbench-view-route-guards.d.ts +36 -0
- package/lib/view/workbench-view.model.d.ts +37 -5
- package/lib/view/workbench-view.registry.d.ts +4 -3
- package/lib/view//311/265workbench-view.model.d.ts +61 -15
- package/lib/view-dnd/view-drag.service.d.ts +9 -4
- package/lib/view-dnd/view-drop-zone.directive.d.ts +1 -1
- package/lib/{workbench-module-config.d.ts → workbench-config.d.ts} +29 -71
- package/lib/workbench.component.d.ts +2 -2
- package/lib/workbench.constants.d.ts +6 -8
- package/lib/workbench.model.d.ts +20 -8
- package/lib/workbench.module.d.ts +12 -7
- package/lib/workbench.provider.d.ts +38 -0
- package/lib/workbench.service.d.ts +32 -8
- package/lib//311/265workbench.service.d.ts +9 -3
- package/package.json +8 -8
- package/esm2022/lib/layout/migration/workbench-layout-migrator.service.mjs +0 -38
- package/esm2022/lib/layout/migration/workbench-layout-v1-migrator.service.mjs +0 -59
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.service.mjs +0 -46
- package/esm2022/lib/view/workbench-view-pre-destroy.guard.mjs +0 -36
- package/esm2022/lib/workbench-module-config.mjs +0 -15
- package/lib/layout/migration/workbench-layout-migrator.service.d.ts +0 -15
- package/lib/layout/migration/workbench-layout-v1-migrator.service.d.ts +0 -12
- package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.service.d.ts +0 -17
- package/lib/view/workbench-view-pre-destroy.guard.d.ts +0 -5
|
@@ -19,33 +19,35 @@ import { WorkbenchNavigationalStates } from './workbench-navigational-states';
|
|
|
19
19
|
import { MainAreaLayoutComponent } from '../layout/main-area-layout/main-area-layout.component';
|
|
20
20
|
import { PartComponent } from '../part/part.component';
|
|
21
21
|
import { MAIN_AREA } from '../layout/workbench-layout';
|
|
22
|
-
import { canDeactivateWorkbenchView } from '../view/workbench-view-pre-destroy.guard';
|
|
23
22
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
23
|
+
import { RouterUtils } from './router.util';
|
|
24
|
+
import { canMatchNotFoundPage } from '../view/workbench-view-route-guards';
|
|
24
25
|
import * as i0 from "@angular/core";
|
|
25
26
|
import * as i1 from "@angular/router";
|
|
26
27
|
import * as i2 from "./workbench-auxiliary-routes-registrator.service";
|
|
27
28
|
import * as i3 from "../view/workbench-view.registry";
|
|
28
29
|
import * as i4 from "../part/workbench-part.registry";
|
|
29
30
|
import * as i5 from "../layout/workbench-layout.service";
|
|
30
|
-
import * as i6 from "
|
|
31
|
+
import * as i6 from "./\u0275workbench-router.service";
|
|
31
32
|
import * as i7 from "../layout/\u0275workbench-layout.factory";
|
|
32
33
|
import * as i8 from "./workbench-layout-differ";
|
|
33
34
|
import * as i9 from "./workbench-popup-differ";
|
|
34
35
|
import * as i10 from "./workbench-dialog-differ";
|
|
35
|
-
import * as i11 from "
|
|
36
|
+
import * as i11 from "./workbench-message-box-differ";
|
|
37
|
+
import * as i12 from "../logging";
|
|
36
38
|
/**
|
|
37
39
|
* Tracks the browser URL for workbench layout changes.
|
|
38
40
|
*
|
|
39
|
-
* - For each added view, constructs a {@link WorkbenchView} and registers view specific auxiliary routes of all
|
|
41
|
+
* - For each added view, constructs a {@link WorkbenchView} and registers view specific auxiliary routes of all top-level routes
|
|
40
42
|
* - For each removed view, destroys {@link WorkbenchView} and unregisters its auxiliary routes
|
|
41
43
|
* - For each added part, constructs a {@link WorkbenchPart}
|
|
42
44
|
* - For each removed part, destroys {@link WorkbenchPart}
|
|
43
45
|
* - Parses the serialized layout and injects it into {@link WorkbenchLayoutService}.
|
|
44
46
|
*/
|
|
45
47
|
export class WorkbenchUrlObserver {
|
|
46
|
-
constructor(_router,
|
|
48
|
+
constructor(_router, _auxiliaryRoutesRegistrator, _viewRegistry, _partRegistry, _workbenchLayoutService, _environmentInjector, _workbenchRouter, _workbenchLayoutFactory, _workbenchLayoutDiffer, _workbenchPopupDiffer, _workbenchDialogDiffer, _workbenchMessageBoxDiffer, _logger) {
|
|
47
49
|
this._router = _router;
|
|
48
|
-
this.
|
|
50
|
+
this._auxiliaryRoutesRegistrator = _auxiliaryRoutesRegistrator;
|
|
49
51
|
this._viewRegistry = _viewRegistry;
|
|
50
52
|
this._partRegistry = _partRegistry;
|
|
51
53
|
this._workbenchLayoutService = _workbenchLayoutService;
|
|
@@ -55,17 +57,16 @@ export class WorkbenchUrlObserver {
|
|
|
55
57
|
this._workbenchLayoutDiffer = _workbenchLayoutDiffer;
|
|
56
58
|
this._workbenchPopupDiffer = _workbenchPopupDiffer;
|
|
57
59
|
this._workbenchDialogDiffer = _workbenchDialogDiffer;
|
|
60
|
+
this._workbenchMessageBoxDiffer = _workbenchMessageBoxDiffer;
|
|
58
61
|
this._logger = _logger;
|
|
59
62
|
this.installRouterEventListeners();
|
|
60
63
|
}
|
|
61
64
|
/** Invoked at the beginning of each navigation */
|
|
62
65
|
onNavigationStart(event) {
|
|
63
66
|
const context = this.createWorkbenchNavigationContext(event.url);
|
|
64
|
-
this._logger.debug(() => 'onNavigationStart', LoggerNames.ROUTING, event, `NavigationContext [parts=${context.layout.parts().map(part => part.id)}, layoutDiff=${context.layoutDiff.toString()}, popupDiff=${context.popupDiff.toString()},
|
|
67
|
+
this._logger.debug(() => 'onNavigationStart', LoggerNames.ROUTING, event, `NavigationContext [parts=${context.layout.parts().map(part => part.id)}, layoutDiff=${context.layoutDiff.toString()}, popupDiff=${context.popupDiff.toString()}, dialogDiff=${context.dialogDiff.toString()}, messageBoxDiff=${context.messageBoxDiff.toString()}]`);
|
|
65
68
|
this._workbenchRouter.setCurrentNavigationContext(context);
|
|
66
|
-
this.
|
|
67
|
-
this.registerAddedPopupAuxiliaryRoutes();
|
|
68
|
-
this.registerAddedDialogAuxiliaryRoutes();
|
|
69
|
+
this.registerAddedOutletAuxiliaryRoutes();
|
|
69
70
|
}
|
|
70
71
|
/** Invoked upon successful navigation */
|
|
71
72
|
onNavigationEnd(event) {
|
|
@@ -80,18 +81,14 @@ export class WorkbenchUrlObserver {
|
|
|
80
81
|
onNavigationCancel(event) {
|
|
81
82
|
this._logger.debug(() => 'onNavigationCancel', LoggerNames.ROUTING, event);
|
|
82
83
|
this.undoAuxiliaryRoutesRegistration();
|
|
83
|
-
this.
|
|
84
|
-
this.undoWorkbenchPopupDiffer();
|
|
85
|
-
this.undoWorkbenchDialogDiffer();
|
|
84
|
+
this.undoWorkbenchDiffers();
|
|
86
85
|
this._workbenchRouter.setCurrentNavigationContext(null);
|
|
87
86
|
}
|
|
88
87
|
/** Invoked when the navigation failed */
|
|
89
88
|
onNavigationError(event) {
|
|
90
89
|
this._logger.debug(() => 'onNavigationError', LoggerNames.ROUTING, event);
|
|
91
90
|
this.undoAuxiliaryRoutesRegistration();
|
|
92
|
-
this.
|
|
93
|
-
this.undoWorkbenchPopupDiffer();
|
|
94
|
-
this.undoWorkbenchDialogDiffer();
|
|
91
|
+
this.undoWorkbenchDiffers();
|
|
95
92
|
this._workbenchRouter.setCurrentNavigationContext(null);
|
|
96
93
|
}
|
|
97
94
|
/** Invoked after checked guards for activation */
|
|
@@ -107,9 +104,9 @@ export class WorkbenchUrlObserver {
|
|
|
107
104
|
const layout = this._workbenchLayoutFactory.create({
|
|
108
105
|
mainAreaGrid: (() => {
|
|
109
106
|
// Read the main area grid from the query parameter.
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
return
|
|
107
|
+
const mainAreaGrid = urlTree.queryParamMap.get(MAIN_AREA_LAYOUT_QUERY_PARAM) ?? urlTree.queryParamMap.get('parts'); // TODO [Angular 18] Remove fallback to 'parts' query parameter
|
|
108
|
+
if (mainAreaGrid) {
|
|
109
|
+
return mainAreaGrid;
|
|
113
110
|
}
|
|
114
111
|
// Do not fall back to the current layout if the navigation was performed via the Workbench Router.
|
|
115
112
|
const isWorkbenchRouterNavigation = workbenchNavigationalState !== null;
|
|
@@ -126,76 +123,59 @@ export class WorkbenchUrlObserver {
|
|
|
126
123
|
})(),
|
|
127
124
|
workbenchGrid: workbenchNavigationalState?.workbenchGrid ?? this._workbenchLayoutService.layout?.workbenchGrid,
|
|
128
125
|
maximized: workbenchNavigationalState?.maximized ?? this._workbenchLayoutService.layout?.maximized,
|
|
126
|
+
viewStates: workbenchNavigationalState?.viewStates ?? this._workbenchLayoutService.layout?.viewStates(),
|
|
127
|
+
viewOutlets: Object.fromEntries(RouterUtils.parseViewOutlets(urlTree)),
|
|
129
128
|
});
|
|
130
129
|
return {
|
|
131
130
|
layout,
|
|
132
131
|
layoutDiff: this._workbenchLayoutDiffer.diff(layout, urlTree),
|
|
133
132
|
popupDiff: this._workbenchPopupDiffer.diff(urlTree),
|
|
134
133
|
dialogDiff: this._workbenchDialogDiffer.diff(urlTree),
|
|
134
|
+
messageBoxDiff: this._workbenchMessageBoxDiffer.diff(urlTree),
|
|
135
135
|
};
|
|
136
136
|
}
|
|
137
137
|
/**
|
|
138
|
-
* For each added
|
|
138
|
+
* For each added workbench outlet, registers auxiliary routes of all top-level routes.
|
|
139
139
|
*/
|
|
140
|
-
|
|
140
|
+
registerAddedOutletAuxiliaryRoutes() {
|
|
141
141
|
const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
|
|
142
|
-
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
this._logger.debug(() => `Registered auxiliary routes for views: ${addedViewOutlets}`, LoggerNames.ROUTING, newAuxiliaryRoutes);
|
|
142
|
+
// Register view auxiliary routes.
|
|
143
|
+
const addedViews = navigationContext.layoutDiff.addedViews;
|
|
144
|
+
if (addedViews.length) {
|
|
145
|
+
const auxiliaryRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedViews, { canMatchNotFoundPage: [canMatchNotFoundPage] });
|
|
146
|
+
this._logger.debug(() => `Registered auxiliary routes for views: ${addedViews}`, LoggerNames.ROUTING, auxiliaryRoutes);
|
|
148
147
|
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* For each added popup, registers auxiliary routes of all primary routes.
|
|
152
|
-
*/
|
|
153
|
-
registerAddedPopupAuxiliaryRoutes() {
|
|
154
|
-
const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
|
|
148
|
+
// Register popup auxiliary routes.
|
|
155
149
|
const addedPopupOutlets = navigationContext.popupDiff.addedPopupOutlets;
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
this._logger.debug(() => `Registered auxiliary routes for popups: ${addedPopupOutlets}`, LoggerNames.ROUTING,
|
|
150
|
+
if (addedPopupOutlets.length) {
|
|
151
|
+
const auxiliaryRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedPopupOutlets);
|
|
152
|
+
this._logger.debug(() => `Registered auxiliary routes for popups: ${addedPopupOutlets}`, LoggerNames.ROUTING, auxiliaryRoutes);
|
|
159
153
|
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* For each added dialog, registers auxiliary routes of all primary routes.
|
|
163
|
-
*/
|
|
164
|
-
registerAddedDialogAuxiliaryRoutes() {
|
|
165
|
-
const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
|
|
154
|
+
// Register dialog auxiliary routes.
|
|
166
155
|
const addedDialogOutlets = navigationContext.dialogDiff.addedDialogOutlets;
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
this._logger.debug(() => `Registered auxiliary routes for dialogs: ${addedDialogOutlets}`, LoggerNames.ROUTING,
|
|
156
|
+
if (addedDialogOutlets.length) {
|
|
157
|
+
const auxiliaryRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedDialogOutlets);
|
|
158
|
+
this._logger.debug(() => `Registered auxiliary routes for dialogs: ${addedDialogOutlets}`, LoggerNames.ROUTING, auxiliaryRoutes);
|
|
159
|
+
}
|
|
160
|
+
// Register message box auxiliary routes.
|
|
161
|
+
const addedMessageBoxOutlets = navigationContext.messageBoxDiff.addedMessageBoxOutlets;
|
|
162
|
+
if (addedMessageBoxOutlets.length) {
|
|
163
|
+
const auxiliaryRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedMessageBoxOutlets);
|
|
164
|
+
this._logger.debug(() => `Registered auxiliary routes for message boxes: ${addedMessageBoxOutlets}`, LoggerNames.ROUTING, auxiliaryRoutes);
|
|
170
165
|
}
|
|
171
166
|
}
|
|
172
167
|
/**
|
|
173
|
-
* Reverts the workbench
|
|
168
|
+
* Reverts the workbench differs to the state before the navigation.
|
|
174
169
|
*
|
|
175
170
|
* Invoke this method after navigation failure or cancellation. The navigation is cancelled when guards perform a redirect or reject navigation.
|
|
176
171
|
*/
|
|
177
|
-
|
|
172
|
+
undoWorkbenchDiffers() {
|
|
178
173
|
const prevNavigateLayout = this._workbenchLayoutService.layout; // Layout in `WorkbenchLayoutService` is only updated after successful navigation
|
|
179
174
|
const prevNavigateUrl = this._router.parseUrl(this._router.url); // Browser URL is only updated after successful navigation
|
|
180
175
|
this._workbenchLayoutDiffer.diff(prevNavigateLayout, prevNavigateUrl);
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Reverts the popup outlet differ to the state before the navigation.
|
|
184
|
-
*
|
|
185
|
-
* Invoke this method after navigation failure or cancellation. The navigation is cancelled when guards perform a redirect or reject navigation.
|
|
186
|
-
*/
|
|
187
|
-
undoWorkbenchPopupDiffer() {
|
|
188
|
-
const prevNavigateUrl = this._router.parseUrl(this._router.url); // Browser URL is only updated after successful navigation
|
|
189
176
|
this._workbenchPopupDiffer.diff(prevNavigateUrl);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Reverts the dialog outlet differ to the state before the navigation.
|
|
193
|
-
*
|
|
194
|
-
* Invoke this method after navigation failure or cancellation. The navigation is cancelled when guards perform a redirect or reject navigation.
|
|
195
|
-
*/
|
|
196
|
-
undoWorkbenchDialogDiffer() {
|
|
197
|
-
const prevNavigateUrl = this._router.parseUrl(this._router.url); // Browser URL is only updated after successful navigation
|
|
198
177
|
this._workbenchDialogDiffer.diff(prevNavigateUrl);
|
|
178
|
+
this._workbenchMessageBoxDiffer.diff(prevNavigateUrl);
|
|
199
179
|
}
|
|
200
180
|
/**
|
|
201
181
|
* Undoes the registration of auxiliary routes.
|
|
@@ -203,12 +183,15 @@ export class WorkbenchUrlObserver {
|
|
|
203
183
|
* Invoke this method after navigation failure or cancellation. The navigation is cancelled when guards perform a redirect or reject navigation.
|
|
204
184
|
*/
|
|
205
185
|
undoAuxiliaryRoutesRegistration() {
|
|
206
|
-
const
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
|
|
186
|
+
const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
|
|
187
|
+
const addedOutlets = [
|
|
188
|
+
...navigationContext.layoutDiff.addedViews,
|
|
189
|
+
...navigationContext.popupDiff.addedPopupOutlets,
|
|
190
|
+
...navigationContext.dialogDiff.addedDialogOutlets,
|
|
191
|
+
...navigationContext.messageBoxDiff.addedMessageBoxOutlets,
|
|
192
|
+
];
|
|
210
193
|
if (addedOutlets.length) {
|
|
211
|
-
this.
|
|
194
|
+
this._auxiliaryRoutesRegistrator.unregisterAuxiliaryRoutes(addedOutlets);
|
|
212
195
|
this._logger.debug(() => `Undo auxiliary routes registration for outlet(s): ${addedOutlets}`, LoggerNames.ROUTING);
|
|
213
196
|
}
|
|
214
197
|
}
|
|
@@ -220,8 +203,8 @@ export class WorkbenchUrlObserver {
|
|
|
220
203
|
if (layout !== this._workbenchLayoutService.layout) { // Layout instance does not change if navigating through the Angular router.
|
|
221
204
|
this.updateViewRegistry();
|
|
222
205
|
this.updatePartRegistry();
|
|
223
|
-
|
|
224
|
-
|
|
206
|
+
layout.views().forEach(view => this._viewRegistry.get(view.id).onLayoutChange(layout));
|
|
207
|
+
layout.parts().forEach(part => this._partRegistry.get(part.id).onLayoutChange(layout));
|
|
225
208
|
}
|
|
226
209
|
}
|
|
227
210
|
/**
|
|
@@ -229,7 +212,8 @@ export class WorkbenchUrlObserver {
|
|
|
229
212
|
*/
|
|
230
213
|
publishWorkbenchLayout() {
|
|
231
214
|
const { layout } = this._workbenchRouter.getCurrentNavigationContext();
|
|
232
|
-
if (layout !== this._workbenchLayoutService.layout) {
|
|
215
|
+
if (layout !== this._workbenchLayoutService.layout) {
|
|
216
|
+
// Layout instance only changes when navigating via the workbench router, but not via the Angular router, e.g., when not navigating views.
|
|
233
217
|
this._logger.debug(() => 'Publishing workbench layout', LoggerNames.ROUTING, layout);
|
|
234
218
|
this._workbenchLayoutService.setLayout(layout);
|
|
235
219
|
}
|
|
@@ -241,20 +225,23 @@ export class WorkbenchUrlObserver {
|
|
|
241
225
|
const layout = this._workbenchRouter.getCurrentNavigationContext().layout;
|
|
242
226
|
if (layout.mainAreaGrid?.migrated) {
|
|
243
227
|
// Update the URL with the migrated URL and clear existing query params, for example, if the layout query parameter has been renamed.
|
|
244
|
-
this._workbenchRouter
|
|
228
|
+
this._workbenchRouter.navigate(layout => layout, { queryParamsHandling: null, replaceUrl: true }).then();
|
|
245
229
|
}
|
|
246
230
|
}
|
|
247
231
|
/**
|
|
248
232
|
* Unregisters auxiliary routes of removed workbench outlets.
|
|
249
233
|
*/
|
|
250
234
|
unregisterRemovedOutletAuxiliaryRoutes() {
|
|
251
|
-
const
|
|
252
|
-
const
|
|
253
|
-
|
|
254
|
-
|
|
235
|
+
const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
|
|
236
|
+
const removedOutlets = [
|
|
237
|
+
...navigationContext.layoutDiff.removedViews,
|
|
238
|
+
...navigationContext.popupDiff.removedPopupOutlets,
|
|
239
|
+
...navigationContext.dialogDiff.removedDialogOutlets,
|
|
240
|
+
...navigationContext.messageBoxDiff.removedMessageBoxOutlets,
|
|
241
|
+
];
|
|
255
242
|
if (removedOutlets.length) {
|
|
256
243
|
this._logger.debug(() => 'Unregistering outlet auxiliary routes: ', LoggerNames.ROUTING, removedOutlets);
|
|
257
|
-
this.
|
|
244
|
+
this._auxiliaryRoutesRegistrator.unregisterAuxiliaryRoutes(removedOutlets);
|
|
258
245
|
}
|
|
259
246
|
}
|
|
260
247
|
/**
|
|
@@ -316,11 +303,11 @@ export class WorkbenchUrlObserver {
|
|
|
316
303
|
}
|
|
317
304
|
});
|
|
318
305
|
}
|
|
319
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
320
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.
|
|
306
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchUrlObserver, deps: [{ token: i1.Router }, { token: i2.WorkbenchAuxiliaryRoutesRegistrator }, { token: i3.WorkbenchViewRegistry }, { token: i4.WorkbenchPartRegistry }, { token: i5.WorkbenchLayoutService }, { token: i0.EnvironmentInjector }, { token: i6.ɵWorkbenchRouter }, { token: i7.ɵWorkbenchLayoutFactory }, { token: i8.WorkbenchLayoutDiffer }, { token: i9.WorkbenchPopupDiffer }, { token: i10.WorkbenchDialogDiffer }, { token: i11.WorkbenchMessageBoxDiffer }, { token: i12.Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
307
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchUrlObserver, providedIn: 'root' }); }
|
|
321
308
|
}
|
|
322
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
309
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchUrlObserver, decorators: [{
|
|
323
310
|
type: Injectable,
|
|
324
311
|
args: [{ providedIn: 'root' }]
|
|
325
|
-
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.WorkbenchAuxiliaryRoutesRegistrator }, { type: i3.WorkbenchViewRegistry }, { type: i4.WorkbenchPartRegistry }, { type: i5.WorkbenchLayoutService }, { type: i0.EnvironmentInjector }, { type: i6
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLXVybC1vYnNlcnZlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvcm91dGluZy93b3JrYmVuY2gtdXJsLW9ic2VydmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0VBUUU7QUFFRixPQUFPLEVBQVEsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFVLFdBQVcsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlJLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQXNCLFVBQVUsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyRixPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUlwRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUlyRCxPQUFPLEVBQVMsV0FBVyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9DLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDckQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDcEYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7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RUFBQyxDQUFDLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTthQUNoQixJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsS0FBMEIsRUFBd0IsRUFBRSxDQUFDLEtBQUssWUFBWSxXQUFXLENBQUMsRUFDMUYsa0JBQWtCLEVBQUUsQ0FDckI7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDL0I7aUJBQ0ksSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdCO2lCQUNJLElBQUksS0FBSyxZQUFZLGdCQUFnQixFQUFFO2dCQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEM7aUJBQ0ksSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFO2dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDL0I7aUJBQ0ksSUFBSSxLQUFLLFlBQVksY0FBYyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDOUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBcFRVLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRFIsTUFBTTs7MkZBQ2xCLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyNCBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4qXG4qIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4qXG4qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4qL1xuXG5pbXBvcnQge0V2ZW50LCBHdWFyZHNDaGVja0VuZCwgTmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkVycm9yLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciwgUm91dGVyRXZlbnR9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbnZpcm9ubWVudEluamVjdG9yLCBJbmplY3RhYmxlLCBydW5JbkluamVjdGlvbkNvbnRleHR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtXb3JrYmVuY2hBdXhpbGlhcnlSb3V0ZXNSZWdpc3RyYXRvcn0gZnJvbSAnLi93b3JrYmVuY2gtYXV4aWxpYXJ5LXJvdXRlcy1yZWdpc3RyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7TUFJTl9BUkVBX0xBWU9VVF9RVUVSWV9QQVJBTX0gZnJvbSAnLi4vd29ya2JlbmNoLmNvbnN0YW50cyc7XG5pbXBvcnQge1dvcmtiZW5jaFZpZXdSZWdpc3RyeX0gZnJvbSAnLi4vdmlldy93b3JrYmVuY2gtdmlldy5yZWdpc3RyeSc7XG5pbXBvcnQge1dvcmtiZW5jaFBhcnRSZWdpc3RyeX0gZnJvbSAnLi4vcGFydC93b3JrYmVuY2gtcGFydC5yZWdpc3RyeSc7XG5pbXBvcnQge1dvcmtiZW5jaExheW91dFNlcnZpY2V9IGZyb20gJy4uL2xheW91dC93b3JrYmVuY2gtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaFBhcnR9IGZyb20gJy4uL3BhcnQvybV3b3JrYmVuY2gtcGFydC5tb2RlbCc7XG5pbXBvcnQge8m1V29ya2JlbmNoVmlld30gZnJvbSAnLi4vdmlldy/JtXdvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7Vmlld0NvbXBvbmVudH0gZnJvbSAnLi4vdmlldy92aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQge1dvcmtiZW5jaE5hdmlnYXRpb25Db250ZXh0LCBXb3JrYmVuY2hSb3V0ZXJ9IGZyb20gJy4vd29ya2JlbmNoLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7V29ya2JlbmNoTGF5b3V0RGlmZmVyfSBmcm9tICcuL3dvcmtiZW5jaC1sYXlvdXQtZGlmZmVyJztcbmltcG9ydCB7V29ya2JlbmNoUG9wdXBEaWZmZXJ9IGZyb20gJy4vd29ya2JlbmNoLXBvcHVwLWRpZmZlcic7XG5pbXBvcnQge0xvZ2dlciwgTG9nZ2VyTmFtZXN9IGZyb20gJy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHtXb3JrYmVuY2hOYXZpZ2F0aW9uYWxTdGF0ZXN9IGZyb20gJy4vd29ya2JlbmNoLW5hdmlnYXRpb25hbC1zdGF0ZXMnO1xuaW1wb3J0IHtNYWluQXJlYUxheW91dENvbXBvbmVudH0gZnJvbSAnLi4vbGF5b3V0L21haW4tYXJlYS1sYXlvdXQvbWFpbi1hcmVhLWxheW91dC5jb21wb25lbnQnO1xuaW1wb3J0IHtQYXJ0Q29tcG9uZW50fSBmcm9tICcuLi9wYXJ0L3BhcnQuY29tcG9uZW50JztcbmltcG9ydCB7TUFJTl9BUkVBfSBmcm9tICcuLi9sYXlvdXQvd29ya2JlbmNoLWxheW91dCc7XG5pbXBvcnQge2NhbkRlYWN0aXZhdGVXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi92aWV3L3dvcmtiZW5jaC12aWV3LXByZS1kZXN0cm95Lmd1YXJkJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge8m1V29ya2JlbmNoTGF5b3V0RmFjdG9yeX0gZnJvbSAnLi4vbGF5b3V0L8m1d29ya2JlbmNoLWxheW91dC5mYWN0b3J5JztcbmltcG9ydCB7V29ya2JlbmNoRGlhbG9nRGlmZmVyfSBmcm9tICcuL3dvcmtiZW5jaC1kaWFsb2ctZGlmZmVyJztcblxuLyoqXG4gKiBUcmFja3MgdGhlIGJyb3dzZXIgVVJMIGZvciB3b3JrYmVuY2ggbGF5b3V0IGNoYW5nZXMuXG4gKlxuICogLSBGb3IgZWFjaCBhZGRlZCB2aWV3LCBjb25zdHJ1Y3RzIGEge0BsaW5rIFdvcmtiZW5jaFZpZXd9IGFuZCByZWdpc3RlcnMgdmlldyBzcGVjaWZpYyBhdXhpbGlhcnkgcm91dGVzIG9mIGFsbCBwcmltYXJ5IHJvdXRlc1xuICogLSBGb3IgZWFjaCByZW1vdmVkIHZpZXcsIGRlc3Ryb3lzIHtAbGluayBXb3JrYmVuY2hWaWV3fSBhbmQgdW5yZWdpc3RlcnMgaXRzIGF1eGlsaWFyeSByb3V0ZXNcbiAqIC0gRm9yIGVhY2ggYWRkZWQgcGFydCwgY29uc3RydWN0cyBhIHtAbGluayBXb3JrYmVuY2hQYXJ0fVxuICogLSBGb3IgZWFjaCByZW1vdmVkIHBhcnQsIGRlc3Ryb3lzIHtAbGluayBXb3JrYmVuY2hQYXJ0fVxuICogLSBQYXJzZXMgdGhlIHNlcmlhbGl6ZWQgbGF5b3V0IGFuZCBpbmplY3RzIGl0IGludG8ge0BsaW5rIFdvcmtiZW5jaExheW91dFNlcnZpY2V9LlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBXb3JrYmVuY2hVcmxPYnNlcnZlciB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2F1eFJvdXRlc1JlZ2lzdHJhdG9yOiBXb3JrYmVuY2hBdXhpbGlhcnlSb3V0ZXNSZWdpc3RyYXRvcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld1JlZ2lzdHJ5OiBXb3JrYmVuY2hWaWV3UmVnaXN0cnksXG4gICAgICAgICAgICAgIHByaXZhdGUgX3BhcnRSZWdpc3RyeTogV29ya2JlbmNoUGFydFJlZ2lzdHJ5LFxuICAgICAgICAgICAgICBwcml2YXRlIF93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlOiBXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbnZpcm9ubWVudEluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF93b3JrYmVuY2hSb3V0ZXI6IFdvcmtiZW5jaFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoTGF5b3V0RmFjdG9yeTogybVXb3JrYmVuY2hMYXlvdXRGYWN0b3J5LFxuICAgICAgICAgICAgICBwcml2YXRlIF93b3JrYmVuY2hMYXlvdXREaWZmZXI6IFdvcmtiZW5jaExheW91dERpZmZlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoUG9wdXBEaWZmZXI6IFdvcmtiZW5jaFBvcHVwRGlmZmVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF93b3JrYmVuY2hEaWFsb2dEaWZmZXI6IFdvcmtiZW5jaERpYWxvZ0RpZmZlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyOiBMb2dnZXIpIHtcbiAgICB0aGlzLmluc3RhbGxSb3V0ZXJFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqIEludm9rZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIG5hdmlnYXRpb24gKi9cbiAgcHJpdmF0ZSBvbk5hdmlnYXRpb25TdGFydChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3JlYXRlV29ya2JlbmNoTmF2aWdhdGlvbkNvbnRleHQoZXZlbnQudXJsKTtcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gJ29uTmF2aWdhdGlvblN0YXJ0JywgTG9nZ2VyTmFtZXMuUk9VVElORywgZXZlbnQsIGBOYXZpZ2F0aW9uQ29udGV4dCBbcGFydHM9JHtjb250ZXh0LmxheW91dC5wYXJ0cygpLm1hcChwYXJ0ID0+IHBhcnQuaWQpfSwgbGF5b3V0RGlmZj0ke2NvbnRleHQubGF5b3V0RGlmZi50b1N0cmluZygpfSwgcG9wdXBEaWZmPSR7Y29udGV4dC5wb3B1cERpZmYudG9TdHJpbmcoKX0sICBkaWFsb2dEaWZmPSR7Y29udGV4dC5kaWFsb2dEaWZmLnRvU3RyaW5nKCl9XWApO1xuICAgIHRoaXMuX3dvcmtiZW5jaFJvdXRlci5zZXRDdXJyZW50TmF2aWdhdGlvbkNvbnRleHQoY29udGV4dCk7XG4gICAgdGhpcy5yZWdpc3RlckFkZGVkVmlld0F1eGlsaWFyeVJvdXRlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJBZGRlZFBvcHVwQXV4aWxpYXJ5Um91dGVzKCk7XG4gICAgdGhpcy5yZWdpc3RlckFkZGVkRGlhbG9nQXV4aWxpYXJ5Um91dGVzKCk7XG4gIH1cblxuICAvKiogSW52b2tlZCB1cG9uIHN1Y2Nlc3NmdWwgbmF2aWdhdGlvbiAqL1xuICBwcml2YXRlIG9uTmF2aWdhdGlvbkVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IHZvaWQge1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiAnb25OYXZpZ2F0aW9uRW5kJywgTG9nZ2VyTmFtZXMuUk9VVElORywgZXZlbnQpO1xuICAgIHRoaXMudW5yZWdpc3RlclJlbW92ZWRPdXRsZXRBdXhpbGlhcnlSb3V0ZXMoKTtcbiAgICB0aGlzLmFwcGx5V29ya2JlbmNoTGF5b3V0Q2hhbmdlcygpO1xuICAgIHRoaXMucHVibGlzaFdvcmtiZW5jaExheW91dCgpO1xuICAgIHRoaXMubWlncmF0ZVVSTCgpO1xuICAgIHRoaXMuX3dvcmtiZW5jaFJvdXRlci5zZXRDdXJyZW50TmF2aWdhdGlvbkNvbnRleHQobnVsbCk7XG4gIH1cblxuICAvKiogSW52b2tlZCB3aGVuIGNhbmNlbGxlZCB0aGUgbmF2aWdhdGlvbiwgZS5nLiwgaW4gYSBndWFyZCAqL1xuICBwcml2YXRlIG9uTmF2aWdhdGlvbkNhbmNlbChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IHZvaWQge1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiAnb25OYXZpZ2F0aW9uQ2FuY2VsJywgTG9nZ2VyTmFtZXMuUk9VVElORywgZXZlbnQpO1xuICAgIHRoaXMudW5kb0F1eGlsaWFyeVJvdXRlc1JlZ2lzdHJhdGlvbigpO1xuICAgIHRoaXMudW5kb1dvcmtiZW5jaExheW91dERpZmZlcigpO1xuICAgIHRoaXMudW5kb1dvcmtiZW5jaFBvcHVwRGlmZmVyKCk7XG4gICAgdGhpcy51bmRvV29ya2JlbmNoRGlhbG9nRGlmZmVyKCk7XG4gICAgdGhpcy5fd29ya2JlbmNoUm91dGVyLnNldEN1cnJlbnROYXZpZ2F0aW9uQ29udGV4dChudWxsKTtcbiAgfVxuXG4gIC8qKiBJbnZva2VkIHdoZW4gdGhlIG5hdmlnYXRpb24gZmFpbGVkICovXG4gIHByaXZhdGUgb25OYXZpZ2F0aW9uRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IHZvaWQge1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiAnb25OYXZpZ2F0aW9uRXJyb3InLCBMb2dnZXJOYW1lcy5ST1VUSU5HLCBldmVudCk7XG4gICAgdGhpcy51bmRvQXV4aWxpYXJ5Um91dGVzUmVnaXN0cmF0aW9uKCk7XG4gICAgdGhpcy51bmRvV29ya2JlbmNoTGF5b3V0RGlmZmVyKCk7XG4gICAgdGhpcy51bmRvV29ya2JlbmNoUG9wdXBEaWZmZXIoKTtcbiAgICB0aGlzLnVuZG9Xb3JrYmVuY2hEaWFsb2dEaWZmZXIoKTtcbiAgICB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuc2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KG51bGwpO1xuICB9XG5cbiAgLyoqIEludm9rZWQgYWZ0ZXIgY2hlY2tlZCBndWFyZHMgZm9yIGFjdGl2YXRpb24gKi9cbiAgcHJpdmF0ZSBvbkd1YXJkc0NoZWNrRW5kKGV2ZW50OiBHdWFyZHNDaGVja0VuZCk6IHZvaWQge1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgb25HdWFyZHNDaGVja0VuZCBbc2hvdWxkQWN0aXZhdGU9JHtldmVudC5zaG91bGRBY3RpdmF0ZX1dYCwgTG9nZ2VyTmFtZXMuUk9VVElORywgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbi4gVGhlIGNvbnRleHQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBuZXcgbGF5b3V0IGFuZCBob3cgaXQgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGxheW91dC5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlV29ya2JlbmNoTmF2aWdhdGlvbkNvbnRleHQodXJsOiBzdHJpbmcpOiBXb3JrYmVuY2hOYXZpZ2F0aW9uQ29udGV4dCB7XG4gICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuX3JvdXRlci5wYXJzZVVybCh1cmwpO1xuICAgIGNvbnN0IHdvcmtiZW5jaE5hdmlnYXRpb25hbFN0YXRlID0gV29ya2JlbmNoTmF2aWdhdGlvbmFsU3RhdGVzLmZyb21OYXZpZ2F0aW9uKHRoaXMuX3JvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpISk7XG5cbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLl93b3JrYmVuY2hMYXlvdXRGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICBtYWluQXJlYUdyaWQ6ICgoKSA9PiB7XG4gICAgICAgIC8vIFJlYWQgdGhlIG1haW4gYXJlYSBncmlkIGZyb20gdGhlIHF1ZXJ5IHBhcmFtZXRlci5cbiAgICAgICAgY29uc3QgbWFpbkFyZWFMYXlvdXQgPSB1cmxUcmVlLnF1ZXJ5UGFyYW1NYXAuZ2V0KE1BSU5fQVJFQV9MQVlPVVRfUVVFUllfUEFSQU0pID8/IHVybFRyZWUucXVlcnlQYXJhbU1hcC5nZXQoJ3BhcnRzJyk7IC8vIFRPRE8gW0FuZ3VsYXIgMThdIFJlbW92ZSBmYWxsYmFjayB0byAncGFydHMnIHF1ZXJ5IHBhcmFtZXRlclxuICAgICAgICBpZiAobWFpbkFyZWFMYXlvdXQpIHtcbiAgICAgICAgICByZXR1cm4gbWFpbkFyZWFMYXlvdXQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEbyBub3QgZmFsbCBiYWNrIHRvIHRoZSBjdXJyZW50IGxheW91dCBpZiB0aGUgbmF2aWdhdGlvbiB3YXMgcGVyZm9ybWVkIHZpYSB0aGUgV29ya2JlbmNoIFJvdXRlci5cbiAgICAgICAgY29uc3QgaXNXb3JrYmVuY2hSb3V0ZXJOYXZpZ2F0aW9uID0gd29ya2JlbmNoTmF2aWdhdGlvbmFsU3RhdGUgIT09IG51bGw7XG4gICAgICAgIGlmIChpc1dvcmtiZW5jaFJvdXRlck5hdmlnYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvIG5vdCBmYWxsIGJhY2sgdG8gdGhlIGN1cnJlbnQgbGF5b3V0IGlmIHRoZSBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgZnJvbSBvdXRzaWRlIHRoZSBBbmd1bGFyIFJvdXRlciwgaS5lLiwgdGhlIGJyb3dzZXIgYmFjay9mb3J3YXJkIGJ1dHRvbnMuXG4gICAgICAgIGNvbnN0IGlzRXh0ZXJuYWxOYXZpZ2F0aW9uID0gdGhpcy5fcm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkhLnRyaWdnZXIgPT09ICdwb3BzdGF0ZSc7XG4gICAgICAgIGlmIChpc0V4dGVybmFsTmF2aWdhdGlvbikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBjdXJyZW50IGxheW91dCBpZiB0aGUgbmF2aWdhdGlvbiB3YXMgcGVyZm9ybWVkIHZpYSB0aGUgQW5ndWxhciByb3V0ZXIsIGkuZS4sIHRoZSBuYXZpZ2F0b3IgZGlkIG5vdCBwcmVzZXJ2ZSB0aGUgcXVlcnkgcGFyYW1zLlxuICAgICAgICByZXR1cm4gdGhpcy5fd29ya2JlbmNoTGF5b3V0U2VydmljZS5sYXlvdXQ/Lm1haW5BcmVhR3JpZDtcbiAgICAgIH0pKCksXG4gICAgICB3b3JrYmVuY2hHcmlkOiB3b3JrYmVuY2hOYXZpZ2F0aW9uYWxTdGF0ZT8ud29ya2JlbmNoR3JpZCA/PyB0aGlzLl93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlLmxheW91dD8ud29ya2JlbmNoR3JpZCxcbiAgICAgIG1heGltaXplZDogd29ya2JlbmNoTmF2aWdhdGlvbmFsU3RhdGU/Lm1heGltaXplZCA/PyB0aGlzLl93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlLmxheW91dD8ubWF4aW1pemVkLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBsYXlvdXQsXG4gICAgICBsYXlvdXREaWZmOiB0aGlzLl93b3JrYmVuY2hMYXlvdXREaWZmZXIuZGlmZihsYXlvdXQsIHVybFRyZWUpLFxuICAgICAgcG9wdXBEaWZmOiB0aGlzLl93b3JrYmVuY2hQb3B1cERpZmZlci5kaWZmKHVybFRyZWUpLFxuICAgICAgZGlhbG9nRGlmZjogdGhpcy5fd29ya2JlbmNoRGlhbG9nRGlmZmVyLmRpZmYodXJsVHJlZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgZWFjaCBhZGRlZCB2aWV3LCByZWdpc3RlcnMgYXV4aWxpYXJ5IHJvdXRlcyBvZiBhbGwgcHJpbWFyeSByb3V0ZXMuXG4gICAqL1xuICBwcml2YXRlIHJlZ2lzdGVyQWRkZWRWaWV3QXV4aWxpYXJ5Um91dGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hdmlnYXRpb25Db250ZXh0ID0gdGhpcy5fd29ya2JlbmNoUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uQ29udGV4dCgpO1xuICAgIGNvbnN0IGFkZGVkVmlld091dGxldHMgPSBuYXZpZ2F0aW9uQ29udGV4dC5sYXlvdXREaWZmLmFkZGVkVmlld091dGxldHM7XG5cbiAgICBjb25zdCBuZXdBdXhpbGlhcnlSb3V0ZXMgPSB0aGlzLl9hdXhSb3V0ZXNSZWdpc3RyYXRvci5yZWdpc3Rlck91dGxldEF1eGlsaWFyeVJvdXRlcyhhZGRlZFZpZXdPdXRsZXRzLCB7XG4gICAgICBjYW5EZWFjdGl2YXRlOiBbY2FuRGVhY3RpdmF0ZVdvcmtiZW5jaFZpZXddLFxuICAgIH0pO1xuICAgIGlmIChuZXdBdXhpbGlhcnlSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gYFJlZ2lzdGVyZWQgYXV4aWxpYXJ5IHJvdXRlcyBmb3Igdmlld3M6ICR7YWRkZWRWaWV3T3V0bGV0c31gLCBMb2dnZXJOYW1lcy5ST1VUSU5HLCBuZXdBdXhpbGlhcnlSb3V0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgZWFjaCBhZGRlZCBwb3B1cCwgcmVnaXN0ZXJzIGF1eGlsaWFyeSByb3V0ZXMgb2YgYWxsIHByaW1hcnkgcm91dGVzLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQWRkZWRQb3B1cEF1eGlsaWFyeVJvdXRlcygpOiB2b2lkIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uQ29udGV4dCA9IHRoaXMuX3dvcmtiZW5jaFJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbkNvbnRleHQoKTtcbiAgICBjb25zdCBhZGRlZFBvcHVwT3V0bGV0cyA9IG5hdmlnYXRpb25Db250ZXh0LnBvcHVwRGlmZi5hZGRlZFBvcHVwT3V0bGV0cztcblxuICAgIGNvbnN0IG5ld0F1eGlsaWFyeVJvdXRlcyA9IHRoaXMuX2F1eFJvdXRlc1JlZ2lzdHJhdG9yLnJlZ2lzdGVyT3V0bGV0QXV4aWxpYXJ5Um91dGVzKGFkZGVkUG9wdXBPdXRsZXRzKTtcbiAgICBpZiAobmV3QXV4aWxpYXJ5Um91dGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBSZWdpc3RlcmVkIGF1eGlsaWFyeSByb3V0ZXMgZm9yIHBvcHVwczogJHthZGRlZFBvcHVwT3V0bGV0c31gLCBMb2dnZXJOYW1lcy5ST1VUSU5HLCBuZXdBdXhpbGlhcnlSb3V0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgZWFjaCBhZGRlZCBkaWFsb2csIHJlZ2lzdGVycyBhdXhpbGlhcnkgcm91dGVzIG9mIGFsbCBwcmltYXJ5IHJvdXRlcy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckFkZGVkRGlhbG9nQXV4aWxpYXJ5Um91dGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hdmlnYXRpb25Db250ZXh0ID0gdGhpcy5fd29ya2JlbmNoUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uQ29udGV4dCgpO1xuICAgIGNvbnN0IGFkZGVkRGlhbG9nT3V0bGV0cyA9IG5hdmlnYXRpb25Db250ZXh0LmRpYWxvZ0RpZmYuYWRkZWREaWFsb2dPdXRsZXRzO1xuXG4gICAgY29uc3QgbmV3QXV4aWxpYXJ5Um91dGVzID0gdGhpcy5fYXV4Um91dGVzUmVnaXN0cmF0b3IucmVnaXN0ZXJPdXRsZXRBdXhpbGlhcnlSb3V0ZXMoYWRkZWREaWFsb2dPdXRsZXRzKTtcbiAgICBpZiAobmV3QXV4aWxpYXJ5Um91dGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBSZWdpc3RlcmVkIGF1eGlsaWFyeSByb3V0ZXMgZm9yIGRpYWxvZ3M6ICR7YWRkZWREaWFsb2dPdXRsZXRzfWAsIExvZ2dlck5hbWVzLlJPVVRJTkcsIG5ld0F1eGlsaWFyeVJvdXRlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldmVydHMgdGhlIHdvcmtiZW5jaCBsYXlvdXQgZGlmZmVyIHRvIHRoZSBzdGF0ZSBiZWZvcmUgdGhlIG5hdmlnYXRpb24uXG4gICAqXG4gICAqIEludm9rZSB0aGlzIG1ldGhvZCBhZnRlciBuYXZpZ2F0aW9uIGZhaWx1cmUgb3IgY2FuY2VsbGF0aW9uLiBUaGUgbmF2aWdhdGlvbiBpcyBjYW5jZWxsZWQgd2hlbiBndWFyZHMgcGVyZm9ybSBhIHJlZGlyZWN0IG9yIHJlamVjdCBuYXZpZ2F0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSB1bmRvV29ya2JlbmNoTGF5b3V0RGlmZmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZOYXZpZ2F0ZUxheW91dCA9IHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UubGF5b3V0OyAvLyBMYXlvdXQgaW4gYFdvcmtiZW5jaExheW91dFNlcnZpY2VgIGlzIG9ubHkgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIG5hdmlnYXRpb25cbiAgICBjb25zdCBwcmV2TmF2aWdhdGVVcmwgPSB0aGlzLl9yb3V0ZXIucGFyc2VVcmwodGhpcy5fcm91dGVyLnVybCk7IC8vIEJyb3dzZXIgVVJMIGlzIG9ubHkgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIG5hdmlnYXRpb25cbiAgICB0aGlzLl93b3JrYmVuY2hMYXlvdXREaWZmZXIuZGlmZihwcmV2TmF2aWdhdGVMYXlvdXQsIHByZXZOYXZpZ2F0ZVVybCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJ0cyB0aGUgcG9wdXAgb3V0bGV0IGRpZmZlciB0byB0aGUgc3RhdGUgYmVmb3JlIHRoZSBuYXZpZ2F0aW9uLlxuICAgKlxuICAgKiBJbnZva2UgdGhpcyBtZXRob2QgYWZ0ZXIgbmF2aWdhdGlvbiBmYWlsdXJlIG9yIGNhbmNlbGxhdGlvbi4gVGhlIG5hdmlnYXRpb24gaXMgY2FuY2VsbGVkIHdoZW4gZ3VhcmRzIHBlcmZvcm0gYSByZWRpcmVjdCBvciByZWplY3QgbmF2aWdhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgdW5kb1dvcmtiZW5jaFBvcHVwRGlmZmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZOYXZpZ2F0ZVVybCA9IHRoaXMuX3JvdXRlci5wYXJzZVVybCh0aGlzLl9yb3V0ZXIudXJsKTsgLy8gQnJvd3NlciBVUkwgaXMgb25seSB1cGRhdGVkIGFmdGVyIHN1Y2Nlc3NmdWwgbmF2aWdhdGlvblxuICAgIHRoaXMuX3dvcmtiZW5jaFBvcHVwRGlmZmVyLmRpZmYocHJldk5hdmlnYXRlVXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZlcnRzIHRoZSBkaWFsb2cgb3V0bGV0IGRpZmZlciB0byB0aGUgc3RhdGUgYmVmb3JlIHRoZSBuYXZpZ2F0aW9uLlxuICAgKlxuICAgKiBJbnZva2UgdGhpcyBtZXRob2QgYWZ0ZXIgbmF2aWdhdGlvbiBmYWlsdXJlIG9yIGNhbmNlbGxhdGlvbi4gVGhlIG5hdmlnYXRpb24gaXMgY2FuY2VsbGVkIHdoZW4gZ3VhcmRzIHBlcmZvcm0gYSByZWRpcmVjdCBvciByZWplY3QgbmF2aWdhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgdW5kb1dvcmtiZW5jaERpYWxvZ0RpZmZlcigpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2TmF2aWdhdGVVcmwgPSB0aGlzLl9yb3V0ZXIucGFyc2VVcmwodGhpcy5fcm91dGVyLnVybCk7IC8vIEJyb3dzZXIgVVJMIGlzIG9ubHkgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIG5hdmlnYXRpb25cbiAgICB0aGlzLl93b3JrYmVuY2hEaWFsb2dEaWZmZXIuZGlmZihwcmV2TmF2aWdhdGVVcmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZG9lcyB0aGUgcmVnaXN0cmF0aW9uIG9mIGF1eGlsaWFyeSByb3V0ZXMuXG4gICAqXG4gICAqIEludm9rZSB0aGlzIG1ldGhvZCBhZnRlciBuYXZpZ2F0aW9uIGZhaWx1cmUgb3IgY2FuY2VsbGF0aW9uLiBUaGUgbmF2aWdhdGlvbiBpcyBjYW5jZWxsZWQgd2hlbiBndWFyZHMgcGVyZm9ybSBhIHJlZGlyZWN0IG9yIHJlamVjdCBuYXZpZ2F0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSB1bmRvQXV4aWxpYXJ5Um91dGVzUmVnaXN0cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGxheW91dERpZmYgPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCkubGF5b3V0RGlmZjtcbiAgICBjb25zdCBwb3B1cERpZmYgPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCkucG9wdXBEaWZmO1xuICAgIGNvbnN0IGRpYWxvZ0RpZmYgPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCkuZGlhbG9nRGlmZjtcbiAgICBjb25zdCBhZGRlZE91dGxldHM6IHN0cmluZ1tdID0gWy4uLmxheW91dERpZmYuYWRkZWRWaWV3T3V0bGV0cywgLi4ucG9wdXBEaWZmLmFkZGVkUG9wdXBPdXRsZXRzLCAuLi5kaWFsb2dEaWZmLmFkZGVkRGlhbG9nT3V0bGV0c107XG4gICAgaWYgKGFkZGVkT3V0bGV0cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2F1eFJvdXRlc1JlZ2lzdHJhdG9yLnVucmVnaXN0ZXJPdXRsZXRBdXhpbGlhcnlSb3V0ZXMoYWRkZWRPdXRsZXRzKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgVW5kbyBhdXhpbGlhcnkgcm91dGVzIHJlZ2lzdHJhdGlvbiBmb3Igb3V0bGV0KHMpOiAke2FkZGVkT3V0bGV0c31gLCBMb2dnZXJOYW1lcy5ST1VUSU5HKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyByZWdpc3RyaWVzIGFuZCB3b3JrYmVuY2ggaGFuZGxlcyB0byByZWZsZWN0IHRoZSBuZXcgbGF5b3V0LlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVdvcmtiZW5jaExheW91dENoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3Qge2xheW91dH0gPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCk7XG4gICAgaWYgKGxheW91dCAhPT0gdGhpcy5fd29ya2JlbmNoTGF5b3V0U2VydmljZS5sYXlvdXQpIHsgLy8gTGF5b3V0IGluc3RhbmNlIGRvZXMgbm90IGNoYW5nZSBpZiBuYXZpZ2F0aW5nIHRocm91Z2ggdGhlIEFuZ3VsYXIgcm91dGVyLlxuICAgICAgdGhpcy51cGRhdGVWaWV3UmVnaXN0cnkoKTtcbiAgICAgIHRoaXMudXBkYXRlUGFydFJlZ2lzdHJ5KCk7XG5cbiAgICAgIHRoaXMuX3ZpZXdSZWdpc3RyeS52aWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5vbkxheW91dENoYW5nZShsYXlvdXQpKTtcbiAgICAgIHRoaXMuX3BhcnRSZWdpc3RyeS5wYXJ0cy5mb3JFYWNoKHBhcnQgPT4gcGFydC5vbkxheW91dENoYW5nZShsYXlvdXQpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIHRoZSB3b3JrYmVuY2ggbGF5b3V0IHZpYSB7QGxpbmsgV29ya2JlbmNoTGF5b3V0U2VydmljZX0sIHNpbWlsYXIgdG8gYSB0cmFuc2FjdGlvbmFsIGNvbW1pdC5cbiAgICovXG4gIHByaXZhdGUgcHVibGlzaFdvcmtiZW5jaExheW91dCgpOiB2b2lkIHtcbiAgICBjb25zdCB7bGF5b3V0fSA9IHRoaXMuX3dvcmtiZW5jaFJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbkNvbnRleHQoKTtcbiAgICBpZiAobGF5b3V0ICE9PSB0aGlzLl93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlLmxheW91dCkgeyAvLyBMYXlvdXQgaW5zdGFuY2UgZG9lcyBub3QgY2hhbmdlIGlmIG5hdmlnYXRpbmcgdGhyb3VnaCB0aGUgQW5ndWxhciByb3V0ZXIuXG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gJ1B1Ymxpc2hpbmcgd29ya2JlbmNoIGxheW91dCcsIExvZ2dlck5hbWVzLlJPVVRJTkcsIGxheW91dCk7XG4gICAgICB0aGlzLl93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlLnNldExheW91dChsYXlvdXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBVUkwgaWYgdGhlIGxheW91dCBoYXMgYmVlbiBtaWdyYXRlZCBmcm9tIGFuIG91dGRhdGVkIHZlcnNpb24uXG4gICAqL1xuICBwcml2YXRlIG1pZ3JhdGVVUkwoKTogdm9pZCB7XG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5fd29ya2JlbmNoUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uQ29udGV4dCgpLmxheW91dDtcbiAgICBpZiAobGF5b3V0Lm1haW5BcmVhR3JpZD8ubWlncmF0ZWQpIHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgVVJMIHdpdGggdGhlIG1pZ3JhdGVkIFVSTCBhbmQgY2xlYXIgZXhpc3RpbmcgcXVlcnkgcGFyYW1zLCBmb3IgZXhhbXBsZSwgaWYgdGhlIGxheW91dCBxdWVyeSBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVuYW1lZC5cbiAgICAgIHRoaXMuX3dvcmtiZW5jaFJvdXRlci7JtW5hdmlnYXRlKGxheW91dCA9PiBsYXlvdXQsIHtxdWVyeVBhcmFtc0hhbmRsaW5nOiBudWxsLCByZXBsYWNlVXJsOiB0cnVlfSkudGhlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhdXhpbGlhcnkgcm91dGVzIG9mIHJlbW92ZWQgd29ya2JlbmNoIG91dGxldHMuXG4gICAqL1xuICBwcml2YXRlIHVucmVnaXN0ZXJSZW1vdmVkT3V0bGV0QXV4aWxpYXJ5Um91dGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxheW91dERpZmYgPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCkubGF5b3V0RGlmZjtcbiAgICBjb25zdCBwb3B1cERpZmYgPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCkucG9wdXBEaWZmO1xuICAgIGNvbnN0IGRpYWxvZ0RpZmYgPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCkuZGlhbG9nRGlmZjtcbiAgICBjb25zdCByZW1vdmVkT3V0bGV0czogc3RyaW5nW10gPSBbLi4ubGF5b3V0RGlmZi5yZW1vdmVkVmlld091dGxldHMsIC4uLnBvcHVwRGlmZi5yZW1vdmVkUG9wdXBPdXRsZXRzLCAuLi5kaWFsb2dEaWZmLnJlbW92ZWREaWFsb2dPdXRsZXRzXTtcbiAgICBpZiAocmVtb3ZlZE91dGxldHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gJ1VucmVnaXN0ZXJpbmcgb3V0bGV0IGF1eGlsaWFyeSByb3V0ZXM6ICcsIExvZ2dlck5hbWVzLlJPVVRJTkcsIHJlbW92ZWRPdXRsZXRzKTtcbiAgICAgIHRoaXMuX2F1eFJvdXRlc1JlZ2lzdHJhdG9yLnVucmVnaXN0ZXJPdXRsZXRBdXhpbGlhcnlSb3V0ZXMocmVtb3ZlZE91dGxldHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAtIEZvciBlYWNoIGFkZGVkIHZpZXcsIGNvbnN0cnVjdHMgYSB7QGxpbmsgV29ya2JlbmNoVmlld30gYW5kIHJlZ2lzdGVycyBpdCBpbiB7QGxpbmsgV29ya2JlbmNoVmlld1JlZ2lzdHJ5fVxuICAgKiAtIEZvciBlYWNoIHJlbW92ZWQgdmlldywgZGVzdHJveXMgdGhlIHtAbGluayBXb3JrYmVuY2hWaWV3fSBhbmQgdW5yZWdpc3RlcnMgaXQgaW4ge0BsaW5rIFdvcmtiZW5jaFZpZXdSZWdpc3RyeX1cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVmlld1JlZ2lzdHJ5KCk6IHZvaWQge1xuICAgIGNvbnN0IHtsYXlvdXREaWZmfSA9IHRoaXMuX3dvcmtiZW5jaFJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICAgIGxheW91dERpZmYuYWRkZWRWaWV3cy5mb3JFYWNoKHZpZXdJZCA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gYENvbnN0cnVjdGluZyDJtVdvcmtiZW5jaFZpZXcgW3ZpZXdJZD0ke3ZpZXdJZH1dYCwgTG9nZ2VyTmFtZXMuTElGRUNZQ0xFKTtcbiAgICAgIHRoaXMuX3ZpZXdSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLmNyZWF0ZVdvcmtiZW5jaFZpZXcodmlld0lkKSk7XG4gICAgfSk7XG4gICAgbGF5b3V0RGlmZi5yZW1vdmVkVmlld3MuZm9yRWFjaCh2aWV3SWQgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBEZXN0cm95aW5nIMm1V29ya2JlbmNoVmlldyBbdmlld0lkPSR7dmlld0lkfV1gLCBMb2dnZXJOYW1lcy5MSUZFQ1lDTEUpO1xuICAgICAgdGhpcy5fdmlld1JlZ2lzdHJ5LnVucmVnaXN0ZXIodmlld0lkKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAtIEZvciBlYWNoIGFkZGVkIHBhcnQsIGNvbnN0cnVjdHMgYSB7QGxpbmsgV29ya2JlbmNoUGFydH0gYW5kIHJlZ2lzdGVycyBpdCBpbiB7QGxpbmsgV29ya2JlbmNoUGFydFJlZ2lzdHJ5fVxuICAgKiAtIEZvciBlYWNoIHJlbW92ZWQgcGFydCwgZGVzdHJveXMgdGhlIHtAbGluayBXb3JrYmVuY2hQYXJ0fSBhbmQgdW5yZWdpc3RlcnMgaXQgaW4ge0BsaW5rIFdvcmtiZW5jaFBhcnRSZWdpc3RyeX1cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlUGFydFJlZ2lzdHJ5KCk6IHZvaWQge1xuICAgIGNvbnN0IHtsYXlvdXREaWZmfSA9IHRoaXMuX3dvcmtiZW5jaFJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICAgIGxheW91dERpZmYuYWRkZWRQYXJ0cy5mb3JFYWNoKHBhcnRJZCA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gYENvbnN0cnVjdGluZyDJtVdvcmtiZW5jaFBhcnQgW3BhcnRJZD0ke3BhcnRJZH1dYCwgTG9nZ2VyTmFtZXMuTElGRUNZQ0xFKTtcbiAgICAgIHRoaXMuX3BhcnRSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLmNyZWF0ZVdvcmtiZW5jaFBhcnQocGFydElkKSk7XG4gICAgfSk7XG4gICAgbGF5b3V0RGlmZi5yZW1vdmVkUGFydHMuZm9yRWFjaChwYXJ0SWQgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBEZXN0cm95aW5nIMm1V29ya2JlbmNoUGFydCBbcGFydElkPSR7cGFydElkfV1gLCBMb2dnZXJOYW1lcy5MSUZFQ1lDTEUpO1xuICAgICAgdGhpcy5fcGFydFJlZ2lzdHJ5LnVucmVnaXN0ZXIocGFydElkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV29ya2JlbmNoUGFydChwYXJ0SWQ6IHN0cmluZyk6IMm1V29ya2JlbmNoUGFydCB7XG4gICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLl9lbnZpcm9ubWVudEluamVjdG9yLCAoKSA9PiBuZXcgybVXb3JrYmVuY2hQYXJ0KHBhcnRJZCwge1xuICAgICAgY29tcG9uZW50OiBwYXJ0SWQgPT09IE1BSU5fQVJFQSA/IE1haW5BcmVhTGF5b3V0Q29tcG9uZW50IDogUGFydENvbXBvbmVudCxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtiZW5jaFZpZXcodmlld0lkOiBzdHJpbmcpOiDJtVdvcmtiZW5jaFZpZXcge1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5fZW52aXJvbm1lbnRJbmplY3RvciwgKCkgPT4gbmV3IMm1V29ya2JlbmNoVmlldyh2aWV3SWQsIHtjb21wb25lbnQ6IFZpZXdDb21wb25lbnR9KSk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbGxSb3V0ZXJFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudDogRXZlbnQgfCBSb3V0ZXJFdmVudCk6IGV2ZW50IGlzIFJvdXRlckV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgUm91dGVyRXZlbnQpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvblN0YXJ0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvbkVuZChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25DYW5jZWwoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSB7XG4gICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25FcnJvcihldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBHdWFyZHNDaGVja0VuZCkge1xuICAgICAgICAgIHRoaXMub25HdWFyZHNDaGVja0VuZChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
312
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.WorkbenchAuxiliaryRoutesRegistrator }, { type: i3.WorkbenchViewRegistry }, { type: i4.WorkbenchPartRegistry }, { type: i5.WorkbenchLayoutService }, { type: i0.EnvironmentInjector }, { type: i6.ɵWorkbenchRouter }, { type: i7.ɵWorkbenchLayoutFactory }, { type: i8.WorkbenchLayoutDiffer }, { type: i9.WorkbenchPopupDiffer }, { type: i10.WorkbenchDialogDiffer }, { type: i11.WorkbenchMessageBoxDiffer }, { type: i12.Logger }] });
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLXVybC1vYnNlcnZlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvcm91dGluZy93b3JrYmVuY2gtdXJsLW9ic2VydmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0VBUUU7QUFFRixPQUFPLEVBQVEsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFVLFdBQVcsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlJLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQXNCLFVBQVUsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyRixPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUlwRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUdyRCxPQUFPLEVBQVMsV0FBVyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9DLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHOUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUkxQyxPQUFPLEVB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eEgsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07YUFDaEIsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLEtBQTBCLEVBQXdCLEVBQUUsQ0FBQyxLQUFLLFlBQVksV0FBVyxDQUFDLEVBQzFGLGtCQUFrQixFQUFFLENBQ3JCO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBa0IsRUFBRSxFQUFFO1lBQ2hDLElBQUksS0FBSyxZQUFZLGVBQWUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQy9CO2lCQUNJLElBQUksS0FBSyxZQUFZLGFBQWEsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3QjtpQkFDSSxJQUFJLEtBQUssWUFBWSxnQkFBZ0IsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hDO2lCQUNJLElBQUksS0FBSyxZQUFZLGVBQWUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQy9CO2lCQUNJLElBQUksS0FBSyxZQUFZLGNBQWMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQW5TVSxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQURSLE1BQU07OzJGQUNsQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjQgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuKlxuKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4qIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4qIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuKlxuKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuKi9cblxuaW1wb3J0IHtFdmVudCwgR3VhcmRzQ2hlY2tFbmQsIE5hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIsIFJvdXRlckV2ZW50fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW52aXJvbm1lbnRJbmplY3RvciwgSW5qZWN0YWJsZSwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7V29ya2JlbmNoQXV4aWxpYXJ5Um91dGVzUmVnaXN0cmF0b3J9IGZyb20gJy4vd29ya2JlbmNoLWF1eGlsaWFyeS1yb3V0ZXMtcmVnaXN0cmF0b3Iuc2VydmljZSc7XG5pbXBvcnQge01BSU5fQVJFQV9MQVlPVVRfUVVFUllfUEFSQU19IGZyb20gJy4uL3dvcmtiZW5jaC5jb25zdGFudHMnO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3UmVnaXN0cnl9IGZyb20gJy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcucmVnaXN0cnknO1xuaW1wb3J0IHtXb3JrYmVuY2hQYXJ0UmVnaXN0cnl9IGZyb20gJy4uL3BhcnQvd29ya2JlbmNoLXBhcnQucmVnaXN0cnknO1xuaW1wb3J0IHtXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi9sYXlvdXQvd29ya2JlbmNoLWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7ybVXb3JrYmVuY2hQYXJ0fSBmcm9tICcuLi9wYXJ0L8m1d29ya2JlbmNoLXBhcnQubW9kZWwnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaFZpZXd9IGZyb20gJy4uL3ZpZXcvybV3b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge1ZpZXdDb21wb25lbnR9IGZyb20gJy4uL3ZpZXcvdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHtXb3JrYmVuY2hMYXlvdXREaWZmZXJ9IGZyb20gJy4vd29ya2JlbmNoLWxheW91dC1kaWZmZXInO1xuaW1wb3J0IHtXb3JrYmVuY2hQb3B1cERpZmZlcn0gZnJvbSAnLi93b3JrYmVuY2gtcG9wdXAtZGlmZmVyJztcbmltcG9ydCB7TG9nZ2VyLCBMb2dnZXJOYW1lc30gZnJvbSAnLi4vbG9nZ2luZyc7XG5pbXBvcnQge1dvcmtiZW5jaE5hdmlnYXRpb25hbFN0YXRlc30gZnJvbSAnLi93b3JrYmVuY2gtbmF2aWdhdGlvbmFsLXN0YXRlcyc7XG5pbXBvcnQge01haW5BcmVhTGF5b3V0Q29tcG9uZW50fSBmcm9tICcuLi9sYXlvdXQvbWFpbi1hcmVhLWxheW91dC9tYWluLWFyZWEtbGF5b3V0LmNvbXBvbmVudCc7XG5pbXBvcnQge1BhcnRDb21wb25lbnR9IGZyb20gJy4uL3BhcnQvcGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHtNQUlOX0FSRUF9IGZyb20gJy4uL2xheW91dC93b3JrYmVuY2gtbGF5b3V0JztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge8m1V29ya2JlbmNoTGF5b3V0RmFjdG9yeX0gZnJvbSAnLi4vbGF5b3V0L8m1d29ya2JlbmNoLWxheW91dC5mYWN0b3J5JztcbmltcG9ydCB7V29ya2JlbmNoRGlhbG9nRGlmZmVyfSBmcm9tICcuL3dvcmtiZW5jaC1kaWFsb2ctZGlmZmVyJztcbmltcG9ydCB7Um91dGVyVXRpbHN9IGZyb20gJy4vcm91dGVyLnV0aWwnO1xuaW1wb3J0IHtWaWV3SWR9IGZyb20gJy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaFJvdXRlcn0gZnJvbSAnLi/JtXdvcmtiZW5jaC1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQge1dvcmtiZW5jaE5hdmlnYXRpb25Db250ZXh0fSBmcm9tICcuL3JvdXRpbmcubW9kZWwnO1xuaW1wb3J0IHtjYW5NYXRjaE5vdEZvdW5kUGFnZX0gZnJvbSAnLi4vdmlldy93b3JrYmVuY2gtdmlldy1yb3V0ZS1ndWFyZHMnO1xuaW1wb3J0IHtXb3JrYmVuY2hNZXNzYWdlQm94RGlmZmVyfSBmcm9tICcuL3dvcmtiZW5jaC1tZXNzYWdlLWJveC1kaWZmZXInO1xuXG4vKipcbiAqIFRyYWNrcyB0aGUgYnJvd3NlciBVUkwgZm9yIHdvcmtiZW5jaCBsYXlvdXQgY2hhbmdlcy5cbiAqXG4gKiAtIEZvciBlYWNoIGFkZGVkIHZpZXcsIGNvbnN0cnVjdHMgYSB7QGxpbmsgV29ya2JlbmNoVmlld30gYW5kIHJlZ2lzdGVycyB2aWV3IHNwZWNpZmljIGF1eGlsaWFyeSByb3V0ZXMgb2YgYWxsIHRvcC1sZXZlbCByb3V0ZXNcbiAqIC0gRm9yIGVhY2ggcmVtb3ZlZCB2aWV3LCBkZXN0cm95cyB7QGxpbmsgV29ya2JlbmNoVmlld30gYW5kIHVucmVnaXN0ZXJzIGl0cyBhdXhpbGlhcnkgcm91dGVzXG4gKiAtIEZvciBlYWNoIGFkZGVkIHBhcnQsIGNvbnN0cnVjdHMgYSB7QGxpbmsgV29ya2JlbmNoUGFydH1cbiAqIC0gRm9yIGVhY2ggcmVtb3ZlZCBwYXJ0LCBkZXN0cm95cyB7QGxpbmsgV29ya2JlbmNoUGFydH1cbiAqIC0gUGFyc2VzIHRoZSBzZXJpYWxpemVkIGxheW91dCBhbmQgaW5qZWN0cyBpdCBpbnRvIHtAbGluayBXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlfS5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgV29ya2JlbmNoVXJsT2JzZXJ2ZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hdXhpbGlhcnlSb3V0ZXNSZWdpc3RyYXRvcjogV29ya2JlbmNoQXV4aWxpYXJ5Um91dGVzUmVnaXN0cmF0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdSZWdpc3RyeTogV29ya2JlbmNoVmlld1JlZ2lzdHJ5LFxuICAgICAgICAgICAgICBwcml2YXRlIF9wYXJ0UmVnaXN0cnk6IFdvcmtiZW5jaFBhcnRSZWdpc3RyeSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoTGF5b3V0U2VydmljZTogV29ya2JlbmNoTGF5b3V0U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoUm91dGVyOiDJtVdvcmtiZW5jaFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoTGF5b3V0RmFjdG9yeTogybVXb3JrYmVuY2hMYXlvdXRGYWN0b3J5LFxuICAgICAgICAgICAgICBwcml2YXRlIF93b3JrYmVuY2hMYXlvdXREaWZmZXI6IFdvcmtiZW5jaExheW91dERpZmZlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoUG9wdXBEaWZmZXI6IFdvcmtiZW5jaFBvcHVwRGlmZmVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF93b3JrYmVuY2hEaWFsb2dEaWZmZXI6IFdvcmtiZW5jaERpYWxvZ0RpZmZlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoTWVzc2FnZUJveERpZmZlcjogV29ya2JlbmNoTWVzc2FnZUJveERpZmZlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyOiBMb2dnZXIpIHtcbiAgICB0aGlzLmluc3RhbGxSb3V0ZXJFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqIEludm9rZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIG5hdmlnYXRpb24gKi9cbiAgcHJpdmF0ZSBvbk5hdmlnYXRpb25TdGFydChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3JlYXRlV29ya2JlbmNoTmF2aWdhdGlvbkNvbnRleHQoZXZlbnQudXJsKTtcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gJ29uTmF2aWdhdGlvblN0YXJ0JywgTG9nZ2VyTmFtZXMuUk9VVElORywgZXZlbnQsIGBOYXZpZ2F0aW9uQ29udGV4dCBbcGFydHM9JHtjb250ZXh0LmxheW91dC5wYXJ0cygpLm1hcChwYXJ0ID0+IHBhcnQuaWQpfSwgbGF5b3V0RGlmZj0ke2NvbnRleHQubGF5b3V0RGlmZi50b1N0cmluZygpfSwgcG9wdXBEaWZmPSR7Y29udGV4dC5wb3B1cERpZmYudG9TdHJpbmcoKX0sIGRpYWxvZ0RpZmY9JHtjb250ZXh0LmRpYWxvZ0RpZmYudG9TdHJpbmcoKX0sIG1lc3NhZ2VCb3hEaWZmPSR7Y29udGV4dC5tZXNzYWdlQm94RGlmZi50b1N0cmluZygpfV1gKTtcbiAgICB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuc2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KGNvbnRleHQpO1xuICAgIHRoaXMucmVnaXN0ZXJBZGRlZE91dGxldEF1eGlsaWFyeVJvdXRlcygpO1xuICB9XG5cbiAgLyoqIEludm9rZWQgdXBvbiBzdWNjZXNzZnVsIG5hdmlnYXRpb24gKi9cbiAgcHJpdmF0ZSBvbk5hdmlnYXRpb25FbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gJ29uTmF2aWdhdGlvbkVuZCcsIExvZ2dlck5hbWVzLlJPVVRJTkcsIGV2ZW50KTtcbiAgICB0aGlzLnVucmVnaXN0ZXJSZW1vdmVkT3V0bGV0QXV4aWxpYXJ5Um91dGVzKCk7XG4gICAgdGhpcy5hcHBseVdvcmtiZW5jaExheW91dENoYW5nZXMoKTtcbiAgICB0aGlzLnB1Ymxpc2hXb3JrYmVuY2hMYXlvdXQoKTtcbiAgICB0aGlzLm1pZ3JhdGVVUkwoKTtcbiAgICB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuc2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KG51bGwpO1xuICB9XG5cbiAgLyoqIEludm9rZWQgd2hlbiBjYW5jZWxsZWQgdGhlIG5hdmlnYXRpb24sIGUuZy4sIGluIGEgZ3VhcmQgKi9cbiAgcHJpdmF0ZSBvbk5hdmlnYXRpb25DYW5jZWwoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gJ29uTmF2aWdhdGlvbkNhbmNlbCcsIExvZ2dlck5hbWVzLlJPVVRJTkcsIGV2ZW50KTtcbiAgICB0aGlzLnVuZG9BdXhpbGlhcnlSb3V0ZXNSZWdpc3RyYXRpb24oKTtcbiAgICB0aGlzLnVuZG9Xb3JrYmVuY2hEaWZmZXJzKCk7XG4gICAgdGhpcy5fd29ya2JlbmNoUm91dGVyLnNldEN1cnJlbnROYXZpZ2F0aW9uQ29udGV4dChudWxsKTtcbiAgfVxuXG4gIC8qKiBJbnZva2VkIHdoZW4gdGhlIG5hdmlnYXRpb24gZmFpbGVkICovXG4gIHByaXZhdGUgb25OYXZpZ2F0aW9uRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IHZvaWQge1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiAnb25OYXZpZ2F0aW9uRXJyb3InLCBMb2dnZXJOYW1lcy5ST1VUSU5HLCBldmVudCk7XG4gICAgdGhpcy51bmRvQXV4aWxpYXJ5Um91dGVzUmVnaXN0cmF0aW9uKCk7XG4gICAgdGhpcy51bmRvV29ya2JlbmNoRGlmZmVycygpO1xuICAgIHRoaXMuX3dvcmtiZW5jaFJvdXRlci5zZXRDdXJyZW50TmF2aWdhdGlvbkNvbnRleHQobnVsbCk7XG4gIH1cblxuICAvKiogSW52b2tlZCBhZnRlciBjaGVja2VkIGd1YXJkcyBmb3IgYWN0aXZhdGlvbiAqL1xuICBwcml2YXRlIG9uR3VhcmRzQ2hlY2tFbmQoZXZlbnQ6IEd1YXJkc0NoZWNrRW5kKTogdm9pZCB7XG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBvbkd1YXJkc0NoZWNrRW5kIFtzaG91bGRBY3RpdmF0ZT0ke2V2ZW50LnNob3VsZEFjdGl2YXRlfV1gLCBMb2dnZXJOYW1lcy5ST1VUSU5HLCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uLiBUaGUgY29udGV4dCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5ldyBsYXlvdXQgYW5kIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgbGF5b3V0LlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVXb3JrYmVuY2hOYXZpZ2F0aW9uQ29udGV4dCh1cmw6IHN0cmluZyk6IFdvcmtiZW5jaE5hdmlnYXRpb25Db250ZXh0IHtcbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5fcm91dGVyLnBhcnNlVXJsKHVybCk7XG4gICAgY29uc3Qgd29ya2JlbmNoTmF2aWdhdGlvbmFsU3RhdGUgPSBXb3JrYmVuY2hOYXZpZ2F0aW9uYWxTdGF0ZXMuZnJvbU5hdmlnYXRpb24odGhpcy5fcm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkhKTtcblxuICAgIGNvbnN0IGxheW91dCA9IHRoaXMuX3dvcmtiZW5jaExheW91dEZhY3RvcnkuY3JlYXRlKHtcbiAgICAgIG1haW5BcmVhR3JpZDogKCgpID0+IHtcbiAgICAgICAgLy8gUmVhZCB0aGUgbWFpbiBhcmVhIGdyaWQgZnJvbSB0aGUgcXVlcnkgcGFyYW1ldGVyLlxuICAgICAgICBjb25zdCBtYWluQXJlYUdyaWQgPSB1cmxUcmVlLnF1ZXJ5UGFyYW1NYXAuZ2V0KE1BSU5fQVJFQV9MQVlPVVRfUVVFUllfUEFSQU0pID8/IHVybFRyZWUucXVlcnlQYXJhbU1hcC5nZXQoJ3BhcnRzJyk7IC8vIFRPRE8gW0FuZ3VsYXIgMThdIFJlbW92ZSBmYWxsYmFjayB0byAncGFydHMnIHF1ZXJ5IHBhcmFtZXRlclxuICAgICAgICBpZiAobWFpbkFyZWFHcmlkKSB7XG4gICAgICAgICAgcmV0dXJuIG1haW5BcmVhR3JpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvIG5vdCBmYWxsIGJhY2sgdG8gdGhlIGN1cnJlbnQgbGF5b3V0IGlmIHRoZSBuYXZpZ2F0aW9uIHdhcyBwZXJmb3JtZWQgdmlhIHRoZSBXb3JrYmVuY2ggUm91dGVyLlxuICAgICAgICBjb25zdCBpc1dvcmtiZW5jaFJvdXRlck5hdmlnYXRpb24gPSB3b3JrYmVuY2hOYXZpZ2F0aW9uYWxTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgaWYgKGlzV29ya2JlbmNoUm91dGVyTmF2aWdhdGlvbikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG8gbm90IGZhbGwgYmFjayB0byB0aGUgY3VycmVudCBsYXlvdXQgaWYgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBmcm9tIG91dHNpZGUgdGhlIEFuZ3VsYXIgUm91dGVyLCBpLmUuLCB0aGUgYnJvd3NlciBiYWNrL2ZvcndhcmQgYnV0dG9ucy5cbiAgICAgICAgY29uc3QgaXNFeHRlcm5hbE5hdmlnYXRpb24gPSB0aGlzLl9yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKSEudHJpZ2dlciA9PT0gJ3BvcHN0YXRlJztcbiAgICAgICAgaWYgKGlzRXh0ZXJuYWxOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGN1cnJlbnQgbGF5b3V0IGlmIHRoZSBuYXZpZ2F0aW9uIHdhcyBwZXJmb3JtZWQgdmlhIHRoZSBBbmd1bGFyIHJvdXRlciwgaS5lLiwgdGhlIG5hdmlnYXRvciBkaWQgbm90IHByZXNlcnZlIHRoZSBxdWVyeSBwYXJhbXMuXG4gICAgICAgIHJldHVybiB0aGlzLl93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlLmxheW91dD8ubWFpbkFyZWFHcmlkO1xuICAgICAgfSkoKSxcbiAgICAgIHdvcmtiZW5jaEdyaWQ6IHdvcmtiZW5jaE5hdmlnYXRpb25hbFN0YXRlPy53b3JrYmVuY2hHcmlkID8/IHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UubGF5b3V0Py53b3JrYmVuY2hHcmlkLFxuICAgICAgbWF4aW1pemVkOiB3b3JrYmVuY2hOYXZpZ2F0aW9uYWxTdGF0ZT8ubWF4aW1pemVkID8/IHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UubGF5b3V0Py5tYXhpbWl6ZWQsXG4gICAgICB2aWV3U3RhdGVzOiB3b3JrYmVuY2hOYXZpZ2F0aW9uYWxTdGF0ZT8udmlld1N0YXRlcyA/PyB0aGlzLl93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlLmxheW91dD8udmlld1N0YXRlcygpLFxuICAgICAgdmlld091dGxldHM6IE9iamVjdC5mcm9tRW50cmllcyhSb3V0ZXJVdGlscy5wYXJzZVZpZXdPdXRsZXRzKHVybFRyZWUpKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYXlvdXQsXG4gICAgICBsYXlvdXREaWZmOiB0aGlzLl93b3JrYmVuY2hMYXlvdXREaWZmZXIuZGlmZihsYXlvdXQsIHVybFRyZWUpLFxuICAgICAgcG9wdXBEaWZmOiB0aGlzLl93b3JrYmVuY2hQb3B1cERpZmZlci5kaWZmKHVybFRyZWUpLFxuICAgICAgZGlhbG9nRGlmZjogdGhpcy5fd29ya2JlbmNoRGlhbG9nRGlmZmVyLmRpZmYodXJsVHJlZSksXG4gICAgICBtZXNzYWdlQm94RGlmZjogdGhpcy5fd29ya2JlbmNoTWVzc2FnZUJveERpZmZlci5kaWZmKHVybFRyZWUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9yIGVhY2ggYWRkZWQgd29ya2JlbmNoIG91dGxldCwgcmVnaXN0ZXJzIGF1eGlsaWFyeSByb3V0ZXMgb2YgYWxsIHRvcC1sZXZlbCByb3V0ZXMuXG4gICAqL1xuICBwcml2YXRlIHJlZ2lzdGVyQWRkZWRPdXRsZXRBdXhpbGlhcnlSb3V0ZXMoKTogdm9pZCB7XG4gICAgY29uc3QgbmF2aWdhdGlvbkNvbnRleHQgPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCk7XG5cbiAgICAvLyBSZWdpc3RlciB2aWV3IGF1eGlsaWFyeSByb3V0ZXMuXG4gICAgY29uc3QgYWRkZWRWaWV3cyA9IG5hdmlnYXRpb25Db250ZXh0LmxheW91dERpZmYuYWRkZWRWaWV3cztcbiAgICBpZiAoYWRkZWRWaWV3cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGF1eGlsaWFyeVJvdXRlcyA9IHRoaXMuX2F1eGlsaWFyeVJvdXRlc1JlZ2lzdHJhdG9yLnJlZ2lzdGVyQXV4aWxpYXJ5Um91dGVzKGFkZGVkVmlld3MsIHtjYW5NYXRjaE5vdEZvdW5kUGFnZTogW2Nhbk1hdGNoTm90Rm91bmRQYWdlXX0pO1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBSZWdpc3RlcmVkIGF1eGlsaWFyeSByb3V0ZXMgZm9yIHZpZXdzOiAke2FkZGVkVmlld3N9YCwgTG9nZ2VyTmFtZXMuUk9VVElORywgYXV4aWxpYXJ5Um91dGVzKTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBwb3B1cCBhdXhpbGlhcnkgcm91dGVzLlxuICAgIGNvbnN0IGFkZGVkUG9wdXBPdXRsZXRzID0gbmF2aWdhdGlvbkNvbnRleHQucG9wdXBEaWZmLmFkZGVkUG9wdXBPdXRsZXRzO1xuICAgIGlmIChhZGRlZFBvcHVwT3V0bGV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGF1eGlsaWFyeVJvdXRlcyA9IHRoaXMuX2F1eGlsaWFyeVJvdXRlc1JlZ2lzdHJhdG9yLnJlZ2lzdGVyQXV4aWxpYXJ5Um91dGVzKGFkZGVkUG9wdXBPdXRsZXRzKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgUmVnaXN0ZXJlZCBhdXhpbGlhcnkgcm91dGVzIGZvciBwb3B1cHM6ICR7YWRkZWRQb3B1cE91dGxldHN9YCwgTG9nZ2VyTmFtZXMuUk9VVElORywgYXV4aWxpYXJ5Um91dGVzKTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBkaWFsb2cgYXV4aWxpYXJ5IHJvdXRlcy5cbiAgICBjb25zdCBhZGRlZERpYWxvZ091dGxldHMgPSBuYXZpZ2F0aW9uQ29udGV4dC5kaWFsb2dEaWZmLmFkZGVkRGlhbG9nT3V0bGV0cztcbiAgICBpZiAoYWRkZWREaWFsb2dPdXRsZXRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgYXV4aWxpYXJ5Um91dGVzID0gdGhpcy5fYXV4aWxpYXJ5Um91dGVzUmVnaXN0cmF0b3IucmVnaXN0ZXJBdXhpbGlhcnlSb3V0ZXMoYWRkZWREaWFsb2dPdXRsZXRzKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgUmVnaXN0ZXJlZCBhdXhpbGlhcnkgcm91dGVzIGZvciBkaWFsb2dzOiAke2FkZGVkRGlhbG9nT3V0bGV0c31gLCBMb2dnZXJOYW1lcy5ST1VUSU5HLCBhdXhpbGlhcnlSb3V0ZXMpO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIG1lc3NhZ2UgYm94IGF1eGlsaWFyeSByb3V0ZXMuXG4gICAgY29uc3QgYWRkZWRNZXNzYWdlQm94T3V0bGV0cyA9IG5hdmlnYXRpb25Db250ZXh0Lm1lc3NhZ2VCb3hEaWZmLmFkZGVkTWVzc2FnZUJveE91dGxldHM7XG4gICAgaWYgKGFkZGVkTWVzc2FnZUJveE91dGxldHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhdXhpbGlhcnlSb3V0ZXMgPSB0aGlzLl9hdXhpbGlhcnlSb3V0ZXNSZWdpc3RyYXRvci5yZWdpc3RlckF1eGlsaWFyeVJvdXRlcyhhZGRlZE1lc3NhZ2VCb3hPdXRsZXRzKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgUmVnaXN0ZXJlZCBhdXhpbGlhcnkgcm91dGVzIGZvciBtZXNzYWdlIGJveGVzOiAke2FkZGVkTWVzc2FnZUJveE91dGxldHN9YCwgTG9nZ2VyTmFtZXMuUk9VVElORywgYXV4aWxpYXJ5Um91dGVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJ0cyB0aGUgd29ya2JlbmNoIGRpZmZlcnMgdG8gdGhlIHN0YXRlIGJlZm9yZSB0aGUgbmF2aWdhdGlvbi5cbiAgICpcbiAgICogSW52b2tlIHRoaXMgbWV0aG9kIGFmdGVyIG5hdmlnYXRpb24gZmFpbHVyZSBvciBjYW5jZWxsYXRpb24uIFRoZSBuYXZpZ2F0aW9uIGlzIGNhbmNlbGxlZCB3aGVuIGd1YXJkcyBwZXJmb3JtIGEgcmVkaXJlY3Qgb3IgcmVqZWN0IG5hdmlnYXRpb24uXG4gICAqL1xuICBwcml2YXRlIHVuZG9Xb3JrYmVuY2hEaWZmZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZOYXZpZ2F0ZUxheW91dCA9IHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UubGF5b3V0OyAvLyBMYXlvdXQgaW4gYFdvcmtiZW5jaExheW91dFNlcnZpY2VgIGlzIG9ubHkgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIG5hdmlnYXRpb25cbiAgICBjb25zdCBwcmV2TmF2aWdhdGVVcmwgPSB0aGlzLl9yb3V0ZXIucGFyc2VVcmwodGhpcy5fcm91dGVyLnVybCk7IC8vIEJyb3dzZXIgVVJMIGlzIG9ubHkgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIG5hdmlnYXRpb25cbiAgICB0aGlzLl93b3JrYmVuY2hMYXlvdXREaWZmZXIuZGlmZihwcmV2TmF2aWdhdGVMYXlvdXQsIHByZXZOYXZpZ2F0ZVVybCk7XG4gICAgdGhpcy5fd29ya2JlbmNoUG9wdXBEaWZmZXIuZGlmZihwcmV2TmF2aWdhdGVVcmwpO1xuICAgIHRoaXMuX3dvcmtiZW5jaERpYWxvZ0RpZmZlci5kaWZmKHByZXZOYXZpZ2F0ZVVybCk7XG4gICAgdGhpcy5fd29ya2JlbmNoTWVzc2FnZUJveERpZmZlci5kaWZmKHByZXZOYXZpZ2F0ZVVybCk7XG4gIH1cblxuICAvKipcbiAgICogVW5kb2VzIHRoZSByZWdpc3RyYXRpb24gb2YgYXV4aWxpYXJ5IHJvdXRlcy5cbiAgICpcbiAgICogSW52b2tlIHRoaXMgbWV0aG9kIGFmdGVyIG5hdmlnYXRpb24gZmFpbHVyZSBvciBjYW5jZWxsYXRpb24uIFRoZSBuYXZpZ2F0aW9uIGlzIGNhbmNlbGxlZCB3aGVuIGd1YXJkcyBwZXJmb3JtIGEgcmVkaXJlY3Qgb3IgcmVqZWN0IG5hdmlnYXRpb24uXG4gICAqL1xuICBwcml2YXRlIHVuZG9BdXhpbGlhcnlSb3V0ZXNSZWdpc3RyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgbmF2aWdhdGlvbkNvbnRleHQgPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCk7XG4gICAgY29uc3QgYWRkZWRPdXRsZXRzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLm5hdmlnYXRpb25Db250ZXh0LmxheW91dERpZmYuYWRkZWRWaWV3cyxcbiAgICAgIC4uLm5hdmlnYXRpb25Db250ZXh0LnBvcHVwRGlmZi5hZGRlZFBvcHVwT3V0bGV0cyxcbiAgICAgIC4uLm5hdmlnYXRpb25Db250ZXh0LmRpYWxvZ0RpZmYuYWRkZWREaWFsb2dPdXRsZXRzLFxuICAgICAgLi4ubmF2aWdhdGlvbkNvbnRleHQubWVzc2FnZUJveERpZmYuYWRkZWRNZXNzYWdlQm94T3V0bGV0cyxcbiAgICBdO1xuICAgIGlmIChhZGRlZE91dGxldHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9hdXhpbGlhcnlSb3V0ZXNSZWdpc3RyYXRvci51bnJlZ2lzdGVyQXV4aWxpYXJ5Um91dGVzKGFkZGVkT3V0bGV0cyk7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gYFVuZG8gYXV4aWxpYXJ5IHJvdXRlcyByZWdpc3RyYXRpb24gZm9yIG91dGxldChzKTogJHthZGRlZE91dGxldHN9YCwgTG9nZ2VyTmFtZXMuUk9VVElORyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgcmVnaXN0cmllcyBhbmQgd29ya2JlbmNoIGhhbmRsZXMgdG8gcmVmbGVjdCB0aGUgbmV3IGxheW91dC5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlXb3JrYmVuY2hMYXlvdXRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IHtsYXlvdXR9ID0gdGhpcy5fd29ya2JlbmNoUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uQ29udGV4dCgpO1xuICAgIGlmIChsYXlvdXQgIT09IHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UubGF5b3V0KSB7IC8vIExheW91dCBpbnN0YW5jZSBkb2VzIG5vdCBjaGFuZ2UgaWYgbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBBbmd1bGFyIHJvdXRlci5cbiAgICAgIHRoaXMudXBkYXRlVmlld1JlZ2lzdHJ5KCk7XG4gICAgICB0aGlzLnVwZGF0ZVBhcnRSZWdpc3RyeSgpO1xuXG4gICAgICBsYXlvdXQudmlld3MoKS5mb3JFYWNoKHZpZXcgPT4gdGhpcy5fdmlld1JlZ2lzdHJ5LmdldCh2aWV3LmlkKS5vbkxheW91dENoYW5nZShsYXlvdXQpKTtcbiAgICAgIGxheW91dC5wYXJ0cygpLmZvckVhY2gocGFydCA9PiB0aGlzLl9wYXJ0UmVnaXN0cnkuZ2V0KHBhcnQuaWQpLm9uTGF5b3V0Q2hhbmdlKGxheW91dCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgdGhlIHdvcmtiZW5jaCBsYXlvdXQgdmlhIHtAbGluayBXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlfSwgc2ltaWxhciB0byBhIHRyYW5zYWN0aW9uYWwgY29tbWl0LlxuICAgKi9cbiAgcHJpdmF0ZSBwdWJsaXNoV29ya2JlbmNoTGF5b3V0KCk6IHZvaWQge1xuICAgIGNvbnN0IHtsYXlvdXR9ID0gdGhpcy5fd29ya2JlbmNoUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uQ29udGV4dCgpO1xuICAgIGlmIChsYXlvdXQgIT09IHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UubGF5b3V0KSB7XG4gICAgICAvLyBMYXlvdXQgaW5zdGFuY2Ugb25seSBjaGFuZ2VzIHdoZW4gbmF2aWdhdGluZyB2aWEgdGhlIHdvcmtiZW5jaCByb3V0ZXIsIGJ1dCBub3QgdmlhIHRoZSBBbmd1bGFyIHJvdXRlciwgZS5nLiwgd2hlbiBub3QgbmF2aWdhdGluZyB2aWV3cy5cbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiAnUHVibGlzaGluZyB3b3JrYmVuY2ggbGF5b3V0JywgTG9nZ2VyTmFtZXMuUk9VVElORywgbGF5b3V0KTtcbiAgICAgIHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2Uuc2V0TGF5b3V0KGxheW91dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIFVSTCBpZiB0aGUgbGF5b3V0IGhhcyBiZWVuIG1pZ3JhdGVkIGZyb20gYW4gb3V0ZGF0ZWQgdmVyc2lvbi5cbiAgICovXG4gIHByaXZhdGUgbWlncmF0ZVVSTCgpOiB2b2lkIHtcbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCkubGF5b3V0O1xuICAgIGlmIChsYXlvdXQubWFpbkFyZWFHcmlkPy5taWdyYXRlZCkge1xuICAgICAgLy8gVXBkYXRlIHRoZSBVUkwgd2l0aCB0aGUgbWlncmF0ZWQgVVJMIGFuZCBjbGVhciBleGlzdGluZyBxdWVyeSBwYXJhbXMsIGZvciBleGFtcGxlLCBpZiB0aGUgbGF5b3V0IHF1ZXJ5IHBhcmFtZXRlciBoYXMgYmVlbiByZW5hbWVkLlxuICAgICAgdGhpcy5fd29ya2JlbmNoUm91dGVyLm5hdmlnYXRlKGxheW91dCA9PiBsYXlvdXQsIHtxdWVyeVBhcmFtc0hhbmRsaW5nOiBudWxsLCByZXBsYWNlVXJsOiB0cnVlfSkudGhlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhdXhpbGlhcnkgcm91dGVzIG9mIHJlbW92ZWQgd29ya2JlbmNoIG91dGxldHMuXG4gICAqL1xuICBwcml2YXRlIHVucmVnaXN0ZXJSZW1vdmVkT3V0bGV0QXV4aWxpYXJ5Um91dGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hdmlnYXRpb25Db250ZXh0ID0gdGhpcy5fd29ya2JlbmNoUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uQ29udGV4dCgpO1xuICAgIGNvbnN0IHJlbW92ZWRPdXRsZXRzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLm5hdmlnYXRpb25Db250ZXh0LmxheW91dERpZmYucmVtb3ZlZFZpZXdzLFxuICAgICAgLi4ubmF2aWdhdGlvbkNvbnRleHQucG9wdXBEaWZmLnJlbW92ZWRQb3B1cE91dGxldHMsXG4gICAgICAuLi5uYXZpZ2F0aW9uQ29udGV4dC5kaWFsb2dEaWZmLnJlbW92ZWREaWFsb2dPdXRsZXRzLFxuICAgICAgLi4ubmF2aWdhdGlvbkNvbnRleHQubWVzc2FnZUJveERpZmYucmVtb3ZlZE1lc3NhZ2VCb3hPdXRsZXRzLFxuICAgIF07XG4gICAgaWYgKHJlbW92ZWRPdXRsZXRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+ICdVbnJlZ2lzdGVyaW5nIG91dGxldCBhdXhpbGlhcnkgcm91dGVzOiAnLCBMb2dnZXJOYW1lcy5ST1VUSU5HLCByZW1vdmVkT3V0bGV0cyk7XG4gICAgICB0aGlzLl9hdXhpbGlhcnlSb3V0ZXNSZWdpc3RyYXRvci51bnJlZ2lzdGVyQXV4aWxpYXJ5Um91dGVzKHJlbW92ZWRPdXRsZXRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogLSBGb3IgZWFjaCBhZGRlZCB2aWV3LCBjb25zdHJ1Y3RzIGEge0BsaW5rIFdvcmtiZW5jaFZpZXd9IGFuZCByZWdpc3RlcnMgaXQgaW4ge0BsaW5rIFdvcmtiZW5jaFZpZXdSZWdpc3RyeX1cbiAgICogLSBGb3IgZWFjaCByZW1vdmVkIHZpZXcsIGRlc3Ryb3lzIHRoZSB7QGxpbmsgV29ya2JlbmNoVmlld30gYW5kIHVucmVnaXN0ZXJzIGl0IGluIHtAbGluayBXb3JrYmVuY2hWaWV3UmVnaXN0cnl9XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZpZXdSZWdpc3RyeSgpOiB2b2lkIHtcbiAgICBjb25zdCB7bGF5b3V0RGlmZn0gPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCk7XG5cbiAgICBsYXlvdXREaWZmLmFkZGVkVmlld3MuZm9yRWFjaCh2aWV3SWQgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBDb25zdHJ1Y3RpbmcgybVXb3JrYmVuY2hWaWV3IFt2aWV3SWQ9JHt2aWV3SWR9XWAsIExvZ2dlck5hbWVzLkxJRkVDWUNMRSk7XG4gICAgICB0aGlzLl92aWV3UmVnaXN0cnkucmVnaXN0ZXIodGhpcy5jcmVhdGVXb3JrYmVuY2hWaWV3KHZpZXdJZCkpO1xuICAgIH0pO1xuICAgIGxheW91dERpZmYucmVtb3ZlZFZpZXdzLmZvckVhY2godmlld0lkID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgRGVzdHJveWluZyDJtVdvcmtiZW5jaFZpZXcgW3ZpZXdJZD0ke3ZpZXdJZH1dYCwgTG9nZ2VyTmFtZXMuTElGRUNZQ0xFKTtcbiAgICAgIHRoaXMuX3ZpZXdSZWdpc3RyeS51bnJlZ2lzdGVyKHZpZXdJZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogLSBGb3IgZWFjaCBhZGRlZCBwYXJ0LCBjb25zdHJ1Y3RzIGEge0BsaW5rIFdvcmtiZW5jaFBhcnR9IGFuZCByZWdpc3RlcnMgaXQgaW4ge0BsaW5rIFdvcmtiZW5jaFBhcnRSZWdpc3RyeX1cbiAgICogLSBGb3IgZWFjaCByZW1vdmVkIHBhcnQsIGRlc3Ryb3lzIHRoZSB7QGxpbmsgV29ya2JlbmNoUGFydH0gYW5kIHVucmVnaXN0ZXJzIGl0IGluIHtAbGluayBXb3JrYmVuY2hQYXJ0UmVnaXN0cnl9XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVBhcnRSZWdpc3RyeSgpOiB2b2lkIHtcbiAgICBjb25zdCB7bGF5b3V0RGlmZn0gPSB0aGlzLl93b3JrYmVuY2hSb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb25Db250ZXh0KCk7XG5cbiAgICBsYXlvdXREaWZmLmFkZGVkUGFydHMuZm9yRWFjaChwYXJ0SWQgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBDb25zdHJ1Y3RpbmcgybVXb3JrYmVuY2hQYXJ0IFtwYXJ0SWQ9JHtwYXJ0SWR9XWAsIExvZ2dlck5hbWVzLkxJRkVDWUNMRSk7XG4gICAgICB0aGlzLl9wYXJ0UmVnaXN0cnkucmVnaXN0ZXIodGhpcy5jcmVhdGVXb3JrYmVuY2hQYXJ0KHBhcnRJZCkpO1xuICAgIH0pO1xuICAgIGxheW91dERpZmYucmVtb3ZlZFBhcnRzLmZvckVhY2gocGFydElkID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgRGVzdHJveWluZyDJtVdvcmtiZW5jaFBhcnQgW3BhcnRJZD0ke3BhcnRJZH1dYCwgTG9nZ2VyTmFtZXMuTElGRUNZQ0xFKTtcbiAgICAgIHRoaXMuX3BhcnRSZWdpc3RyeS51bnJlZ2lzdGVyKHBhcnRJZCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtiZW5jaFBhcnQocGFydElkOiBzdHJpbmcpOiDJtVdvcmtiZW5jaFBhcnQge1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5fZW52aXJvbm1lbnRJbmplY3RvciwgKCkgPT4gbmV3IMm1V29ya2JlbmNoUGFydChwYXJ0SWQsIHtcbiAgICAgIGNvbXBvbmVudDogcGFydElkID09PSBNQUlOX0FSRUEgPyBNYWluQXJlYUxheW91dENvbXBvbmVudCA6IFBhcnRDb21wb25lbnQsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVXb3JrYmVuY2hWaWV3KHZpZXdJZDogVmlld0lkKTogybVXb3JrYmVuY2hWaWV3IHtcbiAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3IsICgpID0+IG5ldyDJtVdvcmtiZW5jaFZpZXcodmlld0lkLCB7Y29tcG9uZW50OiBWaWV3Q29tcG9uZW50fSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsUm91dGVyRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQ6IEV2ZW50IHwgUm91dGVyRXZlbnQpOiBldmVudCBpcyBSb3V0ZXJFdmVudCA9PiBldmVudCBpbnN0YW5jZW9mIFJvdXRlckV2ZW50KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogUm91dGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25TdGFydChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25FbmQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uQ2FuY2VsKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uRXJyb3IoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgR3VhcmRzQ2hlY2tFbmQpIHtcbiAgICAgICAgICB0aGlzLm9uR3VhcmRzQ2hlY2tFbmQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -61,10 +61,10 @@ class ɵLocation extends Location {
|
|
|
61
61
|
// the router only if the platform is still running.
|
|
62
62
|
return (this._router ??= !this._appRef.destroyed ? this._appRef.injector.get(Router) : undefined);
|
|
63
63
|
}
|
|
64
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
65
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.
|
|
64
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
65
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵLocation }); }
|
|
66
66
|
}
|
|
67
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵLocation, decorators: [{
|
|
68
68
|
type: Injectable
|
|
69
69
|
}], ctorParameters: () => [] });
|
|
70
70
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiybVsb2NhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL3JvdXRpbmcvybVsb2NhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsY0FBYyxFQUF3QixNQUFNLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFFNUU7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sd0JBQXdCLENBQUM7UUFDOUI7WUFDRSxPQUFPLEVBQUUsUUFBUTtZQUNqQixRQUFRLEVBQUUsU0FBUztTQUNwQjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQ00sU0FBVSxTQUFRLFFBQVE7SUFLOUI7UUFDRSxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUoxQixZQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBS3pDLENBQUM7SUFFZSxvQkFBb0IsQ0FBQyxJQUFZLEVBQUUsS0FBYztRQUMvRCxPQUFPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RixDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUI7UUFDM0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLElBQUksSUFBSSxDQUFDO1FBQ3RFLE9BQU8saUJBQWlCLEtBQUssSUFBSSxJQUFJLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLElBQUksQ0FBQztJQUM5RyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFZLE1BQU07UUFDaEIseUdBQXlHO1FBQ3pHLG9HQUFvRztRQUNwRyxvR0FBb0c7UUFDcEcscUdBQXFHO1FBQ3JHLG9EQUFvRDtRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7OEdBL0JHLFNBQVM7a0hBQVQsU0FBUzs7MkZBQVQsU0FBUztrQkFEZCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIzIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0xvY2F0aW9uLCBMb2NhdGlvblN0cmF0ZWd5fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtBcHBsaWNhdGlvblJlZiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIGluamVjdCwgSW5qZWN0YWJsZSwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtXb3JrYmVuY2hOYXZpZ2F0aW9uYWxTdGF0ZXN9IGZyb20gJy4vd29ya2JlbmNoLW5hdmlnYXRpb25hbC1zdGF0ZXMnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGEgc2V0IG9mIERJIHByb3ZpZGVycyB0byBwYXRjaCB7QGxpbmsgTG9jYXRpb259IGZvciB0aGUgQW5ndWxhciByb3V0ZXIgdG8gYWx3YXlzIGFkZCB3b3JrYmVuY2ggbmF2aWdhdGlvbnNcbiAqIHRvIHRoZSBicm93c2luZyBoaXN0b3J5IHN0YWNrLlxuICpcbiAqIEBzZWUgybVMb2NhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUxvY2F0aW9uUGF0Y2goKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBMb2NhdGlvbixcbiAgICAgIHVzZUNsYXNzOiDJtUxvY2F0aW9uLFxuICAgIH0sXG4gIF0pO1xufVxuXG4vKipcbiAqIFBhdGNoZXMge0BsaW5rIExvY2F0aW9ufSBmb3IgdGhlIEFuZ3VsYXIgcm91dGVyIHRvIGFsd2F5cyBhZGQgd29ya2JlbmNoIG5hdmlnYXRpb25zIHRvIHRoZSBicm93c2luZyBoaXN0b3J5IHN0YWNrLFxuICogZXZlbiBpZiB0aGUgVVJMIGRvZXMgbm90IGNoYW5nZS5cbiAqXG4gKiBSYXRpb25hbGU6XG4gKiBJZiBvbmx5IHRoZSBsYXlvdXQgb2YgdGhlIHdvcmtiZW5jaCBncmlkIGlzIGNoYW5nZWQsIHRoZSBVUkwgZG9lcyBub3QgY2hhbmdlIGJlY2F1c2UgdGhlIGxheW91dCBpcyBwYXNzZWQgdG8gdGhlXG4gKiBuYXZpZ2F0aW9uIGFzIHN0YXRlIGFuZCBub3QgYXMgYSBxdWVyeSBwYXJhbWV0ZXIuIEJ5IGRlZmF1bHQsIGFuIHVuY2hhbmdlZCBVUkwgZG9lcyBub3QgY3JlYXRlIGEgbmV3IGVudHJ5IGluIHRoZVxuICogYnJvd3NpbmcgaGlzdG9yeSBzdGFjaywgYnV0IHJlcGxhY2VzIHRoZSBjdXJyZW50IGVudHJ5LiBTZWUgQW5ndWxhciByb3V0ZXIudHMjc2V0QnJvd3NlclVybFxuICovXG5ASW5qZWN0YWJsZSgvKiBETyBOT1QgUFJPVklERSB2aWEgJ3Byb3ZpZGVkSW4nIG1ldGFkYXRhIGFzIHJlZ2lzdGVyZWQgdW5kZXIgYExvY2F0aW9uYCBESSB0b2tlbi4gKi8pXG5jbGFzcyDJtUxvY2F0aW9uIGV4dGVuZHMgTG9jYXRpb24ge1xuXG4gIHByaXZhdGUgX2FwcFJlZiA9IGluamVjdChBcHBsaWNhdGlvblJlZik7XG4gIHByaXZhdGUgX3JvdXRlcjogUm91dGVyIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKGluamVjdChMb2NhdGlvblN0cmF0ZWd5KSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgaXNDdXJyZW50UGF0aEVxdWFsVG8ocGF0aDogc3RyaW5nLCBxdWVyeT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5pc0N1cnJlbnRQYXRoRXF1YWxUbyhwYXRoLCBxdWVyeSkgPyAhdGhpcy5pc1dvcmtiZW5jaE5hdmlnYXRpb24oKSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaXMgYSB3b3JrYmVuY2ggbmF2aWdhdGlvbiBwZXJmb3JtZWQgdGhyb3VnaCB0aGUgd29ya2JlbmNoIHJvdXRlci5cbiAgICovXG4gIHByaXZhdGUgaXNXb3JrYmVuY2hOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnROYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXI/LmdldEN1cnJlbnROYXZpZ2F0aW9uKCkgPz8gbnVsbDtcbiAgICByZXR1cm4gY3VycmVudE5hdmlnYXRpb24gIT09IG51bGwgJiYgV29ya2JlbmNoTmF2aWdhdGlvbmFsU3RhdGVzLmZyb21OYXZpZ2F0aW9uKGN1cnJlbnROYXZpZ2F0aW9uKSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIEFuZ3VsYXIgcm91dGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgcm91dGVyKCk6IFJvdXRlciB8IHVuZGVmaW5lZCB7XG4gICAgLy8gTm90ZSB0aGF0IHdlIGNhbm5vdCBpbmplY3QgdGhlIGBSb3V0ZXJgIGluIHRoZSBjb25zdHJ1Y3RvciBiZWNhdXNlIHRoZSBgUm91dGVyYCBkZXBlbmRzIG9uIGBMb2NhdGlvbmAsXG4gICAgLy8gd2hpY2ggd291bGQgY2F1c2UgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGF0IGNvbnN0cnVjdGlvbiB0aW1lLiBJbnN0ZWFkLCB3ZSBpbmplY3QgdGhlIHJvdXRlciBsYXp5LlxuICAgIC8vIEhvd2V2ZXIsIGluamVjdGluZyB0aGUgcm91dGVyIHdpbGwgZmFpbCBpZiB0aGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQsIHdoaWNoIGhhcHBlbnNcbiAgICAvLyBpbiB0ZXN0cyB0aGF0IHRlYXIgZG93biBiZWZvcmUgdGhlIGluaXRpYWwgbmF2aWdhdGlvbiBoYXMgZmluaXNoZWQuIFRvIGF2b2lkIHRoaXMgZXJyb3IsIHdlIGluamVjdFxuICAgIC8vIHRoZSByb3V0ZXIgb25seSBpZiB0aGUgcGxhdGZvcm0gaXMgc3RpbGwgcnVubmluZy5cbiAgICByZXR1cm4gKHRoaXMuX3JvdXRlciA/Pz0gIXRoaXMuX2FwcFJlZi5kZXN0cm95ZWQgPyB0aGlzLl9hcHBSZWYuaW5qZWN0b3IuZ2V0KFJvdXRlcikgOiB1bmRlZmluZWQpO1xuICB9XG59XG4iXX0=
|