@microsoft/windows-admin-center-sdk 4.123.0 → 4.232.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/assets/strings/cs-CZ/strings.json +1 -1
- package/angular/assets/strings/de-DE/strings.json +1 -1
- package/angular/assets/strings/es-ES/strings.json +1 -1
- package/angular/assets/strings/fr-FR/strings.json +1 -1
- package/angular/assets/strings/hu-HU/strings.json +1 -1
- package/angular/assets/strings/id-ID/strings.json +1 -1
- package/angular/assets/strings/it-IT/strings.json +1 -1
- package/angular/assets/strings/ja-JP/strings.json +1 -1
- package/angular/assets/strings/ko-KR/strings.json +1 -1
- package/angular/assets/strings/nl-NL/strings.json +1 -1
- package/angular/assets/strings/pl-PL/strings.json +1 -1
- package/angular/assets/strings/pt-BR/strings.json +1 -1
- package/angular/assets/strings/pt-PT/strings.json +1 -1
- package/angular/assets/strings/ru-RU/strings.json +1 -1
- package/angular/assets/strings/strings.json +1 -1
- package/angular/assets/strings/sv-SE/strings.json +1 -1
- package/angular/assets/strings/tr-TR/strings.json +1 -1
- package/angular/assets/strings/zh-CN/strings.json +1 -1
- package/angular/assets/strings/zh-TW/strings.json +1 -1
- package/angular/esm2020/src/controls/accordion/accordion-panel/accordion-panel.component.mjs +36 -12
- package/angular/esm2020/src/controls/actions/containers/action-container.component.mjs +2 -3
- package/angular/esm2020/src/controls/alert-bar/alert-bar.component.mjs +2 -2
- package/angular/esm2020/src/controls/breadcrumb-header/breadcrumb-header.component.mjs +1 -1
- package/angular/esm2020/src/controls/common/base.component.mjs +1 -1
- package/angular/esm2020/src/controls/common/spacer-base.component.mjs +25 -1
- package/angular/esm2020/src/controls/context-menu/context-menu.component.mjs +2 -3
- package/angular/esm2020/src/controls/data-table/data-table.component.mjs +7 -7
- package/angular/esm2020/src/controls/dialog/base-dialog.component.mjs +2 -4
- package/angular/esm2020/src/controls/dialog/confirmation-list-dialog/confirmation-list-dialog.component.mjs +2 -2
- package/angular/esm2020/src/controls/dropdown/dropdown.component.mjs +1 -4
- package/angular/esm2020/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.mjs +59 -0
- package/angular/esm2020/src/controls/form/form-field/array/array-form-field.component.mjs +24 -35
- package/angular/esm2020/src/controls/form/form-field/clock/clock-form-field.component.mjs +10 -7
- package/angular/esm2020/src/controls/form/form-field/form-field-accessibility-manager-base.service.mjs +105 -0
- package/angular/esm2020/src/controls/form/form-field/form-field.component.mjs +1 -1
- package/angular/esm2020/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.mjs +38 -0
- package/angular/esm2020/src/controls/form/form-field/list/list-form-field.component.mjs +56 -38
- package/angular/esm2020/src/controls/form/form-field/number/number-form-field.component.mjs +22 -4
- package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.mjs +54 -0
- package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.mjs +67 -67
- package/angular/esm2020/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.mjs +5 -5
- package/angular/esm2020/src/controls/form/forms.module.mjs +19 -2
- package/angular/esm2020/src/controls/icon/icon-text/icon-text.component.mjs +6 -6
- package/angular/esm2020/src/controls/icon/layered-icon/status/status-icon.component.mjs +1 -1
- package/angular/esm2020/src/controls/layout/editable-layout.component.mjs +2 -3
- package/angular/esm2020/src/controls/node-credentials-form/node-credentials-form.component.mjs +2 -2
- package/angular/esm2020/src/controls/page-alert-bar/page-alert-bar.component.mjs +4 -4
- package/angular/esm2020/src/controls/property-grid/property-grid.component.mjs +33 -13
- package/angular/esm2020/src/controls/schema/tabbed-form-loader.component.mjs +2 -2
- package/angular/esm2020/src/controls/settings/common-settings/common-settings.component.mjs +5 -5
- package/angular/esm2020/src/controls/settings/settings-form.directive.mjs +3 -7
- package/angular/esm2020/src/controls/settings/settings-form.service.mjs +2 -4
- package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
- package/angular/esm2020/src/controls/split-view/split-view.component.mjs +2 -2
- package/angular/esm2020/src/controls/wizard/models/wizard-step-snap-in-output.mjs +1 -1
- package/angular/esm2020/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.mjs +3 -3
- package/angular/esm2020/src/data/extension-broker/snap-in-listener.mjs +80 -0
- package/angular/esm2020/src/data/index.mjs +2 -1
- package/angular/esm2020/src/directives/router/router-link.directive.mjs +2 -2
- package/angular/esm2020/src/directives/svg/svg.directive.mjs +2 -3
- package/angular/esm2020/src/generated/strings.mjs +1 -1
- package/angular/esm2020/src/service/navigation.service.mjs +3 -8
- package/angular/esm2020/src/service/user-alive.service.mjs +2 -4
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +665 -239
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
- package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +636 -237
- package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
- package/angular/package.json +1 -1
- package/angular/src/controls/accordion/accordion-panel/accordion-panel.component.d.ts +13 -4
- package/angular/src/controls/common/spacer-base.component.d.ts +11 -2
- package/angular/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.d.ts +38 -0
- package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +3 -1
- package/angular/src/controls/form/form-field/form-field-accessibility-manager-base.service.d.ts +37 -0
- package/angular/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.d.ts +25 -0
- package/angular/src/controls/form/form-field/list/list-form-field.component.d.ts +12 -2
- package/angular/src/controls/form/form-field/number/number-form-field.component.d.ts +8 -0
- package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.d.ts +37 -0
- package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.d.ts +12 -8
- package/angular/src/controls/icon/icon-text/icon-text.component.d.ts +1 -1
- package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -0
- package/angular/src/controls/wizard/models/wizard-step-snap-in-output.d.ts +1 -1
- package/{core → angular/src}/data/extension-broker/snap-in-listener.d.ts +49 -46
- package/angular/src/data/index.d.ts +1 -0
- package/angular/src/directives/svg/svg.directive.d.ts +1 -2
- package/angular/src/generated/strings.d.ts +12 -0
- package/core/async/cancellation.js +312 -0
- package/core/async/index.js +312 -0
- package/core/async/progress.js +312 -0
- package/core/azure/azure-constants.d.ts +2 -2
- package/core/azure/azure-constants.d.ts.map +1 -1
- package/core/azure/azure-constants.js +322 -3
- package/core/azure/azure-constants.js.map +1 -1
- package/core/azure/azure-logging.js +312 -0
- package/core/azure/azure-manager.js +312 -0
- package/core/azure/models/aadAppConfig-data.js +312 -0
- package/core/azure/models/azureArcStatusEnum.js +312 -0
- package/core/azure/models/azureTokenResult-data.js +312 -0
- package/core/azure/resources/deployment-operation-request-body.js +312 -0
- package/core/azure/resources/deployment-operation-response.js +312 -0
- package/core/azure/resources/location-data.js +315 -0
- package/core/azure/resources/resource-group-data.js +312 -0
- package/core/azure/resources/subscription-data.js +312 -0
- package/core/base/data-store/browser-storage-data-store.js +315 -0
- package/core/base/data-store/cached-data-store.js +312 -0
- package/core/base/data-store/data-store.js +312 -0
- package/core/base/data-store/local-data-store.js +312 -0
- package/core/base/data-store/memory-data-store.js +312 -0
- package/core/base/data-store/session-data-store.js +312 -0
- package/core/base/date/date-like.js +312 -0
- package/core/base/date/date-range.js +312 -0
- package/core/base/date/date-time.js +312 -0
- package/core/base/date/date-type.js +312 -0
- package/core/base/date/time-unit.js +312 -0
- package/core/base/decorators/base.js +312 -0
- package/core/base/decorators/debounce.decorators.js +312 -0
- package/core/base/decorators/delay.decorator.js +315 -0
- package/core/base/decorators/yield.decorator.js +312 -0
- package/core/base/environment.js +312 -0
- package/core/base/json.js +312 -0
- package/core/base/msft-sme.mock.js +316 -0
- package/core/base/polyfills/array.js +315 -0
- package/core/base/polyfills/string.js +312 -0
- package/core/base/rxjs-lifetime-manager.js +312 -0
- package/core/base/utilities.js +312 -0
- package/core/base/versioned-object.js +312 -0
- package/core/data/accessibility-manager.js +312 -0
- package/core/data/active-directory/active-directory.js +312 -0
- package/core/data/active-directory/models/account-info.js +312 -0
- package/core/data/active-directory/models/active-directory-search-options.js +312 -0
- package/core/data/active-directory/models/search-type.js +312 -0
- package/core/data/animation.js +312 -0
- package/core/data/app-context.js +312 -0
- package/core/data/asset-manager.js +315 -0
- package/core/data/base64-array-buffer.js +312 -0
- package/core/data/batch-connection.js +312 -0
- package/core/data/cim-connection.js +312 -0
- package/core/data/cim-stream.js +312 -0
- package/core/data/cim.js +312 -0
- package/core/data/column-picker.js +312 -0
- package/core/data/cookie.js +312 -0
- package/core/data/core-environment.js +315 -0
- package/core/data/crypto.js +312 -0
- package/core/data/deployment-share.js +312 -0
- package/core/data/disposable.js +312 -0
- package/core/data/electron.js +315 -0
- package/core/data/error-extended.js +312 -0
- package/core/data/extension-broker/dialog-listener.js +312 -0
- package/core/data/extension-broker/extension-broker.js +312 -0
- package/core/data/extension-broker/extension-listener.js +312 -0
- package/core/data/extension-broker/model/extension-broker-request-payload.js +312 -0
- package/core/data/extension-broker/model/extension-broker-response-error.js +312 -0
- package/core/data/extension-broker/model/extension-broker-response-payload.js +312 -0
- package/core/data/extension-broker/model/extension-entries.js +315 -0
- package/core/data/extension-broker/model/extension-instance.js +315 -0
- package/core/data/extension-broker/model/extension-rect.js +312 -0
- package/core/data/extension-broker/model/extension-search-options.js +312 -0
- package/core/data/extension-broker/service-listener.js +312 -0
- package/core/data/extension-broker/worker-listener.js +312 -0
- package/core/data/extension-broker/worker-set.js +312 -0
- package/core/data/file-transfer.js +312 -0
- package/core/data/gateway-connection.js +312 -0
- package/core/data/gateway-status.js +312 -0
- package/core/data/gateway-url-builder.js +312 -0
- package/core/data/gateway-url-translator.d.ts +1 -0
- package/core/data/gateway-url-translator.d.ts.map +1 -1
- package/core/data/gateway-url-translator.js +337 -6
- package/core/data/gateway-url-translator.js.map +1 -1
- package/core/data/gateway-urls.js +312 -0
- package/core/data/globalization.js +315 -0
- package/core/data/http-constants.js +315 -0
- package/core/data/http.js +312 -0
- package/core/data/jobs/jobs-manager.js +312 -0
- package/core/data/jobs/models/job-credentials.js +312 -0
- package/core/data/jobs/models/job-node.js +312 -0
- package/core/data/jobs/models/job-paginated-response.js +315 -0
- package/core/data/jobs/models/job-pagination-options.js +315 -0
- package/core/data/jobs/models/job.js +312 -0
- package/core/data/jobs/models/node-job.js +312 -0
- package/core/data/jobs/models/powershell-job.js +312 -0
- package/core/data/language.js +315 -0
- package/core/data/lifetime-data.js +312 -0
- package/core/data/localization-manager.js +312 -0
- package/core/data/native-q.js +312 -0
- package/core/data/net.d.ts.map +1 -1
- package/core/data/net.js +313 -1
- package/core/data/net.js.map +1 -1
- package/core/data/node-connection.d.ts.map +1 -1
- package/core/data/node-connection.js +312 -2
- package/core/data/node-connection.js.map +1 -1
- package/core/data/node-extension-install.js +312 -0
- package/core/data/powershell-alternate.js +312 -0
- package/core/data/powershell-batch.js +312 -0
- package/core/data/powershell-connection.js +312 -0
- package/core/data/powershell-crypto.js +312 -0
- package/core/data/powershell-stream.js +312 -0
- package/core/data/powershell.js +312 -0
- package/core/data/query-cache.js +312 -0
- package/core/data/resource-cache.js +312 -0
- package/core/data/schedule-reboot.js +312 -0
- package/core/data/settings-manager.js +312 -0
- package/core/data/settings-manger.mock.js +312 -0
- package/core/data/sme-extension.js +312 -0
- package/core/data/ssh-stream.js +312 -0
- package/core/data/units.js +312 -0
- package/core/data/uri-builder.js +315 -0
- package/core/data/wdac-operations.js +312 -0
- package/core/data/websocket-stream.js +312 -0
- package/core/diagnostics/error-monitor.js +312 -0
- package/core/diagnostics/log-level.js +312 -0
- package/core/diagnostics/log-record.js +312 -0
- package/core/diagnostics/logging-constants.js +312 -0
- package/core/diagnostics/logging.js +312 -0
- package/core/diagnostics/logging.mock.js +312 -0
- package/core/diagnostics/sme-web-telemetry-models.js +312 -0
- package/core/diagnostics/sme-web-telemetry.d.ts +1 -2
- package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
- package/core/diagnostics/sme-web-telemetry.js +336 -15
- package/core/diagnostics/sme-web-telemetry.js.map +1 -1
- package/core/diagnostics/telemetry-control-type.js +312 -0
- package/core/diagnostics/telemetry-options.js +312 -0
- package/core/diagnostics/telemetry-record.js +312 -0
- package/core/dom/dom.js +312 -0
- package/core/frame/frame-connection.js +312 -0
- package/core/frame/frame-connection.mock.js +312 -0
- package/core/frame/shell-navigation-connection.js +312 -0
- package/core/generated/powershell-scripts.d.ts.map +1 -1
- package/core/generated/powershell-scripts.js +313 -1
- package/core/generated/powershell-scripts.js.map +1 -1
- package/core/generated/strings.js +312 -0
- package/core/host/host-core-manager.js +312 -0
- package/core/host/host-core-message-type.js +312 -0
- package/core/host/host-core-messages.js +312 -0
- package/core/index.d.ts +0 -1
- package/core/index.d.ts.map +1 -1
- package/core/index.js +312 -1
- package/core/index.js.map +1 -1
- package/core/manifest/environment-modules.js +312 -0
- package/core/manifest/manifest-loader.js +312 -0
- package/core/notification/client-notification-instance.js +312 -0
- package/core/notification/client-notification.js +312 -0
- package/core/notification/notification-connection.js +312 -0
- package/core/notification/notification-link-type.js +312 -0
- package/core/notification/notification-manager.js +312 -0
- package/core/notification/notification-message.js +312 -0
- package/core/notification/notification-state.js +312 -0
- package/core/notification/notification.js +312 -0
- package/core/notification/powershell-notification.js +312 -0
- package/core/notification/socket-signalr.js +312 -0
- package/core/notification/work-item-connection.js +312 -0
- package/core/notification/work-item-manager.js +312 -0
- package/core/notification/work-item-request.js +312 -0
- package/core/performance/performance-profile-data-type.js +312 -0
- package/core/performance/performance-profile-data.js +312 -0
- package/core/performance/performance-profile-database.js +312 -0
- package/core/performance/performance-profile-record.js +312 -0
- package/core/performance/performance-profile.d.ts.map +1 -1
- package/core/performance/performance-profile.js +321 -9
- package/core/performance/performance-profile.js.map +1 -1
- package/core/performance/performance-tracker.js +312 -0
- package/core/polyfills.js +312 -0
- package/core/resources/scripts/public/crypto/Get-DecryptedDataFromNode.ps1 +216 -0
- package/core/resources/scripts/public/crypto/Get-EncryptionJWKOnNode.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-CimWin32LogicalDisk.ps1 +218 -0
- package/core/resources/scripts/public/inventory/Get-CimWin32NetworkAdapter.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-CimWin32PhysicalMemory.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-CimWin32Processor.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-ClusterInventory.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-ClusterNodes.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +246 -8
- package/core/rpc/alive/rpc-alive-client.js +312 -0
- package/core/rpc/alive/rpc-alive-handler.js +312 -0
- package/core/rpc/alive/rpc-alive-model.js +315 -0
- package/core/rpc/alive/rpc-alive-subject-server.js +312 -0
- package/core/rpc/alive/rpc-observable-alive-client.js +312 -0
- package/core/rpc/alive/rpc-observable-alive-model.js +312 -0
- package/core/rpc/alive/rpc-observable-alive-server.js +312 -0
- package/core/rpc/azure/rpc-azure-model.js +312 -0
- package/core/rpc/azure/rpc-azure-request-client.js +312 -0
- package/core/rpc/azure/rpc-azure-request-handler.js +312 -0
- package/core/rpc/azure/rpc-azure-request-subject-server.js +312 -0
- package/core/rpc/azure/rpc-azure-response-client.js +312 -0
- package/core/rpc/azure/rpc-azure-response-handler.js +315 -0
- package/core/rpc/credssp/rpc-credssp-model.js +312 -0
- package/core/rpc/credssp/rpc-credssp-request-client.js +312 -0
- package/core/rpc/credssp/rpc-credssp-request-handler.js +315 -0
- package/core/rpc/credssp/rpc-credssp-request-subject-server.js +312 -0
- package/core/rpc/credssp/rpc-credssp-response-client.js +312 -0
- package/core/rpc/credssp/rpc-credssp-response-handler.js +315 -0
- package/core/rpc/dialog/rpc-dialog-client.js +312 -0
- package/core/rpc/dialog/rpc-dialog-handler.js +312 -0
- package/core/rpc/dialog/rpc-dialog-model.js +312 -0
- package/core/rpc/dialog/rpc-dialog-subject-server.js +315 -0
- package/core/rpc/electron/rpc-electron-model.js +312 -0
- package/core/rpc/electron/rpc-electron-request-client.js +312 -0
- package/core/rpc/electron/rpc-electron-request-handler.js +312 -0
- package/core/rpc/electron/rpc-electron-request-subject-server.js +312 -0
- package/core/rpc/electron/rpc-electron-response-client.js +312 -0
- package/core/rpc/electron/rpc-electron-response-handler.js +312 -0
- package/core/rpc/elevate/rpc-observable-elevate-client.js +312 -0
- package/core/rpc/elevate/rpc-observable-elevate-model.js +312 -0
- package/core/rpc/elevate/rpc-observable-elevate-server.js +312 -0
- package/core/rpc/error-monitor/rpc-observable-error-monitor-client.js +312 -0
- package/core/rpc/error-monitor/rpc-observable-error-monitor-model.js +315 -0
- package/core/rpc/error-monitor/rpc-observable-error-monitor-server.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-model.js +315 -0
- package/core/rpc/extension-broker/rpc-extension-broker-module-request-subject-server.js +315 -0
- package/core/rpc/extension-broker/rpc-extension-broker-request-client.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-request-handler.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-request-subject-server.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-response-client.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-response-handler.js +312 -0
- package/core/rpc/extension-data/rpc-observable-extension-data-client.js +312 -0
- package/core/rpc/extension-data/rpc-observable-extension-data-model.js +312 -0
- package/core/rpc/extension-data/rpc-observable-extension-data-server.js +312 -0
- package/core/rpc/forward/rpc-forward-auto-client.js +312 -0
- package/core/rpc/forward/rpc-forward-down-client.js +315 -0
- package/core/rpc/forward/rpc-forward-down-handler.js +312 -0
- package/core/rpc/forward/rpc-forward-model.js +312 -0
- package/core/rpc/forward/rpc-forward-up-client.js +312 -0
- package/core/rpc/forward/rpc-forward-up-handler.js +312 -0
- package/core/rpc/forward/rpc-forward-up-subject-server.js +312 -0
- package/core/rpc/log/rpc-log-client.js +312 -0
- package/core/rpc/log/rpc-log-handler.js +312 -0
- package/core/rpc/log/rpc-log-model.js +312 -0
- package/core/rpc/log/rpc-log-subject-server.js +312 -0
- package/core/rpc/notification/rpc-notification-client.js +312 -0
- package/core/rpc/notification/rpc-notification-handler.js +312 -0
- package/core/rpc/notification/rpc-notification-model.js +312 -0
- package/core/rpc/notification/rpc-notification-subject-server.js +312 -0
- package/core/rpc/overlay/rpc-overlay-close-client.js +312 -0
- package/core/rpc/overlay/rpc-overlay-close-handler.js +312 -0
- package/core/rpc/overlay/rpc-overlay-model.js +312 -0
- package/core/rpc/overlay/rpc-overlay-open-client.js +315 -0
- package/core/rpc/overlay/rpc-overlay-open-handler.js +312 -0
- package/core/rpc/overlay/rpc-overlay-open-subject-server.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-client.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-config-client.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-config-server.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-model.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-server.js +312 -0
- package/core/rpc/report/rpc-report-client.js +312 -0
- package/core/rpc/report/rpc-report-handler.js +312 -0
- package/core/rpc/report/rpc-report-model.js +312 -0
- package/core/rpc/report/rpc-report-subject-server.js +315 -0
- package/core/rpc/rpc-base.js +312 -0
- package/core/rpc/rpc-channel.js +312 -0
- package/core/rpc/rpc-forwarder.js +312 -0
- package/core/rpc/rpc-inbound-client.js +312 -0
- package/core/rpc/rpc-inbound.js +312 -0
- package/core/rpc/rpc-manager.js +312 -0
- package/core/rpc/rpc-module-subject-server.js +315 -0
- package/core/rpc/rpc-observable-client.js +312 -0
- package/core/rpc/rpc-observable-request.js +312 -0
- package/core/rpc/rpc-observable-result.js +312 -0
- package/core/rpc/rpc-observable-server.js +312 -0
- package/core/rpc/rpc-outbound-client.js +312 -0
- package/core/rpc/rpc-outbound.js +312 -0
- package/core/rpc/rpc-subject-server.js +312 -0
- package/core/rpc/rpc.js +312 -0
- package/core/rpc/seek/rpc-seek-client.js +312 -0
- package/core/rpc/seek/rpc-seek-handler.js +315 -0
- package/core/rpc/seek/rpc-seek-model.js +312 -0
- package/core/rpc/settings/rpc-settings-client.js +315 -0
- package/core/rpc/settings/rpc-settings-handler.js +312 -0
- package/core/rpc/settings/rpc-settings-model.js +312 -0
- package/core/rpc/settings/rpc-settings-subject-server.js +312 -0
- package/core/rpc/shell-navigate/rpc-shell-navigate-client.js +312 -0
- package/core/rpc/shell-navigate/rpc-shell-navigate-handler.js +312 -0
- package/core/rpc/shell-navigate/rpc-shell-navigate-model.js +312 -0
- package/core/rpc/shell-navigate/rpc-shell-navigate-subject-server.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-model.js +315 -0
- package/core/rpc/sme-extension/rpc-sme-extension-request-client.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-request-handler.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-request-subject-server.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-response-client.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-response-handler.js +312 -0
- package/core/rpc/telemetry/rpc-telemetry-client.js +312 -0
- package/core/rpc/telemetry/rpc-telemetry-handler.js +315 -0
- package/core/rpc/telemetry/rpc-telemetry-model.js +312 -0
- package/core/rpc/telemetry/rpc-telemetry-subject-server.js +312 -0
- package/core/rpc/update-data/rpc-update-data-client.js +312 -0
- package/core/rpc/update-data/rpc-update-data-handler.js +312 -0
- package/core/rpc/update-data/rpc-update-data-model.js +312 -0
- package/core/rpc/update-data/rpc-update-data-subject-server.js +312 -0
- package/core/rpc/update-theme/rpc-observable-update-theme-client.js +312 -0
- package/core/rpc/update-theme/rpc-observable-update-theme-model.js +312 -0
- package/core/rpc/update-theme/rpc-observable-update-theme-server.js +312 -0
- package/core/rpc/work-item/rpc-work-item-client.js +312 -0
- package/core/rpc/work-item/rpc-work-item-handler.js +312 -0
- package/core/rpc/work-item/rpc-work-item-model.js +312 -0
- package/core/rpc/work-item/rpc-work-item-subject-server.js +312 -0
- package/core/rpc/work-item-find/rpc-work-item-find-client.js +312 -0
- package/core/rpc/work-item-find/rpc-work-item-find-handler.js +312 -0
- package/core/rpc/work-item-find/rpc-work-item-find-model.js +312 -0
- package/core/rpc/work-item-find/rpc-work-item-find-subject-server.js +312 -0
- package/core/security/active-connection.js +312 -0
- package/core/security/authorization-manager.js +312 -0
- package/core/security/connection-manager-settings/common-connection-settings.js +315 -0
- package/core/security/connection-manager-settings/connection-settings.js +312 -0
- package/core/security/connection-manager.js +312 -0
- package/core/security/connection-stream.js +312 -0
- package/core/security/connection.js +312 -0
- package/core/security/credssp-manager.js +312 -0
- package/core/security/sign-on-manager.js +312 -0
- package/core/security/tag-manager.js +312 -0
- package/core/security/tool-condition-validator.js +312 -0
- package/core/security/tool-connection-query.js +312 -0
- package/core/security/user-principal.js +312 -0
- package/core/shared/cluster-inventory/cluster-inventory-cache.js +312 -0
- package/core/shared/cluster-inventory/cluster-inventory.js +312 -0
- package/core/shared/cluster-inventory/cluster-node-inventory.js +312 -0
- package/core/shared/gateway-inventory/gateway-inventory-cache.js +312 -0
- package/core/shared/gateway-inventory/gateway-inventory-detail-cache.js +312 -0
- package/core/shared/gateway-inventory/gateway-inventory-detail.js +312 -0
- package/core/shared/gateway-inventory/gateway-inventory.js +312 -0
- package/core/shared/inventory-query-caches.js +312 -0
- package/core/shared/server-inventory/server-inventory-cache.js +312 -0
- package/core/shared/server-inventory/server-inventory-detail-cache.js +312 -0
- package/core/shared/server-inventory/server-inventory-detail.js +315 -0
- package/core/shared/server-inventory/server-inventory.js +312 -0
- package/core/shared/shared-cache.js +312 -0
- package/core/shared/tool-inventory/tool-inventory-cache.js +312 -0
- package/core/shared/tool-inventory/tool-inventory.js +312 -0
- package/core/special.js +315 -0
- package/core/test-utilities/accessibility-tester.js +312 -0
- package/core/test-utilities/console.mock.js +312 -0
- package/core/test-utilities/jasmine-axe-matcher.js +312 -0
- package/core/test-utilities/wait-async.js +312 -0
- package/core/test.js +312 -0
- package/core/testing.js +312 -0
- package/core/workflow/persistent-local-storage.js +312 -0
- package/core/workflow/persistent-work-item-apply-state.js +316 -0
- package/core/workflow/persistent-work-item-state.js +312 -0
- package/core/workflow/persistent-work-item.js +315 -0
- package/core/workflow/persistent-workflow-builder.js +312 -0
- package/core/workflow/persistent-workflow-context.js +312 -0
- package/core/workflow/persistent-workflow-runner.js +312 -0
- package/core/workflow/persistent-workflow-snapshot.js +312 -0
- package/core/workflow/persistent-workflow-store.js +312 -0
- package/core/workflow/persistent-workflow.js +312 -0
- package/package.json +11 -9
- package/styles/css/main-v2.css +1 -1
- package/styles/fonts/SegoeUI/Bold/SegoeUIBold-5.27.woff +0 -0
- package/styles/fonts/SegoeUI/Light/SegoeUILight-5.27.woff +0 -0
- package/styles/fonts/SegoeUI/Normal/SegoeUI-5.27.woff +0 -0
- package/styles/fonts/SegoeUI/SemiBold/SegoeUISemiBold-5.27.woff +0 -0
- package/styles/fonts/SegoeUI/SemiLight/SegoeUISemiLight-5.27.woff +0 -0
- package/styles/fonts/ServMDL2/ServMDL2-4.66.woff +0 -0
- package/tools/build/webpack/index-html.transform.js +312 -0
- package/tools/build/webpack/shell.index-html.transform.js +312 -0
- package/tools/build/webpack/shell.webpack.config.js +312 -0
- package/tools/build/webpack/webpack.config.js +312 -0
- package/tools/code-formatter/.eslintrc.base.json +3 -1
- package/tools/code-formatter/lint.d.ts.map +1 -1
- package/tools/code-formatter/lint.js +319 -1
- package/tools/code-formatter/lint.js.map +1 -1
- package/tools/code-formatter/utilities.d.ts +7 -0
- package/tools/code-formatter/utilities.d.ts.map +1 -0
- package/tools/code-formatter/utilities.js +395 -0
- package/tools/code-formatter/utilities.js.map +1 -0
- package/tools/gulp-doc-generator/index.js +312 -0
- package/tools/gulp-manifest-resource/index.js +312 -0
- package/tools/gulp-manifest-validator/index.js +312 -0
- package/tools/gulp-merge-json-in-folders/index.js +312 -0
- package/tools/gulp-merge-json-in-folders/json-merge.js +312 -0
- package/tools/gulp-ps-cim/index.js +315 -0
- package/tools/gulp-ps-code/index.d.ts.map +1 -1
- package/tools/gulp-ps-code/index.js +323 -2
- package/tools/gulp-ps-code/index.js.map +1 -1
- package/tools/gulp-ps-code/ps-code-convert.js +312 -0
- package/tools/gulp-ps-manifest/index.js +312 -0
- package/tools/gulp-ps-module/index.d.ts.map +1 -1
- package/tools/gulp-ps-module/index.js +327 -3
- package/tools/gulp-ps-module/index.js.map +1 -1
- package/tools/gulp-ps-resjson/index.js +315 -0
- package/tools/gulp-resjson/index.js +315 -0
- package/tools/gulp-resjson/resjson-convert.js +312 -0
- package/tools/gulp-schema-form/index.js +312 -0
- package/tools/gulp-svg-code/index.js +312 -0
- package/tools/gulp-svg-code/svg-code-convert.js +312 -0
- package/tools/gulp-update-notes-resource/index.d.ts.map +1 -1
- package/tools/gulp-update-notes-resource/index.js +316 -4
- package/tools/gulp-update-notes-resource/index.js.map +1 -1
- package/tools/module-template/.eslintrc.json +3 -0
- package/tools/module-template/build/increment-package-version.ps1 +216 -0
- package/tools/module-template/build/push-incremented-version.ps1 +216 -1
- package/tools/module-template/build/update-powershell-code.ps1 +216 -0
- package/tools/module-template/gulpfile.ts/common/clean.ts +2 -0
- package/tools/module-template/gulpfile.ts/common/pack.ts +17 -5
- package/tools/module-template/gulpfile.ts/common/powershell.ts +40 -2
- package/tools/module-template/gulpfile.ts/common/utilities.ts +1 -0
- package/tools/pack-nuget/index.d.ts.map +1 -1
- package/tools/pack-nuget/index.js +321 -3
- package/tools/pack-nuget/index.js.map +1 -1
- package/tools/scripts/Invoke-PesterTest.ps1 +216 -0
- package/tools/scripts/New-ExtensionPackage.ps1 +373 -6
- package/tools/scripts/Search-NonAsciiText.ps1 +216 -0
- package/tools/scripts/package-information/README.md +3 -0
- package/tools/scripts/package-information/ms-logo.png +0 -0
- package/tools/test-runner/index.js +312 -0
- package/tools/utilities/index.js +312 -0
- package/tools/wac-cli/src/angular15/configs/angular-json-config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/ci-build-yml-config.js +315 -0
- package/tools/wac-cli/src/angular15/configs/config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts +9 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts.map +1 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +328 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js.map +1 -0
- package/tools/wac-cli/src/angular15/configs/git-ignore-config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/jasmine-test-config.js +315 -0
- package/tools/wac-cli/src/angular15/configs/package-json-config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/replace-config.js +315 -0
- package/tools/wac-cli/src/angular15/configs/tsconfig-config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +312 -0
- package/tools/wac-cli/src/angular15/main.d.ts +19 -3
- package/tools/wac-cli/src/angular15/main.d.ts.map +1 -1
- package/tools/wac-cli/src/angular15/main.js +353 -7
- package/tools/wac-cli/src/angular15/main.js.map +1 -1
- package/tools/wac-cli/src/angular15/upgrader/angular-json-upgrader.js +316 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/ajax-response-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/css-syntax-error-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/declare-override-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/error-updater-angular15.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/form-control-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/iif-updater-util.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/load-children-callback-updater.js +315 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/log-parser.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/observable-throw-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/parameter-count-violation-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/string-replace-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/subjuct-next-updater-util.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/ci-build-yml-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts +18 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts.map +1 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +361 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js.map +1 -0
- package/tools/wac-cli/src/angular15/upgrader/file-replacement-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/git-ignore-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/jasmine-test-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/package-json-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/remove-upgrader.js +315 -0
- package/tools/wac-cli/src/angular15/upgrader/replace-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/tsconfig-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/version-json-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/utils/add-item.js +312 -0
- package/tools/wac-cli/src/angular15/utils/command-runner.js +312 -0
- package/tools/wac-cli/src/angular15/utils/file-comparison.js +315 -0
- package/tools/wac-cli/src/angular15/utils/file-replacement.js +312 -0
- package/tools/wac-cli/src/angular15/utils/file-writer.js +312 -0
- package/tools/wac-cli/src/angular15/utils/logger.js +312 -0
- package/tools/wac-cli/src/angular15/utils/main-debugger.js +312 -0
- package/tools/wac-cli/src/angular15/utils/relative-path.js +312 -0
- package/tools/wac-cli/src/angular15/utils/remove-item.js +312 -0
- package/tools/wac-cli/src/angular15/utils/space-generator.js +312 -0
- package/tools/wac-cli/src/angular15/utils/update-shell-references.js +316 -0
- package/tools/wac-cli/src/common.js +312 -0
- package/tools/wac-cli/src/create/main.js +312 -0
- package/tools/wac-cli/src/eslint/main.js +312 -0
- package/tools/wac-cli/src/index.js +312 -0
- package/tools/wac-cli/src/upgrade/error-updater.js +312 -0
- package/tools/wac-cli/src/upgrade/error-updaters/component-selector-updater.js +315 -0
- package/tools/wac-cli/src/upgrade/error-updaters/only-arrow-functions-updater.js +315 -0
- package/tools/wac-cli/src/upgrade/error-updaters/updater-lookup.js +312 -0
- package/tools/wac-cli/src/upgrade/file-updater.js +312 -0
- package/tools/wac-cli/src/upgrade/get-files.js +312 -0
- package/tools/wac-cli/src/upgrade/main.js +312 -0
- package/tools/wac-cli/src/upgrade/models/error-result.js +312 -0
- package/tools/wac-cli/src/upgrade/models/updater-interface.js +312 -0
- package/tools/wac-cli/src/upgrade/package-updater.js +312 -0
- package/tools/wac-cli/templates/wac-template/src/favicon.ico +0 -0
- package/tools/wac-cli/templates/wac-template/src/karma.conf.js +312 -0
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Error.ps1 +216 -0
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Exception.ps1 +216 -0
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Process.ps1 +216 -1
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Service.ps1 +216 -1
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-WinRmState.ps1 +216 -1
- package/core/data/extension-broker/snap-in-listener.d.ts.map +0 -1
- package/core/data/extension-broker/snap-in-listener.js +0 -73
- package/core/data/extension-broker/snap-in-listener.js.map +0 -1
- package/microsoft-windows-admin-center-sdk-4.123.0.tgz +0 -0
|
@@ -354,7 +354,7 @@ export class SplitViewComponent extends CoreBaseComponent {
|
|
|
354
354
|
* The Angular ngOnDestroy function.
|
|
355
355
|
*/
|
|
356
356
|
ngOnDestroy() {
|
|
357
|
-
this.subscriptions.forEach(sub => sub
|
|
357
|
+
this.subscriptions.forEach(sub => sub?.unsubscribe());
|
|
358
358
|
}
|
|
359
359
|
/**
|
|
360
360
|
* The method called after content is initialized.
|
|
@@ -778,4 +778,4 @@ __decorate([
|
|
|
778
778
|
}], isExpanded: [{
|
|
779
779
|
type: Input
|
|
780
780
|
}], onWindowBreakpointChanged: [], deferredOnLayoutChanged: [], deferredRefreshUI: [], setInternalPaneDistance: [] }); })();
|
|
781
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9zcGxpdC12aWV3L3NwbGl0LXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc3BsaXQtdmlldy9zcGxpdC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQTBCLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7O0lDdkI5Ryx3QkFBeUQ7Ozs7O0lBUXpELHNDQUU0RTtJQUExRSx3TUFBVyxlQUFBLHlCQUFpQixDQUFBLElBQUM7SUFDL0IsaUJBQWM7OztJQUZaLG1EQUFtQztJQUQ4QixtRkFBZ0MsbURBQUE7OztJQUluRyx3QkFBc0Q7OztJQWQxRCw2QkFBc0c7SUFDcEcscUNBQWdJO0lBQzlILG9H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T3RCLGFBQWE7a0JBRG5CLEtBQUs7WUFPQyxrQkFBa0I7a0JBRHhCLEtBQUs7WUFRQyxtQ0FBbUM7a0JBRHpDLEtBQUs7WUFhSyxZQUFZO2tCQUR0QixLQUFLO1lBa0JDLG9DQUFvQztrQkFEMUMsS0FBSztZQU9DLGlCQUFpQjtrQkFEdkIsS0FBSztZQU9DLGlCQUFpQjtrQkFEdkIsS0FBSztZQU9LLFdBQVc7a0JBRHJCLEtBQUs7WUFpQkMsa0NBQWtDO2tCQUR4QyxLQUFLO1lBT0MsaUJBQWlCO2tCQUR2QixLQUFLO1lBd0NDLFlBQVk7a0JBRGxCLE1BQU07WUFPQSxXQUFXO2tCQURqQixNQUFNO1lBNkJJLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsT0FBTztZQVNULGFBQWE7a0JBRHZCLFdBQVc7bUJBQUMsc0JBQXNCO1lBbUJ4QixVQUFVO2tCQURwQixLQUFLO1lBd0dDLHlCQUF5QixNQVl4Qix1QkFBdUIsTUF5SnZCLGlCQUFpQixNQW9EakIsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb250ZW50Q2hpbGQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2tpcFNlbGYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgWWllbGQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy95aWVsZC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nLWxldmVsJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dCwgU01FX0xBWU9VVF9QUk9WSURFUiB9IGZyb20gJy4uL2NvbW1vbi9sYXlvdXQnO1xyXG5pbXBvcnQgeyBTcGxpdFZpZXdSZXNpemVyTWFyZ2luLCBTcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlciB9IGZyb20gJy4vc3BsaXQtdmlldy1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgcGFuZSBvcmllbnRhdGlvbiBvZiB0aGUgc3BsaXQgdmlldy5cclxuICovXHJcbmV4cG9ydCB0eXBlIFNwbGl0Vmlld09yaWVudGF0aW9uID0gJ3RvcCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbSc7XHJcblxyXG4vKipcclxuICogVGhlIGNvbXBvbmVudCBkZWZpbml0aW9uIG9mIHRoZSBzcGxpdCB2aWV3IGNvbnRlbnQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLXNwbGl0LXZpZXctY29udGVudCcsXHJcbiAgICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGxpdFZpZXdDb250ZW50Q29tcG9uZW50IHsgfVxyXG5cclxuLyoqXHJcbiAqIFRoZSBjb21wb25lbnQgZGVmaW5pdGlvbiBvZiB0aGUgc3BsaXQgdmlldyBwYW5lLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1zcGxpdC12aWV3LXBhbmUnLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BsaXRWaWV3UGFuZUNvbXBvbmVudCB7IH1cclxuXHJcbi8qKlxyXG4gKiBUaGUgY29tcG9uZW50IGRlZmluaXRpb24gb2YgdGhlIHNwbGl0IHZpZXcuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLXNwbGl0LXZpZXcnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NwbGl0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBTTUVfTEFZT1VUX1BST1ZJREVSLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTcGxpdFZpZXdDb21wb25lbnQpIH1cclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNwbGl0Vmlld0NvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgTGF5b3V0LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ1NwbGl0Vmlld0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWluZXIgZm9yIGFjdGl2ZSBzdWJzY3JpcHRpb25zIHRoYXQgc2hvdWxkIGJlIGNsZWFuZWQgdXAgaW4gdGhlIE9uRGVzdHJveSBjYWxsLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRlZmluZXMgdGhlIGFjdHVhbCBwYW5lIGRpc3RhbmNlIHRoYXQgdGhlIGNvbnRyb2wgdXNlcyBmb3IgcmVuZGVyaW5nLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGludGVybmFsUGFuZURpc3RhbmNlOiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZWZpbmVzIHdoZXRoZXIgdGhlIHBhbmUgZGlzdGFuY2UgdmFsdWUgaXMgc2V0LlxyXG4gICAgICogSXQgd2lsbCBub3Qgc2V0IGl0IHR3aWNlIGlmIHNldCBiZWNhdXNlIG9ubHkgbmVlZCB0byByZW1lbWJlciB0aGUgaW5pdGlhbCB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc1BhbmVEaXN0YW5jZVNldCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgcmVtZW1iZXJzIHRoZSBwYW5lIGRpc3RhbmNlIHRoYXQgaGFzIGJlZW4gc2V0IGluaXRpYWxseS5cclxuICAgICAqIFRoZSBpbnRlbnRpb24gaXMgZm9yIHJlY292ZXJpbmcgdGhlIHZhbHVlIG9uIHdpbmRvdyBzaXplIGNoYW5nZXMgYW5kIGxheW91dCBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRlZmF1bHRQYW5lRGlzdGFuY2U6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRlZmluZXMgd2hldGhlciB0aGUgc3BsaXQgdmlldyBoYXMgYmVlbiBleHBhbmRlZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbElzRXhwYW5kZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgc3BsaXQgdmlldyBjb21wb25lbnQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaXNDb21wb25lbnRJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHdpbmRvdyByZXNwb25zaXZlIG1hbmFnZXIgZm9yIHRoZSBzcGxpdCB2aWV3LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyOiBTcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvcmllbnRhdGlvbiBvZiB0aGUgcGFuZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbE9yaWVudGF0aW9uOiBTcGxpdFZpZXdPcmllbnRhdGlvbiA9ICdib3R0b20nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW1wbGVtZW50cyB0aGUgSUxheW91dCBpbnRlcmZhY2UuIEl0J3MgdHJpZ2dlcmVkIHdoZW4gdGhlIGxheW91dCBpcyBjaGFuZ2VkLlxyXG4gICAgICogSXQncyB1c2VkIHRvIHRlbGwgdGhlIGNoaWxkIGNvbXBvbmVudHMgdG8gY29vcmRpbmF0ZSB3aXRoIHRoZSBsYXlvdXQgY2hhbmdlLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTGF5b3V0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB3aW5kb3dCcmVha3BvaW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZChTcGxpdFZpZXdDb250ZW50Q29tcG9uZW50KVxyXG4gICAgcHVibGljIGNvbnRlbnQ6IFNwbGl0Vmlld0NvbnRlbnRDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGFuZSBvZiB0aGUgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKFNwbGl0Vmlld1BhbmVDb21wb25lbnQpXHJcbiAgICBwdWJsaWMgcGFuZTogU3BsaXRWaWV3UGFuZUNvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzZWN0aW9uIGh0bWwgZWxlbWVudCB0aGF0IHdyYXBzIHRoZSBzbWUtc3BsaXQtdmlldy1wYW5lXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ3BhbmVDb250YWluZXInKVxyXG4gICAgcHVibGljIHBhbmVDb250YWluZXJFbGVtZW50OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNlY3Rpb24gaHRtbCBlbGVtZW50IHRoYXQgd3JhcHMgdGhlIHNtZS1zcGxpdC12aWV3LWNvbnRhaW5lclxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKCdjb250ZW50Q29udGFpbmVyJylcclxuICAgIHB1YmxpYyBjb250ZW50Q29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRvIHNob3cgdGhlIHNjcm9sbGJhciB3aGVuIGl0J3MgbmVlZGVkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dTY3JvbGxiYXIgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRvIHNob3cgdGhlIGJvcmRlciBmb3IgdGhlIHNwbGl0dGVyLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dTcGxpdHRlckJvcmRlciA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIG1lYW5zIG9uIHNtYWxsZXIgd2luZG93LCB3aWxsIHJlc3BlY3QgdGhlIG9yaWdpbmFsIHBhbmUgdmFsdWVcclxuICAgICAqIEl0IGlzIG5vdCBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBvdGhlciB0aGFuIHRoZSBzaGVsbCBzaWRlIG5hdiBiYXIuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzYWJsZVBhbmVEaXN0YW5jZVJlc3BvbnNpdmVXaW5kb3cgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgcGFuZS5cclxuICAgICAqIEl0IGlzIGEgaGFyZGNvZGVkIHZhbHVlLCBub3QgZnVsbHkgd29ya2luZyBvbiB3aW5kb3cgcmVzcG9uc2l2ZSBkZXNpZ24uXHJcbiAgICAgKiBCeSBkZXNpZ24sIHRoaXMgdmFsdWUgd2lsbCBub3QgYmUgcmVzcGVjdGVkIG9uIHNtYWxsZXIgc2NyZWVuLCBwaG9uZSBkb3duLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBhbmVEaXN0YW5jZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsUGFuZURpc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHBhbmVEaXN0YW5jZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJuYWxQYW5lRGlzdGFuY2UgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxQYW5lRGlzdGFuY2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUGFuZURpc3RhbmNlU2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBhbmVEaXN0YW5jZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUGFuZURpc3RhbmNlU2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgdGhlIHJlc2l6ZSBtYXJnaW4gdG8gZ28gd2luZG93IHJlc3BvbnNpdmUuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzYWJsZWRSZXNpemVNYXJnaW5SZXNwb25zaXZlV2luZG93ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgdGhlIG1pbiB2YWx1ZSBvZiB0aGUgcGFuZSBzaXplLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlc2l6ZUxvd2VyTWFyZ2luID0gMTAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW5kaWNhdGVzIHRoZSBtaW4gdmFsdWUgb2YgdGhlIGNvbnRlbnQgc2l6ZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZXNpemVVcHBlck1hcmdpbiA9IDEwMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRlZmluZXMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBlbGVtZW50IHdoaWNoIGhvbGRzIHRoZSByZXNpemVyIGluIHRoZSByZXNpemluZyBsYXlvdXQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IG9yaWVudGF0aW9uKGlucHV0OiBTcGxpdFZpZXdPcmllbnRhdGlvbikge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxPcmllbnRhdGlvbiA9IGlucHV0O1xyXG4gICAgICAgIGlmICghdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcmV2aW91c09yaWVudGF0aW9uID0gdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5wcmV2aW91c09yaWVudGF0aW9uO1xyXG4gICAgICAgIGlmIChwcmV2aW91c09yaWVudGF0aW9uICE9PSB0aGlzLmludGVybmFsT3JpZW50YXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5wcmV2aW91c09yaWVudGF0aW9uID0gdGhpcy5pbnRlcm5hbE9yaWVudGF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgdG8gZGlzYWJsZSB0aGUgb3JpZW50YXRpb24gY2hhbmdlIG9uIHdpbmRvdyBzaXplIGNoYW5nZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkaXNhYmxlT3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIaWRlcyB0aGUgc3BsaXQgdmlldyBwYW5lXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGlkZVNwbGl0Vmlld1BhbmUgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3Igb3JpZW50YXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBvcmllbnRhdGlvbigpOiBTcGxpdFZpZXdPcmllbnRhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxPcmllbnRhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbWVtYmVyIHRoZSBwcmV2aW91cyB3aW5kb3cgcmVzcG9uc2l2ZSB2YWx1ZSBmb3Igb3JpZW50YXRpb24gZm9yIHRoZSBvbiBvcmllbnRhdGlvbiBjaGFuZ2VkIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHByZXZpb3VzT3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID0gJ2JvdHRvbSc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXR0ZXIgZm9yIHRoZSB3aW5kb3cgcmVzcG9uc2l2ZSB2YWx1ZSBmb3IgdGhlIG9yaWVudGF0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93KCkge1xyXG4gICAgICAgIC8vIElmIG9wdC1vdXQsIHNob3VsZCB1c2UgdGhlIG9yaWdpbmFsIG9yaWVudGF0aW9uXHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZU9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1ciA9IHRoaXMuc3BsaXRWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIub3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIGlmIChjdXIgIT09IHRoaXMucHJldmlvdXNPcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25PcmllbnRhdGlvbkNoYW5nZWQoY3VyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNPcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPSBjdXI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLm9yaWVudGF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBldmVudCBmaXJlZCB3aGVuIHRoZSBwYW5lJ3MgZXhwYW5kZWQgc3RhdGUgaXMgYmVpbmcgdG9nZ2xlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcGFuZVRvZ2dsaW5nOiBFdmVudEVtaXR0ZXI8eyBpc0V4cGFuZGVkOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlzRXhwYW5kZWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBldmVudCBmaXJlZCB3aGVuIHRoZSBwYW5lJ3MgZXhwYW5kZWQgc3RhdGUgaGFzIGJlZW4gdG9nZ2xlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcGFuZVRvZ2dsZWQ6IEV2ZW50RW1pdHRlcjx7IGlzRXhwYW5kZWQ6IGJvb2xlYW4gfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaXNFeHBhbmRlZDogYm9vbGVhbiB9PigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmZXJlbmNlOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgbGF5b3V0OiBMYXlvdXQpIHtcclxuXHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG5cclxuICAgICAgICBpZiAobGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BsaXRWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgPSBuZXcgU3BsaXRWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIobGF5b3V0KTtcclxuICAgICAgICAgICAgLy8gb24gcGFyZW50IGxheW91dCBjaGFuZ2VzLCByZS1lbWl0IHRoZSBsYXlvdXQgY2hhbmdlIHRvIG91ciBldmVudFxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChsYXlvdXQubGF5b3V0Q2hhbmdlZC5zdWJzY3JpYmUoKCgpID0+IHRoaXMub25QYXJlbnRMYXlvdXRDaGFuZ2VkKCkpKSk7XHJcbiAgICAgICAgICAgIC8vIG9uIHdpbmRvdyBicmVhayBwb2ludCBjaGFuZ2VzLCBlbWl0IHRoZSBldmVudCBhYm91dCBjcml0aWNhbCBjbGFzc2VzIGFuZCBzdHlsaW5nIHVwZGF0ZXMgc2lnbmFsLlxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChsYXlvdXQud2luZG93QnJlYWtwb2ludENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25XaW5kb3dCcmVha3BvaW50Q2hhbmdlZCgpKSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRlZmVycmVkT25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgQ1NTIGNsYXNzZXMgb2YgdGhlIGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBUT0RPOiBzZXR0aW5nIHRoZSBjbGFzcyB0aGlzIHdheSBwcmV2ZW50IGFueSBjdXN0b20gY2xhc3MgZnJvbSBiZWluZyBhcHBsaWVkLlxyXG4gICAgICogQ2hhbmdlIHRvIHNldHRpbmcgY2xhc3MgaW4gdGhlIGNvbnN0cnVjdG9yIHVzaW5nIFJlbmRlcmVyMiBhbmQgRWxlbWVudFJlZlxyXG4gICAgICpcclxuICAgICAqIE9uIHBob25lIGRvd24sIHRoZSBsYXlvdXQgZm9yIHNwbGl0IHZpZXcgY2FuIG9ubHkgYmUgdG9wIGFuZCBib3R0b20sIGluIHRoaXMgY2FzZSwgd2Ugd2lsbCBhbGxvdyB5IHNjcm9sbC5cclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgICBwdWJsaWMgZ2V0IGhvc3RDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnc21lLWxheW91dC1hYnNvbHV0ZSBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZmxleCBkaXJlY3Rpb24gb2YgdGhlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5mbGV4LWRpcmVjdGlvbicpXHJcbiAgICBwdWJsaWMgZ2V0IGZsZXhEaXJlY3Rpb24oKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMub3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdyb3cnO1xyXG4gICAgICAgICAgICBjYXNlICd0b3AnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb2x1bW4nO1xyXG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jvdyc7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbHVtbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBwYW5lIGhhcyBiZWVuIGV4cGFuZGVkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsSXNFeHBhbmRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcGFuZSBoYXMgYmVlbiBleHBhbmRlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBpc0V4cGFuZGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLmludGVybmFsSXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmludGVybmFsSXNFeHBhbmRlZCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMucGFuZVRvZ2dsaW5nLmVtaXQoe1xyXG4gICAgICAgICAgICBpc0V4cGFuZGVkOiB0aGlzLmludGVybmFsSXNFeHBhbmRlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFVJKCk7XHJcbiAgICAgICAgdGhpcy5wYW5lVG9nZ2xlZC5lbWl0KHtcclxuICAgICAgICAgICAgaXNFeHBhbmRlZDogdGhpcy5pbnRlcm5hbElzRXhwYW5kZWRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBBbmd1bGFyIG5nT25Jbml0IGZ1bmN0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBvbmVudEluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hVSSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEFuZ3VsYXIgbmdPbkRlc3Ryb3kgZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgYWZ0ZXIgY29udGVudCBpcyBpbml0aWFsaXplZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jb250ZW50ID09IG51bGwpIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2coe1xyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSB2YWx1ZSBvZiAnY29udGVudCcgaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLmAsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnRcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzb3VyY2U6ICdTcGxpdFZpZXdDb21wb25lbnQubmdBZnRlckNvbnRlbnRJbml0J1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhbmUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICBsZXZlbDogTG9nTGV2ZWwuRXJyb3IsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIHZhbHVlIG9mICdwYW5lJyBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQuYCxcclxuICAgICAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhbmU6IHRoaXMucGFuZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ1NwbGl0Vmlld0NvbXBvbmVudC5uZ0FmdGVyQ29udGVudEluaXQnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUGFuZURpc3RhbmNlU2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRQYW5lTWF4U2l6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHdpbmRvdyByZXNwb25zaXZlIHZhbHVlIGZvciB0aGUgcGFuZSBkaXN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFBhbmVEaXN0YW5jZVJlc3BvbnNpdmVXaW5kb3coKTogbnVtYmVyIHtcclxuICAgICAgICAvLyBJZiBvcHQtb3V0LCBzaG91bGQgdXNlIHRoZSBvcmlnaW5hbCBwYW5lIGRpc3RhbmNlLlxyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVQYW5lRGlzdGFuY2VSZXNwb25zaXZlV2luZG93IHx8ICF0aGlzLnNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhbmVEaXN0YW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLnBhbmVEaXN0YW5jZSh0aGlzLnBhbmVEaXN0YW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3aW5kb3cgcmVzcG9uc2l2ZSB2YWx1ZSBmb3IgdGhlIHJlc2l6ZXIgbWFyZ2luLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U3BsaXRWaWV3UmVzaXplck1hcmdpblJlc3BvbnNpdmVXaW5kb3coKTogU3BsaXRWaWV3UmVzaXplck1hcmdpbiB7XHJcbiAgICAgICAgLy8gSWYgb3B0LW91dCwgc2hvdWxkIHVzZSB0aGUgb3JpZ2luYWwgbWFyZ2luIHNpemUuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWRSZXNpemVNYXJnaW5SZXNwb25zaXZlV2luZG93IHx8ICF0aGlzLnNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBsb3dlcjogdGhpcy5yZXNpemVMb3dlck1hcmdpbixcclxuICAgICAgICAgICAgICAgIHVwcGVyOiB0aGlzLnJlc2l6ZVVwcGVyTWFyZ2luXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5zcGxpdFZpZXdSZXNpemVyTWFyZ2luKFxyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUxvd2VyTWFyZ2luLCB0aGlzLnJlc2l6ZVVwcGVyTWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvbiB3aW5kb3cgYnJlYWtwb2ludCBjaGFuZ2VkIGhhbmRsZXIuXHJcbiAgICAgKiBBZGRpbmcgeWllbGQgZm9yIGNvbXBvbmVudCB0byBnZXQgRWxlbWVudFJlZiBhZnRlciBpbml0aWFsaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvbldpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb250ZW50Q29udGFpbmVyRWxlbWVudCB8fCAhdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLm9uV2luZG93U2l6ZUNoYW5nZWQodGhpcy5jb250ZW50Q29udGFpbmVyRWxlbWVudCwgdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVmZXJyZWQgbGF5b3V0IGNoYW5nZWQgaGFuZGxlci5cclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKClcclxuICAgIHByaXZhdGUgZGVmZXJyZWRPbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5vblBhcmVudExheW91dENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdGhlIGNoYW5nZSBldmVudCBjb21pbmcgZnJvbSBwYXJlbnQgY29udHJvbCBmcm9tIHRoZSBsYXlvdXQgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9uUGFyZW50TGF5b3V0Q2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNDb21wb25lbnRJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1BhbmVEaXN0YW5jZVNldCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0UGFuZU1heFNpemUoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZU1hcmdpbjogU3BsaXRWaWV3UmVzaXplck1hcmdpbiA9IHRoaXMuZ2V0U3BsaXRWaWV3UmVzaXplck1hcmdpblJlc3BvbnNpdmVXaW5kb3coKTtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID0gdGhpcy5vcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3c7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhbmVDb250YWluZXIgPSB0aGlzLnBhbmVDb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzaXplTWFyZ2luLmxvd2VyID09PSB1bmRlZmluZWQgJiYgcmVzaXplTWFyZ2luLnVwcGVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdib3R0b20nIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3RvcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2xlZnQnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUud2lkdGggPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnYm90dG9tJyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICd0b3AnKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSA9IE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lRGlzdGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgLSByZXNpemVNYXJnaW4udXBwZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSA9IE1hdGgubWF4KHRoaXMucGFuZURpc3RhbmNlLCByZXNpemVNYXJnaW4ubG93ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSB0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5wYW5lRGlzdGFuY2UgPyAodGhpcy5wYW5lRGlzdGFuY2UgKyAncHgnKSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnbGVmdCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAncmlnaHQnKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZURpc3RhbmNlID0gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gcmVzaXplTWFyZ2luLnVwcGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lRGlzdGFuY2UgPSBNYXRoLm1heCh0aGlzLnBhbmVEaXN0YW5jZSwgcmVzaXplTWFyZ2luLmxvd2VyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUud2lkdGggPSB0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5wYW5lRGlzdGFuY2UgPyAodGhpcy5wYW5lRGlzdGFuY2UgKyAncHgnKSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFuZU1heFNpemUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvZ2dsZXMgdGhlIGV4cGFuZGVkIHN0YXRlIG9mIHRoZSBwYW5lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdG9nZ2xlUGFuZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGltcGxlbWVudGF0aW9uIGZvciBhZnRlciB0aGUgY29udHJvbCBnZXRzIHNpZ25hbCBmb3IgY29uZmlybWF0aW9uIGZvciByZXNpemUuXHJcbiAgICAgKiBAcGFyYW0gJGV2ZW50IHRoZSBldmVudCBmb3IgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uUmVzaXplZCgkZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlc2V0UGFuZU1heFNpemUoKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzaXplTWFyZ2luOiBTcGxpdFZpZXdSZXNpemVyTWFyZ2luID0gdGhpcy5nZXRTcGxpdFZpZXdSZXNpemVyTWFyZ2luUmVzcG9uc2l2ZVdpbmRvdygpO1xyXG4gICAgICAgIGNvbnN0IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9IHRoaXMub3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93O1xyXG4gICAgICAgIGNvbnN0IHBhbmVDb250YWluZXIgPSB0aGlzLnBhbmVDb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuaXNQYW5lRGlzdGFuY2VTZXQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAocmVzaXplTWFyZ2luLmxvd2VyID09PSB1bmRlZmluZWQgJiYgcmVzaXplTWFyZ2luLnVwcGVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2JvdHRvbScgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAndG9wJykge1xyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnbGVmdCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLndpZHRoID0gJyc7XHJcbiAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdib3R0b20nIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3RvcCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRIZWlnaHQgPSBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdib3R0b20nID9cclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLm9mZnNldEhlaWdodCAtICRldmVudC55IDpcclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLm9mZnNldEhlaWdodCArICRldmVudC55O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucGFuZURpc3RhbmNlID0gTWF0aC5tYXgocmVzaXplZEhlaWdodCwgcmVzaXplTWFyZ2luLmxvd2VyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFuZURpc3RhbmNlICA9IE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZURpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAtIHJlc2l6ZU1hcmdpbi51cHBlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSB0aGlzLnBhbmVEaXN0YW5jZSA/IHRoaXMucGFuZURpc3RhbmNlICsgJ3B4JyA6ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2xlZnQnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzaXplZFdpZHRoID0gb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAncmlnaHQnID9cclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLm9mZnNldFdpZHRoIC0gJGV2ZW50LnggOlxyXG4gICAgICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIub2Zmc2V0V2lkdGggKyAkZXZlbnQueDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSA9IE1hdGgubWF4KHJlc2l6ZWRXaWR0aCwgcmVzaXplTWFyZ2luLmxvd2VyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFuZURpc3RhbmNlID0gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lRGlzdGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmZXJlbmNlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLSByZXNpemVNYXJnaW4udXBwZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUud2lkdGggPSB0aGlzLnBhbmVEaXN0YW5jZSA/IHRoaXMucGFuZURpc3RhbmNlICsgJ3B4JyA6ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxheW91dENoYW5nZWQuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBwYW5lJ3MgZGlzdGFuY2UgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMuXHJcbiAgICAgKiBAcmV0dXJucyBudW1iZXIgdGhhdCBpbmRpY2F0ZXMgdGhlIHBhbmUncyByZW5kZXJpbmcgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcmlhVmFsdWVOb3coKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZCAmJiB0aGlzLnBhbmVEaXN0YW5jZSA/IE1hdGgucm91bmQodGhpcy5wYW5lRGlzdGFuY2UpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdGhlIG9yaWVudGF0aW9uIGNoYW5nZWQgZXZlbnRzLiBUaGlzIHVzdWFsbHkgaGFwcGVucyBvbiBsYXlvdXQgY2hhbmdlIGJlaGF2aW9yIHN1Y2ggYXMgcmVzaXppbmcgdGhlIHdpbmRvdy5cclxuICAgICAqIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGNhbGxlZCB3aXRoIGNvbXBvbmVudCBpbml0aWFsaXplZC5cclxuICAgICAqIEBwYXJhbSBjdXIgdGhlIGN1cnJlbnQgbGF5b3V0LCBjb3VsZCBiZSB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQuXHJcbiAgICAgKiBAcmV0dXJucyB2b2lkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9uT3JpZW50YXRpb25DaGFuZ2VkKGN1cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgLy8gSWdub3JlIGlmIHRoZSBjb250YWluZXIgaXMgbm90IHlldCBpbml0aWFsaXplZC5cclxuICAgICAgICBpZiAoIXRoaXMuaXNDb21wb25lbnRJbml0aWFsaXplZCB8fCAhdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudCB8fCAhdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKGN1ciA9PT0gJ3RvcCcgfHwgY3VyID09PSAnYm90dG9tJyApIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy5nZXRQYW5lRGlzdGFuY2VSZXNwb25zaXZlV2luZG93KCkgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSA9IHRoaXMuZGVmYXVsdFBhbmVEaXN0YW5jZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGN1ciA9PT0gJ2xlZnQnIHx8IGN1ciA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSB0aGlzLmdldFBhbmVEaXN0YW5jZVJlc3BvbnNpdmVXaW5kb3coKSArICdweCc7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRlZmVycmVkUmVmcmVzaFVJKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYXMgdG8gYmUgYSBkZWJvdW5jZSB2YWx1ZSBpbiBiZXR3ZWVuIDAgLSAyNTAgdG8gd2FpdCBmb3IgY2hpbGRyZW4gY29tcG9uZW50LlxyXG4gICAgICogSWRlYWxseSBzaG91bGQgYmUgcHJvbWlzZSBpbXBsZW1lbnRlZC5cclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKDEwKVxyXG4gICAgcHJpdmF0ZSBkZWZlcnJlZFJlZnJlc2hVSSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hVSSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZ1bmN0aW9uIHRvIHJlZnJlc2ggdGhlIHNwbGl0IHZpZXcgZnJvbSBVSS5cclxuICAgICAqIEByZXR1cm5zIHZvaWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWZyZXNoVUkoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29tcG9uZW50SW5pdGlhbGl6ZWQgfHwgIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQgfHwgIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYW5lRGlzdGFuY2VSZXNwb25zaXZlV2luZG93ID0gdGhpcy5nZXRQYW5lRGlzdGFuY2VSZXNwb25zaXZlV2luZG93KCk7XHJcbiAgICAgICAgY29uc3Qgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID0gdGhpcy5vcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3c7XHJcbiAgICAgICAgY29uc3QgcGFuZUNvbnRhaW5lciA9IHRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJuYWxJc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhbmVEaXN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhbmVEaXN0YW5jZSA9IHRoaXMucGFuZURpc3RhbmNlID4gcGFuZURpc3RhbmNlUmVzcG9uc2l2ZVdpbmRvd1xyXG4gICAgICAgICAgICAgICAgICAgID8gcGFuZURpc3RhbmNlUmVzcG9uc2l2ZVdpbmRvdyA6IHRoaXMucGFuZURpc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgLy8gT24gcGhvbmUtZG93biwgZ2V0IHJpZCBvZiB0aGUgc2Nyb2xsYmFyIHZlcnRpY2FsbHkuXHJcbiAgICAgICAgICAgICAgICBpZiAocGFuZURpc3RhbmNlUmVzcG9uc2l2ZVdpbmRvdyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZURpc3RhbmNlID0gcGFuZURpc3RhbmNlUmVzcG9uc2l2ZVdpbmRvdztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAndG9wJyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdib3R0b20nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBwYW5lRGlzdGFuY2UgPyBwYW5lRGlzdGFuY2UgKyAncHgnIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnbGVmdCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9IHBhbmVEaXN0YW5jZSA/IHBhbmVEaXN0YW5jZSArICdweCcgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3RvcCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnYm90dG9tJykge1xyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdsZWZ0JyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdyaWdodCcpIHtcclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUud2lkdGggPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRJbnRlcm5hbFBhbmVEaXN0YW5jZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcGFuZSBkaXN0YW5jZSB0aGF0IHdvdWxkIGJlIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgcGFuZS5cclxuICAgICAqIHBhbmUncyBoZWlnaHQgb24gdG9wLCBib3R0b20gbGF5b3V0LlxyXG4gICAgICogcGFuZSdzIHdpZHRoIG9uIGxlZnQsIHJpZ2h0IGxheW91dC5cclxuICAgICAqIEByZXR1cm5zIHZvaWQ7XHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwcml2YXRlIHNldEludGVybmFsUGFuZURpc3RhbmNlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudCB8fCAhdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbElzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID0gdGhpcy5vcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3c7XHJcbiAgICAgICAgY29uc3QgcGFuZUNvbnRhaW5lciA9IHRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3RvcCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnYm90dG9tJykge1xyXG4gICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSA9IHBhbmVDb250YWluZXIub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnbGVmdCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFuZURpc3RhbmNlID0gcGFuZUNvbnRhaW5lci5vZmZzZXRXaWR0aDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBtYXggdmFsdWUgdGhhdCB0aGUgcGFuZSBjYW4gZ3Jvdy5cclxuICAgICAqIFNldHMgcGFuZSdzIGhlaWdodCB2YWx1ZSBvbiB0b3AsIGJvdHRvbSBsYXlvdXQuXHJcbiAgICAgKiBTZXRzIHBhbmUncyB3aWR0aCB2YWx1ZSBvbiBsZWZ0LCByaWdodCBsYXlvdXQuXHJcbiAgICAgKiBAcmV0dXJucyB2b2lkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldFBhbmVNYXhTaXplKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudCB8fCAhdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc2l6ZU1hcmdpbjogU3BsaXRWaWV3UmVzaXplck1hcmdpbiA9IHRoaXMuZ2V0U3BsaXRWaWV3UmVzaXplck1hcmdpblJlc3BvbnNpdmVXaW5kb3coKTtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPSB0aGlzLm9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdztcclxuICAgICAgICBjb25zdCBwYW5lQ29udGFpbmVyID0gdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAocmVzaXplTWFyZ2luLmxvd2VyID09PSB1bmRlZmluZWQgJiYgcmVzaXplTWFyZ2luLnVwcGVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2JvdHRvbScgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAndG9wJykge1xyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5taW5IZWlnaHQgPSAnJztcclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUubWF4SGVpZ2h0ID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2xlZnQnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5taW5XaWR0aCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICd0b3AnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2JvdHRvbScpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZFJlc2l6ZU1hcmdpblJlc3BvbnNpdmVXaW5kb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLm1pbkhlaWdodCA9IHJlc2l6ZU1hcmdpbi5sb3dlciArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQgPSAodGhpcy5lbGVtZW50UmVmZXJlbmNlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gcmVzaXplTWFyZ2luLnVwcGVyKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnbGVmdCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLm1pbldpZHRoID0gIHJlc2l6ZU1hcmdpbi5sb3dlciArICdweCc7XHJcbiAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLm1heFdpZHRoID0gKHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gcmVzaXplTWFyZ2luLnVwcGVyKSArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhlIG1heCB2YWx1ZSB0aGF0IHRoZSBwYW5lIGNhbiBncm93LlxyXG4gICAgICogQHJldHVybnMgdm9pZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZXNldFBhbmVNYXhTaXplKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudCB8fCAhdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBhbmVDb250YWluZXIgPSB0aGlzLnBhbmVDb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUubWF4V2lkdGggPSAnJztcclxuICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLm1heEhlaWdodCA9ICcnO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3c9PT0nYm90dG9tJyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3c9PT0ncmlnaHQnXCI+XHJcbiAgPHNlY3Rpb24gI2NvbnRlbnRDb250YWluZXIgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIiBbY2xhc3Muc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0b109XCJzaG93U2Nyb2xsYmFyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvc2VjdGlvbj5cclxuICA8c2VjdGlvbiAjcGFuZUNvbnRhaW5lciBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cImhpZGVTcGxpdFZpZXdQYW5lXCJcclxuICAgIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1ib3JkZXItY29sb3ItYmFzZS04MFwiXHJcbiAgICBbY2xhc3Muc21lLWJvcmRlci1sZWZ0LXNtXT1cInNob3dTcGxpdHRlckJvcmRlciAmJiBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdyaWdodCdcIlxyXG4gICAgW2NsYXNzLnNtZS1ib3JkZXItdG9wLXNtXT1cInNob3dTcGxpdHRlckJvcmRlciAmJiBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdib3R0b20nXCJcclxuICAgIFtjbGFzcy5zbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvXT1cInNob3dTY3JvbGxiYXJcIj5cclxuICAgIDwhLS0gVE9ETzogaGlkZSByZXNpemVyIG9uIHBob25lIGRvd24gdGVtcG9yYXJpbHksIG5lZWRzIHNwZWNpYWwgZGVzaWduIC0tPlxyXG4gICAgPHNtZS1yZXNpemVyICpuZ0lmPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwic21lLWxheW91dC1oaWRlLXBob25lLWRvd25cIiBbdGFiaW5kZXhdPVwiW2lzRXhwYW5kZWQ/MDpudWxsXVwiXHJcbiAgICAgIFtjbGFzcy5zbWUtZm9jdXMtem9uZV09XCJpc0V4cGFuZGVkXCIgcmVzaXplckhvc3RTZWxlY3Rvcj1cInNtZS1zcGxpdC12aWV3XCJcclxuICAgICAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIiBbb3JpZW50YXRpb25dPVwib3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93XCI+XHJcbiAgICA8L3NtZS1yZXNpemVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhbmVcIj48L25nLWNvbnRhaW5lcj5cclxuICA8L3NlY3Rpb24+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwib3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93PT09J3RvcCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93PT09J2xlZnQnXCI+XHJcbiAgPHNlY3Rpb24gI3BhbmVDb250YWluZXIgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCJoaWRlU3BsaXRWaWV3UGFuZVwiXHJcbiAgICBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYm9yZGVyLWNvbG9yLWJhc2UtODBcIlxyXG4gICAgW2NsYXNzLnNtZS1ib3JkZXItcmlnaHQtc21dPVwic2hvd1NwbGl0dGVyQm9yZGVyICYmIG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2xlZnQnXCJcclxuICAgIFtjbGFzcy5zbWUtYm9yZGVyLWJvdHRvbS1zbV09XCJzaG93U3BsaXR0ZXJCb3JkZXIgJiYgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAndG9wJ1wiXHJcbiAgICBbY2xhc3Muc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0b109XCJzaG93U2Nyb2xsYmFyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFuZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBUT0RPOiBoaWRlIHJlc2l6ZXIgb24gcGhvbmUgZG93biB0ZW1wb3JhcmlseSwgbmVlZHMgc3BlY2lhbCBkZXNpZ24gLS0+XHJcbiAgICA8c21lLXJlc2l6ZXIgKm5nSWY9XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJzbWUtbGF5b3V0LWhpZGUtcGhvbmUtZG93blwiIFt0YWJpbmRleF09XCJbaXNFeHBhbmRlZD8wOm51bGxdXCJcclxuICAgICAgW2NsYXNzLnNtZS1mb2N1cy16b25lXT1cImlzRXhwYW5kZWRcIiByZXNpemVySG9zdFNlbGVjdG9yPVwic21lLXNwbGl0LXZpZXdcIlxyXG4gICAgICAocmVzaXplZCk9XCJvblJlc2l6ZWQoJGV2ZW50KVwiIFtvcmllbnRhdGlvbl09XCJvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3dcIiBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImdldEFyaWFWYWx1ZU5vdygpXCI+XHJcbiAgICA8L3NtZS1yZXNpemVyPlxyXG4gIDwvc2VjdGlvbj5cclxuICA8c2VjdGlvbiAjY29udGVudENvbnRhaW5lciBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiIFtjbGFzcy5zbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvXT1cInNob3dTY3JvbGxiYXJcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9zZWN0aW9uPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCJzbWUtc3BsaXQtdmlldy1jb250ZW50XCI+PC9uZy1jb250ZW50PlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3BhbmU+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic21lLXNwbGl0LXZpZXctcGFuZVwiPjwvbmctY29udGVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSBUaGUgcmVhc29uIHRvIHVzZSBuZy10ZW1wbGF0ZSB0byB3cmFwIHRoZSBuZy1jb250ZW50IGVsZW1lbnQgaW5zdGVhZCBvZiBkaXJlY3RseSB0byB1c2UgbmctY29udGVudCBpbiBib3RoIHR3byBuZy1jb250YWluZXJzIGFib3ZlIGlzOlxyXG5JZiB3ZSB1c2UgbmctY29udGVudCBlbGVtZW50cyBkaXJlY3RseSBpbiBib3RoIDIgbmctY29udGFpbmVycywgdGhlcmUgd2lsbCBiZSAyIG5nLWNvbnRlbnQgZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBzZWxlY3Rvci4gQnV0IEFuZ3VsYXIgd2lsbCBvbmx5XHJcbnJlc29sdmUgdGhlIGZpcnN0IG5nLWNvbnRlbnQgaW4gbXVsdGlwbGUgbmctY29udGVudCBlbGVtZW50cyB3aXRoIHNhbWUgc2VsZWN0b3IgZXZlbiB0aGUgZmlyc3Qgb25lIGlzIGluIGEgbmdJZiBmYWxzZSBibG9jay5cclxuU28gd2hlbiB0aGUgb3JpZW50YXRpb24gaXMgXCJ0b3BcIiBvciBcImxlZnRcIiwgbm8gbmctY29udGVudCBlbGVtZW50IHdpbGwgYmUgcmVzb2x2ZWQgdGhlbiBub3RoaW5nIHdvdWxkIHJlbmRlci5cclxuSW4gb3JkZXIgdG8gc29sdmUgdGhpcyBwcm9ibGVtLCB3ZSBoYXZlIHRvIHVzZSBuZy10ZW1wbGF0ZSB0byB3cmFwIHRoZSBuZy1jb250ZW50IHRvIG1ha2Ugc3VyZSBvbmUgc2VsZWN0b3IgbWFwcyB0byBvbmUgbmctY29udGVudC5cclxuVGhlbiB3ZSB1c2UgbmctY29udGFpbmVyIGFuZCBuZ1RlbXBsYXRlT3V0bGV0IHRvIGNhbGwgdGhlIG5nLXRlbXBsYXRlLlxyXG5UaHggZm9yIHJlYWRpbmcgdGlsbCBoZXJlLi4uLi4uIC0tPlxyXG4iXX0=
|
|
781
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9zcGxpdC12aWV3L3NwbGl0LXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc3BsaXQtdmlldy9zcGxpdC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQTBCLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7O0lDdkI5Ryx3QkFBeUQ7Ozs7O0lBUXpELHNDQUU0RTtJQUExRSx3TUFBVyxlQUFBLHlCQUFpQixDQUFBLElBQUM7SUFDL0IsaUJBQWM7OztJQUZaLG1EQUFtQztJQUQ4QixtRkFBZ0MsbURBQUE7OztJQUluRyx3QkFBc0Q7OztJQWQxRCw2QkFBc0c7SUFDcEcscUNBQWdJO0lBQzlILG9H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T3RCLGFBQWE7a0JBRG5CLEtBQUs7WUFPQyxrQkFBa0I7a0JBRHhCLEtBQUs7WUFRQyxtQ0FBbUM7a0JBRHpDLEtBQUs7WUFhSyxZQUFZO2tCQUR0QixLQUFLO1lBa0JDLG9DQUFvQztrQkFEMUMsS0FBSztZQU9DLGlCQUFpQjtrQkFEdkIsS0FBSztZQU9DLGlCQUFpQjtrQkFEdkIsS0FBSztZQU9LLFdBQVc7a0JBRHJCLEtBQUs7WUFpQkMsa0NBQWtDO2tCQUR4QyxLQUFLO1lBT0MsaUJBQWlCO2tCQUR2QixLQUFLO1lBd0NDLFlBQVk7a0JBRGxCLE1BQU07WUFPQSxXQUFXO2tCQURqQixNQUFNO1lBNkJJLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsT0FBTztZQVNULGFBQWE7a0JBRHZCLFdBQVc7bUJBQUMsc0JBQXNCO1lBbUJ4QixVQUFVO2tCQURwQixLQUFLO1lBd0dDLHlCQUF5QixNQVl4Qix1QkFBdUIsTUF5SnZCLGlCQUFpQixNQW9EakIsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb250ZW50Q2hpbGQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2tpcFNlbGYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgWWllbGQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy95aWVsZC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nLWxldmVsJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dCwgU01FX0xBWU9VVF9QUk9WSURFUiB9IGZyb20gJy4uL2NvbW1vbi9sYXlvdXQnO1xyXG5pbXBvcnQgeyBTcGxpdFZpZXdSZXNpemVyTWFyZ2luLCBTcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlciB9IGZyb20gJy4vc3BsaXQtdmlldy1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgcGFuZSBvcmllbnRhdGlvbiBvZiB0aGUgc3BsaXQgdmlldy5cclxuICovXHJcbmV4cG9ydCB0eXBlIFNwbGl0Vmlld09yaWVudGF0aW9uID0gJ3RvcCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbSc7XHJcblxyXG4vKipcclxuICogVGhlIGNvbXBvbmVudCBkZWZpbml0aW9uIG9mIHRoZSBzcGxpdCB2aWV3IGNvbnRlbnQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLXNwbGl0LXZpZXctY29udGVudCcsXHJcbiAgICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGxpdFZpZXdDb250ZW50Q29tcG9uZW50IHsgfVxyXG5cclxuLyoqXHJcbiAqIFRoZSBjb21wb25lbnQgZGVmaW5pdGlvbiBvZiB0aGUgc3BsaXQgdmlldyBwYW5lLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1zcGxpdC12aWV3LXBhbmUnLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BsaXRWaWV3UGFuZUNvbXBvbmVudCB7IH1cclxuXHJcbi8qKlxyXG4gKiBUaGUgY29tcG9uZW50IGRlZmluaXRpb24gb2YgdGhlIHNwbGl0IHZpZXcuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLXNwbGl0LXZpZXcnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NwbGl0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBTTUVfTEFZT1VUX1BST1ZJREVSLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTcGxpdFZpZXdDb21wb25lbnQpIH1cclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNwbGl0Vmlld0NvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgTGF5b3V0LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ1NwbGl0Vmlld0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWluZXIgZm9yIGFjdGl2ZSBzdWJzY3JpcHRpb25zIHRoYXQgc2hvdWxkIGJlIGNsZWFuZWQgdXAgaW4gdGhlIE9uRGVzdHJveSBjYWxsLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRlZmluZXMgdGhlIGFjdHVhbCBwYW5lIGRpc3RhbmNlIHRoYXQgdGhlIGNvbnRyb2wgdXNlcyBmb3IgcmVuZGVyaW5nLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGludGVybmFsUGFuZURpc3RhbmNlOiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZWZpbmVzIHdoZXRoZXIgdGhlIHBhbmUgZGlzdGFuY2UgdmFsdWUgaXMgc2V0LlxyXG4gICAgICogSXQgd2lsbCBub3Qgc2V0IGl0IHR3aWNlIGlmIHNldCBiZWNhdXNlIG9ubHkgbmVlZCB0byByZW1lbWJlciB0aGUgaW5pdGlhbCB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc1BhbmVEaXN0YW5jZVNldCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgcmVtZW1iZXJzIHRoZSBwYW5lIGRpc3RhbmNlIHRoYXQgaGFzIGJlZW4gc2V0IGluaXRpYWxseS5cclxuICAgICAqIFRoZSBpbnRlbnRpb24gaXMgZm9yIHJlY292ZXJpbmcgdGhlIHZhbHVlIG9uIHdpbmRvdyBzaXplIGNoYW5nZXMgYW5kIGxheW91dCBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRlZmF1bHRQYW5lRGlzdGFuY2U6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRlZmluZXMgd2hldGhlciB0aGUgc3BsaXQgdmlldyBoYXMgYmVlbiBleHBhbmRlZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbElzRXhwYW5kZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgc3BsaXQgdmlldyBjb21wb25lbnQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaXNDb21wb25lbnRJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHdpbmRvdyByZXNwb25zaXZlIG1hbmFnZXIgZm9yIHRoZSBzcGxpdCB2aWV3LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyOiBTcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvcmllbnRhdGlvbiBvZiB0aGUgcGFuZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbE9yaWVudGF0aW9uOiBTcGxpdFZpZXdPcmllbnRhdGlvbiA9ICdib3R0b20nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW1wbGVtZW50cyB0aGUgSUxheW91dCBpbnRlcmZhY2UuIEl0J3MgdHJpZ2dlcmVkIHdoZW4gdGhlIGxheW91dCBpcyBjaGFuZ2VkLlxyXG4gICAgICogSXQncyB1c2VkIHRvIHRlbGwgdGhlIGNoaWxkIGNvbXBvbmVudHMgdG8gY29vcmRpbmF0ZSB3aXRoIHRoZSBsYXlvdXQgY2hhbmdlLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTGF5b3V0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB3aW5kb3dCcmVha3BvaW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZChTcGxpdFZpZXdDb250ZW50Q29tcG9uZW50KVxyXG4gICAgcHVibGljIGNvbnRlbnQ6IFNwbGl0Vmlld0NvbnRlbnRDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcGFuZSBvZiB0aGUgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKFNwbGl0Vmlld1BhbmVDb21wb25lbnQpXHJcbiAgICBwdWJsaWMgcGFuZTogU3BsaXRWaWV3UGFuZUNvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzZWN0aW9uIGh0bWwgZWxlbWVudCB0aGF0IHdyYXBzIHRoZSBzbWUtc3BsaXQtdmlldy1wYW5lXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ3BhbmVDb250YWluZXInKVxyXG4gICAgcHVibGljIHBhbmVDb250YWluZXJFbGVtZW50OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNlY3Rpb24gaHRtbCBlbGVtZW50IHRoYXQgd3JhcHMgdGhlIHNtZS1zcGxpdC12aWV3LWNvbnRhaW5lclxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKCdjb250ZW50Q29udGFpbmVyJylcclxuICAgIHB1YmxpYyBjb250ZW50Q29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRvIHNob3cgdGhlIHNjcm9sbGJhciB3aGVuIGl0J3MgbmVlZGVkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dTY3JvbGxiYXIgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRvIHNob3cgdGhlIGJvcmRlciBmb3IgdGhlIHNwbGl0dGVyLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dTcGxpdHRlckJvcmRlciA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIG1lYW5zIG9uIHNtYWxsZXIgd2luZG93LCB3aWxsIHJlc3BlY3QgdGhlIG9yaWdpbmFsIHBhbmUgdmFsdWVcclxuICAgICAqIEl0IGlzIG5vdCBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBvdGhlciB0aGFuIHRoZSBzaGVsbCBzaWRlIG5hdiBiYXIuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzYWJsZVBhbmVEaXN0YW5jZVJlc3BvbnNpdmVXaW5kb3cgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgcGFuZS5cclxuICAgICAqIEl0IGlzIGEgaGFyZGNvZGVkIHZhbHVlLCBub3QgZnVsbHkgd29ya2luZyBvbiB3aW5kb3cgcmVzcG9uc2l2ZSBkZXNpZ24uXHJcbiAgICAgKiBCeSBkZXNpZ24sIHRoaXMgdmFsdWUgd2lsbCBub3QgYmUgcmVzcGVjdGVkIG9uIHNtYWxsZXIgc2NyZWVuLCBwaG9uZSBkb3duLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBhbmVEaXN0YW5jZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsUGFuZURpc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHBhbmVEaXN0YW5jZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJuYWxQYW5lRGlzdGFuY2UgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxQYW5lRGlzdGFuY2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUGFuZURpc3RhbmNlU2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBhbmVEaXN0YW5jZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUGFuZURpc3RhbmNlU2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgdGhlIHJlc2l6ZSBtYXJnaW4gdG8gZ28gd2luZG93IHJlc3BvbnNpdmUuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzYWJsZWRSZXNpemVNYXJnaW5SZXNwb25zaXZlV2luZG93ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgdGhlIG1pbiB2YWx1ZSBvZiB0aGUgcGFuZSBzaXplLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlc2l6ZUxvd2VyTWFyZ2luID0gMTAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW5kaWNhdGVzIHRoZSBtaW4gdmFsdWUgb2YgdGhlIGNvbnRlbnQgc2l6ZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZXNpemVVcHBlck1hcmdpbiA9IDEwMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRlZmluZXMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBlbGVtZW50IHdoaWNoIGhvbGRzIHRoZSByZXNpemVyIGluIHRoZSByZXNpemluZyBsYXlvdXQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IG9yaWVudGF0aW9uKGlucHV0OiBTcGxpdFZpZXdPcmllbnRhdGlvbikge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxPcmllbnRhdGlvbiA9IGlucHV0O1xyXG4gICAgICAgIGlmICghdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcmV2aW91c09yaWVudGF0aW9uID0gdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5wcmV2aW91c09yaWVudGF0aW9uO1xyXG4gICAgICAgIGlmIChwcmV2aW91c09yaWVudGF0aW9uICE9PSB0aGlzLmludGVybmFsT3JpZW50YXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5wcmV2aW91c09yaWVudGF0aW9uID0gdGhpcy5pbnRlcm5hbE9yaWVudGF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGlzIHRvIHRydWUgdG8gZGlzYWJsZSB0aGUgb3JpZW50YXRpb24gY2hhbmdlIG9uIHdpbmRvdyBzaXplIGNoYW5nZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkaXNhYmxlT3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIaWRlcyB0aGUgc3BsaXQgdmlldyBwYW5lXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGlkZVNwbGl0Vmlld1BhbmUgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3Igb3JpZW50YXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBvcmllbnRhdGlvbigpOiBTcGxpdFZpZXdPcmllbnRhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxPcmllbnRhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbWVtYmVyIHRoZSBwcmV2aW91cyB3aW5kb3cgcmVzcG9uc2l2ZSB2YWx1ZSBmb3Igb3JpZW50YXRpb24gZm9yIHRoZSBvbiBvcmllbnRhdGlvbiBjaGFuZ2VkIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHByZXZpb3VzT3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID0gJ2JvdHRvbSc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXR0ZXIgZm9yIHRoZSB3aW5kb3cgcmVzcG9uc2l2ZSB2YWx1ZSBmb3IgdGhlIG9yaWVudGF0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93KCkge1xyXG4gICAgICAgIC8vIElmIG9wdC1vdXQsIHNob3VsZCB1c2UgdGhlIG9yaWdpbmFsIG9yaWVudGF0aW9uXHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZU9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1ciA9IHRoaXMuc3BsaXRWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIub3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIGlmIChjdXIgIT09IHRoaXMucHJldmlvdXNPcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25PcmllbnRhdGlvbkNoYW5nZWQoY3VyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNPcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPSBjdXI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwbGl0Vmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLm9yaWVudGF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBldmVudCBmaXJlZCB3aGVuIHRoZSBwYW5lJ3MgZXhwYW5kZWQgc3RhdGUgaXMgYmVpbmcgdG9nZ2xlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcGFuZVRvZ2dsaW5nOiBFdmVudEVtaXR0ZXI8eyBpc0V4cGFuZGVkOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlzRXhwYW5kZWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBldmVudCBmaXJlZCB3aGVuIHRoZSBwYW5lJ3MgZXhwYW5kZWQgc3RhdGUgaGFzIGJlZW4gdG9nZ2xlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcGFuZVRvZ2dsZWQ6IEV2ZW50RW1pdHRlcjx7IGlzRXhwYW5kZWQ6IGJvb2xlYW4gfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaXNFeHBhbmRlZDogYm9vbGVhbiB9PigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmZXJlbmNlOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgbGF5b3V0OiBMYXlvdXQpIHtcclxuXHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG5cclxuICAgICAgICBpZiAobGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BsaXRWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgPSBuZXcgU3BsaXRWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIobGF5b3V0KTtcclxuICAgICAgICAgICAgLy8gb24gcGFyZW50IGxheW91dCBjaGFuZ2VzLCByZS1lbWl0IHRoZSBsYXlvdXQgY2hhbmdlIHRvIG91ciBldmVudFxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChsYXlvdXQubGF5b3V0Q2hhbmdlZC5zdWJzY3JpYmUoKCgpID0+IHRoaXMub25QYXJlbnRMYXlvdXRDaGFuZ2VkKCkpKSk7XHJcbiAgICAgICAgICAgIC8vIG9uIHdpbmRvdyBicmVhayBwb2ludCBjaGFuZ2VzLCBlbWl0IHRoZSBldmVudCBhYm91dCBjcml0aWNhbCBjbGFzc2VzIGFuZCBzdHlsaW5nIHVwZGF0ZXMgc2lnbmFsLlxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChsYXlvdXQud2luZG93QnJlYWtwb2ludENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25XaW5kb3dCcmVha3BvaW50Q2hhbmdlZCgpKSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRlZmVycmVkT25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgQ1NTIGNsYXNzZXMgb2YgdGhlIGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBUT0RPOiBzZXR0aW5nIHRoZSBjbGFzcyB0aGlzIHdheSBwcmV2ZW50IGFueSBjdXN0b20gY2xhc3MgZnJvbSBiZWluZyBhcHBsaWVkLlxyXG4gICAgICogQ2hhbmdlIHRvIHNldHRpbmcgY2xhc3MgaW4gdGhlIGNvbnN0cnVjdG9yIHVzaW5nIFJlbmRlcmVyMiBhbmQgRWxlbWVudFJlZlxyXG4gICAgICpcclxuICAgICAqIE9uIHBob25lIGRvd24sIHRoZSBsYXlvdXQgZm9yIHNwbGl0IHZpZXcgY2FuIG9ubHkgYmUgdG9wIGFuZCBib3R0b20sIGluIHRoaXMgY2FzZSwgd2Ugd2lsbCBhbGxvdyB5IHNjcm9sbC5cclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgICBwdWJsaWMgZ2V0IGhvc3RDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnc21lLWxheW91dC1hYnNvbHV0ZSBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZmxleCBkaXJlY3Rpb24gb2YgdGhlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5mbGV4LWRpcmVjdGlvbicpXHJcbiAgICBwdWJsaWMgZ2V0IGZsZXhEaXJlY3Rpb24oKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMub3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdyb3cnO1xyXG4gICAgICAgICAgICBjYXNlICd0b3AnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb2x1bW4nO1xyXG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jvdyc7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbHVtbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBwYW5lIGhhcyBiZWVuIGV4cGFuZGVkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsSXNFeHBhbmRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcGFuZSBoYXMgYmVlbiBleHBhbmRlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBpc0V4cGFuZGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLmludGVybmFsSXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmludGVybmFsSXNFeHBhbmRlZCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMucGFuZVRvZ2dsaW5nLmVtaXQoe1xyXG4gICAgICAgICAgICBpc0V4cGFuZGVkOiB0aGlzLmludGVybmFsSXNFeHBhbmRlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFVJKCk7XHJcbiAgICAgICAgdGhpcy5wYW5lVG9nZ2xlZC5lbWl0KHtcclxuICAgICAgICAgICAgaXNFeHBhbmRlZDogdGhpcy5pbnRlcm5hbElzRXhwYW5kZWRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBBbmd1bGFyIG5nT25Jbml0IGZ1bmN0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0NvbXBvbmVudEluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hVSSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEFuZ3VsYXIgbmdPbkRlc3Ryb3kgZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViPy51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIGFmdGVyIGNvbnRlbnQgaXMgaW5pdGlhbGl6ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGVudCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nKHtcclxuICAgICAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbC5FcnJvcixcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgdmFsdWUgb2YgJ2NvbnRlbnQnIGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZC5gLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5jb250ZW50XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc291cmNlOiAnU3BsaXRWaWV3Q29tcG9uZW50Lm5nQWZ0ZXJDb250ZW50SW5pdCdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wYW5lID09IG51bGwpIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2coe1xyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSB2YWx1ZSBvZiAncGFuZScgaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLmAsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBwYW5lOiB0aGlzLnBhbmVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzb3VyY2U6ICdTcGxpdFZpZXdDb21wb25lbnQubmdBZnRlckNvbnRlbnRJbml0J1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1BhbmVEaXN0YW5jZVNldCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0UGFuZU1heFNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3aW5kb3cgcmVzcG9uc2l2ZSB2YWx1ZSBmb3IgdGhlIHBhbmUgZGlzdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQYW5lRGlzdGFuY2VSZXNwb25zaXZlV2luZG93KCk6IG51bWJlciB7XHJcbiAgICAgICAgLy8gSWYgb3B0LW91dCwgc2hvdWxkIHVzZSB0aGUgb3JpZ2luYWwgcGFuZSBkaXN0YW5jZS5cclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlUGFuZURpc3RhbmNlUmVzcG9uc2l2ZVdpbmRvdyB8fCAhdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lRGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5wYW5lRGlzdGFuY2UodGhpcy5wYW5lRGlzdGFuY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgd2luZG93IHJlc3BvbnNpdmUgdmFsdWUgZm9yIHRoZSByZXNpemVyIG1hcmdpbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNwbGl0Vmlld1Jlc2l6ZXJNYXJnaW5SZXNwb25zaXZlV2luZG93KCk6IFNwbGl0Vmlld1Jlc2l6ZXJNYXJnaW4ge1xyXG4gICAgICAgIC8vIElmIG9wdC1vdXQsIHNob3VsZCB1c2UgdGhlIG9yaWdpbmFsIG1hcmdpbiBzaXplLlxyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkUmVzaXplTWFyZ2luUmVzcG9uc2l2ZVdpbmRvdyB8fCAhdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlcikge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbG93ZXI6IHRoaXMucmVzaXplTG93ZXJNYXJnaW4sXHJcbiAgICAgICAgICAgICAgICB1cHBlcjogdGhpcy5yZXNpemVVcHBlck1hcmdpblxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3BsaXRWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIuc3BsaXRWaWV3UmVzaXplck1hcmdpbihcclxuICAgICAgICAgICAgdGhpcy5yZXNpemVMb3dlck1hcmdpbiwgdGhpcy5yZXNpemVVcHBlck1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb24gd2luZG93IGJyZWFrcG9pbnQgY2hhbmdlZCBoYW5kbGVyLlxyXG4gICAgICogQWRkaW5nIHlpZWxkIGZvciBjb21wb25lbnQgdG8gZ2V0IEVsZW1lbnRSZWYgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwdWJsaWMgb25XaW5kb3dCcmVha3BvaW50Q2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udGVudENvbnRhaW5lckVsZW1lbnQgfHwgIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zcGxpdFZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5vbldpbmRvd1NpemVDaGFuZ2VkKHRoaXMuY29udGVudENvbnRhaW5lckVsZW1lbnQsIHRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlZmVycmVkIGxheW91dCBjaGFuZ2VkIGhhbmRsZXIuXHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgpXHJcbiAgICBwcml2YXRlIGRlZmVycmVkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMub25QYXJlbnRMYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBjaGFuZ2UgZXZlbnQgY29taW5nIGZyb20gcGFyZW50IGNvbnRyb2wgZnJvbSB0aGUgbGF5b3V0IGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvblBhcmVudExheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29tcG9uZW50SW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNQYW5lRGlzdGFuY2VTZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldFBhbmVNYXhTaXplKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXNpemVNYXJnaW46IFNwbGl0Vmlld1Jlc2l6ZXJNYXJnaW4gPSB0aGlzLmdldFNwbGl0Vmlld1Jlc2l6ZXJNYXJnaW5SZXNwb25zaXZlV2luZG93KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9IHRoaXMub3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93O1xyXG4gICAgICAgICAgICBjb25zdCBwYW5lQ29udGFpbmVyID0gdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc2l6ZU1hcmdpbi5sb3dlciA9PT0gdW5kZWZpbmVkICYmIHJlc2l6ZU1hcmdpbi51cHBlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnYm90dG9tJyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICd0b3AnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdsZWZ0JyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdyaWdodCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLndpZHRoID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2JvdHRvbScgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAndG9wJylcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lRGlzdGFuY2UgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZURpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmZXJlbmNlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gcmVzaXplTWFyZ2luLnVwcGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lRGlzdGFuY2UgPSBNYXRoLm1heCh0aGlzLnBhbmVEaXN0YW5jZSwgcmVzaXplTWFyZ2luLmxvd2VyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy5pc0V4cGFuZGVkICYmIHRoaXMucGFuZURpc3RhbmNlID8gKHRoaXMucGFuZURpc3RhbmNlICsgJ3B4JykgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2xlZnQnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3JpZ2h0JylcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSA9IE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lRGlzdGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIHJlc2l6ZU1hcmdpbi51cHBlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZURpc3RhbmNlID0gTWF0aC5tYXgodGhpcy5wYW5lRGlzdGFuY2UsIHJlc2l6ZU1hcmdpbi5sb3dlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLndpZHRoID0gdGhpcy5pc0V4cGFuZGVkICYmIHRoaXMucGFuZURpc3RhbmNlID8gKHRoaXMucGFuZURpc3RhbmNlICsgJ3B4JykgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhbmVNYXhTaXplKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGF5b3V0Q2hhbmdlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUb2dnbGVzIHRoZSBleHBhbmRlZCBzdGF0ZSBvZiB0aGUgcGFuZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZVBhbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYWZ0ZXIgdGhlIGNvbnRyb2wgZ2V0cyBzaWduYWwgZm9yIGNvbmZpcm1hdGlvbiBmb3IgcmVzaXplLlxyXG4gICAgICogQHBhcmFtICRldmVudCB0aGUgZXZlbnQgZm9yIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblJlc2l6ZWQoJGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZXNldFBhbmVNYXhTaXplKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc2l6ZU1hcmdpbjogU3BsaXRWaWV3UmVzaXplck1hcmdpbiA9IHRoaXMuZ2V0U3BsaXRWaWV3UmVzaXplck1hcmdpblJlc3BvbnNpdmVXaW5kb3coKTtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPSB0aGlzLm9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdztcclxuICAgICAgICBjb25zdCBwYW5lQ29udGFpbmVyID0gdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICB0aGlzLmlzUGFuZURpc3RhbmNlU2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHJlc2l6ZU1hcmdpbi5sb3dlciA9PT0gdW5kZWZpbmVkICYmIHJlc2l6ZU1hcmdpbi51cHBlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdib3R0b20nIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3RvcCcpIHtcclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2xlZnQnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnYm90dG9tJyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICd0b3AnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNpemVkSGVpZ2h0ID0gb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnYm90dG9tJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSAkZXZlbnQueSA6XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyAkZXZlbnQueTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSA9IE1hdGgubWF4KHJlc2l6ZWRIZWlnaHQsIHJlc2l6ZU1hcmdpbi5sb3dlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSAgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgLSByZXNpemVNYXJnaW4udXBwZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy5wYW5lRGlzdGFuY2UgPyB0aGlzLnBhbmVEaXN0YW5jZSArICdweCcgOiAnJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdsZWZ0JyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdyaWdodCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRXaWR0aCA9IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3JpZ2h0JyA/XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5vZmZzZXRXaWR0aCAtICRldmVudC54IDpcclxuICAgICAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLm9mZnNldFdpZHRoICsgJGV2ZW50Lng7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lRGlzdGFuY2UgPSBNYXRoLm1heChyZXNpemVkV2lkdGgsIHJlc2l6ZU1hcmdpbi5sb3dlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSA9IE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZURpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gcmVzaXplTWFyZ2luLnVwcGVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLndpZHRoID0gdGhpcy5wYW5lRGlzdGFuY2UgPyB0aGlzLnBhbmVEaXN0YW5jZSArICdweCcgOiAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHZhbHVlIGZvciB0aGUgcGFuZSdzIGRpc3RhbmNlIGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzLlxyXG4gICAgICogQHJldHVybnMgbnVtYmVyIHRoYXQgaW5kaWNhdGVzIHRoZSBwYW5lJ3MgcmVuZGVyaW5nIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QXJpYVZhbHVlTm93KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5wYW5lRGlzdGFuY2UgPyBNYXRoLnJvdW5kKHRoaXMucGFuZURpc3RhbmNlKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBvcmllbnRhdGlvbiBjaGFuZ2VkIGV2ZW50cy4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgb24gbGF5b3V0IGNoYW5nZSBiZWhhdmlvciBzdWNoIGFzIHJlc2l6aW5nIHRoZSB3aW5kb3cuXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgd2l0aCBjb21wb25lbnQgaW5pdGlhbGl6ZWQuXHJcbiAgICAgKiBAcGFyYW0gY3VyIHRoZSBjdXJyZW50IGxheW91dCwgY291bGQgYmUgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0LlxyXG4gICAgICogQHJldHVybnMgdm9pZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbk9yaWVudGF0aW9uQ2hhbmdlZChjdXI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIC8vIElnbm9yZSBpZiB0aGUgY29udGFpbmVyIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29tcG9uZW50SW5pdGlhbGl6ZWQgfHwgIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQgfHwgIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBhbmVDb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChjdXIgPT09ICd0b3AnIHx8IGN1ciA9PT0gJ2JvdHRvbScgKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IHRoaXMuZ2V0UGFuZURpc3RhbmNlUmVzcG9uc2l2ZVdpbmRvdygpICsgJ3B4JztcclxuICAgICAgICAgICAgdGhpcy5wYW5lRGlzdGFuY2UgPSB0aGlzLmRlZmF1bHRQYW5lRGlzdGFuY2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjdXIgPT09ICdsZWZ0JyB8fCBjdXIgPT09ICdyaWdodCcpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gdGhpcy5nZXRQYW5lRGlzdGFuY2VSZXNwb25zaXZlV2luZG93KCkgKyAncHgnO1xyXG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kZWZlcnJlZFJlZnJlc2hVSSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaGFzIHRvIGJlIGEgZGVib3VuY2UgdmFsdWUgaW4gYmV0d2VlbiAwIC0gMjUwIHRvIHdhaXQgZm9yIGNoaWxkcmVuIGNvbXBvbmVudC5cclxuICAgICAqIElkZWFsbHkgc2hvdWxkIGJlIHByb21pc2UgaW1wbGVtZW50ZWQuXHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgxMClcclxuICAgIHByaXZhdGUgZGVmZXJyZWRSZWZyZXNoVUkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoVUkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBmdW5jdGlvbiB0byByZWZyZXNoIHRoZSBzcGxpdCB2aWV3IGZyb20gVUkuXHJcbiAgICAgKiBAcmV0dXJucyB2b2lkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVmcmVzaFVJKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0NvbXBvbmVudEluaXRpYWxpemVkIHx8ICF0aGlzLnBhbmVDb250YWluZXJFbGVtZW50IHx8ICF0aGlzLnBhbmVDb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFuZURpc3RhbmNlUmVzcG9uc2l2ZVdpbmRvdyA9IHRoaXMuZ2V0UGFuZURpc3RhbmNlUmVzcG9uc2l2ZVdpbmRvdygpO1xyXG4gICAgICAgIGNvbnN0IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9IHRoaXMub3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93O1xyXG4gICAgICAgIGNvbnN0IHBhbmVDb250YWluZXIgPSB0aGlzLnBhbmVDb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmludGVybmFsSXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYW5lRGlzdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwYW5lRGlzdGFuY2UgPSB0aGlzLnBhbmVEaXN0YW5jZSA+IHBhbmVEaXN0YW5jZVJlc3BvbnNpdmVXaW5kb3dcclxuICAgICAgICAgICAgICAgICAgICA/IHBhbmVEaXN0YW5jZVJlc3BvbnNpdmVXaW5kb3cgOiB0aGlzLnBhbmVEaXN0YW5jZTtcclxuICAgICAgICAgICAgICAgIC8vIE9uIHBob25lLWRvd24sIGdldCByaWQgb2YgdGhlIHNjcm9sbGJhciB2ZXJ0aWNhbGx5LlxyXG4gICAgICAgICAgICAgICAgaWYgKHBhbmVEaXN0YW5jZVJlc3BvbnNpdmVXaW5kb3cgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhbmVEaXN0YW5jZSA9IHBhbmVEaXN0YW5jZVJlc3BvbnNpdmVXaW5kb3c7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3RvcCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnYm90dG9tJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gcGFuZURpc3RhbmNlID8gcGFuZURpc3RhbmNlICsgJ3B4JyA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2xlZnQnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUud2lkdGggPSBwYW5lRGlzdGFuY2UgPyBwYW5lRGlzdGFuY2UgKyAncHgnIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICd0b3AnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2JvdHRvbScpIHtcclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnbGVmdCcgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLndpZHRoID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SW50ZXJuYWxQYW5lRGlzdGFuY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHBhbmUgZGlzdGFuY2UgdGhhdCB3b3VsZCBiZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIHBhbmUuXHJcbiAgICAgKiBwYW5lJ3MgaGVpZ2h0IG9uIHRvcCwgYm90dG9tIGxheW91dC5cclxuICAgICAqIHBhbmUncyB3aWR0aCBvbiBsZWZ0LCByaWdodCBsYXlvdXQuXHJcbiAgICAgKiBAcmV0dXJucyB2b2lkO1xyXG4gICAgICovXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHJpdmF0ZSBzZXRJbnRlcm5hbFBhbmVEaXN0YW5jZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQgfHwgIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxJc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9IHRoaXMub3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93O1xyXG4gICAgICAgIGNvbnN0IHBhbmVDb250YWluZXIgPSB0aGlzLnBhbmVDb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICd0b3AnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2JvdHRvbScpIHtcclxuICAgICAgICAgICAgdGhpcy5wYW5lRGlzdGFuY2UgPSBwYW5lQ29udGFpbmVyLm9mZnNldEhlaWdodDtcclxuICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2xlZnQnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAgICAgICB0aGlzLnBhbmVEaXN0YW5jZSA9IHBhbmVDb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbWF4IHZhbHVlIHRoYXQgdGhlIHBhbmUgY2FuIGdyb3cuXHJcbiAgICAgKiBTZXRzIHBhbmUncyBoZWlnaHQgdmFsdWUgb24gdG9wLCBib3R0b20gbGF5b3V0LlxyXG4gICAgICogU2V0cyBwYW5lJ3Mgd2lkdGggdmFsdWUgb24gbGVmdCwgcmlnaHQgbGF5b3V0LlxyXG4gICAgICogQHJldHVybnMgdm9pZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRQYW5lTWF4U2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQgfHwgIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXNpemVNYXJnaW46IFNwbGl0Vmlld1Jlc2l6ZXJNYXJnaW4gPSB0aGlzLmdldFNwbGl0Vmlld1Jlc2l6ZXJNYXJnaW5SZXNwb25zaXZlV2luZG93KCk7XHJcbiAgICAgICAgY29uc3Qgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID0gdGhpcy5vcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3c7XHJcbiAgICAgICAgY29uc3QgcGFuZUNvbnRhaW5lciA9IHRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKHJlc2l6ZU1hcmdpbi5sb3dlciA9PT0gdW5kZWZpbmVkICYmIHJlc2l6ZU1hcmdpbi51cHBlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdib3R0b20nIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3RvcCcpIHtcclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUubWluSGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLm1heEhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdsZWZ0JyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdyaWdodCcpIHtcclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUubWluV2lkdGggPSAnJztcclxuICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAndG9wJyB8fCBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdib3R0b20nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWRSZXNpemVNYXJnaW5SZXNwb25zaXZlV2luZG93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5taW5IZWlnaHQgPSByZXNpemVNYXJnaW4ubG93ZXIgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhbmVDb250YWluZXIuc3R5bGUubWF4SGVpZ2h0ID0gKHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAtIHJlc2l6ZU1hcmdpbi51cHBlcikgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ2xlZnQnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5taW5XaWR0aCA9ICByZXNpemVNYXJnaW4ubG93ZXIgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCA9ICh0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIHJlc2l6ZU1hcmdpbi51cHBlcikgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBtYXggdmFsdWUgdGhhdCB0aGUgcGFuZSBjYW4gZ3Jvdy5cclxuICAgICAqIEByZXR1cm5zIHZvaWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVzZXRQYW5lTWF4U2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQgfHwgIXRoaXMucGFuZUNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYW5lQ29udGFpbmVyID0gdGhpcy5wYW5lQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICBwYW5lQ29udGFpbmVyLnN0eWxlLm1heFdpZHRoID0gJyc7XHJcbiAgICAgICAgcGFuZUNvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQgPSAnJztcclxuICAgIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwib3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93PT09J2JvdHRvbScgfHwgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93PT09J3JpZ2h0J1wiPlxyXG4gIDxzZWN0aW9uICNjb250ZW50Q29udGFpbmVyIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1hdXRvXCIgW2NsYXNzLnNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG9dPVwic2hvd1Njcm9sbGJhclwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cclxuICA8L3NlY3Rpb24+XHJcbiAgPHNlY3Rpb24gI3BhbmVDb250YWluZXIgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCJoaWRlU3BsaXRWaWV3UGFuZVwiXHJcbiAgICBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYm9yZGVyLWNvbG9yLWJhc2UtODBcIlxyXG4gICAgW2NsYXNzLnNtZS1ib3JkZXItbGVmdC1zbV09XCJzaG93U3BsaXR0ZXJCb3JkZXIgJiYgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAncmlnaHQnXCJcclxuICAgIFtjbGFzcy5zbWUtYm9yZGVyLXRvcC1zbV09XCJzaG93U3BsaXR0ZXJCb3JkZXIgJiYgb3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93ID09PSAnYm90dG9tJ1wiXHJcbiAgICBbY2xhc3Muc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0b109XCJzaG93U2Nyb2xsYmFyXCI+XHJcbiAgICA8IS0tIFRPRE86IGhpZGUgcmVzaXplciBvbiBwaG9uZSBkb3duIHRlbXBvcmFyaWx5LCBuZWVkcyBzcGVjaWFsIGRlc2lnbiAtLT5cclxuICAgIDxzbWUtcmVzaXplciAqbmdJZj1cImlzRXhwYW5kZWRcIiBjbGFzcz1cInNtZS1sYXlvdXQtaGlkZS1waG9uZS1kb3duXCIgW3RhYmluZGV4XT1cIltpc0V4cGFuZGVkPzA6bnVsbF1cIlxyXG4gICAgICBbY2xhc3Muc21lLWZvY3VzLXpvbmVdPVwiaXNFeHBhbmRlZFwiIHJlc2l6ZXJIb3N0U2VsZWN0b3I9XCJzbWUtc3BsaXQtdmlld1wiXHJcbiAgICAgIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCIgW29yaWVudGF0aW9uXT1cIm9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvd1wiPlxyXG4gICAgPC9zbWUtcmVzaXplcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYW5lXCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9zZWN0aW9uPlxyXG48L25nLWNvbnRhaW5lcj5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdz09PSd0b3AnIHx8IG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdz09PSdsZWZ0J1wiPlxyXG4gIDxzZWN0aW9uICNwYW5lQ29udGFpbmVyIFtjbGFzcy5zbWUtbGF5b3V0LW5vbmVdPVwiaGlkZVNwbGl0Vmlld1BhbmVcIlxyXG4gICAgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWJvcmRlci1jb2xvci1iYXNlLTgwXCJcclxuICAgIFtjbGFzcy5zbWUtYm9yZGVyLXJpZ2h0LXNtXT1cInNob3dTcGxpdHRlckJvcmRlciAmJiBvcmllbnRhdGlvblJlc3BvbnNpdmVXaW5kb3cgPT09ICdsZWZ0J1wiXHJcbiAgICBbY2xhc3Muc21lLWJvcmRlci1ib3R0b20tc21dPVwic2hvd1NwbGl0dGVyQm9yZGVyICYmIG9yaWVudGF0aW9uUmVzcG9uc2l2ZVdpbmRvdyA9PT0gJ3RvcCdcIlxyXG4gICAgW2NsYXNzLnNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG9dPVwic2hvd1Njcm9sbGJhclwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhbmVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gVE9ETzogaGlkZSByZXNpemVyIG9uIHBob25lIGRvd24gdGVtcG9yYXJpbHksIG5lZWRzIHNwZWNpYWwgZGVzaWduIC0tPlxyXG4gICAgPHNtZS1yZXNpemVyICpuZ0lmPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwic21lLWxheW91dC1oaWRlLXBob25lLWRvd25cIiBbdGFiaW5kZXhdPVwiW2lzRXhwYW5kZWQ/MDpudWxsXVwiXHJcbiAgICAgIFtjbGFzcy5zbWUtZm9jdXMtem9uZV09XCJpc0V4cGFuZGVkXCIgcmVzaXplckhvc3RTZWxlY3Rvcj1cInNtZS1zcGxpdC12aWV3XCJcclxuICAgICAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIiBbb3JpZW50YXRpb25dPVwib3JpZW50YXRpb25SZXNwb25zaXZlV2luZG93XCIgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJnZXRBcmlhVmFsdWVOb3coKVwiPlxyXG4gICAgPC9zbWUtcmVzaXplcj5cclxuICA8L3NlY3Rpb24+XHJcbiAgPHNlY3Rpb24gI2NvbnRlbnRDb250YWluZXIgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIiBbY2xhc3Muc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0b109XCJzaG93U2Nyb2xsYmFyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvc2VjdGlvbj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic21lLXNwbGl0LXZpZXctY29udGVudFwiPjwvbmctY29udGVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNwYW5lPlxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1zcGxpdC12aWV3LXBhbmVcIj48L25nLWNvbnRlbnQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gVGhlIHJlYXNvbiB0byB1c2UgbmctdGVtcGxhdGUgdG8gd3JhcCB0aGUgbmctY29udGVudCBlbGVtZW50IGluc3RlYWQgb2YgZGlyZWN0bHkgdG8gdXNlIG5nLWNvbnRlbnQgaW4gYm90aCB0d28gbmctY29udGFpbmVycyBhYm92ZSBpczpcclxuSWYgd2UgdXNlIG5nLWNvbnRlbnQgZWxlbWVudHMgZGlyZWN0bHkgaW4gYm90aCAyIG5nLWNvbnRhaW5lcnMsIHRoZXJlIHdpbGwgYmUgMiBuZy1jb250ZW50IGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgc2VsZWN0b3IuIEJ1dCBBbmd1bGFyIHdpbGwgb25seVxyXG5yZXNvbHZlIHRoZSBmaXJzdCBuZy1jb250ZW50IGluIG11bHRpcGxlIG5nLWNvbnRlbnQgZWxlbWVudHMgd2l0aCBzYW1lIHNlbGVjdG9yIGV2ZW4gdGhlIGZpcnN0IG9uZSBpcyBpbiBhIG5nSWYgZmFsc2UgYmxvY2suXHJcblNvIHdoZW4gdGhlIG9yaWVudGF0aW9uIGlzIFwidG9wXCIgb3IgXCJsZWZ0XCIsIG5vIG5nLWNvbnRlbnQgZWxlbWVudCB3aWxsIGJlIHJlc29sdmVkIHRoZW4gbm90aGluZyB3b3VsZCByZW5kZXIuXHJcbkluIG9yZGVyIHRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgd2UgaGF2ZSB0byB1c2UgbmctdGVtcGxhdGUgdG8gd3JhcCB0aGUgbmctY29udGVudCB0byBtYWtlIHN1cmUgb25lIHNlbGVjdG9yIG1hcHMgdG8gb25lIG5nLWNvbnRlbnQuXHJcblRoZW4gd2UgdXNlIG5nLWNvbnRhaW5lciBhbmQgbmdUZW1wbGF0ZU91dGxldCB0byBjYWxsIHRoZSBuZy10ZW1wbGF0ZS5cclxuVGh4IGZvciByZWFkaW5nIHRpbGwgaGVyZS4uLi4uLiAtLT5cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLXN0ZXAtc25hcC1pbi1vdXRwdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy93aXphcmQvbW9kZWxzL3dpemFyZC1zdGVwLXNuYXAtaW4tb3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTbmFwSW5PdXRwdXQgfSBmcm9tICcuLi8uLi8uLi9kYXRhL2V4dGVuc2lvbi1icm9rZXIvc25hcC1pbi1saXN0ZW5lcic7XHJcblxyXG4vKipcclxuICogVGhlIG1vZGVsIHJlcHJlc2VudGF0aW9uIHNuYXAtaW4gb3V0cHV0IHRoYXQgaXMgc3BlY2lmaWMgdG8gYSB3aXphcmQgc3RlcC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgV2l6YXJkU3RlcFNuYXBJbk91dHB1dCBleHRlbmRzIFNuYXBJbk91dHB1dCB7XHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBzdGVwIGlzIHZhbGlkLCBlbmFibGluZyB0aGUgbmV4dCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIGlzVmFsaWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgc3RlcCBpcyBjdXJyZW50bHkgcnVubmluZyBhbiBpbXBvcnRhbnQgcHJvY2Vzcy5cclxuICAgICAqL1xyXG4gICAgaXNCdXN5OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogIEN1c3RvbSBtZXNzYWdlIHdoZW4gaXQncyBidXN5LlxyXG4gICAgICovXHJcbiAgICBidXN5TWVzc2FnZT86IHN0cmluZztcclxufVxyXG4iXX0=
|
|
@@ -178,7 +178,7 @@ export class WizardNavigationButtonComponent extends CoreBaseComponent {
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
/** @nocollapse */ WizardNavigationButtonComponent.ɵfac = function WizardNavigationButtonComponent_Factory(t) { return new (t || WizardNavigationButtonComponent)(i0.ɵɵdirectiveInject(i0.Injector)); };
|
|
181
|
-
/** @nocollapse */ WizardNavigationButtonComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: WizardNavigationButtonComponent, selectors: [["sme-wizard-navigation-button"]], inputs: { showIcons: "showIcons", leftIcon: "leftIcon", rightIcon: "rightIcon", buttonAutoWidth: "buttonAutoWidth", buttons: "buttons" }, outputs: { startButtonClicked: "startButtonClicked", endButtonClicked: "endButtonClicked" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 16, consts: [[1, "sme-arrange-stack-h", "sme-position-stretch-h"], [1, "sme-padding-right-xs"], ["type", "button", "aria-live", "polite", "
|
|
181
|
+
/** @nocollapse */ WizardNavigationButtonComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: WizardNavigationButtonComponent, selectors: [["sme-wizard-navigation-button"]], inputs: { showIcons: "showIcons", leftIcon: "leftIcon", rightIcon: "rightIcon", buttonAutoWidth: "buttonAutoWidth", buttons: "buttons" }, outputs: { startButtonClicked: "startButtonClicked", endButtonClicked: "endButtonClicked" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 16, consts: [[1, "sme-arrange-stack-h", "sme-position-stretch-h"], [1, "sme-padding-right-xs"], ["type", "button", "aria-live", "polite", "tabindex", "0", 1, "sme-arrange-stack-h", 3, "disabled", "click"], ["class", "sme-icon", 3, "class", 4, "ngIf"], [1, "sme-position-flex-auto", "sme-position-flex-grow-start", "sme-arrange-ellipsis", "sme-action-button-text-span"], [1, "sme-icon"]], template: function WizardNavigationButtonComponent_Template(rf, ctx) { if (rf & 1) {
|
|
182
182
|
i0.ɵɵelementStart(0, "div", 0)(1, "span", 1)(2, "button", 2);
|
|
183
183
|
i0.ɵɵlistener("click", function WizardNavigationButtonComponent_Template_button_click_2_listener() { return ctx.onStartButtonClick(); });
|
|
184
184
|
i0.ɵɵtemplate(3, WizardNavigationButtonComponent_span_3_Template, 1, 2, "span", 3);
|
|
@@ -213,7 +213,7 @@ export class WizardNavigationButtonComponent extends CoreBaseComponent {
|
|
|
213
213
|
} }, dependencies: [i1.NgIf], encapsulation: 2 });
|
|
214
214
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WizardNavigationButtonComponent, [{
|
|
215
215
|
type: Component,
|
|
216
|
-
args: [{ selector: 'sme-wizard-navigation-button', template: "<div class=\"sme-arrange-stack-h sme-position-stretch-h\" [class.sme-layout-hidden]=\"!render\">\r\n <span class=\"sme-padding-right-xs\">\r\n <button type=\"button\" aria-live=\"polite\" class=\"sme-arrange-stack-h\"
|
|
216
|
+
args: [{ selector: 'sme-wizard-navigation-button', template: "<div class=\"sme-arrange-stack-h sme-position-stretch-h\" [class.sme-layout-hidden]=\"!render\">\r\n <span class=\"sme-padding-right-xs\">\r\n <button type=\"button\" aria-live=\"polite\" class=\"sme-arrange-stack-h\" tabindex=\"0\"\r\n [class]=\"buttons[currentStartButtonIndex]?.class\"\r\n [class.sme-button-auto-width]=\"buttonAutoWidth\"\r\n [disabled]=\"checkStartDisabled(currentStartButtonIndex)\"\r\n (click)=\"onStartButtonClick()\">\r\n <span *ngIf=\"showIcons\" class=\"sme-icon\" [class]=\"leftIcon\"></span>\r\n <span class=\"sme-position-flex-auto sme-position-flex-grow-start sme-arrange-ellipsis sme-action-button-text-span\">\r\n {{ buttons[currentStartButtonIndex] ? buttons[currentStartButtonIndex].label : strings.MsftSmeShell.Angular.Wizard.Lite.Actions.previous }}</span>\r\n </button>\r\n </span>\r\n <button type=\"button\" aria-live=\"polite\" class=\"sme-arrange-stack-h\" tabindex=\"0\"\r\n [class]=\"buttons[currentStartButtonIndex]?.class\"\r\n [class.sme-button-auto-width]=\"buttonAutoWidth\"\r\n [disabled]=\"checkEndDisabled(currentStartButtonIndex)\"\r\n (click)=\"onEndButtonClick()\">\r\n <span class=\"sme-position-flex-auto sme-position-flex-grow-start sme-arrange-ellipsis sme-action-button-text-span\">\r\n {{ buttons[currentStartButtonIndex + 2] ? buttons[currentStartButtonIndex + 2].label : strings.MsftSmeShell.Angular.Wizard.Lite.Actions.next }}</span>\r\n <span *ngIf=\"showIcons\" class=\"sme-icon\" [class]=\"rightIcon\"></span>\r\n </button>\r\n</div>\r\n" }]
|
|
217
217
|
}], function () { return [{ type: i0.Injector }]; }, { showIcons: [{
|
|
218
218
|
type: Input
|
|
219
219
|
}], leftIcon: [{
|
|
@@ -229,4 +229,4 @@ export class WizardNavigationButtonComponent extends CoreBaseComponent {
|
|
|
229
229
|
}], endButtonClicked: [{
|
|
230
230
|
type: Output
|
|
231
231
|
}] }); })();
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLW5hdmlnYXRpb24tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC1saXRlL3dpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbi93aXphcmQtbmF2aWdhdGlvbi1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkLWxpdGUvd2l6YXJkLW5hdmlnYXRpb24tYnV0dG9uL3dpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0lDSTFELDBCQUFtRTs7O0lBQTFCLDhCQUFrQjs7O0lBWTdELDBCQUFvRTs7O0lBQTNCLCtCQUFtQjs7QURLaEUsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLGlCQUFpQjtJQXdHbEUsWUFBWSxRQUFrQjtRQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFwR3BCOztXQUVHO1FBQ0ksb0JBQWUsR0FBaUMsRUFBRSxDQUFDO1FBRW5ELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFLZixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pCLGFBQVEsR0FBRyxzQkFBc0IsQ0FBQztRQUdsQyxjQUFTLEdBQUcsdUJBQXVCLENBQUM7UUFHcEMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFnRGIs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Q0FBQzs7aUlBeE1RLCtCQUErQjtpSEFBL0IsK0JBQStCO1FDeEI1Qyw4QkFBNEYsY0FBQSxnQkFBQTtRQU10Riw0R0FBUyx3QkFBb0IsSUFBQztRQUM5QixrRkFBbUU7UUFDbkUsK0JBQW1IO1FBQ2pILFlBQTJJO1FBQUEsaUJBQU8sRUFBQSxFQUFBO1FBR3hKLGlDQUkrQjtRQUE3Qiw0R0FBUyxzQkFBa0IsSUFBQztRQUM1QiwrQkFBbUg7UUFDakgsWUFBK0k7UUFBQSxpQkFBTztRQUN4SixrRkFBb0U7UUFDdEUsaUJBQVMsRUFBQTs7UUFwQjZDLGdEQUFtQztRQUdyRixlQUFpRDtRQUFqRCx1SEFBaUQ7UUFDakQsNERBQStDO1FBQy9DLDhFQUF3RDtRQUVqRCxlQUFlO1FBQWYsb0NBQWU7UUFFcEIsZUFBMkk7UUFBM0kseUxBQTJJO1FBSS9JLGVBQWlEO1FBQWpELHVIQUFpRDtRQUNqRCw0REFBK0M7UUFDL0MsNEVBQXNEO1FBR3BELGVBQStJO1FBQS9JLDZMQUErSTtRQUMxSSxlQUFlO1FBQWYsb0NBQWU7O3VGREtiLCtCQUErQjtjQUozQyxTQUFTOzJCQUNJLDhCQUE4QjsyREFrQmpDLFNBQVM7a0JBRGYsS0FBSztZQUlDLFFBQVE7a0JBRGQsS0FBSztZQUlDLFNBQVM7a0JBRGYsS0FBSztZQUlDLGVBQWU7a0JBRHJCLEtBQUs7WUFjSyxPQUFPO2tCQURqQixLQUFLO1lBMENDLGtCQUFrQjtrQkFEeEIsTUFBTTtZQU9BLGdCQUFnQjtrQkFEdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nLWxldmVsJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV2l6YXJkTmF2aWdhdGlvbkJ1dHRvbkRhdGEge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgZm9yIHRoZSBidXR0b25cclxuICAgICAqL1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5ncyBmb3IgY2xhc3Nlcy5cclxuICAgICAqIEV4YW1wbGU6ICdzbWUtY2xhc3MtYSBzbWUtY2xhc3MtYicuXHJcbiAgICAgKi9cclxuICAgIGNsYXNzPzogc3RyaW5nO1xyXG4gICAgaWNvblN0YXJ0Pzogc3RyaW5nO1xyXG4gICAgaWNvbkVuZD86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS13aXphcmQtbmF2aWdhdGlvbi1idXR0b24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdpemFyZE5hdmlnYXRpb25CdXR0b25Db21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCB7XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdXaXphcmROYXZpZ2F0aW9uQnV0dG9uQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbnRlcm5hbCBidXR0b25zIG9iamVjdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYnV0dG9uc0ludGVybmFsOiBXaXphcmROYXZpZ2F0aW9uQnV0dG9uRGF0YVtdID0gW107XHJcblxyXG4gICAgcHVibGljIHJlbmRlciA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudFN0YXJ0QnV0dG9uSW5kZXhJbnRlcm5hbDogbnVtYmVyO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd0ljb25zID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxlZnRJY29uID0gJ3NtZS1pY29uLWNoZXZyb25MZWZ0JztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJpZ2h0SWNvbiA9ICdzbWUtaWNvbi1jaGV2cm9uUmlnaHQnO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYnV0dG9uQXV0b1dpZHRoID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBidXR0b25zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgYnV0dG9ucygpOiBXaXphcmROYXZpZ2F0aW9uQnV0dG9uRGF0YVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25zSW50ZXJuYWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXR0ZXIgYnV0dG9uc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBidXR0b25zKGlucHV0OiBXaXphcmROYXZpZ2F0aW9uQnV0dG9uRGF0YVtdKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnNJbnRlcm5hbCA9IGlucHV0O1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4SW50ZXJuYWwgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5idXR0b25zICYmIHRoaXMuYnV0dG9ucy5sZW5ndGggPj0gMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBjdXJyZW50U3RhcnRCdXR0b25JbmRleFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRTdGFydEJ1dHRvbkluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXhJbnRlcm5hbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHRlciBjdXJyZW50U3RhcnRCdXR0b25JbmRleFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGN1cnJlbnRTdGFydEJ1dHRvbkluZGV4KGlucHV0OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlR3JvdXBIZWFkZXI6ICdXaXphcmROYXZpZ2F0aW9uQnV0dG9uQ29tcG9uZW50JyxcclxuICAgICAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbC5FcnJvcixcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdub24gbnVtYmVyIGlucHV0IHdhcyBwYXNzZWQgaW4uJyxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ0Jhbm5lckNvbXBvbmVudC5zZXQuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXgoKSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4SW50ZXJuYWwgPSBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTdGFydEluZGV4ID0gLTI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBlbWl0cyB0aGUgc3RhcnQgYnV0dG9uIGNsaWNrZWQgZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHN0YXJ0QnV0dG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZW1pdHMgdGhlIGVuZCBidXR0b24gY2xpY2tlZCBldmVudC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZW5kQnV0dG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgY2hlY2tzIHRoZSBlbmFibGUvZGlzYWJsZSBzdGF0ZSBmb3IgdGhlIHN0YXJ0IGJ1dHRvblxyXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IGZvciB3aXphcmQgc3RhcnQgYnV0dG9uXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGZvciBlbmFibGUgYW5kIGZhbHNlIGZvciBkaXNhYmxlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGVja1N0YXJ0RGlzYWJsZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA8IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBjaGVja3MgdGhlIGVuYWJsZS9kaXNhYmxlIHN0YXRlIGZvciB0aGUgZW5kIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IGZvciB3aXphcmQgZW5kIGJ1dHRvblxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBmb3IgZW5hYmxlIGFuZCBmYWxzZSBmb3IgZGlzYWJsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hlY2tFbmREaXNhYmxlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IHRoaXMuYnV0dG9ucy5sZW5ndGggLSAyO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhcnRCdXR0b25JbmRleEludGVybmFsID0gdGhpcy5kZWZhdWx0U3RhcnRJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IHJlc2V0cyB0aGUgY3VycmVudCBzdGFydCBidXR0b24gaW5kZXggdG8gLTIgaWYgbm8gYnV0dG9uIG9iamVjdHMsXHJcbiAgICAgKiBPdGhlcndpc2UgaXQgc2V0cyB0aGUgYnV0dG9uIGluZGV4IHRvIDAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldCgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ID0gdGhpcy5kZWZhdWx0U3RhcnRJbmRleDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9ucy5sZW5ndGggPj0gMikge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgdXBkYXRlcyB0aGUgY29tcG9uZW50IGJ5IGxhYmVsIG5hbWUsIHRoaXMgaXMgdGllZCB0byBwaXZvdCB0YWIgY29tcG9uZW50IGNsaWNraW5nIGV2ZW50cy5cclxuICAgICAqIEBwYXJhbSBsYWJlbCB0aGUgbGFiZWwgbmFtZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZVN0YXJ0SW5kZXhCeUxhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBidXR0b25zID0gdGhpcy5idXR0b25zLm1hcCgoYikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYi5sYWJlbDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgYWN0aXZhdGVkQnV0dG9uSW5kZXggPSBidXR0b25zLmluZGV4T2YobGFiZWwpO1xyXG5cclxuICAgICAgICBpZiAoYWN0aXZhdGVkQnV0dG9uSW5kZXggPT09IC0xIHx8IGFjdGl2YXRlZEJ1dHRvbkluZGV4ID49IGJ1dHRvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXhJbnRlcm5hbCA9IGFjdGl2YXRlZEJ1dHRvbkluZGV4IC0gMTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgdGhlIHN0YXJ0IGluZGV4IGJ1dHRvbiBjbGlja1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TdGFydEJ1dHRvbkNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ID4gdGhpcy5kZWZhdWx0U3RhcnRJbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4IC09IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0QnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIHRoZSBlbmQgaW5kZXggYnV0dG9uIGNsaWNrXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkVuZEJ1dHRvbkNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4IDw9IHRoaXMuYnV0dG9ucy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggKz0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW5kQnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBnZXRzIHRoZSBjdXJyZW50IHN0YXJ0IGluZGV4IGJ1dHRvbiBsYWJlbC5cclxuICAgICAqIEByZXR1cm5zIHRoZSBsYWJlbCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50U3RhcnRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbkxhYmVsKHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZ2V0cyB0aGUgY3VycmVudCBhY3RpdmF0ZWQgYnV0dG9uIGxhYmVsLlxyXG4gICAgICogQHJldHVybnMgdGhlIGxhYmVsIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbnRBY3RpdmF0ZWRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbkxhYmVsKHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGdldHMgdGhlIGN1cnJlbnQgZW5kIGluZGV4IGJ1dHRvbiBsYWJlbC5cclxuICAgICAqIEByZXR1cm5zIHRoZSBsYWJlbCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50RW5kQnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25MYWJlbCh0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ICsgMik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBnZXRzIHRoZSBidXR0b24gbGFiZWwuXHJcbiAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IGZvciBsYWJlbC5cclxuICAgICAqIEByZXR1cm5zIHRoZSBsYWJlbCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0QnV0dG9uTGFiZWwoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggPD0gdGhpcy5kZWZhdWx0U3RhcnRJbmRleCB8fCB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ID4gdGhpcy5idXR0b25zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uc1tpbmRleF0/LmxhYmVsO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1wb3NpdGlvbi1zdHJldGNoLWhcIiBbY2xhc3Muc21lLWxheW91dC1oaWRkZW5dPVwiIXJlbmRlclwiPlxyXG4gIDxzcGFuIGNsYXNzPVwic21lLXBhZGRpbmctcmlnaHQteHNcIj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staFwiIHRhYkluZGV4PVwiMFwiXHJcbiAgICAgIFtjbGFzc109XCJidXR0b25zW2N1cnJlbnRTdGFydEJ1dHRvbkluZGV4XT8uY2xhc3NcIlxyXG4gICAgICBbY2xhc3Muc21lLWJ1dHRvbi1hdXRvLXdpZHRoXT1cImJ1dHRvbkF1dG9XaWR0aFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJjaGVja1N0YXJ0RGlzYWJsZWQoY3VycmVudFN0YXJ0QnV0dG9uSW5kZXgpXCJcclxuICAgICAgKGNsaWNrKT1cIm9uU3RhcnRCdXR0b25DbGljaygpXCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0ljb25zXCIgY2xhc3M9XCJzbWUtaWNvblwiIFtjbGFzc109XCJsZWZ0SWNvblwiPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWdyb3ctc3RhcnQgc21lLWFycmFuZ2UtZWxsaXBzaXMgc21lLWFjdGlvbi1idXR0b24tdGV4dC1zcGFuXCI+XHJcbiAgICAgICAge3sgYnV0dG9uc1tjdXJyZW50U3RhcnRCdXR0b25JbmRleF0gPyBidXR0b25zW2N1cnJlbnRTdGFydEJ1dHRvbkluZGV4XS5sYWJlbCA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkxpdGUuQWN0aW9ucy5wcmV2aW91cyB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvc3Bhbj5cclxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWhcIiB0YWJJbmRleD1cIjBcIlxyXG4gICAgW2NsYXNzXT1cImJ1dHRvbnNbY3VycmVudFN0YXJ0QnV0dG9uSW5kZXhdPy5jbGFzc1wiXHJcbiAgICBbY2xhc3Muc21lLWJ1dHRvbi1hdXRvLXdpZHRoXT1cImJ1dHRvbkF1dG9XaWR0aFwiXHJcbiAgICBbZGlzYWJsZWRdPVwiY2hlY2tFbmREaXNhYmxlZChjdXJyZW50U3RhcnRCdXR0b25JbmRleClcIlxyXG4gICAgKGNsaWNrKT1cIm9uRW5kQnV0dG9uQ2xpY2soKVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWdyb3ctc3RhcnQgc21lLWFycmFuZ2UtZWxsaXBzaXMgc21lLWFjdGlvbi1idXR0b24tdGV4dC1zcGFuXCI+XHJcbiAgICAgIHt7IGJ1dHRvbnNbY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggKyAyXSA/IGJ1dHRvbnNbY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggKyAyXS5sYWJlbCA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkxpdGUuQWN0aW9ucy5uZXh0IH19PC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJzaG93SWNvbnNcIiBjbGFzcz1cInNtZS1pY29uXCIgW2NsYXNzXT1cInJpZ2h0SWNvblwiPjwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLW5hdmlnYXRpb24tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC1saXRlL3dpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbi93aXphcmQtbmF2aWdhdGlvbi1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkLWxpdGUvd2l6YXJkLW5hdmlnYXRpb24tYnV0dG9uL3dpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0lDSTFELDBCQUFtRTs7O0lBQTFCLDhCQUFrQjs7O0lBWTdELDBCQUFvRTs7O0lBQTNCLCtCQUFtQjs7QURLaEUsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLGlCQUFpQjtJQXdHbEUsWUFBWSxRQUFrQjtRQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFwR3BCOztXQUVHO1FBQ0ksb0JBQWUsR0FBaUMsRUFBRSxDQUFDO1FBRW5ELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFLZixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pCLGFBQVEsR0FBRyxzQkFBc0IsQ0FBQztRQUdsQyxjQUFTLEdBQUcsdUJBQXVCLENBQUM7UUFHcEMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFnRGIs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Q0FBQzs7aUlBeE1RLCtCQUErQjtpSEFBL0IsK0JBQStCO1FDeEI1Qyw4QkFBNEYsY0FBQSxnQkFBQTtRQU10Riw0R0FBUyx3QkFBb0IsSUFBQztRQUM5QixrRkFBbUU7UUFDbkUsK0JBQW1IO1FBQ2pILFlBQTJJO1FBQUEsaUJBQU8sRUFBQSxFQUFBO1FBR3hKLGlDQUkrQjtRQUE3Qiw0R0FBUyxzQkFBa0IsSUFBQztRQUM1QiwrQkFBbUg7UUFDakgsWUFBK0k7UUFBQSxpQkFBTztRQUN4SixrRkFBb0U7UUFDdEUsaUJBQVMsRUFBQTs7UUFwQjZDLGdEQUFtQztRQUdyRixlQUFpRDtRQUFqRCx1SEFBaUQ7UUFDakQsNERBQStDO1FBQy9DLDhFQUF3RDtRQUVqRCxlQUFlO1FBQWYsb0NBQWU7UUFFcEIsZUFBMkk7UUFBM0kseUxBQTJJO1FBSS9JLGVBQWlEO1FBQWpELHVIQUFpRDtRQUNqRCw0REFBK0M7UUFDL0MsNEVBQXNEO1FBR3BELGVBQStJO1FBQS9JLDZMQUErSTtRQUMxSSxlQUFlO1FBQWYsb0NBQWU7O3VGREtiLCtCQUErQjtjQUozQyxTQUFTOzJCQUNJLDhCQUE4QjsyREFrQmpDLFNBQVM7a0JBRGYsS0FBSztZQUlDLFFBQVE7a0JBRGQsS0FBSztZQUlDLFNBQVM7a0JBRGYsS0FBSztZQUlDLGVBQWU7a0JBRHJCLEtBQUs7WUFjSyxPQUFPO2tCQURqQixLQUFLO1lBMENDLGtCQUFrQjtrQkFEeEIsTUFBTTtZQU9BLGdCQUFnQjtrQkFEdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nLWxldmVsJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV2l6YXJkTmF2aWdhdGlvbkJ1dHRvbkRhdGEge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgZm9yIHRoZSBidXR0b25cclxuICAgICAqL1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5ncyBmb3IgY2xhc3Nlcy5cclxuICAgICAqIEV4YW1wbGU6ICdzbWUtY2xhc3MtYSBzbWUtY2xhc3MtYicuXHJcbiAgICAgKi9cclxuICAgIGNsYXNzPzogc3RyaW5nO1xyXG4gICAgaWNvblN0YXJ0Pzogc3RyaW5nO1xyXG4gICAgaWNvbkVuZD86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS13aXphcmQtbmF2aWdhdGlvbi1idXR0b24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdpemFyZE5hdmlnYXRpb25CdXR0b25Db21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCB7XHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdXaXphcmROYXZpZ2F0aW9uQnV0dG9uQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbnRlcm5hbCBidXR0b25zIG9iamVjdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYnV0dG9uc0ludGVybmFsOiBXaXphcmROYXZpZ2F0aW9uQnV0dG9uRGF0YVtdID0gW107XHJcblxyXG4gICAgcHVibGljIHJlbmRlciA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudFN0YXJ0QnV0dG9uSW5kZXhJbnRlcm5hbDogbnVtYmVyO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd0ljb25zID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxlZnRJY29uID0gJ3NtZS1pY29uLWNoZXZyb25MZWZ0JztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJpZ2h0SWNvbiA9ICdzbWUtaWNvbi1jaGV2cm9uUmlnaHQnO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYnV0dG9uQXV0b1dpZHRoID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBidXR0b25zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgYnV0dG9ucygpOiBXaXphcmROYXZpZ2F0aW9uQnV0dG9uRGF0YVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25zSW50ZXJuYWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXR0ZXIgYnV0dG9uc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBidXR0b25zKGlucHV0OiBXaXphcmROYXZpZ2F0aW9uQnV0dG9uRGF0YVtdKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnNJbnRlcm5hbCA9IGlucHV0O1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4SW50ZXJuYWwgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5idXR0b25zICYmIHRoaXMuYnV0dG9ucy5sZW5ndGggPj0gMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBjdXJyZW50U3RhcnRCdXR0b25JbmRleFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRTdGFydEJ1dHRvbkluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXhJbnRlcm5hbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHRlciBjdXJyZW50U3RhcnRCdXR0b25JbmRleFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGN1cnJlbnRTdGFydEJ1dHRvbkluZGV4KGlucHV0OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlR3JvdXBIZWFkZXI6ICdXaXphcmROYXZpZ2F0aW9uQnV0dG9uQ29tcG9uZW50JyxcclxuICAgICAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbC5FcnJvcixcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdub24gbnVtYmVyIGlucHV0IHdhcyBwYXNzZWQgaW4uJyxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ0Jhbm5lckNvbXBvbmVudC5zZXQuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXgoKSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4SW50ZXJuYWwgPSBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTdGFydEluZGV4ID0gLTI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBlbWl0cyB0aGUgc3RhcnQgYnV0dG9uIGNsaWNrZWQgZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHN0YXJ0QnV0dG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZW1pdHMgdGhlIGVuZCBidXR0b24gY2xpY2tlZCBldmVudC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZW5kQnV0dG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgY2hlY2tzIHRoZSBlbmFibGUvZGlzYWJsZSBzdGF0ZSBmb3IgdGhlIHN0YXJ0IGJ1dHRvblxyXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IGZvciB3aXphcmQgc3RhcnQgYnV0dG9uXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGZvciBlbmFibGUgYW5kIGZhbHNlIGZvciBkaXNhYmxlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGVja1N0YXJ0RGlzYWJsZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA8IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBjaGVja3MgdGhlIGVuYWJsZS9kaXNhYmxlIHN0YXRlIGZvciB0aGUgZW5kIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IGZvciB3aXphcmQgZW5kIGJ1dHRvblxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBmb3IgZW5hYmxlIGFuZCBmYWxzZSBmb3IgZGlzYWJsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hlY2tFbmREaXNhYmxlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IHRoaXMuYnV0dG9ucy5sZW5ndGggLSAyO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhcnRCdXR0b25JbmRleEludGVybmFsID0gdGhpcy5kZWZhdWx0U3RhcnRJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IHJlc2V0cyB0aGUgY3VycmVudCBzdGFydCBidXR0b24gaW5kZXggdG8gLTIgaWYgbm8gYnV0dG9uIG9iamVjdHMsXHJcbiAgICAgKiBPdGhlcndpc2UgaXQgc2V0cyB0aGUgYnV0dG9uIGluZGV4IHRvIDAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldCgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ID0gdGhpcy5kZWZhdWx0U3RhcnRJbmRleDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9ucy5sZW5ndGggPj0gMikge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgdXBkYXRlcyB0aGUgY29tcG9uZW50IGJ5IGxhYmVsIG5hbWUsIHRoaXMgaXMgdGllZCB0byBwaXZvdCB0YWIgY29tcG9uZW50IGNsaWNraW5nIGV2ZW50cy5cclxuICAgICAqIEBwYXJhbSBsYWJlbCB0aGUgbGFiZWwgbmFtZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZVN0YXJ0SW5kZXhCeUxhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBidXR0b25zID0gdGhpcy5idXR0b25zLm1hcCgoYikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYi5sYWJlbDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgYWN0aXZhdGVkQnV0dG9uSW5kZXggPSBidXR0b25zLmluZGV4T2YobGFiZWwpO1xyXG5cclxuICAgICAgICBpZiAoYWN0aXZhdGVkQnV0dG9uSW5kZXggPT09IC0xIHx8IGFjdGl2YXRlZEJ1dHRvbkluZGV4ID49IGJ1dHRvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXhJbnRlcm5hbCA9IGFjdGl2YXRlZEJ1dHRvbkluZGV4IC0gMTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgdGhlIHN0YXJ0IGluZGV4IGJ1dHRvbiBjbGlja1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TdGFydEJ1dHRvbkNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ID4gdGhpcy5kZWZhdWx0U3RhcnRJbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4IC09IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0QnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIHRoZSBlbmQgaW5kZXggYnV0dG9uIGNsaWNrXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkVuZEJ1dHRvbkNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4IDw9IHRoaXMuYnV0dG9ucy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggKz0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW5kQnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBnZXRzIHRoZSBjdXJyZW50IHN0YXJ0IGluZGV4IGJ1dHRvbiBsYWJlbC5cclxuICAgICAqIEByZXR1cm5zIHRoZSBsYWJlbCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50U3RhcnRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbkxhYmVsKHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZ2V0cyB0aGUgY3VycmVudCBhY3RpdmF0ZWQgYnV0dG9uIGxhYmVsLlxyXG4gICAgICogQHJldHVybnMgdGhlIGxhYmVsIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbnRBY3RpdmF0ZWRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbkxhYmVsKHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGdldHMgdGhlIGN1cnJlbnQgZW5kIGluZGV4IGJ1dHRvbiBsYWJlbC5cclxuICAgICAqIEByZXR1cm5zIHRoZSBsYWJlbCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50RW5kQnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25MYWJlbCh0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ICsgMik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBnZXRzIHRoZSBidXR0b24gbGFiZWwuXHJcbiAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IGZvciBsYWJlbC5cclxuICAgICAqIEByZXR1cm5zIHRoZSBsYWJlbCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0QnV0dG9uTGFiZWwoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggPD0gdGhpcy5kZWZhdWx0U3RhcnRJbmRleCB8fCB0aGlzLmN1cnJlbnRTdGFydEJ1dHRvbkluZGV4ID4gdGhpcy5idXR0b25zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uc1tpbmRleF0/LmxhYmVsO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1wb3NpdGlvbi1zdHJldGNoLWhcIiBbY2xhc3Muc21lLWxheW91dC1oaWRkZW5dPVwiIXJlbmRlclwiPlxyXG4gIDxzcGFuIGNsYXNzPVwic21lLXBhZGRpbmctcmlnaHQteHNcIj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staFwiIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgIFtjbGFzc109XCJidXR0b25zW2N1cnJlbnRTdGFydEJ1dHRvbkluZGV4XT8uY2xhc3NcIlxyXG4gICAgICBbY2xhc3Muc21lLWJ1dHRvbi1hdXRvLXdpZHRoXT1cImJ1dHRvbkF1dG9XaWR0aFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJjaGVja1N0YXJ0RGlzYWJsZWQoY3VycmVudFN0YXJ0QnV0dG9uSW5kZXgpXCJcclxuICAgICAgKGNsaWNrKT1cIm9uU3RhcnRCdXR0b25DbGljaygpXCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0ljb25zXCIgY2xhc3M9XCJzbWUtaWNvblwiIFtjbGFzc109XCJsZWZ0SWNvblwiPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWdyb3ctc3RhcnQgc21lLWFycmFuZ2UtZWxsaXBzaXMgc21lLWFjdGlvbi1idXR0b24tdGV4dC1zcGFuXCI+XHJcbiAgICAgICAge3sgYnV0dG9uc1tjdXJyZW50U3RhcnRCdXR0b25JbmRleF0gPyBidXR0b25zW2N1cnJlbnRTdGFydEJ1dHRvbkluZGV4XS5sYWJlbCA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkxpdGUuQWN0aW9ucy5wcmV2aW91cyB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvc3Bhbj5cclxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWhcIiB0YWJpbmRleD1cIjBcIlxyXG4gICAgW2NsYXNzXT1cImJ1dHRvbnNbY3VycmVudFN0YXJ0QnV0dG9uSW5kZXhdPy5jbGFzc1wiXHJcbiAgICBbY2xhc3Muc21lLWJ1dHRvbi1hdXRvLXdpZHRoXT1cImJ1dHRvbkF1dG9XaWR0aFwiXHJcbiAgICBbZGlzYWJsZWRdPVwiY2hlY2tFbmREaXNhYmxlZChjdXJyZW50U3RhcnRCdXR0b25JbmRleClcIlxyXG4gICAgKGNsaWNrKT1cIm9uRW5kQnV0dG9uQ2xpY2soKVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWdyb3ctc3RhcnQgc21lLWFycmFuZ2UtZWxsaXBzaXMgc21lLWFjdGlvbi1idXR0b24tdGV4dC1zcGFuXCI+XHJcbiAgICAgIHt7IGJ1dHRvbnNbY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggKyAyXSA/IGJ1dHRvbnNbY3VycmVudFN0YXJ0QnV0dG9uSW5kZXggKyAyXS5sYWJlbCA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkxpdGUuQWN0aW9ucy5uZXh0IH19PC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJzaG93SWNvbnNcIiBjbGFzcz1cInNtZS1pY29uXCIgW2NsYXNzXT1cInJpZ2h0SWNvblwiPjwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Directive, ElementRef } from '@angular/core';
|
|
2
|
+
import { ExtensionBroker } from '@microsoft/windows-admin-center-sdk/core/data/extension-broker/extension-broker';
|
|
3
|
+
import { ExtensionClientListener } from '@microsoft/windows-admin-center-sdk/core/data/extension-broker/extension-listener';
|
|
4
|
+
import { Dom } from '@microsoft/windows-admin-center-sdk/core/dom/dom';
|
|
5
|
+
import { Rpc } from '@microsoft/windows-admin-center-sdk/core/rpc/rpc';
|
|
6
|
+
import { of } from 'rxjs';
|
|
7
|
+
import { map } from 'rxjs/operators';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@microsoft/windows-admin-center-sdk/core/rpc/rpc";
|
|
10
|
+
import * as i2 from "@microsoft/windows-admin-center-sdk/core/data/extension-broker/extension-broker";
|
|
11
|
+
/**
|
|
12
|
+
* Base class for snap in specific extension listeners
|
|
13
|
+
*/
|
|
14
|
+
export class SnapInListener extends ExtensionClientListener {
|
|
15
|
+
/**
|
|
16
|
+
* Initializes a new instance of the SnapInListener class
|
|
17
|
+
* @param rpc The rpc context
|
|
18
|
+
*/
|
|
19
|
+
constructor(rpc, extensionBroker, hostElement) {
|
|
20
|
+
super(rpc);
|
|
21
|
+
this.extensionBroker = extensionBroker;
|
|
22
|
+
this.hostElement = hostElement;
|
|
23
|
+
}
|
|
24
|
+
ngAfterViewInit() {
|
|
25
|
+
if (this.hostElement) {
|
|
26
|
+
document.body.setAttribute('sme-snap-in', '');
|
|
27
|
+
document.addEventListener('wheel', event => {
|
|
28
|
+
// do not listen to wheel if it is for internal scroll
|
|
29
|
+
// default behavior may try to scroll parent first THEN internal scroll,
|
|
30
|
+
// see if we can update this to match that behavior
|
|
31
|
+
if (!Dom.getOverflowAncestor(this.hostElement.nativeElement)) {
|
|
32
|
+
this.emitOutput({ deltaY: event.deltaY });
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
this.hostElement.nativeElement.addEventListener('focusin', (event) => {
|
|
36
|
+
// check if we actually need to do these
|
|
37
|
+
event.preventDefault();
|
|
38
|
+
event.stopPropagation();
|
|
39
|
+
// send info about the current active element
|
|
40
|
+
if (document.activeElement) {
|
|
41
|
+
const focusedElementRect = document.activeElement.getBoundingClientRect();
|
|
42
|
+
this.emitOutput({ focusedElementRect });
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Occurs when any method is called on this worker from another extension
|
|
49
|
+
*/
|
|
50
|
+
onCall(method, version, ...args) {
|
|
51
|
+
if (method === 'input' && args && args.length > 0 && args[0].length > 0) {
|
|
52
|
+
this.onInputReceived(args[0][0]);
|
|
53
|
+
return of(null);
|
|
54
|
+
}
|
|
55
|
+
return super.throwMethodNotFound(method, version);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Occurs when an input is received on this snap-in
|
|
59
|
+
* @param input the input object.
|
|
60
|
+
*/
|
|
61
|
+
onInputReceived(input) {
|
|
62
|
+
this.input = input;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Emits an output to the consumer of this snap-in.
|
|
66
|
+
* @param output the output object.
|
|
67
|
+
*/
|
|
68
|
+
emitOutput(output) {
|
|
69
|
+
// TODO: should there be a separate output type for page events?
|
|
70
|
+
// abstract output from consumer by mapping to null.
|
|
71
|
+
return this.extensionBroker.emitResult(this.instanceId, 'output', output)
|
|
72
|
+
.pipe(map(() => null));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** @nocollapse */ SnapInListener.ɵfac = function SnapInListener_Factory(t) { return new (t || SnapInListener)(i0.ɵɵdirectiveInject(i1.Rpc), i0.ɵɵdirectiveInject(i2.ExtensionBroker), i0.ɵɵdirectiveInject(i0.ElementRef)); };
|
|
76
|
+
/** @nocollapse */ SnapInListener.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: SnapInListener, features: [i0.ɵɵInheritDefinitionFeature] });
|
|
77
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SnapInListener, [{
|
|
78
|
+
type: Directive
|
|
79
|
+
}], function () { return [{ type: i1.Rpc }, { type: i2.ExtensionBroker }, { type: i0.ElementRef }]; }, null); })();
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcC1pbi1saXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2RhdGEvZXh0ZW5zaW9uLWJyb2tlci9zbmFwLWluLWxpc3RlbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUZBQWlGLENBQUM7QUFDbEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUZBQW1GLENBQUM7QUFDNUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWtCckM7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLGNBQ2xCLFNBQVEsdUJBQXVCO0lBSS9COzs7T0FHRztJQUNILFlBQVksR0FBUSxFQUFTLGVBQWdDLEVBQVMsV0FBd0I7UUFDMUYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRGMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFFOUYsQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUN2QyxzREFBc0Q7Z0JBQ3RELHdFQUF3RTtnQkFDeEUsbURBQW1EO2dCQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQzdDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFpQixFQUFFLEVBQUU7Z0JBQzdFLHdDQUF3QztnQkFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBRXhCLDZDQUE2QztnQkFDN0MsSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFO29CQUN4QixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDMUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztpQkFDM0M7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sTUFBTSxDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsR0FBRyxJQUFXO1FBQzVELElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUVELE9BQU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sZUFBZSxDQUFDLEtBQWE7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFVBQVUsQ0FBQyxNQUE4QjtRQUMvQyxnRUFBZ0U7UUFDaEUsb0RBQW9EO1FBQ3BELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDOzsrRkFwRWlCLGNBQWM7Z0dBQWQsY0FBYzt1RkFBZCxjQUFjO2NBRG5DLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRXh0ZW5zaW9uQnJva2VyIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL2V4dGVuc2lvbi1icm9rZXIvZXh0ZW5zaW9uLWJyb2tlcic7XHJcbmltcG9ydCB7IEV4dGVuc2lvbkNsaWVudExpc3RlbmVyIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL2V4dGVuc2lvbi1icm9rZXIvZXh0ZW5zaW9uLWxpc3RlbmVyJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgUnBjIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvcnBjJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqXHJcbiAqIEV4dGVuZCB0aGlzIGludGVyZmFjZSB0byBkZWZpbmUgaW5wdXQgc3RydWN0dXJlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNuYXBJbklucHV0IHtcclxufVxyXG5cclxuLyoqXHJcbiAqIEV4dGVuZCB0aGlzIGludGVyZmFjZSB0byBkZWZpbmUgb3V0cHV0IHN0cnVjdHVyZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTbmFwSW5PdXRwdXQge1xyXG4gICAgZGVsdGFZPzogbnVtYmVyO1xyXG4gICAgZm9jdXNlZEVsZW1lbnRSZWN0PzogRE9NUmVjdDtcclxuICAgIC8vIGFuIG91dHB1dCB2YXJpYWJsZSB0aGF0IHRoZSBzbmFwIGluIGltcGxlbWVudGF0aW9uIGNhbiB1c2UgZm9yIGVtaXR0aW5nIGFuIG91dHB1dCB2YWx1ZSBub3QgcmVsYXRlZCB0byB0aGUgc25hcCBpbiBsaXN0ZW5lclxyXG4gICAgc25hcEluT3V0cHV0PzogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3Igc25hcCBpbiBzcGVjaWZpYyBleHRlbnNpb24gbGlzdGVuZXJzXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNuYXBJbkxpc3RlbmVyPFRJbnB1dCBleHRlbmRzIFNuYXBJbklucHV0LCBUT3V0cHV0IGV4dGVuZHMgU25hcEluT3V0cHV0PlxyXG4gICAgZXh0ZW5kcyBFeHRlbnNpb25DbGllbnRMaXN0ZW5lciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAgIHB1YmxpYyBpbnB1dDogVElucHV0O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFNuYXBJbkxpc3RlbmVyIGNsYXNzXHJcbiAgICAgKiBAcGFyYW0gcnBjIFRoZSBycGMgY29udGV4dFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihycGM6IFJwYywgcHVibGljIGV4dGVuc2lvbkJyb2tlcjogRXh0ZW5zaW9uQnJva2VyLCBwdWJsaWMgaG9zdEVsZW1lbnQ/OiBFbGVtZW50UmVmKSB7XHJcbiAgICAgICAgc3VwZXIocnBjKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmhvc3RFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCdzbWUtc25hcC1pbicsICcnKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBldmVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBub3QgbGlzdGVuIHRvIHdoZWVsIGlmIGl0IGlzIGZvciBpbnRlcm5hbCBzY3JvbGxcclxuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgbWF5IHRyeSB0byBzY3JvbGwgcGFyZW50IGZpcnN0IFRIRU4gaW50ZXJuYWwgc2Nyb2xsLFxyXG4gICAgICAgICAgICAgICAgLy8gc2VlIGlmIHdlIGNhbiB1cGRhdGUgdGhpcyB0byBtYXRjaCB0aGF0IGJlaGF2aW9yXHJcbiAgICAgICAgICAgICAgICBpZiAoIURvbS5nZXRPdmVyZmxvd0FuY2VzdG9yKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRPdXRwdXQoeyBkZWx0YVk6IGV2ZW50LmRlbHRhWSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgYWN0dWFsbHkgbmVlZCB0byBkbyB0aGVzZVxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNlbmQgaW5mbyBhYm91dCB0aGUgY3VycmVudCBhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c2VkRWxlbWVudFJlY3QgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdE91dHB1dCh7IGZvY3VzZWRFbGVtZW50UmVjdCB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW4gYW55IG1ldGhvZCBpcyBjYWxsZWQgb24gdGhpcyB3b3JrZXIgZnJvbSBhbm90aGVyIGV4dGVuc2lvblxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25DYWxsKG1ldGhvZDogc3RyaW5nLCB2ZXJzaW9uOiBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnkgfCB2b2lkPiB7XHJcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2lucHV0JyAmJiBhcmdzICYmIGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vbklucHV0UmVjZWl2ZWQoYXJnc1swXVswXSk7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci50aHJvd01ldGhvZE5vdEZvdW5kKG1ldGhvZCwgdmVyc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbiBhbiBpbnB1dCBpcyByZWNlaXZlZCBvbiB0aGlzIHNuYXAtaW5cclxuICAgICAqIEBwYXJhbSBpbnB1dCB0aGUgaW5wdXQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25JbnB1dFJlY2VpdmVkKGlucHV0OiBUSW5wdXQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBhbiBvdXRwdXQgdG8gdGhlIGNvbnN1bWVyIG9mIHRoaXMgc25hcC1pbi5cclxuICAgICAqIEBwYXJhbSBvdXRwdXQgdGhlIG91dHB1dCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBlbWl0T3V0cHV0KG91dHB1dDogVE91dHB1dCB8IFNuYXBJbk91dHB1dCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIC8vIFRPRE86IHNob3VsZCB0aGVyZSBiZSBhIHNlcGFyYXRlIG91dHB1dCB0eXBlIGZvciBwYWdlIGV2ZW50cz9cclxuICAgICAgICAvLyBhYnN0cmFjdCBvdXRwdXQgZnJvbSBjb25zdW1lciBieSBtYXBwaW5nIHRvIG51bGwuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uQnJva2VyLmVtaXRSZXN1bHQodGhpcy5pbnN0YW5jZUlkLCAnb3V0cHV0Jywgb3V0cHV0KVxyXG4gICAgICAgICAgICAucGlwZShtYXAoKCkgPT4gbnVsbCkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -2,4 +2,5 @@ export { BaseFormData } from './forms/base-form-data';
|
|
|
2
2
|
export { BasePropertiesForm } from './forms/base-properties-form';
|
|
3
3
|
export { EditableCollectionItem } from './forms/editable-collection-item';
|
|
4
4
|
export * from './routing/routing';
|
|
5
|
-
|
|
5
|
+
export * from './extension-broker/snap-in-listener';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9kYXRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQ0gsa0JBQWtCLEVBSXJCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUUsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQmFzZUZvcm1EYXRhIH0gZnJvbSAnLi9mb3Jtcy9iYXNlLWZvcm0tZGF0YSc7XHJcbmV4cG9ydCB7XHJcbiAgICBCYXNlUHJvcGVydGllc0Zvcm0sXHJcbiAgICBGb3JtQXJyYXlWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgICBGb3JtQ29udHJvbENvbnRhaW5lclZhbGlkYXRpb25NZXNzYWdlcyxcclxuICAgIEZvcm1Hcm91cFZhbGlkYXRpb25NZXNzYWdlc1xyXG59IGZyb20gJy4vZm9ybXMvYmFzZS1wcm9wZXJ0aWVzLWZvcm0nO1xyXG5leHBvcnQgeyBFZGl0YWJsZUNvbGxlY3Rpb25JdGVtIH0gZnJvbSAnLi9mb3Jtcy9lZGl0YWJsZS1jb2xsZWN0aW9uLWl0ZW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL3JvdXRpbmcvcm91dGluZyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZXh0ZW5zaW9uLWJyb2tlci9zbmFwLWluLWxpc3RlbmVyJztcclxuIl19
|
|
@@ -55,7 +55,7 @@ export class SmeRouterLinkDirective {
|
|
|
55
55
|
this.updateIsActive();
|
|
56
56
|
}
|
|
57
57
|
ngOnDestroy() {
|
|
58
|
-
this.subscriptions.forEach(sub => sub
|
|
58
|
+
this.subscriptions.forEach(sub => sub?.unsubscribe());
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
61
|
* Updates the isActive state and fires appropriate events if that state has changed.
|
|
@@ -113,4 +113,4 @@ export class SmeRouterLinkDirective {
|
|
|
113
113
|
}], routerLinkActiveOptions: [{
|
|
114
114
|
type: Input
|
|
115
115
|
}] }); })();
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvZGlyZWN0aXZlcy9yb3V0ZXIvcm91dGVyLWxpbmsuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixJQUFJLEVBQ0osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUd4Rjs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQXlCL0I7Ozs7O09BS0c7SUFDSCxZQUMrQixJQUFnQixFQUNoQixZQUFnQyxFQUNuRCxNQUFjLEVBQ2QsaUJBQW9DO1FBSGpCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ25ELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBbENoRDs7V0FFRztRQUVJLDJCQUFzQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFekQ7O1dBRUc7UUFFSSw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTNEOztXQUVHO1FBRUksNEJBQXVCLEdBQXVCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBRXRFOztXQUVHO1FBQ0ssYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFldkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxhQUFhLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDWixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzlELE9BQU87U0FDVjtRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssY0FBYyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQy9CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDdEM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3hDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFlBQVksQ0FBQyxJQUFxQztRQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7K0dBbkdRLHNCQUFzQjt3R0FBdEIsc0JBQXNCO3VGQUF0QixzQkFBc0I7Y0FIbEMsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSw2RUFBNkU7YUFDMUY7O3NCQWlDUSxRQUFROztzQkFBSSxJQUFJOztzQkFDaEIsUUFBUTs7c0JBQUksSUFBSTs2RUE1QmQsc0JBQXNCO2tCQUQ1QixNQUFNO1lBT0Esd0JBQXdCO2tCQUQ5QixNQUFNO1lBT0EsdUJBQXVCO2tCQUQ3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlckxpbmssIFJvdXRlckxpbmtXaXRoSHJlZiB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIERpcmVjdGl2ZSB0byBwcm92aWRlIG5vdGlmaWNhdGlvbiBvciBzdGF0ZSBjaGFuZ2VzIGZvciBhbmd1bGFycyBAc2VlIFJvdXRlckxpbmsgZGlyZWN0aXZlLlxyXG4gKiBUaGUgZGVzaWduIG9mIHRoaXMgZGlyZWN0aXZlIGlzIGlkZW50aWNhbCB0byBAc2VlIFJvdXRlckxpbmtBY3RpdmVcclxuICogYW5kIGFzIHN1Y2ggc3VwcG9ydHMgdGhlIHNhbWUgQHNlZSBSb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyBhcmUgc3VwcG9ydGVkLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tyb3V0ZXJMaW5rXVtzbWVSb3V0ZXJMaW5rQWN0aXZhdGVkXSxbcm91dGVyTGlua11bc21lUm91dGVyTGlua0RlYWN0aXZhdGVkXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtZVJvdXRlckxpbmtEaXJlY3RpdmUgaW1wbGVtZW50cyBEb0NoZWNrLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb3V0cHV0IGZvciB3aGVuIHRoZSByb3V0ZSBpcyBhY3RpdmF0ZWRcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgc21lUm91dGVyTGlua0FjdGl2YXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvdXRwdXQgZm9yIHdoZW4gdGhlIHJvdXRlIGlzIGRlYWN0aXZhdGVkXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNtZVJvdXRlckxpbmtEZWFjdGl2YXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZSB0aGUgc2FtZSBpbnB1dCBvcHRpb25zIGFzIGFuZ3VsYXJzIEBzZWUgUm91dGVyTGlua0FjdGl2ZSBEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczogeyBleGFjdDogYm9vbGVhbiB9ID0geyBleGFjdDogZmFsc2UgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYWNlaG9sZGVyIGZvciB0aGUgY3VycmVudCBhY3RpdmF0aW9uIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBAc2VlIFBpdm90Q29tcG9uZW50IGNsYXNzLlxyXG4gICAgICogQHBhcmFtICBsaW5rIFRoZSByb3V0ZXIgbGluayB0aGF0J3MgZGVmaW5lZCBmb3IgdGhlIGVsZW1lbnQgb3IgY2hpbGQgZWxlbWVudHNcclxuICAgICAqIEBwYXJhbSAgbGlua1dpdGhIcmVmIFRoZSByb3V0ZXIgbGluayB3aXRoICdhJyB0YWdzIHRoYXQncyBkZWZpbmVkIGZvciB0aGUgZWxlbWVudCBvciBjaGlsZCBlbGVtZW50c1xyXG4gICAgICogQHBhcmFtICByb3V0ZXIgVGhlIGFuZ3VsYXIgcm91dGVyIHNlcnZpY2VcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBwdWJsaWMgbGluazogUm91dGVyTGluayxcclxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpIHB1YmxpYyBsaW5rV2l0aEhyZWY6IFJvdXRlckxpbmtXaXRoSHJlZixcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgICApIHtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocyBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlzQWN0aXZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXJzIEFmdGVyQ29udGVudEluaXQgbGlmZSBjeWNsZSBldmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXBkYXRlSXNBY3RpdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXJzIE9uQ2hhbmdlcyBsaWZlIGN5Y2xlIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJc0FjdGl2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViPy51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGlzQWN0aXZlIHN0YXRlIGFuZCBmaXJlcyBhcHByb3ByaWF0ZSBldmVudHMgaWYgdGhhdCBzdGF0ZSBoYXMgY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVJc0FjdGl2ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoKCF0aGlzLmxpbmsgJiYgIXRoaXMubGlua1dpdGhIcmVmKSB8fCAhdGhpcy5yb3V0ZXIubmF2aWdhdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0FjdGl2ZUxpbmtzID0gdGhpcy5oYXNBY3RpdmVMaW5rcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlICE9PSBoYXNBY3RpdmVMaW5rcykge1xyXG4gICAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gaGFzQWN0aXZlTGlua3M7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtZVJvdXRlckxpbmtBY3RpdmF0ZWQubmV4dCgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbWVSb3V0ZXJMaW5rRGVhY3RpdmF0ZWQubmV4dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiBhIGdpdmVuIGxpbmsgaXMgYWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gbGluayB0aGUgbGluayB0byBjaGVja1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlzTGlua0FjdGl2ZShsaW5rOiBSb3V0ZXJMaW5rIHwgUm91dGVyTGlua1dpdGhIcmVmKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLmlzQWN0aXZlKGxpbmsudXJsVHJlZSwgdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucy5leGFjdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCBhdCBsZWFzZWQgb25lIGxpbmsgaXMgYWN0aXZlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFzQWN0aXZlTGlua3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmxpbmsgJiYgdGhpcy5pc0xpbmtBY3RpdmUodGhpcy5saW5rKSkgfHxcclxuICAgICAgICAgICAgKHRoaXMubGlua1dpdGhIcmVmICYmIHRoaXMuaXNMaW5rQWN0aXZlKHRoaXMubGlua1dpdGhIcmVmKSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|