@c8y/ngx-components 1021.11.1 → 1021.21.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/alarms/alarms-date-filter.component.d.ts +34 -0
- package/alarms/alarms-date-filter.component.d.ts.map +1 -0
- package/alarms/alarms-filter.component.d.ts +2 -1
- package/alarms/alarms-filter.component.d.ts.map +1 -1
- package/alarms/alarms-list.component.d.ts +2 -17
- package/alarms/alarms-list.component.d.ts.map +1 -1
- package/alarms/alarms-view.service.d.ts +5 -2
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.component.d.ts +3 -1
- package/alarms/alarms.component.d.ts.map +1 -1
- package/alarms/alarms.model.d.ts +47 -1
- package/alarms/alarms.model.d.ts.map +1 -1
- package/alarms/alarms.module.d.ts +15 -13
- package/alarms/alarms.module.d.ts.map +1 -1
- package/branding/shared/data/store-branding.service.d.ts +5 -0
- package/branding/shared/data/store-branding.service.d.ts.map +1 -1
- package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.model.d.ts +1 -0
- package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts +7 -5
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.component.d.ts +4 -7
- package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.service.d.ts +4 -4
- package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts +2 -2
- package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts +19 -6
- package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
- package/core/action-bar/action-bar-item.component.d.ts +1 -1
- package/core/action-bar/action-bar-item.component.d.ts.map +1 -1
- package/core/action-bar/action-bar.module.d.ts +6 -6
- package/core/action-bar/action-bar.module.d.ts.map +1 -1
- package/core/bootstrap/bootstrap.component.d.ts +3 -1
- package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
- package/core/common/aggregation/aggregation.model.d.ts +39 -0
- package/core/common/aggregation/aggregation.model.d.ts.map +1 -0
- package/core/common/aggregation/aggregation.service.d.ts +17 -0
- package/core/common/aggregation/aggregation.service.d.ts.map +1 -0
- package/core/common/index.d.ts +4 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/inter-app.service.d.ts +48 -0
- package/core/common/inter-app.service.d.ts.map +1 -0
- package/core/common/interval-based-reload.abstract.d.ts +120 -0
- package/core/common/interval-based-reload.abstract.d.ts.map +1 -0
- package/core/dashboard/dashboard.module.d.ts +26 -20
- package/core/dashboard/dashboard.module.d.ts.map +1 -1
- package/core/dashboard/index.d.ts +3 -0
- package/core/dashboard/index.d.ts.map +1 -1
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +31 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts +17 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts +4 -0
- package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/index.d.ts +8 -0
- package/core/dashboard/widget-auto-refresh-context/index.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts +7 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +29 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts +15 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts +169 -0
- package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts.map +1 -0
- package/core/dashboard/widget-change-event.model.d.ts +1 -1
- package/core/dashboard/widget-change-event.model.d.ts.map +1 -1
- package/core/dashboard/widgets-dashboard.component.d.ts +6 -3
- package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts +2 -1
- package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +12 -8
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +7 -26
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
- package/core/header/header.module.d.ts +18 -18
- package/core/header/header.module.d.ts.map +1 -1
- package/core/header/title/title.component.d.ts +1 -1
- package/core/header/title/title.component.d.ts.map +1 -1
- package/core/i18n/cached-locale-dictionary.service.d.ts +5 -1
- package/core/i18n/cached-locale-dictionary.service.d.ts.map +1 -1
- package/core/i18n/i18n.module.d.ts +0 -4
- package/core/i18n/i18n.module.d.ts.map +1 -1
- package/core/i18n/index.d.ts +2 -1
- package/core/i18n/index.d.ts.map +1 -1
- package/core/i18n/translation-loader.service.d.ts +50 -0
- package/core/i18n/translation-loader.service.d.ts.map +1 -0
- package/core/i18n/translation-utils.d.ts +14 -0
- package/core/i18n/translation-utils.d.ts.map +1 -0
- package/core/plugins/plugins-resolve.service.d.ts +7 -10
- package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts +2 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +11 -2
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selection.model.d.ts +6 -0
- package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
- package/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +117 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts +90 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +160 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +89 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts +11 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts +27 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts +12 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts +22 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts +3 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts +9 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts +56 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts +21 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts +14 -0
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +232 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -0
- package/datapoints-export-selector/index.d.ts +15 -0
- package/datapoints-export-selector/index.d.ts.map +1 -0
- package/device-list/device-list.module.d.ts +4 -2
- package/device-list/device-list.module.d.ts.map +1 -1
- package/esm2022/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +4 -4
- package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +3 -3
- package/esm2022/alarms/alarms-date-filter.component.mjs +139 -0
- package/esm2022/alarms/alarms-filter.component.mjs +11 -5
- package/esm2022/alarms/alarms-list.component.mjs +5 -16
- package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
- package/esm2022/alarms/alarms-view.service.mjs +16 -2
- package/esm2022/alarms/alarms.component.mjs +12 -6
- package/esm2022/alarms/alarms.model.mjs +17 -1
- package/esm2022/alarms/alarms.module.mjs +11 -4
- package/esm2022/branding/shared/data/store-branding.service.mjs +24 -1
- package/esm2022/branding/shared/lazy/branding/branding.component.mjs +3 -1
- package/esm2022/context-dashboard/context-dashboard.component.mjs +4 -4
- package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
- package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -21
- package/esm2022/context-dashboard/dashboard-detail.component.mjs +8 -16
- package/esm2022/context-dashboard/dashboard-detail.service.mjs +13 -6
- package/esm2022/context-dashboard/dashboard-settings/dashboard-general-settings.component.mjs +3 -3
- package/esm2022/context-dashboard/dashboard-settings/typed-dashboard-settings.component.mjs +32 -11
- package/esm2022/core/action-bar/action-bar-item.component.mjs +3 -3
- package/esm2022/core/action-bar/action-bar.component.mjs +3 -3
- package/esm2022/core/action-bar/action-bar.module.mjs +16 -5
- package/esm2022/core/bootstrap/bootstrap.component.mjs +21 -16
- package/esm2022/core/common/aggregation/aggregation.model.mjs +46 -0
- package/esm2022/core/common/aggregation/aggregation.service.mjs +34 -0
- package/esm2022/core/common/humanize-app-name.model.mjs +2 -2
- package/esm2022/core/common/humanize-app-name.pipe.mjs +2 -2
- package/esm2022/core/common/index.mjs +5 -1
- package/esm2022/core/common/inter-app.service.mjs +76 -0
- package/esm2022/core/common/interval-based-reload.abstract.mjs +110 -0
- package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
- package/esm2022/core/dashboard/dashboard-child.component.mjs +6 -5
- package/esm2022/core/dashboard/dashboard.module.mjs +22 -4
- package/esm2022/core/dashboard/index.mjs +4 -1
- package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +101 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.mjs +50 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.mjs +7 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/index.mjs +8 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.mjs +18 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +127 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.mjs +5 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs +233 -0
- package/esm2022/core/dashboard/widget-change-event.model.mjs +1 -1
- package/esm2022/core/dashboard/widgets-dashboard.component.mjs +35 -30
- package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +4 -4
- package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +2 -2
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-helper.service.mjs +3 -2
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +5 -5
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +7 -4
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +37 -36
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -72
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +9 -3
- package/esm2022/core/header/header.module.mjs +7 -5
- package/esm2022/core/header/title/title.component.mjs +3 -3
- package/esm2022/core/i18n/cached-locale-dictionary.service.mjs +1 -1
- package/esm2022/core/i18n/i18n.module.mjs +7 -14
- package/esm2022/core/i18n/index.mjs +3 -2
- package/esm2022/core/i18n/translate.parser.mjs +2 -2
- package/esm2022/core/i18n/translation-loader.service.mjs +132 -0
- package/esm2022/core/i18n/translation-utils.mjs +24 -0
- package/esm2022/core/list-display-switch/list-display-switch.component.mjs +3 -3
- package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -37
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.mjs +13 -6
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +22 -5
- package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
- package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.mjs +5 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +407 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +207 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +467 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +187 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +27 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +41 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +23 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.mjs +42 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.mjs +120 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.mjs +282 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.mjs +76 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.mjs +46 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +42 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +43 -0
- package/esm2022/datapoints-export-selector/index.mjs +15 -0
- package/esm2022/device-list/add-smart-group.component.mjs +4 -3
- package/esm2022/device-list/device-list.module.mjs +22 -4
- package/esm2022/interval-picker/c8y-ngx-components-interval-picker.mjs +5 -0
- package/esm2022/interval-picker/index.mjs +3 -0
- package/esm2022/interval-picker/interval-picker.component.mjs +68 -0
- package/esm2022/interval-picker/interval-picker.model.mjs +47 -0
- package/esm2022/map/cluster-map.component.mjs +41 -13
- package/esm2022/map/map-status.component.mjs +6 -5
- package/esm2022/map/map.component.mjs +9 -5
- package/esm2022/map/map.model.mjs +1 -1
- package/esm2022/translation-editor/c8y-ngx-components-translation-editor.mjs +5 -0
- package/esm2022/translation-editor/data/c8y-ngx-components-translation-editor-data.mjs +5 -0
- package/esm2022/translation-editor/data/index.mjs +2 -0
- package/esm2022/translation-editor/data/translation-store.service.mjs +175 -0
- package/esm2022/translation-editor/index.mjs +10 -0
- package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs +70 -0
- package/esm2022/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.mjs +5 -0
- package/esm2022/translation-editor/lazy/index.mjs +2 -0
- package/esm2022/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.mjs +53 -0
- package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +124 -0
- package/esm2022/translation-editor/translation-editor-naviagtor-factory.service.mjs +31 -0
- package/esm2022/widgets/cockpit/index.mjs +4 -2
- package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
- package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +6 -2
- package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +6 -2
- package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +6 -2
- package/esm2022/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +5 -0
- package/esm2022/widgets/definitions/datapoints-table/index.mjs +34 -0
- package/esm2022/widgets/definitions/index.mjs +2 -1
- package/esm2022/widgets/definitions/map/index.mjs +4 -2
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +29 -15
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +57 -25
- package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +2 -1
- package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +19 -21
- package/esm2022/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +5 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +383 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +124 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.mjs +191 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.mjs +36 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.mjs +45 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +116 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +116 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.mjs +43 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +282 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +430 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.mjs +75 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +76 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +52 -0
- package/esm2022/widgets/implementations/datapoints-table/date-range-picker.component.mjs +68 -0
- package/esm2022/widgets/implementations/datapoints-table/index.mjs +10 -0
- package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +19 -11
- package/esm2022/widgets/implementations/map/map-widget.component.mjs +20 -2
- package/esm2022/widgets/implementations/map/map-widget.model.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +5 -5
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +189 -31
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +23 -0
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -0
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +135 -91
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +37 -13
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1928 -0
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-device-list.mjs +24 -5
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs +120 -0
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-map.mjs +52 -19
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +181 -0
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +236 -0
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +46 -0
- package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +3 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +41 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +3 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +101 -58
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1967 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +37 -11
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +5093 -4369
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/interval-picker/c8y-ngx-components-interval-picker.d.ts.map +1 -0
- package/interval-picker/index.d.ts +3 -0
- package/interval-picker/index.d.ts.map +1 -0
- package/{core/dashboard/wiget-time-context/interval-picker → interval-picker}/interval-picker.component.d.ts +10 -2
- package/interval-picker/interval-picker.component.d.ts.map +1 -0
- package/interval-picker/interval-picker.model.d.ts +15 -0
- package/interval-picker/interval-picker.model.d.ts.map +1 -0
- package/locales/de.po +289 -18
- package/locales/en.po +12 -0
- package/locales/en_US.po +3 -0
- package/locales/es.po +253 -18
- package/locales/fr.po +253 -18
- package/locales/ja_JP.po +282 -18
- package/locales/locales.pot +266 -21
- package/locales/nl.po +253 -18
- package/locales/pl.po +253 -18
- package/locales/pt_BR.po +253 -18
- package/map/cluster-map.component.d.ts +8 -3
- package/map/cluster-map.component.d.ts.map +1 -1
- package/map/map-status.component.d.ts +0 -3
- package/map/map-status.component.d.ts.map +1 -1
- package/map/map.component.d.ts +4 -2
- package/map/map.component.d.ts.map +1 -1
- package/map/map.model.d.ts +2 -1
- package/map/map.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/translation-editor/c8y-ngx-components-translation-editor.d.ts.map +1 -0
- package/translation-editor/data/c8y-ngx-components-translation-editor-data.d.ts.map +1 -0
- package/translation-editor/data/index.d.ts +2 -0
- package/translation-editor/data/index.d.ts.map +1 -0
- package/translation-editor/data/translation-store.service.d.ts +61 -0
- package/translation-editor/data/translation-store.service.d.ts.map +1 -0
- package/translation-editor/index.d.ts +2 -0
- package/translation-editor/index.d.ts.map +1 -0
- package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts +30 -0
- package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts.map +1 -0
- package/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.d.ts.map +1 -0
- package/translation-editor/lazy/index.d.ts +2 -0
- package/translation-editor/lazy/index.d.ts.map +1 -0
- package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts +22 -0
- package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts.map +1 -0
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts +34 -0
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -0
- package/translation-editor/translation-editor-naviagtor-factory.service.d.ts +11 -0
- package/translation-editor/translation-editor-naviagtor-factory.service.d.ts.map +1 -0
- package/widgets/cockpit/index.d.ts +13 -0
- package/widgets/cockpit/index.d.ts.map +1 -1
- package/widgets/cockpit-exports/index.d.ts +6 -0
- package/widgets/cockpit-exports/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts +2 -0
- package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +2 -0
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/recent-alarms/index.d.ts +2 -0
- package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.d.ts.map +1 -0
- package/widgets/definitions/datapoints-table/index.d.ts +14 -0
- package/widgets/definitions/datapoints-table/index.d.ts.map +1 -0
- package/widgets/definitions/index.d.ts +1 -0
- package/widgets/definitions/index.d.ts.map +1 -1
- package/widgets/definitions/map/index.d.ts +2 -1
- package/widgets/definitions/map/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +5 -9
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +17 -10
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +5 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +5 -11
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +129 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +56 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts +88 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts +19 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts +26 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +63 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts +38 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts +13 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +123 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +196 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts +41 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +175 -0
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +12 -0
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts +34 -0
- package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/index.d.ts +10 -0
- package/widgets/implementations/datapoints-table/index.d.ts.map +1 -0
- package/widgets/implementations/map/map-widget-config.component.d.ts +4 -4
- package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget.component.d.ts +8 -3
- package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget.model.d.ts +4 -3
- package/widgets/implementations/map/map-widget.model.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.d.ts.map +0 -1
- package/core/i18n/translate.loader.d.ts +0 -31
- package/core/i18n/translate.loader.d.ts.map +0 -1
- package/esm2022/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.mjs +0 -55
- package/esm2022/core/i18n/translate.loader.mjs +0 -71
|
@@ -97,6 +97,29 @@ export class StoreBrandingService {
|
|
|
97
97
|
const variants = await this.getMetadataOfBrandingBinaries(mappedVersions);
|
|
98
98
|
return { publicOptions, variants };
|
|
99
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* As the branding is not immediately available after creation, this method will wait for the branding to be present.
|
|
102
|
+
* @param version The version of the branding to be retrieved.
|
|
103
|
+
*/
|
|
104
|
+
async waitForBrandingToBePresent(version) {
|
|
105
|
+
const numberOfAttempts = 120;
|
|
106
|
+
const sleepDurationInSeconds = 1;
|
|
107
|
+
for (let i = 0; i < numberOfAttempts; i++) {
|
|
108
|
+
try {
|
|
109
|
+
// do not sleep before the first attempt
|
|
110
|
+
if (i !== 0) {
|
|
111
|
+
await new Promise(resolve => setTimeout(resolve, sleepDurationInSeconds * 1_000));
|
|
112
|
+
}
|
|
113
|
+
await this.getBrandingOptionsForVersion(version);
|
|
114
|
+
console.info(`Branding "${version}" available now.`);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
console.warn(`Branding "${version}" not yet present, retrying in ${sleepDurationInSeconds} seconds...`, e);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
throw new Error(`Branding "${version}" not available after ${numberOfAttempts * sleepDurationInSeconds} seconds, giving up.`);
|
|
122
|
+
}
|
|
100
123
|
/**
|
|
101
124
|
* Will create a the initial branding based on the currently applied CSS variables.
|
|
102
125
|
*/
|
|
@@ -337,4 +360,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
337
360
|
type: Injectable,
|
|
338
361
|
args: [{ providedIn: 'root' }]
|
|
339
362
|
}], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i1.InventoryService }, { type: i1.InventoryBinaryService }, { type: i2.ZipService }, { type: i1.FetchClient }, { type: i3.BrandingVersionService }, { type: i2.AppStateService }, { type: i4.StaticAssetsService }, { type: i2.ThemeSwitcherService }] });
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYnJhbmRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9kYXRhL3N0b3JlLWJyYW5kaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixXQUFXLEVBSVgsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7O0FBMkIxRjs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CLFlBQ1Usa0JBQXNDLEVBQ3RDLFNBQTJCLEVBQzNCLE1BQThCLEVBQzlCLEdBQWUsRUFDZixLQUFrQixFQUNsQixzQkFBOEMsRUFDOUMsUUFBeUIsRUFDekIsWUFBaUMsRUFDakMsYUFBbUM7UUFSbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxjQUFT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QW9CLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hGLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3RixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQjtRQUNsQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzhHQTdZVSxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQURQLE1BQU07OzJGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uVHlwZSxcbiAgRmV0Y2hDbGllbnQsXG4gIElBcHBsaWNhdGlvbixcbiAgSUFwcGxpY2F0aW9uQmluYXJ5LFxuICBJTWFuYWdlZE9iamVjdCxcbiAgSW52ZW50b3J5QmluYXJ5U2VydmljZSxcbiAgSW52ZW50b3J5U2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UsIFRoZW1lU3dpdGNoZXJTZXJ2aWNlLCBaaXBTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBkZWZlciwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlIH0gZnJvbSAnLi9icmFuZGluZy12ZXJzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnJhbmRpbmdPcHRpb25zSnNvbiwgYWxsQnJhbmRpbmdDU1NWYXJzLCBudW1iZXJCcmFuZGluZ1ZhcnMgfSBmcm9tICcuL2JyYW5kaW5nLnR5cGUnO1xuaW1wb3J0IHsgU3RhdGljQXNzZXQsIFN0YXRpY0Fzc2V0c1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3N0YXRpYy1hc3NldHMvZGF0YSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmRWZXJzaW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICByZXZpc2lvbjogbnVtYmVyO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHRhZ3M6IHN0cmluZ1tdO1xuICBvd25lcj86IHN0cmluZztcbiAgbGFzdFVwZGF0ZWQ/OiBzdHJpbmc7XG4gIHB1YmxpY09wdGlvbnNBcHA/OiBJQXBwbGljYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmRpbmdGaWxlRGV0YWlscyB7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGJsb2I6IEJsb2I7XG4gIGpzb25Db250ZW50PzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5kaW5nRmlsZURldGFpbHNMZWdhY3kge1xuICBwYXRoOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGJsb2I/OiBCbG9iO1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICB1cmxXcmFwcGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdG8gbG9hZCBhbmQgc3RvcmUgdGhlIGJyYW5kaW5nIG9mIHRoZSB0ZW5hbnQuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3RvcmVCcmFuZGluZ1NlcnZpY2Uge1xuICByZWFkb25seSBmaWxlTmFtZXMgPSB7XG4gICAgb3B0aW9uczogJ29wdGlvbnMuanNvbicsXG4gICAgbWFuaWZlc3Q6ICdjdW11bG9jaXR5Lmpzb24nLFxuICAgIGV4cG9ydFppcE5hbWU6ICdwdWJsaWMtb3B0aW9ucy56aXAnXG4gIH0gYXMgY29uc3Q7XG4gIHJlYWRvbmx5IG1hbmlmZXN0VmFsdWVzID0ge1xuICAgIG5hbWU6ICdwdWJsaWMtb3B0aW9ucycsXG4gICAgY29udGV4dFBhdGg6ICdwdWJsaWMtb3B0aW9ucycsXG4gICAga2V5OiAncHVibGljLW9wdGlvbnMta2V5JyxcbiAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIGNvbnRhaW5pbmcgc3RhdGljIGFzc2V0cyB1c2VkIGJ5IGUuZy4gYnJhbmRpbmcuJyxcbiAgICBub0FwcFN3aXRjaGVyOiB0cnVlLFxuICAgIHR5cGU6IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQsXG4gICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRURcbiAgfSBhcyBjb25zdCBzYXRpc2ZpZXMgSUFwcGxpY2F0aW9uO1xuICByZWZyZXNoVHJpZ2dlckJyYW5kaW5nVmFyaWFudHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KG51bGwpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmluYXJ5OiBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwOiBaaXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmV0Y2g6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgYnJhbmRpbmdWZXJzaW9uU2VydmljZTogQnJhbmRpbmdWZXJzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdGF0aWNBc3NldHM6IFN0YXRpY0Fzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aGVtZVN3aXRjaGVyOiBUaGVtZVN3aXRjaGVyU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGBsYXRlc3RgIHRhZyBvbiB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgdmVyc2lvbi4gTWFraW5nIGl0IHRoZSBnbG9iYWwgYWN0aXZlIGJyYW5kaW5nLlxuICAgKi9cbiAgYXN5bmMgbWFya0FzQWN0aXZlKGJyYW5kaW5nVmVyc2lvbjogQnJhbmRWZXJzaW9uLCBhcHA/OiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG4gICAgY29uc3QgdGFncyA9IGJyYW5kaW5nVmVyc2lvbi50YWdzIHx8IFtdO1xuICAgIGNvbnN0IHZlcnNpb24gPSBicmFuZGluZ1ZlcnNpb24udmVyc2lvbjtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyhwdWJsaWNPcHRpb25zLCB2ZXJzaW9uLCBbLi4udGFncywgJ2xhdGVzdCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBicmFuZGluZ3Mgb2YgdGhlIHRlbmFudC5cbiAgICogSWYgbm8gcHVibGljIG9wdGlvbnMgYXBwIGlzIGZvdW5kLCBwdWJsaWNPcHRpb25zIHdpbGwgYmUgdW5kZWZpbmVkIGFuZCB2YXJpYW50cyBhbiBlbXB0eSBhcnJheS5cbiAgICogRm9yIG9sZCBicmFuZGluZ3MgKGNyZWF0ZWQgd2l0aG91dCB2ZXJzaW9uaW5nKSBhIGRlZmF1bHQgdmVyc2lvbiBpcyByZXR1cm5lZC5cbiAgICovXG4gIGFzeW5jIGxvYWRCcmFuZGluZ1ZhcmlhbnRzKFxuICAgIGFwcD86IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPHsgcHVibGljT3B0aW9uczogSUFwcGxpY2F0aW9uIHwgdW5kZWZpbmVkOyB2YXJpYW50czogQnJhbmRWZXJzaW9uW10gfT4ge1xuICAgIGNvbnN0IHB1YmxpY09wdGlvbnMgPSBhcHAgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBpZiAoIXB1YmxpY09wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7IHB1YmxpY09wdGlvbnM6IHVuZGVmaW5lZCwgdmFyaWFudHM6IFtdIH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGF0YTogdmVyc2lvbnMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RWZXJzaW9ucyhwdWJsaWNPcHRpb25zKTtcbiAgICBsZXQgbWFwcGVkVmVyc2lvbnM6IEJyYW5kVmVyc2lvbltdID1cbiAgICAgIHZlcnNpb25zXG4gICAgICAgID8ubWFwKHRtcCA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgaXRlcmF0aW9uIH0gPVxuICAgICAgICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2Uuc3BsaXRCcmFuZGluZ0ludG9OYW1lQW5kSXRlcmF0aW9uKHRtcC52ZXJzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJldmlzaW9uOiBpdGVyYXRpb24sXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGlkOiB0bXAuYmluYXJ5SWQsXG4gICAgICAgICAgICAgIHZlcnNpb246IHRtcC52ZXJzaW9uLFxuICAgICAgICAgICAgICB0YWdzOiB0bXAudGFncyB8fCBbXSxcbiAgICAgICAgICAgICAgcHVibGljT3B0aW9uc0FwcDogcHVibGljT3B0aW9uc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBwYXJzZSB2ZXJzaW9uJywgdG1wLCBlKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICA/LmZpbHRlcihCb29sZWFuKSB8fCBbXTtcbiAgICBpZiAoIXZlcnNpb25zICYmIHB1YmxpY09wdGlvbnMuYWN0aXZlVmVyc2lvbklkKSB7XG4gICAgICBtYXBwZWRWZXJzaW9ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBpZDogcHVibGljT3B0aW9ucy5hY3RpdmVWZXJzaW9uSWQsXG4gICAgICAgICAgdmVyc2lvbjogJ2RlZmF1bHQtMScsXG4gICAgICAgICAgcmV2aXNpb246IDEsXG4gICAgICAgICAgdGFnczogWydsYXRlc3QnLCAnZGVmYXVsdCddLFxuICAgICAgICAgIHB1YmxpY09wdGlvbnNBcHA6IHB1YmxpY09wdGlvbnNcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdCB2YXJpYW50cyA9IGF3YWl0IHRoaXMuZ2V0TWV0YWRhdGFPZkJyYW5kaW5nQmluYXJpZXMobWFwcGVkVmVyc2lvbnMpO1xuICAgIHJldHVybiB7IHB1YmxpY09wdGlvbnMsIHZhcmlhbnRzIH07XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBjcmVhdGUgYSB0aGUgaW5pdGlhbCBicmFuZGluZyBiYXNlZCBvbiB0aGUgY3VycmVudGx5IGFwcGxpZWQgQ1NTIHZhcmlhYmxlcy5cbiAgICovXG4gIGFzeW5jIGdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFsbFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IHRoZW1lVG9SZXRyaWV2ZVZhcnMgPSBbJ2xpZ2h0JywgJ2RhcmsnXSBhcyBjb25zdDtcbiAgICBjb25zdCB1bnJldHJpZXZhYmxlVmFycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCB0aGVtZSBvZiB0aGVtZVRvUmV0cmlldmVWYXJzKSB7XG4gICAgICB0aGlzLnRoZW1lU3dpdGNoZXIudGVtcG9yYXJ5Q2hhbmdlVGhlbWUodGhlbWUpO1xuICAgICAgY29uc3Qgc3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTtcbiAgICAgIGNvbnN0IHZhcmlhYmxlc1RvU2tpcCA9IFtcbiAgICAgICAgJ25hdmlnYXRvci1wbGF0Zm9ybS1sb2dvJyxcbiAgICAgICAgJ2JyYW5kLWxvZ28taW1nJ1xuICAgICAgXSBzYXRpc2ZpZXMgKHR5cGVvZiBhbGxCcmFuZGluZ0NTU1ZhcnMpW251bWJlcl1bXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGFsbEJyYW5kaW5nQ1NTVmFyc1xuICAgICAgICAuZmlsdGVyKGNzc1ZhciA9PiAhdmFyaWFibGVzVG9Ta2lwLmluY2x1ZGVzKGNzc1ZhciBhcyBhbnkpKVxuICAgICAgICAucmVkdWNlKChwcmV2LCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBkaXJlY3RWYWx1ZSA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7a2V5fWApO1xuICAgICAgICAgIGNvbnN0IGM4eVByZWZpeGVkVmFsdWUgPSBzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShgLS1jOHktJHtrZXl9YCk7XG4gICAgICAgICAgY29uc3QgbmV3S2V5ID0gdGhlbWUgPT09ICdsaWdodCcgPyBrZXkgOiBgZGFyay0ke2tleX1gO1xuICAgICAgICAgIGlmICghZGlyZWN0VmFsdWUgJiYgIWM4eVByZWZpeGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHVucmV0cmlldmFibGVWYXJzLnB1c2gobmV3S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyB8IG51bWJlciA9IGRpcmVjdFZhbHVlIHx8IGM4eVByZWZpeGVkVmFsdWU7XG4gICAgICAgICAgaWYgKG51bWJlckJyYW5kaW5nVmFycy5pbmNsdWRlcyhrZXkgYXMgYW55KSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlKC9bQS1aYS16XS9nLCAnJykudHJpbSgpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgbnVtYmVyIGZvciBcIiR7a2V5fVwiIHZhbHVlIHRoYXQgZmFpbGVkIHRvIHBhcnNlOiBcIiR7dmFsdWV9XCJgLFxuICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHsgW25ld0tleV06IHZhbHVlIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgICBPYmplY3QuYXNzaWduKGFsbFZhcmlhYmxlcywgdmFsdWVzKTtcbiAgICB9XG4gICAgdGhpcy50aGVtZVN3aXRjaGVyLnJlc2V0VGVtcG9yYXJ5VGhlbWUoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVB1YmxpY09wdGlvbnNBcHBGcm9tSW5oZXJpdGVkT3B0aW9ucyhhbGxWYXJpYWJsZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICB9XG4gIH1cblxuICBnZXRaaXBGb3JCaW5hcnkoXG4gICAgYmluYXJ5SWQ6IHN0cmluZyxcbiAgICBmaWxlTmFtZTogc3RyaW5nID0gdGhpcy5maWxlTmFtZXMuZXhwb3J0WmlwTmFtZVxuICApOiBPYnNlcnZhYmxlPEZpbGU+IHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5iaW5hcnkuZG93bmxvYWQoYmluYXJ5SWQpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSksXG4gICAgICBtYXAoYmxvYiA9PiBuZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHB1YmxpYyBvcHRpb25zIGFwcCBhbmQgdGhlcmVmb3JlIGFsbCBicmFuZGluZ3MuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnMgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGUocHVibGljT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRW5oYW5jZXMgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIHZlcnNpb25zIHdpdGggbWV0YWRhdGEgZnJvbSB0aGUgbGlua2VkIGJpbmFyaWVzLlxuICAgKiBJdCB3aWxsIGFkZCB0aGUgb3duZXIgYW5kIGxhc3RVcGRhdGVkIGZpZWxkcyB0byB0aGUgdmVyc2lvbnMuXG4gICAqIFRoZSBwcm92aWRlZCBhcnJheSBpcyBhbHRlcmVkLlxuICAgKi9cbiAgYXN5bmMgZ2V0TWV0YWRhdGFPZkJyYW5kaW5nQmluYXJpZXModmVyc2lvbnM6IEJyYW5kVmVyc2lvbltdKTogUHJvbWlzZTxCcmFuZFZlcnNpb25bXT4ge1xuICAgIGNvbnN0IGJpbmFyeUlkcyA9IHVuaXEodmVyc2lvbnMubWFwKHRtcCA9PiB0bXAuaWQpKTtcbiAgICBpZiAoIWJpbmFyeUlkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2ZXJzaW9ucztcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiBtZXRhZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBpZHM6IGJpbmFyeUlkcy5qb2luKCcsJyksXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH0pO1xuICAgIHJldHVybiB2ZXJzaW9ucy5tYXAodmVyc2lvbiA9PiB7XG4gICAgICBjb25zdCBtZXRhZGF0YUZvclZlcnNpb24gPVxuICAgICAgICBtZXRhZGF0YS5maW5kKHRtcCA9PiB0bXAuaWQgPT09IHZlcnNpb24uaWQpIHx8ICh7fSBhcyBJTWFuYWdlZE9iamVjdCk7XG4gICAgICBjb25zdCB7IG93bmVyLCBsYXN0VXBkYXRlZCB9ID0gbWV0YWRhdGFGb3JWZXJzaW9uO1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odmVyc2lvbiwgeyBvd25lciwgbGFzdFVwZGF0ZWQgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIGFzIGEgbmV3IHZlcnNpb24gZm9yIHRoZSBwdWJsaWMgb3B0aW9ucyBhcHAuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIHNhdmVCcmFuZGluZyhcbiAgICBibG9iOiBCbG9iIHwgRmlsZSxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgdGFnczogc3RyaW5nW10gPSBbXSxcbiAgICBwdWJsaWNPcHRpb25zQXBwPzogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8e1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBiaW5hcnk6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGNvbnN0IGZpbGUgPSBibG9iIGluc3RhbmNlb2YgRmlsZSA/IGJsb2IgOiBuZXcgRmlsZShbYmxvYl0sIGBwdWJsaWMtb3B0aW9ucy0ke3ZlcnNpb259LnppcGApO1xuICAgIGNvbnN0IHB1YmxpY09wdGlvbnMgPSBwdWJsaWNPcHRpb25zQXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG5cbiAgICBjb25zdCB7IGRhdGE6IGJpbmFyeSB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2VcbiAgICAgIC5iaW5hcnkocHVibGljT3B0aW9ucylcbiAgICAgIC51cGxvYWRBcHBsaWNhdGlvblZlcnNpb24oZmlsZSwgdmVyc2lvbiwgdGFncyk7XG4gICAgaWYgKCFwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCB8fCB0YWdzLmluY2x1ZGVzKCdsYXRlc3QnKSkge1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgaWQ6IHB1YmxpY09wdGlvbnMuaWQsXG4gICAgICAgIGFjdGl2ZVZlcnNpb25JZDogYCR7YmluYXJ5LmJpbmFyeUlkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gICAgcmV0dXJuIHsgdmVyc2lvbiwgYmluYXJ5LCB0YWdzIH07XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGJyYW5kaW5nIHZlcnNpb24gZnJvbSB0aGUgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBUaGUgcHVibGljIG9wdGlvbnMgYXBwIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGF2b2lkIGFub3RoZXIgcmVxdWVzdCBmb3IgaXQuXG4gICAqL1xuICBhc3luYyBkZWxldGVCcmFuZGluZ1ZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnMgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShwdWJsaWNPcHRpb25zLCB7IHZlcnNpb24gfSk7XG4gICAgdGhpcy5yZWZyZXNoVHJpZ2dlckJyYW5kaW5nVmFyaWFudHMubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJsb2Igb2YgYSB6aXAgZmlsZSBjb250YWluaW5nIHRoZSBwcm92aWRlZCBicmFuZGluZyBvcHRpb25zIChvcHRpb25zLmpzb24pIGFuZCB0aGUgbWFuaWZlc3QgKGN1bXVsb2NpdHkuanNvbikuXG4gICAqL1xuICBhc3luYyBnZXRCcmFuZGluZ1ppcChjb250ZW50OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBQcm9taXNlPEJsb2I+IHtcbiAgICBjb250ZW50Lmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGNvbnRlbnRBc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGNvbnRlbnQpO1xuICAgIGNvbnN0IHppcCA9IGF3YWl0IHRoaXMuemlwLmNyZWF0ZVppcChbXG4gICAgICB7IGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lcy5vcHRpb25zLCBibG9iOiBuZXcgQmxvYihbY29udGVudEFzU3RyaW5nXSkgfSxcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVzLm1hbmlmZXN0LCBibG9iOiBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkodGhpcy5tYW5pZmVzdFZhbHVlcyldKSB9XG4gICAgXSk7XG4gICAgcmV0dXJuIHppcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGJyYW5kaW5nIHZlcnNpb24gdG8gdGhlIHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgYWRkQnJhbmRpbmcoXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IEJyYW5kaW5nT3B0aW9uc0pzb24gPSB7fSxcbiAgICB0YWdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHB1YmxpY09wdGlvbnNBcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgemlwID0gYXdhaXQgdGhpcy5nZXRCcmFuZGluZ1ppcChjb250ZW50KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNhdmVCcmFuZGluZyh6aXAsIHZlcnNpb24sIHRhZ3MsIHB1YmxpY09wdGlvbnNBcHApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyYW5kaW5nIG9wdGlvbnMgZm9yIHRoZSBwcm92aWRlZCB2ZXJzaW9uLlxuICAgKiBJZiBubyBicmFuZGluZyB3YXMgZm91bmQgKGUuZy4gc3RhdHVzIDQwNCksIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICovXG4gIGFzeW5jIGdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24odmVyc2lvbj86IHN0cmluZyk6IFByb21pc2U8QnJhbmRpbmdPcHRpb25zSnNvbj4ge1xuICAgIGNvbnN0IHVybCA9IGAvYXBwcy9wdWJsaWMvcHVibGljLW9wdGlvbnMke3ZlcnNpb24gPyBgQCR7dmVyc2lvbn1gIDogJyd9LyR7dGhpcy5maWxlTmFtZXMub3B0aW9uc30/bm9jYWNoZT0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoLmZldGNoKHVybCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICByZXR1cm4gY29udGVudCBhcyBCcmFuZGluZ09wdGlvbnNKc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgbmV3IGl0ZXJhdGlvbiBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIGJyYW5kaW5nLlxuICAgKi9cbiAgYXN5bmMgc2F2ZUV4aXN0aW5nQnJhbmRpbmcoXG4gICAgYnJhbmRpbmc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY3VycmVudFZlcnNpb246IHN0cmluZyxcbiAgICB0YWdzT2ZDdXJyZW50VmVyc2lvbjogc3RyaW5nW10gPSBbXSxcbiAgICBuZXdWZXJzaW9uPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpO1xuICAgIGNvbnN0IHZlcnNpb25Ub0JlU2V0ID0gbmV3VmVyc2lvblxuICAgICAgPyB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbihuZXdWZXJzaW9uKVxuICAgICAgOiB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuYnVtcEJyYW5kaW5nSXRlcmF0aW9uKGN1cnJlbnRWZXJzaW9uKTtcblxuICAgIGNvbnN0IGZpbmFsVGFncyA9IHRhZ3NPZkN1cnJlbnRWZXJzaW9uO1xuICAgIC8vIG9ubHkgYXBwbHkgbGF0ZXN0IHRhZyBkaXJlY3RseVxuICAgIC8vIHRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIGxhdGVzdCB0YWcgaW4gdGhlIGJhY2tlbmQsIHRoYXQgYWxsb3dzIHRvIGRpcmVjdGx5IG1vdmUgaXQgd2hpbGUgdXBsb2FkaW5nIHRoZSBuZXcgdmVyc2lvbi5cbiAgICAvLyBmb3IgYWxsIG90aGVyIHRhZ3MgdGhpcyByZXN1bHRzIGluIGEgNDA5IGNvbmZsaWN0LiBXZSB0aGVyZWZvcmUgbmVlZCB0byBmaXJzdCBkZWxldGUgdGhlIG9sZCB2ZXJzaW9uLCBiZWZvcmUgc2V0dGluZyB0aGUgb3RoZXIgdGFncyBvbiB0aGUgbmV3IHZlcnNpb24uXG4gICAgaWYgKCFuZXdWZXJzaW9uKSB7XG4gICAgICB0YWdzT2ZDdXJyZW50VmVyc2lvbiA9IHRhZ3NPZkN1cnJlbnRWZXJzaW9uLmZpbHRlcih0YWcgPT4gdGFnID09PSAnbGF0ZXN0Jyk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkQnJhbmRpbmcodmVyc2lvblRvQmVTZXQsIGJyYW5kaW5nLCB0YWdzT2ZDdXJyZW50VmVyc2lvbiwgcHVibGljT3B0aW9ucyk7XG4gICAgaWYgKCFuZXdWZXJzaW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUJyYW5kaW5nVmVyc2lvbihjdXJyZW50VmVyc2lvbiwgcHVibGljT3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLnJlcy5zdGF0dXMgIT09IDQwNCkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKHB1YmxpY09wdGlvbnMsIHZlcnNpb25Ub0JlU2V0LCBmaW5hbFRhZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJzaW9uVG9CZVNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lcyBjdXJyZW50IGJyYW5kaW5nIG9wdGlvbnMgd2l0aCB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgdmFyaWFibGVzIGFuZCBjcmVhdGVzIGEgbmV3IHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogQW55IGFzc2V0cyBpbiB0aGUgYnJhbmRpbmcgd2lsbCBiZSBjbG9uZWQuXG4gICAqL1xuICBhc3luYyBjcmVhdGVQdWJsaWNPcHRpb25zQXBwRnJvbUluaGVyaXRlZE9wdGlvbnMoYnJhbmRpbmdWYXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8e1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBiaW5hcnk6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGxldCBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb247XG4gICAgbGV0IGZhbGxCYWNrQnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb24gPSB7fTtcbiAgICB0cnkge1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gYXdhaXQgdGhpcy5nZXRCcmFuZGluZ09wdGlvbnNGb3JWZXJzaW9uKCk7XG4gICAgICBmYWxsQmFja0JyYW5kaW5nID0gY2xvbmVEZWVwKGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZ2V0IGN1cnJlbnRseSBhcHBsaWVkIGJyYW5kaW5nLCBwcm9jZWVkaW5nIHdpdGggZW1wdHkgYnJhbmRpbmcuJywgZSk7XG4gICAgfVxuXG4gICAgaWYgKGJyYW5kaW5nVmFycykge1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gY3VycmVudGx5QXBwbGllZEJyYW5kaW5nIHx8IHt9O1xuICAgICAgY29uc3QgYnJhbmRpbmdDc3NWYXJzID0gY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLmJyYW5kaW5nQ3NzVmFycyB8fCB7fTtcbiAgICAgIE9iamVjdC5hc3NpZ24oYnJhbmRpbmdDc3NWYXJzLCBicmFuZGluZ1ZhcnMpO1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLmJyYW5kaW5nQ3NzVmFycyA9IGJyYW5kaW5nQ3NzVmFycztcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudGx5QXBwbGllZEJyYW5kaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IG9sZEFzc2V0cywgbmV3QXNzZXRzIH0gPSBhd2FpdCB0aGlzLnN0YXRpY0Fzc2V0cy5jbG9uZUFzc2V0c0ludG9UZW5hbnQoJ2JyYW5kaW5nJyk7XG4gICAgICAgIGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyA9IHRoaXMucmVwbGFjZUJyYW5kaW5nQXNzZXRzSW5CcmFuZGluZ09wdGlvbnMoXG4gICAgICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLFxuICAgICAgICAgIG9sZEFzc2V0cyxcbiAgICAgICAgICBuZXdBc3NldHNcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcmVsb2NhdGUgYnJhbmRpbmcgYXNzZXRzIGludG8gY3VycmVudCB0ZW5hbnQuJywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHVibGljT3B0aW9uc0FwcCA9IGF3YWl0IHRoaXMuY3JlYXRlUHVibGljT3B0aW9uc0FwcCgpO1xuXG4gICAgY29uc3QgZGVmYXVsdEJyYW5kaW5nTmFtZSA9IGBkZWZhdWx0YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFkZEJyYW5kaW5nKFxuICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24oZGVmYXVsdEJyYW5kaW5nTmFtZSksXG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgfHwge30sXG4gICAgICBbJ2xhdGVzdCcsIGRlZmF1bHRCcmFuZGluZ05hbWVdLFxuICAgICAgcHVibGljT3B0aW9uc0FwcFxuICAgICk7XG5cbiAgICBjb25zdCBmYWxsYmFja0JyYW5kaW5nTmFtZSA9IGBmYWxsYmFja2A7XG4gICAgYXdhaXQgdGhpcy5hZGRCcmFuZGluZyhcbiAgICAgIHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKGZhbGxiYWNrQnJhbmRpbmdOYW1lKSxcbiAgICAgIGZhbGxCYWNrQnJhbmRpbmcsXG4gICAgICBbZmFsbGJhY2tCcmFuZGluZ05hbWVdLFxuICAgICAgcHVibGljT3B0aW9uc0FwcFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBhc3NldHMgaW4gdGhlIGJyYW5kaW5nIG9wdGlvbnMgd2l0aCB0aGUgbmV3IGFzc2V0cy5cbiAgICogR29lcyB0aHJvdWdoIHRoZSBwcm92aWRlZCBgb2xkQXNzZXRzYCBhbmQgcmVwbGFjZXMgdGhlaXIgb2NjdXJyZW5jZXMgaW4gdGhlIGJyYW5kaW5nIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYG5ld0Fzc2V0c2AgZW50cnkgc2hhcmluZyB0aGUgc2FtZSBmaWxlTmFtZS5cbiAgICogUmV0dXJucyB0aGUgdXBkYXRlZCBicmFuZGluZyBvcHRpb25zLlxuICAgKi9cbiAgcmVwbGFjZUJyYW5kaW5nQXNzZXRzSW5CcmFuZGluZ09wdGlvbnMoXG4gICAgYnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb24sXG4gICAgb2xkQXNzZXRzOiBTdGF0aWNBc3NldFtdLFxuICAgIG5ld0Fzc2V0czogU3RhdGljQXNzZXRbXVxuICApOiBCcmFuZGluZ09wdGlvbnNKc29uIHtcbiAgICBsZXQgYnJhbmRpbmdBc0pTT05TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShicmFuZGluZyk7XG4gICAgZm9yIChjb25zdCBvbGRBc3NldCBvZiBvbGRBc3NldHMpIHtcbiAgICAgIGNvbnN0IG5ld0xvY2F0ZWRBc3NldCA9IG5ld0Fzc2V0cy5maW5kKHRtcCA9PiB0bXAuZmlsZU5hbWUgPT09IG9sZEFzc2V0LmZpbGVOYW1lKTtcbiAgICAgIGlmICghbmV3TG9jYXRlZEFzc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHBhdGggaXMgdGhlIHNhbWUsIHdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBpdC5cbiAgICAgIGlmIChvbGRBc3NldC5wYXRoID09PSBuZXdMb2NhdGVkQXNzZXQucGF0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogdXNlIHByb3BlciByZXBsYWNlQWxsIG9uY2UgaXQncyBhdmFpbGFibGUgd2l0aCBlczIwMjFcbiAgICAgIGJyYW5kaW5nQXNKU09OU3RyaW5nID0gYnJhbmRpbmdBc0pTT05TdHJpbmcuc3BsaXQob2xkQXNzZXQucGF0aCkuam9pbihuZXdMb2NhdGVkQXNzZXQucGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnBhcnNlKGJyYW5kaW5nQXNKU09OU3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UHVibGljT3B0aW9uc0FwcCgpIHtcbiAgICBsZXQgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlOYW1lKHRoaXMubWFuaWZlc3RWYWx1ZXMubmFtZSk7XG4gICAgYXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiBhcHAub3duZXI/LnRlbmFudD8uaWQgPT09IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZT8ubmFtZSk7XG5cbiAgICByZXR1cm4gYXBwc1swXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlUHVibGljT3B0aW9uc0FwcCgpIHtcbiAgICBjb25zdCB7IGRhdGE6IGFwcCB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKHRoaXMubWFuaWZlc3RWYWx1ZXMpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cbn1cbiJdfQ==
|
|
363
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYnJhbmRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9kYXRhL3N0b3JlLWJyYW5kaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixXQUFXLEVBSVgsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7O0FBMkIxRjs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CLFlBQ1Usa0JBQXNDLEVBQ3RDLFNBQTJCLEVBQzNCLE1BQThCLEVBQzlCLEdBQWUsRUFDZixLQUFrQixFQUNsQixzQkFBOEMsRUFDOUMsUUFBeUIsRUFDekIsWUFBaUMsRUFDakMsYUFBbUM7UUFSbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxjQUFT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LEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEYsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdGLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCO1FBQ2xDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7OEdBemFVLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTs7MkZBQ25CLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBGZXRjaENsaWVudCxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25CaW5hcnksXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICBJbnZlbnRvcnlTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSwgVGhlbWVTd2l0Y2hlclNlcnZpY2UsIFppcFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGRlZmVyLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJyYW5kaW5nVmVyc2lvblNlcnZpY2UgfSBmcm9tICcuL2JyYW5kaW5nLXZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBCcmFuZGluZ09wdGlvbnNKc29uLCBhbGxCcmFuZGluZ0NTU1ZhcnMsIG51bWJlckJyYW5kaW5nVmFycyB9IGZyb20gJy4vYnJhbmRpbmcudHlwZSc7XG5pbXBvcnQgeyBTdGF0aWNBc3NldCwgU3RhdGljQXNzZXRzU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvc3RhdGljLWFzc2V0cy9kYXRhJztcblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZFZlcnNpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHJldmlzaW9uOiBudW1iZXI7XG4gIHZlcnNpb246IHN0cmluZztcbiAgdGFnczogc3RyaW5nW107XG4gIG93bmVyPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlZD86IHN0cmluZztcbiAgcHVibGljT3B0aW9uc0FwcD86IElBcHBsaWNhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZGluZ0ZpbGVEZXRhaWxzIHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgYmxvYjogQmxvYjtcbiAganNvbkNvbnRlbnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmRpbmdGaWxlRGV0YWlsc0xlZ2FjeSB7XG4gIHBhdGg6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgYmxvYj86IEJsb2I7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHVybFdyYXBwZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2VydmljZSB0byBsb2FkIGFuZCBzdG9yZSB0aGUgYnJhbmRpbmcgb2YgdGhlIHRlbmFudC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTdG9yZUJyYW5kaW5nU2VydmljZSB7XG4gIHJlYWRvbmx5IGZpbGVOYW1lcyA9IHtcbiAgICBvcHRpb25zOiAnb3B0aW9ucy5qc29uJyxcbiAgICBtYW5pZmVzdDogJ2N1bXVsb2NpdHkuanNvbicsXG4gICAgZXhwb3J0WmlwTmFtZTogJ3B1YmxpYy1vcHRpb25zLnppcCdcbiAgfSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbWFuaWZlc3RWYWx1ZXMgPSB7XG4gICAgbmFtZTogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBjb250ZXh0UGF0aDogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBrZXk6ICdwdWJsaWMtb3B0aW9ucy1rZXknLFxuICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gY29udGFpbmluZyBzdGF0aWMgYXNzZXRzIHVzZWQgYnkgZS5nLiBicmFuZGluZy4nLFxuICAgIG5vQXBwU3dpdGNoZXI6IHRydWUsXG4gICAgdHlwZTogQXBwbGljYXRpb25UeXBlLkhPU1RFRCxcbiAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRFxuICB9IGFzIGNvbnN0IHNhdGlzZmllcyBJQXBwbGljYXRpb247XG4gIHJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4obnVsbCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXA6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZXRjaDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSBicmFuZGluZ1ZlcnNpb25TZXJ2aWNlOiBCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHN0YXRpY0Fzc2V0czogU3RhdGljQXNzZXRzU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU3dpdGNoZXI6IFRoZW1lU3dpdGNoZXJTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogU2V0cyB0aGUgYGxhdGVzdGAgdGFnIG9uIHRoZSBwcm92aWRlZCBicmFuZGluZyB2ZXJzaW9uLiBNYWtpbmcgaXQgdGhlIGdsb2JhbCBhY3RpdmUgYnJhbmRpbmcuXG4gICAqL1xuICBhc3luYyBtYXJrQXNBY3RpdmUoYnJhbmRpbmdWZXJzaW9uOiBCcmFuZFZlcnNpb24sIGFwcD86IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHB1YmxpY09wdGlvbnMgPSBhcHAgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBjb25zdCB0YWdzID0gYnJhbmRpbmdWZXJzaW9uLnRhZ3MgfHwgW107XG4gICAgY29uc3QgdmVyc2lvbiA9IGJyYW5kaW5nVmVyc2lvbi52ZXJzaW9uO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKHB1YmxpY09wdGlvbnMsIHZlcnNpb24sIFsuLi50YWdzLCAnbGF0ZXN0J10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyYW5kaW5ncyBvZiB0aGUgdGVuYW50LlxuICAgKiBJZiBubyBwdWJsaWMgb3B0aW9ucyBhcHAgaXMgZm91bmQsIHB1YmxpY09wdGlvbnMgd2lsbCBiZSB1bmRlZmluZWQgYW5kIHZhcmlhbnRzIGFuIGVtcHR5IGFycmF5LlxuICAgKiBGb3Igb2xkIGJyYW5kaW5ncyAoY3JlYXRlZCB3aXRob3V0IHZlcnNpb25pbmcpIGEgZGVmYXVsdCB2ZXJzaW9uIGlzIHJldHVybmVkLlxuICAgKi9cbiAgYXN5bmMgbG9hZEJyYW5kaW5nVmFyaWFudHMoXG4gICAgYXBwPzogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8eyBwdWJsaWNPcHRpb25zOiBJQXBwbGljYXRpb24gfCB1bmRlZmluZWQ7IHZhcmlhbnRzOiBCcmFuZFZlcnNpb25bXSB9PiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGFwcCB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGlmICghcHVibGljT3B0aW9ucykge1xuICAgICAgcmV0dXJuIHsgcHVibGljT3B0aW9uczogdW5kZWZpbmVkLCB2YXJpYW50czogW10gfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiB2ZXJzaW9ucyB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdFZlcnNpb25zKHB1YmxpY09wdGlvbnMpO1xuICAgIGxldCBtYXBwZWRWZXJzaW9uczogQnJhbmRWZXJzaW9uW10gPVxuICAgICAgdmVyc2lvbnNcbiAgICAgICAgPy5tYXAodG1wID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBpdGVyYXRpb24gfSA9XG4gICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5zcGxpdEJyYW5kaW5nSW50b05hbWVBbmRJdGVyYXRpb24odG1wLnZlcnNpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcmV2aXNpb246IGl0ZXJhdGlvbixcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaWQ6IHRtcC5iaW5hcnlJZCxcbiAgICAgICAgICAgICAgdmVyc2lvbjogdG1wLnZlcnNpb24sXG4gICAgICAgICAgICAgIHRhZ3M6IHRtcC50YWdzIHx8IFtdLFxuICAgICAgICAgICAgICBwdWJsaWNPcHRpb25zQXBwOiBwdWJsaWNPcHRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHBhcnNlIHZlcnNpb24nLCB0bXAsIGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgID8uZmlsdGVyKEJvb2xlYW4pIHx8IFtdO1xuICAgIGlmICghdmVyc2lvbnMgJiYgcHVibGljT3B0aW9ucy5hY3RpdmVWZXJzaW9uSWQpIHtcbiAgICAgIG1hcHBlZFZlcnNpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGlkOiBwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCxcbiAgICAgICAgICB2ZXJzaW9uOiAnZGVmYXVsdC0xJyxcbiAgICAgICAgICByZXZpc2lvbjogMSxcbiAgICAgICAgICB0YWdzOiBbJ2xhdGVzdCcsICdkZWZhdWx0J10sXG4gICAgICAgICAgcHVibGljT3B0aW9uc0FwcDogcHVibGljT3B0aW9uc1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhbnRzID0gYXdhaXQgdGhpcy5nZXRNZXRhZGF0YU9mQnJhbmRpbmdCaW5hcmllcyhtYXBwZWRWZXJzaW9ucyk7XG4gICAgcmV0dXJuIHsgcHVibGljT3B0aW9ucywgdmFyaWFudHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcyB0aGUgYnJhbmRpbmcgaXMgbm90IGltbWVkaWF0ZWx5IGF2YWlsYWJsZSBhZnRlciBjcmVhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCB3YWl0IGZvciB0aGUgYnJhbmRpbmcgdG8gYmUgcHJlc2VudC5cbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHZlcnNpb24gb2YgdGhlIGJyYW5kaW5nIHRvIGJlIHJldHJpZXZlZC5cbiAgICovXG4gIGFzeW5jIHdhaXRGb3JCcmFuZGluZ1RvQmVQcmVzZW50KHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG51bWJlck9mQXR0ZW1wdHMgPSAxMjA7XG4gICAgY29uc3Qgc2xlZXBEdXJhdGlvbkluU2Vjb25kcyA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkF0dGVtcHRzOyBpKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGRvIG5vdCBzbGVlcCBiZWZvcmUgdGhlIGZpcnN0IGF0dGVtcHRcbiAgICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgc2xlZXBEdXJhdGlvbkluU2Vjb25kcyAqIDFfMDAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5nZXRCcmFuZGluZ09wdGlvbnNGb3JWZXJzaW9uKHZlcnNpb24pO1xuICAgICAgICBjb25zb2xlLmluZm8oYEJyYW5kaW5nIFwiJHt2ZXJzaW9ufVwiIGF2YWlsYWJsZSBub3cuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBCcmFuZGluZyBcIiR7dmVyc2lvbn1cIiBub3QgeWV0IHByZXNlbnQsIHJldHJ5aW5nIGluICR7c2xlZXBEdXJhdGlvbkluU2Vjb25kc30gc2Vjb25kcy4uLmAsXG4gICAgICAgICAgZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQnJhbmRpbmcgXCIke3ZlcnNpb259XCIgbm90IGF2YWlsYWJsZSBhZnRlciAke251bWJlck9mQXR0ZW1wdHMgKiBzbGVlcER1cmF0aW9uSW5TZWNvbmRzfSBzZWNvbmRzLCBnaXZpbmcgdXAuYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBjcmVhdGUgYSB0aGUgaW5pdGlhbCBicmFuZGluZyBiYXNlZCBvbiB0aGUgY3VycmVudGx5IGFwcGxpZWQgQ1NTIHZhcmlhYmxlcy5cbiAgICovXG4gIGFzeW5jIGdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFsbFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IHRoZW1lVG9SZXRyaWV2ZVZhcnMgPSBbJ2xpZ2h0JywgJ2RhcmsnXSBhcyBjb25zdDtcbiAgICBjb25zdCB1bnJldHJpZXZhYmxlVmFycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCB0aGVtZSBvZiB0aGVtZVRvUmV0cmlldmVWYXJzKSB7XG4gICAgICB0aGlzLnRoZW1lU3dpdGNoZXIudGVtcG9yYXJ5Q2hhbmdlVGhlbWUodGhlbWUpO1xuICAgICAgY29uc3Qgc3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTtcbiAgICAgIGNvbnN0IHZhcmlhYmxlc1RvU2tpcCA9IFtcbiAgICAgICAgJ25hdmlnYXRvci1wbGF0Zm9ybS1sb2dvJyxcbiAgICAgICAgJ2JyYW5kLWxvZ28taW1nJ1xuICAgICAgXSBzYXRpc2ZpZXMgKHR5cGVvZiBhbGxCcmFuZGluZ0NTU1ZhcnMpW251bWJlcl1bXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGFsbEJyYW5kaW5nQ1NTVmFyc1xuICAgICAgICAuZmlsdGVyKGNzc1ZhciA9PiAhdmFyaWFibGVzVG9Ta2lwLmluY2x1ZGVzKGNzc1ZhciBhcyBhbnkpKVxuICAgICAgICAucmVkdWNlKChwcmV2LCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBkaXJlY3RWYWx1ZSA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7a2V5fWApO1xuICAgICAgICAgIGNvbnN0IGM4eVByZWZpeGVkVmFsdWUgPSBzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShgLS1jOHktJHtrZXl9YCk7XG4gICAgICAgICAgY29uc3QgbmV3S2V5ID0gdGhlbWUgPT09ICdsaWdodCcgPyBrZXkgOiBgZGFyay0ke2tleX1gO1xuICAgICAgICAgIGlmICghZGlyZWN0VmFsdWUgJiYgIWM4eVByZWZpeGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHVucmV0cmlldmFibGVWYXJzLnB1c2gobmV3S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyB8IG51bWJlciA9IGRpcmVjdFZhbHVlIHx8IGM4eVByZWZpeGVkVmFsdWU7XG4gICAgICAgICAgaWYgKG51bWJlckJyYW5kaW5nVmFycy5pbmNsdWRlcyhrZXkgYXMgYW55KSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlKC9bQS1aYS16XS9nLCAnJykudHJpbSgpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgbnVtYmVyIGZvciBcIiR7a2V5fVwiIHZhbHVlIHRoYXQgZmFpbGVkIHRvIHBhcnNlOiBcIiR7dmFsdWV9XCJgLFxuICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHsgW25ld0tleV06IHZhbHVlIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgICBPYmplY3QuYXNzaWduKGFsbFZhcmlhYmxlcywgdmFsdWVzKTtcbiAgICB9XG4gICAgdGhpcy50aGVtZVN3aXRjaGVyLnJlc2V0VGVtcG9yYXJ5VGhlbWUoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVB1YmxpY09wdGlvbnNBcHBGcm9tSW5oZXJpdGVkT3B0aW9ucyhhbGxWYXJpYWJsZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICB9XG4gIH1cblxuICBnZXRaaXBGb3JCaW5hcnkoXG4gICAgYmluYXJ5SWQ6IHN0cmluZyxcbiAgICBmaWxlTmFtZTogc3RyaW5nID0gdGhpcy5maWxlTmFtZXMuZXhwb3J0WmlwTmFtZVxuICApOiBPYnNlcnZhYmxlPEZpbGU+IHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5iaW5hcnkuZG93bmxvYWQoYmluYXJ5SWQpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSksXG4gICAgICBtYXAoYmxvYiA9PiBuZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHB1YmxpYyBvcHRpb25zIGFwcCBhbmQgdGhlcmVmb3JlIGFsbCBicmFuZGluZ3MuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnMgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGUocHVibGljT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRW5oYW5jZXMgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIHZlcnNpb25zIHdpdGggbWV0YWRhdGEgZnJvbSB0aGUgbGlua2VkIGJpbmFyaWVzLlxuICAgKiBJdCB3aWxsIGFkZCB0aGUgb3duZXIgYW5kIGxhc3RVcGRhdGVkIGZpZWxkcyB0byB0aGUgdmVyc2lvbnMuXG4gICAqIFRoZSBwcm92aWRlZCBhcnJheSBpcyBhbHRlcmVkLlxuICAgKi9cbiAgYXN5bmMgZ2V0TWV0YWRhdGFPZkJyYW5kaW5nQmluYXJpZXModmVyc2lvbnM6IEJyYW5kVmVyc2lvbltdKTogUHJvbWlzZTxCcmFuZFZlcnNpb25bXT4ge1xuICAgIGNvbnN0IGJpbmFyeUlkcyA9IHVuaXEodmVyc2lvbnMubWFwKHRtcCA9PiB0bXAuaWQpKTtcbiAgICBpZiAoIWJpbmFyeUlkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2ZXJzaW9ucztcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiBtZXRhZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBpZHM6IGJpbmFyeUlkcy5qb2luKCcsJyksXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH0pO1xuICAgIHJldHVybiB2ZXJzaW9ucy5tYXAodmVyc2lvbiA9PiB7XG4gICAgICBjb25zdCBtZXRhZGF0YUZvclZlcnNpb24gPVxuICAgICAgICBtZXRhZGF0YS5maW5kKHRtcCA9PiB0bXAuaWQgPT09IHZlcnNpb24uaWQpIHx8ICh7fSBhcyBJTWFuYWdlZE9iamVjdCk7XG4gICAgICBjb25zdCB7IG93bmVyLCBsYXN0VXBkYXRlZCB9ID0gbWV0YWRhdGFGb3JWZXJzaW9uO1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odmVyc2lvbiwgeyBvd25lciwgbGFzdFVwZGF0ZWQgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIGFzIGEgbmV3IHZlcnNpb24gZm9yIHRoZSBwdWJsaWMgb3B0aW9ucyBhcHAuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIHNhdmVCcmFuZGluZyhcbiAgICBibG9iOiBCbG9iIHwgRmlsZSxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgdGFnczogc3RyaW5nW10gPSBbXSxcbiAgICBwdWJsaWNPcHRpb25zQXBwPzogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8e1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBiaW5hcnk6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGNvbnN0IGZpbGUgPSBibG9iIGluc3RhbmNlb2YgRmlsZSA/IGJsb2IgOiBuZXcgRmlsZShbYmxvYl0sIGBwdWJsaWMtb3B0aW9ucy0ke3ZlcnNpb259LnppcGApO1xuICAgIGNvbnN0IHB1YmxpY09wdGlvbnMgPSBwdWJsaWNPcHRpb25zQXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG5cbiAgICBjb25zdCB7IGRhdGE6IGJpbmFyeSB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2VcbiAgICAgIC5iaW5hcnkocHVibGljT3B0aW9ucylcbiAgICAgIC51cGxvYWRBcHBsaWNhdGlvblZlcnNpb24oZmlsZSwgdmVyc2lvbiwgdGFncyk7XG4gICAgaWYgKCFwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCB8fCB0YWdzLmluY2x1ZGVzKCdsYXRlc3QnKSkge1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgaWQ6IHB1YmxpY09wdGlvbnMuaWQsXG4gICAgICAgIGFjdGl2ZVZlcnNpb25JZDogYCR7YmluYXJ5LmJpbmFyeUlkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gICAgcmV0dXJuIHsgdmVyc2lvbiwgYmluYXJ5LCB0YWdzIH07XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGJyYW5kaW5nIHZlcnNpb24gZnJvbSB0aGUgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBUaGUgcHVibGljIG9wdGlvbnMgYXBwIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGF2b2lkIGFub3RoZXIgcmVxdWVzdCBmb3IgaXQuXG4gICAqL1xuICBhc3luYyBkZWxldGVCcmFuZGluZ1ZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnMgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShwdWJsaWNPcHRpb25zLCB7IHZlcnNpb24gfSk7XG4gICAgdGhpcy5yZWZyZXNoVHJpZ2dlckJyYW5kaW5nVmFyaWFudHMubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJsb2Igb2YgYSB6aXAgZmlsZSBjb250YWluaW5nIHRoZSBwcm92aWRlZCBicmFuZGluZyBvcHRpb25zIChvcHRpb25zLmpzb24pIGFuZCB0aGUgbWFuaWZlc3QgKGN1bXVsb2NpdHkuanNvbikuXG4gICAqL1xuICBhc3luYyBnZXRCcmFuZGluZ1ppcChjb250ZW50OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBQcm9taXNlPEJsb2I+IHtcbiAgICBjb250ZW50Lmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGNvbnRlbnRBc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGNvbnRlbnQpO1xuICAgIGNvbnN0IHppcCA9IGF3YWl0IHRoaXMuemlwLmNyZWF0ZVppcChbXG4gICAgICB7IGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lcy5vcHRpb25zLCBibG9iOiBuZXcgQmxvYihbY29udGVudEFzU3RyaW5nXSkgfSxcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVzLm1hbmlmZXN0LCBibG9iOiBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkodGhpcy5tYW5pZmVzdFZhbHVlcyldKSB9XG4gICAgXSk7XG4gICAgcmV0dXJuIHppcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGJyYW5kaW5nIHZlcnNpb24gdG8gdGhlIHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgYWRkQnJhbmRpbmcoXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IEJyYW5kaW5nT3B0aW9uc0pzb24gPSB7fSxcbiAgICB0YWdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHB1YmxpY09wdGlvbnNBcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgemlwID0gYXdhaXQgdGhpcy5nZXRCcmFuZGluZ1ppcChjb250ZW50KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNhdmVCcmFuZGluZyh6aXAsIHZlcnNpb24sIHRhZ3MsIHB1YmxpY09wdGlvbnNBcHApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyYW5kaW5nIG9wdGlvbnMgZm9yIHRoZSBwcm92aWRlZCB2ZXJzaW9uLlxuICAgKiBJZiBubyBicmFuZGluZyB3YXMgZm91bmQgKGUuZy4gc3RhdHVzIDQwNCksIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICovXG4gIGFzeW5jIGdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24odmVyc2lvbj86IHN0cmluZyk6IFByb21pc2U8QnJhbmRpbmdPcHRpb25zSnNvbj4ge1xuICAgIGNvbnN0IHVybCA9IGAvYXBwcy9wdWJsaWMvcHVibGljLW9wdGlvbnMke3ZlcnNpb24gPyBgQCR7dmVyc2lvbn1gIDogJyd9LyR7dGhpcy5maWxlTmFtZXMub3B0aW9uc30/bm9jYWNoZT0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoLmZldGNoKHVybCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICByZXR1cm4gY29udGVudCBhcyBCcmFuZGluZ09wdGlvbnNKc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgbmV3IGl0ZXJhdGlvbiBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIGJyYW5kaW5nLlxuICAgKi9cbiAgYXN5bmMgc2F2ZUV4aXN0aW5nQnJhbmRpbmcoXG4gICAgYnJhbmRpbmc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY3VycmVudFZlcnNpb246IHN0cmluZyxcbiAgICB0YWdzT2ZDdXJyZW50VmVyc2lvbjogc3RyaW5nW10gPSBbXSxcbiAgICBuZXdWZXJzaW9uPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpO1xuICAgIGNvbnN0IHZlcnNpb25Ub0JlU2V0ID0gbmV3VmVyc2lvblxuICAgICAgPyB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbihuZXdWZXJzaW9uKVxuICAgICAgOiB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuYnVtcEJyYW5kaW5nSXRlcmF0aW9uKGN1cnJlbnRWZXJzaW9uKTtcblxuICAgIGNvbnN0IGZpbmFsVGFncyA9IHRhZ3NPZkN1cnJlbnRWZXJzaW9uO1xuICAgIC8vIG9ubHkgYXBwbHkgbGF0ZXN0IHRhZyBkaXJlY3RseVxuICAgIC8vIHRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIGxhdGVzdCB0YWcgaW4gdGhlIGJhY2tlbmQsIHRoYXQgYWxsb3dzIHRvIGRpcmVjdGx5IG1vdmUgaXQgd2hpbGUgdXBsb2FkaW5nIHRoZSBuZXcgdmVyc2lvbi5cbiAgICAvLyBmb3IgYWxsIG90aGVyIHRhZ3MgdGhpcyByZXN1bHRzIGluIGEgNDA5IGNvbmZsaWN0LiBXZSB0aGVyZWZvcmUgbmVlZCB0byBmaXJzdCBkZWxldGUgdGhlIG9sZCB2ZXJzaW9uLCBiZWZvcmUgc2V0dGluZyB0aGUgb3RoZXIgdGFncyBvbiB0aGUgbmV3IHZlcnNpb24uXG4gICAgaWYgKCFuZXdWZXJzaW9uKSB7XG4gICAgICB0YWdzT2ZDdXJyZW50VmVyc2lvbiA9IHRhZ3NPZkN1cnJlbnRWZXJzaW9uLmZpbHRlcih0YWcgPT4gdGFnID09PSAnbGF0ZXN0Jyk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkQnJhbmRpbmcodmVyc2lvblRvQmVTZXQsIGJyYW5kaW5nLCB0YWdzT2ZDdXJyZW50VmVyc2lvbiwgcHVibGljT3B0aW9ucyk7XG4gICAgaWYgKCFuZXdWZXJzaW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUJyYW5kaW5nVmVyc2lvbihjdXJyZW50VmVyc2lvbiwgcHVibGljT3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLnJlcy5zdGF0dXMgIT09IDQwNCkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKHB1YmxpY09wdGlvbnMsIHZlcnNpb25Ub0JlU2V0LCBmaW5hbFRhZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJzaW9uVG9CZVNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lcyBjdXJyZW50IGJyYW5kaW5nIG9wdGlvbnMgd2l0aCB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgdmFyaWFibGVzIGFuZCBjcmVhdGVzIGEgbmV3IHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogQW55IGFzc2V0cyBpbiB0aGUgYnJhbmRpbmcgd2lsbCBiZSBjbG9uZWQuXG4gICAqL1xuICBhc3luYyBjcmVhdGVQdWJsaWNPcHRpb25zQXBwRnJvbUluaGVyaXRlZE9wdGlvbnMoYnJhbmRpbmdWYXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8e1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBiaW5hcnk6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGxldCBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb247XG4gICAgbGV0IGZhbGxCYWNrQnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb24gPSB7fTtcbiAgICB0cnkge1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gYXdhaXQgdGhpcy5nZXRCcmFuZGluZ09wdGlvbnNGb3JWZXJzaW9uKCk7XG4gICAgICBmYWxsQmFja0JyYW5kaW5nID0gY2xvbmVEZWVwKGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZ2V0IGN1cnJlbnRseSBhcHBsaWVkIGJyYW5kaW5nLCBwcm9jZWVkaW5nIHdpdGggZW1wdHkgYnJhbmRpbmcuJywgZSk7XG4gICAgfVxuXG4gICAgaWYgKGJyYW5kaW5nVmFycykge1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gY3VycmVudGx5QXBwbGllZEJyYW5kaW5nIHx8IHt9O1xuICAgICAgY29uc3QgYnJhbmRpbmdDc3NWYXJzID0gY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLmJyYW5kaW5nQ3NzVmFycyB8fCB7fTtcbiAgICAgIE9iamVjdC5hc3NpZ24oYnJhbmRpbmdDc3NWYXJzLCBicmFuZGluZ1ZhcnMpO1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLmJyYW5kaW5nQ3NzVmFycyA9IGJyYW5kaW5nQ3NzVmFycztcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudGx5QXBwbGllZEJyYW5kaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IG9sZEFzc2V0cywgbmV3QXNzZXRzIH0gPSBhd2FpdCB0aGlzLnN0YXRpY0Fzc2V0cy5jbG9uZUFzc2V0c0ludG9UZW5hbnQoJ2JyYW5kaW5nJyk7XG4gICAgICAgIGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyA9IHRoaXMucmVwbGFjZUJyYW5kaW5nQXNzZXRzSW5CcmFuZGluZ09wdGlvbnMoXG4gICAgICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLFxuICAgICAgICAgIG9sZEFzc2V0cyxcbiAgICAgICAgICBuZXdBc3NldHNcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcmVsb2NhdGUgYnJhbmRpbmcgYXNzZXRzIGludG8gY3VycmVudCB0ZW5hbnQuJywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHVibGljT3B0aW9uc0FwcCA9IGF3YWl0IHRoaXMuY3JlYXRlUHVibGljT3B0aW9uc0FwcCgpO1xuXG4gICAgY29uc3QgZGVmYXVsdEJyYW5kaW5nTmFtZSA9IGBkZWZhdWx0YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFkZEJyYW5kaW5nKFxuICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24oZGVmYXVsdEJyYW5kaW5nTmFtZSksXG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgfHwge30sXG4gICAgICBbJ2xhdGVzdCcsIGRlZmF1bHRCcmFuZGluZ05hbWVdLFxuICAgICAgcHVibGljT3B0aW9uc0FwcFxuICAgICk7XG5cbiAgICBjb25zdCBmYWxsYmFja0JyYW5kaW5nTmFtZSA9IGBmYWxsYmFja2A7XG4gICAgYXdhaXQgdGhpcy5hZGRCcmFuZGluZyhcbiAgICAgIHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKGZhbGxiYWNrQnJhbmRpbmdOYW1lKSxcbiAgICAgIGZhbGxCYWNrQnJhbmRpbmcsXG4gICAgICBbZmFsbGJhY2tCcmFuZGluZ05hbWVdLFxuICAgICAgcHVibGljT3B0aW9uc0FwcFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBhc3NldHMgaW4gdGhlIGJyYW5kaW5nIG9wdGlvbnMgd2l0aCB0aGUgbmV3IGFzc2V0cy5cbiAgICogR29lcyB0aHJvdWdoIHRoZSBwcm92aWRlZCBgb2xkQXNzZXRzYCBhbmQgcmVwbGFjZXMgdGhlaXIgb2NjdXJyZW5jZXMgaW4gdGhlIGJyYW5kaW5nIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYG5ld0Fzc2V0c2AgZW50cnkgc2hhcmluZyB0aGUgc2FtZSBmaWxlTmFtZS5cbiAgICogUmV0dXJucyB0aGUgdXBkYXRlZCBicmFuZGluZyBvcHRpb25zLlxuICAgKi9cbiAgcmVwbGFjZUJyYW5kaW5nQXNzZXRzSW5CcmFuZGluZ09wdGlvbnMoXG4gICAgYnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb24sXG4gICAgb2xkQXNzZXRzOiBTdGF0aWNBc3NldFtdLFxuICAgIG5ld0Fzc2V0czogU3RhdGljQXNzZXRbXVxuICApOiBCcmFuZGluZ09wdGlvbnNKc29uIHtcbiAgICBsZXQgYnJhbmRpbmdBc0pTT05TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShicmFuZGluZyk7XG4gICAgZm9yIChjb25zdCBvbGRBc3NldCBvZiBvbGRBc3NldHMpIHtcbiAgICAgIGNvbnN0IG5ld0xvY2F0ZWRBc3NldCA9IG5ld0Fzc2V0cy5maW5kKHRtcCA9PiB0bXAuZmlsZU5hbWUgPT09IG9sZEFzc2V0LmZpbGVOYW1lKTtcbiAgICAgIGlmICghbmV3TG9jYXRlZEFzc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHBhdGggaXMgdGhlIHNhbWUsIHdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBpdC5cbiAgICAgIGlmIChvbGRBc3NldC5wYXRoID09PSBuZXdMb2NhdGVkQXNzZXQucGF0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogdXNlIHByb3BlciByZXBsYWNlQWxsIG9uY2UgaXQncyBhdmFpbGFibGUgd2l0aCBlczIwMjFcbiAgICAgIGJyYW5kaW5nQXNKU09OU3RyaW5nID0gYnJhbmRpbmdBc0pTT05TdHJpbmcuc3BsaXQob2xkQXNzZXQucGF0aCkuam9pbihuZXdMb2NhdGVkQXNzZXQucGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnBhcnNlKGJyYW5kaW5nQXNKU09OU3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UHVibGljT3B0aW9uc0FwcCgpIHtcbiAgICBsZXQgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlOYW1lKHRoaXMubWFuaWZlc3RWYWx1ZXMubmFtZSk7XG4gICAgYXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiBhcHAub3duZXI/LnRlbmFudD8uaWQgPT09IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZT8ubmFtZSk7XG5cbiAgICByZXR1cm4gYXBwc1swXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlUHVibGljT3B0aW9uc0FwcCgpIHtcbiAgICBjb25zdCB7IGRhdGE6IGFwcCB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKHRoaXMubWFuaWZlc3RWYWx1ZXMpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -219,6 +219,7 @@ export class BrandingComponent {
|
|
|
219
219
|
}
|
|
220
220
|
try {
|
|
221
221
|
await this.brandings.addBranding(this.brandingVersionService.createInitialBrandingVersion(versionDetails.brandingName), fallBackBranding, [versionDetails.brandingName]);
|
|
222
|
+
await this.brandings.waitForBrandingToBePresent(versionDetails.brandingName);
|
|
222
223
|
this.editBranding(versionDetails.brandingName);
|
|
223
224
|
}
|
|
224
225
|
catch (e) {
|
|
@@ -233,6 +234,7 @@ export class BrandingComponent {
|
|
|
233
234
|
}
|
|
234
235
|
try {
|
|
235
236
|
await this.brandings.addBranding(this.brandingVersionService.createInitialBrandingVersion(versionDetails.brandingName), options, [versionDetails.brandingName]);
|
|
237
|
+
await this.brandings.waitForBrandingToBePresent(versionDetails.brandingName);
|
|
236
238
|
this.editBranding(versionDetails.brandingName);
|
|
237
239
|
}
|
|
238
240
|
catch (e) {
|
|
@@ -318,4 +320,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
318
320
|
type: Component,
|
|
319
321
|
args: [{ selector: 'c8y-branding', standalone: true, imports: [CoreModule, DataGridModule], template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns\n with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n" }]
|
|
320
322
|
}], ctorParameters: () => [{ type: i1.StoreBrandingService }, { type: i2.ActivatedRoute }, { type: i3.AppStateService }, { type: i4.ApplicationService }, { type: i3.ZipService }, { type: i5.StaticAssetsService }, { type: i2.Router }, { type: i6.BsModalService }, { type: i3.ModalService }, { type: i1.BrandingVersionService }, { type: i7.AddBrandingModalService }, { type: i3.AlertService }, { type: i8.BrandingImportModalService }] });
|
|
321
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBRUwsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN2QixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQWMsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUVMLFlBQVksRUFDWixlQUFlLEVBQ2YsaUJBQWlCLEVBR2pCLFlBQVksRUFFWixNQUFNLEVBQ04sVUFBVSxFQUNWLE9BQU8sRUFDUCxVQUFVLEVBQ1YsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFnQixNQUFNLGFBQWEsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUN0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QU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUUsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQy9DLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQ2hELGdCQUFnQixFQUNoQixPQUFPLENBQUMsT0FBTyxFQUNmLFdBQVcsQ0FDWixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7OEdBeFdVLGlCQUFpQjtrR0FBakIsaUJBQWlCLHdFQ3pDOUIsc2xGQTJGQSwyQ0RwRFksVUFBVSx3N0RBQUUsY0FBYzs7MkZBRXpCLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxjQUFjLGNBRVosSUFBSSxXQUNQLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQnJhbmRWZXJzaW9uLFxuICBTdG9yZUJyYW5kaW5nU2VydmljZSxcbiAgQnJhbmRpbmdWZXJzaW9uU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2JyYW5kaW5nL3NoYXJlZC9kYXRhJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJ1aWx0SW5BY3Rpb25UeXBlLFxuICBDb2x1bW4sXG4gIERpc3BsYXlPcHRpb25zLFxuICBNb2RhbFNlcnZpY2UsXG4gIFBhZ2luYXRpb24sXG4gIFN0YXR1cyxcbiAgWmlwU2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgQ29yZU1vZHVsZSxcbiAgRGF0YUdyaWRNb2R1bGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNlcnZpY2UsIElBcHBsaWNhdGlvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgU3RhdGljQXNzZXRzU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvc3RhdGljLWFzc2V0cy9kYXRhJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBBcHBseUJyYW5kaW5nVG9BcHBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2FwcGx5LWJyYW5kaW5nLXRvLWFwcC1tb2RhbC9hcHBseS1icmFuZGluZy10by1hcHAtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IEFkZEJyYW5kaW5nTW9kYWxTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9icmFuZGluZy9zaGFyZWQvbGF6eS9hZGQtYnJhbmRpbmctbW9kYWwnO1xuaW1wb3J0IHsgQnJhbmRpbmdUYWdzQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vYnJhbmRpbmctdGFncy1jZWxsLXJlbmRlcmVyL2JyYW5kaW5nLXRhZ3MtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnJhbmRpbmdJbXBvcnRNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi9icmFuZGluZy1pbXBvcnQtbW9kYWwvYnJhbmRpbmctaW1wb3J0LW1vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnJhbmRpbmdOYW1lQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vYnJhbmRpbmctbmFtZS1jZWxsLXJlbmRlcmVyL2JyYW5kaW5nLW5hbWUtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnJhbmRpbmdUYWdzSGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vYnJhbmRpbmctdGFncy1oZWFkZXItY2VsbC1yZW5kZXJlci9icmFuZGluZy10YWdzLWhlYWRlci1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1icmFuZGluZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9icmFuZGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb3JlTW9kdWxlLCBEYXRhR3JpZE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQnJhbmRpbmdDb21wb25lbnQge1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VTaXplOiAxMCxcbiAgICBjdXJyZW50UGFnZTogMVxuICB9O1xuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnMgPSB7XG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgZmlsdGVyOiB0cnVlLFxuICAgIGdyaWRIZWFkZXI6IHRydWUsXG4gICAgaG92ZXI6IHRydWVcbiAgfTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5FZGl0LFxuICAgICAgY2FsbGJhY2s6IChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdEJyYW5kaW5nKGVudHJ5Lm5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRXhwb3J0LFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXhwb3J0QnJhbmRpbmcoZW50cnkpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ3ByZXZpZXcnLFxuICAgICAgaWNvbjogJ2V4dGVybmFsLWxpbmsnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnT3BlbiBwcmV2aWV3JyksXG4gICAgICBjYWxsYmFjazogYXN5bmMgKGVudHJ5OiBCcmFuZFZlcnNpb24sIF9yZWxvYWQpID0+IHtcbiAgICAgICAgd2luZG93Lm9wZW4oXG4gICAgICAgICAgYC9hcHBzLyR7XG4gICAgICAgICAgICB0aGlzLmFwcFN0YXRlLmN1cnJlbnRBcHBsaWNhdGlvbi52YWx1ZT8uY29udGV4dFBhdGggfHwgJ2NvY2twaXQnXG4gICAgICAgICAgfS9pbmRleC5odG1sP2JyYW5kaW5nUHJldmlldz10cnVlJmR5bmFtaWNPcHRpb25zVXJsPS9hcHBzL3B1YmxpYy9wdWJsaWMtb3B0aW9uc0Ake2VudHJ5Lm5hbWV9L29wdGlvbnMuanNvbmAsXG4gICAgICAgICAgJ19ibGFuaycsXG4gICAgICAgICAgJ25vb3BlbmVyLG5vcmVmZXJyZXInXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnZHVwbGljYXRlJyxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ0R1cGxpY2F0ZScpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZHVwbGljYXRlVmVyc2lvbihlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2FwcGx5LXRvLWFwcCcsXG4gICAgICBpY29uOiAnZm9ybScsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdBcHBseSB0byBzcGVjaWZpYyBhcHBzJyksXG4gICAgICBjYWxsYmFjazogYXN5bmMgKGVudHJ5OiBCcmFuZFZlcnNpb24sIF9yZWxvYWQpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBseVRvQXBwcyhlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ3NldC1hcy1kZWZhdWx0JyxcbiAgICAgIGljb246ICdnbG9iZTEnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnU2V0IGFzIGdsb2JhbCcpLFxuICAgICAgc2hvd0lmOiAoZW50cnk6IEJyYW5kVmVyc2lvbikgPT4ge1xuICAgICAgICBpZiAoZW50cnkudGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgICBnZXR0ZXh0KCdTZXQgYXMgZ2xvYmFsIGJyYW5kaW5nJyksXG4gICAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgICAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gc2V0IHRoaXMgdmFyaWFudCBhcyB0aGUgZ2xvYmFsIGJyYW5kaW5nPyBCeSBkb2luZyBzbywgdGhpcyB2YXJpYW50IHdpbGwgYmUgYXBwbGllZCB0byBhbGwgYXBwcyB0aGF0IGRvIG5vdCBoYXZlIGEgc3BlY2lmaWMgYnJhbmRpbmcgYXBwbGllZC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgU3RhdHVzLklORk9cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBkaWQgbm90IGNvbmZpcm1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5icmFuZGluZ3MubWFya0FzQWN0aXZlKGVudHJ5KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICBzaG93SWY6IChlbnRyeTogQnJhbmRWZXJzaW9uKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS50YWdzPy5pbmNsdWRlcygnbGF0ZXN0JykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgICAgICAgIGdldHRleHQoJ0RlbGV0ZSBicmFuZGluZyB2YXJpYW50JyksXG4gICAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhpcyBicmFuZGluZyB2YXJpYW50LiBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBTdGF0dXMuREFOR0VSXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gZGlkIG5vdCBjb25maXJtXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZVZlcnNpb25QYWNrYWdlKGVudHJ5LnB1YmxpY09wdGlvbnNBcHAsIHtcbiAgICAgICAgICB2ZXJzaW9uOiBlbnRyeS52ZXJzaW9uXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnTmFtZScpLFxuICAgICAgcGF0aDogJ25hbWUnLFxuICAgICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogQnJhbmRpbmdOYW1lQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBnZXR0ZXh0KCdBcHBsaWVkIHRvYEFwcGxpY2F0aW9ucyBhIGJyYW5kaW5nIGFwcGxpZXMgdG8gKHRhYmxlIGNvbHVtbiBoZWFkZXIpYCcpLFxuICAgICAgcGF0aDogJ3RhZ3MnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsQ1NTQ2xhc3NOYW1lOiAnc21hbGwnLFxuICAgICAgY2VsbFJlbmRlcmVyQ29tcG9uZW50OiBCcmFuZGluZ1RhZ3NDZWxsUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICBoZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnQ6IEJyYW5kaW5nVGFnc0hlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ293bmVyJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnT3duZXInKSxcbiAgICAgIHBhdGg6ICdvd25lcicsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2xhc3RVcGRhdGVkJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnTGFzdCB1cGRhdGVkJyksXG4gICAgICBwYXRoOiAnbGFzdFVwZGF0ZWQnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2VcbiAgICB9XG4gIF07XG4gIGN1cnJlbnRBcHBDb250ZXh0UGF0aCA9ICdhZG1pbmlzdHJhdGlvbic7XG4gIGF2YWlsYWJsZUJyYW5kaW5nVmFyaWFudHMkOiBPYnNlcnZhYmxlPHtcbiAgICBwdWJsaWNPcHRpb25zOiBJQXBwbGljYXRpb247XG4gICAgdmFyaWFudHM6IEJyYW5kVmVyc2lvbltdO1xuICB9PjtcblxuICBwcml2YXRlIHJlbG9hZFRyaWdnZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYnJhbmRpbmdzOiBTdG9yZUJyYW5kaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHppcDogWmlwU2VydmljZSxcbiAgICBwcml2YXRlIHN0YXRpY0Fzc2V0czogU3RhdGljQXNzZXRzU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbW9kYWw6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlybU1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmFuZGluZ1ZlcnNpb25TZXJ2aWNlOiBCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWRkQnJhbmRpbmdNb2RhbFNlcnZpY2U6IEFkZEJyYW5kaW5nTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlOiBCcmFuZGluZ0ltcG9ydE1vZGFsU2VydmljZVxuICApIHtcbiAgICB0aGlzLmN1cnJlbnRBcHBDb250ZXh0UGF0aCA9IHRoaXMuYXBwU3RhdGUuc3RhdGUuYXBwPy5jb250ZXh0UGF0aCB8fCB0aGlzLmN1cnJlbnRBcHBDb250ZXh0UGF0aDtcbiAgICB0aGlzLmF2YWlsYWJsZUJyYW5kaW5nVmFyaWFudHMkID0gdGhpcy5yZWxvYWRUcmlnZ2VyLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5icmFuZGluZ3MubG9hZEJyYW5kaW5nVmFyaWFudHMoKSksXG4gICAgICAvLyBoaWRlIHRoZSBmYWxsYmFjayBmcm9tIHVzZXJzXG4gICAgICBtYXAodmFyaWFudHMgPT4ge1xuICAgICAgICB2YXJpYW50cy52YXJpYW50cyA9IHZhcmlhbnRzLnZhcmlhbnRzLmZpbHRlcih2ID0+ICF2LnRhZ3M/LmluY2x1ZGVzKCdmYWxsYmFjaycpKTtcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgIGdldHRleHQoJ0RlbGV0ZSBhbGwgYnJhbmRpbmcgdmFyaWFudHMnKSxcbiAgICAgIGdldHRleHQoXG4gICAgICAgIGA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgVGhpcyBhY3Rpb24gd2lsbCBwZXJtYW5lbnRseSByZW1vdmUgYWxsIGN1c3RvbSBicmFuZGluZyB2YXJpYW50cy4gWW91ciB0ZW5hbnQgd2lsbCByZXZlcnRcbiAgICAgICAgICB0byB0aGUgZGVmYXVsdCBicmFuZGluZy5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgQ29uc2lkZXIgZXhwb3J0aW5nIHlvdXIgY3VzdG9tIGJyYW5kaW5nIHZhcmlhbnRzIGJlZm9yZSBwcm9jZWVkaW5nLCBhcyB0aGlzIGFjdGlvbiBjYW5ub3RcbiAgICAgICAgICBiZSB1bmRvbmUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHA+XG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlP1xuICAgICAgICA8L3A+YFxuICAgICAgKSxcbiAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICB7IGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJyksIG9rOiBnZXR0ZXh0KCdEZWxldGUgYWxsJykgfVxuICAgICk7XG4gICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UgfHwgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmICFyZXN1bHQuY29uZmlybWVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEJyYW5kaW5nKHZhcmlhbnQ6IEJyYW5kVmVyc2lvbikge1xuICAgIGNvbnN0IGJyYW5kaW5nID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5icmFuZGluZ3MuZ2V0WmlwRm9yQmluYXJ5KHZhcmlhbnQuaWQpKTtcbiAgICBjb25zdCBzdGF0aWNBc3NldHNBcHAgPSBhd2FpdCB0aGlzLnN0YXRpY0Fzc2V0cy5nZXRBcHBGb3JUZW5hbnQoJ2JyYW5kaW5nJyk7XG4gICAgY29uc3Qgc3RhdGljQXNzZXRzWmlwID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmJyYW5kaW5ncy5nZXRaaXBGb3JCaW5hcnkoXG4gICAgICAgIHN0YXRpY0Fzc2V0c0FwcC5hY3RpdmVWZXJzaW9uSWQsXG4gICAgICAgIHRoaXMuc3RhdGljQXNzZXRzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCBibG9iID0gYXdhaXQgdGhpcy56aXAuY3JlYXRlWmlwKFtcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuYnJhbmRpbmdzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lLCBibG9iOiBicmFuZGluZyB9LFxuICAgICAgeyBmaWxlTmFtZTogdGhpcy5zdGF0aWNBc3NldHMuZmlsZU5hbWVzLmV4cG9ydFppcE5hbWUsIGJsb2I6IHN0YXRpY0Fzc2V0c1ppcCB9XG4gICAgXSk7XG4gICAgc2F2ZUFzKGJsb2IsIGBicmFuZGluZy1leHBvcnQtJHt2YXJpYW50Lm5hbWV9LSR7dmFyaWFudC5yZXZpc2lvbn0tJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX0uemlwYCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVsb2FkVHJpZ2dlci5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBhZGROZXdWZXJzaW9uKCkge1xuICAgIGNvbnN0IHZlcnNpb25EZXRhaWxzID0gYXdhaXQgdGhpcy5hZGRCcmFuZGluZ01vZGFsU2VydmljZS5vcGVuQWRkQnJhbmRpbmdNb2RhbCgpO1xuICAgIGlmICghdmVyc2lvbkRldGFpbHMpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmFsbEJhY2tCcmFuZGluZyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBmYWxsQmFja0JyYW5kaW5nID0gYXdhaXQgdGhpcy5icmFuZGluZ3MuZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbignbGF0ZXN0Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9hZCBsYXRlc3QgYnJhbmRpbmdgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5icmFuZGluZ3MuYWRkQnJhbmRpbmcoXG4gICAgICAgIHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSksXG4gICAgICAgIGZhbGxCYWNrQnJhbmRpbmcsXG4gICAgICAgIFt2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWVdXG4gICAgICApO1xuICAgICAgdGhpcy5lZGl0QnJhbmRpbmcodmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSwgJ2RhbmdlcicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGR1cGxpY2F0ZVZlcnNpb24odmVyc2lvbjogQnJhbmRWZXJzaW9uKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMuYnJhbmRpbmdzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24odmVyc2lvbi52ZXJzaW9uKTtcbiAgICBjb25zdCB2ZXJzaW9uRGV0YWlscyA9IGF3YWl0IHRoaXMuYWRkQnJhbmRpbmdNb2RhbFNlcnZpY2Uub3BlbkR1cGxpY2F0ZUJyYW5kaW5nTW9kYWwoKTtcbiAgICBpZiAoIXZlcnNpb25EZXRhaWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmFkZEJyYW5kaW5nKFxuICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBbdmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lXVxuICAgICAgKTtcbiAgICAgIHRoaXMuZWRpdEJyYW5kaW5nKHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUsICdkYW5nZXInKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlZGl0QnJhbmRpbmcoYnJhbmRpbmdOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2JyYW5kaW5nTmFtZSwgJ2VkaXQnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhcnRlZFVzaW5nQnJhbmRpbmcoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgIGdldHRleHQoYEdldCBzdGFydGVkIHVzaW5nIGJyYW5kaW5nIHZhcmlhbnRzYCksXG4gICAgICBnZXR0ZXh0KFxuICAgICAgICBgPHAgY2xhc3M9XCJtLWItOFwiPkNvbmZpcm1pbmcgdGhpcyBhY3Rpb24gY3JlYXRlcyB0d28gYnJhbmRpbmcgdmFyaWFudHM6PC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJtLWItOCBwLWwtMTZcIj5cbiAgICAgICAgICA8bGk+QSBkZWZhdWx0IGNvcHkgb2YgeW91ciBjdXJyZW50IGdsb2JhbCBicmFuZGluZzwvbGk+XG4gICAgICAgICAgPGxpPllvdXIgbmV3IGN1c3RvbWl6YWJsZSB2YXJpYW50LjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxwIGNsYXNzPVwibS1iLThcIj5cbiAgICAgICAgICBBZnRlciBjdXN0b21pemF0aW9uLCB5b3UgY2FuIHNldCB5b3VyIG5ldyB2YXJpYW50IGFzIGdsb2JhbCBvciBhcHBseSBpdCB0byBzcGVjaWZpYyBhcHBzLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIFRvIHJldmVydCBjaGFuZ2VzLCBzaW1wbHkgc2V0IHRoZSBkZWZhdWx0IGJyYW5kaW5nIGFzIGdsb2JhbCBvciB1c2UgdGhlIFwiRGVsZXRlIGFsbFxuICAgICAgICAgIGJyYW5kaW5nc1wiIGJ1dHRvbiBhdCBhbnkgdGltZS5cbiAgICAgICAgPC9wPmBcbiAgICAgIClcbiAgICApO1xuICAgIGlmIChyZXN1bHQgPT09IGZhbHNlIHx8ICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAhcmVzdWx0LmNvbmZpcm1lZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy5nZXRTdGFydGVkVXNpbmdCcmFuZGluZygpO1xuICAgIGF3YWl0IHRoaXMuYWRkTmV3VmVyc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgYXBwbHlUb0FwcHModmVyc2lvbjogQnJhbmRWZXJzaW9uKSB7XG4gICAgY29uc3QgcHJlZml4ID0gJ2FwcC0nO1xuICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gdmVyc2lvbi50YWdzXG4gICAgICAuZmlsdGVyKHRhZyA9PiB0YWcuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgLm1hcCh0YWcgPT4gdGFnLnJlcGxhY2UocHJlZml4LCAnJykpO1xuICAgIGNvbnN0IG90aGVyVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWcuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICBsZXQgc2VsZWN0ZWRUYWdzOiBBd2FpdGVkPEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50WydyZXN1bHQnXT47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbC5zaG93KEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGluaXRpYWxTdGF0ZTogeyBjdXJyZW50VGFncyB9LFxuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgc2VsZWN0ZWRUYWdzID0gYXdhaXQgbW9kYWxSZWYuY29udGVudC5yZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbW9kYWwgY2xvc2VkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFnc1RvU2V0ID0gW1xuICAgICAgLi4ub3RoZXJUYWdzLFxuICAgICAgLi4uT2JqZWN0LmtleXMoc2VsZWN0ZWRUYWdzKVxuICAgICAgICAuZmlsdGVyKGtleSA9PiBzZWxlY3RlZFRhZ3Nba2V5XSlcbiAgICAgICAgLm1hcCh0YWcgPT4gYCR7cHJlZml4fSR7dGFnfWApXG4gICAgXTtcblxuICAgIGF3YWl0IHRoaXMucmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKHZlcnNpb24ucHVibGljT3B0aW9uc0FwcCwgdGFnc1RvU2V0LCB2ZXJzaW9uLnZlcnNpb24pO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKFxuICAgICAgdmVyc2lvbi5wdWJsaWNPcHRpb25zQXBwLFxuICAgICAgdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgdGFnc1RvU2V0XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEJyYW5kaW5nKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlLm9wZW5CcmFuZGluZ0ltcG9ydE1vZGFsKCk7XG5cbiAgICAgIHRoaXMuYnJhbmRpbmdzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gICAgICB0aGlzLnJlbG9hZFRyaWdnZXIubmV4dCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG1vZGFsIGNsb3NlZFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKFxuICAgIHB1YmxpY09wdGlvbnNBcHA6IElBcHBsaWNhdGlvbixcbiAgICB0YWdzVG9SZW1vdmU6IHN0cmluZ1tdLFxuICAgIHZlcnNpb25Ub0lnbm9yZT86IHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2YgcHVibGljT3B0aW9uc0FwcC5hcHBsaWNhdGlvblZlcnNpb25zKSB7XG4gICAgICBpZiAodmVyc2lvbi52ZXJzaW9uID09PSB2ZXJzaW9uVG9JZ25vcmUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZW1vdmVkVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWdzVG9SZW1vdmUuaW5jbHVkZXModGFnKSk7XG4gICAgICBpZiAocmVtb3ZlZFRhZ3MubGVuZ3RoID09PSB2ZXJzaW9uLnRhZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoXG4gICAgICAgIHB1YmxpY09wdGlvbnNBcHAsXG4gICAgICAgIHZlcnNpb24udmVyc2lvbixcbiAgICAgICAgcmVtb3ZlZFRhZ3NcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LXRpdGxlIHRyYW5zbGF0ZT5CcmFuZGluZzwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ3BhbGV0dGUnXCJcbiAgICBbbGFiZWxdPVwiJ0JyYW5kaW5nJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy9icmFuZGluZy1lZGl0b3InXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJhdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJCB8IGFzeW5jIGFzIGJyYW5kaW5nVmFyaWFudDsgZWxzZSBsb2FkaW5nXCI+XG4gIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgKm5nSWY9XCJicmFuZGluZ1ZhcmlhbnQucHVibGljT3B0aW9uc1wiXG4gICAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgICBbcHJpb3JpdHldPVwiMzBcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgKGNsaWNrKT1cImFkZE5ld1ZlcnNpb24oKVwiXG4gICAgICBkYXRhLWN5PVwiYnJhbmRpbmctYWRkLWJyYW5kaW5nLXZhcmlhbnRcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgIDxzcGFuIHRyYW5zbGF0ZT5BZGQgdmFyaWFudDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjIwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1pbXBvcnQtYnJhbmRpbmdcIlxuICAgICAgKGNsaWNrKT1cImltcG9ydEJyYW5kaW5nKClcIlxuICAgID5cbiAgICAgIDxpIFtjOHlJY29uXT1cIidkYXRhLWltcG9ydCdcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+SW1wb3J0IHZhcmlhbnQ8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgICpuZ0lmPVwiYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnNcIlxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjEwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVBbGxCcmFuZGluZ3MoYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnMpXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1yZW1vdmUtYWxsLWJyYW5kaW5nc1wiXG4gICAgPlxuICAgICAgPGkgW2M4eUljb25dPVwiJ3RyYXNoLW8nXCI+PC9pPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPkRlbGV0ZSBhbGwgdmFyaWFudHM8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2wgYm9yZGVyLXRvcFwiPlxuICAgIDxjOHktZGF0YS1ncmlkXG4gICAgICBbdGl0bGVdPVwiJ0JyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgICAgIFtyb3dzXT1cImJyYW5kaW5nVmFyaWFudC52YXJpYW50c1wiXG4gICAgPlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCIncGFsZXR0ZSdcIlxuICAgICAgICBbdGl0bGVdPVwiJ05vIGJyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtzdWJ0aXRsZV09XCJcbiAgICAgICAgICAnUGVyc29uYWxpemUgeW91ciBleHBlcmllbmNlIHdpdGggYSB0aGVtZS1hYmxlIGludGVyZmFjZS4gQ3JlYXRlIGEgdW5pcXVlIGxvb2sgdGhhdCBhbGlnbnNcbiAgICAgICAgICAgd2l0aCB5b3VyIGJyYW5kIGlkZW50aXR5LidcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwiIWJyYW5kaW5nVmFyaWFudC5wdWJsaWNPcHRpb25zXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwiZmFsc2VcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1nZXQtc3RhcnRlZC11c2luZy1icmFuZGluZ1wiXG4gICAgICAgICAgKGNsaWNrKT1cImdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKClcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQWRkIGJyYW5kaW5nIHZhcmlhbnRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8L2M4eS1kYXRhLWdyaWQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBRUwsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN2QixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQWMsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUVMLFlBQVksRUFDWixlQUFlLEVBQ2YsaUJBQWlCLEVBR2pCLFlBQVksRUFFWixNQUFNLEVBQ04sVUFBVSxFQUNWLE9BQU8sRUFDUCxVQUFVLEVBQ1YsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFnQixNQUFNLGFBQWEsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUN0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SyxNQUFNLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNELElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxlQUFlLEVBQUUsQ0FBQztnQkFDeEMsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVFLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMvQyxTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUNoRCxnQkFBZ0IsRUFDaEIsT0FBTyxDQUFDLE9BQU8sRUFDZixXQUFXLENBQ1osQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOzhHQTFXVSxpQkFBaUI7a0dBQWpCLGlCQUFpQix3RUN6QzlCLHNsRkEyRkEsMkNEcERZLFVBQVUsdzdEQUFFLGNBQWM7OzJGQUV6QixpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsY0FBYyxjQUVaLElBQUksV0FDUCxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJyYW5kVmVyc2lvbixcbiAgU3RvcmVCcmFuZGluZ1NlcnZpY2UsXG4gIEJyYW5kaW5nVmVyc2lvblNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9icmFuZGluZy9zaGFyZWQvZGF0YSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQ29sdW1uLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBTdGF0dXMsXG4gIFppcFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIENvcmVNb2R1bGUsXG4gIERhdGFHcmlkTW9kdWxlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TZXJ2aWNlLCBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFN0YXRpY0Fzc2V0c1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3N0YXRpYy1hc3NldHMvZGF0YSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQXBwbHlCcmFuZGluZ1RvQXBwTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1icmFuZGluZy10by1hcHAtbW9kYWwvYXBwbHktYnJhbmRpbmctdG8tYXBwLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZGRCcmFuZGluZ01vZGFsU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYnJhbmRpbmcvc2hhcmVkL2xhenkvYWRkLWJyYW5kaW5nLW1vZGFsJztcbmltcG9ydCB7IEJyYW5kaW5nVGFnc0NlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLXRhZ3MtY2VsbC1yZW5kZXJlci9icmFuZGluZy10YWdzLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vYnJhbmRpbmctaW1wb3J0LW1vZGFsL2JyYW5kaW5nLWltcG9ydC1tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJyYW5kaW5nTmFtZUNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLW5hbWUtY2VsbC1yZW5kZXJlci9icmFuZGluZy1uYW1lLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJyYW5kaW5nVGFnc0hlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLXRhZ3MtaGVhZGVyLWNlbGwtcmVuZGVyZXIvYnJhbmRpbmctdGFncy1oZWFkZXItY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYnJhbmRpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgRGF0YUdyaWRNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEJyYW5kaW5nQ29tcG9uZW50IHtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGhvdmVyOiB0cnVlXG4gIH07XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSBbXG4gICAge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgIGNhbGxiYWNrOiAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRCcmFuZGluZyhlbnRyeS5uYW1lKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkV4cG9ydCxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmV4cG9ydEJyYW5kaW5nKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwcmV2aWV3JyxcbiAgICAgIGljb246ICdleHRlcm5hbC1saW5rJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ09wZW4gcHJldmlldycpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIHdpbmRvdy5vcGVuKFxuICAgICAgICAgIGAvYXBwcy8ke1xuICAgICAgICAgICAgdGhpcy5hcHBTdGF0ZS5jdXJyZW50QXBwbGljYXRpb24udmFsdWU/LmNvbnRleHRQYXRoIHx8ICdjb2NrcGl0J1xuICAgICAgICAgIH0vaW5kZXguaHRtbD9icmFuZGluZ1ByZXZpZXc9dHJ1ZSZkeW5hbWljT3B0aW9uc1VybD0vYXBwcy9wdWJsaWMvcHVibGljLW9wdGlvbnNAJHtlbnRyeS5uYW1lfS9vcHRpb25zLmpzb25gLFxuICAgICAgICAgICdfYmxhbmsnLFxuICAgICAgICAgICdub29wZW5lcixub3JlZmVycmVyJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2R1cGxpY2F0ZScsXG4gICAgICBpY29uOiAnY29weScsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdEdXBsaWNhdGUnKSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmR1cGxpY2F0ZVZlcnNpb24oZW50cnkpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdhcHBseS10by1hcHAnLFxuICAgICAgaWNvbjogJ2Zvcm0nLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnQXBwbHkgdG8gc3BlY2lmaWMgYXBwcycpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbHlUb0FwcHMoZW50cnkpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdzZXQtYXMtZGVmYXVsdCcsXG4gICAgICBpY29uOiAnZ2xvYmUxJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1NldCBhcyBnbG9iYWwnKSxcbiAgICAgIHNob3dJZjogKGVudHJ5OiBCcmFuZFZlcnNpb24pID0+IHtcbiAgICAgICAgaWYgKGVudHJ5LnRhZ3M/LmluY2x1ZGVzKCdsYXRlc3QnKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBjYWxsYmFjazogYXN5bmMgKGVudHJ5OiBCcmFuZFZlcnNpb24sIF9yZWxvYWQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1Nb2RhbC5jb25maXJtKFxuICAgICAgICAgICAgZ2V0dGV4dCgnU2V0IGFzIGdsb2JhbCBicmFuZGluZycpLFxuICAgICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgICAgJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHNldCB0aGlzIHZhcmlhbnQgYXMgdGhlIGdsb2JhbCBicmFuZGluZz8gQnkgZG9pbmcgc28sIHRoaXMgdmFyaWFudCB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGFwcHMgdGhhdCBkbyBub3QgaGF2ZSBhIHNwZWNpZmljIGJyYW5kaW5nIGFwcGxpZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFN0YXR1cy5JTkZPXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gZGlkIG5vdCBjb25maXJtXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLm1hcmtBc0FjdGl2ZShlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgc2hvd0lmOiAoZW50cnk6IEJyYW5kVmVyc2lvbikgPT4ge1xuICAgICAgICBpZiAoZW50cnkudGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYnJhbmRpbmcgdmFyaWFudCcpLFxuICAgICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoaXMgYnJhbmRpbmcgdmFyaWFudC4gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgU3RhdHVzLkRBTkdFUlxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIGRpZCBub3QgY29uZmlybVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShlbnRyeS5wdWJsaWNPcHRpb25zQXBwLCB7XG4gICAgICAgICAgdmVyc2lvbjogZW50cnkudmVyc2lvblxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfVxuICBdO1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ05hbWUnKSxcbiAgICAgIHBhdGg6ICduYW1lJyxcbiAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IEJyYW5kaW5nTmFtZUNlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogZ2V0dGV4dCgnQXBwbGllZCB0b2BBcHBsaWNhdGlvbnMgYSBicmFuZGluZyBhcHBsaWVzIHRvICh0YWJsZSBjb2x1bW4gaGVhZGVyKWAnKSxcbiAgICAgIHBhdGg6ICd0YWdzJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTogJ3NtYWxsJyxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogQnJhbmRpbmdUYWdzQ2VsbFJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50OiBCcmFuZGluZ1RhZ3NIZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvd25lcicsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ093bmVyJyksXG4gICAgICBwYXRoOiAnb3duZXInLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdsYXN0VXBkYXRlZCcsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0xhc3QgdXBkYXRlZCcpLFxuICAgICAgcGF0aDogJ2xhc3RVcGRhdGVkJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlXG4gICAgfVxuICBdO1xuICBjdXJyZW50QXBwQ29udGV4dFBhdGggPSAnYWRtaW5pc3RyYXRpb24nO1xuICBhdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJDogT2JzZXJ2YWJsZTx7XG4gICAgcHVibGljT3B0aW9uczogSUFwcGxpY2F0aW9uO1xuICAgIHZhcmlhbnRzOiBCcmFuZFZlcnNpb25bXTtcbiAgfT47XG5cbiAgcHJpdmF0ZSByZWxvYWRUcmlnZ2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJyYW5kaW5nczogU3RvcmVCcmFuZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXA6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdGF0aWNBc3NldHM6IFN0YXRpY0Fzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIG1vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1Nb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJhbmRpbmdWZXJzaW9uU2VydmljZTogQnJhbmRpbmdWZXJzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFkZEJyYW5kaW5nTW9kYWxTZXJ2aWNlOiBBZGRCcmFuZGluZ01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmFuZGluZ0ltcG9ydE1vZGFsU2VydmljZTogQnJhbmRpbmdJbXBvcnRNb2RhbFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5jdXJyZW50QXBwQ29udGV4dFBhdGggPSB0aGlzLmFwcFN0YXRlLnN0YXRlLmFwcD8uY29udGV4dFBhdGggfHwgdGhpcy5jdXJyZW50QXBwQ29udGV4dFBhdGg7XG4gICAgdGhpcy5hdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJCA9IHRoaXMucmVsb2FkVHJpZ2dlci5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYnJhbmRpbmdzLmxvYWRCcmFuZGluZ1ZhcmlhbnRzKCkpLFxuICAgICAgLy8gaGlkZSB0aGUgZmFsbGJhY2sgZnJvbSB1c2Vyc1xuICAgICAgbWFwKHZhcmlhbnRzID0+IHtcbiAgICAgICAgdmFyaWFudHMudmFyaWFudHMgPSB2YXJpYW50cy52YXJpYW50cy5maWx0ZXIodiA9PiAhdi50YWdzPy5pbmNsdWRlcygnZmFsbGJhY2snKSk7XG4gICAgICAgIHJldHVybiB2YXJpYW50cztcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBbGxCcmFuZGluZ3MocHVibGljT3B0aW9ucz86IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICBnZXR0ZXh0KCdEZWxldGUgYWxsIGJyYW5kaW5nIHZhcmlhbnRzJyksXG4gICAgICBnZXR0ZXh0KFxuICAgICAgICBgPHAgY2xhc3M9XCJtLWItOFwiPlxuICAgICAgICAgIFRoaXMgYWN0aW9uIHdpbGwgcGVybWFuZW50bHkgcmVtb3ZlIGFsbCBjdXN0b20gYnJhbmRpbmcgdmFyaWFudHMuIFlvdXIgdGVuYW50IHdpbGwgcmV2ZXJ0XG4gICAgICAgICAgdG8gdGhlIGRlZmF1bHQgYnJhbmRpbmcuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtLWItOFwiPlxuICAgICAgICAgIENvbnNpZGVyIGV4cG9ydGluZyB5b3VyIGN1c3RvbSBicmFuZGluZyB2YXJpYW50cyBiZWZvcmUgcHJvY2VlZGluZywgYXMgdGhpcyBhY3Rpb24gY2Fubm90XG4gICAgICAgICAgYmUgdW5kb25lLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb250aW51ZT9cbiAgICAgICAgPC9wPmBcbiAgICAgICksXG4gICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgeyBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpLCBvazogZ2V0dGV4dCgnRGVsZXRlIGFsbCcpIH1cbiAgICApO1xuICAgIGlmIChyZXN1bHQgPT09IGZhbHNlIHx8ICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAhcmVzdWx0LmNvbmZpcm1lZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy5kZWxldGVBbGxCcmFuZGluZ3MocHVibGljT3B0aW9ucyk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyBleHBvcnRCcmFuZGluZyh2YXJpYW50OiBCcmFuZFZlcnNpb24pIHtcbiAgICBjb25zdCBicmFuZGluZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYnJhbmRpbmdzLmdldFppcEZvckJpbmFyeSh2YXJpYW50LmlkKSk7XG4gICAgY29uc3Qgc3RhdGljQXNzZXRzQXBwID0gYXdhaXQgdGhpcy5zdGF0aWNBc3NldHMuZ2V0QXBwRm9yVGVuYW50KCdicmFuZGluZycpO1xuICAgIGNvbnN0IHN0YXRpY0Fzc2V0c1ppcCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5icmFuZGluZ3MuZ2V0WmlwRm9yQmluYXJ5KFxuICAgICAgICBzdGF0aWNBc3NldHNBcHAuYWN0aXZlVmVyc2lvbklkLFxuICAgICAgICB0aGlzLnN0YXRpY0Fzc2V0cy5maWxlTmFtZXMuZXhwb3J0WmlwTmFtZVxuICAgICAgKVxuICAgICk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IHRoaXMuemlwLmNyZWF0ZVppcChbXG4gICAgICB7IGZpbGVOYW1lOiB0aGlzLmJyYW5kaW5ncy5maWxlTmFtZXMuZXhwb3J0WmlwTmFtZSwgYmxvYjogYnJhbmRpbmcgfSxcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuc3RhdGljQXNzZXRzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lLCBibG9iOiBzdGF0aWNBc3NldHNaaXAgfVxuICAgIF0pO1xuICAgIHNhdmVBcyhibG9iLCBgYnJhbmRpbmctZXhwb3J0LSR7dmFyaWFudC5uYW1lfS0ke3ZhcmlhbnQucmV2aXNpb259LSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9LnppcGApO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlbG9hZFRyaWdnZXIubmV4dCgpO1xuICB9XG5cbiAgYXN5bmMgYWRkTmV3VmVyc2lvbigpIHtcbiAgICBjb25zdCB2ZXJzaW9uRGV0YWlscyA9IGF3YWl0IHRoaXMuYWRkQnJhbmRpbmdNb2RhbFNlcnZpY2Uub3BlbkFkZEJyYW5kaW5nTW9kYWwoKTtcbiAgICBpZiAoIXZlcnNpb25EZXRhaWxzKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGZhbGxCYWNrQnJhbmRpbmcgPSB7fTtcbiAgICB0cnkge1xuICAgICAgZmFsbEJhY2tCcmFuZGluZyA9IGF3YWl0IHRoaXMuYnJhbmRpbmdzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24oJ2xhdGVzdCcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGxvYWQgbGF0ZXN0IGJyYW5kaW5nYCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmFkZEJyYW5kaW5nKFxuICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpLFxuICAgICAgICBmYWxsQmFja0JyYW5kaW5nLFxuICAgICAgICBbdmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lXVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLndhaXRGb3JCcmFuZGluZ1RvQmVQcmVzZW50KHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSk7XG4gICAgICB0aGlzLmVkaXRCcmFuZGluZyh2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlLCAnZGFuZ2VyJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZHVwbGljYXRlVmVyc2lvbih2ZXJzaW9uOiBCcmFuZFZlcnNpb24pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5icmFuZGluZ3MuZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbih2ZXJzaW9uLnZlcnNpb24pO1xuICAgIGNvbnN0IHZlcnNpb25EZXRhaWxzID0gYXdhaXQgdGhpcy5hZGRCcmFuZGluZ01vZGFsU2VydmljZS5vcGVuRHVwbGljYXRlQnJhbmRpbmdNb2RhbCgpO1xuICAgIGlmICghdmVyc2lvbkRldGFpbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5icmFuZGluZ3MuYWRkQnJhbmRpbmcoXG4gICAgICAgIHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSksXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIFt2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWVdXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5icmFuZGluZ3Mud2FpdEZvckJyYW5kaW5nVG9CZVByZXNlbnQodmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lKTtcbiAgICAgIHRoaXMuZWRpdEJyYW5kaW5nKHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUsICdkYW5nZXInKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlZGl0QnJhbmRpbmcoYnJhbmRpbmdOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2JyYW5kaW5nTmFtZSwgJ2VkaXQnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhcnRlZFVzaW5nQnJhbmRpbmcoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgIGdldHRleHQoYEdldCBzdGFydGVkIHVzaW5nIGJyYW5kaW5nIHZhcmlhbnRzYCksXG4gICAgICBnZXR0ZXh0KFxuICAgICAgICBgPHAgY2xhc3M9XCJtLWItOFwiPkNvbmZpcm1pbmcgdGhpcyBhY3Rpb24gY3JlYXRlcyB0d28gYnJhbmRpbmcgdmFyaWFudHM6PC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJtLWItOCBwLWwtMTZcIj5cbiAgICAgICAgICA8bGk+QSBkZWZhdWx0IGNvcHkgb2YgeW91ciBjdXJyZW50IGdsb2JhbCBicmFuZGluZzwvbGk+XG4gICAgICAgICAgPGxpPllvdXIgbmV3IGN1c3RvbWl6YWJsZSB2YXJpYW50LjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxwIGNsYXNzPVwibS1iLThcIj5cbiAgICAgICAgICBBZnRlciBjdXN0b21pemF0aW9uLCB5b3UgY2FuIHNldCB5b3VyIG5ldyB2YXJpYW50IGFzIGdsb2JhbCBvciBhcHBseSBpdCB0byBzcGVjaWZpYyBhcHBzLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIFRvIHJldmVydCBjaGFuZ2VzLCBzaW1wbHkgc2V0IHRoZSBkZWZhdWx0IGJyYW5kaW5nIGFzIGdsb2JhbCBvciB1c2UgdGhlIFwiRGVsZXRlIGFsbFxuICAgICAgICAgIGJyYW5kaW5nc1wiIGJ1dHRvbiBhdCBhbnkgdGltZS5cbiAgICAgICAgPC9wPmBcbiAgICAgIClcbiAgICApO1xuICAgIGlmIChyZXN1bHQgPT09IGZhbHNlIHx8ICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAhcmVzdWx0LmNvbmZpcm1lZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy5nZXRTdGFydGVkVXNpbmdCcmFuZGluZygpO1xuICAgIGF3YWl0IHRoaXMuYWRkTmV3VmVyc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgYXBwbHlUb0FwcHModmVyc2lvbjogQnJhbmRWZXJzaW9uKSB7XG4gICAgY29uc3QgcHJlZml4ID0gJ2FwcC0nO1xuICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gdmVyc2lvbi50YWdzXG4gICAgICAuZmlsdGVyKHRhZyA9PiB0YWcuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgLm1hcCh0YWcgPT4gdGFnLnJlcGxhY2UocHJlZml4LCAnJykpO1xuICAgIGNvbnN0IG90aGVyVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWcuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICBsZXQgc2VsZWN0ZWRUYWdzOiBBd2FpdGVkPEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50WydyZXN1bHQnXT47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbC5zaG93KEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGluaXRpYWxTdGF0ZTogeyBjdXJyZW50VGFncyB9LFxuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgc2VsZWN0ZWRUYWdzID0gYXdhaXQgbW9kYWxSZWYuY29udGVudC5yZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbW9kYWwgY2xvc2VkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFnc1RvU2V0ID0gW1xuICAgICAgLi4ub3RoZXJUYWdzLFxuICAgICAgLi4uT2JqZWN0LmtleXMoc2VsZWN0ZWRUYWdzKVxuICAgICAgICAuZmlsdGVyKGtleSA9PiBzZWxlY3RlZFRhZ3Nba2V5XSlcbiAgICAgICAgLm1hcCh0YWcgPT4gYCR7cHJlZml4fSR7dGFnfWApXG4gICAgXTtcblxuICAgIGF3YWl0IHRoaXMucmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKHZlcnNpb24ucHVibGljT3B0aW9uc0FwcCwgdGFnc1RvU2V0LCB2ZXJzaW9uLnZlcnNpb24pO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKFxuICAgICAgdmVyc2lvbi5wdWJsaWNPcHRpb25zQXBwLFxuICAgICAgdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgdGFnc1RvU2V0XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEJyYW5kaW5nKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlLm9wZW5CcmFuZGluZ0ltcG9ydE1vZGFsKCk7XG5cbiAgICAgIHRoaXMuYnJhbmRpbmdzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gICAgICB0aGlzLnJlbG9hZFRyaWdnZXIubmV4dCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG1vZGFsIGNsb3NlZFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKFxuICAgIHB1YmxpY09wdGlvbnNBcHA6IElBcHBsaWNhdGlvbixcbiAgICB0YWdzVG9SZW1vdmU6IHN0cmluZ1tdLFxuICAgIHZlcnNpb25Ub0lnbm9yZT86IHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2YgcHVibGljT3B0aW9uc0FwcC5hcHBsaWNhdGlvblZlcnNpb25zKSB7XG4gICAgICBpZiAodmVyc2lvbi52ZXJzaW9uID09PSB2ZXJzaW9uVG9JZ25vcmUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZW1vdmVkVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWdzVG9SZW1vdmUuaW5jbHVkZXModGFnKSk7XG4gICAgICBpZiAocmVtb3ZlZFRhZ3MubGVuZ3RoID09PSB2ZXJzaW9uLnRhZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoXG4gICAgICAgIHB1YmxpY09wdGlvbnNBcHAsXG4gICAgICAgIHZlcnNpb24udmVyc2lvbixcbiAgICAgICAgcmVtb3ZlZFRhZ3NcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LXRpdGxlIHRyYW5zbGF0ZT5CcmFuZGluZzwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ3BhbGV0dGUnXCJcbiAgICBbbGFiZWxdPVwiJ0JyYW5kaW5nJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy9icmFuZGluZy1lZGl0b3InXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJhdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJCB8IGFzeW5jIGFzIGJyYW5kaW5nVmFyaWFudDsgZWxzZSBsb2FkaW5nXCI+XG4gIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgKm5nSWY9XCJicmFuZGluZ1ZhcmlhbnQucHVibGljT3B0aW9uc1wiXG4gICAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgICBbcHJpb3JpdHldPVwiMzBcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgKGNsaWNrKT1cImFkZE5ld1ZlcnNpb24oKVwiXG4gICAgICBkYXRhLWN5PVwiYnJhbmRpbmctYWRkLWJyYW5kaW5nLXZhcmlhbnRcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgIDxzcGFuIHRyYW5zbGF0ZT5BZGQgdmFyaWFudDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjIwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1pbXBvcnQtYnJhbmRpbmdcIlxuICAgICAgKGNsaWNrKT1cImltcG9ydEJyYW5kaW5nKClcIlxuICAgID5cbiAgICAgIDxpIFtjOHlJY29uXT1cIidkYXRhLWltcG9ydCdcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+SW1wb3J0IHZhcmlhbnQ8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgICpuZ0lmPVwiYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnNcIlxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjEwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVBbGxCcmFuZGluZ3MoYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnMpXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1yZW1vdmUtYWxsLWJyYW5kaW5nc1wiXG4gICAgPlxuICAgICAgPGkgW2M4eUljb25dPVwiJ3RyYXNoLW8nXCI+PC9pPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPkRlbGV0ZSBhbGwgdmFyaWFudHM8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2wgYm9yZGVyLXRvcFwiPlxuICAgIDxjOHktZGF0YS1ncmlkXG4gICAgICBbdGl0bGVdPVwiJ0JyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgICAgIFtyb3dzXT1cImJyYW5kaW5nVmFyaWFudC52YXJpYW50c1wiXG4gICAgPlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCIncGFsZXR0ZSdcIlxuICAgICAgICBbdGl0bGVdPVwiJ05vIGJyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtzdWJ0aXRsZV09XCJcbiAgICAgICAgICAnUGVyc29uYWxpemUgeW91ciBleHBlcmllbmNlIHdpdGggYSB0aGVtZS1hYmxlIGludGVyZmFjZS4gQ3JlYXRlIGEgdW5pcXVlIGxvb2sgdGhhdCBhbGlnbnNcbiAgICAgICAgICAgd2l0aCB5b3VyIGJyYW5kIGlkZW50aXR5LidcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwiIWJyYW5kaW5nVmFyaWFudC5wdWJsaWNPcHRpb25zXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwiZmFsc2VcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1nZXQtc3RhcnRlZC11c2luZy1icmFuZGluZ1wiXG4gICAgICAgICAgKGNsaWNrKT1cImdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKClcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQWRkIGJyYW5kaW5nIHZhcmlhbnRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8L2M4eS1kYXRhLWdyaWQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG48L25nLXRlbXBsYXRlPlxuIl19
|