@alfresco/adf-core 8.1.0-15488125964 → 8.1.0-15531833262
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/adf-core.mjs +5 -0
- package/esm2022/api/alfresco-adf-core-api.mjs +5 -0
- package/esm2022/api/index.mjs +20 -0
- package/esm2022/api/lib/adf-http-client.service.mjs +311 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.param-encoder.mjs +33 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.response-error.mjs +25 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.utils.mjs +80 -0
- package/esm2022/api/lib/interfaces.mjs +18 -0
- package/esm2022/api/lib/types.mjs +18 -0
- package/esm2022/auth/alfresco-adf-core-auth.mjs +5 -0
- package/esm2022/auth/authentication-interceptor/authentication.interceptor.mjs +56 -0
- package/esm2022/auth/authentication.mjs +19 -0
- package/esm2022/auth/index.mjs +19 -0
- package/esm2022/breadcrumbs/alfresco-adf-core-breadcrumbs.mjs +5 -0
- package/esm2022/breadcrumbs/components/breadcrumb/breadcrumb.component.mjs +83 -0
- package/esm2022/breadcrumbs/components/breadcrumb-item/breadcrumb-item.component.mjs +42 -0
- package/esm2022/breadcrumbs/directives/breadcrumb-focus.directive.mjs +44 -0
- package/esm2022/breadcrumbs/index.mjs +19 -0
- package/esm2022/feature-flags/alfresco-adf-core-feature-flags.mjs +5 -0
- package/esm2022/feature-flags/index.mjs +29 -0
- package/esm2022/feature-flags/lib/components/feature-flags-wrapper.mjs +36 -0
- package/esm2022/feature-flags/lib/components/feature-override-indicator.component.mjs +56 -0
- package/esm2022/feature-flags/lib/components/flags/flags.component.mjs +130 -0
- package/esm2022/feature-flags/lib/directives/features.directive.mjs +63 -0
- package/esm2022/feature-flags/lib/directives/not-features.directive.mjs +63 -0
- package/esm2022/feature-flags/lib/guards/is-feature-off.guard.mjs +38 -0
- package/esm2022/feature-flags/lib/guards/is-feature-on.guard.mjs +38 -0
- package/esm2022/feature-flags/lib/guards/is-flags-override-on.guard.mjs +40 -0
- package/esm2022/feature-flags/lib/interfaces/features.interface.mjs +24 -0
- package/esm2022/feature-flags/lib/mocks/features-service-mock.factory.mjs +62 -0
- package/esm2022/feature-flags/lib/providers/debug-feature-flags.provider.mjs +51 -0
- package/esm2022/feature-flags/lib/providers/dummy-feature-flags.provider.mjs +36 -0
- package/esm2022/feature-flags/lib/services/debug-features.service.mjs +94 -0
- package/esm2022/feature-flags/lib/services/dummy-features.service.mjs +40 -0
- package/esm2022/feature-flags/lib/services/flagset.parser.mjs +38 -0
- package/esm2022/feature-flags/lib/services/qa-features.helper.mjs +62 -0
- package/esm2022/feature-flags/lib/services/storage-features.service.mjs +126 -0
- package/esm2022/lib/about/about-extension-list/about-extension-list.component.mjs +52 -0
- package/esm2022/lib/about/about-license-list/about-license-list.component.mjs +52 -0
- package/esm2022/lib/about/about-module-list/module-list.component.mjs +52 -0
- package/esm2022/lib/about/about-package/package-list.component.mjs +66 -0
- package/esm2022/lib/about/about-panel.directive.mjs +37 -0
- package/esm2022/lib/about/about-repository-info/about-repository-info.component.mjs +60 -0
- package/esm2022/lib/about/about-repository-info/repository-info.interface.mjs +18 -0
- package/esm2022/lib/about/about-server-settings/about-server-settings.component.mjs +43 -0
- package/esm2022/lib/about/about-status-list/about-status-list.component.mjs +52 -0
- package/esm2022/lib/about/about.component.mjs +35 -0
- package/esm2022/lib/about/about.module.mjs +75 -0
- package/esm2022/lib/about/index.mjs +18 -0
- package/esm2022/lib/about/interfaces.mjs +18 -0
- package/esm2022/lib/about/public-api.mjs +28 -0
- package/esm2022/lib/app-config/app-config-storage-prefix.factory.mjs +51 -0
- package/esm2022/lib/app-config/app-config.loader.mjs +41 -0
- package/esm2022/lib/app-config/app-config.module.mjs +33 -0
- package/esm2022/lib/app-config/app-config.pipe.mjs +38 -0
- package/esm2022/lib/app-config/app-config.service.mjs +243 -0
- package/esm2022/lib/app-config/debug-app-config.service.mjs +44 -0
- package/esm2022/lib/app-config/index.mjs +18 -0
- package/esm2022/lib/app-config/public-api.mjs +22 -0
- package/esm2022/lib/auth/authentication-interceptor/auth-bearer.interceptor.mjs +67 -0
- package/esm2022/lib/auth/basic-auth/basic-alfresco-auth.service.mjs +356 -0
- package/esm2022/lib/auth/basic-auth/content-auth.mjs +189 -0
- package/esm2022/lib/auth/basic-auth/process-auth.mjs +193 -0
- package/esm2022/lib/auth/guard/auth-guard-bpm.service.mjs +31 -0
- package/esm2022/lib/auth/guard/auth-guard-ecm.service.mjs +31 -0
- package/esm2022/lib/auth/guard/auth-guard-sso-role.service.mjs +57 -0
- package/esm2022/lib/auth/guard/auth-guard.mjs +53 -0
- package/esm2022/lib/auth/guard/auth-guard.service.mjs +113 -0
- package/esm2022/lib/auth/index.mjs +18 -0
- package/esm2022/lib/auth/interfaces/authentication-service.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/authentication.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/identity-group.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/identity-user.service.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/openid-configuration.interface.mjs +18 -0
- package/esm2022/lib/auth/models/application-access.model.mjs +18 -0
- package/esm2022/lib/auth/models/identity-group.model.mjs +18 -0
- package/esm2022/lib/auth/models/identity-role.model.mjs +30 -0
- package/esm2022/lib/auth/models/identity-user.model.mjs +18 -0
- package/esm2022/lib/auth/models/oauth-config.model.mjs +18 -0
- package/esm2022/lib/auth/models/redirection.model.mjs +28 -0
- package/esm2022/lib/auth/models/user-access.model.mjs +18 -0
- package/esm2022/lib/auth/oidc/auth-config.mjs +19 -0
- package/esm2022/lib/auth/oidc/auth-config.service.mjs +110 -0
- package/esm2022/lib/auth/oidc/auth-routing.module.mjs +34 -0
- package/esm2022/lib/auth/oidc/auth.module.mjs +112 -0
- package/esm2022/lib/auth/oidc/auth.service.mjs +22 -0
- package/esm2022/lib/auth/oidc/oidc-auth.guard.mjs +37 -0
- package/esm2022/lib/auth/oidc/oidc-authentication.service.mjs +202 -0
- package/esm2022/lib/auth/oidc/public-api.mjs +24 -0
- package/esm2022/lib/auth/oidc/redirect-auth.service.mjs +267 -0
- package/esm2022/lib/auth/oidc/retry-login.service.mjs +66 -0
- package/esm2022/lib/auth/oidc/token.interceptor.mjs +62 -0
- package/esm2022/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.mjs +31 -0
- package/esm2022/lib/auth/public-api.mjs +44 -0
- package/esm2022/lib/auth/services/authentication.service.mjs +190 -0
- package/esm2022/lib/auth/services/base-authentication.service.mjs +99 -0
- package/esm2022/lib/auth/services/identity-group.service.mjs +269 -0
- package/esm2022/lib/auth/services/identity-role.service.mjs +99 -0
- package/esm2022/lib/auth/services/identity-user.service.mjs +443 -0
- package/esm2022/lib/auth/services/jwt-helper.service.mjs +205 -0
- package/esm2022/lib/auth/services/oauth2.service.mjs +69 -0
- package/esm2022/lib/auth/services/time-sync.service.mjs +83 -0
- package/esm2022/lib/auth/services/user-access.service.mjs +110 -0
- package/esm2022/lib/avatar/avatar.component.mjs +51 -0
- package/esm2022/lib/blank-page/blank-page.component.mjs +31 -0
- package/esm2022/lib/blank-page/blank-page.module.mjs +33 -0
- package/esm2022/lib/blank-page/index.mjs +18 -0
- package/esm2022/lib/blank-page/public-api.mjs +19 -0
- package/esm2022/lib/button/button.component.mjs +61 -0
- package/esm2022/lib/card-view/card-view.module.mjs +80 -0
- package/esm2022/lib/card-view/components/base-card-view.mjs +51 -0
- package/esm2022/lib/card-view/components/card-view/card-view.component.mjs +66 -0
- package/esm2022/lib/card-view/components/card-view-arrayitem/card-view-arrayitem.component.mjs +56 -0
- package/esm2022/lib/card-view/components/card-view-boolitem/card-view-boolitem.component.mjs +40 -0
- package/esm2022/lib/card-view/components/card-view-dateitem/card-view-dateitem.component.mjs +177 -0
- package/esm2022/lib/card-view/components/card-view-item-dispatcher/card-view-item-dispatcher.component.mjs +108 -0
- package/esm2022/lib/card-view/components/card-view-keyvaluepairsitem/card-view-keyvaluepairsitem.component.mjs +65 -0
- package/esm2022/lib/card-view/components/card-view-mapitem/card-view-mapitem.component.mjs +47 -0
- package/esm2022/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.mjs +138 -0
- package/esm2022/lib/card-view/components/card-view-selectitem/select-filter-input/select-filter-input.component.mjs +114 -0
- package/esm2022/lib/card-view/components/card-view-textitem/card-view-textitem.component.mjs +240 -0
- package/esm2022/lib/card-view/components/card-view.components.mjs +28 -0
- package/esm2022/lib/card-view/index.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/base-card-view-update.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-arrayitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-boolitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-dateitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item-validator.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-keyvaluepairsitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-selectitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-textitem-pipe-property.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-textitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view.interfaces.mjs +29 -0
- package/esm2022/lib/card-view/interfaces/click-notification.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/update-notification.interface.mjs +18 -0
- package/esm2022/lib/card-view/models/card-view-arrayitem.model.mjs +28 -0
- package/esm2022/lib/card-view/models/card-view-baseitem.model.mjs +64 -0
- package/esm2022/lib/card-view/models/card-view-boolitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-dateitem.model.mjs +58 -0
- package/esm2022/lib/card-view/models/card-view-datetimeitem.model.mjs +28 -0
- package/esm2022/lib/card-view/models/card-view-floatitem.model.mjs +33 -0
- package/esm2022/lib/card-view/models/card-view-intitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-keyvaluepairs.model.mjs +27 -0
- package/esm2022/lib/card-view/models/card-view-longitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-mapitem.model.mjs +32 -0
- package/esm2022/lib/card-view/models/card-view-selectitem.model.mjs +41 -0
- package/esm2022/lib/card-view/models/card-view-textitem.model.mjs +40 -0
- package/esm2022/lib/card-view/models/card-view.models.mjs +29 -0
- package/esm2022/lib/card-view/public-api.mjs +25 -0
- package/esm2022/lib/card-view/services/card-item-types.service.mjs +54 -0
- package/esm2022/lib/card-view/services/card-view-update.service.mjs +59 -0
- package/esm2022/lib/card-view/services/card-view.services.mjs +19 -0
- package/esm2022/lib/card-view/validators/card-view-item-float.validator.mjs +31 -0
- package/esm2022/lib/card-view/validators/card-view-item-int.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-length.validator.mjs +34 -0
- package/esm2022/lib/card-view/validators/card-view-item-long.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-match.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-minmax.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-int.validator.mjs +32 -0
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-long.validator.mjs +31 -0
- package/esm2022/lib/card-view/validators/card-view.validators.mjs +26 -0
- package/esm2022/lib/card-view/validators/validators.map.mjs +26 -0
- package/esm2022/lib/clipboard/clipboard.directive.mjs +99 -0
- package/esm2022/lib/clipboard/clipboard.module.mjs +34 -0
- package/esm2022/lib/clipboard/clipboard.service.mjs +103 -0
- package/esm2022/lib/clipboard/index.mjs +18 -0
- package/esm2022/lib/clipboard/public-api.mjs +21 -0
- package/esm2022/lib/comments/comment-list/comment-list.component.mjs +53 -0
- package/esm2022/lib/comments/comment-list/comment-list.module.mjs +33 -0
- package/esm2022/lib/comments/comment-list/index.mjs +18 -0
- package/esm2022/lib/comments/comment-list/public-api.mjs +19 -0
- package/esm2022/lib/comments/comments.component.mjs +128 -0
- package/esm2022/lib/comments/comments.module.mjs +33 -0
- package/esm2022/lib/comments/index.mjs +18 -0
- package/esm2022/lib/comments/interfaces/comments-service.interface.mjs +18 -0
- package/esm2022/lib/comments/interfaces/comments.token.mjs +19 -0
- package/esm2022/lib/comments/public-api.mjs +22 -0
- package/esm2022/lib/common/index.mjs +35 -0
- package/esm2022/lib/common/interface/search-component.interface.mjs +18 -0
- package/esm2022/lib/common/mock/app-config.service.mock.mjs +47 -0
- package/esm2022/lib/common/models/default-languages.model.mjs +36 -0
- package/esm2022/lib/common/models/log-levels.model.mjs +33 -0
- package/esm2022/lib/common/models/user-info-mode.enum.mjs +25 -0
- package/esm2022/lib/common/services/cookie.service.mjs +82 -0
- package/esm2022/lib/common/services/download.service.mjs +102 -0
- package/esm2022/lib/common/services/dynamic-component-mapper.service.mjs +89 -0
- package/esm2022/lib/common/services/highlight-transform.service.mjs +61 -0
- package/esm2022/lib/common/services/language-item.interface.mjs +18 -0
- package/esm2022/lib/common/services/log.service.mjs +171 -0
- package/esm2022/lib/common/services/page-title.service.mjs +63 -0
- package/esm2022/lib/common/services/sort-by-category.service.mjs +81 -0
- package/esm2022/lib/common/services/storage.service.mjs +143 -0
- package/esm2022/lib/common/services/thumbnail.service.mjs +194 -0
- package/esm2022/lib/common/services/url.service.mjs +45 -0
- package/esm2022/lib/common/services/user-preferences.service.mjs +238 -0
- package/esm2022/lib/common/utils/date-fns-adapter.mjs +115 -0
- package/esm2022/lib/common/utils/date-fns-utils.mjs +222 -0
- package/esm2022/lib/common/utils/datetime-fns-adapter.mjs +134 -0
- package/esm2022/lib/common/utils/file-utils.mjs +65 -0
- package/esm2022/lib/common/utils/index.mjs +18 -0
- package/esm2022/lib/common/utils/moment-date-adapter.mjs +202 -0
- package/esm2022/lib/common/utils/moment-date-formats.model.mjs +32 -0
- package/esm2022/lib/common/utils/object-utils.mjs +107 -0
- package/esm2022/lib/common/utils/public-api.mjs +25 -0
- package/esm2022/lib/common/utils/string-utils.mjs +45 -0
- package/esm2022/lib/context-menu/animations.mjs +33 -0
- package/esm2022/lib/context-menu/context-menu-list.component.mjs +92 -0
- package/esm2022/lib/context-menu/context-menu-overlay.mjs +25 -0
- package/esm2022/lib/context-menu/context-menu-overlay.service.mjs +109 -0
- package/esm2022/lib/context-menu/context-menu.directive.mjs +63 -0
- package/esm2022/lib/context-menu/context-menu.module.mjs +35 -0
- package/esm2022/lib/context-menu/context-menu.tokens.mjs +19 -0
- package/esm2022/lib/context-menu/index.mjs +18 -0
- package/esm2022/lib/context-menu/interfaces.mjs +18 -0
- package/esm2022/lib/context-menu/public-api.mjs +21 -0
- package/esm2022/lib/core.module.mjs +314 -0
- package/esm2022/lib/datatable/components/amount-cell/amount-cell.component.mjs +45 -0
- package/esm2022/lib/datatable/components/boolean-cell/boolean-cell.component.mjs +65 -0
- package/esm2022/lib/datatable/components/columns-selector/columns-search-filter.pipe.mjs +55 -0
- package/esm2022/lib/datatable/components/columns-selector/columns-selector.component.mjs +114 -0
- package/esm2022/lib/datatable/components/data-cell.event.mjs +31 -0
- package/esm2022/lib/datatable/components/data-row-action.event.mjs +34 -0
- package/esm2022/lib/datatable/components/datatable/datatable.component.mjs +915 -0
- package/esm2022/lib/datatable/components/datatable-cell/datatable-cell.component.mjs +126 -0
- package/esm2022/lib/datatable/components/datatable-row/datatable-row.component.mjs +98 -0
- package/esm2022/lib/datatable/components/date-cell/date-cell.component.mjs +78 -0
- package/esm2022/lib/datatable/components/empty-list/empty-list.component.mjs +60 -0
- package/esm2022/lib/datatable/components/filesize-cell/filesize-cell.component.mjs +49 -0
- package/esm2022/lib/datatable/components/icon-cell/icon-cell.component.mjs +67 -0
- package/esm2022/lib/datatable/components/json-cell/json-cell.component.mjs +86 -0
- package/esm2022/lib/datatable/components/location-cell/location-cell.component.mjs +69 -0
- package/esm2022/lib/datatable/components/mocks/datatable.mock.mjs +153 -0
- package/esm2022/lib/datatable/components/number-cell/number-cell.component.mjs +42 -0
- package/esm2022/lib/datatable/data/data-column.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-row-event.model.mjs +26 -0
- package/esm2022/lib/datatable/data/data-row-update.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-row.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-sorting.model.mjs +24 -0
- package/esm2022/lib/datatable/data/data-table.schema.mjs +132 -0
- package/esm2022/lib/datatable/data/datatable-adapter.mjs +18 -0
- package/esm2022/lib/datatable/data/object-datacolumn.model.mjs +46 -0
- package/esm2022/lib/datatable/data/object-datarow.model.mjs +38 -0
- package/esm2022/lib/datatable/data/object-datatable-adapter.mjs +134 -0
- package/esm2022/lib/datatable/data-column/data-column-header.component.mjs +45 -0
- package/esm2022/lib/datatable/data-column/data-column-list.component.mjs +36 -0
- package/esm2022/lib/datatable/data-column/data-column.component.mjs +114 -0
- package/esm2022/lib/datatable/data-column/index.mjs +18 -0
- package/esm2022/lib/datatable/data-column/public-api.mjs +20 -0
- package/esm2022/lib/datatable/datatable.module.mjs +161 -0
- package/esm2022/lib/datatable/directives/custom-empty-content-template.directive.mjs +35 -0
- package/esm2022/lib/datatable/directives/custom-loading-template.directive.mjs +30 -0
- package/esm2022/lib/datatable/directives/custom-no-permission-template.directive.mjs +35 -0
- package/esm2022/lib/datatable/directives/drop-zone.directive.mjs +89 -0
- package/esm2022/lib/datatable/directives/header-filter-template.directive.mjs +43 -0
- package/esm2022/lib/datatable/directives/loading-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/main-data-table-action-template.directive.mjs +43 -0
- package/esm2022/lib/datatable/directives/no-content-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/no-permission-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/resizable/resizable.directive.mjs +173 -0
- package/esm2022/lib/datatable/directives/resizable/resize-handle.directive.mjs +72 -0
- package/esm2022/lib/datatable/directives/resizable/types.mjs +18 -0
- package/esm2022/lib/datatable/index.mjs +18 -0
- package/esm2022/lib/datatable/public-api.mjs +55 -0
- package/esm2022/lib/datatable/services/datatable.service.mjs +33 -0
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.mjs +50 -0
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.module.mjs +38 -0
- package/esm2022/lib/dialogs/dialog/dialog-data.interface.mjs +18 -0
- package/esm2022/lib/dialogs/dialog/dialog.component.mjs +71 -0
- package/esm2022/lib/dialogs/dialog/dialog.model.mjs +22 -0
- package/esm2022/lib/dialogs/dialog/index.mjs +20 -0
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.mjs +51 -0
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.module.mjs +38 -0
- package/esm2022/lib/dialogs/index.mjs +18 -0
- package/esm2022/lib/dialogs/public-api.mjs +25 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +74 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.model.mjs +18 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +33 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes.guard.mjs +64 -0
- package/esm2022/lib/directives/directive.module.mjs +56 -0
- package/esm2022/lib/directives/highlight.directive.mjs +67 -0
- package/esm2022/lib/directives/index.mjs +18 -0
- package/esm2022/lib/directives/infinite-select-scroll.directive.mjs +67 -0
- package/esm2022/lib/directives/logout.directive.mjs +72 -0
- package/esm2022/lib/directives/public-api.mjs +24 -0
- package/esm2022/lib/directives/tooltip-card/tooltip-card.component.mjs +60 -0
- package/esm2022/lib/directives/tooltip-card/tooltip-card.directive.mjs +104 -0
- package/esm2022/lib/directives/upload.directive.mjs +241 -0
- package/esm2022/lib/dynamic-chip-list/chip.mjs +18 -0
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.component.mjs +205 -0
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.module.mjs +33 -0
- package/esm2022/lib/dynamic-chip-list/index.mjs +18 -0
- package/esm2022/lib/dynamic-chip-list/public-api.mjs +20 -0
- package/esm2022/lib/events/base-ui.event.mjs +21 -0
- package/esm2022/lib/events/base.event.mjs +29 -0
- package/esm2022/lib/events/index.mjs +18 -0
- package/esm2022/lib/events/public-api.mjs +19 -0
- package/esm2022/lib/form/components/form-base.component.mjs +212 -0
- package/esm2022/lib/form/components/form-custom-button.directive.mjs +30 -0
- package/esm2022/lib/form/components/form-field/form-field.component.mjs +142 -0
- package/esm2022/lib/form/components/form-renderer.component.mjs +162 -0
- package/esm2022/lib/form/components/form-section/form-section.component.mjs +46 -0
- package/esm2022/lib/form/components/helpers/buttons-visibility.mjs +37 -0
- package/esm2022/lib/form/components/inplace-form-input/inplace-form-input.component.mjs +37 -0
- package/esm2022/lib/form/components/middlewares/decimal-middleware.service.mjs +48 -0
- package/esm2022/lib/form/components/middlewares/middleware.mjs +19 -0
- package/esm2022/lib/form/components/widgets/amount/amount.widget.mjs +78 -0
- package/esm2022/lib/form/components/widgets/base-viewer/base-viewer.widget.mjs +60 -0
- package/esm2022/lib/form/components/widgets/checkbox/checkbox.widget.mjs +53 -0
- package/esm2022/lib/form/components/widgets/core/container-column.model.mjs +28 -0
- package/esm2022/lib/form/components/widgets/core/container.model.mjs +50 -0
- package/esm2022/lib/form/components/widgets/core/content-link.model.mjs +52 -0
- package/esm2022/lib/form/components/widgets/core/displayable-cm-properties.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/error-message.model.mjs +38 -0
- package/esm2022/lib/form/components/widgets/core/external-content-link.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/external-content.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-file-source.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-metadata.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-option.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-rule.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-selected-folder.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-templates.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-types.mjs +74 -0
- package/esm2022/lib/form/components/widgets/core/form-field-utils.mjs +23 -0
- package/esm2022/lib/form/components/widgets/core/form-field-validator.mjs +268 -0
- package/esm2022/lib/form/components/widgets/core/form-field-variable-options.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field.model.mjs +490 -0
- package/esm2022/lib/form/components/widgets/core/form-outcome-event.model.mjs +32 -0
- package/esm2022/lib/form/components/widgets/core/form-outcome.model.mjs +38 -0
- package/esm2022/lib/form/components/widgets/core/form-values.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-variable.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-widget.model.mjs +33 -0
- package/esm2022/lib/form/components/widgets/core/form.model.mjs +387 -0
- package/esm2022/lib/form/components/widgets/core/group.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/index.mjs +49 -0
- package/esm2022/lib/form/components/widgets/core/predefined-theme.mjs +115 -0
- package/esm2022/lib/form/components/widgets/core/process-form-model.interface.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/process-variable.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/tab.model.mjs +34 -0
- package/esm2022/lib/form/components/widgets/core/theme.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/upload-widget-content-link.model.mjs +27 -0
- package/esm2022/lib/form/components/widgets/core/widget-schema.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/date/date.widget.mjs +163 -0
- package/esm2022/lib/form/components/widgets/date-time/date-time.widget.mjs +154 -0
- package/esm2022/lib/form/components/widgets/decimal/decimal.component.mjs +54 -0
- package/esm2022/lib/form/components/widgets/display-text/display-text.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/display-text/display-text.widget.mjs +47 -0
- package/esm2022/lib/form/components/widgets/display-text/index.mjs +19 -0
- package/esm2022/lib/form/components/widgets/error/error.component.mjs +93 -0
- package/esm2022/lib/form/components/widgets/header/header.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/header/header.widget.mjs +43 -0
- package/esm2022/lib/form/components/widgets/header/index.mjs +19 -0
- package/esm2022/lib/form/components/widgets/hyperlink/hyperlink.widget.mjs +71 -0
- package/esm2022/lib/form/components/widgets/index.mjs +71 -0
- package/esm2022/lib/form/components/widgets/json/json.widget.mjs +67 -0
- package/esm2022/lib/form/components/widgets/multiline-text/multiline-text.widget.mjs +56 -0
- package/esm2022/lib/form/components/widgets/number/number.widget.mjs +66 -0
- package/esm2022/lib/form/components/widgets/reactive-widget.interface.mjs +18 -0
- package/esm2022/lib/form/components/widgets/text/text-mask.component.mjs +215 -0
- package/esm2022/lib/form/components/widgets/text/text.widget.mjs +66 -0
- package/esm2022/lib/form/components/widgets/unknown/unknown.widget.mjs +63 -0
- package/esm2022/lib/form/components/widgets/widget.component.mjs +110 -0
- package/esm2022/lib/form/events/form-error.event.mjs +24 -0
- package/esm2022/lib/form/events/form-field.event.mjs +24 -0
- package/esm2022/lib/form/events/form-rules.event.mjs +25 -0
- package/esm2022/lib/form/events/form-spinner.event.mjs +23 -0
- package/esm2022/lib/form/events/form.event.mjs +29 -0
- package/esm2022/lib/form/events/index.mjs +24 -0
- package/esm2022/lib/form/events/validate-form-field.event.mjs +24 -0
- package/esm2022/lib/form/events/validate-form.event.mjs +25 -0
- package/esm2022/lib/form/form-base.module.mjs +90 -0
- package/esm2022/lib/form/index.mjs +18 -0
- package/esm2022/lib/form/models/form-rules.model.mjs +77 -0
- package/esm2022/lib/form/models/task-process-variable.model.mjs +19 -0
- package/esm2022/lib/form/models/widget-visibility.model.mjs +104 -0
- package/esm2022/lib/form/pipes/field-style.pipe.mjs +45 -0
- package/esm2022/lib/form/pipes/index.mjs +18 -0
- package/esm2022/lib/form/public-api.mjs +35 -0
- package/esm2022/lib/form/services/form-rendering.service.mjs +53 -0
- package/esm2022/lib/form/services/form-validation-service.interface.mjs +18 -0
- package/esm2022/lib/form/services/form.service.mjs +86 -0
- package/esm2022/lib/form/services/widget-visibility.service.mjs +294 -0
- package/esm2022/lib/header/header.component.mjs +73 -0
- package/esm2022/lib/header/index.mjs +18 -0
- package/esm2022/lib/header/navbar/navbar-item.component.mjs +37 -0
- package/esm2022/lib/header/navbar/navbar.component.mjs +36 -0
- package/esm2022/lib/header/public-api.mjs +20 -0
- package/esm2022/lib/icon/icon.component.mjs +51 -0
- package/esm2022/lib/icon/icon.module.mjs +36 -0
- package/esm2022/lib/icon/index.mjs +18 -0
- package/esm2022/lib/icon/public-api.mjs +19 -0
- package/esm2022/lib/identity-user-info/identity-user-info.component.mjs +87 -0
- package/esm2022/lib/identity-user-info/identity-user-info.module.mjs +33 -0
- package/esm2022/lib/identity-user-info/index.mjs +18 -0
- package/esm2022/lib/identity-user-info/public-api.mjs +19 -0
- package/esm2022/lib/info-drawer/index.mjs +18 -0
- package/esm2022/lib/info-drawer/info-drawer-layout.component.mjs +71 -0
- package/esm2022/lib/info-drawer/info-drawer.component.mjs +114 -0
- package/esm2022/lib/info-drawer/info-drawer.module.mjs +53 -0
- package/esm2022/lib/info-drawer/public-api.mjs +20 -0
- package/esm2022/lib/interface/index.mjs +18 -0
- package/esm2022/lib/interface/injection.tokens.mjs +19 -0
- package/esm2022/lib/interface/public-api.mjs +18 -0
- package/esm2022/lib/language-menu/index.mjs +18 -0
- package/esm2022/lib/language-menu/language-menu.component.mjs +61 -0
- package/esm2022/lib/language-menu/language-menu.module.mjs +35 -0
- package/esm2022/lib/language-menu/language-picker.component.mjs +78 -0
- package/esm2022/lib/language-menu/public-api.mjs +21 -0
- package/esm2022/lib/language-menu/service/language.service.interface.mjs +18 -0
- package/esm2022/lib/language-menu/service/language.service.mjs +34 -0
- package/esm2022/lib/layout/components/header/header.component.mjs +100 -0
- package/esm2022/lib/layout/components/layout-container/layout-container.component.mjs +180 -0
- package/esm2022/lib/layout/components/sidebar-action/sidebar-action-menu.component.mjs +82 -0
- package/esm2022/lib/layout/components/sidenav-layout/sidenav-layout.component.mjs +145 -0
- package/esm2022/lib/layout/directives/sidenav-layout-content.directive.mjs +33 -0
- package/esm2022/lib/layout/directives/sidenav-layout-header.directive.mjs +33 -0
- package/esm2022/lib/layout/directives/sidenav-layout-navigation.directive.mjs +33 -0
- package/esm2022/lib/layout/index.mjs +18 -0
- package/esm2022/lib/layout/layout.module.mjs +72 -0
- package/esm2022/lib/layout/public-api.mjs +25 -0
- package/esm2022/lib/login/components/login/login.component.mjs +368 -0
- package/esm2022/lib/login/components/login-dialog/login-dialog-component-data.interface.mjs +18 -0
- package/esm2022/lib/login/components/login-dialog/login-dialog.component.mjs +58 -0
- package/esm2022/lib/login/components/login-dialog-panel/login-dialog-panel.component.mjs +48 -0
- package/esm2022/lib/login/directives/login-footer.directive.mjs +41 -0
- package/esm2022/lib/login/directives/login-header.directive.mjs +41 -0
- package/esm2022/lib/login/index.mjs +18 -0
- package/esm2022/lib/login/login.module.mjs +54 -0
- package/esm2022/lib/login/models/login-error.event.mjs +22 -0
- package/esm2022/lib/login/models/login-submit.event.mjs +32 -0
- package/esm2022/lib/login/models/login-success.event.mjs +24 -0
- package/esm2022/lib/login/public-api.mjs +27 -0
- package/esm2022/lib/material.module.mjs +254 -0
- package/esm2022/lib/mock/cookie.service.mock.mjs +43 -0
- package/esm2022/lib/mock/data-column.mock.mjs +73 -0
- package/esm2022/lib/mock/event.mock.mjs +39 -0
- package/esm2022/lib/mock/form/form-definition-readonly.mock.mjs +225 -0
- package/esm2022/lib/mock/form/form-definition-visibility.mock.mjs +347 -0
- package/esm2022/lib/mock/form/form-definition.mock.mjs +403 -0
- package/esm2022/lib/mock/form/form.component.mock.mjs +275 -0
- package/esm2022/lib/mock/form/form.service.mock.mjs +248 -0
- package/esm2022/lib/mock/form/widget-visibility.service.mock.mjs +1835 -0
- package/esm2022/lib/mock/index.mjs +18 -0
- package/esm2022/lib/mock/public-api.mjs +27 -0
- package/esm2022/lib/mock/translation.service.mock.mjs +44 -0
- package/esm2022/lib/models/comment.model.mjs +51 -0
- package/esm2022/lib/models/component.model.mjs +24 -0
- package/esm2022/lib/models/decimal-number.model.mjs +26 -0
- package/esm2022/lib/models/general-user.model.mjs +24 -0
- package/esm2022/lib/models/index.mjs +18 -0
- package/esm2022/lib/models/pagination.model.mjs +29 -0
- package/esm2022/lib/models/path.model.mjs +24 -0
- package/esm2022/lib/models/product-version.model.mjs +28 -0
- package/esm2022/lib/models/public-api.mjs +24 -0
- package/esm2022/lib/models/request-pagination.model.mjs +25 -0
- package/esm2022/lib/notifications/components/add-notification.stories.component.mjs +44 -0
- package/esm2022/lib/notifications/components/notification-history.component.mjs +139 -0
- package/esm2022/lib/notifications/helpers/notification.factory.mjs +43 -0
- package/esm2022/lib/notifications/index.mjs +18 -0
- package/esm2022/lib/notifications/models/notification.model.mjs +25 -0
- package/esm2022/lib/notifications/notification-history.module.mjs +35 -0
- package/esm2022/lib/notifications/public-api.mjs +23 -0
- package/esm2022/lib/notifications/services/notification.service.mjs +166 -0
- package/esm2022/lib/pagination/index.mjs +18 -0
- package/esm2022/lib/pagination/infinite-pagination.component.mjs +112 -0
- package/esm2022/lib/pagination/paginated-component.interface.mjs +18 -0
- package/esm2022/lib/pagination/pagination-component.interface.mjs +18 -0
- package/esm2022/lib/pagination/pagination.component.mjs +263 -0
- package/esm2022/lib/pagination/pagination.module.mjs +35 -0
- package/esm2022/lib/pagination/public-api.mjs +22 -0
- package/esm2022/lib/pipes/date-time.pipe.mjs +46 -0
- package/esm2022/lib/pipes/decimal-number.pipe.mjs +78 -0
- package/esm2022/lib/pipes/file-size.pipe.mjs +54 -0
- package/esm2022/lib/pipes/file-type.pipe.mjs +40 -0
- package/esm2022/lib/pipes/format-space.pipe.mjs +39 -0
- package/esm2022/lib/pipes/full-name.pipe.mjs +43 -0
- package/esm2022/lib/pipes/index.mjs +18 -0
- package/esm2022/lib/pipes/localized-date.pipe.mjs +70 -0
- package/esm2022/lib/pipes/multi-value.pipe.mjs +37 -0
- package/esm2022/lib/pipes/pipe.module.mjs +83 -0
- package/esm2022/lib/pipes/public-api.mjs +30 -0
- package/esm2022/lib/pipes/text-highlight.pipe.mjs +39 -0
- package/esm2022/lib/pipes/time-ago.pipe.mjs +65 -0
- package/esm2022/lib/pipes/truncate.pipe.mjs +33 -0
- package/esm2022/lib/pipes/user-initial.pipe.mjs +52 -0
- package/esm2022/lib/pipes/user-like.interface.mjs +18 -0
- package/esm2022/lib/progress/progress.component.mjs +90 -0
- package/esm2022/lib/search-text/animations.mjs +32 -0
- package/esm2022/lib/search-text/index.mjs +18 -0
- package/esm2022/lib/search-text/models/search-text-input.model.mjs +23 -0
- package/esm2022/lib/search-text/public-api.mjs +22 -0
- package/esm2022/lib/search-text/search-text-input.component.mjs +294 -0
- package/esm2022/lib/search-text/search-text-input.module.mjs +35 -0
- package/esm2022/lib/search-text/search-trigger.directive.mjs +181 -0
- package/esm2022/lib/snackbar-content/index.mjs +18 -0
- package/esm2022/lib/snackbar-content/public-api.mjs +20 -0
- package/esm2022/lib/snackbar-content/snack-bar-data.mjs +18 -0
- package/esm2022/lib/snackbar-content/snackbar-content.component.mjs +48 -0
- package/esm2022/lib/snackbar-content/snackbar-content.module.mjs +38 -0
- package/esm2022/lib/sorting-picker/index.mjs +18 -0
- package/esm2022/lib/sorting-picker/public-api.mjs +18 -0
- package/esm2022/lib/sorting-picker/sorting-picker.component.mjs +68 -0
- package/esm2022/lib/templates/empty-content/empty-content.component.mjs +44 -0
- package/esm2022/lib/templates/error-content/error-content.component.mjs +62 -0
- package/esm2022/lib/templates/index.mjs +18 -0
- package/esm2022/lib/templates/public-api.mjs +20 -0
- package/esm2022/lib/templates/template.module.mjs +38 -0
- package/esm2022/lib/testing/core.story.module.mjs +39 -0
- package/esm2022/lib/testing/core.testing.module.mjs +35 -0
- package/esm2022/lib/testing/index.mjs +22 -0
- package/esm2022/lib/testing/noop-auth.module.mjs +80 -0
- package/esm2022/lib/testing/noop-translate.module.mjs +61 -0
- package/esm2022/lib/testing/unit-testing-utils.mjs +364 -0
- package/esm2022/lib/toolbar/index.mjs +18 -0
- package/esm2022/lib/toolbar/public-api.mjs +21 -0
- package/esm2022/lib/toolbar/toolbar-divider.component.mjs +27 -0
- package/esm2022/lib/toolbar/toolbar-title.component.mjs +32 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +40 -0
- package/esm2022/lib/toolbar/toolbar.module.mjs +36 -0
- package/esm2022/lib/translation/index.mjs +18 -0
- package/esm2022/lib/translation/public-api.mjs +19 -0
- package/esm2022/lib/translation/translate-loader.service.mjs +148 -0
- package/esm2022/lib/translation/translation.service.mjs +148 -0
- package/esm2022/lib/viewer/components/download-prompt-dialog/download-prompt-dialog.component.mjs +37 -0
- package/esm2022/lib/viewer/components/img-viewer/img-viewer.component.mjs +221 -0
- package/esm2022/lib/viewer/components/media-player/media-player.component.mjs +64 -0
- package/esm2022/lib/viewer/components/pdf-viewer/pdf-viewer.component.mjs +551 -0
- package/esm2022/lib/viewer/components/pdf-viewer-password-dialog/pdf-viewer-password-dialog.mjs +61 -0
- package/esm2022/lib/viewer/components/pdf-viewer-thumb/pdf-viewer-thumb.component.mjs +49 -0
- package/esm2022/lib/viewer/components/pdf-viewer-thumbnails/pdf-viewer-thumbnails.component.mjs +198 -0
- package/esm2022/lib/viewer/components/txt-viewer/txt-viewer.component.mjs +77 -0
- package/esm2022/lib/viewer/components/unknown-format/unknown-format.component.mjs +33 -0
- package/esm2022/lib/viewer/components/viewer-more-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-open-with.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-render/viewer-render.component.mjs +217 -0
- package/esm2022/lib/viewer/components/viewer-sidebar.component.mjs +46 -0
- package/esm2022/lib/viewer/components/viewer-toolbar-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-toolbar-custom-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-toolbar.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer.component.mjs +477 -0
- package/esm2022/lib/viewer/directives/viewer-extension.directive.mjs +67 -0
- package/esm2022/lib/viewer/index.mjs +18 -0
- package/esm2022/lib/viewer/models/download-prompt.actions.mjs +23 -0
- package/esm2022/lib/viewer/models/viewer.model.mjs +22 -0
- package/esm2022/lib/viewer/public-api.mjs +40 -0
- package/esm2022/lib/viewer/services/rendering-queue.services.mjs +179 -0
- package/esm2022/lib/viewer/services/view-util.service.mjs +149 -0
- package/esm2022/lib/viewer/viewer.module.mjs +112 -0
- package/esm2022/public-api.mjs +60 -0
- package/esm2022/shell/alfresco-adf-core-shell.mjs +5 -0
- package/esm2022/shell/index.mjs +20 -0
- package/esm2022/shell/lib/components/shell/shell.component.mjs +122 -0
- package/esm2022/shell/lib/services/shell-app.service.mjs +22 -0
- package/esm2022/shell/lib/shell.module.mjs +79 -0
- package/esm2022/shell/lib/shell.routes.mjs +25 -0
- package/feature-flags/lib/providers/debug-feature-flags.provider.d.ts +35 -4
- package/fesm2022/adf-core.mjs +976 -950
- package/fesm2022/adf-core.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-api.mjs +4 -4
- package/fesm2022/alfresco-adf-core-api.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-auth.mjs +3 -3
- package/fesm2022/alfresco-adf-core-auth.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs +11 -11
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-feature-flags.mjs +56 -51
- package/fesm2022/alfresco-adf-core-feature-flags.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-shell.mjs +9 -9
- package/fesm2022/alfresco-adf-core-shell.mjs.map +1 -1
- package/lib/card-view/components/base-card-view.d.ts +1 -1
- package/lib/datatable/data/data-table.schema.d.ts +1 -1
- package/lib/viewer/components/viewer-render/viewer-render.component.d.ts +5 -4
- package/package.json +15 -3
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
18
|
+
/* eslint-disable no-underscore-dangle */
|
|
19
|
+
/* eslint-disable @angular-eslint/no-output-native */
|
|
20
|
+
import { NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';
|
|
21
|
+
import { Component, EventEmitter, HostListener, inject, InjectionToken, Input, Output, TemplateRef, ViewEncapsulation } from '@angular/core';
|
|
22
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
23
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
24
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
25
|
+
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
26
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
27
|
+
import { from, Subject, switchMap } from 'rxjs';
|
|
28
|
+
import { catchError } from 'rxjs/operators';
|
|
29
|
+
import { AppConfigService } from '../../../app-config';
|
|
30
|
+
import { ToolbarComponent, ToolbarDividerComponent } from '../../../toolbar';
|
|
31
|
+
import { RenderingQueueServices } from '../../services/rendering-queue.services';
|
|
32
|
+
import { PdfPasswordDialogComponent } from '../pdf-viewer-password-dialog/pdf-viewer-password-dialog';
|
|
33
|
+
import { PdfThumbListComponent } from '../pdf-viewer-thumbnails/pdf-viewer-thumbnails.component';
|
|
34
|
+
import * as pdfjsLib from 'pdfjs-dist/build/pdf.min.mjs';
|
|
35
|
+
import { EventBus, PDFViewer } from 'pdfjs-dist/web/pdf_viewer.mjs';
|
|
36
|
+
import * as i0 from "@angular/core";
|
|
37
|
+
import * as i1 from "@angular/material/button";
|
|
38
|
+
import * as i2 from "@angular/material/icon";
|
|
39
|
+
import * as i3 from "@ngx-translate/core";
|
|
40
|
+
import * as i4 from "@angular/material/progress-bar";
|
|
41
|
+
export const PDFJS_MODULE = new InjectionToken('PDFJS_MODULE', { factory: () => pdfjsLib });
|
|
42
|
+
export const PDFJS_VIEWER_MODULE = new InjectionToken('PDFJS_VIEWER_MODULE', { factory: () => PDFViewer });
|
|
43
|
+
export class PdfViewerComponent {
|
|
44
|
+
get currentScaleText() {
|
|
45
|
+
const currentScaleValueStr = this.pdfViewer?.currentScaleValue;
|
|
46
|
+
const scaleNumber = Number(currentScaleValueStr);
|
|
47
|
+
const currentScaleText = scaleNumber ? `${Math.round(scaleNumber * 100)}%` : '';
|
|
48
|
+
return currentScaleText;
|
|
49
|
+
}
|
|
50
|
+
constructor() {
|
|
51
|
+
this.showToolbar = true;
|
|
52
|
+
this.allowThumbnails = false;
|
|
53
|
+
this.thumbnailsTemplate = null;
|
|
54
|
+
this.cacheType = '';
|
|
55
|
+
this.rendered = new EventEmitter();
|
|
56
|
+
this.error = new EventEmitter();
|
|
57
|
+
this.close = new EventEmitter();
|
|
58
|
+
this.pagesLoaded = new EventEmitter();
|
|
59
|
+
this.currentScaleMode = 'init';
|
|
60
|
+
this.MAX_AUTO_SCALE = 1.25;
|
|
61
|
+
this.DEFAULT_SCALE_DELTA = 1.1;
|
|
62
|
+
this.MIN_SCALE = 0.25;
|
|
63
|
+
this.MAX_SCALE = 10.0;
|
|
64
|
+
this.isPanelDisabled = true;
|
|
65
|
+
this.showThumbnails = false;
|
|
66
|
+
this.pdfThumbnailsContext = { viewer: null };
|
|
67
|
+
this.documentOverflow = false;
|
|
68
|
+
this.pdfjsLib = inject(PDFJS_MODULE);
|
|
69
|
+
this.pdfjsViewer = inject(PDFJS_VIEWER_MODULE);
|
|
70
|
+
this.eventBus = new EventBus();
|
|
71
|
+
this.pdfjsDefaultOptions = {
|
|
72
|
+
disableAutoFetch: true,
|
|
73
|
+
disableStream: true,
|
|
74
|
+
cMapUrl: './cmaps/',
|
|
75
|
+
cMapPacked: true
|
|
76
|
+
};
|
|
77
|
+
this.pdfjsWorkerDestroy$ = new Subject();
|
|
78
|
+
this.dialog = inject(MatDialog);
|
|
79
|
+
this.renderingQueueServices = inject(RenderingQueueServices);
|
|
80
|
+
this.appConfigService = inject(AppConfigService);
|
|
81
|
+
// needed to preserve "this" context
|
|
82
|
+
this.onPageChange = this.onPageChange.bind(this);
|
|
83
|
+
this.onPagesLoaded = this.onPagesLoaded.bind(this);
|
|
84
|
+
this.onPageRendered = this.onPageRendered.bind(this);
|
|
85
|
+
this.randomPdfId = Date.now().toString();
|
|
86
|
+
this.pdfjsWorkerDestroy$
|
|
87
|
+
.pipe(catchError(() => null), switchMap(() => from(this.destroyPfdJsWorker())))
|
|
88
|
+
.subscribe(() => { });
|
|
89
|
+
}
|
|
90
|
+
getUserScaling() {
|
|
91
|
+
let scaleConfig = this.appConfigService.get('adf-viewer.pdf-viewer-scaling', undefined);
|
|
92
|
+
if (scaleConfig) {
|
|
93
|
+
scaleConfig = scaleConfig / 100;
|
|
94
|
+
scaleConfig = this.checkLimits(scaleConfig);
|
|
95
|
+
}
|
|
96
|
+
return scaleConfig;
|
|
97
|
+
}
|
|
98
|
+
checkLimits(scaleConfig) {
|
|
99
|
+
if (scaleConfig > this.MAX_SCALE) {
|
|
100
|
+
return this.MAX_SCALE;
|
|
101
|
+
}
|
|
102
|
+
else if (scaleConfig < this.MIN_SCALE) {
|
|
103
|
+
return this.MIN_SCALE;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return scaleConfig;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
ngOnChanges(changes) {
|
|
110
|
+
const blobFile = changes['blobFile'];
|
|
111
|
+
if (blobFile?.currentValue) {
|
|
112
|
+
const reader = new FileReader();
|
|
113
|
+
reader.onload = async () => {
|
|
114
|
+
const pdfOptions = {
|
|
115
|
+
...this.pdfjsDefaultOptions,
|
|
116
|
+
data: reader.result,
|
|
117
|
+
withCredentials: this.appConfigService.get('auth.withCredentials', undefined),
|
|
118
|
+
isEvalSupported: false
|
|
119
|
+
};
|
|
120
|
+
this.executePdf(pdfOptions);
|
|
121
|
+
};
|
|
122
|
+
reader.readAsArrayBuffer(blobFile.currentValue);
|
|
123
|
+
}
|
|
124
|
+
const urlFile = changes['urlFile'];
|
|
125
|
+
if (urlFile?.currentValue) {
|
|
126
|
+
const pdfOptions = {
|
|
127
|
+
...this.pdfjsDefaultOptions,
|
|
128
|
+
url: urlFile.currentValue,
|
|
129
|
+
withCredentials: this.appConfigService.get('auth.withCredentials', undefined),
|
|
130
|
+
isEvalSupported: false
|
|
131
|
+
};
|
|
132
|
+
if (this.cacheType) {
|
|
133
|
+
pdfOptions.httpHeaders = {
|
|
134
|
+
'Cache-Control': this.cacheType
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
this.executePdf(pdfOptions);
|
|
138
|
+
}
|
|
139
|
+
if (!this.urlFile && !this.blobFile) {
|
|
140
|
+
throw new Error('Attribute urlFile or blobFile is required');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
executePdf(pdfOptions) {
|
|
144
|
+
this.setupPdfJsWorker().then(() => {
|
|
145
|
+
this.loadingTask = this.pdfjsLib.getDocument(pdfOptions);
|
|
146
|
+
this.loadingTask.onPassword = (callback, reason) => {
|
|
147
|
+
this.onPdfPassword(callback, reason);
|
|
148
|
+
};
|
|
149
|
+
this.loadingTask.onProgress = (progressData) => {
|
|
150
|
+
const level = progressData.loaded / progressData.total;
|
|
151
|
+
this.loadingPercent = Math.round(level * 100);
|
|
152
|
+
};
|
|
153
|
+
this.isPanelDisabled = true;
|
|
154
|
+
this.loadingTask.promise
|
|
155
|
+
.then((pdfDocument) => {
|
|
156
|
+
this.totalPages = pdfDocument.numPages;
|
|
157
|
+
this.page = 1;
|
|
158
|
+
this.displayPage = 1;
|
|
159
|
+
this.initPDFViewer(pdfDocument);
|
|
160
|
+
return pdfDocument.getPage(1);
|
|
161
|
+
})
|
|
162
|
+
.then(() => {
|
|
163
|
+
setTimeout(() => this.scalePage('init'));
|
|
164
|
+
})
|
|
165
|
+
.catch(() => this.error.emit());
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
async setupPdfJsWorker() {
|
|
169
|
+
if (this.pdfJsWorkerInstance) {
|
|
170
|
+
await this.destroyPfdJsWorker();
|
|
171
|
+
}
|
|
172
|
+
else if (!this.pdfJsWorkerUrl) {
|
|
173
|
+
this.pdfJsWorkerUrl = await this.getPdfJsWorker();
|
|
174
|
+
}
|
|
175
|
+
this.pdfJsWorkerInstance = new Worker(this.pdfJsWorkerUrl, { type: 'module' });
|
|
176
|
+
this.pdfjsLib.GlobalWorkerOptions.workerPort = this.pdfJsWorkerInstance;
|
|
177
|
+
}
|
|
178
|
+
async getPdfJsWorker() {
|
|
179
|
+
const response = await fetch('./pdf.worker.min.mjs');
|
|
180
|
+
const workerScript = await response.text();
|
|
181
|
+
const blob = new Blob([workerScript], { type: 'application/javascript' });
|
|
182
|
+
return URL.createObjectURL(blob);
|
|
183
|
+
}
|
|
184
|
+
initPDFViewer(pdfDocument) {
|
|
185
|
+
const viewer = this.getViewer();
|
|
186
|
+
const container = this.getDocumentContainer();
|
|
187
|
+
if (viewer && container) {
|
|
188
|
+
this.pdfViewer = new this.pdfjsViewer({
|
|
189
|
+
container,
|
|
190
|
+
viewer,
|
|
191
|
+
renderingQueue: this.renderingQueueServices,
|
|
192
|
+
eventBus: this.eventBus,
|
|
193
|
+
annotationMode: 0
|
|
194
|
+
});
|
|
195
|
+
// cspell: disable-next
|
|
196
|
+
this.eventBus.on('pagechanging', this.onPageChange);
|
|
197
|
+
// cspell: disable-next
|
|
198
|
+
this.eventBus.on('pagesloaded', this.onPagesLoaded);
|
|
199
|
+
// cspell: disable-next
|
|
200
|
+
this.eventBus.on('textlayerrendered', () => {
|
|
201
|
+
this.onPageRendered();
|
|
202
|
+
});
|
|
203
|
+
this.eventBus.on('pagerendered', () => {
|
|
204
|
+
this.onPageRendered();
|
|
205
|
+
});
|
|
206
|
+
this.renderingQueueServices.setViewer(this.pdfViewer);
|
|
207
|
+
this.pdfViewer.setDocument(pdfDocument);
|
|
208
|
+
this.pdfThumbnailsContext.viewer = this.pdfViewer;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
ngOnDestroy() {
|
|
212
|
+
if (this.pdfViewer) {
|
|
213
|
+
// cspell: disable-next
|
|
214
|
+
this.eventBus.off('pagechanging', () => { });
|
|
215
|
+
// cspell: disable-next
|
|
216
|
+
this.eventBus.off('pagesloaded', () => { });
|
|
217
|
+
// cspell: disable-next
|
|
218
|
+
this.eventBus.off('textlayerrendered', () => { });
|
|
219
|
+
}
|
|
220
|
+
if (this.loadingTask) {
|
|
221
|
+
this.pdfjsWorkerDestroy$.next(true);
|
|
222
|
+
}
|
|
223
|
+
this.pdfjsWorkerDestroy$.complete();
|
|
224
|
+
this.revokePdfJsWorkerUrl();
|
|
225
|
+
}
|
|
226
|
+
async destroyPfdJsWorker() {
|
|
227
|
+
if (this.loadingTask.destroy) {
|
|
228
|
+
await this.loadingTask.destroy();
|
|
229
|
+
}
|
|
230
|
+
if (this.pdfJsWorkerInstance) {
|
|
231
|
+
this.pdfJsWorkerInstance.terminate();
|
|
232
|
+
}
|
|
233
|
+
this.loadingTask = null;
|
|
234
|
+
}
|
|
235
|
+
revokePdfJsWorkerUrl() {
|
|
236
|
+
URL.revokeObjectURL(this.pdfJsWorkerUrl);
|
|
237
|
+
}
|
|
238
|
+
toggleThumbnails() {
|
|
239
|
+
this.showThumbnails = !this.showThumbnails;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Method to scale the page current support implementation
|
|
243
|
+
*
|
|
244
|
+
* @param scaleMode - new scale mode
|
|
245
|
+
*/
|
|
246
|
+
scalePage(scaleMode) {
|
|
247
|
+
this.currentScaleMode = scaleMode;
|
|
248
|
+
const viewerContainer = this.getMainContainer();
|
|
249
|
+
const documentContainer = this.getDocumentContainer();
|
|
250
|
+
if (this.pdfViewer && documentContainer) {
|
|
251
|
+
let widthContainer;
|
|
252
|
+
let heightContainer;
|
|
253
|
+
if (viewerContainer && viewerContainer.clientWidth <= documentContainer.clientWidth) {
|
|
254
|
+
widthContainer = viewerContainer.clientWidth;
|
|
255
|
+
heightContainer = viewerContainer.clientHeight;
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
widthContainer = documentContainer.clientWidth;
|
|
259
|
+
heightContainer = documentContainer.clientHeight;
|
|
260
|
+
}
|
|
261
|
+
const currentPage = this.pdfViewer._pages[this.pdfViewer._currentPageNumber - 1];
|
|
262
|
+
const padding = 20;
|
|
263
|
+
const pageWidthScale = ((widthContainer - padding) / currentPage.width) * currentPage.scale;
|
|
264
|
+
const pageHeightScale = ((heightContainer - padding) / currentPage.width) * currentPage.scale;
|
|
265
|
+
let scale;
|
|
266
|
+
switch (this.currentScaleMode) {
|
|
267
|
+
case 'init':
|
|
268
|
+
case 'page-fit': {
|
|
269
|
+
scale = this.getUserScaling();
|
|
270
|
+
if (!scale) {
|
|
271
|
+
scale = this.autoScaling(pageHeightScale, pageWidthScale);
|
|
272
|
+
}
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
case 'page-actual': {
|
|
276
|
+
scale = 1;
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
case 'page-width': {
|
|
280
|
+
scale = pageWidthScale;
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
case 'page-height': {
|
|
284
|
+
scale = pageHeightScale;
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case 'auto': {
|
|
288
|
+
scale = this.autoScaling(pageHeightScale, pageWidthScale);
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
default:
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
this.setScaleUpdatePages(scale);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
autoScaling(pageHeightScale, pageWidthScale) {
|
|
298
|
+
let horizontalScale;
|
|
299
|
+
if (this.isLandscape) {
|
|
300
|
+
horizontalScale = Math.min(pageHeightScale, pageWidthScale);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
horizontalScale = pageWidthScale;
|
|
304
|
+
}
|
|
305
|
+
horizontalScale = Math.round(horizontalScale);
|
|
306
|
+
const scale = Math.min(this.MAX_AUTO_SCALE, horizontalScale);
|
|
307
|
+
return this.checkPageFitInContainer(scale);
|
|
308
|
+
}
|
|
309
|
+
getMainContainer() {
|
|
310
|
+
return document.getElementById(`${this.randomPdfId}-viewer-main-container`);
|
|
311
|
+
}
|
|
312
|
+
getDocumentContainer() {
|
|
313
|
+
return document.getElementById(`${this.randomPdfId}-viewer-pdf-viewer`);
|
|
314
|
+
}
|
|
315
|
+
getViewer() {
|
|
316
|
+
return document.getElementById(`${this.randomPdfId}-viewer-viewerPdf`);
|
|
317
|
+
}
|
|
318
|
+
checkPageFitInContainer(scale) {
|
|
319
|
+
const documentContainerSize = this.getDocumentContainer();
|
|
320
|
+
const page = this.pdfViewer._pages[this.pdfViewer._currentPageNumber - 1];
|
|
321
|
+
if (page.width > documentContainerSize.clientWidth) {
|
|
322
|
+
scale = Math.fround((documentContainerSize.clientWidth - 20) / page.width);
|
|
323
|
+
if (scale < this.MIN_SCALE) {
|
|
324
|
+
scale = this.MIN_SCALE;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return scale;
|
|
328
|
+
}
|
|
329
|
+
setDocumentOverflow() {
|
|
330
|
+
const documentContainerSize = this.getDocumentContainer();
|
|
331
|
+
const page = this.pdfViewer._pages[this.pdfViewer._currentPageNumber - 1];
|
|
332
|
+
this.documentOverflow = page.width > documentContainerSize.clientWidth;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Update all the pages with the newScale scale
|
|
336
|
+
*
|
|
337
|
+
* @param newScale - new scale page
|
|
338
|
+
*/
|
|
339
|
+
setScaleUpdatePages(newScale) {
|
|
340
|
+
if (this.pdfViewer) {
|
|
341
|
+
if (!this.isSameScale(this.pdfViewer.currentScaleValue, newScale.toString())) {
|
|
342
|
+
this.pdfViewer.currentScaleValue = newScale.toString();
|
|
343
|
+
}
|
|
344
|
+
this.pdfViewer.update();
|
|
345
|
+
}
|
|
346
|
+
this.setDocumentOverflow();
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Check if the request scale of the page is the same for avoid useless re-rendering
|
|
350
|
+
*
|
|
351
|
+
* @param oldScale - old scale page
|
|
352
|
+
* @param newScale - new scale page
|
|
353
|
+
* @returns `true` if the scale is the same, otherwise `false`
|
|
354
|
+
*/
|
|
355
|
+
isSameScale(oldScale, newScale) {
|
|
356
|
+
return newScale === oldScale;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Check if is a land scape view
|
|
360
|
+
*
|
|
361
|
+
* @param width target width
|
|
362
|
+
* @param height target height
|
|
363
|
+
* @returns `true` if the target is in the landscape mode, otherwise `false`
|
|
364
|
+
*/
|
|
365
|
+
isLandscape(width, height) {
|
|
366
|
+
return width > height;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Method triggered when the page is resized
|
|
370
|
+
*/
|
|
371
|
+
onResize() {
|
|
372
|
+
this.scalePage(this.currentScaleMode);
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* toggle the fit page pdf
|
|
376
|
+
*/
|
|
377
|
+
pageFit() {
|
|
378
|
+
if (this.currentScaleMode !== 'page-fit') {
|
|
379
|
+
this.scalePage('page-fit');
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
this.scalePage('auto');
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* zoom in page pdf
|
|
387
|
+
*
|
|
388
|
+
* @param ticks number of ticks to zoom
|
|
389
|
+
*/
|
|
390
|
+
zoomIn(ticks) {
|
|
391
|
+
let newScale = this.pdfViewer.currentScaleValue;
|
|
392
|
+
do {
|
|
393
|
+
newScale = (newScale * this.DEFAULT_SCALE_DELTA).toFixed(2);
|
|
394
|
+
newScale = Math.ceil(newScale * 10) / 10;
|
|
395
|
+
newScale = Math.min(this.MAX_SCALE, newScale);
|
|
396
|
+
} while (--ticks > 0 && newScale < this.MAX_SCALE);
|
|
397
|
+
this.currentScaleMode = 'auto';
|
|
398
|
+
this.setScaleUpdatePages(newScale);
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* zoom out page pdf
|
|
402
|
+
*
|
|
403
|
+
* @param ticks number of ticks to scale
|
|
404
|
+
*/
|
|
405
|
+
zoomOut(ticks) {
|
|
406
|
+
let newScale = this.pdfViewer.currentScaleValue;
|
|
407
|
+
do {
|
|
408
|
+
newScale = (newScale / this.DEFAULT_SCALE_DELTA).toFixed(2);
|
|
409
|
+
newScale = Math.floor(newScale * 10) / 10;
|
|
410
|
+
newScale = Math.max(this.MIN_SCALE, newScale);
|
|
411
|
+
} while (--ticks > 0 && newScale > this.MIN_SCALE);
|
|
412
|
+
this.currentScaleMode = 'auto';
|
|
413
|
+
this.setScaleUpdatePages(newScale);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* load the previous page
|
|
417
|
+
*/
|
|
418
|
+
previousPage() {
|
|
419
|
+
if (this.pdfViewer && this.page > 1) {
|
|
420
|
+
this.page--;
|
|
421
|
+
this.displayPage = this.page;
|
|
422
|
+
this.pdfViewer.currentPageNumber = this.page;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* load the next page
|
|
427
|
+
*/
|
|
428
|
+
nextPage() {
|
|
429
|
+
if (this.pdfViewer && this.page < this.totalPages) {
|
|
430
|
+
this.page++;
|
|
431
|
+
this.displayPage = this.page;
|
|
432
|
+
this.pdfViewer.currentPageNumber = this.page;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* load the page in input
|
|
437
|
+
*
|
|
438
|
+
* @param page to load
|
|
439
|
+
*/
|
|
440
|
+
inputPage(page) {
|
|
441
|
+
const pageInput = parseInt(page, 10);
|
|
442
|
+
if (!isNaN(pageInput) && pageInput > 0 && pageInput <= this.totalPages) {
|
|
443
|
+
this.page = pageInput;
|
|
444
|
+
this.displayPage = this.page;
|
|
445
|
+
this.pdfViewer.currentPageNumber = this.page;
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
this.displayPage = this.page;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Page Change Event
|
|
453
|
+
*
|
|
454
|
+
* @param event event
|
|
455
|
+
*/
|
|
456
|
+
onPageChange(event) {
|
|
457
|
+
if (event.source && event.source.container.id === `${this.randomPdfId}-viewer-pdf-viewer`) {
|
|
458
|
+
this.page = event.pageNumber;
|
|
459
|
+
this.displayPage = event.pageNumber;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
onPdfPassword(callback, reason) {
|
|
463
|
+
this.dialog
|
|
464
|
+
.open(PdfPasswordDialogComponent, {
|
|
465
|
+
width: '400px',
|
|
466
|
+
data: { reason }
|
|
467
|
+
})
|
|
468
|
+
.afterClosed()
|
|
469
|
+
.subscribe((password) => {
|
|
470
|
+
if (password) {
|
|
471
|
+
callback(password);
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
this.close.emit();
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Page Rendered Event
|
|
480
|
+
*/
|
|
481
|
+
onPageRendered() {
|
|
482
|
+
this.rendered.emit();
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Pages Loaded Event
|
|
486
|
+
*
|
|
487
|
+
*/
|
|
488
|
+
onPagesLoaded() {
|
|
489
|
+
this.isPanelDisabled = false;
|
|
490
|
+
this.pagesLoaded.emit();
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Keyboard Event Listener
|
|
494
|
+
*
|
|
495
|
+
* @param event KeyboardEvent
|
|
496
|
+
*/
|
|
497
|
+
handleKeyboardEvent(event) {
|
|
498
|
+
const key = event.keyCode;
|
|
499
|
+
if (key === 39) {
|
|
500
|
+
// right arrow
|
|
501
|
+
this.nextPage();
|
|
502
|
+
}
|
|
503
|
+
else if (key === 37) {
|
|
504
|
+
// left arrow
|
|
505
|
+
this.previousPage();
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PdfViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
509
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PdfViewerComponent, isStandalone: true, selector: "adf-pdf-viewer", inputs: { urlFile: "urlFile", blobFile: "blobFile", fileName: "fileName", showToolbar: "showToolbar", allowThumbnails: "allowThumbnails", thumbnailsTemplate: "thumbnailsTemplate", cacheType: "cacheType" }, outputs: { rendered: "rendered", error: "error", close: "close", pagesLoaded: "pagesLoaded" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "adf-pdf-viewer" }, providers: [RenderingQueueServices], usesOnChanges: true, ngImport: i0, template: "<div class=\"adf-pdf-viewer__container\">\n <ng-container *ngIf=\"showThumbnails\">\n <div class=\"adf-pdf-viewer__thumbnails\">\n <div class=\"adf-thumbnails-template__container\">\n <div class=\"adf-thumbnails-template__buttons\">\n <button mat-icon-button\n data-automation-id='adf-thumbnails-close'\n (click)=\"toggleThumbnails()\"\n [attr.aria-label]=\"'ADF_VIEWER.ARIA.THUMBNAILS_PANLEL_CLOSE' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <ng-container *ngIf=\"thumbnailsTemplate\">\n <ng-container *ngTemplateOutlet=\"thumbnailsTemplate;context:pdfThumbnailsContext\" />\n </ng-container>\n <adf-pdf-thumbnails *ngIf=\"!thumbnailsTemplate && !isPanelDisabled\"\n (close)=\"toggleThumbnails()\"\n [pdfViewer]=\"pdfViewer\" />\n </div>\n </div>\n </ng-container>\n\n <div class=\"adf-pdf-viewer__content\">\n <div [id]=\"randomPdfId + '-viewer-pdf-viewer'\"\n class=\"adf-viewer-pdf-viewer\"\n (window:resize)=\"onResize()\">\n <div [id]=\"randomPdfId + '-viewer-viewerPdf'\"\n class=\"adf-pdfViewer pdfViewer\"\n role=\"document\"\n tabindex=\"0\"\n aria-expanded=\"true\">\n <div id=\"loader-container\" class=\"adf-loader-container\">\n <div class=\"adf-loader-item\">\n <mat-progress-bar class=\"adf-loader-item-progress-bar\" mode=\"indeterminate\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"adf-pdf-viewer__toolbar\" *ngIf=\"showToolbar\" [ngStyle]=\"documentOverflow && {bottom: '25px'}\">\n <adf-toolbar>\n\n <ng-container *ngIf=\"allowThumbnails\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ARIA.THUMBNAILS' | translate\"\n [attr.aria-expanded]=\"showThumbnails\"\n data-automation-id=\"adf-thumbnails-button\"\n [disabled]=\"isPanelDisabled\"\n (click)=\"toggleThumbnails()\">\n <mat-icon>dashboard</mat-icon>\n </button>\n <adf-toolbar-divider />\n </ng-container>\n\n <button id=\"viewer-previous-page-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.PREVIOUS_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.PREVIOUS_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"previousPage()\">\n <mat-icon>keyboard_arrow_up</mat-icon>\n </button>\n\n <button id=\"viewer-next-page-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.NEXT_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.NEXT_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"nextPage()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n\n <div class=\"adf-pdf-viewer__toolbar-page-selector\">\n <label for=\"page-selector\">{{ 'ADF_VIEWER.PAGE_LABEL.SHOWING' | translate }}</label>\n <input #page\n id=\"page-selector\"\n type=\"text\"\n data-automation-id=\"adf-page-selector\"\n pattern=\"-?[0-9]*(\\.[0-9]+)?\"\n value=\"{{ displayPage }}\"\n [attr.aria-label]=\"'ADF_VIEWER.PAGE_LABEL.PAGE_SELECTOR_LABEL' | translate\"\n (keyup.enter)=\"inputPage(page.value)\">\n <span>{{ 'ADF_VIEWER.PAGE_LABEL.OF' | translate }} {{ totalPages }}</span>\n </div>\n\n <div class=\"adf-pdf-viewer__toolbar-page-scale\" data-automation-id=\"adf-page-scale\">\n {{ currentScaleText }}\n </div>\n\n <button id=\"viewer-zoom-in-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.ZOOM_IN' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.ZOOM_IN' | translate }}\"\n mat-icon-button\n (click)=\"zoomIn()\">\n <mat-icon>zoom_in</mat-icon>\n </button>\n\n <button id=\"viewer-zoom-out-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.ZOOM_OUT' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.ZOOM_OUT' | translate }}\"\n mat-icon-button\n (click)=\"zoomOut()\">\n <mat-icon>zoom_out</mat-icon>\n </button>\n\n <button id=\"viewer-scale-page-button\"\n role=\"button\" aria-pressed=\"true\"\n title=\"{{ 'ADF_VIEWER.ARIA.FIT_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.FIT_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"pageFit()\">\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n\n </adf-toolbar>\n</div>\n", styles: [".adf-pdf-viewer .textLayer{position:absolute;inset:0;overflow:hidden;opacity:.2;line-height:1;border:1px solid gray}.adf-pdf-viewer .textLayer>div{color:transparent;position:absolute;white-space:pre;cursor:text;transform-origin:0 0}.adf-pdf-viewer .textLayer .adf-highlight{margin:-1px;padding:1px;background-color:#b400aa;border-radius:4px}.adf-pdf-viewer .textLayer .adf-highlight.adf-begin{border-radius:4px 0 0 4px}.adf-pdf-viewer .textLayer .adf-highlight.adf-end{border-radius:0 4px 4px 0}.adf-pdf-viewer .textLayer .adf-highlight.adf-middle{border-radius:0}.adf-pdf-viewer .textLayer .adf-highlight.adf-selected{background-color:#006400}.adf-pdf-viewer .textLayer::selection{background:#00f}.adf-pdf-viewer .textLayer .adf-endOfContent{display:block;position:absolute;inset:100% 0 0;z-index:-1;cursor:default;-webkit-user-select:none;user-select:none}.adf-pdf-viewer .textLayer .adf-endOfContent.adf-active{top:0}.adf-pdf-viewer .adf-annotationLayer section{position:absolute}.adf-pdf-viewer .adf-annotationLayer .adf-linkAnnotation>a{position:absolute;font-size:1em;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 0 0 repeat}.adf-pdf-viewer .adf-annotationLayer .adf-linkAnnotation>a:hover{opacity:.2;background:#ff0;box-shadow:0 2px 10px #ff0}.adf-pdf-viewer .adf-annotationLayer .adf-textAnnotation img{position:absolute;cursor:pointer}.adf-pdf-viewer .adf-annotationLayer .adf-popupWrapper{position:absolute;width:20em}.adf-pdf-viewer .adf-annotationLayer .adf-popup{position:absolute;z-index:200;max-width:20em;background-color:#ff9;box-shadow:0 2px 5px #333;border-radius:2px;padding:.6em;margin-left:5px;cursor:pointer;word-wrap:break-word}.adf-pdf-viewer .adf-annotationLayer .adf-popup h1{font-size:1em;border-bottom:1px solid #000;padding-bottom:.2em}.adf-pdf-viewer .adf-annotationLayer .adf-popup p{padding-top:.2em}.adf-pdf-viewer .adf-annotationLayer .adf-highlightAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-underlineAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-squigglyAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-strikeoutAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-fileAttachmentAnnotation{cursor:pointer}.adf-pdf-viewer .adf-pdfViewer .canvasWrapper{overflow:hidden}.adf-pdf-viewer .adf-pdfViewer .page{direction:ltr;width:816px;height:1056px;margin:1px auto -8px;position:relative;overflow:visible;border:9px solid transparent;background-clip:content-box;background-color:#fff}.adf-pdf-viewer .adf-pdfViewer .page canvas{margin:0;display:block}.adf-pdf-viewer .adf-pdfViewer .page .adf-loadingIcon{position:absolute;display:block;width:100px;height:100px;inset:50% 0 0 50%;margin-top:-50px;margin-left:-50px;font-size:5px;text-indent:-9999em;border-top:1.1em solid rgba(3,0,2,.2);border-right:1.1em solid rgba(3,0,2,.2);border-bottom:1.1em solid rgba(3,0,2,.2);border-left:1.1em solid #030002;animation:load8 1.1s infinite linear;border-radius:50%}.adf-pdf-viewer .adf-pdfViewer .page .adf-loadingIcon:after{border-radius:50%}.adf-pdf-viewer .adf-pdfViewer .page *{padding:0;margin:0}.adf-pdf-viewer .adf-pdfViewer.adf-removePageBorders .adf-page{margin:0 auto 10px;border:none}.adf-pdf-viewer .adf-hidden,.adf-pdf-viewer [hidden]{display:none}.adf-viewer-pdf-viewer{overflow:auto;-webkit-overflow-scrolling:touch;position:absolute;inset:0;outline:none}html[dir=ltr] .adf-viewer-pdf-viewer{box-shadow:inset 1px 0 #ffffff0d}html[dir=rtl] .adf-viewer-pdf-viewer{box-shadow:inset -1px 0 #ffffff0d}\n", ".adf-pdf-viewer{width:100%;height:100%;margin:0}.adf-pdf-viewer .adf-loader-container{display:flex;flex-direction:row;height:100%}.adf-pdf-viewer__thumbnails{position:relative;height:100%;width:190px;background-color:#0000001f;display:flex;flex-direction:column;padding:0}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout{display:flex;flex-direction:column;flex:1;background:#e6e6e6}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-header{margin-bottom:0}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-content{padding:0;height:100%;overflow:hidden}.adf-pdf-viewer__thumbnails .adf-info-drawer-content{height:100%}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-content>*:last-child{height:100%;overflow:hidden}.adf-pdf-viewer .adf-thumbnails-template__container{display:flex;flex-direction:column;height:100%}.adf-pdf-viewer .adf-thumbnails-template__buttons{height:45px;justify-content:flex-end;align-items:flex-end;display:flex;color:var(--adf-theme-foreground-text-color-054)}.adf-pdf-viewer__container{display:flex;height:100%;min-height:1px}.adf-pdf-viewer__content{flex:1 1 auto;position:relative}.adf-pdf-viewer .adf-loader-item{margin:auto;max-height:100px;max-width:300px}.adf-pdf-viewer .adf-loader-item .adf-loader-item-progress-bar{max-width:300px;margin:0;position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.adf-pdf-viewer__toolbar{z-index:100;position:absolute;bottom:5px;left:50%;transform:translate(-50%)}.adf-pdf-viewer__toolbar .adf-toolbar .mat-toolbar{max-height:48px;background-color:var(--adf-theme-background-card-color);border-width:0;border-radius:2px;box-shadow:0 2px 2px #000,0 0 2px #0000001f}.adf-pdf-viewer__toolbar-page-selector{padding-left:10px;padding-right:10px;white-space:nowrap;font-size:var(--theme-body-1-font-size)}.adf-pdf-viewer__toolbar-page-selector>input{border:1px solid var(--adf-theme-foreground-text-color-007);background-color:var(--adf-theme-background-card-color);color:inherit;font-size:var(--theme-body-1-font-size);padding:5px;height:24px;line-height:24px;text-align:right;width:33px;margin-right:4px;outline-width:1px;outline-color:gray}.adf-pdf-viewer__toolbar-page-scale{cursor:default;width:79px;height:24px;font-size:var(--theme-body-1-font-size);border:1px solid var(--adf-theme-foreground-text-color-007);text-align:center;line-height:24px;margin-left:4px;margin-right:4px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: PdfThumbListComponent, selector: "adf-pdf-thumbnails", inputs: ["pdfViewer"], outputs: ["close"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "component", type: ToolbarDividerComponent, selector: "adf-toolbar-divider" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
510
|
+
}
|
|
511
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PdfViewerComponent, decorators: [{
|
|
512
|
+
type: Component,
|
|
513
|
+
args: [{ selector: 'adf-pdf-viewer', standalone: true, providers: [RenderingQueueServices], host: { class: 'adf-pdf-viewer' }, imports: [
|
|
514
|
+
MatButtonModule,
|
|
515
|
+
MatIconModule,
|
|
516
|
+
TranslateModule,
|
|
517
|
+
PdfThumbListComponent,
|
|
518
|
+
NgIf,
|
|
519
|
+
NgTemplateOutlet,
|
|
520
|
+
MatProgressBarModule,
|
|
521
|
+
NgStyle,
|
|
522
|
+
ToolbarComponent,
|
|
523
|
+
ToolbarDividerComponent
|
|
524
|
+
], encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-pdf-viewer__container\">\n <ng-container *ngIf=\"showThumbnails\">\n <div class=\"adf-pdf-viewer__thumbnails\">\n <div class=\"adf-thumbnails-template__container\">\n <div class=\"adf-thumbnails-template__buttons\">\n <button mat-icon-button\n data-automation-id='adf-thumbnails-close'\n (click)=\"toggleThumbnails()\"\n [attr.aria-label]=\"'ADF_VIEWER.ARIA.THUMBNAILS_PANLEL_CLOSE' | translate\"\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <ng-container *ngIf=\"thumbnailsTemplate\">\n <ng-container *ngTemplateOutlet=\"thumbnailsTemplate;context:pdfThumbnailsContext\" />\n </ng-container>\n <adf-pdf-thumbnails *ngIf=\"!thumbnailsTemplate && !isPanelDisabled\"\n (close)=\"toggleThumbnails()\"\n [pdfViewer]=\"pdfViewer\" />\n </div>\n </div>\n </ng-container>\n\n <div class=\"adf-pdf-viewer__content\">\n <div [id]=\"randomPdfId + '-viewer-pdf-viewer'\"\n class=\"adf-viewer-pdf-viewer\"\n (window:resize)=\"onResize()\">\n <div [id]=\"randomPdfId + '-viewer-viewerPdf'\"\n class=\"adf-pdfViewer pdfViewer\"\n role=\"document\"\n tabindex=\"0\"\n aria-expanded=\"true\">\n <div id=\"loader-container\" class=\"adf-loader-container\">\n <div class=\"adf-loader-item\">\n <mat-progress-bar class=\"adf-loader-item-progress-bar\" mode=\"indeterminate\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"adf-pdf-viewer__toolbar\" *ngIf=\"showToolbar\" [ngStyle]=\"documentOverflow && {bottom: '25px'}\">\n <adf-toolbar>\n\n <ng-container *ngIf=\"allowThumbnails\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF_VIEWER.ARIA.THUMBNAILS' | translate\"\n [attr.aria-expanded]=\"showThumbnails\"\n data-automation-id=\"adf-thumbnails-button\"\n [disabled]=\"isPanelDisabled\"\n (click)=\"toggleThumbnails()\">\n <mat-icon>dashboard</mat-icon>\n </button>\n <adf-toolbar-divider />\n </ng-container>\n\n <button id=\"viewer-previous-page-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.PREVIOUS_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.PREVIOUS_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"previousPage()\">\n <mat-icon>keyboard_arrow_up</mat-icon>\n </button>\n\n <button id=\"viewer-next-page-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.NEXT_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.NEXT_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"nextPage()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n\n <div class=\"adf-pdf-viewer__toolbar-page-selector\">\n <label for=\"page-selector\">{{ 'ADF_VIEWER.PAGE_LABEL.SHOWING' | translate }}</label>\n <input #page\n id=\"page-selector\"\n type=\"text\"\n data-automation-id=\"adf-page-selector\"\n pattern=\"-?[0-9]*(\\.[0-9]+)?\"\n value=\"{{ displayPage }}\"\n [attr.aria-label]=\"'ADF_VIEWER.PAGE_LABEL.PAGE_SELECTOR_LABEL' | translate\"\n (keyup.enter)=\"inputPage(page.value)\">\n <span>{{ 'ADF_VIEWER.PAGE_LABEL.OF' | translate }} {{ totalPages }}</span>\n </div>\n\n <div class=\"adf-pdf-viewer__toolbar-page-scale\" data-automation-id=\"adf-page-scale\">\n {{ currentScaleText }}\n </div>\n\n <button id=\"viewer-zoom-in-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.ZOOM_IN' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.ZOOM_IN' | translate }}\"\n mat-icon-button\n (click)=\"zoomIn()\">\n <mat-icon>zoom_in</mat-icon>\n </button>\n\n <button id=\"viewer-zoom-out-button\"\n title=\"{{ 'ADF_VIEWER.ARIA.ZOOM_OUT' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.ZOOM_OUT' | translate }}\"\n mat-icon-button\n (click)=\"zoomOut()\">\n <mat-icon>zoom_out</mat-icon>\n </button>\n\n <button id=\"viewer-scale-page-button\"\n role=\"button\" aria-pressed=\"true\"\n title=\"{{ 'ADF_VIEWER.ARIA.FIT_PAGE' | translate }}\"\n attr.aria-label=\"{{ 'ADF_VIEWER.ARIA.FIT_PAGE' | translate }}\"\n mat-icon-button\n (click)=\"pageFit()\">\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n\n </adf-toolbar>\n</div>\n", styles: [".adf-pdf-viewer .textLayer{position:absolute;inset:0;overflow:hidden;opacity:.2;line-height:1;border:1px solid gray}.adf-pdf-viewer .textLayer>div{color:transparent;position:absolute;white-space:pre;cursor:text;transform-origin:0 0}.adf-pdf-viewer .textLayer .adf-highlight{margin:-1px;padding:1px;background-color:#b400aa;border-radius:4px}.adf-pdf-viewer .textLayer .adf-highlight.adf-begin{border-radius:4px 0 0 4px}.adf-pdf-viewer .textLayer .adf-highlight.adf-end{border-radius:0 4px 4px 0}.adf-pdf-viewer .textLayer .adf-highlight.adf-middle{border-radius:0}.adf-pdf-viewer .textLayer .adf-highlight.adf-selected{background-color:#006400}.adf-pdf-viewer .textLayer::selection{background:#00f}.adf-pdf-viewer .textLayer .adf-endOfContent{display:block;position:absolute;inset:100% 0 0;z-index:-1;cursor:default;-webkit-user-select:none;user-select:none}.adf-pdf-viewer .textLayer .adf-endOfContent.adf-active{top:0}.adf-pdf-viewer .adf-annotationLayer section{position:absolute}.adf-pdf-viewer .adf-annotationLayer .adf-linkAnnotation>a{position:absolute;font-size:1em;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 0 0 repeat}.adf-pdf-viewer .adf-annotationLayer .adf-linkAnnotation>a:hover{opacity:.2;background:#ff0;box-shadow:0 2px 10px #ff0}.adf-pdf-viewer .adf-annotationLayer .adf-textAnnotation img{position:absolute;cursor:pointer}.adf-pdf-viewer .adf-annotationLayer .adf-popupWrapper{position:absolute;width:20em}.adf-pdf-viewer .adf-annotationLayer .adf-popup{position:absolute;z-index:200;max-width:20em;background-color:#ff9;box-shadow:0 2px 5px #333;border-radius:2px;padding:.6em;margin-left:5px;cursor:pointer;word-wrap:break-word}.adf-pdf-viewer .adf-annotationLayer .adf-popup h1{font-size:1em;border-bottom:1px solid #000;padding-bottom:.2em}.adf-pdf-viewer .adf-annotationLayer .adf-popup p{padding-top:.2em}.adf-pdf-viewer .adf-annotationLayer .adf-highlightAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-underlineAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-squigglyAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-strikeoutAnnotation,.adf-pdf-viewer .adf-annotationLayer .adf-fileAttachmentAnnotation{cursor:pointer}.adf-pdf-viewer .adf-pdfViewer .canvasWrapper{overflow:hidden}.adf-pdf-viewer .adf-pdfViewer .page{direction:ltr;width:816px;height:1056px;margin:1px auto -8px;position:relative;overflow:visible;border:9px solid transparent;background-clip:content-box;background-color:#fff}.adf-pdf-viewer .adf-pdfViewer .page canvas{margin:0;display:block}.adf-pdf-viewer .adf-pdfViewer .page .adf-loadingIcon{position:absolute;display:block;width:100px;height:100px;inset:50% 0 0 50%;margin-top:-50px;margin-left:-50px;font-size:5px;text-indent:-9999em;border-top:1.1em solid rgba(3,0,2,.2);border-right:1.1em solid rgba(3,0,2,.2);border-bottom:1.1em solid rgba(3,0,2,.2);border-left:1.1em solid #030002;animation:load8 1.1s infinite linear;border-radius:50%}.adf-pdf-viewer .adf-pdfViewer .page .adf-loadingIcon:after{border-radius:50%}.adf-pdf-viewer .adf-pdfViewer .page *{padding:0;margin:0}.adf-pdf-viewer .adf-pdfViewer.adf-removePageBorders .adf-page{margin:0 auto 10px;border:none}.adf-pdf-viewer .adf-hidden,.adf-pdf-viewer [hidden]{display:none}.adf-viewer-pdf-viewer{overflow:auto;-webkit-overflow-scrolling:touch;position:absolute;inset:0;outline:none}html[dir=ltr] .adf-viewer-pdf-viewer{box-shadow:inset 1px 0 #ffffff0d}html[dir=rtl] .adf-viewer-pdf-viewer{box-shadow:inset -1px 0 #ffffff0d}\n", ".adf-pdf-viewer{width:100%;height:100%;margin:0}.adf-pdf-viewer .adf-loader-container{display:flex;flex-direction:row;height:100%}.adf-pdf-viewer__thumbnails{position:relative;height:100%;width:190px;background-color:#0000001f;display:flex;flex-direction:column;padding:0}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout{display:flex;flex-direction:column;flex:1;background:#e6e6e6}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-header{margin-bottom:0}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-content{padding:0;height:100%;overflow:hidden}.adf-pdf-viewer__thumbnails .adf-info-drawer-content{height:100%}.adf-pdf-viewer__thumbnails .adf-info-drawer-layout-content>*:last-child{height:100%;overflow:hidden}.adf-pdf-viewer .adf-thumbnails-template__container{display:flex;flex-direction:column;height:100%}.adf-pdf-viewer .adf-thumbnails-template__buttons{height:45px;justify-content:flex-end;align-items:flex-end;display:flex;color:var(--adf-theme-foreground-text-color-054)}.adf-pdf-viewer__container{display:flex;height:100%;min-height:1px}.adf-pdf-viewer__content{flex:1 1 auto;position:relative}.adf-pdf-viewer .adf-loader-item{margin:auto;max-height:100px;max-width:300px}.adf-pdf-viewer .adf-loader-item .adf-loader-item-progress-bar{max-width:300px;margin:0;position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.adf-pdf-viewer__toolbar{z-index:100;position:absolute;bottom:5px;left:50%;transform:translate(-50%)}.adf-pdf-viewer__toolbar .adf-toolbar .mat-toolbar{max-height:48px;background-color:var(--adf-theme-background-card-color);border-width:0;border-radius:2px;box-shadow:0 2px 2px #000,0 0 2px #0000001f}.adf-pdf-viewer__toolbar-page-selector{padding-left:10px;padding-right:10px;white-space:nowrap;font-size:var(--theme-body-1-font-size)}.adf-pdf-viewer__toolbar-page-selector>input{border:1px solid var(--adf-theme-foreground-text-color-007);background-color:var(--adf-theme-background-card-color);color:inherit;font-size:var(--theme-body-1-font-size);padding:5px;height:24px;line-height:24px;text-align:right;width:33px;margin-right:4px;outline-width:1px;outline-color:gray}.adf-pdf-viewer__toolbar-page-scale{cursor:default;width:79px;height:24px;font-size:var(--theme-body-1-font-size);border:1px solid var(--adf-theme-foreground-text-color-007);text-align:center;line-height:24px;margin-left:4px;margin-right:4px}\n"] }]
|
|
525
|
+
}], ctorParameters: () => [], propDecorators: { urlFile: [{
|
|
526
|
+
type: Input
|
|
527
|
+
}], blobFile: [{
|
|
528
|
+
type: Input
|
|
529
|
+
}], fileName: [{
|
|
530
|
+
type: Input
|
|
531
|
+
}], showToolbar: [{
|
|
532
|
+
type: Input
|
|
533
|
+
}], allowThumbnails: [{
|
|
534
|
+
type: Input
|
|
535
|
+
}], thumbnailsTemplate: [{
|
|
536
|
+
type: Input
|
|
537
|
+
}], cacheType: [{
|
|
538
|
+
type: Input
|
|
539
|
+
}], rendered: [{
|
|
540
|
+
type: Output
|
|
541
|
+
}], error: [{
|
|
542
|
+
type: Output
|
|
543
|
+
}], close: [{
|
|
544
|
+
type: Output
|
|
545
|
+
}], pagesLoaded: [{
|
|
546
|
+
type: Output
|
|
547
|
+
}], handleKeyboardEvent: [{
|
|
548
|
+
type: HostListener,
|
|
549
|
+
args: ['document:keydown', ['$event']]
|
|
550
|
+
}] } });
|
|
551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL3ZpZXdlci9jb21wb25lbnRzL3BkZi12aWV3ZXIvcGRmLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL3ZpZXdlci9jb21wb25lbnRzL3BkZi12aWV3ZXIvcGRmLXZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCx5REFBeUQ7QUFDekQseUNBQXlDO0FBQ3pDLHFEQUFxRDtBQUVyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxFQUNYLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNqRyxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7OztBQUtwRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQUMsY0FBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDNUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQUMscUJBQXFCLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQXVCM0csTUFBTSxPQUFPLGtCQUFrQjtJQXVEM0IsSUFBSSxnQkFBZ0I7UUFDaEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWpELE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVoRixPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFrQkQ7UUFyRUEsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFHNUIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFHeEIsdUJBQWtCLEdBQXFCLElBQUksQ0FBQztRQUc1QyxjQUFTLEdBQVcsRUFBRSxDQUFDO1FBR3ZCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBR25DLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBR2hDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBR2hDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQVN2QyxxQkFBZ0IsR0FBaUIsTUFBTSxDQUFDO1FBRXhDLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBQzlCLHdCQUFtQixHQUFXLEdBQUcsQ0FBQztRQUNsQyxjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ3pCLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFHekIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMseUJBQW9CLEdBQW9CLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXpELHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQVdqQixhQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFMUMsYUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUIsd0JBQW1CLEdBQUc7WUFDMUIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixhQUFhLEVBQUUsSUFBSTtZQUNuQixPQUFPLEVBQUUsVUFBVTtZQUNuQixVQUFVLEVBQUUsSUFBSTtTQUNuQixDQUFDO1FBQ00sd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUU3QyxXQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBR2hELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsbUJBQW1CO2FBQ25CLElBQUksQ0FDRCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQ3RCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUNuRDthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQVMsK0JBQStCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFaEcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLFdBQVcsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQ2hDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVyxDQUFDLFdBQW1CO1FBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUIsQ0FBQzthQUFNLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLFdBQVcsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckMsSUFBSSxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUN2QixNQUFNLFVBQVUsR0FBRztvQkFDZixHQUFHLElBQUksQ0FBQyxtQkFBbUI7b0JBQzNCLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTTtvQkFDbkIsZUFBZSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQVUsc0JBQXNCLEVBQUUsU0FBUyxDQUFDO29CQUN0RixlQUFlLEVBQUUsS0FBSztpQkFDekIsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUN4QixNQUFNLFVBQVUsR0FBUTtnQkFDcEIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2dCQUMzQixHQUFHLEVBQUUsT0FBTyxDQUFDLFlBQVk7Z0JBQ3pCLGVBQWUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFVLHNCQUFzQixFQUFFLFNBQVMsQ0FBQztnQkFDdEYsZUFBZSxFQUFFLEtBQUs7YUFDekIsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixVQUFVLENBQUMsV0FBVyxHQUFHO29CQUNyQixlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVM7aUJBQ2xDLENBQUM7WUFDTixDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWU7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXpELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxDQUFDLFlBQWtDLEVBQUUsRUFBRTtnQkFDakUsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBRTVCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztpQkFDbkIsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRWhDLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDUCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BDLENBQUM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQzVFLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYztRQUN4QixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsYUFBYSxDQUFDLFdBQTZCO1FBQ3ZDLE1BQU0sTUFBTSxHQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU5QyxJQUFJLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDbEMsU0FBUztnQkFDVCxNQUFNO2dCQUNOLGNBQWMsRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLGNBQWMsRUFBRSxDQUFDO2FBQ3BCLENBQUMsQ0FBQztZQUVILHVCQUF1QjtZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BELHVCQUF1QjtZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BELHVCQUF1QjtZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN0RCxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQix1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLFNBQXVCO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFFbEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDaEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUV0RCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QyxJQUFJLGNBQXNCLENBQUM7WUFDM0IsSUFBSSxlQUF1QixDQUFDO1lBRTVCLElBQUksZUFBZSxJQUFJLGVBQWUsQ0FBQyxXQUFXLElBQUksaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2xGLGNBQWMsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDO2dCQUM3QyxlQUFlLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztZQUNuRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osY0FBYyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztnQkFDL0MsZUFBZSxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQztZQUNyRCxDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVqRixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbkIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUM1RixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBRTlGLElBQUksS0FBYSxDQUFDO1lBQ2xCLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzVCLEtBQUssTUFBTSxDQUFDO2dCQUNaLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ1QsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO29CQUM5RCxDQUFDO29CQUNELE1BQU07Z0JBQ1YsQ0FBQztnQkFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLEtBQUssR0FBRyxDQUFDLENBQUM7b0JBQ1YsTUFBTTtnQkFDVixDQUFDO2dCQUNELEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFDaEIsS0FBSyxHQUFHLGNBQWMsQ0FBQztvQkFDdkIsTUFBTTtnQkFDVixDQUFDO2dCQUNELEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQztvQkFDakIsS0FBSyxHQUFHLGVBQWUsQ0FBQztvQkFDeEIsTUFBTTtnQkFDVixDQUFDO2dCQUNELEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDVixLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLENBQUM7b0JBQzFELE1BQU07Z0JBQ1YsQ0FBQztnQkFDRDtvQkFDSSxPQUFPO1lBQ2YsQ0FBQztZQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFdBQVcsQ0FBQyxlQUF1QixFQUFFLGNBQXNCO1FBQy9ELElBQUksZUFBdUIsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDaEUsQ0FBQzthQUFNLENBQUM7WUFDSixlQUFlLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsb0JBQW9CLENBQW1CLENBQUM7SUFDOUYsQ0FBQztJQUVPLFNBQVM7UUFDYixPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUFhO1FBQ2pDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDMUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUxRSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakQsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDM0IsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTFFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLFFBQWdCO1FBQ2hDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDM0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0QsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtRQUMxQyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUNyQyxPQUFPLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFjO1FBQ2pCLElBQUksUUFBUSxHQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUM7UUFDckQsR0FBRyxDQUFDO1lBQ0EsUUFBUSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxLQUFjO1FBQ2xCLElBQUksUUFBUSxHQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUM7UUFDckQsR0FBRyxDQUFDO1lBQ0EsUUFBUSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBRTdCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFFN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxJQUFZO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNqRCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsS0FBVTtRQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsb0JBQW9CLEVBQUUsQ0FBQztZQUN4RixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNO1FBQzFCLElBQUksQ0FBQyxNQUFNO2FBQ04sSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQzlCLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFO1NBQ25CLENBQUM7YUFDRCxXQUFXLEVBQUU7YUFDYixTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNwQixJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNYLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYTtRQUNULElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFFSCxtQkFBbUIsQ0FBQyxLQUFvQjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzFCLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2IsY0FBYztZQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQixDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDcEIsYUFBYTtZQUNiLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQzsrR0FuakJRLGtCQUFrQjttR0FBbEIsa0JBQWtCLHdkQWhCaEIsQ0FBQyxzQkFBc0IsQ0FBQywrQ0M5RHZDLG10S0FzSEEsbTNMRHJEUSxlQUFlLDJJQUNmLGFBQWEsbUxBQ2IsZUFBZSw0RkFDZixxQkFBcUIsMEdBQ3JCLElBQUksNkZBQ0osZ0JBQWdCLG1KQUNoQixvQkFBb0IseU5BQ3BCLE9BQU8sMkVBQ1AsZ0JBQWdCLG9GQUNoQix1QkFBdUI7OzRGQUlsQixrQkFBa0I7a0JBckI5QixTQUFTOytCQUNJLGdCQUFnQixjQUNkLElBQUksYUFHTCxDQUFDLHNCQUFzQixDQUFDLFFBQzdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFdBQ3hCO3dCQUNMLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsSUFBSTt3QkFDSixnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsT0FBTzt3QkFDUCxnQkFBZ0I7d0JBQ2hCLHVCQUF1QjtxQkFDMUIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTt3REFJckMsT0FBTztzQkFETixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxLQUFLO3NCQURKLE1BQU07Z0JBSVAsS0FBSztzQkFESixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkEyZ0JQLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmUgKi9cblxuaW1wb3J0IHsgTmdJZiwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGZyb20sIFN1YmplY3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29uZmlnJztcbmltcG9ydCB7IFRvb2xiYXJDb21wb25lbnQsIFRvb2xiYXJEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdG9vbGJhcic7XG5pbXBvcnQgeyBSZW5kZXJpbmdRdWV1ZVNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVuZGVyaW5nLXF1ZXVlLnNlcnZpY2VzJztcbmltcG9ydCB7IFBkZlBhc3N3b3JkRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcGRmLXZpZXdlci1wYXNzd29yZC1kaWFsb2cvcGRmLXZpZXdlci1wYXNzd29yZC1kaWFsb2cnO1xuaW1wb3J0IHsgUGRmVGh1bWJMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vcGRmLXZpZXdlci10aHVtYm5haWxzL3BkZi12aWV3ZXItdGh1bWJuYWlscy5jb21wb25lbnQnO1xuaW1wb3J0ICogYXMgcGRmanNMaWIgZnJvbSAncGRmanMtZGlzdC9idWlsZC9wZGYubWluLm1qcyc7XG5pbXBvcnQgeyBFdmVudEJ1cywgUERGVmlld2VyIH0gZnJvbSAncGRmanMtZGlzdC93ZWIvcGRmX3ZpZXdlci5tanMnO1xuaW1wb3J0IHsgT25Qcm9ncmVzc1BhcmFtZXRlcnMsIFBERkRvY3VtZW50TG9hZGluZ1Rhc2ssIFBERkRvY3VtZW50UHJveHkgfSBmcm9tICdwZGZqcy1kaXN0L3R5cGVzL3NyYy9kaXNwbGF5L2FwaSc7XG5cbmV4cG9ydCB0eXBlIFBkZlNjYWxlTW9kZSA9ICdpbml0JyB8ICdwYWdlLWFjdHVhbCcgfCAncGFnZS13aWR0aCcgfCAncGFnZS1oZWlnaHQnIHwgJ3BhZ2UtZml0JyB8ICdhdXRvJztcblxuZXhwb3J0IGNvbnN0IFBERkpTX01PRFVMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbignUERGSlNfTU9EVUxFJywgeyBmYWN0b3J5OiAoKSA9PiBwZGZqc0xpYiB9KTtcbmV4cG9ydCBjb25zdCBQREZKU19WSUVXRVJfTU9EVUxFID0gbmV3IEluamVjdGlvblRva2VuKCdQREZKU19WSUVXRVJfTU9EVUxFJywgeyBmYWN0b3J5OiAoKSA9PiBQREZWaWV3ZXIgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXBkZi12aWV3ZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BkZi12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3BkZi12aWV3ZXItaG9zdC5jb21wb25lbnQuc2NzcycsICcuL3BkZi12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtSZW5kZXJpbmdRdWV1ZVNlcnZpY2VzXSxcbiAgICBob3N0OiB7IGNsYXNzOiAnYWRmLXBkZi12aWV3ZXInIH0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgUGRmVGh1bWJMaXN0Q29tcG9uZW50LFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgVG9vbGJhckNvbXBvbmVudCxcbiAgICAgICAgVG9vbGJhckRpdmlkZXJDb21wb25lbnRcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgUGRmVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpXG4gICAgdXJsRmlsZTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBibG9iRmlsZTogQmxvYjtcblxuICAgIEBJbnB1dCgpXG4gICAgZmlsZU5hbWU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd1Rvb2xiYXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBhbGxvd1RodW1ibmFpbHMgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgdGh1bWJuYWlsc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgY2FjaGVUeXBlOiBzdHJpbmcgPSAnJztcblxuICAgIEBPdXRwdXQoKVxuICAgIHJlbmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHBhZ2VzTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgcGFnZTogbnVtYmVyO1xuICAgIGRpc3BsYXlQYWdlOiBudW1iZXI7XG4gICAgdG90YWxQYWdlczogbnVtYmVyO1xuICAgIGxvYWRpbmdQZXJjZW50OiBudW1iZXI7XG4gICAgcGRmVmlld2VyOiBQREZWaWV3ZXI7XG4gICAgcGRmSnNXb3JrZXJVcmw6IHN0cmluZztcbiAgICBwZGZKc1dvcmtlckluc3RhbmNlOiBXb3JrZXI7XG4gICAgY3VycmVudFNjYWxlTW9kZTogUGRmU2NhbGVNb2RlID0gJ2luaXQnO1xuXG4gICAgTUFYX0FVVE9fU0NBTEU6IG51bWJlciA9IDEuMjU7XG4gICAgREVGQVVMVF9TQ0FMRV9ERUxUQTogbnVtYmVyID0gMS4xO1xuICAgIE1JTl9TQ0FMRTogbnVtYmVyID0gMC4yNTtcbiAgICBNQVhfU0NBTEU6IG51bWJlciA9IDEwLjA7XG5cbiAgICBsb2FkaW5nVGFzazogUERGRG9jdW1lbnRMb2FkaW5nVGFzaztcbiAgICBpc1BhbmVsRGlzYWJsZWQgPSB0cnVlO1xuICAgIHNob3dUaHVtYm5haWxzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcGRmVGh1bWJuYWlsc0NvbnRleHQ6IHsgdmlld2VyOiBhbnkgfSA9IHsgdmlld2VyOiBudWxsIH07XG4gICAgcmFuZG9tUGRmSWQ6IHN0cmluZztcbiAgICBkb2N1bWVudE92ZXJmbG93ID0gZmFsc2U7XG5cbiAgICBnZXQgY3VycmVudFNjYWxlVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjdXJyZW50U2NhbGVWYWx1ZVN0ciA9IHRoaXMucGRmVmlld2VyPy5jdXJyZW50U2NhbGVWYWx1ZTtcbiAgICAgICAgY29uc3Qgc2NhbGVOdW1iZXIgPSBOdW1iZXIoY3VycmVudFNjYWxlVmFsdWVTdHIpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTY2FsZVRleHQgPSBzY2FsZU51bWJlciA/IGAke01hdGgucm91bmQoc2NhbGVOdW1iZXIgKiAxMDApfSVgIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTY2FsZVRleHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwZGZqc0xpYiA9IGluamVjdChQREZKU19NT0RVTEUpO1xuICAgIHByaXZhdGUgcGRmanNWaWV3ZXIgPSBpbmplY3QoUERGSlNfVklFV0VSX01PRFVMRSk7XG5cbiAgICBwcml2YXRlIGV2ZW50QnVzID0gbmV3IEV2ZW50QnVzKCk7XG4gICAgcHJpdmF0ZSBwZGZqc0RlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICBkaXNhYmxlQXV0b0ZldGNoOiB0cnVlLFxuICAgICAgICBkaXNhYmxlU3RyZWFtOiB0cnVlLFxuICAgICAgICBjTWFwVXJsOiAnLi9jbWFwcy8nLFxuICAgICAgICBjTWFwUGFja2VkOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIHBkZmpzV29ya2VyRGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgICBwcml2YXRlIHJlbmRlcmluZ1F1ZXVlU2VydmljZXMgPSBpbmplY3QoUmVuZGVyaW5nUXVldWVTZXJ2aWNlcyk7XG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlID0gaW5qZWN0KEFwcENvbmZpZ1NlcnZpY2UpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIG5lZWRlZCB0byBwcmVzZXJ2ZSBcInRoaXNcIiBjb250ZXh0XG4gICAgICAgIHRoaXMub25QYWdlQ2hhbmdlID0gdGhpcy5vblBhZ2VDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBhZ2VzTG9hZGVkID0gdGhpcy5vblBhZ2VzTG9hZGVkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25QYWdlUmVuZGVyZWQgPSB0aGlzLm9uUGFnZVJlbmRlcmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5yYW5kb21QZGZJZCA9IERhdGUubm93KCkudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5wZGZqc1dvcmtlckRlc3Ryb3kkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG51bGwpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBmcm9tKHRoaXMuZGVzdHJveVBmZEpzV29ya2VyKCkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgZ2V0VXNlclNjYWxpbmcoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHNjYWxlQ29uZmlnID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldDxudW1iZXI+KCdhZGYtdmlld2VyLnBkZi12aWV3ZXItc2NhbGluZycsIHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKHNjYWxlQ29uZmlnKSB7XG4gICAgICAgICAgICBzY2FsZUNvbmZpZyA9IHNjYWxlQ29uZmlnIC8gMTAwO1xuICAgICAgICAgICAgc2NhbGVDb25maWcgPSB0aGlzLmNoZWNrTGltaXRzKHNjYWxlQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzY2FsZUNvbmZpZztcbiAgICB9XG5cbiAgICBjaGVja0xpbWl0cyhzY2FsZUNvbmZpZzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHNjYWxlQ29uZmlnID4gdGhpcy5NQVhfU0NBTEUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLk1BWF9TQ0FMRTtcbiAgICAgICAgfSBlbHNlIGlmIChzY2FsZUNvbmZpZyA8IHRoaXMuTUlOX1NDQUxFKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5NSU5fU0NBTEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbGVDb25maWc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IGJsb2JGaWxlID0gY2hhbmdlc1snYmxvYkZpbGUnXTtcblxuICAgICAgICBpZiAoYmxvYkZpbGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGRmT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wZGZqc0RlZmF1bHRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZWFkZXIucmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXQ8Ym9vbGVhbj4oJ2F1dGgud2l0aENyZWRlbnRpYWxzJywgdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlUGRmKHBkZk9wdGlvbnMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iRmlsZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXJsRmlsZSA9IGNoYW5nZXNbJ3VybEZpbGUnXTtcbiAgICAgICAgaWYgKHVybEZpbGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGRmT3B0aW9uczogYW55ID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucGRmanNEZWZhdWx0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICB1cmw6IHVybEZpbGUuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldDxib29sZWFuPignYXV0aC53aXRoQ3JlZGVudGlhbHMnLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBwZGZPcHRpb25zLmh0dHBIZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6IHRoaXMuY2FjaGVUeXBlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVBkZihwZGZPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy51cmxGaWxlICYmICF0aGlzLmJsb2JGaWxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dHJpYnV0ZSB1cmxGaWxlIG9yIGJsb2JGaWxlIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleGVjdXRlUGRmKHBkZk9wdGlvbnM6IGFueSkge1xuICAgICAgICB0aGlzLnNldHVwUGRmSnNXb3JrZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rhc2sgPSB0aGlzLnBkZmpzTGliLmdldERvY3VtZW50KHBkZk9wdGlvbnMpO1xuXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdUYXNrLm9uUGFzc3dvcmQgPSAoY2FsbGJhY2ssIHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25QZGZQYXNzd29yZChjYWxsYmFjaywgcmVhc29uKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rhc2sub25Qcm9ncmVzcyA9IChwcm9ncmVzc0RhdGE6IE9uUHJvZ3Jlc3NQYXJhbWV0ZXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWwgPSBwcm9ncmVzc0RhdGEubG9hZGVkIC8gcHJvZ3Jlc3NEYXRhLnRvdGFsO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1BlcmNlbnQgPSBNYXRoLnJvdW5kKGxldmVsICogMTAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuaXNQYW5lbERpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nVGFzay5wcm9taXNlXG4gICAgICAgICAgICAgICAgLnRoZW4oKHBkZkRvY3VtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IHBkZkRvY3VtZW50Lm51bVBhZ2VzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlQYWdlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0UERGVmlld2VyKHBkZkRvY3VtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmRG9jdW1lbnQuZ2V0UGFnZSgxKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjYWxlUGFnZSgnaW5pdCcpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLmVycm9yLmVtaXQoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2V0dXBQZGZKc1dvcmtlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMucGRmSnNXb3JrZXJJbnN0YW5jZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5kZXN0cm95UGZkSnNXb3JrZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5wZGZKc1dvcmtlclVybCkge1xuICAgICAgICAgICAgdGhpcy5wZGZKc1dvcmtlclVybCA9IGF3YWl0IHRoaXMuZ2V0UGRmSnNXb3JrZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBkZkpzV29ya2VySW5zdGFuY2UgPSBuZXcgV29ya2VyKHRoaXMucGRmSnNXb3JrZXJVcmwsIHsgdHlwZTogJ21vZHVsZScgfSk7XG4gICAgICAgIHRoaXMucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0ID0gdGhpcy5wZGZKc1dvcmtlckluc3RhbmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0UGRmSnNXb3JrZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnLi9wZGYud29ya2VyLm1pbi5tanMnKTtcbiAgICAgICAgY29uc3Qgd29ya2VyU2NyaXB0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3dvcmtlclNjcmlwdF0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnIH0pO1xuICAgICAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICB9XG5cbiAgICBpbml0UERGVmlld2VyKHBkZkRvY3VtZW50OiBQREZEb2N1bWVudFByb3h5KSB7XG4gICAgICAgIGNvbnN0IHZpZXdlcjogYW55ID0gdGhpcy5nZXRWaWV3ZXIoKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5nZXREb2N1bWVudENvbnRhaW5lcigpO1xuXG4gICAgICAgIGlmICh2aWV3ZXIgJiYgY29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnBkZlZpZXdlciA9IG5ldyB0aGlzLnBkZmpzVmlld2VyKHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICAgICAgdmlld2VyLFxuICAgICAgICAgICAgICAgIHJlbmRlcmluZ1F1ZXVlOiB0aGlzLnJlbmRlcmluZ1F1ZXVlU2VydmljZXMsXG4gICAgICAgICAgICAgICAgZXZlbnRCdXM6IHRoaXMuZXZlbnRCdXMsXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbk1vZGU6IDBcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBjc3BlbGw6IGRpc2FibGUtbmV4dFxuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5vbigncGFnZWNoYW5naW5nJywgdGhpcy5vblBhZ2VDaGFuZ2UpO1xuICAgICAgICAgICAgLy8gY3NwZWxsOiBkaXNhYmxlLW5leHRcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMub24oJ3BhZ2VzbG9hZGVkJywgdGhpcy5vblBhZ2VzTG9hZGVkKTtcbiAgICAgICAgICAgIC8vIGNzcGVsbDogZGlzYWJsZS1uZXh0XG4gICAgICAgICAgICB0aGlzLmV2ZW50QnVzLm9uKCd0ZXh0bGF5ZXJyZW5kZXJlZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZVJlbmRlcmVkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMub24oJ3BhZ2VyZW5kZXJlZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZVJlbmRlcmVkKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmdRdWV1ZVNlcnZpY2VzLnNldFZpZXdlcih0aGlzLnBkZlZpZXdlcik7XG4gICAgICAgICAgICB0aGlzLnBkZlZpZXdlci5zZXREb2N1bWVudChwZGZEb2N1bWVudCk7XG4gICAgICAgICAgICB0aGlzLnBkZlRodW1ibmFpbHNDb250ZXh0LnZpZXdlciA9IHRoaXMucGRmVmlld2VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnBkZlZpZXdlcikge1xuICAgICAgICAgICAgLy8gY3NwZWxsOiBkaXNhYmxlLW5leHRcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMub2ZmKCdwYWdlY2hhbmdpbmcnLCAoKSA9PiB7fSk7XG4gICAgICAgICAgICAvLyBjc3BlbGw6IGRpc2FibGUtbmV4dFxuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5vZmYoJ3BhZ2VzbG9hZGVkJywgKCkgPT4ge30pO1xuICAgICAgICAgICAgLy8gY3NwZWxsOiBkaXNhYmxlLW5leHRcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMub2ZmKCd0ZXh0bGF5ZXJyZW5kZXJlZCcsICgpID0+IHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmdUYXNrKSB7XG4gICAgICAgICAgICB0aGlzLnBkZmpzV29ya2VyRGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBkZmpzV29ya2VyRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZXZva2VQZGZKc1dvcmtlclVybCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZGVzdHJveVBmZEpzV29ya2VyKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nVGFzay5kZXN0cm95KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRpbmdUYXNrLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZGZKc1dvcmtlckluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnBkZkpzV29ya2VySW5zdGFuY2UudGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkaW5nVGFzayA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXZva2VQZGZKc1dvcmtlclVybCgpOiB2b2lkIHtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnBkZkpzV29ya2VyVXJsKTtcbiAgICB9XG5cbiAgICB0b2dnbGVUaHVtYm5haWxzKCkge1xuICAgICAgICB0aGlzLnNob3dUaHVtYm5haWxzID0gIXRoaXMuc2hvd1RodW1ibmFpbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRvIHNjYWxlIHRoZSBwYWdlIGN1cnJlbnQgc3VwcG9ydCBpbXBsZW1lbnRhdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHNjYWxlTW9kZSAtIG5ldyBzY2FsZSBtb2RlXG4gICAgICovXG4gICAgc2NhbGVQYWdlKHNjYWxlTW9kZTogUGRmU2NhbGVNb2RlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjYWxlTW9kZSA9IHNjYWxlTW9kZTtcblxuICAgICAgICBjb25zdCB2aWV3ZXJDb250YWluZXIgPSB0aGlzLmdldE1haW5Db250YWluZXIoKTtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRDb250YWluZXIgPSB0aGlzLmdldERvY3VtZW50Q29udGFpbmVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMucGRmVmlld2VyICYmIGRvY3VtZW50Q29udGFpbmVyKSB7XG4gICAgICAgICAgICBsZXQgd2lkdGhDb250YWluZXI6IG51bWJlcjtcbiAgICAgICAgICAgIGxldCBoZWlnaHRDb250YWluZXI6IG51bWJlcjtcblxuICAgICAgICAgICAgaWYgKHZpZXdlckNvbnRhaW5lciAmJiB2aWV3ZXJDb250YWluZXIuY2xpZW50V2lkdGggPD0gZG9jdW1lbnRDb250YWluZXIuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgICAgICB3aWR0aENvbnRhaW5lciA9IHZpZXdlckNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICBoZWlnaHRDb250YWluZXIgPSB2aWV3ZXJDb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aWR0aENvbnRhaW5lciA9IGRvY3VtZW50Q29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgIGhlaWdodENvbnRhaW5lciA9IGRvY3VtZW50Q29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLnBkZlZpZXdlci5fcGFnZXNbdGhpcy5wZGZWaWV3ZXIuX2N1cnJlbnRQYWdlTnVtYmVyIC0gMV07XG5cbiAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyMDtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VXaWR0aFNjYWxlID0gKCh3aWR0aENvbnRhaW5lciAtIHBhZGRpbmcpIC8gY3VycmVudFBhZ2Uud2lkdGgpICogY3VycmVudFBhZ2Uuc2NhbGU7XG4gICAgICAgICAgICBjb25zdCBwYWdlSGVpZ2h0U2NhbGUgPSAoKGhlaWdodENvbnRhaW5lciAtIHBhZGRpbmcpIC8gY3VycmVudFBhZ2Uud2lkdGgpICogY3VycmVudFBhZ2Uuc2NhbGU7XG5cbiAgICAgICAgICAgIGxldCBzY2FsZTogbnVtYmVyO1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRTY2FsZU1vZGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdpbml0JzpcbiAgICAgICAgICAgICAgICBjYXNlICdwYWdlLWZpdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSB0aGlzLmdldFVzZXJTY2FsaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gdGhpcy5hdXRvU2NhbGluZyhwYWdlSGVpZ2h0U2NhbGUsIHBhZ2VXaWR0aFNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAncGFnZS1hY3R1YWwnOiB7XG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2Utd2lkdGgnOiB7XG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gcGFnZVdpZHRoU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdwYWdlLWhlaWdodCc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBwYWdlSGVpZ2h0U2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdhdXRvJzoge1xuICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IHRoaXMuYXV0b1NjYWxpbmcocGFnZUhlaWdodFNjYWxlLCBwYWdlV2lkdGhTY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U2NhbGVVcGRhdGVQYWdlcyhzY2FsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGF1dG9TY2FsaW5nKHBhZ2VIZWlnaHRTY2FsZTogbnVtYmVyLCBwYWdlV2lkdGhTY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIGxldCBob3Jpem9udGFsU2NhbGU6IG51bWJlcjtcbiAgICAgICAgaWYgKHRoaXMuaXNMYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIGhvcml6b250YWxTY2FsZSA9IE1hdGgubWluKHBhZ2VIZWlnaHRTY2FsZSwgcGFnZVdpZHRoU2NhbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9yaXpvbnRhbFNjYWxlID0gcGFnZVdpZHRoU2NhbGU7XG4gICAgICAgIH1cbiAgICAgICAgaG9yaXpvbnRhbFNjYWxlID0gTWF0aC5yb3VuZChob3Jpem9udGFsU2NhbGUpO1xuICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgubWluKHRoaXMuTUFYX0FVVE9fU0NBTEUsIGhvcml6b250YWxTY2FsZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrUGFnZUZpdEluQ29udGFpbmVyKHNjYWxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1haW5Db250YWluZXIoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5yYW5kb21QZGZJZH0tdmlld2VyLW1haW4tY29udGFpbmVyYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREb2N1bWVudENvbnRhaW5lcigpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLnJhbmRvbVBkZklkfS12aWV3ZXItcGRmLXZpZXdlcmApIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Vmlld2VyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMucmFuZG9tUGRmSWR9LXZpZXdlci12aWV3ZXJQZGZgKTtcbiAgICB9XG5cbiAgICBjaGVja1BhZ2VGaXRJbkNvbnRhaW5lcihzY2FsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRDb250YWluZXJTaXplID0gdGhpcy5nZXREb2N1bWVudENvbnRhaW5lcigpO1xuICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5wZGZWaWV3ZXIuX3BhZ2VzW3RoaXMucGRmVmlld2VyLl9jdXJyZW50UGFnZU51bWJlciAtIDFdO1xuXG4gICAgICAgIGlmIChwYWdlLndpZHRoID4gZG9jdW1lbnRDb250YWluZXJTaXplLmNsaWVudFdpZHRoKSB7XG4gICAgICAgICAgICBzY2FsZSA9IE1hdGguZnJvdW5kKChkb2N1bWVudENvbnRhaW5lclNpemUuY2xpZW50V2lkdGggLSAyMCkgLyBwYWdlLndpZHRoKTtcbiAgICAgICAgICAgIGlmIChzY2FsZSA8IHRoaXMuTUlOX1NDQUxFKSB7XG4gICAgICAgICAgICAgICAgc2NhbGUgPSB0aGlzLk1JTl9TQ0FMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICBzZXREb2N1bWVudE92ZXJmbG93KCkge1xuICAgICAgICBjb25zdCBkb2N1bWVudENvbnRhaW5lclNpemUgPSB0aGlzLmdldERvY3VtZW50Q29udGFpbmVyKCk7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBkZlZpZXdlci5fcGFnZXNbdGhpcy5wZGZWaWV3ZXIuX2N1cnJlbnRQYWdlTnVtYmVyIC0gMV07XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudE92ZXJmbG93ID0gcGFnZS53aWR0aCA+IGRvY3VtZW50Q29udGFpbmVyU2l6ZS5jbGllbnRXaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYWxsIHRoZSBwYWdlcyB3aXRoIHRoZSBuZXdTY2FsZSBzY2FsZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1NjYWxlIC0gbmV3IHNjYWxlIHBhZ2VcbiAgICAgKi9cbiAgICBzZXRTY2FsZVVwZGF0ZVBhZ2VzKG5ld1NjYWxlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucGRmVmlld2VyKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTYW1lU2NhbGUodGhpcy5wZGZWaWV3ZXIuY3VycmVudFNjYWxlVmFsdWUsIG5ld1NjYWxlLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZGZWaWV3ZXIuY3VycmVudFNjYWxlVmFsdWUgPSBuZXdTY2FsZS50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wZGZWaWV3ZXIudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREb2N1bWVudE92ZXJmbG93KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHJlcXVlc3Qgc2NhbGUgb2YgdGhlIHBhZ2UgaXMgdGhlIHNhbWUgZm9yIGF2b2lkIHVzZWxlc3MgcmUtcmVuZGVyaW5nXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2xkU2NhbGUgLSBvbGQgc2NhbGUgcGFnZVxuICAgICAqIEBwYXJhbSBuZXdTY2FsZSAtIG5ldyBzY2FsZSBwYWdlXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzY2FsZSBpcyB0aGUgc2FtZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBpc1NhbWVTY2FsZShvbGRTY2FsZTogc3RyaW5nLCBuZXdTY2FsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBuZXdTY2FsZSA9PT0gb2xkU2NhbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgaXMgYSBsYW5kIHNjYXBlIHZpZXdcbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCB0YXJnZXQgd2lkdGhcbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHRhcmdldCBoZWlnaHRcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhcmdldCBpcyBpbiB0aGUgbGFuZHNjYXBlIG1vZGUsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgaXNMYW5kc2NhcGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHdpZHRoID4gaGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0cmlnZ2VyZWQgd2hlbiB0aGUgcGFnZSBpcyByZXNpemVkXG4gICAgICovXG4gICAgb25SZXNpemUoKSB7XG4gICAgICAgIHRoaXMuc2NhbGVQYWdlKHRoaXMuY3VycmVudFNjYWxlTW9kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdG9nZ2xlIHRoZSBmaXQgcGFnZSBwZGZcbiAgICAgKi9cbiAgICBwYWdlRml0KCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2NhbGVNb2RlICE9PSAncGFnZS1maXQnKSB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlUGFnZSgncGFnZS1maXQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGVQYWdlKCdhdXRvJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB6b29tIGluIHBhZ2UgcGRmXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGlja3MgbnVtYmVyIG9mIHRpY2tzIHRvIHpvb21cbiAgICAgKi9cbiAgICB6b29tSW4odGlja3M/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld1NjYWxlOiBhbnkgPSB0aGlzLnBkZlZpZXdlci5jdXJyZW50U2NhbGVWYWx1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgbmV3U2NhbGUgPSAobmV3U2NhbGUgKiB0aGlzLkRFRkFVTFRfU0NBTEVfREVMVEEpLnRvRml4ZWQoMik7XG4gICAgICAgICAgICBuZXdTY2FsZSA9IE1hdGguY2VpbChuZXdTY2FsZSAqIDEwKSAvIDEwO1xuICAgICAgICAgICAgbmV3U2NhbGUgPSBNYXRoLm1pbih0aGlzLk1BWF9TQ0FMRSwgbmV3U2NhbGUpO1xuICAgICAgICB9IHdoaWxlICgtLXRpY2tzID4gMCAmJiBuZXdTY2FsZSA8IHRoaXMuTUFYX1NDQUxFKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NhbGVNb2RlID0gJ2F1dG8nO1xuICAgICAgICB0aGlzLnNldFNjYWxlVXBkYXRlUGFnZXMobmV3U2NhbGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHpvb20gb3V0IHBhZ2UgcGRmXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGlja3MgbnVtYmVyIG9mIHRpY2tzIHRvIHNjYWxlXG4gICAgICovXG4gICAgem9vbU91dCh0aWNrcz86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgbmV3U2NhbGU6IGFueSA9IHRoaXMucGRmVmlld2VyLmN1cnJlbnRTY2FsZVZhbHVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBuZXdTY2FsZSA9IChuZXdTY2FsZSAvIHRoaXMuREVGQVVMVF9TQ0FMRV9ERUxUQSkudG9GaXhlZCgyKTtcbiAgICAgICAgICAgIG5ld1NjYWxlID0gTWF0aC5mbG9vcihuZXdTY2FsZSAqIDEwKSAvIDEwO1xuICAgICAgICAgICAgbmV3U2NhbGUgPSBNYXRoLm1heCh0aGlzLk1JTl9TQ0FMRSwgbmV3U2NhbGUpO1xuICAgICAgICB9IHdoaWxlICgtLXRpY2tzID4gMCAmJiBuZXdTY2FsZSA+IHRoaXMuTUlOX1NDQUxFKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NhbGVNb2RlID0gJ2F1dG8nO1xuICAgICAgICB0aGlzLnNldFNjYWxlVXBkYXRlUGFnZXMobmV3U2NhbGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGxvYWQgdGhlIHByZXZpb3VzIHBhZ2VcbiAgICAgKi9cbiAgICBwcmV2aW91c1BhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnBkZlZpZXdlciAmJiB0aGlzLnBhZ2UgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2UtLTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVBhZ2UgPSB0aGlzLnBhZ2U7XG5cbiAgICAgICAgICAgIHRoaXMucGRmVmlld2VyLmN1cnJlbnRQYWdlTnVtYmVyID0gdGhpcy5wYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9hZCB0aGUgbmV4dCBwYWdlXG4gICAgICovXG4gICAgbmV4dFBhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnBkZlZpZXdlciAmJiB0aGlzLnBhZ2UgPCB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZSsrO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5UGFnZSA9IHRoaXMucGFnZTtcblxuICAgICAgICAgICAgdGhpcy5wZGZWaWV3ZXIuY3VycmVudFBhZ2VOdW1iZXIgPSB0aGlzLnBhZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBsb2FkIHRoZSBwYWdlIGluIGlucHV0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFnZSB0byBsb2FkXG4gICAgICovXG4gICAgaW5wdXRQYWdlKHBhZ2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwYWdlSW5wdXQgPSBwYXJzZUludChwYWdlLCAxMCk7XG5cbiAgICAgICAgaWYgKCFpc05hTihwYWdlSW5wdXQpICYmIHBhZ2VJbnB1dCA+IDAgJiYgcGFnZUlucHV0IDw9IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlID0gcGFnZUlucHV0O1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5UGFnZSA9IHRoaXMucGFnZTtcbiAgICAgICAgICAgIHRoaXMucGRmVmlld2VyLmN1cnJlbnRQYWdlTnVtYmVyID0gdGhpcy5wYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5UGFnZSA9IHRoaXMucGFnZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZ2UgQ2hhbmdlIEV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgZXZlbnRcbiAgICAgKi9cbiAgICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnQuc291cmNlICYmIGV2ZW50LnNvdXJjZS5jb250YWluZXIuaWQgPT09IGAke3RoaXMucmFuZG9tUGRmSWR9LXZpZXdlci1wZGYtdmlld2VyYCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlID0gZXZlbnQucGFnZU51bWJlcjtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVBhZ2UgPSBldmVudC5wYWdlTnVtYmVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25QZGZQYXNzd29yZChjYWxsYmFjaywgcmVhc29uKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nXG4gICAgICAgICAgICAub3BlbihQZGZQYXNzd29yZERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgcmVhc29uIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocGFzc3dvcmQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZ2UgUmVuZGVyZWQgRXZlbnRcbiAgICAgKi9cbiAgICBvblBhZ2VSZW5kZXJlZCgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFnZXMgTG9hZGVkIEV2ZW50XG4gICAgICpcbiAgICAgKi9cbiAgICBvblBhZ2VzTG9hZGVkKCkge1xuICAgICAgICB0aGlzLmlzUGFuZWxEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2VzTG9hZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLZXlib2FyZCBFdmVudCBMaXN0ZW5lclxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IEtleWJvYXJkRXZlbnRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGU7XG4gICAgICAgIGlmIChrZXkgPT09IDM5KSB7XG4gICAgICAgICAgICAvLyByaWdodCBhcnJvd1xuICAgICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gMzcpIHtcbiAgICAgICAgICAgIC8vIGxlZnQgYXJyb3dcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWRmLXBkZi12aWV3ZXJfX2NvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGh1bWJuYWlsc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXBkZi12aWV3ZXJfX3RodW1ibmFpbHNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdGh1bWJuYWlscy10ZW1wbGF0ZV9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10aHVtYm5haWxzLXRlbXBsYXRlX19idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPSdhZGYtdGh1bWJuYWlscy1jbG9zZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlVGh1bWJuYWlscygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfVklFV0VSLkFSSUEuVEhVTUJOQUlMU19QQU5MRUxfQ0xPU0UnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBREZfVklFV0VSLkFDVElPTlMuQ0xPU0UnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aHVtYm5haWxzVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRodW1ibmFpbHNUZW1wbGF0ZTtjb250ZXh0OnBkZlRodW1ibmFpbHNDb250ZXh0XCIgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8YWRmLXBkZi10aHVtYm5haWxzICpuZ0lmPVwiIXRodW1ibmFpbHNUZW1wbGF0ZSAmJiAhaXNQYW5lbERpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJ0b2dnbGVUaHVtYm5haWxzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BkZlZpZXdlcl09XCJwZGZWaWV3ZXJcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImFkZi1wZGYtdmlld2VyX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgW2lkXT1cInJhbmRvbVBkZklkICsgJy12aWV3ZXItcGRmLXZpZXdlcidcIlxuICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXZpZXdlci1wZGYtdmlld2VyXCJcbiAgICAgICAgICAgICAod2luZG93OnJlc2l6ZSk9XCJvblJlc2l6ZSgpXCI+XG4gICAgICAgICAgICA8ZGl2IFtpZF09XCJyYW5kb21QZGZJZCArICctdmlld2VyLXZpZXdlclBkZidcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1wZGZWaWV3ZXIgcGRmVmlld2VyXCJcbiAgICAgICAgICAgICAgICAgcm9sZT1cImRvY3VtZW50XCJcbiAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibG9hZGVyLWNvbnRhaW5lclwiIGNsYXNzPVwiYWRmLWxvYWRlci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1sb2FkZXItaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgY2xhc3M9XCJhZGYtbG9hZGVyLWl0ZW0tcHJvZ3Jlc3MtYmFyXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYWRmLXBkZi12aWV3ZXJfX3Rvb2xiYXJcIiAqbmdJZj1cInNob3dUb29sYmFyXCIgW25nU3R5bGVdPVwiZG9jdW1lbnRPdmVyZmxvdyAmJiB7Ym90dG9tOiAnMjVweCd9XCI+XG4gICAgPGFkZi10b29sYmFyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbGxvd1RodW1ibmFpbHNcIj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9WSUVXRVIuQVJJQS5USFVNQk5BSUxTJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwic2hvd1RodW1ibmFpbHNcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtdGh1bWJuYWlscy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNQYW5lbERpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVRodW1ibmFpbHMoKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kYXNoYm9hcmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YWRmLXRvb2xiYXItZGl2aWRlciAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8YnV0dG9uIGlkPVwidmlld2VyLXByZXZpb3VzLXBhZ2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBREZfVklFV0VSLkFSSUEuUFJFVklPVVNfUEFHRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIGF0dHIuYXJpYS1sYWJlbD1cInt7ICdBREZfVklFV0VSLkFSSUEuUFJFVklPVVNfUEFHRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2aW91c1BhZ2UoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X3VwPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInZpZXdlci1uZXh0LXBhZ2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBREZfVklFV0VSLkFSSUEuTkVYVF9QQUdFJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwie3sgJ0FERl9WSUVXRVIuQVJJQS5ORVhUX1BBR0UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFBhZ2UoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXBkZi12aWV3ZXJfX3Rvb2xiYXItcGFnZS1zZWxlY3RvclwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBhZ2Utc2VsZWN0b3JcIj57eyAnQURGX1ZJRVdFUi5QQUdFX0xBQkVMLlNIT1dJTkcnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCAjcGFnZVxuICAgICAgICAgICAgICAgICAgIGlkPVwicGFnZS1zZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1wYWdlLXNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiLT9bMC05XSooXFwuWzAtOV0rKT9cIlxuICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgZGlzcGxheVBhZ2UgfX1cIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9WSUVXRVIuUEFHRV9MQUJFTC5QQUdFX1NFTEVDVE9SX0xBQkVMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImlucHV0UGFnZShwYWdlLnZhbHVlKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgJ0FERl9WSUVXRVIuUEFHRV9MQUJFTC5PRicgfCB0cmFuc2xhdGUgfX0ge3sgdG90YWxQYWdlcyB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1wZGYtdmlld2VyX190b29sYmFyLXBhZ2Utc2NhbGVcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtcGFnZS1zY2FsZVwiPlxuICAgICAgICAgICAge3sgY3VycmVudFNjYWxlVGV4dCB9fVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uIGlkPVwidmlld2VyLXpvb20taW4tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBREZfVklFV0VSLkFSSUEuWk9PTV9JTicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIGF0dHIuYXJpYS1sYWJlbD1cInt7ICdBREZfVklFV0VSLkFSSUEuWk9PTV9JTicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ6b29tSW4oKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPnpvb21faW48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIGlkPVwidmlld2VyLXpvb20tb3V0LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQURGX1ZJRVdFUi5BUklBLlpPT01fT1VUJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwie3sgJ0FERl9WSUVXRVIuQVJJQS5aT09NX09VVCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ6b29tT3V0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj56b29tX291dDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b24gaWQ9XCJ2aWV3ZXItc2NhbGUtcGFnZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIiBhcmlhLXByZXNzZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBREZfVklFV0VSLkFSSUEuRklUX1BBR0UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJ7eyAnQURGX1ZJRVdFUi5BUklBLkZJVF9QQUdFJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhZ2VGaXQoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPnpvb21fb3V0X21hcDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgPC9hZGYtdG9vbGJhcj5cbjwvZGl2PlxuIl19
|