@theseam/ui-common 0.4.28 → 0.4.30
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/breadcrumbs/breadcrumbs/breadcrumbs.component.scss +1 -1
- package/datatable/datatable/datatable.component.d.ts +61 -9
- package/datatable/datatable-column-filter-menu/datatable-column-filter-menu.component.d.ts +25 -0
- package/datatable/datatable-column-filter-search-date/datatable-column-filter-search-date.component.d.ts +18 -0
- package/datatable/datatable-column-filter-search-numeric/datatable-column-filter-search-numeric.component.d.ts +16 -0
- package/datatable/datatable-column-filter-search-text/datatable-column-filter-search-text.component.d.ts +15 -0
- package/datatable/datatable-menu-bar/datatable-menu-bar.component.d.ts +2 -2
- package/datatable/datatable.module.d.ts +29 -20
- package/datatable/directives/datatable-column-filter-tpl.directive.d.ts +8 -0
- package/datatable/directives/datatable-column-filter.directive.d.ts +10 -0
- package/datatable/models/action-item-column-position.d.ts +13 -0
- package/datatable/models/columns-data-filter.d.ts +57 -0
- package/datatable/models/columns-data-filters/models.d.ts +65 -0
- package/datatable/models/columns-data-filters/search-date.columns-data-filter.d.ts +23 -0
- package/datatable/models/columns-data-filters/search-numeric.columns-data-filter.d.ts +22 -0
- package/datatable/models/columns-data-filters/search-text.columns-data-filter.d.ts +21 -0
- package/datatable/models/columns-data-filters/utils.d.ts +15 -0
- package/datatable/models/datatable-config.d.ts +97 -0
- package/datatable/models/table-column.d.ts +22 -1
- package/datatable/public-api.d.ts +14 -0
- package/datatable/services/columns-filters.service.d.ts +29 -0
- package/datatable/services/columns-manager.service.d.ts +7 -0
- package/datatable/utils/create-action-menu-column.d.ts +1 -1
- package/esm2020/asset-reader/asset-reader-helper.service.mjs +4 -4
- package/esm2020/asset-reader/asset-reader.module.mjs +5 -5
- package/esm2020/asset-reader/encrypted-asset-link.directive.mjs +4 -4
- package/esm2020/breadcrumbs/breadcrumbs/breadcrumbs.component.mjs +5 -5
- package/esm2020/breadcrumbs/breadcrumbs.module.mjs +5 -5
- package/esm2020/breadcrumbs/breadcrumbs.service.mjs +4 -4
- package/esm2020/buttons/badge-button/badge-button.component.mjs +7 -7
- package/esm2020/buttons/button/button.component.mjs +10 -10
- package/esm2020/buttons/buttons.module.mjs +5 -5
- package/esm2020/buttons/progress-circle-button/progress-circle-button.component.mjs +4 -4
- package/esm2020/buttons/toggle-button/toggle-button.component.mjs +4 -4
- package/esm2020/card/card-action/card-action.component.mjs +4 -4
- package/esm2020/card/card-body/card-body.component.mjs +4 -4
- package/esm2020/card/card-footer/card-footer.component.mjs +4 -4
- package/esm2020/card/card-header/card-header.component.mjs +4 -4
- package/esm2020/card/card.component.mjs +4 -4
- package/esm2020/card/card.module.mjs +5 -5
- package/esm2020/carousel/carousel-slide.directive.mjs +4 -4
- package/esm2020/carousel/carousel.component.mjs +4 -4
- package/esm2020/carousel/carousel.module.mjs +5 -5
- package/esm2020/checkbox/checkbox.component.mjs +4 -4
- package/esm2020/checkbox/checkbox.module.mjs +5 -5
- package/esm2020/confirm-dialog/confirm-click.directive.mjs +4 -4
- package/esm2020/confirm-dialog/confirm-dialog.component.mjs +4 -4
- package/esm2020/confirm-dialog/confirm-dialog.module.mjs +5 -5
- package/esm2020/confirm-dialog/confirm-dialog.service.mjs +4 -4
- package/esm2020/data-exporter/data-exporter.module.mjs +5 -5
- package/esm2020/data-exporter/exporters/csv-exporter.mjs +4 -4
- package/esm2020/data-exporter/exporters/xlsx-exporter.mjs +4 -4
- package/esm2020/data-filters/data-filters.module.mjs +5 -5
- package/esm2020/data-filters/filters/data-filter-search/data-filter-search.component.mjs +4 -4
- package/esm2020/data-filters/filters/data-filter-text/data-filter-text.component.mjs +4 -4
- package/esm2020/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.mjs +4 -4
- package/esm2020/datatable/datatable/datatable.component.mjs +241 -32
- package/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +5 -5
- package/esm2020/datatable/datatable-action-menu-item/datatable-action-menu-item.component.mjs +4 -4
- package/esm2020/datatable/datatable-column/datatable-column.component.mjs +4 -4
- package/esm2020/datatable/datatable-column-filter-menu/datatable-column-filter-menu.component.mjs +55 -0
- package/esm2020/datatable/datatable-column-filter-search-date/datatable-column-filter-search-date.component.mjs +54 -0
- package/esm2020/datatable/datatable-column-filter-search-numeric/datatable-column-filter-search-numeric.component.mjs +48 -0
- package/esm2020/datatable/datatable-column-filter-search-text/datatable-column-filter-search-text.component.mjs +44 -0
- package/esm2020/datatable/datatable-column-preferences/datatable-column-preferences.component.mjs +4 -4
- package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +4 -4
- package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +4 -4
- package/esm2020/datatable/datatable-footer/datatable-footer-tpl.directive.mjs +4 -4
- package/esm2020/datatable/datatable-footer/datatable-footer.directive.mjs +4 -4
- package/esm2020/datatable/datatable-menu-bar/datatable-menu-bar.component.mjs +4 -4
- package/esm2020/datatable/datatable-menu-bar-column-center/datatable-menu-bar-column-center.component.mjs +4 -4
- package/esm2020/datatable/datatable-menu-bar-column-left/datatable-menu-bar-column-left.component.mjs +4 -4
- package/esm2020/datatable/datatable-menu-bar-column-right/datatable-menu-bar-column-right.component.mjs +4 -4
- package/esm2020/datatable/datatable-menu-bar-row/datatable-menu-bar-row.component.mjs +4 -4
- package/esm2020/datatable/datatable-menu-bar-text/datatable-menu-bar-text.component.mjs +4 -4
- package/esm2020/datatable/datatable-row-detail/datatable-row-detail-tpl.directive.mjs +4 -4
- package/esm2020/datatable/datatable-row-detail/datatable-row-detail.directive.mjs +4 -4
- package/esm2020/datatable/datatable.module.mjs +53 -11
- package/esm2020/datatable/directives/datatable-action-menu-item.directive.mjs +4 -4
- package/esm2020/datatable/directives/datatable-action-menu-toggle.directive.mjs +4 -4
- package/esm2020/datatable/directives/datatable-cell-tpl.directive.mjs +4 -4
- package/esm2020/datatable/directives/datatable-column-filter-tpl.directive.mjs +16 -0
- package/esm2020/datatable/directives/datatable-column-filter.directive.mjs +26 -0
- package/esm2020/datatable/directives/datatable-filter.directive.mjs +4 -4
- package/esm2020/datatable/directives/datatable-row-action-item.directive.mjs +4 -4
- package/esm2020/datatable/models/action-item-column-position.mjs +5 -0
- package/esm2020/datatable/models/columns-data-filter.mjs +10 -0
- package/esm2020/datatable/models/columns-data-filters/models.mjs +74 -0
- package/esm2020/datatable/models/columns-data-filters/search-date.columns-data-filter.mjs +113 -0
- package/esm2020/datatable/models/columns-data-filters/search-numeric.columns-data-filter.mjs +104 -0
- package/esm2020/datatable/models/columns-data-filters/search-text.columns-data-filter.mjs +86 -0
- package/esm2020/datatable/models/columns-data-filters/utils.mjs +28 -0
- package/esm2020/datatable/models/datatable-config.mjs +3 -0
- package/esm2020/datatable/models/table-column.mjs +1 -1
- package/esm2020/datatable/public-api.mjs +15 -1
- package/esm2020/datatable/services/columns-alterations-manager.service.mjs +4 -4
- package/esm2020/datatable/services/columns-filters.service.mjs +109 -0
- package/esm2020/datatable/services/columns-manager.service.mjs +30 -5
- package/esm2020/datatable/services/datatable-column-changes.service.mjs +4 -4
- package/esm2020/datatable/services/datatable-preferences.service.mjs +4 -4
- package/esm2020/datatable/services/datatable-scrollbar-helper.service.mjs +4 -4
- package/esm2020/datatable/utils/create-action-menu-column.mjs +4 -3
- package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +4 -4
- package/esm2020/datatable-dynamic/datatable-dynamic-filter-container/datatable-dynamic-filter-container.component.mjs +4 -4
- package/esm2020/datatable-dynamic/datatable-dynamic-menu-bar-content/datatable-dynamic-menu-bar-content.component.mjs +4 -4
- package/esm2020/datatable-dynamic/datatable-dynamic.component.mjs +5 -5
- package/esm2020/datatable-dynamic/datatable-dynamic.module.mjs +5 -5
- package/esm2020/datatable-dynamic/directives/datatable-dynamic-action-menu-item.directive.mjs +4 -4
- package/esm2020/datatable-dynamic/dynamic-datatable-def.service.mjs +4 -4
- package/esm2020/datatable-dynamic/dynamic-datatable-row-actions.service.mjs +4 -4
- package/esm2020/dynamic/action/api/dynamic-action-api.service.mjs +4 -4
- package/esm2020/dynamic/action/dynamic-action-helper.service.mjs +4 -4
- package/esm2020/dynamic/action/link/dynamic-action-link.service.mjs +4 -4
- package/esm2020/dynamic/action/modal/dynamic-action-modal.service.mjs +4 -4
- package/esm2020/dynamic/dynamic-value-helper.service.mjs +4 -4
- package/esm2020/dynamic/evaluators/exporters-data-evaluator/exporters-data-evaluator.mjs +4 -4
- package/esm2020/dynamic/evaluators/jexl-evaluator/jexl-evaluator.mjs +4 -4
- package/esm2020/dynamic-component-loader/dynamic-component-loader.module.mjs +5 -5
- package/esm2020/dynamic-component-loader/dynamic-component-loader.service.mjs +4 -4
- package/esm2020/footer-bar/footer-bar/footer-bar.component.mjs +4 -4
- package/esm2020/footer-bar/footer-bar.module.mjs +5 -5
- package/esm2020/form-field/form-field-error.directive.mjs +4 -4
- package/esm2020/form-field/form-field-help-text.directive.mjs +4 -4
- package/esm2020/form-field/form-field-label-tpl.directive.mjs +4 -4
- package/esm2020/form-field/form-field-required-indicator.component.mjs +4 -4
- package/esm2020/form-field/form-field.component.mjs +4 -4
- package/esm2020/form-field/form-field.module.mjs +5 -5
- package/esm2020/form-field/input.directive.mjs +4 -4
- package/esm2020/form-field-error/form-field-error/form-field-error.component.mjs +4 -4
- package/esm2020/form-field-error/form-field-error-list/form-field-error-list-item-tpl.directive.mjs +4 -4
- package/esm2020/form-field-error/form-field-error-list/form-field-error-list-item.directive.mjs +4 -4
- package/esm2020/form-field-error/form-field-error-list/form-field-error-list.component.mjs +4 -4
- package/esm2020/form-field-error/form-field-error.module.mjs +5 -5
- package/esm2020/framework/base-layout/base-layout.component.mjs +16 -6
- package/esm2020/framework/base-layout/base-layout.module.mjs +10 -5
- package/esm2020/framework/base-layout/directives/base-layout-content-footer.directive.mjs +4 -4
- package/esm2020/framework/base-layout/directives/base-layout-content-header.directive.mjs +4 -4
- package/esm2020/framework/base-layout/directives/base-layout-content.directive.mjs +4 -4
- package/esm2020/framework/base-layout/directives/base-layout-nav-toggle.directive.mjs +22 -6
- package/esm2020/framework/base-layout/directives/base-layout-side-bar-footer.directive.mjs +4 -4
- package/esm2020/framework/base-layout/directives/base-layout-side-bar-header.directive.mjs +16 -0
- package/esm2020/framework/base-layout/directives/base-layout-side-bar.directive.mjs +4 -4
- package/esm2020/framework/base-layout/directives/base-layout-top-bar.directive.mjs +4 -4
- package/esm2020/framework/base-layout/index.mjs +2 -1
- package/esm2020/framework/dashboard/dashboard-widget-container/dashboard-widget-container.component.mjs +4 -4
- package/esm2020/framework/dashboard/dashboard-widget-template-container/dashboard-widget-template-container.component.mjs +4 -4
- package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widget-portal-outlet.directive.mjs +4 -4
- package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets-preferences.service.mjs +4 -4
- package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets.component.mjs +4 -4
- package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets.service.mjs +4 -4
- package/esm2020/framework/dashboard/dashboard.component.mjs +4 -4
- package/esm2020/framework/dashboard/dashboard.module.mjs +5 -5
- package/esm2020/framework/dynamic-router/dynamic-router.module.mjs +5 -5
- package/esm2020/framework/dynamic-router/hierarchy-router-outlet/hierarchy-router-outlet.component.mjs +4 -4
- package/esm2020/framework/dynamic-router/resolvers/hierarchy-level.resolver.mjs +4 -4
- package/esm2020/framework/nav/horizontal-nav/horizontal-nav.component.mjs +55 -0
- package/esm2020/framework/nav/index.mjs +6 -0
- package/esm2020/framework/nav/nav-item/nav-item.component.mjs +227 -0
- package/esm2020/framework/nav/nav-utils.mjs +107 -0
- package/esm2020/framework/nav/nav.models.mjs +2 -0
- package/esm2020/framework/nav/nav.module.mjs +67 -0
- package/esm2020/framework/nav/nav.service.mjs +204 -0
- package/esm2020/framework/public-api.mjs +2 -1
- package/esm2020/framework/schema-form/schema-form-framework.component.mjs +4 -4
- package/esm2020/framework/schema-form/schema-form-framework.mjs +4 -4
- package/esm2020/framework/schema-form/schema-form.module.mjs +5 -5
- package/esm2020/framework/schema-form-controls/schema-form-checkbox/schema-form-checkbox.component.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-divider/schema-form-divider.component.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-input/schema-form-input.component.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-number/schema-form-number.component.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-select/schema-form-select.component.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-submit/schema-form-submit.component.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-tel/schema-form-tel.component.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-tiled-select/schema-form-tiled-select.component.mjs +4 -4
- package/esm2020/framework/side-nav/side-nav-item/side-nav-item.component.mjs +29 -68
- package/esm2020/framework/side-nav/side-nav-toggle/side-nav-toggle.component.mjs +14 -7
- package/esm2020/framework/side-nav/side-nav.component.mjs +117 -39
- package/esm2020/framework/side-nav/side-nav.models.mjs +1 -1
- package/esm2020/framework/side-nav/side-nav.module.mjs +11 -41
- package/esm2020/framework/side-nav/side-nav.service.mjs +4 -4
- package/esm2020/framework/top-bar/index.mjs +3 -1
- package/esm2020/framework/top-bar/top-bar-compact-menu-btn-detail.directive.mjs +16 -0
- package/esm2020/framework/top-bar/top-bar-item.directive.mjs +12 -6
- package/esm2020/framework/top-bar/top-bar-menu-btn-detail.directive.mjs +4 -4
- package/esm2020/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.mjs +8 -6
- package/esm2020/framework/top-bar/top-bar-menu.directive.mjs +4 -4
- package/esm2020/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.mjs +16 -0
- package/esm2020/framework/top-bar/top-bar-title/top-bar-title.component.mjs +4 -4
- package/esm2020/framework/top-bar/top-bar.component.mjs +57 -13
- package/esm2020/framework/top-bar/top-bar.module.mjs +19 -9
- package/esm2020/google-maps/google-maps/google-maps.component.mjs +4 -4
- package/esm2020/google-maps/google-maps-api-loader/lazy-google-maps-api-loader.mjs +4 -4
- package/esm2020/google-maps/google-maps-api-loader/noop-google-maps-api-loader.mjs +4 -4
- package/esm2020/google-maps/google-maps-controls.service.mjs +4 -4
- package/esm2020/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.mjs +5 -5
- package/esm2020/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.directive.mjs +4 -4
- package/esm2020/google-maps/google-maps-recenter-button-control/google-maps-recenter-button-control.component.mjs +4 -4
- package/esm2020/google-maps/google-maps-upload-button-control/google-maps-upload-button-control.component.mjs +4 -4
- package/esm2020/google-maps/google-maps.module.mjs +5 -5
- package/esm2020/google-maps/google-maps.service.mjs +4 -4
- package/esm2020/google-maps/map-control.component.mjs +4 -4
- package/esm2020/google-maps/map-file-drop/map-file-drop.component.mjs +4 -4
- package/esm2020/google-maps/map-value-manager.service.mjs +4 -4
- package/esm2020/graphql/datatable/datatable-graphql.service.mjs +4 -4
- package/esm2020/graphql/datatable/index.mjs +4 -1
- package/esm2020/graphql/datatable/map-filter-states.mjs +1 -1
- package/esm2020/graphql/datatable/map-search-date-columns-data-filter-state-to-gql.mjs +139 -0
- package/esm2020/graphql/datatable/map-search-numeric-columns-data-filter-state-to-gql.mjs +75 -0
- package/esm2020/graphql/datatable/map-search-text-columns-data-filter-state-to-gql.mjs +44 -0
- package/esm2020/icon/icon/icon.component.mjs +4 -4
- package/esm2020/icon/icon-btn/icon-btn.component.mjs +4 -4
- package/esm2020/icon/icon-notification/icon-notification.component.mjs +4 -4
- package/esm2020/icon/icon.module.mjs +5 -5
- package/esm2020/layout/layout.module.mjs +5 -5
- package/esm2020/layout/layout.service.mjs +15 -5
- package/esm2020/loading/loading/loading.component.mjs +4 -4
- package/esm2020/loading/loading-overlay.service.mjs +4 -4
- package/esm2020/loading/loading.module.mjs +5 -5
- package/esm2020/menu/menu-divider.component.mjs +4 -4
- package/esm2020/menu/menu-footer/menu-footer.component.mjs +4 -4
- package/esm2020/menu/menu-footer-action/menu-footer-action.component.mjs +4 -4
- package/esm2020/menu/menu-header/menu-header.component.mjs +4 -4
- package/esm2020/menu/menu-item.component.mjs +4 -4
- package/esm2020/menu/menu-toggle.directive.mjs +9 -4
- package/esm2020/menu/menu.component.mjs +4 -4
- package/esm2020/menu/menu.module.mjs +5 -5
- package/esm2020/modal/directives/modal-close.directive.mjs +4 -4
- package/esm2020/modal/directives/modal-footer-tpl.directive.mjs +4 -4
- package/esm2020/modal/directives/modal-header-icon-tpl.directive.mjs +4 -4
- package/esm2020/modal/directives/modal-header-title-tpl.directive.mjs +4 -4
- package/esm2020/modal/directives/modal-title.directive.mjs +4 -4
- package/esm2020/modal/directives/modal.directive.mjs +4 -4
- package/esm2020/modal/modal/modal.component.mjs +4 -4
- package/esm2020/modal/modal-body/modal-body.component.mjs +4 -4
- package/esm2020/modal/modal-container/modal-container.component.mjs +4 -4
- package/esm2020/modal/modal-footer/modal-footer.component.mjs +4 -4
- package/esm2020/modal/modal-header/modal-header.component.mjs +4 -4
- package/esm2020/modal/modal.module.mjs +5 -5
- package/esm2020/modal/modal.service.mjs +4 -4
- package/esm2020/modal/route-modal/route-modal.component.mjs +4 -4
- package/esm2020/navigation-reload/navigation-reload.service.mjs +5 -5
- package/esm2020/popover/popover/popover.component.mjs +9 -5
- package/esm2020/popover/popover.directive.mjs +8 -4
- package/esm2020/popover/popover.module.mjs +5 -5
- package/esm2020/progress/progress-circle/progress-circle.component.mjs +4 -4
- package/esm2020/progress/progress.module.mjs +5 -5
- package/esm2020/rich-text/rich-text/rich-text.component.mjs +4 -4
- package/esm2020/rich-text/rich-text.module.mjs +5 -5
- package/esm2020/scrollbar/overlay-scrollbar.directive.mjs +4 -4
- package/esm2020/scrollbar/overlay-scrollbars.service.mjs +4 -4
- package/esm2020/scrollbar/scrollbar.module.mjs +5 -5
- package/esm2020/services/asset-loader.service.mjs +4 -4
- package/esm2020/services/font-loader.service.mjs +4 -4
- package/esm2020/services/preferences/preferences-manager.service.mjs +4 -4
- package/esm2020/services/router-helpers.service.mjs +4 -4
- package/esm2020/shared/components/password-input-reveal/password-input-reveal.component.mjs +4 -4
- package/esm2020/shared/directives/auto-focus.directive.mjs +4 -4
- package/esm2020/shared/directives/click-outside.directive.mjs +4 -4
- package/esm2020/shared/directives/disable-control.directive.mjs +4 -4
- package/esm2020/shared/directives/elem-resized.directive.mjs +4 -4
- package/esm2020/shared/directives/hover-class-toggle.directive.mjs +4 -4
- package/esm2020/shared/directives/hover-class.directive.mjs +4 -4
- package/esm2020/shared/directives/ng-select-extra.directive.mjs +4 -4
- package/esm2020/shared/directives/ngx-quill-extra.directive.mjs +4 -4
- package/esm2020/shared/pipes/mask-chars.pipe.mjs +4 -4
- package/esm2020/shared/pipes/truncate.pipe.mjs +4 -4
- package/esm2020/shared/shared.module.mjs +5 -5
- package/esm2020/storage/local-storage.service.mjs +4 -4
- package/esm2020/story-helpers/initial-route.service.mjs +4 -4
- package/esm2020/story-helpers/story-empty-with-route.component.mjs +4 -4
- package/esm2020/story-helpers/story-empty.component.mjs +4 -4
- package/esm2020/story-helpers/story-helper-components.module.mjs +5 -5
- package/esm2020/story-helpers/story-initial-route.mjs +5 -5
- package/esm2020/story-helpers/story-modal-container.component.mjs +4 -4
- package/esm2020/story-helpers/story-preferences-accessor.service.mjs +4 -4
- package/esm2020/story-helpers/story-toastr.service.mjs +4 -4
- package/esm2020/tabbed/directives/tabbed-tab-content.directive.mjs +4 -4
- package/esm2020/tabbed/directives/tabbed-tab.directive.mjs +4 -4
- package/esm2020/tabbed/tabbed-content/tabbed-content.component.mjs +4 -4
- package/esm2020/tabbed/tabbed-item/tabbed-item.component.mjs +4 -4
- package/esm2020/tabbed/tabbed.component.mjs +4 -4
- package/esm2020/tabbed/tabbed.module.mjs +5 -5
- package/esm2020/tabbed/tabbed.service.mjs +4 -4
- package/esm2020/table/public-api.mjs +4 -1
- package/esm2020/table/table/table.component.mjs +92 -7
- package/esm2020/table/table-cell-tpl.directive.mjs +17 -0
- package/esm2020/table/table-column-header-tpl.directive.mjs +17 -0
- package/esm2020/table/table-column.component.mjs +68 -0
- package/esm2020/table/table.module.mjs +25 -9
- package/esm2020/table-cell-type/services/table-cell-types-helpers.service.mjs +4 -4
- package/esm2020/table-cell-type/table-cell-type-selector.component.mjs +4 -4
- package/esm2020/table-cell-type/table-cell-type.module.mjs +5 -5
- package/esm2020/table-cell-types/table-cell-type-currency/table-cell-type-currency.component.mjs +4 -4
- package/esm2020/table-cell-types/table-cell-type-date/table-cell-type-date.component.mjs +4 -4
- package/esm2020/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.component.mjs +4 -4
- package/esm2020/table-cell-types/table-cell-type-icon/table-cell-type-icon.component.mjs +4 -4
- package/esm2020/table-cell-types/table-cell-type-integer/table-cell-type-integer.component.mjs +4 -4
- package/esm2020/table-cell-types/table-cell-type-phone/table-cell-type-phone.component.mjs +4 -4
- package/esm2020/table-cell-types/table-cell-type-progress-circle/table-cell-type-progress-circle.component.mjs +4 -4
- package/esm2020/table-cell-types/table-cell-type-progress-circle-icon/table-cell-type-progress-circle-icon.component.mjs +4 -4
- package/esm2020/table-cell-types/table-cell-type-string/table-cell-type-string.component.mjs +7 -5
- package/esm2020/table-cell-types/table-cell-types.module.mjs +5 -5
- package/esm2020/tel-input/phone-number.pipe.mjs +4 -4
- package/esm2020/tel-input/tel-input/tel-input.component.mjs +4 -4
- package/esm2020/tel-input/tel-input.directive.mjs +4 -4
- package/esm2020/tel-input/tel-input.module.mjs +5 -5
- package/esm2020/tiled-select/components/tiled-select/tiled-select.component.mjs +4 -4
- package/esm2020/tiled-select/components/tiled-select-tile/tiled-select-tile.component.mjs +4 -4
- package/esm2020/tiled-select/components/tiled-select-tile-icon/tiled-select-tile-icon.component.mjs +4 -4
- package/esm2020/tiled-select/directives/tiled-select-tile-icon-tpl.directive.mjs +4 -4
- package/esm2020/tiled-select/directives/tiled-select-tile-label-tpl.directive.mjs +4 -4
- package/esm2020/tiled-select/directives/tiled-select-tile-overlay.directive.mjs +4 -4
- package/esm2020/tiled-select/tiled-select.module.mjs +5 -5
- package/esm2020/toggle-edit/toggle-edit-actions-container/toggle-edit-actions-container.component.mjs +4 -4
- package/esm2020/toggle-edit/toggle-edit-display-tpl.directive.mjs +4 -4
- package/esm2020/toggle-edit/toggle-edit-keyboard-listener.service.mjs +4 -4
- package/esm2020/toggle-edit/toggle-edit.component.mjs +4 -4
- package/esm2020/toggle-edit/toggle-edit.module.mjs +5 -5
- package/esm2020/toggle-group/toggle-group-option.directive.mjs +4 -4
- package/esm2020/toggle-group/toggle-group.directive.mjs +4 -4
- package/esm2020/toggle-group/toggle-group.module.mjs +5 -5
- package/esm2020/unsaved-changes-dialog/unsaved-changes-can-deactivate.mjs +4 -4
- package/esm2020/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +4 -4
- package/esm2020/unsaved-changes-dialog/unsaved-changes-dialog.guard.mjs +4 -4
- package/esm2020/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +5 -5
- package/esm2020/utils/geo-json/coerce-feature-collection.mjs +1 -1
- package/esm2020/utils/geo-json/is-feature-collection.validator.mjs +1 -1
- package/esm2020/utils/geo-json/is-only-geometry-types.mjs +1 -1
- package/esm2020/utils/geo-json/merge-polygons.mjs +1 -1
- package/esm2020/utils/geo-json/no-inner-rings.validator.mjs +1 -1
- package/esm2020/utils/geo-json/split-multi-polygons.mjs +1 -1
- package/esm2020/vertical-list-filter/vertical-list-filter.component.mjs +4 -4
- package/esm2020/viewers/html-template-viewer/html-template-viewer.component.mjs +4 -4
- package/esm2020/viewers/html-template-viewer/html-template-viewer.module.mjs +5 -5
- package/esm2020/viewers/pdf-viewer/pdf-page/pdf-page.component.mjs +4 -4
- package/esm2020/viewers/pdf-viewer/pdf-renderer.service.mjs +4 -4
- package/esm2020/viewers/pdf-viewer/pdf-viewer.component.mjs +4 -4
- package/esm2020/viewers/pdf-viewer/pdf-viewer.module.mjs +5 -5
- package/esm2020/widget/directives/widget-drag-handle.directive.mjs +4 -4
- package/esm2020/widget/directives/widget-icon-tpl.directive.mjs +4 -4
- package/esm2020/widget/directives/widget-title-tpl.directive.mjs +4 -4
- package/esm2020/widget/preferences/widget-preferences.service.mjs +4 -4
- package/esm2020/widget/widget/widget.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-button-group/widget-button-group.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-button-group/widget-button-group.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-content-header/widget-content-header.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-content-header/widget-content-header.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-description/widget-description.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-description/widget-description.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-empty-label/widget-empty-label.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-empty-label/widget-empty-label.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-footer-link/widget-footer-link.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-footer-link/widget-footer-link.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-footer-text/widget-footer-text.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-footer-text/widget-footer-text.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-header-badge/widget-header-badge.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-header-badge/widget-header-badge.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group-item/widget-list-group-item-icon-tpl.directive.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group-item/widget-list-group-item.component.mjs +16 -16
- package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-table/widget-table.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-table/widget-table.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile-footer/widget-tile-footer.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile-footer-item/widget-tile-footer-item.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile-group/widget-tile-group.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile-secondary-icon.directive.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile.component.mjs +7 -7
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile.module.mjs +5 -5
- package/esm2020/widget/widget-content-components/widget-tile-list/widget-tile-list.component.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-tile-list/widget-tile-list.module.mjs +5 -5
- package/esm2020/widget/widget-footer/widget-footer.component.mjs +4 -4
- package/esm2020/widget/widget-registry.service.mjs +4 -4
- package/esm2020/widget/widget.module.mjs +5 -5
- package/fesm2015/theseam-ui-common-asset-reader.mjs +10 -10
- package/fesm2015/theseam-ui-common-asset-reader.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-breadcrumbs.mjs +11 -11
- package/fesm2015/theseam-ui-common-breadcrumbs.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-buttons.mjs +25 -25
- package/fesm2015/theseam-ui-common-buttons.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-card.mjs +19 -19
- package/fesm2015/theseam-ui-common-card.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-carousel.mjs +10 -10
- package/fesm2015/theseam-ui-common-carousel.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-checkbox.mjs +7 -7
- package/fesm2015/theseam-ui-common-checkbox.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-confirm-dialog.mjs +13 -13
- package/fesm2015/theseam-ui-common-confirm-dialog.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-data-exporter.mjs +10 -10
- package/fesm2015/theseam-ui-common-data-exporter.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-data-filters.mjs +13 -13
- package/fesm2015/theseam-ui-common-data-filters.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +26 -26
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable.mjs +1112 -139
- package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-dynamic-component-loader.mjs +7 -7
- package/fesm2015/theseam-ui-common-dynamic-component-loader.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-dynamic.mjs +21 -21
- package/fesm2015/theseam-ui-common-dynamic.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-footer-bar.mjs +7 -7
- package/fesm2015/theseam-ui-common-footer-bar.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-form-field-error.mjs +16 -16
- package/fesm2015/theseam-ui-common-form-field-error.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-form-field.mjs +22 -22
- package/fesm2015/theseam-ui-common-form-field.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-framework.mjs +1026 -277
- package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-google-maps.mjs +41 -41
- package/fesm2015/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-graphql.mjs +257 -4
- package/fesm2015/theseam-ui-common-graphql.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-icon.mjs +13 -13
- package/fesm2015/theseam-ui-common-icon.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-layout.mjs +18 -9
- package/fesm2015/theseam-ui-common-layout.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-loading.mjs +10 -10
- package/fesm2015/theseam-ui-common-loading.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-menu.mjs +30 -25
- package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-modal.mjs +43 -43
- package/fesm2015/theseam-ui-common-modal.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-navigation-reload.mjs +4 -4
- package/fesm2015/theseam-ui-common-navigation-reload.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-popover.mjs +19 -11
- package/fesm2015/theseam-ui-common-popover.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-progress.mjs +7 -7
- package/fesm2015/theseam-ui-common-progress.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-rich-text.mjs +7 -7
- package/fesm2015/theseam-ui-common-rich-text.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-scrollbar.mjs +10 -10
- package/fesm2015/theseam-ui-common-scrollbar.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-services.mjs +12 -12
- package/fesm2015/theseam-ui-common-services.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-shared.mjs +37 -37
- package/fesm2015/theseam-ui-common-shared.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-storage.mjs +3 -3
- package/fesm2015/theseam-ui-common-storage.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-story-helpers.mjs +26 -26
- package/fesm2015/theseam-ui-common-story-helpers.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-tabbed.mjs +22 -22
- package/fesm2015/theseam-ui-common-tabbed.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-table-cell-type.mjs +10 -10
- package/fesm2015/theseam-ui-common-table-cell-type.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-table-cell-types.mjs +34 -32
- package/fesm2015/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-table.mjs +207 -15
- package/fesm2015/theseam-ui-common-table.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-tel-input.mjs +13 -13
- package/fesm2015/theseam-ui-common-tel-input.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-tiled-select.mjs +22 -22
- package/fesm2015/theseam-ui-common-tiled-select.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-toggle-edit.mjs +16 -16
- package/fesm2015/theseam-ui-common-toggle-edit.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-toggle-group.mjs +10 -10
- package/fesm2015/theseam-ui-common-toggle-group.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-unsaved-changes-dialog.mjs +13 -13
- package/fesm2015/theseam-ui-common-unsaved-changes-dialog.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-vertical-list-filter.mjs +3 -3
- package/fesm2015/theseam-ui-common-vertical-list-filter.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-viewers.mjs +20 -20
- package/fesm2015/theseam-ui-common-viewers.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-widget.mjs +135 -135
- package/fesm2015/theseam-ui-common-widget.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-asset-reader.mjs +10 -10
- package/fesm2020/theseam-ui-common-asset-reader.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-breadcrumbs.mjs +11 -11
- package/fesm2020/theseam-ui-common-breadcrumbs.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-buttons.mjs +25 -25
- package/fesm2020/theseam-ui-common-buttons.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-card.mjs +19 -19
- package/fesm2020/theseam-ui-common-card.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-carousel.mjs +10 -10
- package/fesm2020/theseam-ui-common-carousel.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-checkbox.mjs +7 -7
- package/fesm2020/theseam-ui-common-checkbox.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-confirm-dialog.mjs +13 -13
- package/fesm2020/theseam-ui-common-confirm-dialog.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-data-exporter.mjs +10 -10
- package/fesm2020/theseam-ui-common-data-exporter.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-data-filters.mjs +13 -13
- package/fesm2020/theseam-ui-common-data-filters.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +26 -26
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable.mjs +1096 -139
- package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-dynamic-component-loader.mjs +7 -7
- package/fesm2020/theseam-ui-common-dynamic-component-loader.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-dynamic.mjs +21 -21
- package/fesm2020/theseam-ui-common-dynamic.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-footer-bar.mjs +7 -7
- package/fesm2020/theseam-ui-common-footer-bar.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-form-field-error.mjs +16 -16
- package/fesm2020/theseam-ui-common-form-field-error.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-form-field.mjs +22 -22
- package/fesm2020/theseam-ui-common-form-field.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-framework.mjs +1028 -277
- package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-google-maps.mjs +41 -41
- package/fesm2020/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-graphql.mjs +257 -4
- package/fesm2020/theseam-ui-common-graphql.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-icon.mjs +13 -13
- package/fesm2020/theseam-ui-common-icon.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-layout.mjs +18 -9
- package/fesm2020/theseam-ui-common-layout.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-loading.mjs +10 -10
- package/fesm2020/theseam-ui-common-loading.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-menu.mjs +30 -25
- package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-modal.mjs +43 -43
- package/fesm2020/theseam-ui-common-modal.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-navigation-reload.mjs +4 -4
- package/fesm2020/theseam-ui-common-navigation-reload.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-popover.mjs +19 -11
- package/fesm2020/theseam-ui-common-popover.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-progress.mjs +7 -7
- package/fesm2020/theseam-ui-common-progress.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-rich-text.mjs +7 -7
- package/fesm2020/theseam-ui-common-rich-text.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-scrollbar.mjs +10 -10
- package/fesm2020/theseam-ui-common-scrollbar.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-services.mjs +12 -12
- package/fesm2020/theseam-ui-common-services.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-shared.mjs +37 -37
- package/fesm2020/theseam-ui-common-shared.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-storage.mjs +3 -3
- package/fesm2020/theseam-ui-common-storage.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-story-helpers.mjs +26 -26
- package/fesm2020/theseam-ui-common-story-helpers.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-tabbed.mjs +22 -22
- package/fesm2020/theseam-ui-common-tabbed.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-table-cell-type.mjs +10 -10
- package/fesm2020/theseam-ui-common-table-cell-type.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-table-cell-types.mjs +34 -32
- package/fesm2020/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-table.mjs +205 -15
- package/fesm2020/theseam-ui-common-table.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-tel-input.mjs +13 -13
- package/fesm2020/theseam-ui-common-tel-input.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-tiled-select.mjs +22 -22
- package/fesm2020/theseam-ui-common-tiled-select.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-toggle-edit.mjs +16 -16
- package/fesm2020/theseam-ui-common-toggle-edit.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-toggle-group.mjs +10 -10
- package/fesm2020/theseam-ui-common-toggle-group.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-unsaved-changes-dialog.mjs +13 -13
- package/fesm2020/theseam-ui-common-unsaved-changes-dialog.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-vertical-list-filter.mjs +3 -3
- package/fesm2020/theseam-ui-common-vertical-list-filter.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-viewers.mjs +20 -20
- package/fesm2020/theseam-ui-common-viewers.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-widget.mjs +135 -135
- package/fesm2020/theseam-ui-common-widget.mjs.map +1 -1
- package/framework/base-layout/base-layout.component.d.ts +4 -2
- package/framework/base-layout/base-layout.component.scss +18 -10
- package/framework/base-layout/base-layout.module.d.ts +11 -10
- package/framework/base-layout/directives/base-layout-nav-toggle.directive.d.ts +8 -3
- package/framework/base-layout/directives/base-layout-side-bar-header.directive.d.ts +9 -0
- package/framework/base-layout/index.d.ts +1 -0
- package/framework/base-layout/styles/_variables.scss +21 -0
- package/framework/nav/_nav-theme.scss +4 -0
- package/framework/nav/horizontal-nav/horizontal-nav.component.d.ts +25 -0
- package/framework/nav/horizontal-nav/horizontal-nav.component.scss +50 -0
- package/framework/nav/index.d.ts +5 -0
- package/framework/nav/nav-item/nav-item.component.d.ts +74 -0
- package/framework/nav/nav-item/nav-item.component.scss +203 -0
- package/framework/nav/nav-utils.d.ts +20 -0
- package/framework/nav/nav.models.d.ts +77 -0
- package/framework/nav/nav.module.d.ts +17 -0
- package/framework/nav/nav.service.d.ts +27 -0
- package/framework/nav/styles/_themes/light/_variables.scss +56 -0
- package/framework/nav/styles/_themes/primary/_variables.scss +56 -0
- package/framework/nav/styles/_utilities.scss +3 -0
- package/framework/nav/styles/_variables.scss +2 -0
- package/framework/public-api.d.ts +1 -0
- package/framework/side-nav/side-nav-item/side-nav-item.component.d.ts +7 -14
- package/framework/side-nav/side-nav-item/side-nav-item.component.scss +7 -5
- package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.d.ts +5 -3
- package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.scss +3 -6
- package/framework/side-nav/side-nav.component.d.ts +13 -1
- package/framework/side-nav/side-nav.component.scss +0 -1
- package/framework/side-nav/side-nav.models.d.ts +7 -1
- package/framework/side-nav/side-nav.module.d.ts +1 -9
- package/framework/side-nav/styles/_themes/light/_variables.scss +24 -14
- package/framework/side-nav/styles/_themes/primary/_variables.scss +8 -0
- package/framework/top-bar/index.d.ts +2 -0
- package/framework/top-bar/top-bar-compact-menu-btn-detail.directive.d.ts +8 -0
- package/framework/top-bar/top-bar-item.directive.d.ts +4 -1
- package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.d.ts +5 -2
- package/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.d.ts +8 -0
- package/framework/top-bar/top-bar.component.d.ts +25 -3
- package/framework/top-bar/top-bar.component.scss +7 -2
- package/framework/top-bar/top-bar.module.d.ts +10 -8
- package/graphql/datatable/datatable-graphql.service.d.ts +1 -1
- package/graphql/datatable/index.d.ts +3 -0
- package/graphql/datatable/map-filter-states.d.ts +2 -2
- package/graphql/datatable/map-search-date-columns-data-filter-state-to-gql.d.ts +4 -0
- package/graphql/datatable/map-search-numeric-columns-data-filter-state-to-gql.d.ts +4 -0
- package/graphql/datatable/map-search-text-columns-data-filter-state-to-gql.d.ts +4 -0
- package/layout/layout.service.d.ts +9 -1
- package/menu/menu-toggle.directive.d.ts +2 -1
- package/package.json +3 -3
- package/popover/popover/popover.component.d.ts +4 -1
- package/popover/popover.directive.d.ts +2 -1
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +83 -14
- package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +38 -3
- package/table/public-api.d.ts +3 -0
- package/table/table/table.component.d.ts +21 -3
- package/table/table-cell-tpl.directive.d.ts +7 -0
- package/table/table-column-header-tpl.directive.d.ts +7 -0
- package/table/table-column.component.d.ts +24 -0
- package/table/table.module.d.ts +4 -1
|
@@ -2,14 +2,14 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { animate, style, transition, trigger } from '@angular/animations';
|
|
3
3
|
import { coerceArray } from '@angular/cdk/coercion';
|
|
4
4
|
import { isDataSource } from '@angular/cdk/collections';
|
|
5
|
-
import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, HostListener, InjectionToken, Input, isDevMode, Output, ViewChild } from '@angular/core';
|
|
6
|
-
import { BehaviorSubject, from, isObservable, of, Subject, Subscription } from 'rxjs';
|
|
5
|
+
import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, HostListener, Inject, InjectionToken, Input, isDevMode, Optional, Output, ViewChild } from '@angular/core';
|
|
6
|
+
import { BehaviorSubject, combineLatest, from, isObservable, of, Subject, Subscription } from 'rxjs';
|
|
7
7
|
import { concatMap, distinctUntilChanged, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';
|
|
8
|
-
import { faChevronDown, faChevronRight, faSpinner } from '@fortawesome/free-solid-svg-icons';
|
|
8
|
+
import { faChevronDown, faChevronRight, faFilter, faSpinner } from '@fortawesome/free-solid-svg-icons';
|
|
9
9
|
import { ColumnMode, DatatableComponent as NgxDatatableComponent, DatatableRowDetailDirective, SortType } from '@marklb/ngx-datatable';
|
|
10
10
|
import { InputBoolean, InputNumber } from '@theseam/ui-common/core';
|
|
11
11
|
import { composeDataFilters, composeDataFilterStates } from '@theseam/ui-common/data-filters';
|
|
12
|
-
import { notNullOrUndefined, waitOnConditionAsync } from '@theseam/ui-common/utils';
|
|
12
|
+
import { isNullOrUndefined, notNullOrUndefined, waitOnConditionAsync } from '@theseam/ui-common/utils';
|
|
13
13
|
import { DatatableActionMenuComponent } from '../datatable-action-menu/datatable-action-menu.component';
|
|
14
14
|
import { DatatableColumnComponent } from '../datatable-column/datatable-column.component';
|
|
15
15
|
import { TheSeamDatatableFooterDirective } from '../datatable-footer/datatable-footer.directive';
|
|
@@ -28,15 +28,24 @@ import { WidthColumnsAlteration } from '../models/columns-alterations/width.colu
|
|
|
28
28
|
import { getColumnProp } from '../utils/get-column-prop';
|
|
29
29
|
import { OrderColumnsAlteration } from '../models/columns-alterations/order.columns-alteration';
|
|
30
30
|
import { SortColumnsAlteration } from '../models/columns-alterations/sort.columns-alteration';
|
|
31
|
+
import { isActionItemColumnPosition } from '../models/action-item-column-position';
|
|
32
|
+
import { ColumnsFiltersService } from '../services/columns-filters.service';
|
|
33
|
+
import { THESEAM_DATATABLE_CONFIG } from '../models/datatable-config';
|
|
34
|
+
import { TheSeamDatatableColumnFilterDirective } from '../directives/datatable-column-filter.directive';
|
|
31
35
|
import * as i0 from "@angular/core";
|
|
32
36
|
import * as i1 from "../services/datatable-preferences.service";
|
|
33
37
|
import * as i2 from "../services/columns-manager.service";
|
|
34
38
|
import * as i3 from "../services/columns-alterations-manager.service";
|
|
35
|
-
import * as i4 from "
|
|
36
|
-
import * as i5 from "@
|
|
37
|
-
import * as i6 from "@
|
|
38
|
-
import * as i7 from "@
|
|
39
|
-
import * as i8 from "@theseam/ui-common/
|
|
39
|
+
import * as i4 from "../services/columns-filters.service";
|
|
40
|
+
import * as i5 from "@angular/common";
|
|
41
|
+
import * as i6 from "@marklb/ngx-datatable";
|
|
42
|
+
import * as i7 from "@fortawesome/angular-fontawesome";
|
|
43
|
+
import * as i8 from "@theseam/ui-common/shared";
|
|
44
|
+
import * as i9 from "@theseam/ui-common/icon";
|
|
45
|
+
import * as i10 from "@theseam/ui-common/buttons";
|
|
46
|
+
import * as i11 from "@theseam/ui-common/popover";
|
|
47
|
+
import * as i12 from "@theseam/ui-common/table-cell-type";
|
|
48
|
+
import * as i13 from "../datatable-column-filter-menu/datatable-column-filter-menu.component";
|
|
40
49
|
/**
|
|
41
50
|
* Intended for internal classes declared by the `TheSeamDatatableModule`.
|
|
42
51
|
*/
|
|
@@ -52,11 +61,17 @@ export const _THESEAM_DATATABLE_ACCESSOR = {
|
|
|
52
61
|
useExisting: forwardRef(() => DatatableComponent)
|
|
53
62
|
};
|
|
54
63
|
export class DatatableComponent {
|
|
55
|
-
get filters() {
|
|
64
|
+
get filters() {
|
|
65
|
+
return [
|
|
66
|
+
...this._menuBarsFiltersSubject.value,
|
|
67
|
+
...this._columnsFilters.filters()
|
|
68
|
+
];
|
|
69
|
+
}
|
|
56
70
|
get preferencesKey() { return this._preferencesKey.value; }
|
|
57
71
|
set preferencesKey(value) { this._preferencesKey.next(value || undefined); }
|
|
58
72
|
set columns(value) {
|
|
59
73
|
this._columnsManager.setInputColumns(Array.isArray(value) ? value : []);
|
|
74
|
+
this._columnsFilters.registerColumnFilters(Array.isArray(value) ? value : []);
|
|
60
75
|
}
|
|
61
76
|
get rows() { return this._rows.value; }
|
|
62
77
|
set rows(value) {
|
|
@@ -81,12 +96,145 @@ export class DatatableComponent {
|
|
|
81
96
|
set sorts(value) {
|
|
82
97
|
this._sorts = notNullOrUndefined(value) ? coerceArray(value) : [];
|
|
83
98
|
}
|
|
99
|
+
get cssClasses() {
|
|
100
|
+
return this._cssClasses;
|
|
101
|
+
}
|
|
102
|
+
set cssClasses(value) {
|
|
103
|
+
if (notNullOrUndefined(value)) {
|
|
104
|
+
this._cssClasses = value;
|
|
105
|
+
}
|
|
106
|
+
else if (notNullOrUndefined(this._config?.cssClasses)) {
|
|
107
|
+
this._cssClasses = this._config?.cssClasses;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
this._cssClasses = this._cssClassesDefault;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
get messages() {
|
|
114
|
+
return this._messages;
|
|
115
|
+
}
|
|
116
|
+
set messages(value) {
|
|
117
|
+
if (notNullOrUndefined(value)) {
|
|
118
|
+
this._messages = value;
|
|
119
|
+
}
|
|
120
|
+
else if (notNullOrUndefined(this._config?.messages)) {
|
|
121
|
+
this._messages = {
|
|
122
|
+
...this._messagesDefault,
|
|
123
|
+
...this._config?.messages
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this._messages = this._messagesDefault;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
get headerHeight() {
|
|
131
|
+
return this._headerHeight;
|
|
132
|
+
}
|
|
133
|
+
set headerHeight(value) {
|
|
134
|
+
if (notNullOrUndefined(value)) {
|
|
135
|
+
this._headerHeight = value;
|
|
136
|
+
}
|
|
137
|
+
else if (notNullOrUndefined(this._config?.headerHeight)) {
|
|
138
|
+
this._headerHeight = this._config?.headerHeight;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
this._headerHeight = this._headerHeightDefault;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
get rowHeight() {
|
|
145
|
+
return this._rowHeight;
|
|
146
|
+
}
|
|
147
|
+
set rowHeight(value) {
|
|
148
|
+
if (notNullOrUndefined(value)) {
|
|
149
|
+
this._rowHeight = value;
|
|
150
|
+
}
|
|
151
|
+
else if (notNullOrUndefined(this._config?.rowHeight)) {
|
|
152
|
+
this._rowHeight = this._config?.rowHeight;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
this._rowHeight = this._rowHeightDefault;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
get footerHeight() {
|
|
159
|
+
return this._footerHeight;
|
|
160
|
+
}
|
|
161
|
+
set footerHeight(value) {
|
|
162
|
+
if (notNullOrUndefined(value)) {
|
|
163
|
+
this._footerHeight = value;
|
|
164
|
+
}
|
|
165
|
+
else if (notNullOrUndefined(this._config?.footerHeight)) {
|
|
166
|
+
this._footerHeight = this._config?.footerHeight;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
this._footerHeight = this._footerHeightDefault;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
84
172
|
set dataSource(value) {
|
|
85
173
|
if (value instanceof DatatableDataSource) {
|
|
86
174
|
value.setDatatableAccessor(this);
|
|
87
175
|
}
|
|
88
176
|
this._dataSourceSubject.next(value || undefined);
|
|
89
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Sets position behavior for optional Action Menu Button column.
|
|
180
|
+
*
|
|
181
|
+
* Defaults to `frozenRight`.
|
|
182
|
+
*/
|
|
183
|
+
get actionItemColumnPosition() { return this._actionItemColumnPosition; }
|
|
184
|
+
set actionItemColumnPosition(value) {
|
|
185
|
+
if (notNullOrUndefined(value) && isActionItemColumnPosition(value)) {
|
|
186
|
+
this._actionItemColumnPosition = value;
|
|
187
|
+
}
|
|
188
|
+
else if (notNullOrUndefined(this._config?.actionItemColumnPosition) && isActionItemColumnPosition(this._config?.actionItemColumnPosition)) {
|
|
189
|
+
this._actionItemColumnPosition = this._config?.actionItemColumnPosition;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this._actionItemColumnPosition = this._actionItemColumnPositionDefault;
|
|
193
|
+
}
|
|
194
|
+
this._columnsManager.setActionItemColumnPosition(this._actionItemColumnPosition);
|
|
195
|
+
}
|
|
196
|
+
get columnFilterIcon() {
|
|
197
|
+
return this._columnFilterIcon;
|
|
198
|
+
}
|
|
199
|
+
set columnFilterIcon(value) {
|
|
200
|
+
if (notNullOrUndefined(value)) {
|
|
201
|
+
this._columnFilterIcon = value;
|
|
202
|
+
}
|
|
203
|
+
else if (notNullOrUndefined(this._config?.columnFilterIcon)) {
|
|
204
|
+
this._columnFilterIcon = this._config?.columnFilterIcon;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
this._columnFilterIcon = this._columnFilterIconDefault;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
get columnFilterUpdateMethod() {
|
|
211
|
+
return this._columnFilterUpdateMethod;
|
|
212
|
+
}
|
|
213
|
+
set columnFilterUpdateMethod(value) {
|
|
214
|
+
if (notNullOrUndefined(value)) {
|
|
215
|
+
this._columnFilterUpdateMethod = value;
|
|
216
|
+
}
|
|
217
|
+
else if (notNullOrUndefined(this._config?.columnFilterUpdateMethod)) {
|
|
218
|
+
this._columnFilterUpdateMethod = this._config?.columnFilterUpdateMethod;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
this._columnFilterUpdateMethod = this._columnFilterUpdateMethodDefault;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
get columnFilterUpdateDebounce() {
|
|
225
|
+
return this._columnFilterUpdateDebounce;
|
|
226
|
+
}
|
|
227
|
+
set columnFilterUpdateDebounce(value) {
|
|
228
|
+
if (notNullOrUndefined(value)) {
|
|
229
|
+
this._columnFilterUpdateDebounce = value;
|
|
230
|
+
}
|
|
231
|
+
else if (notNullOrUndefined(this._config?.columnFilterUpdateDebounce)) {
|
|
232
|
+
this._columnFilterUpdateDebounce = this._config?.columnFilterUpdateDebounce;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
this._columnFilterUpdateDebounce = this._columnFilterUpdateDebounceDefault;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
90
238
|
set columnComponents(value) {
|
|
91
239
|
this._columnsManager.setTemplateColumns(translateTemplateColumns(value?.toArray() ?? []));
|
|
92
240
|
}
|
|
@@ -107,6 +255,9 @@ export class DatatableComponent {
|
|
|
107
255
|
.subscribe(v => { this._setMenuBarFilters(value.filters()); });
|
|
108
256
|
}
|
|
109
257
|
}
|
|
258
|
+
set columnFilterTemplates(value) {
|
|
259
|
+
this._columnsFilters.setFilterTemplates(value?.toArray() ?? []);
|
|
260
|
+
}
|
|
110
261
|
get actionMenuCellTpl() { return this._actionMenuCellTpl; }
|
|
111
262
|
set actionMenuCellTpl(value) {
|
|
112
263
|
this._actionMenuCellTpl = value;
|
|
@@ -156,15 +307,17 @@ export class DatatableComponent {
|
|
|
156
307
|
}
|
|
157
308
|
}
|
|
158
309
|
}
|
|
159
|
-
constructor(_preferences, _columnsManager, _columnsAlterationsManager) {
|
|
310
|
+
constructor(_preferences, _columnsManager, _columnsAlterationsManager, _columnsFilters, _config) {
|
|
160
311
|
this._preferences = _preferences;
|
|
161
312
|
this._columnsManager = _columnsManager;
|
|
162
313
|
this._columnsAlterationsManager = _columnsAlterationsManager;
|
|
314
|
+
this._columnsFilters = _columnsFilters;
|
|
315
|
+
this._config = _config;
|
|
163
316
|
this._faChevronDown = faChevronDown;
|
|
164
317
|
this._faChevronRight = faChevronRight;
|
|
165
318
|
this._faSpinner = faSpinner;
|
|
166
319
|
this._ngUnsubscribe = new Subject();
|
|
167
|
-
this.
|
|
320
|
+
this._menuBarsFiltersSubject = new BehaviorSubject([]);
|
|
168
321
|
this._dataSourceSubject = new BehaviorSubject(undefined);
|
|
169
322
|
this._resizing = {};
|
|
170
323
|
this._preferencesKey = new BehaviorSubject(undefined);
|
|
@@ -181,7 +334,7 @@ export class DatatableComponent {
|
|
|
181
334
|
this.swapColumns = false;
|
|
182
335
|
this._sortType = SortType.single;
|
|
183
336
|
this._sorts = [];
|
|
184
|
-
this.
|
|
337
|
+
this._cssClassesDefault = {
|
|
185
338
|
sortAscending: 'datatable-icon-up',
|
|
186
339
|
sortDescending: 'datatable-icon-down',
|
|
187
340
|
pagerLeftArrow: 'datatable-icon-left',
|
|
@@ -189,7 +342,7 @@ export class DatatableComponent {
|
|
|
189
342
|
pagerPrevious: 'datatable-icon-prev',
|
|
190
343
|
pagerNext: 'datatable-icon-skip'
|
|
191
344
|
};
|
|
192
|
-
this.
|
|
345
|
+
this._messagesDefault = {
|
|
193
346
|
// Message to show when array is presented
|
|
194
347
|
// but contains no values
|
|
195
348
|
emptyMessage: 'No records found',
|
|
@@ -205,11 +358,15 @@ export class DatatableComponent {
|
|
|
205
358
|
this.summaryHeight = 30;
|
|
206
359
|
this.summaryPosition = 'top';
|
|
207
360
|
this.virtualization = true;
|
|
208
|
-
this.
|
|
209
|
-
this.
|
|
210
|
-
this.
|
|
361
|
+
this._headerHeightDefault = 50;
|
|
362
|
+
this._rowHeightDefault = 50;
|
|
363
|
+
this._footerHeightDefault = 40;
|
|
211
364
|
this.scrollbarV = true;
|
|
212
365
|
this.scrollbarH = true;
|
|
366
|
+
this._actionItemColumnPositionDefault = 'frozenRight';
|
|
367
|
+
this._columnFilterIconDefault = faFilter;
|
|
368
|
+
this._columnFilterUpdateMethodDefault = 'valueChanges';
|
|
369
|
+
this._columnFilterUpdateDebounceDefault = 400;
|
|
213
370
|
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
214
371
|
this.scroll = new EventEmitter();
|
|
215
372
|
this.activate = new EventEmitter();
|
|
@@ -262,10 +419,13 @@ export class DatatableComponent {
|
|
|
262
419
|
this._columnsAlterationsManager.add(alterations);
|
|
263
420
|
}));
|
|
264
421
|
}), takeUntil(this._ngUnsubscribe)).subscribe();
|
|
265
|
-
this.columns$ = this._columnsManager.columns
|
|
422
|
+
this.columns$ = combineLatest([this._columnsManager.columns$, this._columnsFilters.columnActiveFilterProps$]).pipe(map(([columns, columnActiveFilterProps]) => columns.map(col => ({
|
|
423
|
+
...col,
|
|
424
|
+
filterActive: columnActiveFilterProps.includes(this._columnsFilters.getColumnFilterProp(col) || '')
|
|
425
|
+
}))));
|
|
266
426
|
this.displayColumns$ = this.columns$.pipe(switchMap(cols => applyPrefs(cols)), map(cols => cols.filter(c => !c.hidden)), tap(v => removeUnusedDiffs(v, this._colDiffersInp, this._colDiffersTpl)));
|
|
267
|
-
this.filters$ = this.
|
|
268
|
-
this.filterStates = this.
|
|
427
|
+
this.filters$ = combineLatest([this._menuBarsFiltersSubject.asObservable(), this._columnsFilters.columnsFilters$]).pipe(map(([menuFilters, columnsFilters]) => [...menuFilters, ...columnsFilters]));
|
|
428
|
+
this.filterStates = this.filters$.pipe(switchMap(filters => composeDataFilterStates(filters)));
|
|
269
429
|
this.rows$ = this._dataSourceSubject.pipe(switchMap(dataSource => {
|
|
270
430
|
// console.log('dataSource', dataSource)
|
|
271
431
|
let dataStream;
|
|
@@ -288,7 +448,7 @@ export class DatatableComponent {
|
|
|
288
448
|
}
|
|
289
449
|
if (!this.externalFiltering) {
|
|
290
450
|
// console.log('not using externalFiltering')
|
|
291
|
-
dataStream = dataStream.pipe(switchMap(rows => this.
|
|
451
|
+
dataStream = dataStream.pipe(switchMap(rows => this.filters$.pipe(
|
|
292
452
|
// tap(v => console.log('filters', v)),
|
|
293
453
|
concatMap(filters => of(rows).pipe(composeDataFilters(filters))))));
|
|
294
454
|
// dataStream = this._filtersSubject.pipe(
|
|
@@ -312,12 +472,43 @@ export class DatatableComponent {
|
|
|
312
472
|
}
|
|
313
473
|
});
|
|
314
474
|
}
|
|
475
|
+
this._setDatatableConfigOrDefault();
|
|
476
|
+
}
|
|
477
|
+
/** Sets missing inputs from config */
|
|
478
|
+
_setDatatableConfigOrDefault() {
|
|
479
|
+
if (isNullOrUndefined(this.messages)) {
|
|
480
|
+
this.messages = undefined;
|
|
481
|
+
}
|
|
482
|
+
if (isNullOrUndefined(this.headerHeight)) {
|
|
483
|
+
this.headerHeight = undefined;
|
|
484
|
+
}
|
|
485
|
+
if (isNullOrUndefined(this.rowHeight)) {
|
|
486
|
+
this.rowHeight = undefined;
|
|
487
|
+
}
|
|
488
|
+
if (isNullOrUndefined(this.footerHeight)) {
|
|
489
|
+
this.footerHeight = undefined;
|
|
490
|
+
}
|
|
491
|
+
if (isNullOrUndefined(this.cssClasses)) {
|
|
492
|
+
this.cssClasses = undefined;
|
|
493
|
+
}
|
|
494
|
+
if (isNullOrUndefined(this.columnFilterIcon)) {
|
|
495
|
+
this.columnFilterIcon = undefined;
|
|
496
|
+
}
|
|
497
|
+
if (isNullOrUndefined(this.columnFilterUpdateMethod)) {
|
|
498
|
+
this.columnFilterUpdateMethod = undefined;
|
|
499
|
+
}
|
|
500
|
+
if (isNullOrUndefined(this.columnFilterUpdateDebounce)) {
|
|
501
|
+
this.columnFilterUpdateDebounce = undefined;
|
|
502
|
+
}
|
|
503
|
+
if (isNullOrUndefined(this.actionItemColumnPosition)) {
|
|
504
|
+
this.actionItemColumnPosition = undefined;
|
|
505
|
+
}
|
|
315
506
|
}
|
|
316
507
|
ngOnDestroy() {
|
|
317
508
|
this._rowDetailToggleSubscription.unsubscribe();
|
|
318
509
|
}
|
|
319
510
|
_setMenuBarFilters(filters) {
|
|
320
|
-
this.
|
|
511
|
+
this._menuBarsFiltersSubject.next(filters || []);
|
|
321
512
|
}
|
|
322
513
|
getColumnComponent(propName) {
|
|
323
514
|
if (!this.columnComponents || this.columnComponents.length === 0) {
|
|
@@ -421,14 +612,15 @@ export class DatatableComponent {
|
|
|
421
612
|
};
|
|
422
613
|
}
|
|
423
614
|
}
|
|
424
|
-
DatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
425
|
-
DatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
615
|
+
DatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DatatableComponent, deps: [{ token: i1.DatatablePreferencesService }, { token: i2.ColumnsManagerService }, { token: i3.ColumnsAlterationsManagerService }, { token: i4.ColumnsFiltersService }, { token: THESEAM_DATATABLE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
616
|
+
DatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DatatableComponent, selector: "seam-datatable", inputs: { preferencesKey: "preferencesKey", targetMarkerTemplate: "targetMarkerTemplate", columns: "columns", rows: "rows", columnMode: "columnMode", groupRowsBy: "groupRowsBy", groupedRows: "groupedRows", selected: "selected", externalPaging: "externalPaging", externalSorting: "externalSorting", externalFiltering: "externalFiltering", limit: "limit", count: "count", offset: "offset", loadingIndicator: "loadingIndicator", selectionType: "selectionType", reorderable: "reorderable", swapColumns: "swapColumns", sortType: "sortType", sorts: "sorts", cssClasses: "cssClasses", messages: "messages", rowIdentity: "rowIdentity", rowClass: "rowClass", selectCheck: "selectCheck", displayCheck: "displayCheck", groupExpansionDefault: "groupExpansionDefault", trackByProp: "trackByProp", selectAllRowsOnPage: "selectAllRowsOnPage", treeFromRelation: "treeFromRelation", treeToRelation: "treeToRelation", summaryRow: "summaryRow", summaryHeight: "summaryHeight", summaryPosition: "summaryPosition", virtualization: "virtualization", headerHeight: "headerHeight", rowHeight: "rowHeight", footerHeight: "footerHeight", scrollbarV: "scrollbarV", scrollbarH: "scrollbarH", dataSource: "dataSource", actionItemColumnPosition: "actionItemColumnPosition", columnFilterIcon: "columnFilterIcon", columnFilterUpdateMethod: "columnFilterUpdateMethod", columnFilterUpdateDebounce: "columnFilterUpdateDebounce" }, outputs: { scroll: "scroll", activate: "activate", select: "select", sort: "sort", page: "page", reorder: "reorder", resize: "resize", tableContextmenu: "tableContextmenu", treeAction: "treeAction", actionRefreshRequest: "actionRefreshRequest", hiddenColumnsChange: "hiddenColumnsChange" }, host: { listeners: { "dblclick": "_dblClick($event)" } }, providers: [
|
|
426
617
|
_THESEAM_DATATABLE,
|
|
427
618
|
DatatableColumnChangesService,
|
|
428
619
|
_THESEAM_DATATABLE_ACCESSOR,
|
|
429
620
|
ColumnsManagerService,
|
|
430
621
|
ColumnsAlterationsManagerService,
|
|
431
|
-
], queries: [{ propertyName: "actionMenu", first: true, predicate: DatatableActionMenuComponent, descendants: true, static: true }, { propertyName: "rowActionItem", first: true, predicate: DatatableRowActionItemDirective, descendants: true }, { propertyName: "rowDetail", first: true, predicate: TheSeamDatatableRowDetailDirective, descendants: true, static: true }, { propertyName: "footer", first: true, predicate: TheSeamDatatableFooterDirective, descendants: true, static: true }, { propertyName: "menuBarComponent", first: true, predicate: DatatableMenuBarComponent, descendants: true }, { propertyName: "columnComponents", predicate: DatatableColumnComponent }], viewQueries: [{ propertyName: "ngxDatatable", first: true, predicate: NgxDatatableComponent, descendants: true }, { propertyName: "ngxDatatableElement", first: true, predicate: NgxDatatableComponent, descendants: true, read: ElementRef }, { propertyName: "ngxRowDetail", first: true, predicate: DatatableRowDetailDirective, descendants: true }, { propertyName: "actionMenuCellTpl", first: true, predicate: ["actionMenuCellTpl"], descendants: true, static: true }, { propertyName: "treeToggleTpl", first: true, predicate: ["treeToggleTpl"], descendants: true, static: true }, { propertyName: "headerTpl", first: true, predicate: ["headerTpl"], descendants: true, static: true }, { propertyName: "blankHeaderTpl", first: true, predicate: ["blankHeaderTpl"], descendants: true, static: true }, { propertyName: "cellTypeSelectorTpl", first: true, predicate: ["cellTypeSelectorTpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template #headerTpl ngx-datatable-header-template\n let-column=\"column\" let-sortFn=\"sortFn\">\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <strong *ngIf=\"column.sortable\" class=\"datatable-sort-target draggable\" (click)=\"sortFn()\">{{column.name}}</strong>\n <div class=\"datatable-column-header-separator\" [attr.data-column-id]=\"column.$$id\"></div>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.DatatableComponent, selector: "ngx-datatable", inputs: ["selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "loadingIndicator", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "groupExpansionDefault", "selectAllRowsOnPage", "virtualization", "summaryRow", "summaryHeight", "summaryPosition", "displayPageCount", "displayPager", "rowIdentity", "rows", "groupedRows", "groupRowsBy", "columns", "limit", "count", "offset", "targetMarkerTemplate", "selectionType", "rowClass", "selectCheck", "displayCheck", "trackByProp", "treeFromRelation", "treeToRelation"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i5.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5.DatatableGroupHeaderDirective, selector: "ngx-datatable-group-header", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i5.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i5.DataTableColumnCellTreeToggle, selector: "[ngx-datatable-tree-toggle]" }, { kind: "directive", type: i5.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "directive", type: i5.DatatableGroupHeaderTemplateDirective, selector: "[ngx-datatable-group-header-template]" }, { kind: "component", type: i6.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: i7.ElemResizedDirective, selector: "[seamElemResized]", outputs: ["seamElemResized"] }, { kind: "component", type: i8.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], animations: [
|
|
622
|
+
ColumnsFiltersService
|
|
623
|
+
], queries: [{ propertyName: "actionMenu", first: true, predicate: DatatableActionMenuComponent, descendants: true, static: true }, { propertyName: "rowActionItem", first: true, predicate: DatatableRowActionItemDirective, descendants: true }, { propertyName: "rowDetail", first: true, predicate: TheSeamDatatableRowDetailDirective, descendants: true, static: true }, { propertyName: "footer", first: true, predicate: TheSeamDatatableFooterDirective, descendants: true, static: true }, { propertyName: "menuBarComponent", first: true, predicate: DatatableMenuBarComponent, descendants: true }, { propertyName: "columnComponents", predicate: DatatableColumnComponent }, { propertyName: "columnFilterTemplates", predicate: TheSeamDatatableColumnFilterDirective }], viewQueries: [{ propertyName: "ngxDatatable", first: true, predicate: NgxDatatableComponent, descendants: true }, { propertyName: "ngxDatatableElement", first: true, predicate: NgxDatatableComponent, descendants: true, read: ElementRef }, { propertyName: "ngxRowDetail", first: true, predicate: DatatableRowDetailDirective, descendants: true }, { propertyName: "actionMenuCellTpl", first: true, predicate: ["actionMenuCellTpl"], descendants: true, static: true }, { propertyName: "treeToggleTpl", first: true, predicate: ["treeToggleTpl"], descendants: true, static: true }, { propertyName: "headerTpl", first: true, predicate: ["headerTpl"], descendants: true, static: true }, { propertyName: "blankHeaderTpl", first: true, predicate: ["blankHeaderTpl"], descendants: true, static: true }, { propertyName: "cellTypeSelectorTpl", first: true, predicate: ["cellTypeSelectorTpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template\n #headerTpl\n ngx-datatable-header-template\n let-column=\"column\"\n let-sortFn=\"sortFn\"\n>\n <div class=\"d-inline-flex align-items-center\">\n <ng-container *ngIf=\"column.filterable\">\n <button\n seamIconBtn\n [icon]=\"columnFilterIcon\"\n size=\"sm\"\n [seamPopover]=\"filterMenu\"\n [seamPopoverBaseWidth]=\"300\"\n class=\"datatable-column-header-filter-button d-flex align-items-center mr-2\"\n [class.datatable-column-header-filter-button-active]=\"column.filterActive\"\n style=\"width: 1rem;\"\n title=\"Click to see filter options\"></button>\n </ng-container>\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <button\n seamButton\n *ngIf=\"column.sortable\"\n class=\"datatable-sort-target p-0\"\n (click)=\"sortFn()\"\n title=\"Click to sort\">\n <strong class=\"draggable\">{{column.name}}</strong>\n </button>\n <div class=\"datatable-column-header-separator\" [attr.data-column-id]=\"column.$$id\"></div>\n </div>\n <ng-template #filterMenu let-popover=\"popover\">\n <seam-datatable-column-filter-menu\n [column]=\"column\"\n [updateMethod]=\"columnFilterUpdateMethod\"\n [debounce]=\"columnFilterUpdateDebounce\"\n (closePopover)=\"popover?.closePopover()\"></seam-datatable-column-filter-menu>\n </ng-template>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}::ng-deep .ngx-datatable .datatable-body-row{position:relative}::ng-deep .ngx-datatable .datatable-row-right{position:absolute!important;top:0}::ng-deep .ngx-datatable .datatable-row-right{right:0}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "loadingIndicator", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "groupExpansionDefault", "selectAllRowsOnPage", "virtualization", "summaryRow", "summaryHeight", "summaryPosition", "displayPageCount", "displayPager", "rowIdentity", "rows", "groupedRows", "groupRowsBy", "columns", "limit", "count", "offset", "targetMarkerTemplate", "selectionType", "rowClass", "selectCheck", "displayCheck", "trackByProp", "treeFromRelation", "treeToRelation"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i6.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i6.DatatableGroupHeaderDirective, selector: "ngx-datatable-group-header", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i6.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i6.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i6.DataTableColumnCellTreeToggle, selector: "[ngx-datatable-tree-toggle]" }, { kind: "directive", type: i6.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "directive", type: i6.DatatableGroupHeaderTemplateDirective, selector: "[ngx-datatable-group-header-template]" }, { kind: "component", type: i7.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: i8.ElemResizedDirective, selector: "[seamElemResized]", outputs: ["seamElemResized"] }, { kind: "component", type: i9.IconBtnComponent, selector: "button[seamIconBtn]", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "iconType", "btnTheme", "badgeTheme", "badgeText", "btnSize", "type", "role"] }, { kind: "component", type: i10.TheSeamButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }, { kind: "directive", type: i11.TheSeamPopoverDirective, selector: "[seamPopover]", inputs: ["seamPopover", "seamPopoverContext", "seamPopoverBaseWidth", "seamPopoverDisabled"], exportAs: ["seamPopover"] }, { kind: "component", type: i12.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }, { kind: "component", type: i13.DatatableColumnFilterMenuComponent, selector: "seam-datatable-column-filter-menu", inputs: ["column", "updateMethod", "debounce"], outputs: ["closePopover"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: [
|
|
432
624
|
trigger('slideDown', [
|
|
433
625
|
transition(':enter', [
|
|
434
626
|
style({ transform: 'translateY(-20%)', opacity: '0' }),
|
|
@@ -484,20 +676,20 @@ __decorate([
|
|
|
484
676
|
], DatatableComponent.prototype, "virtualization", void 0);
|
|
485
677
|
__decorate([
|
|
486
678
|
InputNumber()
|
|
487
|
-
], DatatableComponent.prototype, "headerHeight",
|
|
679
|
+
], DatatableComponent.prototype, "headerHeight", null);
|
|
488
680
|
__decorate([
|
|
489
681
|
InputNumber()
|
|
490
|
-
], DatatableComponent.prototype, "rowHeight",
|
|
682
|
+
], DatatableComponent.prototype, "rowHeight", null);
|
|
491
683
|
__decorate([
|
|
492
684
|
InputNumber()
|
|
493
|
-
], DatatableComponent.prototype, "footerHeight",
|
|
685
|
+
], DatatableComponent.prototype, "footerHeight", null);
|
|
494
686
|
__decorate([
|
|
495
687
|
InputBoolean()
|
|
496
688
|
], DatatableComponent.prototype, "scrollbarV", void 0);
|
|
497
689
|
__decorate([
|
|
498
690
|
InputBoolean()
|
|
499
691
|
], DatatableComponent.prototype, "scrollbarH", void 0);
|
|
500
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
692
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DatatableComponent, decorators: [{
|
|
501
693
|
type: Component,
|
|
502
694
|
args: [{ selector: 'seam-datatable', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
503
695
|
trigger('slideDown', [
|
|
@@ -516,8 +708,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
516
708
|
_THESEAM_DATATABLE_ACCESSOR,
|
|
517
709
|
ColumnsManagerService,
|
|
518
710
|
ColumnsAlterationsManagerService,
|
|
519
|
-
|
|
520
|
-
|
|
711
|
+
ColumnsFiltersService
|
|
712
|
+
], template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template\n #headerTpl\n ngx-datatable-header-template\n let-column=\"column\"\n let-sortFn=\"sortFn\"\n>\n <div class=\"d-inline-flex align-items-center\">\n <ng-container *ngIf=\"column.filterable\">\n <button\n seamIconBtn\n [icon]=\"columnFilterIcon\"\n size=\"sm\"\n [seamPopover]=\"filterMenu\"\n [seamPopoverBaseWidth]=\"300\"\n class=\"datatable-column-header-filter-button d-flex align-items-center mr-2\"\n [class.datatable-column-header-filter-button-active]=\"column.filterActive\"\n style=\"width: 1rem;\"\n title=\"Click to see filter options\"></button>\n </ng-container>\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <button\n seamButton\n *ngIf=\"column.sortable\"\n class=\"datatable-sort-target p-0\"\n (click)=\"sortFn()\"\n title=\"Click to sort\">\n <strong class=\"draggable\">{{column.name}}</strong>\n </button>\n <div class=\"datatable-column-header-separator\" [attr.data-column-id]=\"column.$$id\"></div>\n </div>\n <ng-template #filterMenu let-popover=\"popover\">\n <seam-datatable-column-filter-menu\n [column]=\"column\"\n [updateMethod]=\"columnFilterUpdateMethod\"\n [debounce]=\"columnFilterUpdateDebounce\"\n (closePopover)=\"popover?.closePopover()\"></seam-datatable-column-filter-menu>\n </ng-template>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}::ng-deep .ngx-datatable .datatable-body-row{position:relative}::ng-deep .ngx-datatable .datatable-row-right{position:absolute!important;top:0}::ng-deep .ngx-datatable .datatable-row-right{right:0}\n"] }]
|
|
713
|
+
}], ctorParameters: function () { return [{ type: i1.DatatablePreferencesService }, { type: i2.ColumnsManagerService }, { type: i3.ColumnsAlterationsManagerService }, { type: i4.ColumnsFiltersService }, { type: undefined, decorators: [{
|
|
714
|
+
type: Optional
|
|
715
|
+
}, {
|
|
716
|
+
type: Inject,
|
|
717
|
+
args: [THESEAM_DATATABLE_CONFIG]
|
|
718
|
+
}] }]; }, propDecorators: { preferencesKey: [{
|
|
521
719
|
type: Input
|
|
522
720
|
}], targetMarkerTemplate: [{
|
|
523
721
|
type: Input
|
|
@@ -599,6 +797,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
599
797
|
type: Input
|
|
600
798
|
}], dataSource: [{
|
|
601
799
|
type: Input
|
|
800
|
+
}], actionItemColumnPosition: [{
|
|
801
|
+
type: Input
|
|
802
|
+
}], columnFilterIcon: [{
|
|
803
|
+
type: Input
|
|
804
|
+
}], columnFilterUpdateMethod: [{
|
|
805
|
+
type: Input
|
|
806
|
+
}], columnFilterUpdateDebounce: [{
|
|
807
|
+
type: Input
|
|
602
808
|
}], scroll: [{
|
|
603
809
|
type: Output
|
|
604
810
|
}], activate: [{
|
|
@@ -639,6 +845,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
639
845
|
}], menuBarComponent: [{
|
|
640
846
|
type: ContentChild,
|
|
641
847
|
args: [DatatableMenuBarComponent]
|
|
848
|
+
}], columnFilterTemplates: [{
|
|
849
|
+
type: ContentChildren,
|
|
850
|
+
args: [TheSeamDatatableColumnFilterDirective]
|
|
642
851
|
}], ngxDatatable: [{
|
|
643
852
|
type: ViewChild,
|
|
644
853
|
args: [NgxDatatableComponent]
|
|
@@ -667,4 +876,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
667
876
|
type: HostListener,
|
|
668
877
|
args: ['dblclick', ['$event']]
|
|
669
878
|
}] } });
|
|
670
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBSVQsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzND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IHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQXJyYXksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZSwgaXNEYXRhU291cmNlLCBMaXN0UmFuZ2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgaXNEZXZNb2RlLFxuICBLZXlWYWx1ZURpZmZlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjb25jYXRNYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBmYUNoZXZyb25Eb3duLCBmYUNoZXZyb25SaWdodCwgZmFTcGlubmVyIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJ1xuaW1wb3J0IHtcbiAgQ29sdW1uTW9kZSxcbiAgQ29udGV4dG1lbnVUeXBlLFxuICBEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZSxcbiAgRGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlLFxuICBEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmUsXG4gIERhdGF0YWJsZUNvbXBvbmVudCBhcyBOZ3hEYXRhdGFibGVDb21wb25lbnQsXG4gIERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSxcbiAgU29ydFR5cGUsXG4gIFRyZWVTdGF0dXNcbn0gZnJvbSAnQG1hcmtsYi9uZ3gtZGF0YXRhYmxlJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnQG1hcmtsYi9uZ3gtZGF0YXRhYmxlJ1xuXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvcmUnXG5pbXBvcnQgeyBjb21wb3NlRGF0YUZpbHRlcnMsIGNvbXBvc2VEYXRhRmlsdGVyU3RhdGVzLCBEYXRhRmlsdGVyLCBEYXRhRmlsdGVyU3RhdGUgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vZGF0YS1maWx0ZXJzJ1xuaW1wb3J0IHsgSUVsZW1lbnRSZXNpemVkRXZlbnQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vc2hhcmVkJ1xuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkLCB3YWl0T25Db25kaXRpb25Bc3luYyB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi91dGlscydcblxuaW1wb3J0IHsgRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1hY3Rpb24tbWVudS9kYXRhdGFibGUtYWN0aW9uLW1lbnUuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWNvbHVtbi9kYXRhdGFibGUtY29sdW1uLmNvbXBvbmVudCdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRhdGFibGUtZm9vdGVyL2RhdGF0YWJsZS1mb290ZXIuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1tZW51LWJhci9kYXRhdGFibGUtbWVudS1iYXIuY29tcG9uZW50J1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGF0YWJsZS1yb3ctZGV0YWlsL2RhdGF0YWJsZS1yb3ctZGV0YWlsLmRpcmVjdGl2ZSdcbmltcG9ydCB7IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RhdGF0YWJsZS1yb3ctYWN0aW9uLWl0ZW0uZGlyZWN0aXZlJ1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUFjY2Vzc29yIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGF0YWJsZS1hY2Nlc3NvcidcbmltcG9ydCB7IERhdGF0YWJsZURhdGFTb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMvZGF0YXRhYmxlLWRhdGEtc291cmNlJ1xuaW1wb3J0IHsgVGhlU2VhbVBhZ2VJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL3BhZ2UtaW5mbydcbmltcG9ydCB7IFNvcnRFdmVudCB9IGZyb20gJy4uL21vZGVscy9zb3J0LWV2ZW50J1xuaW1wb3J0IHsgU29ydEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvc29ydC1pdGVtJ1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUNvbHVtbiB9IGZyb20gJy4uL21vZGVscy90YWJsZS1jb2x1bW4nXG5pbXBvcnQgeyBDb2x1bW5zTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2x1bW5zLW1hbmFnZXIuc2VydmljZSdcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YXRhYmxlLWNvbHVtbi1jaGFuZ2VzLnNlcnZpY2UnXG5pbXBvcnQgeyBEYXRhdGFibGVQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhdGFibGUtcHJlZmVyZW5jZXMuc2VydmljZSdcbmltcG9ydCB7IFRIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SIH0gZnJvbSAnLi4vdG9rZW5zL2RhdGF0YWJsZS1hY2Nlc3NvcidcbmltcG9ydCB7IHJlbW92ZVVudXNlZERpZmZzIH0gZnJvbSAnLi4vdXRpbHMvcmVtb3ZlLXVudXNlZC1kaWZmcydcbmltcG9ydCB7IHRyYW5zbGF0ZVRlbXBsYXRlQ29sdW1ucyB9IGZyb20gJy4uL3V0aWxzL3RyYW5zbGF0ZS10ZW1wbGF0ZXMnXG5pbXBvcnQgeyBDb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbHVtbnMtYWx0ZXJhdGlvbnMtbWFuYWdlci5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ29sdW1uc0FsdGVyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgbWFwQ29sdW1uc0FsdGVyYXRpb25zU3RhdGVzIH0gZnJvbSAnLi4vdXRpbHMvbWFwLWNvbHVtbnMtYWx0ZXJhdGlvbnMtc3RhdGVzJ1xuaW1wb3J0IHsgV2lkdGhDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL3dpZHRoLmNvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IGdldENvbHVtblByb3AgfSBmcm9tICcuLi91dGlscy9nZXQtY29sdW1uLXByb3AnXG5pbXBvcnQgeyBPcmRlckNvbHVtbnNBbHRlcmF0aW9uLCBPcmRlckNvbHVtbnNBbHRlcmF0aW9uU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9ucy9vcmRlci5jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBTb3J0Q29sdW1uc0FsdGVyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9ucy9zb3J0LmNvbHVtbnMtYWx0ZXJhdGlvbidcblxuLyoqXG4gKiBOT1RFOiBUaGlzIGlzIHN0aWxsIGJlaW5nIHdvcmtlZCBvbi4gSSBhbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGlzIG1vZGVsXG4gKiBiZWNhdXNlIGBuZ3gtZGF0YXRhYmxlYCBqdXN0IHVzZXMgYW4gdW50eXBlZCBvYmplY3QgYW5kIHNldHMgcHJvcGVydGllcyBpblxuICogbXVsdGlwbGUgcGxhY2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDZWxsQ29udGV4dCB7XG4gIGFsbFJvd3NTZWxlY3RlZDogZmFsc2VcblxuICBzZWxlY3RGbjogKCkgPT4gYW55XG4gIHNvcnREaXI/OiAnYXNjJyB8ICdkZXNjJ1xuICBzb3J0Rm46ICgpID0+IGFueVxuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuXG4gIG9uQ2hlY2tib3hDaGFuZ2VGbj86IGFueVxuICBhY3RpdmF0ZUZuPzogYW55XG4gIHJvdz86IGFueVxuICBncm91cD86IGFueVxuICB2YWx1ZT86IGFueVxuICBjb2x1bW4/OiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uXG4gIHJvd0hlaWdodD86IG51bWJlclxuICBpc1NlbGVjdGVkPzogYm9vbGVhblxuICByb3dJbmRleD86IG51bWJlclxuICB0cmVlU3RhdHVzPzogVHJlZVN0YXR1c1xuICBvblRyZWVBY3Rpb24/OiBhbnlcbn1cblxuLyoqXG4gKiBJbnRlbmRlZCBmb3IgaW50ZXJuYWwgY2xhc3NlcyBkZWNsYXJlZCBieSB0aGUgYFRoZVNlYW1EYXRhdGFibGVNb2R1bGVgLlxuICovXG5leHBvcnQgY29uc3QgVEhFU0VBTV9EQVRBVEFCTEUgPSBuZXcgSW5qZWN0aW9uVG9rZW48RGF0YUZpbHRlcj4oJ0xpYkRhdGF0YWJsZScpXG5cbmV4cG9ydCBjb25zdCBfVEhFU0VBTV9EQVRBVEFCTEU6IGFueSA9IHtcbiAgcHJvdmlkZTogVEhFU0VBTV9EQVRBVEFCTEUsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXRhYmxlQ29tcG9uZW50KVxufVxuXG5leHBvcnQgY29uc3QgX1RIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IFRIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGF0YWJsZUNvbXBvbmVudClcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1kYXRhdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignc2xpZGVEb3duJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwJSknLCBvcGFjaXR5OiAnMCcgfSksXG4gICAgICAgIGFuaW1hdGUoJzI1MG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogJzEnIH0pKSxcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAnMScgfSksXG4gICAgICAgIGFuaW1hdGUoJzI1MG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMCUpJywgb3BhY2l0eTogJzAnIH0pKSxcbiAgICAgIF0pXG4gICAgXSlcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgX1RIRVNFQU1fREFUQVRBQkxFLFxuICAgIERhdGF0YWJsZUNvbHVtbkNoYW5nZXNTZXJ2aWNlLFxuICAgIF9USEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUixcbiAgICBDb2x1bW5zTWFuYWdlclNlcnZpY2UsXG4gICAgQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXRhYmxlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFRoZVNlYW1EYXRhdGFibGVBY2Nlc3NvciwgQ29sbGVjdGlvblZpZXdlciB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbFBhZ2luZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbFNvcnRpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxGaWx0ZXJpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbG9hZGluZ0luZGljYXRvcjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZW9yZGVyYWJsZTogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zd2FwQ29sdW1uczogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9ncm91cEV4cGFuc2lvbkRlZmF1bHQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2VsZWN0QWxsUm93c09uUGFnZTogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdW1tYXJ5Um93OiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3ZpcnR1YWxpemF0aW9uOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Njcm9sbGJhclY6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2Nyb2xsYmFySDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9saW1pdDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvdW50OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb2Zmc2V0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGVhZGVySGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcm93SGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZm9vdGVySGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3VtbWFyeUhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSB8IHVuZGVmaW5lZCB8IG51bGxcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NvcnRzOiBTb3J0SXRlbVtdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIHJlYWRvbmx5IF9mYUNoZXZyb25Eb3duID0gZmFDaGV2cm9uRG93blxuICByZWFkb25seSBfZmFDaGV2cm9uUmlnaHQgPSBmYUNoZXZyb25SaWdodFxuICByZWFkb25seSBfZmFTcGlubmVyID0gZmFTcGlubmVyXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KClcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFGaWx0ZXJbXT4oW10pXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTb3VyY2VTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhU291cmNlPGFueT4gfCBhbnlbXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4gIHByaXZhdGUgX3Jlc2l6aW5nOiB7IFtwcm9wOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJTdGF0ZXM6IE9ic2VydmFibGU8RGF0YUZpbHRlclN0YXRlW10+XG5cbiAgZ2V0IGZpbHRlcnMoKTogRGF0YUZpbHRlcltdIHsgcmV0dXJuIHRoaXMuX2ZpbHRlcnNTdWJqZWN0LnZhbHVlIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVycyQ6IE9ic2VydmFibGU8RGF0YUZpbHRlcltdPlxuXG4gIEBJbnB1dCgpXG4gIGdldCBwcmVmZXJlbmNlc0tleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHsgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnZhbHVlIH1cbiAgc2V0IHByZWZlcmVuY2VzS2V5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7IHRoaXMuX3ByZWZlcmVuY2VzS2V5Lm5leHQodmFsdWUgfHwgdW5kZWZpbmVkKSB9XG4gIHByaXZhdGUgX3ByZWZlcmVuY2VzS2V5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpXG5cbiAgQElucHV0KCkgdGFyZ2V0TWFya2VyVGVtcGxhdGU6IGFueVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW5zKHZhbHVlOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRJbnB1dENvbHVtbnMoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdKVxuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJvd3MoKTogYW55W10geyByZXR1cm4gdGhpcy5fcm93cy52YWx1ZSB9XG4gIHNldCByb3dzKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMuX3Jvd3MubmV4dCh2YWx1ZSB8fCBbXSlcbiAgfVxuICBwcml2YXRlIF9yb3dzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pXG5cbiAgcHVibGljIHJvd3MkOiBPYnNlcnZhYmxlPGFueVtdPlxuXG4gIEBJbnB1dCgpIGNvbHVtbk1vZGU6IENvbHVtbk1vZGUgfCB1bmRlZmluZWQgfCBudWxsID0gQ29sdW1uTW9kZS5mb3JjZVxuXG4gIEBJbnB1dCgpIGdyb3VwUm93c0J5OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIGdyb3VwZWRSb3dzOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBzZWxlY3RlZDogYW55W10gfCB1bmRlZmluZWQgfCBudWxsID0gW11cblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXh0ZXJuYWxQYWdpbmcgPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXh0ZXJuYWxTb3J0aW5nID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsRmlsdGVyaW5nID0gZmFsc2VcblxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBsaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBjb3VudCA9IDBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKDApIG9mZnNldCA9IDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbG9hZGluZ0luZGljYXRvciA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGlvblR5cGUoKTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZCB8IG51bGwgeyByZXR1cm4gdGhpcy5fY29sdW1uc01hbmFnZXIuZ2V0U2VsZWN0aW9uVHlwZSgpIH1cbiAgc2V0IHNlbGVjdGlvblR5cGUodmFsdWU6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0U2VsZWN0aW9uVHlwZShub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgcmVvcmRlcmFibGUgPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzd2FwQ29sdW1ucyA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnRUeXBlKCk6IFNvcnRUeXBlIHsgcmV0dXJuIHRoaXMuX3NvcnRUeXBlIH1cbiAgc2V0IHNvcnRUeXBlKHZhbHVlOiBTb3J0VHlwZSkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpICYmICh2YWx1ZSA9PT0gU29ydFR5cGUuc2luZ2xlIHx8IHZhbHVlID09PSBTb3J0VHlwZS5tdWx0aSkpIHtcbiAgICAgIHRoaXMuX3NvcnRUeXBlID0gdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc29ydFR5cGUgPSBTb3J0VHlwZS5zaW5nbGVcbiAgICB9XG4gIH1cbiAgX3NvcnRUeXBlOiBTb3J0VHlwZSA9IFNvcnRUeXBlLnNpbmdsZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0cygpOiBTb3J0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5uZ3hEYXRhdGFibGUgPyB0aGlzLm5neERhdGF0YWJsZS5zb3J0cyA6IHRoaXMuX3NvcnRzXG4gIH1cbiAgc2V0IHNvcnRzKHZhbHVlOiBTb3J0SXRlbVtdKSB7XG4gICAgdGhpcy5fc29ydHMgPSBub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gY29lcmNlQXJyYXkodmFsdWUpIDogW11cbiAgfVxuICBfc29ydHM6IFNvcnRJdGVtW10gPSBbXVxuXG4gIEBJbnB1dCgpIGNzc0NsYXNzZXM6IGFueSB8IHVuZGVmaW5lZCB8IG51bGwgPSB7XG4gICAgc29ydEFzY2VuZGluZzogJ2RhdGF0YWJsZS1pY29uLXVwJyxcbiAgICBzb3J0RGVzY2VuZGluZzogJ2RhdGF0YWJsZS1pY29uLWRvd24nLFxuICAgIHBhZ2VyTGVmdEFycm93OiAnZGF0YXRhYmxlLWljb24tbGVmdCcsXG4gICAgcGFnZXJSaWdodEFycm93OiAnZGF0YXRhYmxlLWljb24tcmlnaHQnLFxuICAgIHBhZ2VyUHJldmlvdXM6ICdkYXRhdGFibGUtaWNvbi1wcmV2JyxcbiAgICBwYWdlck5leHQ6ICdkYXRhdGFibGUtaWNvbi1za2lwJ1xuICB9XG5cbiAgQElucHV0KCkgbWVzc2FnZXM6IGFueSB8IHVuZGVmaW5lZCB8IG51bGwgPSB7XG4gICAgLy8gTWVzc2FnZSB0byBzaG93IHdoZW4gYXJyYXkgaXMgcHJlc2VudGVkXG4gICAgLy8gYnV0IGNvbnRhaW5zIG5vIHZhbHVlc1xuICAgIGVtcHR5TWVzc2FnZTogJ05vIHJlY29yZHMgZm91bmQnLFxuXG4gICAgLy8gRm9vdGVyIHRvdGFsIG1lc3NhZ2VcbiAgICB0b3RhbE1lc3NhZ2U6ICd0b3RhbCcsXG5cbiAgICAvLyBGb290ZXIgc2VsZWN0ZWQgbWVzc2FnZVxuICAgIHNlbGVjdGVkTWVzc2FnZTogJ3NlbGVjdGVkJ1xuICB9XG5cbiAgQElucHV0KCkgcm93SWRlbnRpdHk6ICgoeDogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkIHwgbnVsbCA9ICh4OiBhbnkpID0+IHhcblxuICBASW5wdXQoKSByb3dDbGFzczogYW55IHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHNlbGVjdENoZWNrOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIGRpc3BsYXlDaGVjazogKChyb3c6IGFueSwgY29sdW1uPzogYW55LCB2YWx1ZT86IGFueSkgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGdyb3VwRXhwYW5zaW9uRGVmYXVsdCA9IGZhbHNlXG5cbiAgQElucHV0KCkgdHJhY2tCeVByb3A6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2VsZWN0QWxsUm93c09uUGFnZSA9IGZhbHNlXG5cbiAgQElucHV0KCkgdHJlZUZyb21SZWxhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSB0cmVlVG9SZWxhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc3VtbWFyeVJvdyA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHN1bW1hcnlIZWlnaHQgPSAzMFxuICBASW5wdXQoKSBzdW1tYXJ5UG9zaXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgPSAndG9wJ1xuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB2aXJ0dWFsaXphdGlvbiA9IHRydWVcblxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBoZWFkZXJIZWlnaHQgPSA1MFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSByb3dIZWlnaHQgPSA1MFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBmb290ZXJIZWlnaHQgPSA0MFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzY3JvbGxiYXJWID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFySCA9IHRydWVcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YXRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdmFsdWUuc2V0RGF0YXRhYmxlQWNjZXNzb3IodGhpcylcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QubmV4dCh2YWx1ZSB8fCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3RpdmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRFdmVudD4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFnZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGhlU2VhbVBhZ2VJbmZvPigpXG4gIEBPdXRwdXQoKSByZWFkb25seSByZW9yZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSByZWFkb25seSByZXNpemUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdGFibGVDb250ZXh0bWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogTW91c2VFdmVudCwgdHlwZTogQ29udGV4dG1lbnVUeXBlLCBjb250ZW50OiBhbnkgfT4oZmFsc2UpXG4gIEBPdXRwdXQoKSByZWFkb25seSB0cmVlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aW9uUmVmcmVzaFJlcXVlc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGhpZGRlbkNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpXG5cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRhdGFibGVDb2x1bW5Db21wb25lbnQpXG4gIHNldCBjb2x1bW5Db21wb25lbnRzKHZhbHVlOiBRdWVyeUxpc3Q8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFRlbXBsYXRlQ29sdW1ucyh0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnModmFsdWU/LnRvQXJyYXkoKSA/PyBbXSkpXG4gIH1cblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGFjdGlvbk1lbnU/OiBEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50XG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSlcbiAgZ2V0IHJvd0FjdGlvbkl0ZW0oKTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9yb3dBY3Rpb25JdGVtIH1cbiAgc2V0IHJvd0FjdGlvbkl0ZW0odmFsdWU6IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3dBY3Rpb25JdGVtID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRSb3dBY3Rpb25JdGVtKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9yb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkXG5cbiAgQENvbnRlbnRDaGlsZChUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSByb3dEZXRhaWw/OiBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZm9vdGVyPzogVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudClcbiAgZ2V0IG1lbnVCYXJDb21wb25lbnQoKTogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9tZW51QmFyQ29tcG9uZW50IH1cbiAgc2V0IG1lbnVCYXJDb21wb25lbnQodmFsdWU6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tZW51QmFyQ29tcG9uZW50ID0gdmFsdWVcblxuICAgIGlmICh0aGlzLl9tZW51QmFyU3ViKSB7IHRoaXMuX21lbnVCYXJTdWIudW5zdWJzY3JpYmUoKSB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSlcblxuICAgICAgdGhpcy5fbWVudUJhclN1YiA9IHRoaXMuX21lbnVCYXJDb21wb25lbnQ/LmZpbHRlcnNDaGFuZ2VkXG4gICAgICAgIC5zdWJzY3JpYmUodiA9PiB7IHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSkgfSlcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWVudUJhckNvbXBvbmVudDogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9tZW51QmFyU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKE5neERhdGF0YWJsZUNvbXBvbmVudCkgbmd4RGF0YXRhYmxlPzogTmd4RGF0YXRhYmxlQ29tcG9uZW50XG4gIEBWaWV3Q2hpbGQoTmd4RGF0YXRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmd4RGF0YXRhYmxlRWxlbWVudD86IEVsZW1lbnRSZWZcbiAgQFZpZXdDaGlsZChEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUpIG5neFJvd0RldGFpbD86IERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuXG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbk1lbnVDZWxsVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGFjdGlvbk1lbnVDZWxsVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fYWN0aW9uTWVudUNlbGxUcGwgfVxuICBzZXQgYWN0aW9uTWVudUNlbGxUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0QWN0aW9uTWVudUNlbGxUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2FjdGlvbk1lbnVDZWxsVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgndHJlZVRvZ2dsZVRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCB0cmVlVG9nZ2xlVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl90cmVlVG9nZ2xlVHBsIH1cbiAgc2V0IHRyZWVUb2dnbGVUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3RyZWVUb2dnbGVUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFRyZWVUb2dnbGVUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX3RyZWVUb2dnbGVUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2hlYWRlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBoZWFkZXJUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9oZWFkZXJUcGwgfVxuICBzZXQgaGVhZGVyVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faGVhZGVyVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRIZWFkZXJUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2hlYWRlclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2JsYW5rSGVhZGVyVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGJsYW5rSGVhZGVyVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fYmxhbmtIZWFkZXJUcGwgfVxuICBzZXQgYmxhbmtIZWFkZXJUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ibGFua0hlYWRlclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0QmxhbmtIZWFkZXJUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2JsYW5rSGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnY2VsbFR5cGVTZWxlY3RvclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBjZWxsVHlwZVNlbGVjdG9yVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbCB9XG4gIHNldCBjZWxsVHlwZVNlbGVjdG9yVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0Q2VsbFR5cGVTZWxlY3RvclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfY2VsbFR5cGVTZWxlY3RvclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIHB1YmxpYyBjb2x1bW5Db21wb25lbnRzJD86IE9ic2VydmFibGU8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50W10+XG4gIHByaXZhdGUgX2NvbERpZmZlcnNJbnA6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfSA9IHt9XG4gIHByaXZhdGUgX2NvbERpZmZlcnNUcGw6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfSA9IHt9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbHVtbnMkOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT5cbiAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlDb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG5cbiAgdmlld0NoYW5nZTogT2JzZXJ2YWJsZTxMaXN0UmFuZ2U+XG5cbiAgcHJpdmF0ZSBfcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZXG5cbiAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgRE9NLWRlcGVuZGVudCBjb2RlIHdoZW4gYSB3YXkgdG8gcHJvcGVydHkgbGlzdGVuIGZvclxuICAvLyBkYmxjbGljayBvbiB0aGUgaGVhZGVyIHJlYXNpemUgaGFuZGxlcy5cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbICckZXZlbnQnIF0pXG4gIF9kYmxDbGljayhldmVudDogYW55KSB7XG4gICAgY29uc3QgaXNIYW5kbGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc2l6ZS1oYW5kbGUnKVxuICAgIGlmIChpc0hhbmRsZSkge1xuICAgICAgY29uc3QgaXNSZXNpemVhYmxlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemVhYmxlJylcbiAgICAgIGlmIChpc1Jlc2l6ZWFibGUpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgY29uc3QgaWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcuZGF0YXRhYmxlLWNvbHVtbi1oZWFkZXItc2VwYXJhdG9yJylcbiAgICAgICAgICA/LmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4taWQnKVxuICAgICAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5jb2x1bW5zJC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICkuc3Vic2NyaWJlKGNvbHVtbnMgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChjID0+IGMuJCRpZCA9PT0gaWQpXG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoY29sdW1uKVxuICAgICAgICAgICAgaWYgKGNvbHVtblByb3ApIHtcbiAgICAgICAgICAgICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uKHsgY29sdW1uUHJvcCwgY2FuQXV0b1Jlc2l6ZTogdHJ1ZSB9LCBmYWxzZSlcbiAgICAgICAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ByZWZlcmVuY2VzOiBEYXRhdGFibGVQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uc01hbmFnZXI6IENvbHVtbnNNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyOiBDb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5fcHJlZmVyZW5jZXNLZXkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAoa2V5ID0+IHtcbiAgICAgICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQoa2V5KSB8fCBrZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcm9tKHdhaXRPbkNvbmRpdGlvbkFzeW5jKCgpID0+IHRoaXMuX3ByZWZlcmVuY2VzLmlzTG9hZGVkKGtleSkpKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuc2V0QWx0ZXJhdGlvbnMoa2V5LCB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmdldCgpKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSlcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgY29uc3QgYXBwbHlQcmVmcyA9IChjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pID0+IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuY2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFwcGx5KGNvbHMsIHRoaXMpXG4gICAgICAgIHJldHVybiBjb2xzXG4gICAgICB9KSxcbiAgICApXG5cbiAgICB0aGlzLl9wcmVmZXJlbmNlc0tleS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChwcmVmc0tleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKHByZWZzS2V5KSkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzLnByZWZlcmVuY2VzKHByZWZzS2V5KS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChhc3luYyBwcmVmZXJlbmNlcyA9PiB7XG4gICAgICAgICAgICBhd2FpdCB3YWl0T25Db25kaXRpb25Bc3luYygoKSA9PiB0aGlzLl9wcmVmZXJlbmNlcy5pc0xvYWRlZChwcmVmc0tleSkpXG4gICAgICAgICAgICByZXR1cm4gcHJlZmVyZW5jZXNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcChwcmVmZXJlbmNlcyA9PiB7XG4gICAgICAgICAgICBsZXQgYWx0ZXJhdGlvbnM6IENvbHVtbnNBbHRlcmF0aW9uW10gPSBbXVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYWx0ZXJhdGlvbnMgPSBtYXBDb2x1bW5zQWx0ZXJhdGlvbnNTdGF0ZXMocHJlZmVyZW5jZXMuYWx0ZXJhdGlvbnMpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gbWFwIGNvbHVtbnMgYWx0ZXJhdGlvbnMgc3RhdGVzJylcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKGFsdGVyYXRpb25zKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5jb2x1bW5zJCA9IHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmNvbHVtbnMkXG5cbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zJCA9IHRoaXMuY29sdW1ucyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChjb2xzID0+IGFwcGx5UHJlZnMoY29scykpLFxuICAgICAgbWFwKGNvbHMgPT4gY29scy5maWx0ZXIoYyA9PiAhYy5oaWRkZW4pKSxcbiAgICAgIHRhcCh2ID0+IHJlbW92ZVVudXNlZERpZmZzKHYsIHRoaXMuX2NvbERpZmZlcnNJbnAsIHRoaXMuX2NvbERpZmZlcnNUcGwpKSxcbiAgICApXG5cbiAgICB0aGlzLmZpbHRlcnMkID0gdGhpcy5fZmlsdGVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKClcblxuICAgIHRoaXMuZmlsdGVyU3RhdGVzID0gdGhpcy5fZmlsdGVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChmaWx0ZXJzID0+IGNvbXBvc2VEYXRhRmlsdGVyU3RhdGVzKGZpbHRlcnMpKVxuICAgIClcblxuICAgIHRoaXMucm93cyQgPSB0aGlzLl9kYXRhU291cmNlU3ViamVjdC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRhdGFTb3VyY2UgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZGF0YVNvdXJjZScsIGRhdGFTb3VyY2UpXG4gICAgICAgIGxldCBkYXRhU3RyZWFtOiBPYnNlcnZhYmxlPGFueVtdPlxuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfmRhdGFzb3VyY2UnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU291cmNlLmNvbm5lY3QodGhpcykgYXMgYW55XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35vYnNlcnZhYmxlJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVNvdXJjZSBhcyBhbnlcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35hcnJheScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IG9mKGRhdGFTb3VyY2UpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35yb3dzIGZhbGxiYWNrJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gdGhpcy5fcm93cy5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLy8gLnBpcGUodGFwKHYgPT4gY29uc29sZS5sb2coJ3Jvd3N+JywgdikpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmV4dGVybmFsRmlsdGVyaW5nKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ25vdCB1c2luZyBleHRlcm5hbEZpbHRlcmluZycpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTdHJlYW0ucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChyb3dzID0+IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdmaWx0ZXJzJywgdikpLFxuICAgICAgICAgICAgICBjb25jYXRNYXAoZmlsdGVycyA9PiBvZihyb3dzKS5waXBlKGNvbXBvc2VEYXRhRmlsdGVycyhmaWx0ZXJzKSkpLFxuICAgICAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnY29tcG9zZWQgZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAgICkpXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLy8gZGF0YVN0cmVhbSA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgLy8gICB0YXAodiA9PiBjb25zb2xlLmxvZygnZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAvLyAgIGNvbmNhdE1hcChmaWx0ZXJzID0+IGRhdGFTdHJlYW0ucGlwZShjb21wb3NlRGF0YUZpbHRlcnMoZmlsdGVycykpKSxcbiAgICAgICAgICAvLyAgIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb21wb3NlZCBmaWx0ZXJzJywgdikpLFxuICAgICAgICAgIC8vIClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhU3RyZWFtLnBpcGUoXG4gICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ3N0cmVhbScsIHYpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG5cbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdmlld0NoYW5nZSBmb3IgQ29sbGVjdGlvblZpZXdlci5cbiAgICB0aGlzLnZpZXdDaGFuZ2UgPSB0aGlzLnBhZ2UucGlwZShtYXAocCA9PiAoeyBzdGFydDogMCwgZW5kOiBwLmNvdW50IH0pKSlcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnJvd0RldGFpbCkge1xuICAgICAgdGhpcy5fcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3dEZXRhaWwuX3RvZ2dsZS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5uZ3hSb3dEZXRhaWwpIHtcbiAgICAgICAgICB0aGlzLm5neFJvd0RldGFpbC50b2dnbGUuZW1pdChldmVudClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TWVudUJhckZpbHRlcnMoZmlsdGVyczogRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5fZmlsdGVyc1N1YmplY3QubmV4dChmaWx0ZXJzIHx8IFtdKVxuICB9XG5cbiAgcHVibGljIGdldENvbHVtbkNvbXBvbmVudChwcm9wTmFtZTogc3RyaW5nKTogRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbkNvbXBvbmVudHMgfHwgdGhpcy5jb2x1bW5Db21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCB0cGwgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMuZmluZCh0ID0+IHQucHJvcCA9PT0gcHJvcE5hbWUpXG4gICAgaWYgKHRwbCkge1xuICAgICAgcmV0dXJuIHRwbFxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBfY29sdW1uRGF0YShjb2w6IGFueSk6IHsgY29sOiBhbnksIGNvbXA6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwgfSB7XG4gICAgY29uc3QgY29tcCA9IHRoaXMuZ2V0Q29sdW1uQ29tcG9uZW50KGNvbC5wcm9wKVxuICAgIHJldHVybiB7IGNvbCwgY29tcCB9XG4gIH1cblxuICBfZ2V0Um93RXhwYW5kZWQocm93OiBhbnkpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGUuYm9keUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQuZ2V0Um93RXhwYW5kZWQocm93KVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5Rm5Db2x1bW4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0ucHJvcFxuICB9XG5cbiAgcHVibGljIG9uRGF0YXRhYmxlUmVzaXplKGV2ZW50OiBJRWxlbWVudFJlc2l6ZWRFdmVudCkge1xuICAgIGlmICh0aGlzLm5neERhdGF0YWJsZSAmJiB0aGlzLm5neERhdGF0YWJsZUVsZW1lbnQgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIGludGVncmF0aW5nIHRoaXMgaW50byB0aGUgbmd4LWRhdGF0YWJsZSBsaWJyYXJ5IHRvIGF2b2lkXG4gICAgICAvLyBtdWx0aXBsZSByZXNpemUgY2FsbHMgd2hlbiB0aGUgdGFibGUgcmVzaXplcyBpdHNlbGYuXG4gICAgICB0aGlzLm5neERhdGF0YWJsZS5yZWNhbGN1bGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgX29uUmVzaXplKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJlc2l6ZS5lbWl0KGV2ZW50KVxuXG4gICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQoZXZlbnQuY29sdW1uKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoZXZlbnQuY29sdW1uKVxuICAgIGlmIChjb2x1bW5Qcm9wKSB7XG4gICAgICBsZXQgYWRkQWx0ZXJhdGlvbiA9IGZhbHNlXG5cbiAgICAgIGlmICghdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0pIHtcbiAgICAgICAgdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0gPSB0cnVlXG4gICAgICAgIGFkZEFsdGVyYXRpb24gPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5pc0RvbmUpIHtcbiAgICAgICAgdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0gPSBmYWxzZVxuICAgICAgICBhZGRBbHRlcmF0aW9uID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRkQWx0ZXJhdGlvbikge1xuICAgICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24oe1xuICAgICAgICAgIGNvbHVtblByb3AsXG4gICAgICAgICAgd2lkdGg6IGV2ZW50LmNvbHVtbi53aWR0aCxcbiAgICAgICAgICBjYW5BdXRvUmVzaXplOiBmYWxzZVxuICAgICAgICB9LCB0cnVlKVxuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25SZW9yZGVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlb3JkZXIuZW1pdChldmVudClcblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgY29uc3QgY3VycmVudE9yZGVyQWx0ZXJhdGlvbiA9IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuZ2V0KCkuZmluZCh4ID0+IHgudHlwZSA9PT0gJ29yZGVyJylcbiAgICAgIGNvbnN0IHN0YXRlOiBPcmRlckNvbHVtbnNBbHRlcmF0aW9uU3RhdGUgPSB7XG4gICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAuLi4oY3VycmVudE9yZGVyQWx0ZXJhdGlvbj8uc3RhdGUuY29sdW1ucyB8fCBbXSkuZmlsdGVyKCh4OiBhbnkpID0+IHguY29sdW1uUHJvcCAhPT0gY29sdW1uUHJvcCksXG4gICAgICAgICAgeyBjb2x1bW5Qcm9wLCBpbmRleDogZXZlbnQubmV3VmFsdWUgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24oc3RhdGUsIHRydWUpXG4gICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICB9XG4gIH1cblxuICBfb25Tb3J0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnQuZW1pdChldmVudClcblxuICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgU29ydENvbHVtbnNBbHRlcmF0aW9uKHsgc29ydHM6IGV2ZW50LnNvcnRzIH0sIHRydWUpXG4gICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gIH1cblxuICBfb25UcmVlQWN0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbmRleCA9IGV2ZW50LnJvd0luZGV4XG4gICAgY29uc3Qgcm93ID0gZXZlbnQucm93XG4gICAgaWYgKHJvdy50cmVlU3RhdHVzID09PSAnY29sbGFwc2VkJykge1xuICAgICAgcm93LnRyZWVTdGF0dXMgPSAnZXhwYW5kZWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2NvbGxhcHNlZCdcbiAgICB9XG4gICAgdGhpcy5yb3dzID0gWyAuLi50aGlzLnJvd3MgXVxuICB9XG5cbiAgcHVibGljIHRyaWdnZXJBY3Rpb25SZWZyZXNoUmVxdWVzdCgpIHtcbiAgICB0aGlzLmFjdGlvblJlZnJlc2hSZXF1ZXN0LmVtaXQodW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBhZ2UgaW5mbyBmcm9tIHRoZSB3cmFwcGVkIE5neERhdGF0YWJsZSBpbnN0YW5jZSBvciBkZWZhdWx0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFnZUluZm8oKTogVGhlU2VhbVBhZ2VJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiB0aGlzLm5neERhdGF0YWJsZT8ub2Zmc2V0ID8/IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5uZ3hEYXRhdGFibGU/LnBhZ2VTaXplID8/IDAsXG4gICAgICBsaW1pdDogdGhpcy5uZ3hEYXRhdGFibGU/LmxpbWl0LFxuICAgICAgY291bnQ6IHRoaXMubmd4RGF0YXRhYmxlPy5jb3VudCA/PyAwXG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRhdGFibGUtd3JhcHBlclwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJzZWFtLWRhdGF0YWJsZS1tZW51LWJhclwiPjwvbmctY29udGVudD5cbiAgPGRpdiBjbGFzcz1cImRhdGF0YWJsZS10YWJsZS13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxuZ3gtZGF0YXRhYmxlXG4gICAgICAgIFtjb2x1bW5Nb2RlXT1cIiRhbnkoY29sdW1uTW9kZSlcIlxuICAgICAgICBbc2Nyb2xsYmFyVl09XCJzY3JvbGxiYXJWXCJcbiAgICAgICAgW3Njcm9sbGJhckhdPVwic2Nyb2xsYmFySFwiXG4gICAgICAgIFt2aXJ0dWFsaXphdGlvbl09XCJ2aXJ0dWFsaXphdGlvblwiXG4gICAgICAgIFt0YXJnZXRNYXJrZXJUZW1wbGF0ZV09XCJ0YXJnZXRNYXJrZXJUZW1wbGF0ZVwiXG4gICAgICAgIFtncm91cFJvd3NCeV09XCIkYW55KGdyb3VwUm93c0J5KVwiXG4gICAgICAgIFtncm91cGVkUm93c109XCIkYW55KGdyb3VwZWRSb3dzKVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCIkYW55KHNlbGVjdGVkKVwiXG4gICAgICAgIFtleHRlcm5hbFBhZ2luZ109XCJleHRlcm5hbFBhZ2luZ1wiXG4gICAgICAgIFtleHRlcm5hbFNvcnRpbmddPVwiZXh0ZXJuYWxTb3J0aW5nXCJcbiAgICAgICAgW2xpbWl0XT1cIiRhbnkobGltaXQpXCJcbiAgICAgICAgW2NvdW50XT1cIiRhbnkoY291bnQpXCJcbiAgICAgICAgW29mZnNldF09XCIkYW55KG9mZnNldClcIlxuICAgICAgICBbbG9hZGluZ0luZGljYXRvcl09XCJsb2FkaW5nSW5kaWNhdG9yXCJcbiAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwiJGFueShzZWxlY3Rpb25UeXBlKVwiXG4gICAgICAgIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgIFtzd2FwQ29sdW1uc109XCJzd2FwQ29sdW1uc1wiXG4gICAgICAgIFtzb3J0VHlwZV09XCIkYW55KHNvcnRUeXBlKVwiXG4gICAgICAgIFtzb3J0c109XCIkYW55KF9zb3J0cylcIlxuICAgICAgICBbY3NzQ2xhc3Nlc109XCJjc3NDbGFzc2VzXCJcbiAgICAgICAgW21lc3NhZ2VzXT1cIm1lc3NhZ2VzXCJcbiAgICAgICAgW3Jvd0lkZW50aXR5XT1cIiRhbnkocm93SWRlbnRpdHkpXCJcbiAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCJcbiAgICAgICAgW3NlbGVjdENoZWNrXT1cInNlbGVjdENoZWNrXCJcbiAgICAgICAgW2Rpc3BsYXlDaGVja109XCIkYW55KGRpc3BsYXlDaGVjaylcIlxuICAgICAgICBbZ3JvdXBFeHBhbnNpb25EZWZhdWx0XT1cImdyb3VwRXhwYW5zaW9uRGVmYXVsdFwiXG4gICAgICAgIFt0cmFja0J5UHJvcF09XCIkYW55KHRyYWNrQnlQcm9wKVwiXG4gICAgICAgIFtzZWxlY3RBbGxSb3dzT25QYWdlXT1cInNlbGVjdEFsbFJvd3NPblBhZ2VcIlxuICAgICAgICBbdHJlZUZyb21SZWxhdGlvbl09XCIkYW55KHRyZWVGcm9tUmVsYXRpb24pXCJcbiAgICAgICAgW3RyZWVUb1JlbGF0aW9uXT1cIiRhbnkodHJlZVRvUmVsYXRpb24pXCJcbiAgICAgICAgW3N1bW1hcnlSb3ddPVwic3VtbWFyeVJvd1wiXG4gICAgICAgIFtzdW1tYXJ5SGVpZ2h0XT1cIiRhbnkoc3VtbWFyeUhlaWdodClcIlxuICAgICAgICBbc3VtbWFyeVBvc2l0aW9uXT1cIiRhbnkoc3VtbWFyeVBvc2l0aW9uKVwiXG4gICAgICAgIFtyb3dzXT1cInJvd3MkIHwgYXN5bmNcIlxuICAgICAgICBbY29sdW1uc109XCIkYW55KGRpc3BsYXlDb2x1bW5zJCB8IGFzeW5jKVwiXG4gICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiJGFueShoZWFkZXJIZWlnaHQpXCJcbiAgICAgICAgW3Jvd0hlaWdodF09XCIkYW55KHJvd0hlaWdodClcIlxuICAgICAgICBbZm9vdGVySGVpZ2h0XT1cIiRhbnkoZm9vdGVySGVpZ2h0KVwiXG4gICAgICAgIChzY3JvbGwpPVwic2Nyb2xsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChhY3RpdmF0ZSk9XCJhY3RpdmF0ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc29ydCk9XCJfb25Tb3J0KCRldmVudClcIlxuICAgICAgICAocGFnZSk9XCJwYWdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChyZW9yZGVyKT1cIl9vblJlb3JkZXIoJGV2ZW50KVwiXG4gICAgICAgIChyZXNpemUpPVwiX29uUmVzaXplKCRldmVudClcIlxuICAgICAgICAodGFibGVDb250ZXh0bWVudSk9XCJ0YWJsZUNvbnRleHRtZW51LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh0cmVlQWN0aW9uKT1cInRyZWVBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlYW1FbGVtUmVzaXplZCk9XCJvbkRhdGF0YWJsZVJlc2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgKHRyZWVBY3Rpb24pPVwiX29uVHJlZUFjdGlvbigkZXZlbnQpXCI+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyIFtyb3dIZWlnaHRdPVwiNTBcIiAjbXlHcm91cEhlYWRlciAqbmdJZj1cImdyb3VwUm93c0J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1ncm91cD1cImdyb3VwXCIgbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIiBuZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlci10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBiZy1saWdodCBwLTFcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJvdHRvbV09XCIhZXhwYW5kZWRcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGF0YXRhYmxlLWljb24tcmlnaHRdPVwiIWV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRhdGF0YWJsZS1pY29uLWRvd25dPVwiZXhwYW5kZWRcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkV4cGFuZC9Db2xsYXBzZSBHcm91cFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJuZ3hEYXRhdGFibGU/Lmdyb3VwSGVhZGVyPy50b2dnbGVFeHBhbmRHcm91cChncm91cClcIj5cbiAgICAgICAgICAgICAgPGI+QWdlOiB7eyBncm91cC5hZ2UgfX08L2I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLXJvdy1kZXRhaWwgKm5nSWY9XCJyb3dEZXRhaWwgJiYgcm93RGV0YWlsLnRlbXBsYXRlXCJcbiAgICAgICAgICBbcm93SGVpZ2h0XT1cInJvd0RldGFpbC5yb3dIZWlnaHQgfHwgMFwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIiRhbnkocm93RGV0YWlsLnRlbXBsYXRlKVwiXG4gICAgICAgICAgKHRvZ2dsZSk9XCJyb3dEZXRhaWwudG9nZ2xlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtcm93LWRldGFpbD5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1mb290ZXIgKm5nSWY9XCJmb290ZXIgJiYgZm9vdGVyLnRlbXBsYXRlXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiJGFueShmb290ZXIudGVtcGxhdGUpXCI+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1mb290ZXI+XG4gICAgICA8L25neC1kYXRhdGFibGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYmxhbmtIZWFkZXJUcGwgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUcGwgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGVcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1zb3J0Rm49XCJzb3J0Rm5cIj5cbiAgPHN0cm9uZyAqbmdJZj1cIiFjb2x1bW4uc29ydGFibGVcIiBjbGFzcz1cImRyYWdnYWJsZVwiPnt7Y29sdW1uLm5hbWV9fTwvc3Ryb25nPlxuICA8c3Ryb25nICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCIgY2xhc3M9XCJkYXRhdGFibGUtc29ydC10YXJnZXQgZHJhZ2dhYmxlXCIgKGNsaWNrKT1cInNvcnRGbigpXCI+e3tjb2x1bW4ubmFtZX19PC9zdHJvbmc+XG4gIDxkaXYgY2xhc3M9XCJkYXRhdGFibGUtY29sdW1uLWhlYWRlci1zZXBhcmF0b3JcIiBbYXR0ci5kYXRhLWNvbHVtbi1pZF09XCJjb2x1bW4uJCRpZFwiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjZWxsVHlwZVNlbGVjdG9yVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPHNlYW0tdGFibGUtY2VsbC10eXBlLXNlbGVjdG9yICpuZ0lmPVwicm93XCJcbiAgICBbdHlwZV09XCJjb2x1bW4uY2VsbFR5cGVcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICBbcm93XT1cInJvd1wiXG4gICAgW2NvbERhdGFdPVwiY29sdW1uXCI+XG4gIDwvc2VhbS10YWJsZS1jZWxsLXR5cGUtc2VsZWN0b3I+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvbk1lbnVDZWxsVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cgJiYgcm93QWN0aW9uSXRlbT8udGVtcGxhdGVcIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkocm93QWN0aW9uSXRlbT8udGVtcGxhdGUpXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmVlVG9nZ2xlVHBsIG5neC1kYXRhdGFibGUtdHJlZS10b2dnbGUgbGV0LXRyZWU9XCJjZWxsQ29udGV4dFwiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJwLTAgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYnRuXCJcbiAgICBbZGlzYWJsZWRdPVwidHJlZS50cmVlU3RhdHVzPT09J2Rpc2FibGVkJ1wiXG4gICAgKGNsaWNrKT1cInRyZWUub25UcmVlQWN0aW9uKClcIj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdsb2FkaW5nJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhU3Bpbm5lclwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nY29sbGFwc2VkJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhQ2hldnJvblJpZ2h0XCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdleHBhbmRlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25Eb3duXCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdkaXNhYmxlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25SaWdodFwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
879
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsU0FBUyxFQUlULFFBQVEsRUFDUixNQUFNLEVBR04sU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDaEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUN0RyxPQUFP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YUFBYTtzQkFEaEIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVN4QyxTQUFTO3NCQURaLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTcEMsY0FBYztzQkFEakIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBU3pDLG1CQUFtQjtzQkFEdEIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBc0JsRCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUUsUUFBUSxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJ1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VBcnJheSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQgeyBDb2xsZWN0aW9uVmlld2VyLCBEYXRhU291cmNlLCBpc0RhdGFTb3VyY2UsIExpc3RSYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucydcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIGlzRGV2TW9kZSxcbiAgS2V5VmFsdWVEaWZmZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjb25jYXRNYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBmYUNoZXZyb25Eb3duLCBmYUNoZXZyb25SaWdodCwgZmFGaWx0ZXIsIGZhU3Bpbm5lciB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucydcbmltcG9ydCB7XG4gIENvbHVtbk1vZGUsXG4gIENvbnRleHRtZW51VHlwZSxcbiAgRGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGUsXG4gIERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSxcbiAgRGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlLFxuICBEYXRhdGFibGVDb21wb25lbnQgYXMgTmd4RGF0YXRhYmxlQ29tcG9uZW50LFxuICBEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUsXG4gIFNvcnRUeXBlLFxuICBUcmVlU3RhdHVzXG59IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcblxuaW1wb3J0IHsgSW5wdXRCb29sZWFuLCBJbnB1dE51bWJlciB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuaW1wb3J0IHsgY29tcG9zZURhdGFGaWx0ZXJzLCBjb21wb3NlRGF0YUZpbHRlclN0YXRlcywgRGF0YUZpbHRlciwgRGF0YUZpbHRlclN0YXRlIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2RhdGEtZmlsdGVycydcbmltcG9ydCB7IElFbGVtZW50UmVzaXplZEV2ZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3NoYXJlZCdcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkLCBub3ROdWxsT3JVbmRlZmluZWQsIHdhaXRPbkNvbmRpdGlvbkFzeW5jIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuXG5pbXBvcnQgeyBEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWFjdGlvbi1tZW51L2RhdGF0YWJsZS1hY3Rpb24tbWVudS5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtY29sdW1uL2RhdGF0YWJsZS1jb2x1bW4uY29tcG9uZW50J1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGF0YWJsZS1mb290ZXIvZGF0YXRhYmxlLWZvb3Rlci5kaXJlY3RpdmUnXG5pbXBvcnQgeyBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLW1lbnUtYmFyL2RhdGF0YWJsZS1tZW51LWJhci5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLXJvdy1kZXRhaWwvZGF0YXRhYmxlLXJvdy1kZXRhaWwuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0YXRhYmxlLXJvdy1hY3Rpb24taXRlbS5kaXJlY3RpdmUnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IgfSBmcm9tICcuLi9tb2RlbHMvZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgRGF0YXRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uL21vZGVscy9kYXRhdGFibGUtZGF0YS1zb3VyY2UnXG5pbXBvcnQgeyBUaGVTZWFtUGFnZUluZm8gfSBmcm9tICcuLi9tb2RlbHMvcGFnZS1pbmZvJ1xuaW1wb3J0IHsgU29ydEV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL3NvcnQtZXZlbnQnXG5pbXBvcnQgeyBTb3J0SXRlbSB9IGZyb20gJy4uL21vZGVscy9zb3J0LWl0ZW0nXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbidcbmltcG9ydCB7IENvbHVtbnNNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbHVtbnMtbWFuYWdlci5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhdGFibGUtY29sdW1uLWNoYW5nZXMuc2VydmljZSdcbmltcG9ydCB7IERhdGF0YWJsZVByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RhdGF0YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IgfSBmcm9tICcuLi90b2tlbnMvZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgcmVtb3ZlVW51c2VkRGlmZnMgfSBmcm9tICcuLi91dGlscy9yZW1vdmUtdW51c2VkLWRpZmZzJ1xuaW1wb3J0IHsgdHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zIH0gZnJvbSAnLi4vdXRpbHMvdHJhbnNsYXRlLXRlbXBsYXRlcydcbmltcG9ydCB7IENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29sdW1ucy1hbHRlcmF0aW9ucy1tYW5hZ2VyLnNlcnZpY2UnXG5pbXBvcnQgeyBDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBtYXBDb2x1bW5zQWx0ZXJhdGlvbnNTdGF0ZXMgfSBmcm9tICcuLi91dGlscy9tYXAtY29sdW1ucy1hbHRlcmF0aW9ucy1zdGF0ZXMnXG5pbXBvcnQgeyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvd2lkdGguY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgZ2V0Q29sdW1uUHJvcCB9IGZyb20gJy4uL3V0aWxzL2dldC1jb2x1bW4tcHJvcCdcbmltcG9ydCB7IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24sIE9yZGVyQ29sdW1uc0FsdGVyYXRpb25TdGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL29yZGVyLmNvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IFNvcnRDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL3NvcnQuY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgQWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uLCBpc0FjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiB9IGZyb20gJy4uL21vZGVscy9hY3Rpb24taXRlbS1jb2x1bW4tcG9zaXRpb24nXG5pbXBvcnQgeyBDb2x1bW5zRmlsdGVyc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2x1bW5zLWZpbHRlcnMuc2VydmljZSdcbmltcG9ydCB7IFRIRVNFQU1fREFUQVRBQkxFX0NPTkZJRywgVGhlU2VhbURhdGF0YWJsZUNvbHVtbkZpbHRlclVwZGF0ZU1ldGhvZCwgVGhlU2VhbURhdGF0YWJsZUNvbmZpZywgVGhlU2VhbURhdGF0YWJsZU1lc3NhZ2VzIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGF0YWJsZS1jb25maWcnXG5pbXBvcnQgeyBTZWFtSWNvbiB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9pY29uJ1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUNvbHVtbkZpbHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0YXRhYmxlLWNvbHVtbi1maWx0ZXIuZGlyZWN0aXZlJ1xuXG4vKipcbiAqIE5PVEU6IFRoaXMgaXMgc3RpbGwgYmVpbmcgd29ya2VkIG9uLiBJIGFtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoaXMgbW9kZWxcbiAqIGJlY2F1c2UgYG5neC1kYXRhdGFibGVgIGp1c3QgdXNlcyBhbiB1bnR5cGVkIG9iamVjdCBhbmQgc2V0cyBwcm9wZXJ0aWVzIGluXG4gKiBtdWx0aXBsZSBwbGFjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNlbGxDb250ZXh0IHtcbiAgYWxsUm93c1NlbGVjdGVkOiBmYWxzZVxuXG4gIHNlbGVjdEZuOiAoKSA9PiBhbnlcbiAgc29ydERpcj86ICdhc2MnIHwgJ2Rlc2MnXG4gIHNvcnRGbjogKCkgPT4gYW55XG5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG5cbiAgb25DaGVja2JveENoYW5nZUZuPzogYW55XG4gIGFjdGl2YXRlRm4/OiBhbnlcbiAgcm93PzogYW55XG4gIGdyb3VwPzogYW55XG4gIHZhbHVlPzogYW55XG4gIGNvbHVtbj86IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5cbiAgcm93SGVpZ2h0PzogbnVtYmVyXG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuXG4gIHJvd0luZGV4PzogbnVtYmVyXG4gIHRyZWVTdGF0dXM/OiBUcmVlU3RhdHVzXG4gIG9uVHJlZUFjdGlvbj86IGFueVxufVxuXG4vKipcbiAqIEludGVuZGVkIGZvciBpbnRlcm5hbCBjbGFzc2VzIGRlY2xhcmVkIGJ5IHRoZSBgVGhlU2VhbURhdGF0YWJsZU1vZHVsZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVTRUFNX0RBVEFUQUJMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYXRhRmlsdGVyPignTGliRGF0YXRhYmxlJylcblxuZXhwb3J0IGNvbnN0IF9USEVTRUFNX0RBVEFUQUJMRTogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX0RBVEFUQUJMRSxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhdGFibGVDb21wb25lbnQpXG59XG5cbmV4cG9ydCBjb25zdCBfVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXRhYmxlQ29tcG9uZW50KVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWRhdGF0YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZURvd24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScsIG9wYWNpdHk6ICcwJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAnMScgfSkpLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwJSknLCBvcGFjaXR5OiAnMCcgfSkpLFxuICAgICAgXSlcbiAgICBdKVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBfVEhFU0VBTV9EQVRBVEFCTEUsXG4gICAgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UsXG4gICAgX1RIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SLFxuICAgIENvbHVtbnNNYW5hZ2VyU2VydmljZSxcbiAgICBDb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyU2VydmljZSxcbiAgICBDb2x1bW5zRmlsdGVyc1NlcnZpY2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgVGhlU2VhbURhdGF0YWJsZUFjY2Vzc29yLCBDb2xsZWN0aW9uVmlld2VyIHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsUGFnaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsU29ydGluZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbEZpbHRlcmluZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sb2FkaW5nSW5kaWNhdG9yOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jlb3JkZXJhYmxlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N3YXBDb2x1bW5zOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2dyb3VwRXhwYW5zaW9uRGVmYXVsdDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zZWxlY3RBbGxSb3dzT25QYWdlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1bW1hcnlSb3c6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdmlydHVhbGl6YXRpb246IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2Nyb2xsYmFyVjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zY3JvbGxiYXJIOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xpbWl0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY291bnQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vZmZzZXQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oZWFkZXJIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yb3dIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9mb290ZXJIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdW1tYXJ5SGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY29sdW1uczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc29ydHM6IFNvcnRJdGVtW10gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgcmVhZG9ubHkgX2ZhQ2hldnJvbkRvd24gPSBmYUNoZXZyb25Eb3duXG4gIHJlYWRvbmx5IF9mYUNoZXZyb25SaWdodCA9IGZhQ2hldnJvblJpZ2h0XG4gIHJlYWRvbmx5IF9mYVNwaW5uZXIgPSBmYVNwaW5uZXJcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKVxuICBwcml2YXRlIHJlYWRvbmx5IF9tZW51QmFyc0ZpbHRlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhRmlsdGVyW10+KFtdKVxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBwcml2YXRlIF9yZXNpemluZzogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyU3RhdGVzOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJTdGF0ZVtdPlxuXG4gIGdldCBmaWx0ZXJzKCk6IERhdGFGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMuX21lbnVCYXJzRmlsdGVyc1N1YmplY3QudmFsdWUsXG4gICAgICAuLi50aGlzLl9jb2x1bW5zRmlsdGVycy5maWx0ZXJzKClcbiAgICBdXG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVycyQ6IE9ic2VydmFibGU8RGF0YUZpbHRlcltdPlxuXG4gIEBJbnB1dCgpXG4gIGdldCBwcmVmZXJlbmNlc0tleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHsgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnZhbHVlIH1cbiAgc2V0IHByZWZlcmVuY2VzS2V5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7IHRoaXMuX3ByZWZlcmVuY2VzS2V5Lm5leHQodmFsdWUgfHwgdW5kZWZpbmVkKSB9XG4gIHByaXZhdGUgX3ByZWZlcmVuY2VzS2V5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpXG5cbiAgQElucHV0KCkgdGFyZ2V0TWFya2VyVGVtcGxhdGU6IGFueVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW5zKHZhbHVlOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRJbnB1dENvbHVtbnMoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdKVxuICAgIHRoaXMuX2NvbHVtbnNGaWx0ZXJzLnJlZ2lzdGVyQ29sdW1uRmlsdGVycyhBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10pXG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcm93cygpOiBhbnlbXSB7IHJldHVybiB0aGlzLl9yb3dzLnZhbHVlIH1cbiAgc2V0IHJvd3ModmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5fcm93cy5uZXh0KHZhbHVlIHx8IFtdKVxuICB9XG4gIHByaXZhdGUgX3Jvd3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSlcblxuICBwdWJsaWMgcm93cyQ6IE9ic2VydmFibGU8YW55W10+XG5cbiAgQElucHV0KCkgY29sdW1uTW9kZTogQ29sdW1uTW9kZSB8IHVuZGVmaW5lZCB8IG51bGwgPSBDb2x1bW5Nb2RlLmZvcmNlXG5cbiAgQElucHV0KCkgZ3JvdXBSb3dzQnk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgZ3JvdXBlZFJvd3M6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBbXVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFBhZ2luZyA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFNvcnRpbmcgPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXh0ZXJuYWxGaWx0ZXJpbmcgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKDApIGNvdW50ID0gMFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoMCkgb2Zmc2V0ID0gMFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBsb2FkaW5nSW5kaWNhdG9yID0gZmFsc2VcblxuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0aW9uVHlwZSgpOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkIHwgbnVsbCB7IHJldHVybiB0aGlzLl9jb2x1bW5zTWFuYWdlci5nZXRTZWxlY3Rpb25UeXBlKCkgfVxuICBzZXQgc2VsZWN0aW9uVHlwZSh2YWx1ZTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRTZWxlY3Rpb25UeXBlKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSByZW9yZGVyYWJsZSA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN3YXBDb2x1bW5zID0gZmFsc2VcblxuICBASW5wdXQoKVxuICBnZXQgc29ydFR5cGUoKTogU29ydFR5cGUgeyByZXR1cm4gdGhpcy5fc29ydFR5cGUgfVxuICBzZXQgc29ydFR5cGUodmFsdWU6IFNvcnRUeXBlKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgJiYgKHZhbHVlID09PSBTb3J0VHlwZS5zaW5nbGUgfHwgdmFsdWUgPT09IFNvcnRUeXBlLm11bHRpKSkge1xuICAgICAgdGhpcy5fc29ydFR5cGUgPSB2YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zb3J0VHlwZSA9IFNvcnRUeXBlLnNpbmdsZVxuICAgIH1cbiAgfVxuICBfc29ydFR5cGU6IFNvcnRUeXBlID0gU29ydFR5cGUuc2luZ2xlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnRzKCk6IFNvcnRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZSA/IHRoaXMubmd4RGF0YXRhYmxlLnNvcnRzIDogdGhpcy5fc29ydHNcbiAgfVxuICBzZXQgc29ydHModmFsdWU6IFNvcnRJdGVtW10pIHtcbiAgICB0aGlzLl9zb3J0cyA9IG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyBjb2VyY2VBcnJheSh2YWx1ZSkgOiBbXVxuICB9XG4gIF9zb3J0czogU29ydEl0ZW1bXSA9IFtdXG5cbiAgQElucHV0KCkgZ2V0IGNzc0NsYXNzZXMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jc3NDbGFzc2VzXG4gIH1cbiAgc2V0IGNzc0NsYXNzZXModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2Nzc0NsYXNzZXMgPSB2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmIChub3ROdWxsT3JVbmRlZmluZWQodGhpcy5fY29uZmlnPy5jc3NDbGFzc2VzKSkge1xuICAgICAgdGhpcy5fY3NzQ2xhc3NlcyA9IHRoaXMuX2NvbmZpZz8uY3NzQ2xhc3Nlc1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2Nzc0NsYXNzZXMgPSB0aGlzLl9jc3NDbGFzc2VzRGVmYXVsdFxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9jc3NDbGFzc2VzRGVmYXVsdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBzb3J0QXNjZW5kaW5nOiAnZGF0YXRhYmxlLWljb24tdXAnLFxuICAgIHNvcnREZXNjZW5kaW5nOiAnZGF0YXRhYmxlLWljb24tZG93bicsXG4gICAgcGFnZXJMZWZ0QXJyb3c6ICdkYXRhdGFibGUtaWNvbi1sZWZ0JyxcbiAgICBwYWdlclJpZ2h0QXJyb3c6ICdkYXRhdGFibGUtaWNvbi1yaWdodCcsXG4gICAgcGFnZXJQcmV2aW91czogJ2RhdGF0YWJsZS1pY29uLXByZXYnLFxuICAgIHBhZ2VyTmV4dDogJ2RhdGF0YWJsZS1pY29uLXNraXAnXG4gIH1cbiAgX2Nzc0NsYXNzZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgZ2V0IG1lc3NhZ2VzKCk6IFRoZVNlYW1EYXRhdGFibGVNZXNzYWdlcyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlc1xuICB9XG4gIHNldCBtZXNzYWdlcyh2YWx1ZTogVGhlU2VhbURhdGF0YWJsZU1lc3NhZ2VzIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlcyA9IHZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLl9jb25maWc/Lm1lc3NhZ2VzKSkge1xuICAgICAgdGhpcy5fbWVzc2FnZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuX21lc3NhZ2VzRGVmYXVsdCxcbiAgICAgICAgLi4udGhpcy5fY29uZmlnPy5tZXNzYWdlc1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX21lc3NhZ2VzID0gdGhpcy5fbWVzc2FnZXNEZWZhdWx0XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX21lc3NhZ2VzRGVmYXVsdDogVGhlU2VhbURhdGF0YWJsZU1lc3NhZ2VzID0ge1xuICAgIC8vIE1lc3NhZ2UgdG8gc2hvdyB3aGVuIGFycmF5IGlzIHByZXNlbnRlZFxuICAgIC8vIGJ1dCBjb250YWlucyBubyB2YWx1ZXNcbiAgICBlbXB0eU1lc3NhZ2U6ICdObyByZWNvcmRzIGZvdW5kJyxcblxuICAgIC8vIEZvb3RlciB0b3RhbCBtZXNzYWdlXG4gICAgdG90YWxNZXNzYWdlOiAndG90YWwnLFxuXG4gICAgLy8gRm9vdGVyIHNlbGVjdGVkIG1lc3NhZ2VcbiAgICBzZWxlY3RlZE1lc3NhZ2U6ICdzZWxlY3RlZCdcbiAgfVxuICBfbWVzc2FnZXM6IFRoZVNlYW1EYXRhdGFibGVNZXNzYWdlcyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSByb3dJZGVudGl0eTogKCh4OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgfCBudWxsID0gKHg6IGFueSkgPT4geFxuXG4gIEBJbnB1dCgpIHJvd0NsYXNzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgc2VsZWN0Q2hlY2s6IGFueSB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgZGlzcGxheUNoZWNrOiAoKHJvdzogYW55LCBjb2x1bW4/OiBhbnksIHZhbHVlPzogYW55KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZ3JvdXBFeHBhbnNpb25EZWZhdWx0ID0gZmFsc2VcblxuICBASW5wdXQoKSB0cmFja0J5UHJvcDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzZWxlY3RBbGxSb3dzT25QYWdlID0gZmFsc2VcblxuICBASW5wdXQoKSB0cmVlRnJvbVJlbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIHRyZWVUb1JlbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzdW1tYXJ5Um93ID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgc3VtbWFyeUhlaWdodCA9IDMwXG4gIEBJbnB1dCgpIHN1bW1hcnlQb3NpdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCA9ICd0b3AnXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHZpcnR1YWxpemF0aW9uID0gdHJ1ZVxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpXG4gIGdldCBoZWFkZXJIZWlnaHQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlckhlaWdodFxuICB9XG4gIHNldCBoZWFkZXJIZWlnaHQodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5faGVhZGVySGVpZ2h0ID0gdmFsdWVcbiAgICB9XG4gICAgZWxzZSBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHRoaXMuX2NvbmZpZz8uaGVhZGVySGVpZ2h0KSkge1xuICAgICAgdGhpcy5faGVhZGVySGVpZ2h0ID0gdGhpcy5fY29uZmlnPy5oZWFkZXJIZWlnaHRcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9oZWFkZXJIZWlnaHQgPSB0aGlzLl9oZWFkZXJIZWlnaHREZWZhdWx0XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlYWRlckhlaWdodERlZmF1bHQ6IG51bWJlciA9IDUwXG4gIF9oZWFkZXJIZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKVxuICBnZXQgcm93SGVpZ2h0KCk6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9yb3dIZWlnaHRcbiAgfVxuICBzZXQgcm93SGVpZ2h0KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3Jvd0hlaWdodCA9IHZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLl9jb25maWc/LnJvd0hlaWdodCkpIHtcbiAgICAgIHRoaXMuX3Jvd0hlaWdodCA9IHRoaXMuX2NvbmZpZz8ucm93SGVpZ2h0XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fcm93SGVpZ2h0ID0gdGhpcy5fcm93SGVpZ2h0RGVmYXVsdFxuICAgIH1cbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9yb3dIZWlnaHREZWZhdWx0OiBudW1iZXIgPSA1MFxuICBfcm93SGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKClcbiAgZ2V0IGZvb3RlckhlaWdodCgpOiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZm9vdGVySGVpZ2h0XG4gIH1cbiAgc2V0IGZvb3RlckhlaWdodCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9mb290ZXJIZWlnaHQgPSB2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmIChub3ROdWxsT3JVbmRlZmluZWQodGhpcy5fY29uZmlnPy5mb290ZXJIZWlnaHQpKSB7XG4gICAgICB0aGlzLl9mb290ZXJIZWlnaHQgPSB0aGlzLl9jb25maWc/LmZvb3RlckhlaWdodFxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2Zvb3RlckhlaWdodCA9IHRoaXMuX2Zvb3RlckhlaWdodERlZmF1bHRcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfZm9vdGVySGVpZ2h0RGVmYXVsdDogbnVtYmVyID0gNDBcbiAgX2Zvb3RlckhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzY3JvbGxiYXJWID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFySCA9IHRydWVcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YXRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdmFsdWUuc2V0RGF0YXRhYmxlQWNjZXNzb3IodGhpcylcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QubmV4dCh2YWx1ZSB8fCB1bmRlZmluZWQpXG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwb3NpdGlvbiBiZWhhdmlvciBmb3Igb3B0aW9uYWwgQWN0aW9uIE1lbnUgQnV0dG9uIGNvbHVtbi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYGZyb3plblJpZ2h0YC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24oKTogQWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2FjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiB9XG4gIHNldCBhY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24odmFsdWU6IEFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpICYmIGlzQWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uKHZhbHVlKSkge1xuICAgICAgdGhpcy5fYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uID0gdmFsdWVcbiAgICB9XG4gICAgZWxzZSBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHRoaXMuX2NvbmZpZz8uYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uKSAmJiBpc0FjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbih0aGlzLl9jb25maWc/LmFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIHRoaXMuX2FjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiA9IHRoaXMuX2NvbmZpZz8uYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uID0gdGhpcy5fYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uRGVmYXVsdFxuICAgIH1cblxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbih0aGlzLl9hY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24pXG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uRGVmYXVsdDogQWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uID0gJ2Zyb3plblJpZ2h0J1xuICBfYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uOiBBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gfCB1bmRlZmluZWRcblxuICBASW5wdXQoKSBnZXQgY29sdW1uRmlsdGVySWNvbigpOiBTZWFtSWNvbiB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5GaWx0ZXJJY29uXG4gIH1cbiAgc2V0IGNvbHVtbkZpbHRlckljb24odmFsdWU6IFNlYW1JY29uIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJJY29uID0gdmFsdWVcbiAgICB9XG4gICAgZWxzZSBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHRoaXMuX2NvbmZpZz8uY29sdW1uRmlsdGVySWNvbikpIHtcbiAgICAgIHRoaXMuX2NvbHVtbkZpbHRlckljb24gPSB0aGlzLl9jb25maWc/LmNvbHVtbkZpbHRlckljb25cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJJY29uID0gdGhpcy5fY29sdW1uRmlsdGVySWNvbkRlZmF1bHRcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uRmlsdGVySWNvbkRlZmF1bHQ6IFNlYW1JY29uID0gZmFGaWx0ZXJcbiAgX2NvbHVtbkZpbHRlckljb246IFNlYW1JY29uIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIGdldCBjb2x1bW5GaWx0ZXJVcGRhdGVNZXRob2QoKTogVGhlU2VhbURhdGF0YWJsZUNvbHVtbkZpbHRlclVwZGF0ZU1ldGhvZCB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5GaWx0ZXJVcGRhdGVNZXRob2RcbiAgfVxuICBzZXQgY29sdW1uRmlsdGVyVXBkYXRlTWV0aG9kKHZhbHVlOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uRmlsdGVyVXBkYXRlTWV0aG9kIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJVcGRhdGVNZXRob2QgPSB2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmIChub3ROdWxsT3JVbmRlZmluZWQodGhpcy5fY29uZmlnPy5jb2x1bW5GaWx0ZXJVcGRhdGVNZXRob2QpKSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJVcGRhdGVNZXRob2QgPSB0aGlzLl9jb25maWc/LmNvbHVtbkZpbHRlclVwZGF0ZU1ldGhvZFxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbHVtbkZpbHRlclVwZGF0ZU1ldGhvZCA9IHRoaXMuX2NvbHVtbkZpbHRlclVwZGF0ZU1ldGhvZERlZmF1bHRcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uRmlsdGVyVXBkYXRlTWV0aG9kRGVmYXVsdDogVGhlU2VhbURhdGF0YWJsZUNvbHVtbkZpbHRlclVwZGF0ZU1ldGhvZCA9ICd2YWx1ZUNoYW5nZXMnXG4gIF9jb2x1bW5GaWx0ZXJVcGRhdGVNZXRob2Q6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5GaWx0ZXJVcGRhdGVNZXRob2QgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgZ2V0IGNvbHVtbkZpbHRlclVwZGF0ZURlYm91bmNlKCk6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5GaWx0ZXJVcGRhdGVEZWJvdW5jZVxuICB9XG4gIHNldCBjb2x1bW5GaWx0ZXJVcGRhdGVEZWJvdW5jZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJVcGRhdGVEZWJvdW5jZSA9IHZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLl9jb25maWc/LmNvbHVtbkZpbHRlclVwZGF0ZURlYm91bmNlKSkge1xuICAgICAgdGhpcy5fY29sdW1uRmlsdGVyVXBkYXRlRGVib3VuY2UgPSB0aGlzLl9jb25maWc/LmNvbHVtbkZpbHRlclVwZGF0ZURlYm91bmNlXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fY29sdW1uRmlsdGVyVXBkYXRlRGVib3VuY2UgPSB0aGlzLl9jb2x1bW5GaWx0ZXJVcGRhdGVEZWJvdW5jZURlZmF1bHRcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uRmlsdGVyVXBkYXRlRGVib3VuY2VEZWZhdWx0OiBudW1iZXIgPSA0MDBcbiAgX2NvbHVtbkZpbHRlclVwZGF0ZURlYm91bmNlOiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSByZWFkb25seSBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBzb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0RXZlbnQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoZVNlYW1QYWdlSW5mbz4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVvcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVzaXplID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRhYmxlQ29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6IENvbnRleHRtZW51VHlwZSwgY29udGVudDogYW55IH0+KGZhbHNlKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGlvblJlZnJlc2hSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBoaWRkZW5Db2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50KVxuICBzZXQgY29sdW1uQ29tcG9uZW50cyh2YWx1ZTogUXVlcnlMaXN0PERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudD4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRUZW1wbGF0ZUNvbHVtbnModHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zKHZhbHVlPy50b0FycmF5KCkgPz8gW10pKVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBhY3Rpb25NZW51PzogRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudFxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUpXG4gIGdldCByb3dBY3Rpb25JdGVtKCk6IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fcm93QWN0aW9uSXRlbSB9XG4gIHNldCByb3dBY3Rpb25JdGVtKHZhbHVlOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcm93QWN0aW9uSXRlbSA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0Um93QWN0aW9uSXRlbShub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfcm93QWN0aW9uSXRlbTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZFxuXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcm93RGV0YWlsPzogVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuICBAQ29udGVudENoaWxkKFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGZvb3Rlcj86IFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQpXG4gIGdldCBtZW51QmFyQ29tcG9uZW50KCk6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fbWVudUJhckNvbXBvbmVudCB9XG4gIHNldCBtZW51QmFyQ29tcG9uZW50KHZhbHVlOiBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbWVudUJhckNvbXBvbmVudCA9IHZhbHVlXG5cbiAgICBpZiAodGhpcy5fbWVudUJhclN1YikgeyB0aGlzLl9tZW51QmFyU3ViLnVuc3Vic2NyaWJlKCkgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZXRNZW51QmFyRmlsdGVycyh2YWx1ZS5maWx0ZXJzKCkpXG5cbiAgICAgIHRoaXMuX21lbnVCYXJTdWIgPSB0aGlzLl9tZW51QmFyQ29tcG9uZW50Py5maWx0ZXJzQ2hhbmdlZFxuICAgICAgICAuc3Vic2NyaWJlKHYgPT4geyB0aGlzLl9zZXRNZW51QmFyRmlsdGVycyh2YWx1ZS5maWx0ZXJzKCkpIH0pXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX21lbnVCYXJDb21wb25lbnQ6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBfbWVudUJhclN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG5cbiAgQENvbnRlbnRDaGlsZHJlbihUaGVTZWFtRGF0YXRhYmxlQ29sdW1uRmlsdGVyRGlyZWN0aXZlKVxuICBzZXQgY29sdW1uRmlsdGVyVGVtcGxhdGVzKHZhbHVlOiBRdWVyeUxpc3Q8VGhlU2VhbURhdGF0YWJsZUNvbHVtbkZpbHRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jb2x1bW5zRmlsdGVycy5zZXRGaWx0ZXJUZW1wbGF0ZXModmFsdWU/LnRvQXJyYXkoKSA/PyBbXSlcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoTmd4RGF0YXRhYmxlQ29tcG9uZW50KSBuZ3hEYXRhdGFibGU/OiBOZ3hEYXRhdGFibGVDb21wb25lbnRcbiAgQFZpZXdDaGlsZChOZ3hEYXRhdGFibGVDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuZ3hEYXRhdGFibGVFbGVtZW50PzogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSkgbmd4Um93RGV0YWlsPzogRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlXG5cbiAgQFZpZXdDaGlsZCgnYWN0aW9uTWVudUNlbGxUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgYWN0aW9uTWVudUNlbGxUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCB9XG4gIHNldCBhY3Rpb25NZW51Q2VsbFRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2FjdGlvbk1lbnVDZWxsVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRBY3Rpb25NZW51Q2VsbFRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfYWN0aW9uTWVudUNlbGxUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCd0cmVlVG9nZ2xlVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IHRyZWVUb2dnbGVUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3RyZWVUb2dnbGVUcGwgfVxuICBzZXQgdHJlZVRvZ2dsZVRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdHJlZVRvZ2dsZVRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0VHJlZVRvZ2dsZVRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfdHJlZVRvZ2dsZVRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnaGVhZGVyVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGhlYWRlclRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2hlYWRlclRwbCB9XG4gIHNldCBoZWFkZXJUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9oZWFkZXJUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEhlYWRlclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfaGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnYmxhbmtIZWFkZXJUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgYmxhbmtIZWFkZXJUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9ibGFua0hlYWRlclRwbCB9XG4gIHNldCBibGFua0hlYWRlclRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2JsYW5rSGVhZGVyVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRCbGFua0hlYWRlclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfYmxhbmtIZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCdjZWxsVHlwZVNlbGVjdG9yVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGNlbGxUeXBlU2VsZWN0b3JUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9jZWxsVHlwZVNlbGVjdG9yVHBsIH1cbiAgc2V0IGNlbGxUeXBlU2VsZWN0b3JUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jZWxsVHlwZVNlbGVjdG9yVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRDZWxsVHlwZVNlbGVjdG9yVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9jZWxsVHlwZVNlbGVjdG9yVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgcHVibGljIGNvbHVtbkNvbXBvbmVudHMkPzogT2JzZXJ2YWJsZTxEYXRhdGFibGVDb2x1bW5Db21wb25lbnRbXT5cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc0lucDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc1RwbDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgY29sdW1ucyQ6IE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZUNvbHVtbltdPlxuICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheUNvbHVtbnMkOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT5cblxuICB2aWV3Q2hhbmdlOiBPYnNlcnZhYmxlPExpc3RSYW5nZT5cblxuICBwcml2YXRlIF9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFlcblxuICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBET00tZGVwZW5kZW50IGNvZGUgd2hlbiBhIHdheSB0byBwcm9wZXJ0eSBsaXN0ZW4gZm9yXG4gIC8vIGRibGNsaWNrIG9uIHRoZSBoZWFkZXIgcmVhc2l6ZSBoYW5kbGVzLlxuICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsgJyRldmVudCcgXSlcbiAgX2RibENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpc0hhbmRsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygncmVzaXplLWhhbmRsZScpXG4gICAgaWYgKGlzSGFuZGxlKSB7XG4gICAgICBjb25zdCBpc1Jlc2l6ZWFibGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc2l6ZWFibGUnKVxuICAgICAgaWYgKGlzUmVzaXplYWJsZSkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBjb25zdCBpZCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnRcbiAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy5kYXRhdGFibGUtY29sdW1uLWhlYWRlci1zZXBhcmF0b3InKVxuICAgICAgICAgID8uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbHVtbi1pZCcpXG4gICAgICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmNvbHVtbnMkLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgKS5zdWJzY3JpYmUoY29sdW1ucyA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGMgPT4gYy4kJGlkID09PSBpZClcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5Qcm9wID0gZ2V0Q29sdW1uUHJvcChjb2x1bW4pXG4gICAgICAgICAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgICAgICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24oeyBjb2x1bW5Qcm9wLCBjYW5BdXRvUmVzaXplOiB0cnVlIH0sIGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcHJlZmVyZW5jZXM6IERhdGF0YWJsZVByZWZlcmVuY2VzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5zTWFuYWdlcjogQ29sdW1uc01hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXI6IENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnNGaWx0ZXJzOiBDb2x1bW5zRmlsdGVyc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChUSEVTRUFNX0RBVEFUQUJMRV9DT05GSUcpIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZz86IFRoZVNlYW1EYXRhdGFibGVDb25maWdcbiAgKSB7XG4gICAgdGhpcy5fcHJlZmVyZW5jZXNLZXkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAoa2V5ID0+IHtcbiAgICAgICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQoa2V5KSB8fCBrZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcm9tKHdhaXRPbkNvbmRpdGlvbkFzeW5jKCgpID0+IHRoaXMuX3ByZWZlcmVuY2VzLmlzTG9hZGVkKGtleSkpKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuc2V0QWx0ZXJhdGlvbnMoa2V5LCB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmdldCgpKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSlcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgY29uc3QgYXBwbHlQcmVmcyA9IChjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pID0+IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuY2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFwcGx5KGNvbHMsIHRoaXMpXG4gICAgICAgIHJldHVybiBjb2xzXG4gICAgICB9KSxcbiAgICApXG5cbiAgICB0aGlzLl9wcmVmZXJlbmNlc0tleS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChwcmVmc0tleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKHByZWZzS2V5KSkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzLnByZWZlcmVuY2VzKHByZWZzS2V5KS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChhc3luYyBwcmVmZXJlbmNlcyA9PiB7XG4gICAgICAgICAgICBhd2FpdCB3YWl0T25Db25kaXRpb25Bc3luYygoKSA9PiB0aGlzLl9wcmVmZXJlbmNlcy5pc0xvYWRlZChwcmVmc0tleSkpXG4gICAgICAgICAgICByZXR1cm4gcHJlZmVyZW5jZXNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcChwcmVmZXJlbmNlcyA9PiB7XG4gICAgICAgICAgICBsZXQgYWx0ZXJhdGlvbnM6IENvbHVtbnNBbHRlcmF0aW9uW10gPSBbXVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYWx0ZXJhdGlvbnMgPSBtYXBDb2x1bW5zQWx0ZXJhdGlvbnNTdGF0ZXMocHJlZmVyZW5jZXMuYWx0ZXJhdGlvbnMpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gbWFwIGNvbHVtbnMgYWx0ZXJhdGlvbnMgc3RhdGVzJylcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKGFsdGVyYXRpb25zKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5jb2x1bW5zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2NvbHVtbnNNYW5hZ2VyLmNvbHVtbnMkLCB0aGlzLl9jb2x1bW5zRmlsdGVycy5jb2x1bW5BY3RpdmVGaWx0ZXJQcm9wcyRdKS5waXBlKFxuICAgICAgbWFwKChbIGNvbHVtbnMsIGNvbHVtbkFjdGl2ZUZpbHRlclByb3BzIF0pID0+IGNvbHVtbnMubWFwKGNvbCA9PiAoe1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIGZpbHRlckFjdGl2ZTogY29sdW1uQWN0aXZlRmlsdGVyUHJvcHMuaW5jbHVkZXModGhpcy5fY29sdW1uc0ZpbHRlcnMuZ2V0Q29sdW1uRmlsdGVyUHJvcChjb2wpIHx8ICcnKVxuICAgICAgfSkpKVxuICAgIClcblxuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMkID0gdGhpcy5jb2x1bW5zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNvbHMgPT4gYXBwbHlQcmVmcyhjb2xzKSksXG4gICAgICBtYXAoY29scyA9PiBjb2xzLmZpbHRlcihjID0+ICFjLmhpZGRlbikpLFxuICAgICAgdGFwKHYgPT4gcmVtb3ZlVW51c2VkRGlmZnModiwgdGhpcy5fY29sRGlmZmVyc0lucCwgdGhpcy5fY29sRGlmZmVyc1RwbCkpLFxuICAgIClcblxuICAgIHRoaXMuZmlsdGVycyQgPSBjb21iaW5lTGF0ZXN0KFsgdGhpcy5fbWVudUJhcnNGaWx0ZXJzU3ViamVjdC5hc09ic2VydmFibGUoKSwgdGhpcy5fY29sdW1uc0ZpbHRlcnMuY29sdW1uc0ZpbHRlcnMkIF0pLnBpcGUoXG4gICAgICBtYXAoKFsgbWVudUZpbHRlcnMsIGNvbHVtbnNGaWx0ZXJzIF0pID0+IFsgLi4ubWVudUZpbHRlcnMsIC4uLmNvbHVtbnNGaWx0ZXJzIF0pXG4gICAgKVxuXG4gICAgdGhpcy5maWx0ZXJTdGF0ZXMgPSB0aGlzLmZpbHRlcnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmlsdGVycyA9PiBjb21wb3NlRGF0YUZpbHRlclN0YXRlcyhmaWx0ZXJzKSlcbiAgICApXG5cbiAgICB0aGlzLnJvd3MkID0gdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QucGlwZShcbiAgICAgIHN3aXRjaE1hcChkYXRhU291cmNlID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2RhdGFTb3VyY2UnLCBkYXRhU291cmNlKVxuICAgICAgICBsZXQgZGF0YVN0cmVhbTogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35kYXRhc291cmNlJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpIGFzIGFueVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+b2JzZXJ2YWJsZScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTb3VyY2UgYXMgYW55XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+YXJyYXknKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBvZihkYXRhU291cmNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+cm93cyBmYWxsYmFjaycpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IHRoaXMuX3Jvd3MuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC8vIC5waXBlKHRhcCh2ID0+IGNvbnNvbGUubG9nKCdyb3dzficsIHYpKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5leHRlcm5hbEZpbHRlcmluZykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdub3QgdXNpbmcgZXh0ZXJuYWxGaWx0ZXJpbmcnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU3RyZWFtLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocm93cyA9PiB0aGlzLmZpbHRlcnMkLnBpcGUoXG4gICAgICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdmaWx0ZXJzJywgdikpLFxuICAgICAgICAgICAgICBjb25jYXRNYXAoZmlsdGVycyA9PiBvZihyb3dzKS5waXBlKGNvbXBvc2VEYXRhRmlsdGVycyhmaWx0ZXJzKSkpLFxuICAgICAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnY29tcG9zZWQgZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAgICkpXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLy8gZGF0YVN0cmVhbSA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgLy8gICB0YXAodiA9PiBjb25zb2xlLmxvZygnZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAvLyAgIGNvbmNhdE1hcChmaWx0ZXJzID0+IGRhdGFTdHJlYW0ucGlwZShjb21wb3NlRGF0YUZpbHRlcnMoZmlsdGVycykpKSxcbiAgICAgICAgICAvLyAgIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb21wb3NlZCBmaWx0ZXJzJywgdikpLFxuICAgICAgICAgIC8vIClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhU3RyZWFtLnBpcGUoXG4gICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ3N0cmVhbScsIHYpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG5cbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdmlld0NoYW5nZSBmb3IgQ29sbGVjdGlvblZpZXdlci5cbiAgICB0aGlzLnZpZXdDaGFuZ2UgPSB0aGlzLnBhZ2UucGlwZShtYXAocCA9PiAoeyBzdGFydDogMCwgZW5kOiBwLmNvdW50IH0pKSlcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnJvd0RldGFpbCkge1xuICAgICAgdGhpcy5fcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3dEZXRhaWwuX3RvZ2dsZS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5uZ3hSb3dEZXRhaWwpIHtcbiAgICAgICAgICB0aGlzLm5neFJvd0RldGFpbC50b2dnbGUuZW1pdChldmVudClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLl9zZXREYXRhdGFibGVDb25maWdPckRlZmF1bHQoKVxuICB9XG5cbiAgLyoqIFNldHMgbWlzc2luZyBpbnB1dHMgZnJvbSBjb25maWcgKi9cbiAgcHJpdmF0ZSBfc2V0RGF0YXRhYmxlQ29uZmlnT3JEZWZhdWx0KCkge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLm1lc3NhZ2VzKSkge1xuICAgICAgdGhpcy5tZXNzYWdlcyA9IHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5oZWFkZXJIZWlnaHQpKSB7XG4gICAgICB0aGlzLmhlYWRlckhlaWdodCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5yb3dIZWlnaHQpKSB7XG4gICAgICB0aGlzLnJvd0hlaWdodCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5mb290ZXJIZWlnaHQpKSB7XG4gICAgICB0aGlzLmZvb3RlckhlaWdodCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5jc3NDbGFzc2VzKSkge1xuICAgICAgdGhpcy5jc3NDbGFzc2VzID0gdW5kZWZpbmVkXG4gICAgfVxuICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmNvbHVtbkZpbHRlckljb24pKSB7XG4gICAgICB0aGlzLmNvbHVtbkZpbHRlckljb24gPSB1bmRlZmluZWRcbiAgICB9XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY29sdW1uRmlsdGVyVXBkYXRlTWV0aG9kKSkge1xuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJVcGRhdGVNZXRob2QgPSB1bmRlZmluZWRcbiAgICB9XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY29sdW1uRmlsdGVyVXBkYXRlRGVib3VuY2UpKSB7XG4gICAgICB0aGlzLmNvbHVtbkZpbHRlclVwZGF0ZURlYm91bmNlID0gdW5kZWZpbmVkXG4gICAgfVxuICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIHRoaXMuYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByaXZhdGUgX3NldE1lbnVCYXJGaWx0ZXJzKGZpbHRlcnM6IERhdGFGaWx0ZXJbXSkge1xuICAgIHRoaXMuX21lbnVCYXJzRmlsdGVyc1N1YmplY3QubmV4dChmaWx0ZXJzIHx8IFtdKVxuICB9XG5cbiAgcHVibGljIGdldENvbHVtbkNvbXBvbmVudChwcm9wTmFtZTogc3RyaW5nKTogRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbkNvbXBvbmVudHMgfHwgdGhpcy5jb2x1bW5Db21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCB0cGwgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMuZmluZCh0ID0+IHQucHJvcCA9PT0gcHJvcE5hbWUpXG4gICAgaWYgKHRwbCkge1xuICAgICAgcmV0dXJuIHRwbFxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBfY29sdW1uRGF0YShjb2w6IGFueSk6IHsgY29sOiBhbnksIGNvbXA6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwgfSB7XG4gICAgY29uc3QgY29tcCA9IHRoaXMuZ2V0Q29sdW1uQ29tcG9uZW50KGNvbC5wcm9wKVxuICAgIHJldHVybiB7IGNvbCwgY29tcCB9XG4gIH1cblxuICBfZ2V0Um93RXhwYW5kZWQocm93OiBhbnkpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGUuYm9keUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQuZ2V0Um93RXhwYW5kZWQocm93KVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5Rm5Db2x1bW4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0ucHJvcFxuICB9XG5cbiAgcHVibGljIG9uRGF0YXRhYmxlUmVzaXplKGV2ZW50OiBJRWxlbWVudFJlc2l6ZWRFdmVudCkge1xuICAgIGlmICh0aGlzLm5neERhdGF0YWJsZSAmJiB0aGlzLm5neERhdGF0YWJsZUVsZW1lbnQgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIGludGVncmF0aW5nIHRoaXMgaW50byB0aGUgbmd4LWRhdGF0YWJsZSBsaWJyYXJ5IHRvIGF2b2lkXG4gICAgICAvLyBtdWx0aXBsZSByZXNpemUgY2FsbHMgd2hlbiB0aGUgdGFibGUgcmVzaXplcyBpdHNlbGYuXG4gICAgICB0aGlzLm5neERhdGF0YWJsZS5yZWNhbGN1bGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgX29uUmVzaXplKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJlc2l6ZS5lbWl0KGV2ZW50KVxuXG4gICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQoZXZlbnQuY29sdW1uKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoZXZlbnQuY29sdW1uKVxuICAgIGlmIChjb2x1bW5Qcm9wKSB7XG4gICAgICBsZXQgYWRkQWx0ZXJhdGlvbiA9IGZhbHNlXG5cbiAgICAgIGlmICghdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0pIHtcbiAgICAgICAgdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0gPSB0cnVlXG4gICAgICAgIGFkZEFsdGVyYXRpb24gPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5pc0RvbmUpIHtcbiAgICAgICAgdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0gPSBmYWxzZVxuICAgICAgICBhZGRBbHRlcmF0aW9uID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRkQWx0ZXJhdGlvbikge1xuICAgICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24oe1xuICAgICAgICAgIGNvbHVtblByb3AsXG4gICAgICAgICAgd2lkdGg6IGV2ZW50LmNvbHVtbi53aWR0aCxcbiAgICAgICAgICBjYW5BdXRvUmVzaXplOiBmYWxzZVxuICAgICAgICB9LCB0cnVlKVxuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25SZW9yZGVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlb3JkZXIuZW1pdChldmVudClcblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgY29uc3QgY3VycmVudE9yZGVyQWx0ZXJhdGlvbiA9IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuZ2V0KCkuZmluZCh4ID0+IHgudHlwZSA9PT0gJ29yZGVyJylcbiAgICAgIGNvbnN0IHN0YXRlOiBPcmRlckNvbHVtbnNBbHRlcmF0aW9uU3RhdGUgPSB7XG4gICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAuLi4oY3VycmVudE9yZGVyQWx0ZXJhdGlvbj8uc3RhdGUuY29sdW1ucyB8fCBbXSkuZmlsdGVyKCh4OiBhbnkpID0+IHguY29sdW1uUHJvcCAhPT0gY29sdW1uUHJvcCksXG4gICAgICAgICAgeyBjb2x1bW5Qcm9wLCBpbmRleDogZXZlbnQubmV3VmFsdWUgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24oc3RhdGUsIHRydWUpXG4gICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICB9XG4gIH1cblxuICBfb25Tb3J0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnQuZW1pdChldmVudClcblxuICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgU29ydENvbHVtbnNBbHRlcmF0aW9uKHsgc29ydHM6IGV2ZW50LnNvcnRzIH0sIHRydWUpXG4gICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gIH1cblxuICBfb25UcmVlQWN0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbmRleCA9IGV2ZW50LnJvd0luZGV4XG4gICAgY29uc3Qgcm93ID0gZXZlbnQucm93XG4gICAgaWYgKHJvdy50cmVlU3RhdHVzID09PSAnY29sbGFwc2VkJykge1xuICAgICAgcm93LnRyZWVTdGF0dXMgPSAnZXhwYW5kZWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2NvbGxhcHNlZCdcbiAgICB9XG4gICAgdGhpcy5yb3dzID0gWyAuLi50aGlzLnJvd3MgXVxuICB9XG5cbiAgcHVibGljIHRyaWdnZXJBY3Rpb25SZWZyZXNoUmVxdWVzdCgpIHtcbiAgICB0aGlzLmFjdGlvblJlZnJlc2hSZXF1ZXN0LmVtaXQodW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBhZ2UgaW5mbyBmcm9tIHRoZSB3cmFwcGVkIE5neERhdGF0YWJsZSBpbnN0YW5jZSBvciBkZWZhdWx0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFnZUluZm8oKTogVGhlU2VhbVBhZ2VJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiB0aGlzLm5neERhdGF0YWJsZT8ub2Zmc2V0ID8/IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5uZ3hEYXRhdGFibGU/LnBhZ2VTaXplID8/IDAsXG4gICAgICBsaW1pdDogdGhpcy5uZ3hEYXRhdGFibGU/LmxpbWl0LFxuICAgICAgY291bnQ6IHRoaXMubmd4RGF0YXRhYmxlPy5jb3VudCA/PyAwXG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRhdGFibGUtd3JhcHBlclwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJzZWFtLWRhdGF0YWJsZS1tZW51LWJhclwiPjwvbmctY29udGVudD5cbiAgPGRpdiBjbGFzcz1cImRhdGF0YWJsZS10YWJsZS13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxuZ3gtZGF0YXRhYmxlXG4gICAgICAgIFtjb2x1bW5Nb2RlXT1cIiRhbnkoY29sdW1uTW9kZSlcIlxuICAgICAgICBbc2Nyb2xsYmFyVl09XCJzY3JvbGxiYXJWXCJcbiAgICAgICAgW3Njcm9sbGJhckhdPVwic2Nyb2xsYmFySFwiXG4gICAgICAgIFt2aXJ0dWFsaXphdGlvbl09XCJ2aXJ0dWFsaXphdGlvblwiXG4gICAgICAgIFt0YXJnZXRNYXJrZXJUZW1wbGF0ZV09XCJ0YXJnZXRNYXJrZXJUZW1wbGF0ZVwiXG4gICAgICAgIFtncm91cFJvd3NCeV09XCIkYW55KGdyb3VwUm93c0J5KVwiXG4gICAgICAgIFtncm91cGVkUm93c109XCIkYW55KGdyb3VwZWRSb3dzKVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCIkYW55KHNlbGVjdGVkKVwiXG4gICAgICAgIFtleHRlcm5hbFBhZ2luZ109XCJleHRlcm5hbFBhZ2luZ1wiXG4gICAgICAgIFtleHRlcm5hbFNvcnRpbmddPVwiZXh0ZXJuYWxTb3J0aW5nXCJcbiAgICAgICAgW2xpbWl0XT1cIiRhbnkobGltaXQpXCJcbiAgICAgICAgW2NvdW50XT1cIiRhbnkoY291bnQpXCJcbiAgICAgICAgW29mZnNldF09XCIkYW55KG9mZnNldClcIlxuICAgICAgICBbbG9hZGluZ0luZGljYXRvcl09XCJsb2FkaW5nSW5kaWNhdG9yXCJcbiAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwiJGFueShzZWxlY3Rpb25UeXBlKVwiXG4gICAgICAgIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgIFtzd2FwQ29sdW1uc109XCJzd2FwQ29sdW1uc1wiXG4gICAgICAgIFtzb3J0VHlwZV09XCIkYW55KHNvcnRUeXBlKVwiXG4gICAgICAgIFtzb3J0c109XCIkYW55KF9zb3J0cylcIlxuICAgICAgICBbY3NzQ2xhc3Nlc109XCJjc3NDbGFzc2VzXCJcbiAgICAgICAgW21lc3NhZ2VzXT1cIm1lc3NhZ2VzXCJcbiAgICAgICAgW3Jvd0lkZW50aXR5XT1cIiRhbnkocm93SWRlbnRpdHkpXCJcbiAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCJcbiAgICAgICAgW3NlbGVjdENoZWNrXT1cInNlbGVjdENoZWNrXCJcbiAgICAgICAgW2Rpc3BsYXlDaGVja109XCIkYW55KGRpc3BsYXlDaGVjaylcIlxuICAgICAgICBbZ3JvdXBFeHBhbnNpb25EZWZhdWx0XT1cImdyb3VwRXhwYW5zaW9uRGVmYXVsdFwiXG4gICAgICAgIFt0cmFja0J5UHJvcF09XCIkYW55KHRyYWNrQnlQcm9wKVwiXG4gICAgICAgIFtzZWxlY3RBbGxSb3dzT25QYWdlXT1cInNlbGVjdEFsbFJvd3NPblBhZ2VcIlxuICAgICAgICBbdHJlZUZyb21SZWxhdGlvbl09XCIkYW55KHRyZWVGcm9tUmVsYXRpb24pXCJcbiAgICAgICAgW3RyZWVUb1JlbGF0aW9uXT1cIiRhbnkodHJlZVRvUmVsYXRpb24pXCJcbiAgICAgICAgW3N1bW1hcnlSb3ddPVwic3VtbWFyeVJvd1wiXG4gICAgICAgIFtzdW1tYXJ5SGVpZ2h0XT1cIiRhbnkoc3VtbWFyeUhlaWdodClcIlxuICAgICAgICBbc3VtbWFyeVBvc2l0aW9uXT1cIiRhbnkoc3VtbWFyeVBvc2l0aW9uKVwiXG4gICAgICAgIFtyb3dzXT1cInJvd3MkIHwgYXN5bmNcIlxuICAgICAgICBbY29sdW1uc109XCIkYW55KGRpc3BsYXlDb2x1bW5zJCB8IGFzeW5jKVwiXG4gICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiJGFueShoZWFkZXJIZWlnaHQpXCJcbiAgICAgICAgW3Jvd0hlaWdodF09XCIkYW55KHJvd0hlaWdodClcIlxuICAgICAgICBbZm9vdGVySGVpZ2h0XT1cIiRhbnkoZm9vdGVySGVpZ2h0KVwiXG4gICAgICAgIChzY3JvbGwpPVwic2Nyb2xsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChhY3RpdmF0ZSk9XCJhY3RpdmF0ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc29ydCk9XCJfb25Tb3J0KCRldmVudClcIlxuICAgICAgICAocGFnZSk9XCJwYWdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChyZW9yZGVyKT1cIl9vblJlb3JkZXIoJGV2ZW50KVwiXG4gICAgICAgIChyZXNpemUpPVwiX29uUmVzaXplKCRldmVudClcIlxuICAgICAgICAodGFibGVDb250ZXh0bWVudSk9XCJ0YWJsZUNvbnRleHRtZW51LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh0cmVlQWN0aW9uKT1cInRyZWVBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlYW1FbGVtUmVzaXplZCk9XCJvbkRhdGF0YWJsZVJlc2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgKHRyZWVBY3Rpb24pPVwiX29uVHJlZUFjdGlvbigkZXZlbnQpXCI+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyIFtyb3dIZWlnaHRdPVwiNTBcIiAjbXlHcm91cEhlYWRlciAqbmdJZj1cImdyb3VwUm93c0J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1ncm91cD1cImdyb3VwXCIgbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIiBuZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlci10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBiZy1saWdodCBwLTFcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJvdHRvbV09XCIhZXhwYW5kZWRcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGF0YXRhYmxlLWljb24tcmlnaHRdPVwiIWV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRhdGF0YWJsZS1pY29uLWRvd25dPVwiZXhwYW5kZWRcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkV4cGFuZC9Db2xsYXBzZSBHcm91cFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJuZ3hEYXRhdGFibGU/Lmdyb3VwSGVhZGVyPy50b2dnbGVFeHBhbmRHcm91cChncm91cClcIj5cbiAgICAgICAgICAgICAgPGI+QWdlOiB7eyBncm91cC5hZ2UgfX08L2I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLXJvdy1kZXRhaWwgKm5nSWY9XCJyb3dEZXRhaWwgJiYgcm93RGV0YWlsLnRlbXBsYXRlXCJcbiAgICAgICAgICBbcm93SGVpZ2h0XT1cInJvd0RldGFpbC5yb3dIZWlnaHQgfHwgMFwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIiRhbnkocm93RGV0YWlsLnRlbXBsYXRlKVwiXG4gICAgICAgICAgKHRvZ2dsZSk9XCJyb3dEZXRhaWwudG9nZ2xlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtcm93LWRldGFpbD5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1mb290ZXIgKm5nSWY9XCJmb290ZXIgJiYgZm9vdGVyLnRlbXBsYXRlXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiJGFueShmb290ZXIudGVtcGxhdGUpXCI+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1mb290ZXI+XG4gICAgICA8L25neC1kYXRhdGFibGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYmxhbmtIZWFkZXJUcGwgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNoZWFkZXJUcGxcbiAgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGVcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC1zb3J0Rm49XCJzb3J0Rm5cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmZpbHRlcmFibGVcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgc2VhbUljb25CdG5cbiAgICAgICAgW2ljb25dPVwiY29sdW1uRmlsdGVySWNvblwiXG4gICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgIFtzZWFtUG9wb3Zlcl09XCJmaWx0ZXJNZW51XCJcbiAgICAgICAgW3NlYW1Qb3BvdmVyQmFzZVdpZHRoXT1cIjMwMFwiXG4gICAgICAgIGNsYXNzPVwiZGF0YXRhYmxlLWNvbHVtbi1oZWFkZXItZmlsdGVyLWJ1dHRvbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1yLTJcIlxuICAgICAgICBbY2xhc3MuZGF0YXRhYmxlLWNvbHVtbi1oZWFkZXItZmlsdGVyLWJ1dHRvbi1hY3RpdmVdPVwiY29sdW1uLmZpbHRlckFjdGl2ZVwiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6IDFyZW07XCJcbiAgICAgICAgdGl0bGU9XCJDbGljayB0byBzZWUgZmlsdGVyIG9wdGlvbnNcIj48L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8c3Ryb25nICpuZ0lmPVwiIWNvbHVtbi5zb3J0YWJsZVwiIGNsYXNzPVwiZHJhZ2dhYmxlXCI+e3tjb2x1bW4ubmFtZX19PC9zdHJvbmc+XG4gICAgPGJ1dHRvblxuICAgICAgc2VhbUJ1dHRvblxuICAgICAgKm5nSWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgY2xhc3M9XCJkYXRhdGFibGUtc29ydC10YXJnZXQgcC0wXCJcbiAgICAgIChjbGljayk9XCJzb3J0Rm4oKVwiXG4gICAgICB0aXRsZT1cIkNsaWNrIHRvIHNvcnRcIj5cbiAgICAgIDxzdHJvbmcgY2xhc3M9XCJkcmFnZ2FibGVcIj57e2NvbHVtbi5uYW1lfX08L3N0cm9uZz5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0YXRhYmxlLWNvbHVtbi1oZWFkZXItc2VwYXJhdG9yXCIgW2F0dHIuZGF0YS1jb2x1bW4taWRdPVwiY29sdW1uLiQkaWRcIj48L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjZmlsdGVyTWVudSBsZXQtcG9wb3Zlcj1cInBvcG92ZXJcIj5cbiAgICA8c2VhbS1kYXRhdGFibGUtY29sdW1uLWZpbHRlci1tZW51XG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICBbdXBkYXRlTWV0aG9kXT1cImNvbHVtbkZpbHRlclVwZGF0ZU1ldGhvZFwiXG4gICAgICBbZGVib3VuY2VdPVwiY29sdW1uRmlsdGVyVXBkYXRlRGVib3VuY2VcIlxuICAgICAgKGNsb3NlUG9wb3Zlcik9XCJwb3BvdmVyPy5jbG9zZVBvcG92ZXIoKVwiPjwvc2VhbS1kYXRhdGFibGUtY29sdW1uLWZpbHRlci1tZW51PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjZWxsVHlwZVNlbGVjdG9yVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPHNlYW0tdGFibGUtY2VsbC10eXBlLXNlbGVjdG9yICpuZ0lmPVwicm93XCJcbiAgICBbdHlwZV09XCJjb2x1bW4uY2VsbFR5cGVcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICBbcm93XT1cInJvd1wiXG4gICAgW2NvbERhdGFdPVwiY29sdW1uXCI+XG4gIDwvc2VhbS10YWJsZS1jZWxsLXR5cGUtc2VsZWN0b3I+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvbk1lbnVDZWxsVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cgJiYgcm93QWN0aW9uSXRlbT8udGVtcGxhdGVcIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkocm93QWN0aW9uSXRlbT8udGVtcGxhdGUpXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmVlVG9nZ2xlVHBsIG5neC1kYXRhdGFibGUtdHJlZS10b2dnbGUgbGV0LXRyZWU9XCJjZWxsQ29udGV4dFwiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJwLTAgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYnRuXCJcbiAgICBbZGlzYWJsZWRdPVwidHJlZS50cmVlU3RhdHVzPT09J2Rpc2FibGVkJ1wiXG4gICAgKGNsaWNrKT1cInRyZWUub25UcmVlQWN0aW9uKClcIj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdsb2FkaW5nJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhU3Bpbm5lclwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nY29sbGFwc2VkJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhQ2hldnJvblJpZ2h0XCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdleHBhbmRlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25Eb3duXCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdkaXNhYmxlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25SaWdodFwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|