@c8y/ngx-components 1021.13.3 → 1021.22.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/alarm-details.component.d.ts +1 -3
- package/alarms/alarm-details.component.d.ts.map +1 -1
- package/alarms/alarm-info.component.d.ts +9 -14
- package/alarms/alarm-info.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 +1 -0
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.component.d.ts.map +1 -1
- package/alarms/alarms.helper.d.ts +5 -0
- package/alarms/alarms.helper.d.ts.map +1 -0
- package/alarms/alarms.model.d.ts +30 -0
- package/alarms/alarms.model.d.ts.map +1 -1
- package/alarms/alarms.module.d.ts.map +1 -1
- package/alarms/cockpit/index.d.ts.map +1 -1
- package/alarms/devicemanagement/index.d.ts.map +1 -1
- package/alarms/index.d.ts +5 -4
- package/alarms/index.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 +24 -18
- 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/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-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 +11 -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 +6 -12
- package/core/dashboard/wiget-time-context/widget-time-context.model.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/core/router/context-route.component.d.ts +8 -3
- package/core/router/context-route.component.d.ts.map +1 -1
- package/core/router/context-route.service.d.ts +29 -3
- package/core/router/context-route.service.d.ts.map +1 -1
- package/core/router/router-tabs.resolver.d.ts +4 -1
- package/core/router/router-tabs.resolver.d.ts.map +1 -1
- package/core/router/router.model.d.ts +40 -3
- package/core/router/router.model.d.ts.map +1 -1
- package/core/router/router.module.d.ts +2 -1
- package/core/router/router.module.d.ts.map +1 -1
- package/core/router/router.service.d.ts +5 -4
- package/core/router/router.service.d.ts.map +1 -1
- package/core/router/scoped-context-route.service.d.ts +57 -0
- package/core/router/scoped-context-route.service.d.ts.map +1 -0
- package/core/router/view-context.service.d.ts +8 -18
- package/core/router/view-context.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/alarms/alarm-details.component.mjs +7 -9
- package/esm2022/alarms/alarm-info.component.mjs +23 -33
- package/esm2022/alarms/alarms-list.component.mjs +5 -16
- package/esm2022/alarms/alarms-view.service.mjs +3 -2
- package/esm2022/alarms/alarms.component.mjs +10 -3
- package/esm2022/alarms/alarms.helper.mjs +32 -0
- package/esm2022/alarms/alarms.model.mjs +1 -1
- package/esm2022/alarms/alarms.module.mjs +5 -5
- package/esm2022/alarms/cockpit/index.mjs +13 -17
- package/esm2022/alarms/devicemanagement/index.mjs +15 -18
- package/esm2022/alarms/index.mjs +6 -5
- 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.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 +18 -1
- 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/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-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 -37
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -28
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +3 -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/plugins/plugins-resolve.service.mjs +12 -37
- package/esm2022/core/router/context-route.component.mjs +23 -13
- package/esm2022/core/router/context-route.service.mjs +37 -5
- package/esm2022/core/router/router-tabs.resolver.mjs +46 -15
- package/esm2022/core/router/router.model.mjs +6 -1
- package/esm2022/core/router/router.module.mjs +20 -13
- package/esm2022/core/router/router.service.mjs +24 -10
- package/esm2022/core/router/scoped-context-route.service.mjs +152 -0
- package/esm2022/core/router/view-context.service.mjs +59 -16
- 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/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-alarms-cockpit.mjs +12 -16
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +14 -17
- package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +203 -185
- package/fesm2022/c8y-ngx-components-alarms.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-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 +5476 -4396
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- 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 +257 -18
- 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/i18n/translate.loader.d.ts +0 -31
- package/core/i18n/translate.loader.d.ts.map +0 -1
- package/esm2022/core/i18n/translate.loader.mjs +0 -71
|
@@ -312,7 +312,7 @@ export class ContextDashboardComponent {
|
|
|
312
312
|
if (this.dashboard) {
|
|
313
313
|
this.dashboard.historyDescription = {};
|
|
314
314
|
}
|
|
315
|
-
this.widgetsDashboard.editMode
|
|
315
|
+
this.widgetsDashboard.editMode$.next(false);
|
|
316
316
|
if (!onDeactivate) {
|
|
317
317
|
// when setWidgets is called during navigation from device to device, navigation fails
|
|
318
318
|
await this.setWidgets(dashboardChildren.children);
|
|
@@ -647,7 +647,7 @@ export class ContextDashboardComponent {
|
|
|
647
647
|
: this.gainsightService.hashGroupName(str);
|
|
648
648
|
}
|
|
649
649
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextDashboardComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ContextDashboardService }, { token: i3.AlertService }, { token: i0.Renderer2 }, { token: CONTEXT_DASHBOARD_CONFIG }, { token: i4.WidgetService }, { token: i5.BsModalService }, { token: i3.GainsightService }, { token: i3.ActionBarService }, { token: i6.TranslateService }, { token: i3.ModalService }, { token: i7.DashboardEditModeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
650
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton", translateWidgetTitle: "translateWidgetTitle", hideAvailability: "hideAvailability" }, host: { listeners: { "window:beforeunload": "beforeUnloadHandler($event)" }, properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, viewQueries: [{ propertyName: "dashboardDetails", first: true, predicate: DashboardDetailComponent, descendants: true, static: true }, { propertyName: "widgetsDashboard", first: true, predicate: WidgetsDashboardComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || widgetsDashboard?.editMode\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "isCopyDisabled", "breadcrumb", "editModeButtons"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onResize", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onChangeStart", "onChangeEnd", "onSaveDashboard", "onCancelDashboard", "revertChange"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i9.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i10.DashboardDetailComponent, selector: "c8y-dashboard-detail", inputs: ["isReport", "deviceType", "context", "mo", "dashboard", "isNamedDashboard", "hideAvailability"], outputs: ["dashboardSaved", "previewChanged"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
|
|
650
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton", translateWidgetTitle: "translateWidgetTitle", hideAvailability: "hideAvailability" }, host: { listeners: { "window:beforeunload": "beforeUnloadHandler($event)" }, properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, viewQueries: [{ propertyName: "dashboardDetails", first: true, predicate: DashboardDetailComponent, descendants: true, static: true }, { propertyName: "widgetsDashboard", first: true, predicate: WidgetsDashboardComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || (widgetsDashboard?.editMode$ | async)\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "isCopyDisabled", "breadcrumb", "editModeButtons"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onResize", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onChangeStart", "onChangeEnd", "onSaveDashboard", "onCancelDashboard", "revertChange"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i9.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i10.DashboardDetailComponent, selector: "c8y-dashboard-detail", inputs: ["isReport", "deviceType", "context", "mo", "dashboard", "isNamedDashboard", "hideAvailability"], outputs: ["dashboardSaved", "previewChanged"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }] }); }
|
|
651
651
|
}
|
|
652
652
|
__decorate([
|
|
653
653
|
memoize(),
|
|
@@ -662,7 +662,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
662
662
|
display: block;
|
|
663
663
|
`,
|
|
664
664
|
class: 'dashboard c8y-grid-dashboard'
|
|
665
|
-
}, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || widgetsDashboard?.editMode\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n" }]
|
|
665
|
+
}, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || (widgetsDashboard?.editMode$ | async)\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n" }]
|
|
666
666
|
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ContextDashboardService }, { type: i3.AlertService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
667
667
|
type: Inject,
|
|
668
668
|
args: [CONTEXT_DASHBOARD_CONFIG]
|
|
@@ -703,4 +703,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
703
703
|
type: HostListener,
|
|
704
704
|
args: ['window:beforeunload', ['$event']]
|
|
705
705
|
}], convertStringToHash: [] } });
|
|
706
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWiwyQkFBMkIsRUFFM0Isb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsT0FBTyxFQUNQLFlBQVksRUFFWixNQUFNLEVBR04seUJBQXlCLEVBQzFCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUVMLHdCQUF3QixFQUl4Qiw2QkFBNkIsRUFHN0Isa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUN0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9B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a0I7c0JBRGpCLEtBQUs7Z0JBR04scUJBQXFCO3NCQURwQixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixLQUFLO3NCQURKLFdBQVc7dUJBQUMsT0FBTztnQkFHbUMsZ0JBQWdCO3NCQUF0RSxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFckQsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQThDaEQsbUJBQW1CO3NCQUR4QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVwQmpDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJTZXJ2aWNlLFxuICBBbGVydFNlcnZpY2UsXG4gIEJyZWFkY3J1bWJJdGVtLFxuICBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24sXG4gIERhc2hib2FyZENoYW5nZSxcbiAgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ29tcG9uZW50LFxuICBEYXNoYm9hcmRDb3B5UGVybWlzc2lvbixcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIG1lbW9pemUsXG4gIE1vZGFsU2VydmljZSxcbiAgUmV2ZXJ0Q2hhbmdlVHlwZSxcbiAgU3RhdHVzLFxuICBXaWRnZXQsXG4gIFdpZGdldENoYW5nZSxcbiAgV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZXZlcnksIGZpbmRJbmRleCwga2ViYWJDYXNlLCBrZXlCeSwgb21pdCwgc29tZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDYW5EZWFjdGl2YXRlQ29tcG9uZW50LFxuICBDT05URVhUX0RBU0hCT0FSRF9DT05GSUcsXG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRDb25maWcsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRSxcbiAgRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZSxcbiAgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIFdJREdFVF9IRUFERVJfQ0xBU1NFU1xufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhc2hib2FyZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtY29uZmlnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRFZGl0TW9kZVNlcnZpY2UgfSBmcm9tICcuL21lbWVudG8vZGFzaGJvYXJkLWVkaXQtbW9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IGRhc2hib2FyZCBpcyBhIGRhc2hib2FyZCB3aGljaCByZXNvbHZlcyBpdCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoZGV2aWNlIG9yIGdyb3VwKVxuICogaXQgaXMgZGlzcGxheWVkIG9uLiBJdCB1c3VhbGx5IHVzZXMgdGhlIHJvdXRlLmRhdGEgZm9yIGl0LCBidXQgeW91IGNhbiBwYXNzXG4gKiBhIGRpZmZlcmVudCBtYW5hZ2VkT2JqZWN0IHRvIHRoZSBbbW9dIGlucHV0IHBhcmFtZXRlciB0byBjaGFuZ2UgdGhhdCBiZWhhdmlvci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRleHQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENhbkRlYWN0aXZhdGVDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGNoaWxkcmVuQ2xhc3NlcyA9ICcnO1xuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpXG4gIHNldFRpdGxlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdID0gW107XG4gIEBJbnB1dCgpXG4gIGNhbkNvcHkgPSB0cnVlO1xuICBASW5wdXQoKVxuICBjYW5EZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKVxuICBpc0xvYWRpbmcgPSB0cnVlO1xuICBASW5wdXQoKVxuICBicmVhZGNydW1iU2V0dGluZ3M6IEJyZWFkY3J1bWJJdGVtO1xuICBASW5wdXQoKVxuICBzaG93Q29udGV4dEhlbHBCdXR0b24gPSB0cnVlO1xuICAvKiogV2hldGhlciB0byB0cmFuc2xhdGUgd2lkZ2V0IHRpdGxlcy4gSG93ZXZlciwgZGFzaGJvYXJkJ3Mgb3duIHNldHRpbmcgdGFrZXMgcHJlY2VkZW5jZS4gSXQgZG9lcyBub3Qgb3ZlcnJpZGUgZGFzaGJvYXJkJ3Mgc2V0dGluZyAqL1xuICBASW5wdXQoKSB0cmFuc2xhdGVXaWRnZXRUaXRsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhpZGVzIGRhc2hib2FyZCBhdmFpbGFiaWxpdHkgc2VsZWN0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgaGlkZUF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBjbGFzcyA9ICcnO1xuXG4gIEBWaWV3Q2hpbGQoRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXNoYm9hcmREZXRhaWxzOiBEYXNoYm9hcmREZXRhaWxDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgd2lkZ2V0c0Rhc2hib2FyZDogV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudDtcblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmhhc1Blcm1pc3Npb25Ub0VkaXREYXNoYm9hcmQgfHwgIXRoaXMuZGFzaGJvYXJkRGV0YWlscz8uaXNDb2xsYXBzZWQ7XG4gIH1cblxuICB3aWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNDb3B5RGlzYWJsZWQ6IERhc2hib2FyZENvcHlQZXJtaXNzaW9uO1xuICBpc1JlcG9ydDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGFzaGJvYXJkVHlwZUxhYmVsID0gZ2V0dGV4dCgnRGFzaGJvYXJkIGZvciBcInt7IGRhc2hib2FyZFR5cGUgfX1cIicpO1xuICByZWFkb25seSBkYXNoYm9hcmRUeXBlUG9wb3ZlciA9IGdldHRleHQoYFxuICBUaGUgbGF5b3V0IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgZGFzaGJvYXJkIGlzIHVzZWQgYnkgYWxsIG90aGVyIGFzc2V0cyBvZiBtb2RlbCB0eXBlXG4gIDxzdHJvbmc+e3sgZGFzaGJvYXJkVHlwZSB9fTwvc3Ryb25nPi4gQW55IGNoYW5nZXMgbWFkZSB0byB0aGlzIGRhc2hib2FyZCBpbnN0YW5jZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsXG4gIG90aGVyIGluc3RhbmNlcy5gKTtcbiAgcHJpdmF0ZSBkYXRhU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaGFzUGVybWlzc2lvblRvRWRpdERhc2hib2FyZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KENPTlRFWFRfREFTSEJPQVJEX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQ29udGV4dERhc2hib2FyZENvbmZpZyxcbiAgICBwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25CYXJTZXJ2aWNlOiBBY3Rpb25CYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGVkaXRNb2RlU2VydmljZTogRGFzaGJvYXJkRWRpdE1vZGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5sb2FkQ29udGV4dERhc2hib2FyZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWROYW1lZERhc2hib2FyZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGJlZm9yZVVubG9hZEhhbmRsZXIoJGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkge1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGUgPSBhd2FpdCB0aGlzLmNhbkRlYWN0aXZhdGUodHJ1ZSk7XG4gICAgaWYgKCFjYW5EZWFjdGl2YXRlKSB7XG4gICAgICAkZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIHdpZGdldFxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSB3aWRnZXQgdG8gYXBwbHkgdGhlIGNvbnRleHQgdG8uXG4gICAqL1xuICBhcHBseURldmljZVRhcmdldCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmNvbmZpZy5kZXZpY2UpIHtcbiAgICAgIHdpZGdldC5jb25maWcuZGV2aWNlID0geyBpZDogdGhpcy5jb250ZXh0LmlkLCBuYW1lOiB0aGlzLmNvbnRleHQubmFtZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSByb3V0ZSBsaXN0ZW5lci5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWIpIHtcbiAgICAgIHRoaXMuZGF0YVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR3VhcmRzIGNvbXBvbmVudCBmcm9tIHVuaW50ZW5kZWQgbmF2aWdhdGlvbiBhd2F5IG9yIGNsb3NpbmcgdGFiIHdpdGhvdXQgc2F2aW5nIGNoYW5nZXMuXG4gICAqIE5hdmlnYXRpb24gY29udGludWVzIGlmIHRydWUgaXMgcmV0dXJuZWQsIGFuZCBuYXZpZ2F0aW9uIGlzIGNhbmNlbGxlZCBpZiByZXR1cm5lZCB2YWx1ZSBpcyBmYWxzZS5cbiAgICogQHBhcmFtIG9taXRDb25maXJtIE9taXRzIGNvbmZpcm0gY2FsbHMgaW5zaWRlIG1ldGhvZCBib2R5ICh3aXRob3V0IHRoaXMgcGFyYW0sIHdoZW4gbWV0aG9kIGlzIHVzZWQgaW5cbiAgICogb24gJ2JlZm9yZXVubG9hZCcgZXZlbnQgaGFuZGxlciwgZXJyb3IgaXMgdGhyb3duIGluIGNvbnNvbGUgYmVjYXVzZSBjb25maXJtIGlzIGJsb2NrZWQgYnkgYnJvd3NlciBhbnl3YXkgYW5kIHJldHVybnMgZmFsc2UpXG4gICAqL1xuICBhc3luYyBjYW5EZWFjdGl2YXRlKG9taXRDb25maXJtID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjYW5EZWFjdGl2YXRlID1cbiAgICAgIChhd2FpdCB0aGlzLmRhc2hib2FyZERldGFpbHMuY2FuRGVhY3RpdmF0ZShvbWl0Q29uZmlybSkpICYmXG4gICAgICAoYXdhaXQgdGhpcy53aWRnZXRzRGFzaGJvYXJkLmNhbkRlYWN0aXZhdGUob21pdENvbmZpcm0pKTtcblxuICAgIC8vIE5lZWRlZCBpbiBvcmRlciB0byByZXNldCBlZGl0IG1vZGUsIG90aGVyd2lzZSB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGRhc2hib2FyZHMsIHRoZSBlZGl0IG1vZGUgaXMgc3RpbGwgZW5hYmxlZC5cbiAgICBpZiAoY2FuRGVhY3RpdmF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5jYW5jZWxFZGl0TW9kZSh0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbkRlYWN0aXZhdGU7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGRhc2hib2FyZCB3aWRnZXRzIHRvIHRoZSBkZWZhdWx0IHdpZGdldHMuXG4gICAqL1xuICBhc3luYyByZXN0b3JlKCkge1xuICAgIGNvbnN0IG1lc2cgPSBnZXR0ZXh0KFxuICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gcmVzZXQgdGhlIHdpZGdldHMgb2YgdGhpcyBkYXNoYm9hcmQuIEFsbCBjaGFuZ2VzIHRvIHRoZSBkYXNoYm9hcmQgd2lkZ2V0cyB3aWxsIGdldCBsb3N0IGFuZCBjYW5ub3QgYmUgcmVjb3ZlcmVkLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShnZXR0ZXh0KCdSZXNldCB3aWRnZXRzJyksIG1lc2csIFN0YXR1cy5XQVJOSU5HLCB7XG4gICAgICAgIG9rOiBnZXR0ZXh0KCdSZXNldGBkYXNoYm9hcmRgJyksXG4gICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLm1hcFdpZGdldHModGhpcy5kZWZhdWx0V2lkZ2V0cyk7XG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuaGlzdG9yeURlc2NyaXB0aW9uID0ge1xuICAgICAgICBjaGFuZ2VUeXBlOiAncmVzZXQnXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBhd2FpdCB0aGlzLm9uTG9hZCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIE1ldGhvZCBjYWxsZWQgb24gZXZlcnkgd2lkZ2V0cyBkaW1lbnNpb25zIG9yIHBvc2l0aW9uIGNoYW5nZSBidXQgYWxzbyBmb3IgYWRkaW5nIG5ldyB3aWRnZXQgKGJlY2F1c2UgYWRkaW5nXG4gICAqIHdpZGdldCBjYXVzZXMgbGF5b3V0IGNoYW5nZXMpLiBJdCByZWNvZ25pemVzIHdoYXQgdHlwZSBvZiBjaGFuZ2UgaGFzIGJlZW4gZG9uZSBhbmQgdXBkYXRlcyBjdXJyZW50IHdpZGdldHMgc3RhdGVcbiAgICogYWNjb3JkaW5nbHkuXG4gICAqIEBwYXJhbSBjaGlsZCBDaGFuZ2Ugb2JqZWN0LlxuICAgKi9cbiAgcG9zaXRpb25PcldpZGdldERpbWVuc2lvbkNoYW5nZShjaGlsZDogRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfCBEYXNoYm9hcmRDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmVkaXRNb2RlU2VydmljZS5nZXRDdXJyZW50U3RhdGUoKT8uY2hpbGRyZW4gfHwge307XG4gICAgY29uc3QgZGVzY3JpcHRpb25Qcm9wOiBrZXlvZiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSA9XG4gICAgICBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPT09IE9iamVjdC52YWx1ZXMoY3VycmVudFN0YXRlKS5sZW5ndGggPyAnYXJyYW5nZW1lbnQnIDogJ2FkZGVkJztcbiAgICBsZXQgY2hhbmdlTmFtZTogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnbmFtZSddO1xuICAgIGxldCB3aWRnZXRzQ2hhbmdlZDogV2lkZ2V0W107XG4gICAgaWYgKGRlc2NyaXB0aW9uUHJvcCA9PT0gJ2FkZGVkJykge1xuICAgICAgY2hhbmdlTmFtZSA9IERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FLmFkZGVkO1xuICAgICAgY29uc3QgYWRkZWRXaWRnZXQgPSBjaGlsZC5jaGlsZHJlbi5maW5kKGMgPT4gIWN1cnJlbnRTdGF0ZVtjLmRhdGEuaWRdKTtcbiAgICAgIHdpZGdldHNDaGFuZ2VkID0gW2FkZGVkV2lkZ2V0LmRhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2VOYW1lID0gREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUuYXJyYW5nZW1lbnQ7XG4gICAgICB3aWRnZXRzQ2hhbmdlZCA9IGNoaWxkLmNoaWxkcmVuXG4gICAgICAgIC5tYXAoYyA9PiB7XG4gICAgICAgICAgY29uc3QgbGFzdFN0YXRlQ2hpbGQgPSBjdXJyZW50U3RhdGVbYy5kYXRhLmlkXTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjLnggIT0gbGFzdFN0YXRlQ2hpbGQuX3ggfHxcbiAgICAgICAgICAgIGMueSAhPSBsYXN0U3RhdGVDaGlsZC5feSB8fFxuICAgICAgICAgICAgYy53aWR0aCAhPSBsYXN0U3RhdGVDaGlsZC5fd2lkdGggfHxcbiAgICAgICAgICAgIGMuaGVpZ2h0ICE9IGxhc3RTdGF0ZUNoaWxkLl9oZWlnaHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjLmRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkQ2hpbGRyZW4oY2hpbGQsIGNoYW5nZU5hbWUsIGRlc2NyaXB0aW9uUHJvcCwgd2lkZ2V0c0NoYW5nZWQpO1xuICB9XG5cbiAgYXN5bmMgcmV2ZXJ0Q2hhbmdlKHJldmVydFR5cGU6IFJldmVydENoYW5nZVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZGFzaGJvYXJkQ2hpbGRyZW46IENvbnRleHREYXNoYm9hcmRbJ2NoaWxkcmVuJ107XG4gICAgaWYgKHJldmVydFR5cGUgPT09ICd1bmRvJykge1xuICAgICAgZGFzaGJvYXJkQ2hpbGRyZW4gPSB0aGlzLmVkaXRNb2RlU2VydmljZS51bmRvKCkuY2hpbGRyZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhc2hib2FyZENoaWxkcmVuID0gdGhpcy5lZGl0TW9kZVNlcnZpY2UucmVkbygpLmNoaWxkcmVuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnNldFdpZGdldHMoZGFzaGJvYXJkQ2hpbGRyZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYWxsIGRhc2hib2FyZHMgY2hpbGRyZW4ncy4gVXNlZnVsIGZvciBwb3NpdGlvbiBjaGFuZ2VzIG9uIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBjaGlsZCBUaGUgY2hpbGQgdG8gY2hhbmdlLlxuICAgKiBAcGFyYW0gY2hhbmdlTmFtZSBOYW1lIG9mIHRoZSBjaGFuZ2UgdG8gaW5kaWNhdGUgaXQgb24gdW5kby9yZWRvIGJ1dHRvbi5cbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uUHJvcCBQcm9wZXJ0eSB0byBhZGQgdG8gZGFzaGJvYXJkIGNoYW5nZSBoaXN0b3J5LlxuICAgKiBAcGFyYW0gd2lkZ2V0c0NoYW5nZWQgTGlzdCBvZiBjaGFuZ2VkIHdpZGdldHMuXG4gICAqL1xuICB1cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihcbiAgICBjaGlsZDogRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfCBEYXNoYm9hcmRDaGFuZ2UsXG4gICAgY2hhbmdlTmFtZTogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnbmFtZSddLFxuICAgIGRlc2NyaXB0aW9uUHJvcDoga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgd2lkZ2V0c0NoYW5nZWQ6IFdpZGdldFtdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IGNoaWxkO1xuICAgIGNvbnN0IG1hcHBlZENoaWxkcmVuOiB7IFtpZDogc3RyaW5nXTogV2lkZ2V0IH0gPSBrZXlCeShcbiAgICAgIGNoaWxkcmVuLm1hcChjID0+IHRoaXMuY29tcG9uZW50VG9XaWRnZXQoYykpLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gICAgdGhpcy5zZXROZXdTdGF0ZShcbiAgICAgIHsgbmFtZTogY2hhbmdlTmFtZSwgY2hpbGRyZW46IG1hcHBlZENoaWxkcmVuIH0sXG4gICAgICBkZXNjcmlwdGlvblByb3AsXG4gICAgICB3aWRnZXRzQ2hhbmdlZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIHRoZSBkYXNoYm9hcmQgYW5kIGN1cnJlbnQgY29udGV4dCB0byBhIGNsaXBib2FyZC5cbiAgICovXG4gIGFzeW5jIGNvcHlEYXNoYm9hcmQoKSB7XG4gICAgY29uc3Qgdmlld0NvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhPy5jb250ZXh0O1xuXG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jb3B5Q2xpcGJvYXJkID0ge1xuICAgICAgZGFzaGJvYXJkSWQ6IHRoaXMubW8uaWQsXG4gICAgICBkYXNoYm9hcmQ6IGNsb25lRGVlcCh0aGlzLm1vLmM4eV9EYXNoYm9hcmQpLFxuICAgICAgY29udGV4dDogY2xvbmVEZWVwKHtcbiAgICAgICAgY29udGV4dDogdmlld0NvbnRleHQsXG4gICAgICAgIGNvbnRleHREYXRhOiB0aGlzLmNvbnRleHRcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIGlmICh2aWV3Q29udGV4dCkge1xuICAgICAgY29uc3QgY3R4ID0gdmlld0NvbnRleHQuc3BsaXQoJy8nKS5zaGlmdCgpO1xuICAgICAgY29uc3QgbXNnID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICdEYXNoYm9hcmQgY29waWVkLiBOYXZpZ2F0ZSB0byB0aGUgZGVzaXJlZCB7eyBjdHggfX0gYW5kIHNlbGVjdCBcIlBhc3RlIGRhc2hib2FyZFwiJyxcbiAgICAgICAgeyBjdHggfVxuICAgICAgKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2Vzcyhtc2cpO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvbkJhclNlcnZpY2UucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgY29tcGxldGUgZGFzaGJvYXJkIGFuZCBuYXZpZ2F0ZSBhd2F5LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlRGFzaGJvYXJkKCkge1xuICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZGVsZXRlKHRoaXMubW8pO1xuICAgIGlmICh0aGlzLnJvdXRlLnBhcmVudCkge1xuICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC51cmwubWFwKHNlZ21lbnQgPT4gc2VnbWVudC5wYXRoKS5qb2luKCcvJyk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5vbkRlbGV0ZUdTRXZlbnQoKTtcbiAgfVxuXG4gIGdldCBpc0RldmljZVR5cGVEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXNoYm9hcmQ/LmRldmljZVR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRWRpdHMgYSB3aWRnZXQgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoYW5nZSBUaGUgd2lkZ2V0IGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGVkaXRXaWRnZXQoY2hhbmdlOiBXaWRnZXRDaGFuZ2UpIHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGNoYW5nZS5zb3VyY2U7XG4gICAgY29uc3QgY29tcG9uZW50ID0gYXdhaXQgdGhpcy53aWRnZXRTZXJ2aWNlLmdldFdpZGdldERlZmluaXRpb24oXG4gICAgICBjaGFuZ2Uud2lkZ2V0Lm5hbWUgfHwgY2hhbmdlLndpZGdldC5jb21wb25lbnRJZFxuICAgICk7XG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuYWRkV2lkZ2V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkV2lkZ2V0KHtcbiAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHsgLi4uY29tcG9uZW50LmRhdGEsIC4uLmNoYW5nZS53aWRnZXQsIF94OiB4LCBfeTogeSwgX3dpZHRoOiB3aWR0aCwgX2hlaWdodDogaGVpZ2h0IH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgd2lkZ2V0IHRvIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBzZWxlY3RlZCBEZWZpbmUgYSBzZWxlY3RlZCBjb21wb25lbnQgdG8gc3dpdGNoIHRvIGVkaXQgbW9kZSBkaXJlY3RseS5cbiAgICovXG4gIGFzeW5jIGFkZFdpZGdldChzZWxlY3RlZD86IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgY29uc3QgcGFydGlhbENsb25lU2VsZWN0ZWQgPSBzZWxlY3RlZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc2VsZWN0ZWQsXG4gICAgICAgICAgZGF0YTogY2xvbmVEZWVwKHNlbGVjdGVkLmRhdGEpXG4gICAgICAgIH1cbiAgICAgIDogc2VsZWN0ZWQ7XG5cbiAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gdGhpcy5jb250ZXh0LmNvbnRleHREYXRhID8gdGhpcy5jb250ZXh0LmNvbnRleHREYXRhIDogdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogUGFydGlhbDxXaWRnZXRDb25maWdDb21wb25lbnQ+ID0ge1xuICAgICAgbW86IHRoaXMubW8sXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQuYzh5X1JlcG9ydCA/IHt9IDogYWN0aXZlQ29udGV4dCxcbiAgICAgIHNlbGVjdGVkOiBwYXJ0aWFsQ2xvbmVTZWxlY3RlZFxuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbC5zaG93KFdpZGdldENvbmZpZ0NvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1sZycsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiBmYWxzZVxuICAgIH0pLmNvbnRlbnQgYXMgV2lkZ2V0Q29uZmlnQ29tcG9uZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5ld1dpZGdldCA9IGF3YWl0IG1vZGFsLnJlc3VsdDtcbiAgICAgIGlmICghdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHt9O1xuICAgICAgfVxuICAgICAgbmV3V2lkZ2V0LmNsYXNzZXMgPSB0aGlzLm1lcmdlV2lkZ2V0Q2xhc3NlcyhuZXdXaWRnZXQpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVXaWRnZXQobmV3V2lkZ2V0KTtcbiAgICAgIC8vIE5ldyBzdGF0ZSBpbiBlZGl0IG1vZGUgaXMgYWRkZWQgb25seSBmb3Igd2lkZ2V0IHVwZGF0ZS4gV2hlbiBhZGRpbmcgd2lkZ2V0LCBsYXlvdXQgY2hhbmdlIGlzIGFsd2F5cyB0cmlnZ2VyZWQsXG4gICAgICAvLyBzbyBpdCdzIGVhc2llciB0byBzZXQgbmV3IHN0YXRlIG9uIGxheW91dCBjaGFuZ2Ugb25seVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xuICAgICAgICAgIC4uLnRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpLmNoaWxkcmVuLFxuICAgICAgICAgIFtuZXdXaWRnZXQuaWRdOiBuZXdXaWRnZXRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXROZXdTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5jb25maWcsXG4gICAgICAgICAgICBjaGlsZHJlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICAgW25ld1dpZGdldF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG1vZGFsLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVdpZGdldHNUb0Rhc2hib2FyZCgpIHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmVkaXRNb2RlU2VydmljZS5nZXRDdXJyZW50U3RhdGUoKTtcbiAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSBjdXJyZW50U3RhdGUuY2hpbGRyZW47XG5cbiAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuaGlzdG9yeURlc2NyaXB0aW9uID0ge1xuICAgICAgY2hhbmdlVHlwZTogJ3VwZGF0ZScsXG4gICAgICB3aWRnZXRDaGFuZ2VzOiB0aGlzLm1hcFN0YXRlVG9IaXN0b3J5RGVzY3JpcHRpb24oY3VycmVudFN0YXRlLmNoYW5nZUhpc3RvcnkpXG4gICAgfTtcbiAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZSh0aGlzLm1vKTtcbiAgICB0aGlzLmVkaXRNb2RlU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmluaXQoe1xuICAgICAgbmFtZTogREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUuaW5pdGlhbCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VIaXN0b3J5OiB7fVxuICAgIH0pO1xuXG4gICAgdGhpcy5pc0NvcHlEaXNhYmxlZCA9IHRoaXMuZ2V0RGFzaGJvYXJkQ29weVBlcm1pc3Npb25TdGF0ZSgpO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsRWRpdE1vZGUob25EZWFjdGl2YXRlID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYXNoYm9hcmRDaGlsZHJlbiA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7fTtcbiAgICB9XG4gICAgdGhpcy53aWRnZXRzRGFzaGJvYXJkLmVkaXRNb2RlID0gZmFsc2U7XG4gICAgaWYgKCFvbkRlYWN0aXZhdGUpIHtcbiAgICAgIC8vIHdoZW4gc2V0V2lkZ2V0cyBpcyBjYWxsZWQgZHVyaW5nIG5hdmlnYXRpb24gZnJvbSBkZXZpY2UgdG8gZGV2aWNlLCBuYXZpZ2F0aW9uIGZhaWxzXG4gICAgICBhd2FpdCB0aGlzLnNldFdpZGdldHMoZGFzaGJvYXJkQ2hpbGRyZW4uY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgd2lkZ2V0IG9yIGFkZHMgYSBuZXcgb25lIGlmIGl0IGRvZXNuJ3QgZXhpc3Qgb25cbiAgICogdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIHdpZGdldCBUaGUgbmV3IHdpZGdldFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlV2lkZ2V0KHdpZGdldCkge1xuICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4KHRoaXMud2lkZ2V0cywgeyBpZDogd2lkZ2V0LmlkIH0pO1xuICAgIGNvbnN0IGlzTmV3ID0gaW5kZXggPT09IC0xO1xuICAgIGNvbnN0IG1hcHBlZFdpZGdldCA9IGF3YWl0IHRoaXMud2lkZ2V0U2VydmljZS5tYXBMZWdhY3kod2lkZ2V0KTtcbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIHRoaXMud2lkZ2V0cy5wdXNoKG1hcHBlZFdpZGdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2lkZ2V0cy5zcGxpY2UoaW5kZXgsIDEsIG1hcHBlZFdpZGdldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSB3aWRnZXQgYW5kIHJlYXJyYW5nZXMgdGhlIHJlbWFpbmluZyBvbmVzXG4gICAqIGlmIG5lY2Vzc2FyeS5cbiAgICogQHBhcmFtIGNoYW5nZSBUaGUgY2hhbmdlIGV2ZW50LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlV2lkZ2V0KGNoYW5nZTogV2lkZ2V0Q2hhbmdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgd2lkZ2V0LCBzb3VyY2UgfSA9IGNoYW5nZTtcbiAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLndpZGdldHMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gd2lkZ2V0LmlkKTtcbiAgICAgIHRoaXMud2lkZ2V0cy5zcGxpY2UodGhpcy53aWRnZXRzLmluZGV4T2YocmVtb3ZlZCksIDEpO1xuXG4gICAgICBjb25zdCB7IGRhc2hib2FyZCB9ID0gc291cmNlO1xuICAgICAgZGFzaGJvYXJkLmNoaWxkcmVuID0gZGFzaGJvYXJkLmNoaWxkcmVuLmZpbHRlcihjID0+IGMuZGF0YS5pZCAhPT0gd2lkZ2V0LmlkKTtcblxuICAgICAgLy8gdXNpbmcgc2V0VGltZW91dCB0byBnaXZlIHRoZSBjb21wb25lbnQgdGhlIGNoYW5jZSB0byByZW1vdmUgaXQuXG4gICAgICBjb25zdCBzbGVlcCA9IHRpbWVvdXQgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpKTtcbiAgICAgIGF3YWl0IHNsZWVwKDApO1xuXG4gICAgICBjb25zdCBjaGlsZCA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZShzb3VyY2UpO1xuICAgICAgY2hpbGQuY29sbGFwc2VVcEFsbCgpO1xuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihjaGlsZCwgREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUucmVtb3ZlZCwgJ3JlbW92ZWQnLCBbXG4gICAgICAgIHdpZGdldFxuICAgICAgXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCB0aGUgZHJhZ2dlZC1lbGVtZW50XG4gICAqICh3aGljaCBpcyBhdHRhY2hlZCB0byB0aGUgYm9keSkgaGFzIHRoZSByaWdodCBzdHlsaW5nLlxuICAgKi9cbiAgYWRkRGFzaGJvYXJkQ2xhc3NUb0JvZHkoKSB7XG4gICAgdGhpcy5jbGFzcy5zcGxpdCgnICcpLmZvckVhY2goY3NzQ2xhc3MgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBjc3NDbGFzcyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgdGhlIGRyYWdnZWQtZWxlbWVudFxuICAgKiAod2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlIGJvZHkpIGhhcyB0aGUgcmlnaHQgc3R5bGluZy5cbiAgICovXG4gIHJlbW92ZURhc2hib2FyZENsYXNzRnJvbUJvZHkoKSB7XG4gICAgdGhpcy5jbGFzcy5zcGxpdCgnICcpLmZvckVhY2goY3NzQ2xhc3MgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBjc3NDbGFzcyk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvbkxvYWQodHJhY2tFeHBlcmllbmNlPzogYm9vbGVhbikge1xuICAgIHRoaXMuaGFzUGVybWlzc2lvblRvRWRpdERhc2hib2FyZCA9IHRoaXMuZGFzaGJvYXJkXG4gICAgICA/IGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuY2FuRWRpdERhc2hib2FyZCh0aGlzLm1vKVxuICAgICAgOiBmYWxzZTtcbiAgICB0aGlzLmNhbkNvcHkgPVxuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZURhc2hib2FyZCh0aGlzLm1vKSB8fFxuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbykgfHxcbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNHcm91cERhc2hib2FyZCh0aGlzLm1vKTtcbiAgICBjb25zdCBkYXNoYm9hcmRDaGlsZHJlbjogQ29udGV4dERhc2hib2FyZFsnY2hpbGRyZW4nXSA9IGNsb25lRGVlcChcbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZD8uY2hpbGRyZW5cbiAgICApO1xuICAgIGNvbnN0IGRhc2hib2FyZENsYXNzZXMgPSB7XG4gICAgICAnYzh5LWdyaWQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgIGRhc2hib2FyZDogdHJ1ZSxcbiAgICAgIC4uLnRoaXMuZGFzaGJvYXJkPy5jbGFzc2VzXG4gICAgfTtcbiAgICB0aGlzLmlzQ29weURpc2FibGVkID0gdGhpcy5kYXNoYm9hcmRcbiAgICAgID8gdGhpcy5nZXREYXNoYm9hcmRDb3B5UGVybWlzc2lvblN0YXRlKClcbiAgICAgIDogeyBzdGF0ZTogZmFsc2UsIHJlYXNvbjogbnVsbCB9O1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmluaXQoe1xuICAgICAgbmFtZTogZ2V0dGV4dCgnSW5pdGlhbCBzdGF0ZScpLFxuICAgICAgY2hpbGRyZW46IGRhc2hib2FyZENoaWxkcmVuLFxuICAgICAgY2hhbmdlSGlzdG9yeToge31cbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuc2V0V2lkZ2V0cyhkYXNoYm9hcmRDaGlsZHJlbiwgdHJhY2tFeHBlcmllbmNlKTtcbiAgICB0aGlzLmNsYXNzID0gT2JqZWN0LmtleXMoZGFzaGJvYXJkQ2xhc3Nlcykuam9pbignICcpO1xuICAgIGlmICh0aGlzLmlzUmVwb3J0KSB7XG4gICAgICB0aGlzLmFkZFJlcG9ydERhc2hib2FyZFNldHRpbmdzKCk7XG4gICAgfVxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZERldGFpbHMuc2hvdyhmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMub25Mb2FkR1NFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRhc2hib2FyZFByZXZpZXcobGF5b3V0Q2hhbmdlczogQ29udGV4dERhc2hib2FyZCkge1xuICAgIGlmIChsYXlvdXRDaGFuZ2VzPy5jbGFzc2VzKSB7XG4gICAgICBjb25zdCBkYXNoYm9hcmRDbGFzc2VzID0ge1xuICAgICAgICAnYzh5LWdyaWQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgICAgZGFzaGJvYXJkOiB0cnVlLFxuICAgICAgICAuLi5sYXlvdXRDaGFuZ2VzLmNsYXNzZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNsYXNzID0gT2JqZWN0LmtleXMoZGFzaGJvYXJkQ2xhc3Nlcykuam9pbignICcpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMsXG4gICAgICAgIC4uLmxheW91dENoYW5nZXMud2lkZ2V0Q2xhc3Nlc1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWxvYWREYXNoYm9hcmQoZGFzaGJvYXJkTW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5kYXNoYm9hcmQgPSBkYXNoYm9hcmRNby5jOHlfRGFzaGJvYXJkO1xuICAgIHRoaXMubW8gPSBkYXNoYm9hcmRNbztcbiAgICBhd2FpdCB0aGlzLm9uTG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRXaWRnZXRzKFxuICAgIGRhc2hib2FyZENoaWxkcmVuOiBDb250ZXh0RGFzaGJvYXJkWydjaGlsZHJlbiddLFxuICAgIHRyYWNrRXhwZXJpZW5jZSA9IGZhbHNlXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlzRGV2aWNlVHlwZSA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VUeXBlKHRoaXMubW8pO1xuICAgIHRoaXMud2lkZ2V0cyA9IGF3YWl0IFByb21pc2UuYWxsPFdpZGdldD4oXG4gICAgICBPYmplY3QudmFsdWVzKGRhc2hib2FyZENoaWxkcmVuIHx8IHt9KS5tYXAod2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0LmNsYXNzZXMgPSB0aGlzLm1lcmdlV2lkZ2V0Q2xhc3Nlcyh3aWRnZXQpO1xuICAgICAgICBpZiAoaXNEZXZpY2VUeXBlKSB7XG4gICAgICAgICAgdGhpcy5hcHBseURldmljZVRhcmdldCh3aWRnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFja0V4cGVyaWVuY2UpIHtcbiAgICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KCdsb2FkV2lkZ2V0Jywge1xuICAgICAgICAgICAgd2lkZ2V0TmFtZTogd2lkZ2V0LmNvbXBvbmVudElkIHx8IHdpZGdldC5uYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0U2VydmljZS5tYXBMZWdhY3kod2lkZ2V0KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbnRleHREYXNoYm9hcmQoKSB7XG4gICAgdGhpcy5kYXRhU3ViID0gdGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoeyBkYXNoYm9hcmQsIGlzUmVwb3J0IH0pID0+IHtcbiAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGEuY29udGV4dERhdGEgfHwge307XG4gICAgICB0aGlzLnRpdGxlID0gdGhpcy5jb250ZXh0Py5uYW1lO1xuICAgICAgdGhpcy5tbyA9IGRhc2hib2FyZDtcbiAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5tby5jOHlfRGFzaGJvYXJkO1xuICAgICAgdGhpcy5pc1JlcG9ydCA9IGlzUmVwb3J0IHx8IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNSZXBvcnQodGhpcy5tbyk7XG4gICAgICBpZiAodGhpcy5pc1JlcG9ydCAmJiB0aGlzLmRhc2hib2FyZCAmJiAhdGhpcy5kYXNoYm9hcmQ/Lm5hbWUpIHtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQubmFtZSA9IHRoaXMudGl0bGU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1JlcG9ydCAmJiB0aGlzLmRhc2hib2FyZCkge1xuICAgICAgICB0aGlzLmRhc2hib2FyZC5jOHlfSXNOYXZpZ2F0b3JOb2RlID0gdGhpcy5jb250ZXh0LmM4eV9Jc05hdmlnYXRvck5vZGU7XG4gICAgICB9XG4gICAgICB0aGlzLnBhdGNoU2Vuc29yUGhvbmVEYXNoYm9hcmQodGhpcy5kYXNoYm9hcmQsIHRoaXMubW8ub3duZXIsIHRoaXMuY29udGV4dD8udHlwZSk7XG4gICAgICB0aGlzLm9uTG9hZCh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBlbmFibGUgdHJhbnNsYXRpb24gZm9yIHdpZGdldHMgd2l0aGluIHRoZSBkYXNoYm9hcmQsIHRoZSBcInRyYW5zbGF0ZVdpZGdldFRpdGxlXCIgZmxhZyBtdXN0IGJlIGVuYWJsZWQuXG4gICAqIFRoZSBwcm9wZXJ0eSBuZWVkcyB0byBiZSBwYXRjaGVkLCBhcyB0aGUgXCJTZW5zb3IgQXBwXCIgZG9lcyBub3QgcHJvdmlkZSB0aGlzIHNldHRpbmcuXG4gICAqL1xuICBwcml2YXRlIHBhdGNoU2Vuc29yUGhvbmVEYXNoYm9hcmQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkLCBvd25lcjogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2M4eV9TZW5zb3JQaG9uZScgJiYgb3duZXI/LmluY2x1ZGVzKCdkZXZpY2VfcGhvbmUnKSkge1xuICAgICAgZGFzaGJvYXJkLnRyYW5zbGF0ZVdpZGdldFRpdGxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWROYW1lZERhc2hib2FyZCgpIHtcbiAgICB0aGlzLmRhdGFTdWIgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlXG4gICAgICAuZ2V0TmFtZWREYXNoYm9hcmRPckNyZWF0ZSh0aGlzLm5hbWUsIHRoaXMuZGVmYXVsdFdpZGdldHMsIHRoaXMuY29udGV4dClcbiAgICAgIC5zdWJzY3JpYmUobW8gPT4ge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbnRleHQgfHwge307XG4gICAgICAgIHRoaXMubW8gPSBtbztcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQgPSB0aGlzLm1vLmM4eV9EYXNoYm9hcmQ7XG4gICAgICAgIHRoaXMub25Mb2FkKHRydWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlV2lkZ2V0Q2xhc3Nlcyh3aWRnZXQ6IFdpZGdldCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICBjb25zdCBoYXNIZWFkZXJDbGFzcyA9IFdJREdFVF9IRUFERVJfQ0xBU1NFUy5maW5kKFxuICAgICAgZWwgPT4gd2lkZ2V0LmNsYXNzZXMgJiYgd2lkZ2V0LmNsYXNzZXNbZWwuY2xhc3NdXG4gICAgKTtcbiAgICBjb25zdCB3aWRnZXRDbGFzc2VzID0gaGFzSGVhZGVyQ2xhc3NcbiAgICAgID8geyAuLi53aWRnZXQuY2xhc3NlcyB9XG4gICAgICA6IHsgLi4udGhpcy5kYXNoYm9hcmQud2lkZ2V0Q2xhc3NlcywgLi4ud2lkZ2V0LmNsYXNzZXMgfTtcbiAgICByZXR1cm4ge1xuICAgICAgY2FyZDogdHJ1ZSxcbiAgICAgICdjYXJkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICBba2ViYWJDYXNlKHdpZGdldC5jb21wb25lbnRJZCB8fCB3aWRnZXQubmFtZSldOiB0cnVlLFxuICAgICAgLi4ud2lkZ2V0Q2xhc3Nlc1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXBvbmVudFRvV2lkZ2V0KGNoaWxkOiBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vbWl0KGNoaWxkLmRhdGEsIFsnY29tcG9uZW50VHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQnLCAndHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQnXSksIC8vIHJlbW92ZSBsZWdhY3lcbiAgICAgIC4uLih7XG4gICAgICAgIF94OiBjaGlsZC54LFxuICAgICAgICBfeTogY2hpbGQueSxcbiAgICAgICAgX3dpZHRoOiBjaGlsZC53aWR0aCxcbiAgICAgICAgX2hlaWdodDogY2hpbGQuaGVpZ2h0XG4gICAgICB9IGFzIFdpZGdldClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZXBvcnREYXNoYm9hcmRTZXR0aW5ncygpIHtcbiAgICB0aGlzLnNldFRpdGxlID0gdHJ1ZTtcbiAgICB0aGlzLnRpdGxlID0gdGhpcy5jb250ZXh0Py5uYW1lIHx8IGdldHRleHQoJ05ldyByZXBvcnQnKTtcbiAgICB0aGlzLmJyZWFkY3J1bWJTZXR0aW5ncyA9IHtcbiAgICAgIGljb246ICd0aCcsXG4gICAgICBsYWJlbDogJ1JlcG9ydHMnLFxuICAgICAgcGF0aDogJ3JlcG9ydHMnXG4gICAgfTtcbiAgICB0aGlzLmNhbkRlbGV0ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXNoYm9hcmRDb3B5UGVybWlzc2lvblN0YXRlKCk6IERhc2hib2FyZENvcHlQZXJtaXNzaW9uIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaGFzUGVybWlzc2lvbnNUb0NvcHlEYXNoYm9hcmQoKSkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6IGZhbHNlLCByZWFzb246IENvcHlEYXNoYm9hcmREaXNhYmxlZFJlYXNvbi5QRVJNSVNTSU9OUyB9O1xuICAgIH1cbiAgICBjb25zdCBhbGxEYXNoYm9hcmRDaGlsZHJlbkFyZVZhbGlkID0gZXZlcnkodGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSBjaGlsZC5jb25maWcgfHwge307XG4gICAgICBjb25zdCBkYXRhUG9pbnRzID0gY29uZmlnLmRhdGFwb2ludHMgfHwgW107XG4gICAgICByZXR1cm4gIShcbiAgICAgICAgKGNvbmZpZy5kZXZpY2UgJiYgY29uZmlnLmRldmljZS5pZCAhPT0gdGhpcy5jb250ZXh0LmlkKSB8fFxuICAgICAgICBzb21lKGRhdGFQb2ludHMsIGRhdGFQb2ludCA9PiBkYXRhUG9pbnQuX190YXJnZXQ/LmlkICE9PSB0aGlzLmNvbnRleHQuaWQpXG4gICAgICApO1xuICAgIH0pO1xuICAgIGlmICghYWxsRGFzaGJvYXJkQ2hpbGRyZW5BcmVWYWxpZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6IGZhbHNlLCByZWFzb246IENvcHlEYXNoYm9hcmREaXNhYmxlZFJlYXNvbi5XUk9OR19SRUZFUkVOQ0UgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3RhdGU6IHRydWUgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TmV3U3RhdGUoXG4gICAgc3RhdGU6IFBpY2s8RGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZSwgJ25hbWUnIHwgJ2NoaWxkcmVuJz4sXG4gICAgZGVzY3JpcHRpb25Qcm9wOiBrZXlvZiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSxcbiAgICB3aWRnZXRzQ2hhbmdlZDogV2lkZ2V0W11cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldERlc2NyaXB0aW9uRm9yTmV3U3RhdGUoZGVzY3JpcHRpb25Qcm9wLCB3aWRnZXRzQ2hhbmdlZCk7XG4gICAgdGhpcy5lZGl0TW9kZVNlcnZpY2UubmV3U3RhdGUoeyAuLi5zdGF0ZSwgY2hhbmdlSGlzdG9yeTogZGVzY3JpcHRpb24gfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERlc2NyaXB0aW9uRm9yTmV3U3RhdGUoXG4gICAgZGVzY3JpcHRpb25Qcm9wOiBrZXlvZiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSxcbiAgICB3aWRnZXRzQ2hhbmdlZDogV2lkZ2V0W11cbiAgKTogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnY2hhbmdlSGlzdG9yeSddIHtcbiAgICBjb25zdCBjaGFuZ2VIaXN0b3J5ID0gdGhpcy5lZGl0TW9kZVNlcnZpY2UuZ2V0Q3VycmVudFN0YXRlKCkuY2hhbmdlSGlzdG9yeTtcbiAgICBpZiAoIWNoYW5nZUhpc3RvcnlbZGVzY3JpcHRpb25Qcm9wXSkge1xuICAgICAgY2hhbmdlSGlzdG9yeVtkZXNjcmlwdGlvblByb3BdID0ge307XG4gICAgfVxuICAgIHdpZGdldHNDaGFuZ2VkLmZvckVhY2godyA9PiB7XG4gICAgICBpZiAoZGVzY3JpcHRpb25Qcm9wID09PSAncmVtb3ZlZCcgJiYgY2hhbmdlSGlzdG9yeS5hZGRlZD8uW3cuaWRdKSB7XG4gICAgICAgIC8vIGlmIHdpZGdldCB3YXMgYWRkZWQgZHVyaW5nIGN1cnJlbnQgZWRpdCBzZXNzaW9uIGFuZCB0aGVuIHJlbW92ZWQsIGl0IHNob3VsZCBub3QgYmUgYXQgZGVzY3JpcHRpb24gYXQgYWxsXG4gICAgICAgIGRlbGV0ZSBjaGFuZ2VIaXN0b3J5LmFkZGVkW3cuaWRdO1xuICAgICAgICBpZiAoY2hhbmdlSGlzdG9yeS5jb25maWc/Llt3LmlkXSkge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VIaXN0b3J5LmNvbmZpZ1t3LmlkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlSGlzdG9yeS5hcnJhbmdlbWVudD8uW3cuaWRdKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZUhpc3Rvcnk/LmFycmFuZ2VtZW50W3cuaWRdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoZGVzY3JpcHRpb25Qcm9wID09PSAnY29uZmlnJyB8fCBkZXNjcmlwdGlvblByb3AgPT09ICdhcnJhbmdlbWVudCcpICYmXG4gICAgICAgIGNoYW5nZUhpc3RvcnkuYWRkZWQ/Llt3LmlkXVxuICAgICAgKSB7XG4gICAgICAgIC8vIGlmIHdpZGdldCB3YXMgYWRkZWQgYW5kIHRoZW4gbW9kaWZpZWQgaW4gY3VycmVudCBlZGl0IHNlc3Npb24sIGl0IHNob3VsZCBvbmx5IGJlIGluZGljYXRlZCBhcyBhZGRlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbmdlSGlzdG9yeVtkZXNjcmlwdGlvblByb3BdW3cuaWRdID0gdztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjaGFuZ2VIaXN0b3J5O1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTdGF0ZVRvSGlzdG9yeURlc2NyaXB0aW9uKFxuICAgIGRlc2NyaXB0aW9uOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlWydjaGFuZ2VIaXN0b3J5J11cbiAgKTogRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10ge1xuICAgIGNvbnN0IGhpc3RvcnlEZXNjcmlwdGlvbjogRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbikpIHtcbiAgICAgIGNvbnN0IHdpZGdldHMgPSBPYmplY3QudmFsdWVzKHZhbHVlKTtcbiAgICAgIGlmICghd2lkZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBoaXN0b3J5RGVzY3JpcHRpb25ba2V5XSA9IE9iamVjdC52YWx1ZXModmFsdWUpLm1hcCh3aWRnZXQgPT4gd2lkZ2V0LnRpdGxlKTtcbiAgICB9XG4gICAgcmV0dXJuIGhpc3RvcnlEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25EZWxldGVHU0V2ZW50KCkge1xuICAgIGNvbnN0IHBhcmVudE5hbWUgPSBhd2FpdCB0aGlzLmNvbnZlcnRTdHJpbmdUb0hhc2godGhpcy5jb250ZXh0Py5uYW1lKTtcbiAgICBjb25zdCBkYXNoYm9hcmROYW1lID0gYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuZGFzaGJvYXJkPy5uYW1lKTtcblxuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuREFTSEJPQVJEUywge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTVBPTkVOVFMuREVMRVRFX0RBU0hCT0FSRCxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5BQ1RJT05TLkRFTEVURSxcbiAgICAgIG5hbWU6IGRhc2hib2FyZE5hbWUsXG4gICAgICBpZDogdGhpcy5tby5pZCxcbiAgICAgIG5hbWVJZDogYCR7ZGFzaGJvYXJkTmFtZX1fJHt0aGlzLm1vLmlkfWAsXG4gICAgICBwYXJlbnRBc3NldElkOiB0aGlzLmNvbnRleHQ/LmlkID8gdGhpcy5jb250ZXh0LmlkIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWU6IHRoaXMuY29udGV4dD8uaWQgPyBwYXJlbnROYW1lIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldFR5cGU6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQudHlwZSA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMuY29udGV4dC5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVEYXNoYm9hcmROYW1lOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgID8gYCR7cGFyZW50TmFtZX1fJHtkYXNoYm9hcmROYW1lfWBcbiAgICAgICAgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0SWREYXNoYm9hcmRJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3RoaXMuY29udGV4dC5pZH1fJHt0aGlzLm1vLmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZURhc2hib2FyZElkOiB0aGlzLmNvbnRleHQ/LmlkID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLm1vLmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZUlkRGFzaGJvYXJkTmFtZUlkOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLmNvbnRleHQuaWR9XyR7ZGFzaGJvYXJkTmFtZX1fJHt0aGlzLm1vLmlkfWBcbiAgICAgICAgOiAnbm9Db250ZXh0JyxcbiAgICAgIGRhc2hib2FyZFR5cGU6IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGUgPyB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgOiBudWxsLFxuICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRDb250ZXh0Rm9yR1ModGhpcy5jb250ZXh0KVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkxvYWRHU0V2ZW50KCkge1xuICAgIGNvbnN0IHBhcmVudE5hbWUgPSBhd2FpdCB0aGlzLmNvbnZlcnRTdHJpbmdUb0hhc2godGhpcy5jb250ZXh0Py5uYW1lKTtcbiAgICBjb25zdCBkYXNoYm9hcmROYW1lID1cbiAgICAgIChhd2FpdCB0aGlzLmNvbnZlcnRTdHJpbmdUb0hhc2godGhpcy5kYXNoYm9hcmQ/Lm5hbWUpKSA/P1xuICAgICAgdGhpcy5leHRyYWN0RGVmYXVsdERhc2hib2FyZE5hbWUodGhpcy5tbykgPz9cbiAgICAgICdub25lJztcblxuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICB0aGlzLmlzUmVwb3J0XG4gICAgICAgID8gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuUkVQT1JUU1xuICAgICAgICA6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLkRBU0hCT0FSRFMsXG4gICAgICB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkRBU0hCT0FSRF9WSUVXLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQUNUSU9OUy5MT0FELFxuICAgICAgICBuYW1lOiBkYXNoYm9hcmROYW1lLFxuICAgICAgICBpZDogdGhpcy5tby5pZCxcbiAgICAgICAgbmFtZUlkOiBgJHtkYXNoYm9hcmROYW1lfV8ke3RoaXMubW8uaWR9YCxcbiAgICAgICAgcGFyZW50QXNzZXRJZDogdGhpcy5jb250ZXh0Py5pZCA/IHRoaXMuY29udGV4dC5pZCA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWU6IHRoaXMuY29udGV4dD8uaWQgPyBwYXJlbnROYW1lIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0VHlwZTogdGhpcy5jb250ZXh0Py5pZCA/IHRoaXMuY29udGV4dC50eXBlIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0TmFtZUlkOiB0aGlzLmNvbnRleHQ/LmlkID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLmNvbnRleHQuaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWVEYXNoYm9hcmROYW1lOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgICAgPyBgJHtwYXJlbnROYW1lfV8ke2Rhc2hib2FyZE5hbWV9YFxuICAgICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0SWREYXNoYm9hcmRJZDogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICAgID8gYCR7dGhpcy5jb250ZXh0LmlkfV8ke3RoaXMubW8uaWR9YFxuICAgICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0TmFtZURhc2hib2FyZElkOiB0aGlzLmNvbnRleHQ/LmlkID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLm1vLmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lSWREYXNoYm9hcmROYW1lSWQ6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgICA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5jb250ZXh0LmlkfV8ke2Rhc2hib2FyZE5hbWV9XyR7dGhpcy5tby5pZH1gXG4gICAgICAgICAgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgZGFzaGJvYXJkVHlwZTogdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZSA/IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSA6IG51bGwsXG4gICAgICAgIGNvbnRleHQ6IHRoaXMuaXNSZXBvcnRcbiAgICAgICAgICA/IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09OVEVYVC5SRVBPUlRcbiAgICAgICAgICA6IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZ2V0Q29udGV4dEZvckdTKHRoaXMuY29udGV4dClcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0RGVmYXVsdERhc2hib2FyZE5hbWUob2JqOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IG5hbWVLZXkgPSBPYmplY3Qua2V5cyhvYmopLmZpbmQoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdjOHlfRGFzaGJvYXJkIW5hbWUhJykpO1xuICAgIGlmIChuYW1lS2V5KSB7XG4gICAgICByZXR1cm4gbmFtZUtleS5zcGxpdCgnIScpLnBvcCgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIEBtZW1vaXplKClcbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0U3RyaW5nVG9IYXNoKHN0cjogc3RyaW5nKSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5zaG91bGRTZW5kUGlpRGF0YSgpKVxuICAgICAgPyBzdHJcbiAgICAgIDogdGhpcy5nYWluc2lnaHRTZXJ2aWNlLmhhc2hHcm91cE5hbWUoc3RyKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZSAqbmdJZj1cInRpdGxlXCI+XG4gIHt7IHRpdGxlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgW3ByaW9yaXR5XT1cIjEwMDAwXCJcbiAgKm5nSWY9XCJkYXNoYm9hcmQ/LmRldmljZVR5cGUgJiYgZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZVwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0bi1jbGVhbiBidG4tbGlua1wiXG4gICAgcG9wb3ZlclRpdGxlPVwie3sgJ0Rhc2hib2FyZCB0ZW1wbGF0ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICBbcG9wb3Zlcl09XCJkYXNoYm9hcmRUeXBlUG9wb3ZlclJlZlwiXG4gICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgPlxuICAgIDxzcGFuIGNsYXNzPVwidGFnIHRhZy0taW5mbyB0ZXh0LTEyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImRhc2hib2FyZC10ZW1wbGF0ZS1tYXJrZXJcIj48L3NwYW4+XG4gICAgICB7eyBkYXNoYm9hcmRUeXBlTGFiZWwgfCB0cmFuc2xhdGU6IHsgZGFzaGJvYXJkVHlwZTogZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSB9IH19XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbiAgPG5nLXRlbXBsYXRlICNkYXNoYm9hcmRUeXBlUG9wb3ZlclJlZj5cbiAgICA8ZGl2XG4gICAgICBbaW5uZXJIVE1MXT1cImRhc2hib2FyZFR5cGVQb3BvdmVyIHwgdHJhbnNsYXRlOiB7IGRhc2hib2FyZFR5cGU6IGRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgfVwiXG4gICAgPjwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBbcHJpb3JpdHldPVwiLTFcIlxuICAqbmdJZj1cImRlZmF1bHRXaWRnZXRzLmxlbmd0aCA+IDBcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ1Jlc2V0IHdpZGdldHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBweC1ldmVudD1cIlJlc2V0IGRhc2hib2FyZFwiXG4gICAgKGNsaWNrKT1cInJlc3RvcmUoKVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHdpZGdldHNEYXNoYm9hcmQ/LmVkaXRNb2RlXCJcbiAgICBkYXRhLWN5PVwiY29udGV4dC1kYXNoYm9hcmQtLWJ1dHRvbi1yZXNldC1kYXNoYm9hcmRcIlxuICA+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgYzh5SWNvbj1cInJlc2V0XCJcbiAgICA+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwidmlzaWJsZS14cy1pbmxpbmUgaGlkZGVuLXNtIHZpc2libGUtbWQtaW5saW5lIHZpc2libGUtbGctaW5saW5lXCI+XG4gICAgICB7eyAnUmVzZXQgd2lkZ2V0cycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHBcbiAgc3JjPVwiL2RvY3MvY29ja3BpdC93b3JraW5nLXdpdGgtZGFzaGJvYXJkcy8jd29ya2luZy13aXRoLWRhc2hib2FyZHNcIlxuICAqbmdJZj1cInNob3dDb250ZXh0SGVscEJ1dHRvblwiXG4+PC9jOHktaGVscD5cblxuPGM4eS1kYXNoYm9hcmQtZGV0YWlsXG4gIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gIFtpc1JlcG9ydF09XCJpc1JlcG9ydFwiXG4gIFtkYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW21vXT1cIm1vXCJcbiAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gIFtkZXZpY2VUeXBlXT1cImNvbnRleHQ/LnR5cGVcIlxuICBbaGlkZUF2YWlsYWJpbGl0eV09XCJoaWRlQXZhaWxhYmlsaXR5XCJcbiAgKGRhc2hib2FyZFNhdmVkKT1cInJlbG9hZERhc2hib2FyZCgkZXZlbnQpXCJcbiAgKHByZXZpZXdDaGFuZ2VkKT1cImRhc2hib2FyZFByZXZpZXcoJGV2ZW50KVwiXG4+PC9jOHktZGFzaGJvYXJkLWRldGFpbD5cblxuPGM4eS13aWRnZXRzLWRhc2hib2FyZFxuICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgW2NvbnRleHREYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW3dpZGdldHNdPVwid2lkZ2V0c1wiXG4gIFtpc0NvcHlEaXNhYmxlZF09XCJpc0NvcHlEaXNhYmxlZFwiXG4gIFtzZXR0aW5nc109XCJ7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgY2FuRGVsZXRlOiBjYW5EZWxldGUgJiYgISFkYXNoYm9hcmQsXG4gICAgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGRhc2hib2FyZD8udHJhbnNsYXRlV2lkZ2V0VGl0bGUgPz8gdHJhbnNsYXRlV2lkZ2V0VGl0bGUsXG4gICAgYWxsb3dGdWxsc2NyZWVuOiBtb2R1bGVDb25maWcuYWxsb3dGdWxsc2NyZWVuLFxuICAgIHRpdGxlOiBzZXRUaXRsZSA/IGRhc2hib2FyZD8ubmFtZSB8fCB0aXRsZSA6IHVuZGVmaW5lZCxcbiAgICB3aWRnZXRNYXJnaW46IGRhc2hib2FyZD8ud2lkZ2V0TWFyZ2luLFxuICAgIGNhbkNvcHk6IGNhbkNvcHkgJiYgISFkYXNoYm9hcmQsXG4gICAgZGVmYXVsdFdpZHRoOiBkYXNoYm9hcmQ/LmNvbHVtbnMgPj0gMjQgPyA4IDogNCxcbiAgICBjb2x1bW5zOiBkYXNoYm9hcmQ/LmNvbHVtbnMgfHwgMTJcbiAgfVwiXG4gIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJTZXR0aW5nc1wiXG4gIFtlZGl0TW9kZUJ1dHRvbnNdPVwie1xuICAgIHVuZG9CdXR0b25EaXNhYmxlZDogZWRpdE1vZGVTZXJ2aWNlLnVuZG9CdXR0b25EaXNhYmxlZCxcbiAgICBjaGFuZ2VUb1VuZG9OYW1lOiBlZGl0TW9kZVNlcnZpY2UuY2hhbmdlVG9VbmRvTmFtZSxcbiAgICByZWRvQnV0dG9uRGlzYWJsZWQ6ICFlZGl0TW9kZVNlcnZpY2UucmVkb1N0YWNrTGFzdEl0ZW0sXG4gICAgY2hhbmdlVG9SZWRvTmFtZTogZWRpdE1vZGVTZXJ2aWNlLnJlZG9TdGFja0xhc3RJdGVtPy5uYW1lXG4gIH1cIlxuICAob25DaGFuZ2VEYXNoYm9hcmQpPVwicG9zaXRpb25PcldpZGdldERpbWVuc2lvbkNoYW5nZSgkZXZlbnQpXCJcbiAgKG9uQWRkV2lkZ2V0KT1cImFkZFdpZGdldCgpXCJcbiAgKG9uRWRpdFdpZGdldCk9XCJlZGl0V2lkZ2V0KCRldmVudClcIlxuICAob25EZWxldGVXaWRnZXQpPVwiZGVsZXRlV2lkZ2V0KCRldmVudClcIlxuICAob25TYXZlRGFzaGJvYXJkKT1cInNhdmVXaWRnZXRzVG9EYXNoYm9hcmQoKVwiXG4gIChvbkNhbmNlbERhc2hib2FyZCk9XCJjYW5jZWxFZGl0TW9kZSgpXCJcbiAgKHJldmVydENoYW5nZSk9XCJyZXZlcnRDaGFuZ2UoJGV2ZW50KVwiXG4gIChvbkNoYW5nZVN0YXJ0KT1cImFkZERhc2hib2FyZENsYXNzVG9Cb2R5KClcIlxuICAob25DaGFuZ2VFbmQpPVwicmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpXCJcbiAgKG9uRWRpdERhc2hib2FyZCk9XCJkYXNoYm9hcmREZXRhaWxzLnNob3codHJ1ZSlcIlxuICAob25Db3B5RGFzaGJvYXJkKT1cImNvcHlEYXNoYm9hcmQoKVwiXG4gIChvbkRlbGV0ZURhc2hib2FyZCk9XCJkZWxldGVEYXNoYm9hcmQoKVwiXG4+PC9jOHktd2lkZ2V0cy1kYXNoYm9hcmQ+XG4iXX0=
|
|
706
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWiwyQkFBMkIsRUFFM0Isb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsT0FBTyxFQUNQLFlBQVksRUFFWixNQUFNLEVBR04seUJBQXlCLEVBQzFCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUVMLHdCQUF3QixFQUl4Qiw2QkFBNkIsRUFHN0Isa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUN0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBR2pGOzs7O0dBSUc7QUFXSCxNQUFNLE9BQU8seUJBQXlCO0lBcUNwQyxJQUFJLFFBQVE7UUFDVixPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQztJQUNuRixDQUFDO0lBZ0JELFlBQ1UsS0FBcUIsRUFDckIsTUFBYyxFQUNkLHVCQUFnRCxFQUNoRCxLQUFtQixFQUNuQixRQUFtQixFQUNjLFlBQW9DLEVBQ3JFLGFBQTRCLEVBQzVCLE9BQXVCLEVBQ3ZCLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLEtBQW1CLEVBQ3BCLGVBQXlDO1FBWnhDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNjLGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQUNyRSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ3BCLG9CQUFlLEdBQWYsZUFBZSxDQUEwQjtRQWhFbEQsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFJckIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUdqQixtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUU5QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBRWYsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVqQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBSWpCLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUc3Qjs7V0FFRztRQUVILHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUd6QixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBVVgsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQU1kLHVCQUFrQixHQUFHLE9BQU8sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ3BFLHlCQUFvQixHQUFHLE9BQU8sQ0FBQzs7O21CQUd2QixDQUFDLENBQUM7UUFFWCxpQ0FBNEIsR0FBRyxLQUFLLENBQUM7SUFnQjFDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUdELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxNQUF5QjtRQUNqRCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsTUFBTTtRQUN0QixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxLQUFLO1FBQ3JDLE1BQU0sYUFBYSxHQUNqQixDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4RCxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRTNELG1IQUFtSDtRQUNuSCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLElBQUksR0FBRyxPQUFPLENBQ2xCLDJKQUEySixDQUM1SixDQUFDO1FBRUYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZFLEVBQUUsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO2FBQzFCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRztnQkFDekMsVUFBVSxFQUFFLE9BQU87YUFDcEIsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCwrQkFBK0IsQ0FBQyxLQUE2QztRQUMzRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDNUUsTUFBTSxlQUFlLEdBQ25CLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN6RixJQUFJLFVBQTBDLENBQUM7UUFDL0MsSUFBSSxjQUF3QixDQUFDO1FBQzdCLElBQUksZUFBZSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLFVBQVUsR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQUM7WUFDakQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkUsY0FBYyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ04sVUFBVSxHQUFHLDZCQUE2QixDQUFDLFdBQVcsQ0FBQztZQUN2RCxjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVE7aUJBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDUCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDL0MsSUFDRSxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxFQUFFO29CQUN4QixDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxFQUFFO29CQUN4QixDQUFDLENBQUMsS0FBSyxJQUFJLGNBQWMsQ0FBQyxNQUFNO29CQUNoQyxDQUFDLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQ2xDLENBQUM7b0JBQ0QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoQixDQUFDO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQTRCO1FBQzdDLElBQUksaUJBQStDLENBQUM7UUFDcEQsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTixpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHVCQUF1QixDQUNyQixLQUE2QyxFQUM3QyxVQUEwQyxFQUMxQyxlQUFtRSxFQUNuRSxjQUF3QjtRQUV4QixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sY0FBYyxHQUE2QixLQUFLLENBQ3BELFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDNUMsSUFBSSxDQUNMLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUNkLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEVBQzlDLGVBQWUsRUFDZixjQUFjLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBRTdELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEdBQUc7WUFDM0MsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN2QixTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxTQUFTLENBQUM7Z0JBQ2pCLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDMUIsQ0FBQztTQUNILENBQUM7UUFFRixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDdkMsa0ZBQWtGLEVBQ2xGLEVBQUUsR0FBRyxFQUFFLENBQ1IsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGVBQWU7UUFDbkIsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBb0I7UUFDbkMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDaEQsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQixHQUFHLFNBQVM7WUFDWixJQUFJLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7U0FDNUYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBcUM7UUFDbkQsTUFBTSxvQkFBb0IsR0FBRyxRQUFRO1lBQ25DLENBQUMsQ0FBQztnQkFDRSxHQUFHLFFBQVE7Z0JBQ1gsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQy9CO1lBQ0gsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUViLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN6RixNQUFNLFlBQVksR0FBbUM7WUFDbkQsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWE7WUFDckQsUUFBUSxFQUFFLG9CQUFvQjtTQUMvQixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDckQsS0FBSyxFQUFFLFVBQVU7WUFDakIsZUFBZSxFQUFFLFlBQVk7WUFDN0IsY0FBYyxFQUFFLGFBQWE7WUFDN0IsWUFBWTtZQUNaLG1CQUFtQixFQUFFLElBQUk7WUFDekIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDLE9BQWdDLENBQUM7UUFFcEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsU0FBUyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLGlIQUFpSDtZQUNqSCx3REFBd0Q7WUFDeEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixNQUFNLFFBQVEsR0FBRztvQkFDZixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUTtvQkFDbEQsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUztpQkFDMUIsQ0FBQztnQkFDRixJQUFJLENBQUMsV0FBVyxDQUNkO29CQUNFLElBQUksRUFBRSw2QkFBNkIsQ0FBQyxNQUFNO29CQUMxQyxRQUFRO2lCQUNULEVBQ0QsUUFBUSxFQUNSLENBQUMsU0FBUyxDQUFDLENBQ1osQ0FBQztZQUNKLENBQUM7WUFDRCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDWixpQkFBaUI7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCO1FBQzFCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFFdkQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEdBQUc7WUFDekMsVUFBVSxFQUFFLFFBQVE7WUFDcEIsYUFBYSxFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1NBQzdFLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxFQUFFLDZCQUE2QixDQUFDLE9BQU87WUFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVE7WUFDeEMsYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEdBQUcsS0FBSztRQUN2QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixzRkFBc0Y7WUFDdEYsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTTtRQUN2QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBb0I7UUFDckMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXRELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFDN0IsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU3RSxrRUFBa0U7WUFDbEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5RSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVmLE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0MsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsNkJBQTZCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtnQkFDcEYsTUFBTTthQUNQLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILHVCQUF1QjtRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCw0QkFBNEI7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUF5QjtRQUNwQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDaEQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUQsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNWLElBQUksQ0FBQyxPQUFPO1lBQ1YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLGlCQUFpQixHQUFpQyxTQUFTLENBQy9ELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FDaEMsQ0FBQztRQUNGLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixTQUFTLEVBQUUsSUFBSTtZQUNmLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPO1NBQzNCLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDeEMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUM7WUFDOUIsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixhQUFhLEVBQUUsRUFBRTtTQUNsQixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUErQjtRQUNwRCxJQUFJLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQixNQUFNLGdCQUFnQixHQUFHO2dCQUN2QixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixTQUFTLEVBQUUsSUFBSTtnQkFDZixHQUFHLGFBQWEsQ0FBQyxPQUFPO2FBQ3pCLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHO2dCQUM3QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTtnQkFDL0IsR0FBRyxhQUFhLENBQUMsYUFBYTthQUMvQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQTBDO1FBQzlELElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQztRQUN0QixNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVUsQ0FDdEIsaUJBQStDLEVBQy9DLGVBQWUsR0FBRyxLQUFLO1FBRXZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsRCxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFO29CQUMvQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSTtpQkFDOUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQ25FLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbkMsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUN4RSxDQUFDO1lBQ0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHlCQUF5QixDQUFDLFNBQTJCLEVBQUUsS0FBYSxFQUFFLElBQVk7UUFDeEYsSUFBSSxJQUFJLEtBQUssaUJBQWlCLElBQUksS0FBSyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2xFLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCO2FBQ3hDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3ZFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBYztRQUN2QyxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQy9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FDakQsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLGNBQWM7WUFDbEMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0QsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJO1lBQ1YsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUk7WUFDcEQsR0FBRyxhQUFhO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBOEI7UUFDdEQsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCO1lBQzVHLEdBQUk7Z0JBQ0YsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNYLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDWCxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTTthQUNYO1NBQ2IsQ0FBQztJQUNKLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGtCQUFrQixHQUFHO1lBQ3hCLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFTywrQkFBK0I7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLENBQUM7WUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLDRCQUE0QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDakYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDbEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDM0MsT0FBTyxDQUFDLENBQ04sQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FDMUUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLDJCQUEyQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQy9FLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxXQUFXLENBQ2pCLEtBQXdELEVBQ3hELGVBQW1FLEVBQ25FLGNBQXdCO1FBRXhCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8seUJBQXlCLENBQy9CLGVBQW1FLEVBQ25FLGNBQXdCO1FBRXhCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQzNFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxhQUFhLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFDRCxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pCLElBQUksZUFBZSxLQUFLLFNBQVMsSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLDJHQUEyRztnQkFDM0csT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDakMsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE9BQU8sYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQ0wsQ0FBQyxlQUFlLEtBQUssUUFBUSxJQUFJLGVBQWUsS0FBSyxhQUFhLENBQUM7Z0JBQ25FLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzNCLENBQUM7Z0JBQ0Qsc0dBQXNHO1lBQ3hHLENBQUM7aUJBQU0sQ0FBQztnQkFDTixhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLFdBQW9EO1FBRXBELE1BQU0sa0JBQWtCLEdBQWlELEVBQUUsQ0FBQztRQUM1RSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsU0FBUztZQUNYLENBQUM7WUFDRCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWU7UUFDM0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDakYsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO1lBQ25FLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDbkQsSUFBSSxFQUFFLGFBQWE7WUFDbkIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNkLE1BQU0sRUFBRSxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQy9ELGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQzVELGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDbkUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDdEYsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM1QyxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksYUFBYSxFQUFFO2dCQUNsQyxDQUFDLENBQUMsV0FBVztZQUNmLHdCQUF3QixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDN0YsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDMUYsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNoRCxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNuRSxDQUFDLENBQUMsV0FBVztZQUNmLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDaEYsT0FBTyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUNwRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWE7UUFDekIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxNQUFNLGFBQWEsR0FDakIsQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQztRQUVULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQ2hDLElBQUksQ0FBQyxRQUFRO1lBQ1gsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTztZQUM3QyxDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQ2xEO1lBQ0UsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYztZQUNqRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQ2pELElBQUksRUFBRSxhQUFhO1lBQ25CLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDZCxNQUFNLEVBQUUsR0FBRyxhQUFhLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUMvRCxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUM1RCxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ25FLGlCQUFpQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ3RGLDRCQUE0QixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDNUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLGFBQWEsRUFBRTtnQkFDbEMsQ0FBQyxDQUFDLFdBQVc7WUFDZix3QkFBd0IsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3hDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxDQUFDLENBQUMsV0FBVztZQUNmLDBCQUEwQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQzFGLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDaEQsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbkUsQ0FBQyxDQUFDLFdBQVc7WUFDZixhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ2hGLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDcEIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTTtnQkFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUMvRCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sMkJBQTJCLENBQUMsR0FBbUI7UUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFHYSxBQUFOLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFXO1FBQzNDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RELENBQUMsQ0FBQyxHQUFHO1lBQ0wsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQzs4R0E3dUJVLHlCQUF5QixrS0E2RDFCLHdCQUF3QjtrR0E3RHZCLHlCQUF5Qixrc0JBaUN6Qix3QkFBd0IsaUdBQ3hCLHlCQUF5Qiw4REN4R3RDLDRoSEE2R0E7O0FEK3JCZ0I7SUFEYixPQUFPLEVBQUU7Ozs7b0VBUVQ7MkZBN3VCVSx5QkFBeUI7a0JBVnJDLFNBQVM7K0JBQ0UsdUJBQXVCLFFBRTNCO3dCQUNKLEtBQUssRUFBRTs7S0FFTjt3QkFDRCxLQUFLLEVBQUUsOEJBQThCO3FCQUN0Qzs7MEJBK0RFLE1BQU07MkJBQUMsd0JBQXdCO2lRQTNEbEMsSUFBSTtzQkFESCxLQUFLO2dCQUdOLGVBQWU7c0JBRGQsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sU0FBUztzQkFEUixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04scUJBQXFCO3NCQURwQixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixLQUFLO3NCQURKLFdBQVc7dUJBQUMsT0FBTztnQkFHbUMsZ0JBQWdCO3NCQUF0RSxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFckQsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQThDaEQsbUJBQW1CO3NCQUR4QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVwQmpDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJTZXJ2aWNlLFxuICBBbGVydFNlcnZpY2UsXG4gIEJyZWFkY3J1bWJJdGVtLFxuICBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24sXG4gIERhc2hib2FyZENoYW5nZSxcbiAgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ29tcG9uZW50LFxuICBEYXNoYm9hcmRDb3B5UGVybWlzc2lvbixcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIG1lbW9pemUsXG4gIE1vZGFsU2VydmljZSxcbiAgUmV2ZXJ0Q2hhbmdlVHlwZSxcbiAgU3RhdHVzLFxuICBXaWRnZXQsXG4gIFdpZGdldENoYW5nZSxcbiAgV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZXZlcnksIGZpbmRJbmRleCwga2ViYWJDYXNlLCBrZXlCeSwgb21pdCwgc29tZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDYW5EZWFjdGl2YXRlQ29tcG9uZW50LFxuICBDT05URVhUX0RBU0hCT0FSRF9DT05GSUcsXG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRDb25maWcsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRSxcbiAgRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZSxcbiAgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIFdJREdFVF9IRUFERVJfQ0xBU1NFU1xufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhc2hib2FyZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtY29uZmlnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRFZGl0TW9kZVNlcnZpY2UgfSBmcm9tICcuL21lbWVudG8vZGFzaGJvYXJkLWVkaXQtbW9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IGRhc2hib2FyZCBpcyBhIGRhc2hib2FyZCB3aGljaCByZXNvbHZlcyBpdCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoZGV2aWNlIG9yIGdyb3VwKVxuICogaXQgaXMgZGlzcGxheWVkIG9uLiBJdCB1c3VhbGx5IHVzZXMgdGhlIHJvdXRlLmRhdGEgZm9yIGl0LCBidXQgeW91IGNhbiBwYXNzXG4gKiBhIGRpZmZlcmVudCBtYW5hZ2VkT2JqZWN0IHRvIHRoZSBbbW9dIGlucHV0IHBhcmFtZXRlciB0byBjaGFuZ2UgdGhhdCBiZWhhdmlvci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRleHQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENhbkRlYWN0aXZhdGVDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGNoaWxkcmVuQ2xhc3NlcyA9ICcnO1xuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpXG4gIHNldFRpdGxlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdID0gW107XG4gIEBJbnB1dCgpXG4gIGNhbkNvcHkgPSB0cnVlO1xuICBASW5wdXQoKVxuICBjYW5EZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKVxuICBpc0xvYWRpbmcgPSB0cnVlO1xuICBASW5wdXQoKVxuICBicmVhZGNydW1iU2V0dGluZ3M6IEJyZWFkY3J1bWJJdGVtO1xuICBASW5wdXQoKVxuICBzaG93Q29udGV4dEhlbHBCdXR0b24gPSB0cnVlO1xuICAvKiogV2hldGhlciB0byB0cmFuc2xhdGUgd2lkZ2V0IHRpdGxlcy4gSG93ZXZlciwgZGFzaGJvYXJkJ3Mgb3duIHNldHRpbmcgdGFrZXMgcHJlY2VkZW5jZS4gSXQgZG9lcyBub3Qgb3ZlcnJpZGUgZGFzaGJvYXJkJ3Mgc2V0dGluZyAqL1xuICBASW5wdXQoKSB0cmFuc2xhdGVXaWRnZXRUaXRsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhpZGVzIGRhc2hib2FyZCBhdmFpbGFiaWxpdHkgc2VsZWN0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgaGlkZUF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBjbGFzcyA9ICcnO1xuXG4gIEBWaWV3Q2hpbGQoRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXNoYm9hcmREZXRhaWxzOiBEYXNoYm9hcmREZXRhaWxDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgd2lkZ2V0c0Rhc2hib2FyZDogV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudDtcblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmhhc1Blcm1pc3Npb25Ub0VkaXREYXNoYm9hcmQgfHwgIXRoaXMuZGFzaGJvYXJkRGV0YWlscz8uaXNDb2xsYXBzZWQ7XG4gIH1cblxuICB3aWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNDb3B5RGlzYWJsZWQ6IERhc2hib2FyZENvcHlQZXJtaXNzaW9uO1xuICBpc1JlcG9ydDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGFzaGJvYXJkVHlwZUxhYmVsID0gZ2V0dGV4dCgnRGFzaGJvYXJkIGZvciBcInt7IGRhc2hib2FyZFR5cGUgfX1cIicpO1xuICByZWFkb25seSBkYXNoYm9hcmRUeXBlUG9wb3ZlciA9IGdldHRleHQoYFxuICBUaGUgbGF5b3V0IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgZGFzaGJvYXJkIGlzIHVzZWQgYnkgYWxsIG90aGVyIGFzc2V0cyBvZiBtb2RlbCB0eXBlXG4gIDxzdHJvbmc+e3sgZGFzaGJvYXJkVHlwZSB9fTwvc3Ryb25nPi4gQW55IGNoYW5nZXMgbWFkZSB0byB0aGlzIGRhc2hib2FyZCBpbnN0YW5jZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsXG4gIG90aGVyIGluc3RhbmNlcy5gKTtcbiAgcHJpdmF0ZSBkYXRhU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaGFzUGVybWlzc2lvblRvRWRpdERhc2hib2FyZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KENPTlRFWFRfREFTSEJPQVJEX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQ29udGV4dERhc2hib2FyZENvbmZpZyxcbiAgICBwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25CYXJTZXJ2aWNlOiBBY3Rpb25CYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGVkaXRNb2RlU2VydmljZTogRGFzaGJvYXJkRWRpdE1vZGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5sb2FkQ29udGV4dERhc2hib2FyZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWROYW1lZERhc2hib2FyZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGJlZm9yZVVubG9hZEhhbmRsZXIoJGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkge1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGUgPSBhd2FpdCB0aGlzLmNhbkRlYWN0aXZhdGUodHJ1ZSk7XG4gICAgaWYgKCFjYW5EZWFjdGl2YXRlKSB7XG4gICAgICAkZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIHdpZGdldFxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSB3aWRnZXQgdG8gYXBwbHkgdGhlIGNvbnRleHQgdG8uXG4gICAqL1xuICBhcHBseURldmljZVRhcmdldCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmNvbmZpZy5kZXZpY2UpIHtcbiAgICAgIHdpZGdldC5jb25maWcuZGV2aWNlID0geyBpZDogdGhpcy5jb250ZXh0LmlkLCBuYW1lOiB0aGlzLmNvbnRleHQubmFtZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSByb3V0ZSBsaXN0ZW5lci5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWIpIHtcbiAgICAgIHRoaXMuZGF0YVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR3VhcmRzIGNvbXBvbmVudCBmcm9tIHVuaW50ZW5kZWQgbmF2aWdhdGlvbiBhd2F5IG9yIGNsb3NpbmcgdGFiIHdpdGhvdXQgc2F2aW5nIGNoYW5nZXMuXG4gICAqIE5hdmlnYXRpb24gY29udGludWVzIGlmIHRydWUgaXMgcmV0dXJuZWQsIGFuZCBuYXZpZ2F0aW9uIGlzIGNhbmNlbGxlZCBpZiByZXR1cm5lZCB2YWx1ZSBpcyBmYWxzZS5cbiAgICogQHBhcmFtIG9taXRDb25maXJtIE9taXRzIGNvbmZpcm0gY2FsbHMgaW5zaWRlIG1ldGhvZCBib2R5ICh3aXRob3V0IHRoaXMgcGFyYW0sIHdoZW4gbWV0aG9kIGlzIHVzZWQgaW5cbiAgICogb24gJ2JlZm9yZXVubG9hZCcgZXZlbnQgaGFuZGxlciwgZXJyb3IgaXMgdGhyb3duIGluIGNvbnNvbGUgYmVjYXVzZSBjb25maXJtIGlzIGJsb2NrZWQgYnkgYnJvd3NlciBhbnl3YXkgYW5kIHJldHVybnMgZmFsc2UpXG4gICAqL1xuICBhc3luYyBjYW5EZWFjdGl2YXRlKG9taXRDb25maXJtID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjYW5EZWFjdGl2YXRlID1cbiAgICAgIChhd2FpdCB0aGlzLmRhc2hib2FyZERldGFpbHMuY2FuRGVhY3RpdmF0ZShvbWl0Q29uZmlybSkpICYmXG4gICAgICAoYXdhaXQgdGhpcy53aWRnZXRzRGFzaGJvYXJkLmNhbkRlYWN0aXZhdGUob21pdENvbmZpcm0pKTtcblxuICAgIC8vIE5lZWRlZCBpbiBvcmRlciB0byByZXNldCBlZGl0IG1vZGUsIG90aGVyd2lzZSB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGRhc2hib2FyZHMsIHRoZSBlZGl0IG1vZGUgaXMgc3RpbGwgZW5hYmxlZC5cbiAgICBpZiAoY2FuRGVhY3RpdmF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5jYW5jZWxFZGl0TW9kZSh0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbkRlYWN0aXZhdGU7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGRhc2hib2FyZCB3aWRnZXRzIHRvIHRoZSBkZWZhdWx0IHdpZGdldHMuXG4gICAqL1xuICBhc3luYyByZXN0b3JlKCkge1xuICAgIGNvbnN0IG1lc2cgPSBnZXR0ZXh0KFxuICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gcmVzZXQgdGhlIHdpZGdldHMgb2YgdGhpcyBkYXNoYm9hcmQuIEFsbCBjaGFuZ2VzIHRvIHRoZSBkYXNoYm9hcmQgd2lkZ2V0cyB3aWxsIGdldCBsb3N0IGFuZCBjYW5ub3QgYmUgcmVjb3ZlcmVkLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShnZXR0ZXh0KCdSZXNldCB3aWRnZXRzJyksIG1lc2csIFN0YXR1cy5XQVJOSU5HLCB7XG4gICAgICAgIG9rOiBnZXR0ZXh0KCdSZXNldGBkYXNoYm9hcmRgJyksXG4gICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLm1hcFdpZGdldHModGhpcy5kZWZhdWx0V2lkZ2V0cyk7XG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuaGlzdG9yeURlc2NyaXB0aW9uID0ge1xuICAgICAgICBjaGFuZ2VUeXBlOiAncmVzZXQnXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBhd2FpdCB0aGlzLm9uTG9hZCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIE1ldGhvZCBjYWxsZWQgb24gZXZlcnkgd2lkZ2V0cyBkaW1lbnNpb25zIG9yIHBvc2l0aW9uIGNoYW5nZSBidXQgYWxzbyBmb3IgYWRkaW5nIG5ldyB3aWRnZXQgKGJlY2F1c2UgYWRkaW5nXG4gICAqIHdpZGdldCBjYXVzZXMgbGF5b3V0IGNoYW5nZXMpLiBJdCByZWNvZ25pemVzIHdoYXQgdHlwZSBvZiBjaGFuZ2UgaGFzIGJlZW4gZG9uZSBhbmQgdXBkYXRlcyBjdXJyZW50IHdpZGdldHMgc3RhdGVcbiAgICogYWNjb3JkaW5nbHkuXG4gICAqIEBwYXJhbSBjaGlsZCBDaGFuZ2Ugb2JqZWN0LlxuICAgKi9cbiAgcG9zaXRpb25PcldpZGdldERpbWVuc2lvbkNoYW5nZShjaGlsZDogRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfCBEYXNoYm9hcmRDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmVkaXRNb2RlU2VydmljZS5nZXRDdXJyZW50U3RhdGUoKT8uY2hpbGRyZW4gfHwge307XG4gICAgY29uc3QgZGVzY3JpcHRpb25Qcm9wOiBrZXlvZiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSA9XG4gICAgICBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPT09IE9iamVjdC52YWx1ZXMoY3VycmVudFN0YXRlKS5sZW5ndGggPyAnYXJyYW5nZW1lbnQnIDogJ2FkZGVkJztcbiAgICBsZXQgY2hhbmdlTmFtZTogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnbmFtZSddO1xuICAgIGxldCB3aWRnZXRzQ2hhbmdlZDogV2lkZ2V0W107XG4gICAgaWYgKGRlc2NyaXB0aW9uUHJvcCA9PT0gJ2FkZGVkJykge1xuICAgICAgY2hhbmdlTmFtZSA9IERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FLmFkZGVkO1xuICAgICAgY29uc3QgYWRkZWRXaWRnZXQgPSBjaGlsZC5jaGlsZHJlbi5maW5kKGMgPT4gIWN1cnJlbnRTdGF0ZVtjLmRhdGEuaWRdKTtcbiAgICAgIHdpZGdldHNDaGFuZ2VkID0gW2FkZGVkV2lkZ2V0LmRhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2VOYW1lID0gREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUuYXJyYW5nZW1lbnQ7XG4gICAgICB3aWRnZXRzQ2hhbmdlZCA9IGNoaWxkLmNoaWxkcmVuXG4gICAgICAgIC5tYXAoYyA9PiB7XG4gICAgICAgICAgY29uc3QgbGFzdFN0YXRlQ2hpbGQgPSBjdXJyZW50U3RhdGVbYy5kYXRhLmlkXTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjLnggIT0gbGFzdFN0YXRlQ2hpbGQuX3ggfHxcbiAgICAgICAgICAgIGMueSAhPSBsYXN0U3RhdGVDaGlsZC5feSB8fFxuICAgICAgICAgICAgYy53aWR0aCAhPSBsYXN0U3RhdGVDaGlsZC5fd2lkdGggfHxcbiAgICAgICAgICAgIGMuaGVpZ2h0ICE9IGxhc3RTdGF0ZUNoaWxkLl9oZWlnaHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjLmRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkQ2hpbGRyZW4oY2hpbGQsIGNoYW5nZU5hbWUsIGRlc2NyaXB0aW9uUHJvcCwgd2lkZ2V0c0NoYW5nZWQpO1xuICB9XG5cbiAgYXN5bmMgcmV2ZXJ0Q2hhbmdlKHJldmVydFR5cGU6IFJldmVydENoYW5nZVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZGFzaGJvYXJkQ2hpbGRyZW46IENvbnRleHREYXNoYm9hcmRbJ2NoaWxkcmVuJ107XG4gICAgaWYgKHJldmVydFR5cGUgPT09ICd1bmRvJykge1xuICAgICAgZGFzaGJvYXJkQ2hpbGRyZW4gPSB0aGlzLmVkaXRNb2RlU2VydmljZS51bmRvKCkuY2hpbGRyZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhc2hib2FyZENoaWxkcmVuID0gdGhpcy5lZGl0TW9kZVNlcnZpY2UucmVkbygpLmNoaWxkcmVuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnNldFdpZGdldHMoZGFzaGJvYXJkQ2hpbGRyZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYWxsIGRhc2hib2FyZHMgY2hpbGRyZW4ncy4gVXNlZnVsIGZvciBwb3NpdGlvbiBjaGFuZ2VzIG9uIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBjaGlsZCBUaGUgY2hpbGQgdG8gY2hhbmdlLlxuICAgKiBAcGFyYW0gY2hhbmdlTmFtZSBOYW1lIG9mIHRoZSBjaGFuZ2UgdG8gaW5kaWNhdGUgaXQgb24gdW5kby9yZWRvIGJ1dHRvbi5cbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uUHJvcCBQcm9wZXJ0eSB0byBhZGQgdG8gZGFzaGJvYXJkIGNoYW5nZSBoaXN0b3J5LlxuICAgKiBAcGFyYW0gd2lkZ2V0c0NoYW5nZWQgTGlzdCBvZiBjaGFuZ2VkIHdpZGdldHMuXG4gICAqL1xuICB1cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihcbiAgICBjaGlsZDogRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfCBEYXNoYm9hcmRDaGFuZ2UsXG4gICAgY2hhbmdlTmFtZTogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnbmFtZSddLFxuICAgIGRlc2NyaXB0aW9uUHJvcDoga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgd2lkZ2V0c0NoYW5nZWQ6IFdpZGdldFtdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IGNoaWxkO1xuICAgIGNvbnN0IG1hcHBlZENoaWxkcmVuOiB7IFtpZDogc3RyaW5nXTogV2lkZ2V0IH0gPSBrZXlCeShcbiAgICAgIGNoaWxkcmVuLm1hcChjID0+IHRoaXMuY29tcG9uZW50VG9XaWRnZXQoYykpLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gICAgdGhpcy5zZXROZXdTdGF0ZShcbiAgICAgIHsgbmFtZTogY2hhbmdlTmFtZSwgY2hpbGRyZW46IG1hcHBlZENoaWxkcmVuIH0sXG4gICAgICBkZXNjcmlwdGlvblByb3AsXG4gICAgICB3aWRnZXRzQ2hhbmdlZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIHRoZSBkYXNoYm9hcmQgYW5kIGN1cnJlbnQgY29udGV4dCB0byBhIGNsaXBib2FyZC5cbiAgICovXG4gIGFzeW5jIGNvcHlEYXNoYm9hcmQoKSB7XG4gICAgY29uc3Qgdmlld0NvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhPy5jb250ZXh0O1xuXG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jb3B5Q2xpcGJvYXJkID0ge1xuICAgICAgZGFzaGJvYXJkSWQ6IHRoaXMubW8uaWQsXG4gICAgICBkYXNoYm9hcmQ6IGNsb25lRGVlcCh0aGlzLm1vLmM4eV9EYXNoYm9hcmQpLFxuICAgICAgY29udGV4dDogY2xvbmVEZWVwKHtcbiAgICAgICAgY29udGV4dDogdmlld0NvbnRleHQsXG4gICAgICAgIGNvbnRleHREYXRhOiB0aGlzLmNvbnRleHRcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIGlmICh2aWV3Q29udGV4dCkge1xuICAgICAgY29uc3QgY3R4ID0gdmlld0NvbnRleHQuc3BsaXQoJy8nKS5zaGlmdCgpO1xuICAgICAgY29uc3QgbXNnID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICdEYXNoYm9hcmQgY29waWVkLiBOYXZpZ2F0ZSB0byB0aGUgZGVzaXJlZCB7eyBjdHggfX0gYW5kIHNlbGVjdCBcIlBhc3RlIGRhc2hib2FyZFwiJyxcbiAgICAgICAgeyBjdHggfVxuICAgICAgKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2Vzcyhtc2cpO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvbkJhclNlcnZpY2UucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgY29tcGxldGUgZGFzaGJvYXJkIGFuZCBuYXZpZ2F0ZSBhd2F5LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlRGFzaGJvYXJkKCkge1xuICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZGVsZXRlKHRoaXMubW8pO1xuICAgIGlmICh0aGlzLnJvdXRlLnBhcmVudCkge1xuICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC51cmwubWFwKHNlZ21lbnQgPT4gc2VnbWVudC5wYXRoKS5qb2luKCcvJyk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5vbkRlbGV0ZUdTRXZlbnQoKTtcbiAgfVxuXG4gIGdldCBpc0RldmljZVR5cGVEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXNoYm9hcmQ/LmRldmljZVR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRWRpdHMgYSB3aWRnZXQgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoYW5nZSBUaGUgd2lkZ2V0IGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGVkaXRXaWRnZXQoY2hhbmdlOiBXaWRnZXRDaGFuZ2UpIHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGNoYW5nZS5zb3VyY2U7XG4gICAgY29uc3QgY29tcG9uZW50ID0gYXdhaXQgdGhpcy53aWRnZXRTZXJ2aWNlLmdldFdpZGdldERlZmluaXRpb24oXG4gICAgICBjaGFuZ2Uud2lkZ2V0Lm5hbWUgfHwgY2hhbmdlLndpZGdldC5jb21wb25lbnRJZFxuICAgICk7XG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuYWRkV2lkZ2V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkV2lkZ2V0KHtcbiAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHsgLi4uY29tcG9uZW50LmRhdGEsIC4uLmNoYW5nZS53aWRnZXQsIF94OiB4LCBfeTogeSwgX3dpZHRoOiB3aWR0aCwgX2hlaWdodDogaGVpZ2h0IH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgd2lkZ2V0IHRvIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBzZWxlY3RlZCBEZWZpbmUgYSBzZWxlY3RlZCBjb21wb25lbnQgdG8gc3dpdGNoIHRvIGVkaXQgbW9kZSBkaXJlY3RseS5cbiAgICovXG4gIGFzeW5jIGFkZFdpZGdldChzZWxlY3RlZD86IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgY29uc3QgcGFydGlhbENsb25lU2VsZWN0ZWQgPSBzZWxlY3RlZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc2VsZWN0ZWQsXG4gICAgICAgICAgZGF0YTogY2xvbmVEZWVwKHNlbGVjdGVkLmRhdGEpXG4gICAgICAgIH1cbiAgICAgIDogc2VsZWN0ZWQ7XG5cbiAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gdGhpcy5jb250ZXh0LmNvbnRleHREYXRhID8gdGhpcy5jb250ZXh0LmNvbnRleHREYXRhIDogdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogUGFydGlhbDxXaWRnZXRDb25maWdDb21wb25lbnQ+ID0ge1xuICAgICAgbW86IHRoaXMubW8sXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQuYzh5X1JlcG9ydCA/IHt9IDogYWN0aXZlQ29udGV4dCxcbiAgICAgIHNlbGVjdGVkOiBwYXJ0aWFsQ2xvbmVTZWxlY3RlZFxuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbC5zaG93KFdpZGdldENvbmZpZ0NvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1sZycsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiBmYWxzZVxuICAgIH0pLmNvbnRlbnQgYXMgV2lkZ2V0Q29uZmlnQ29tcG9uZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5ld1dpZGdldCA9IGF3YWl0IG1vZGFsLnJlc3VsdDtcbiAgICAgIGlmICghdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHt9O1xuICAgICAgfVxuICAgICAgbmV3V2lkZ2V0LmNsYXNzZXMgPSB0aGlzLm1lcmdlV2lkZ2V0Q2xhc3NlcyhuZXdXaWRnZXQpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVXaWRnZXQobmV3V2lkZ2V0KTtcbiAgICAgIC8vIE5ldyBzdGF0ZSBpbiBlZGl0IG1vZGUgaXMgYWRkZWQgb25seSBmb3Igd2lkZ2V0IHVwZGF0ZS4gV2hlbiBhZGRpbmcgd2lkZ2V0LCBsYXlvdXQgY2hhbmdlIGlzIGFsd2F5cyB0cmlnZ2VyZWQsXG4gICAgICAvLyBzbyBpdCdzIGVhc2llciB0byBzZXQgbmV3IHN0YXRlIG9uIGxheW91dCBjaGFuZ2Ugb25seVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xuICAgICAgICAgIC4uLnRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpLmNoaWxkcmVuLFxuICAgICAgICAgIFtuZXdXaWRnZXQuaWRdOiBuZXdXaWRnZXRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXROZXdTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5jb25maWcsXG4gICAgICAgICAgICBjaGlsZHJlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICAgW25ld1dpZGdldF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG1vZGFsLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVdpZGdldHNUb0Rhc2hib2FyZCgpIHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmVkaXRNb2RlU2VydmljZS5nZXRDdXJyZW50U3RhdGUoKTtcbiAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSBjdXJyZW50U3RhdGUuY2hpbGRyZW47XG5cbiAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuaGlzdG9yeURlc2NyaXB0aW9uID0ge1xuICAgICAgY2hhbmdlVHlwZTogJ3VwZGF0ZScsXG4gICAgICB3aWRnZXRDaGFuZ2VzOiB0aGlzLm1hcFN0YXRlVG9IaXN0b3J5RGVzY3JpcHRpb24oY3VycmVudFN0YXRlLmNoYW5nZUhpc3RvcnkpXG4gICAgfTtcbiAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZSh0aGlzLm1vKTtcbiAgICB0aGlzLmVkaXRNb2RlU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmluaXQoe1xuICAgICAgbmFtZTogREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUuaW5pdGlhbCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VIaXN0b3J5OiB7fVxuICAgIH0pO1xuXG4gICAgdGhpcy5pc0NvcHlEaXNhYmxlZCA9IHRoaXMuZ2V0RGFzaGJvYXJkQ29weVBlcm1pc3Npb25TdGF0ZSgpO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsRWRpdE1vZGUob25EZWFjdGl2YXRlID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYXNoYm9hcmRDaGlsZHJlbiA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7fTtcbiAgICB9XG4gICAgdGhpcy53aWRnZXRzRGFzaGJvYXJkLmVkaXRNb2RlJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoIW9uRGVhY3RpdmF0ZSkge1xuICAgICAgLy8gd2hlbiBzZXRXaWRnZXRzIGlzIGNhbGxlZCBkdXJpbmcgbmF2aWdhdGlvbiBmcm9tIGRldmljZSB0byBkZXZpY2UsIG5hdmlnYXRpb24gZmFpbHNcbiAgICAgIGF3YWl0IHRoaXMuc2V0V2lkZ2V0cyhkYXNoYm9hcmRDaGlsZHJlbi5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSB3aWRnZXQgb3IgYWRkcyBhIG5ldyBvbmUgaWYgaXQgZG9lc24ndCBleGlzdCBvblxuICAgKiB0aGUgZGFzaGJvYXJkLlxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSBuZXcgd2lkZ2V0XG4gICAqL1xuICBhc3luYyB1cGRhdGVXaWRnZXQod2lkZ2V0KSB7XG4gICAgY29uc3QgaW5kZXggPSBmaW5kSW5kZXgodGhpcy53aWRnZXRzLCB7IGlkOiB3aWRnZXQuaWQgfSk7XG4gICAgY29uc3QgaXNOZXcgPSBpbmRleCA9PT0gLTE7XG4gICAgY29uc3QgbWFwcGVkV2lkZ2V0ID0gYXdhaXQgdGhpcy53aWRnZXRTZXJ2aWNlLm1hcExlZ2FjeSh3aWRnZXQpO1xuICAgIGlmIChpc05ldykge1xuICAgICAgdGhpcy53aWRnZXRzLnB1c2gobWFwcGVkV2lkZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRzLnNwbGljZShpbmRleCwgMSwgbWFwcGVkV2lkZ2V0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHdpZGdldCBhbmQgcmVhcnJhbmdlcyB0aGUgcmVtYWluaW5nIG9uZXNcbiAgICogaWYgbmVjZXNzYXJ5LlxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSBjaGFuZ2UgZXZlbnQuXG4gICAqL1xuICBhc3luYyBkZWxldGVXaWRnZXQoY2hhbmdlOiBXaWRnZXRDaGFuZ2UpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB3aWRnZXQsIHNvdXJjZSB9ID0gY2hhbmdlO1xuICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMud2lkZ2V0cy5maW5kKCh7IGlkIH0pID0+IGlkID09PSB3aWRnZXQuaWQpO1xuICAgICAgdGhpcy53aWRnZXRzLnNwbGljZSh0aGlzLndpZGdldHMuaW5kZXhPZihyZW1vdmVkKSwgMSk7XG5cbiAgICAgIGNvbnN0IHsgZGFzaGJvYXJkIH0gPSBzb3VyY2U7XG4gICAgICBkYXNoYm9hcmQuY2hpbGRyZW4gPSBkYXNoYm9hcmQuY2hpbGRyZW4uZmlsdGVyKGMgPT4gYy5kYXRhLmlkICE9PSB3aWRnZXQuaWQpO1xuXG4gICAgICAvLyB1c2luZyBzZXRUaW1lb3V0IHRvIGdpdmUgdGhlIGNvbXBvbmVudCB0aGUgY2hhbmNlIHRvIHJlbW92ZSBpdC5cbiAgICAgIGNvbnN0IHNsZWVwID0gdGltZW91dCA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCkpO1xuICAgICAgYXdhaXQgc2xlZXAoMCk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHNvdXJjZSk7XG4gICAgICBjaGlsZC5jb2xsYXBzZVVwQWxsKCk7XG4gICAgICB0aGlzLnVwZGF0ZURhc2hib2FyZENoaWxkcmVuKGNoaWxkLCBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5yZW1vdmVkLCAncmVtb3ZlZCcsIFtcbiAgICAgICAgd2lkZ2V0XG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBkcmFnZ2VkLWVsZW1lbnRcbiAgICogKHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBib2R5KSBoYXMgdGhlIHJpZ2h0IHN0eWxpbmcuXG4gICAqL1xuICBhZGREYXNoYm9hcmRDbGFzc1RvQm9keSgpIHtcbiAgICB0aGlzLmNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaChjc3NDbGFzcyA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIGNzc0NsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCB0aGUgZHJhZ2dlZC1lbGVtZW50XG4gICAqICh3aGljaCBpcyBhdHRhY2hlZCB0byB0aGUgYm9keSkgaGFzIHRoZSByaWdodCBzdHlsaW5nLlxuICAgKi9cbiAgcmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpIHtcbiAgICB0aGlzLmNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaChjc3NDbGFzcyA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIGNzc0NsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9hZCh0cmFja0V4cGVyaWVuY2U/OiBib29sZWFuKSB7XG4gICAgdGhpcy5oYXNQZXJtaXNzaW9uVG9FZGl0RGFzaGJvYXJkID0gdGhpcy5kYXNoYm9hcmRcbiAgICAgID8gYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jYW5FZGl0RGFzaGJvYXJkKHRoaXMubW8pXG4gICAgICA6IGZhbHNlO1xuICAgIHRoaXMuY2FuQ29weSA9XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlRGFzaGJvYXJkKHRoaXMubW8pIHx8XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKSB8fFxuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0dyb3VwRGFzaGJvYXJkKHRoaXMubW8pO1xuICAgIGNvbnN0IGRhc2hib2FyZENoaWxkcmVuOiBDb250ZXh0RGFzaGJvYXJkWydjaGlsZHJlbiddID0gY2xvbmVEZWVwKFxuICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkPy5jaGlsZHJlblxuICAgICk7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2xhc3NlcyA9IHtcbiAgICAgICdjOHktZ3JpZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgZGFzaGJvYXJkOiB0cnVlLFxuICAgICAgLi4udGhpcy5kYXNoYm9hcmQ/LmNsYXNzZXNcbiAgICB9O1xuICAgIHRoaXMuaXNDb3B5RGlzYWJsZWQgPSB0aGlzLmRhc2hib2FyZFxuICAgICAgPyB0aGlzLmdldERhc2hib2FyZENvcHlQZXJtaXNzaW9uU3RhdGUoKVxuICAgICAgOiB7IHN0YXRlOiBmYWxzZSwgcmVhc29uOiBudWxsIH07XG4gICAgdGhpcy5lZGl0TW9kZVNlcnZpY2UuaW5pdCh7XG4gICAgICBuYW1lOiBnZXR0ZXh0KCdJbml0aWFsIHN0YXRlJyksXG4gICAgICBjaGlsZHJlbjogZGFzaGJvYXJkQ2hpbGRyZW4sXG4gICAgICBjaGFuZ2VIaXN0b3J5OiB7fVxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRXaWRnZXRzKGRhc2hib2FyZENoaWxkcmVuLCB0cmFja0V4cGVyaWVuY2UpO1xuICAgIHRoaXMuY2xhc3MgPSBPYmplY3Qua2V5cyhkYXNoYm9hcmRDbGFzc2VzKS5qb2luKCcgJyk7XG4gICAgaWYgKHRoaXMuaXNSZXBvcnQpIHtcbiAgICAgIHRoaXMuYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkRGV0YWlscy5zaG93KGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5vbkxvYWRHU0V2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGFzaGJvYXJkUHJldmlldyhsYXlvdXRDaGFuZ2VzOiBDb250ZXh0RGFzaGJvYXJkKSB7XG4gICAgaWYgKGxheW91dENoYW5nZXM/LmNsYXNzZXMpIHtcbiAgICAgIGNvbnN0IGRhc2hib2FyZENsYXNzZXMgPSB7XG4gICAgICAgICdjOHktZ3JpZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgICBkYXNoYm9hcmQ6IHRydWUsXG4gICAgICAgIC4uLmxheW91dENoYW5nZXMuY2xhc3Nlc1xuICAgICAgfTtcbiAgICAgIHRoaXMuY2xhc3MgPSBPYmplY3Qua2V5cyhkYXNoYm9hcmRDbGFzc2VzKS5qb2luKCcgJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZCkge1xuICAgICAgdGhpcy5kYXNoYm9hcmQud2lkZ2V0Q2xhc3NlcyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXNoYm9hcmQud2lkZ2V0Q2xhc3NlcyxcbiAgICAgICAgLi4ubGF5b3V0Q2hhbmdlcy53aWRnZXRDbGFzc2VzXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbG9hZERhc2hib2FyZChkYXNoYm9hcmRNbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLmRhc2hib2FyZCA9IGRhc2hib2FyZE1vLmM4eV9EYXNoYm9hcmQ7XG4gICAgdGhpcy5tbyA9IGRhc2hib2FyZE1vO1xuICAgIGF3YWl0IHRoaXMub25Mb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFdpZGdldHMoXG4gICAgZGFzaGJvYXJkQ2hpbGRyZW46IENvbnRleHREYXNoYm9hcmRbJ2NoaWxkcmVuJ10sXG4gICAgdHJhY2tFeHBlcmllbmNlID0gZmFsc2VcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNEZXZpY2VUeXBlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbyk7XG4gICAgdGhpcy53aWRnZXRzID0gYXdhaXQgUHJvbWlzZS5hbGw8V2lkZ2V0PihcbiAgICAgIE9iamVjdC52YWx1ZXMoZGFzaGJvYXJkQ2hpbGRyZW4gfHwge30pLm1hcCh3aWRnZXQgPT4ge1xuICAgICAgICB3aWRnZXQuY2xhc3NlcyA9IHRoaXMubWVyZ2VXaWRnZXRDbGFzc2VzKHdpZGdldCk7XG4gICAgICAgIGlmIChpc0RldmljZVR5cGUpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5RGV2aWNlVGFyZ2V0KHdpZGdldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYWNrRXhwZXJpZW5jZSkge1xuICAgICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoJ2xvYWRXaWRnZXQnLCB7XG4gICAgICAgICAgICB3aWRnZXROYW1lOiB3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRTZXJ2aWNlLm1hcExlZ2FjeSh3aWRnZXQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29udGV4dERhc2hib2FyZCgpIHtcbiAgICB0aGlzLmRhdGFTdWIgPSB0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGRhc2hib2FyZCwgaXNSZXBvcnQgfSkgPT4ge1xuICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5yb3V0ZS5wYXJlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YSB8fCB7fTtcbiAgICAgIHRoaXMudGl0bGUgPSB0aGlzLmNvbnRleHQ/Lm5hbWU7XG4gICAgICB0aGlzLm1vID0gZGFzaGJvYXJkO1xuICAgICAgdGhpcy5kYXNoYm9hcmQgPSB0aGlzLm1vLmM4eV9EYXNoYm9hcmQ7XG4gICAgICB0aGlzLmlzUmVwb3J0ID0gaXNSZXBvcnQgfHwgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc1JlcG9ydCh0aGlzLm1vKTtcbiAgICAgIGlmICh0aGlzLmlzUmVwb3J0ICYmIHRoaXMuZGFzaGJvYXJkICYmICF0aGlzLmRhc2hib2FyZD8ubmFtZSkge1xuICAgICAgICB0aGlzLmRhc2hib2FyZC5uYW1lID0gdGhpcy50aXRsZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzUmVwb3J0ICYmIHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLmM4eV9Jc05hdmlnYXRvck5vZGUgPSB0aGlzLmNvbnRleHQuYzh5X0lzTmF2aWdhdG9yTm9kZTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGF0Y2hTZW5zb3JQaG9uZURhc2hib2FyZCh0aGlzLmRhc2hib2FyZCwgdGhpcy5tby5vd25lciwgdGhpcy5jb250ZXh0Py50eXBlKTtcbiAgICAgIHRoaXMub25Mb2FkKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIGVuYWJsZSB0cmFuc2xhdGlvbiBmb3Igd2lkZ2V0cyB3aXRoaW4gdGhlIGRhc2hib2FyZCwgdGhlIFwidHJhbnNsYXRlV2lkZ2V0VGl0bGVcIiBmbGFnIG11c3QgYmUgZW5hYmxlZC5cbiAgICogVGhlIHByb3BlcnR5IG5lZWRzIHRvIGJlIHBhdGNoZWQsIGFzIHRoZSBcIlNlbnNvciBBcHBcIiBkb2VzIG5vdCBwcm92aWRlIHRoaXMgc2V0dGluZy5cbiAgICovXG4gIHByaXZhdGUgcGF0Y2hTZW5zb3JQaG9uZURhc2hib2FyZChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmQsIG93bmVyOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlID09PSAnYzh5X1NlbnNvclBob25lJyAmJiBvd25lcj8uaW5jbHVkZXMoJ2RldmljZV9waG9uZScpKSB7XG4gICAgICBkYXNoYm9hcmQudHJhbnNsYXRlV2lkZ2V0VGl0bGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZE5hbWVkRGFzaGJvYXJkKCkge1xuICAgIHRoaXMuZGF0YVN1YiA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2VcbiAgICAgIC5nZXROYW1lZERhc2hib2FyZE9yQ3JlYXRlKHRoaXMubmFtZSwgdGhpcy5kZWZhdWx0V2lkZ2V0cywgdGhpcy5jb250ZXh0KVxuICAgICAgLnN1YnNjcmliZShtbyA9PiB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY29udGV4dCB8fCB7fTtcbiAgICAgICAgdGhpcy5tbyA9IG1vO1xuICAgICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMubW8uYzh5X0Rhc2hib2FyZDtcbiAgICAgICAgdGhpcy5vbkxvYWQodHJ1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VXaWRnZXRDbGFzc2VzKHdpZGdldDogV2lkZ2V0KTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuICAgIGNvbnN0IGhhc0hlYWRlckNsYXNzID0gV0lER0VUX0hFQURFUl9DTEFTU0VTLmZpbmQoXG4gICAgICBlbCA9PiB3aWRnZXQuY2xhc3NlcyAmJiB3aWRnZXQuY2xhc3Nlc1tlbC5jbGFzc11cbiAgICApO1xuICAgIGNvbnN0IHdpZGdldENsYXNzZXMgPSBoYXNIZWFkZXJDbGFzc1xuICAgICAgPyB7IC4uLndpZGdldC5jbGFzc2VzIH1cbiAgICAgIDogeyAuLi50aGlzLmRhc2hib2FyZC53aWRnZXRDbGFzc2VzLCAuLi53aWRnZXQuY2xhc3NlcyB9O1xuICAgIHJldHVybiB7XG4gICAgICBjYXJkOiB0cnVlLFxuICAgICAgJ2NhcmQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgIFtrZWJhYkNhc2Uod2lkZ2V0LmNvbXBvbmVudElkIHx8IHdpZGdldC5uYW1lKV06IHRydWUsXG4gICAgICAuLi53aWRnZXRDbGFzc2VzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9uZW50VG9XaWRnZXQoY2hpbGQ6IERhc2hib2FyZENoaWxkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9taXQoY2hpbGQuZGF0YSwgWydjb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCcsICd0cmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCddKSwgLy8gcmVtb3ZlIGxlZ2FjeVxuICAgICAgLi4uKHtcbiAgICAgICAgX3g6IGNoaWxkLngsXG4gICAgICAgIF95OiBjaGlsZC55LFxuICAgICAgICBfd2lkdGg6IGNoaWxkLndpZHRoLFxuICAgICAgICBfaGVpZ2h0OiBjaGlsZC5oZWlnaHRcbiAgICAgIH0gYXMgV2lkZ2V0KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZFJlcG9ydERhc2hib2FyZFNldHRpbmdzKCkge1xuICAgIHRoaXMuc2V0VGl0bGUgPSB0cnVlO1xuICAgIHRoaXMudGl0bGUgPSB0aGlzLmNvbnRleHQ/Lm5hbWUgfHwgZ2V0dGV4dCgnTmV3IHJlcG9ydCcpO1xuICAgIHRoaXMuYnJlYWRjcnVtYlNldHRpbmdzID0ge1xuICAgICAgaWNvbjogJ3RoJyxcbiAgICAgIGxhYmVsOiAnUmVwb3J0cycsXG4gICAgICBwYXRoOiAncmVwb3J0cydcbiAgICB9O1xuICAgIHRoaXMuY2FuRGVsZXRlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldERhc2hib2FyZENvcHlQZXJtaXNzaW9uU3RhdGUoKTogRGFzaGJvYXJkQ29weVBlcm1pc3Npb24ge1xuICAgIGlmICghdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5oYXNQZXJtaXNzaW9uc1RvQ29weURhc2hib2FyZCgpKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogZmFsc2UsIHJlYXNvbjogQ29weURhc2hib2FyZERpc2FibGVkUmVhc29uLlBFUk1JU1NJT05TIH07XG4gICAgfVxuICAgIGNvbnN0IGFsbERhc2hib2FyZENoaWxkcmVuQXJlVmFsaWQgPSBldmVyeSh0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGNoaWxkLmNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbnN0IGRhdGFQb2ludHMgPSBjb25maWcuZGF0YXBvaW50cyB8fCBbXTtcbiAgICAgIHJldHVybiAhKFxuICAgICAgICAoY29uZmlnLmRldmljZSAmJiBjb25maWcuZGV2aWNlLmlkICE9PSB0aGlzLmNvbnRleHQuaWQpIHx8XG4gICAgICAgIHNvbWUoZGF0YVBvaW50cywgZGF0YVBvaW50ID0+IGRhdGFQb2ludC5fX3RhcmdldD8uaWQgIT09IHRoaXMuY29udGV4dC5pZClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgaWYgKCFhbGxEYXNoYm9hcmRDaGlsZHJlbkFyZVZhbGlkKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogZmFsc2UsIHJlYXNvbjogQ29weURhc2hib2FyZERpc2FibGVkUmVhc29uLldST05HX1JFRkVSRU5DRSB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogdHJ1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXROZXdTdGF0ZShcbiAgICBzdGF0ZTogUGljazxEYXNoYm9hcmRDaGlsZHJlblN0YXRlLCAnbmFtZScgfCAnY2hpbGRyZW4nPixcbiAgICBkZXNjcmlwdGlvblByb3A6IGtleW9mIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddLFxuICAgIHdpZGdldHNDaGFuZ2VkOiBXaWRnZXRbXVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuZ2V0RGVzY3JpcHRpb25Gb3JOZXdTdGF0ZShkZXNjcmlwdGlvblByb3AsIHdpZGdldHNDaGFuZ2VkKTtcbiAgICB0aGlzLmVkaXRNb2RlU2VydmljZS5uZXdTdGF0ZSh7IC4uLnN0YXRlLCBjaGFuZ2VIaXN0b3J5OiBkZXNjcmlwdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVzY3JpcHRpb25Gb3JOZXdTdGF0ZShcbiAgICBkZXNjcmlwdGlvblByb3A6IGtleW9mIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddLFxuICAgIHdpZGdldHNDaGFuZ2VkOiBXaWRnZXRbXVxuICApOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlWydjaGFuZ2VIaXN0b3J5J10ge1xuICAgIGNvbnN0IGNoYW5nZUhpc3RvcnkgPSB0aGlzLmVkaXRNb2RlU2VydmljZS5nZXRDdXJyZW50U3RhdGUoKS5jaGFuZ2VIaXN0b3J5O1xuICAgIGlmICghY2hhbmdlSGlzdG9yeVtkZXNjcmlwdGlvblByb3BdKSB7XG4gICAgICBjaGFuZ2VIaXN0b3J5W2Rlc2NyaXB0aW9uUHJvcF0gPSB7fTtcbiAgICB9XG4gICAgd2lkZ2V0c0NoYW5nZWQuZm9yRWFjaCh3ID0+IHtcbiAgICAgIGlmIChkZXNjcmlwdGlvblByb3AgPT09ICdyZW1vdmVkJyAmJiBjaGFuZ2VIaXN0b3J5LmFkZGVkPy5bdy5pZF0pIHtcbiAgICAgICAgLy8gaWYgd2lkZ2V0IHdhcyBhZGRlZCBkdXJpbmcgY3VycmVudCBlZGl0IHNlc3Npb24gYW5kIHRoZW4gcmVtb3ZlZCwgaXQgc2hvdWxkIG5vdCBiZSBhdCBkZXNjcmlwdGlvbiBhdCBhbGxcbiAgICAgICAgZGVsZXRlIGNoYW5nZUhpc3RvcnkuYWRkZWRbdy5pZF07XG4gICAgICAgIGlmIChjaGFuZ2VIaXN0b3J5LmNvbmZpZz8uW3cuaWRdKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZUhpc3RvcnkuY29uZmlnW3cuaWRdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VIaXN0b3J5LmFycmFuZ2VtZW50Py5bdy5pZF0pIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlSGlzdG9yeT8uYXJyYW5nZW1lbnRbdy5pZF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChkZXNjcmlwdGlvblByb3AgPT09ICdjb25maWcnIHx8IGRlc2NyaXB0aW9uUHJvcCA9PT0gJ2FycmFuZ2VtZW50JykgJiZcbiAgICAgICAgY2hhbmdlSGlzdG9yeS5hZGRlZD8uW3cuaWRdXG4gICAgICApIHtcbiAgICAgICAgLy8gaWYgd2lkZ2V0IHdhcyBhZGRlZCBhbmQgdGhlbiBtb2RpZmllZCBpbiBjdXJyZW50IGVkaXQgc2Vzc2lvbiwgaXQgc2hvdWxkIG9ubHkgYmUgaW5kaWNhdGVkIGFzIGFkZGVkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFuZ2VIaXN0b3J5W2Rlc2NyaXB0aW9uUHJvcF1bdy5pZF0gPSB3O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNoYW5nZUhpc3Rvcnk7XG4gIH1cblxuICBwcml2YXRlIG1hcFN0YXRlVG9IaXN0b3J5RGVzY3JpcHRpb24oXG4gICAgZGVzY3JpcHRpb246IERhc2hib2FyZENoaWxkcmVuU3RhdGVbJ2NoYW5nZUhpc3RvcnknXVxuICApOiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSB7XG4gICAgY29uc3QgaGlzdG9yeURlc2NyaXB0aW9uOiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9uKSkge1xuICAgICAgY29uc3Qgd2lkZ2V0cyA9IE9iamVjdC52YWx1ZXModmFsdWUpO1xuICAgICAgaWYgKCF3aWRnZXRzLmxlbmd0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGhpc3RvcnlEZXNjcmlwdGlvbltrZXldID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSkubWFwKHdpZGdldCA9PiB3aWRnZXQudGl0bGUpO1xuICAgIH1cbiAgICByZXR1cm4gaGlzdG9yeURlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkRlbGV0ZUdTRXZlbnQoKSB7XG4gICAgY29uc3QgcGFyZW50TmFtZSA9IGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmNvbnRleHQ/Lm5hbWUpO1xuICAgIGNvbnN0IGRhc2hib2FyZE5hbWUgPSBhd2FpdCB0aGlzLmNvbnZlcnRTdHJpbmdUb0hhc2godGhpcy5kYXNoYm9hcmQ/Lm5hbWUpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLCB7XG4gICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5ERUxFVEVfREFTSEJPQVJELFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuREVMRVRFLFxuICAgICAgbmFtZTogZGFzaGJvYXJkTmFtZSxcbiAgICAgIGlkOiB0aGlzLm1vLmlkLFxuICAgICAgbmFtZUlkOiBgJHtkYXNoYm9hcmROYW1lfV8ke3RoaXMubW8uaWR9YCxcbiAgICAgIHBhcmVudEFzc2V0SWQ6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQuaWQgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZTogdGhpcy5jb250ZXh0Py5pZCA/IHBhcmVudE5hbWUgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0VHlwZTogdGhpcy5jb250ZXh0Py5pZCA/IHRoaXMuY29udGV4dC50eXBlIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5jb250ZXh0LmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZURhc2hib2FyZE5hbWU6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgPyBgJHtwYXJlbnROYW1lfV8ke2Rhc2hib2FyZE5hbWV9YFxuICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXRJZERhc2hib2FyZElkOiB0aGlzLmNvbnRleHQ/LmlkID8gYCR7dGhpcy5jb250ZXh0LmlkfV8ke3RoaXMubW8uaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMubW8uaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lSWREYXNoYm9hcmROYW1lSWQ6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMuY29udGV4dC5pZH1fJHtkYXNoYm9hcmROYW1lfV8ke3RoaXMubW8uaWR9YFxuICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgZGFzaGJvYXJkVHlwZTogdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZSA/IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSA6IG51bGwsXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldENvbnRleHRGb3JHUyh0aGlzLmNvbnRleHQpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uTG9hZEdTRXZlbnQoKSB7XG4gICAgY29uc3QgcGFyZW50TmFtZSA9IGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmNvbnRleHQ/Lm5hbWUpO1xuICAgIGNvbnN0IGRhc2hib2FyZE5hbWUgPVxuICAgICAgKGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmRhc2hib2FyZD8ubmFtZSkpID8/XG4gICAgICB0aGlzLmV4dHJhY3REZWZhdWx0RGFzaGJvYXJkTmFtZSh0aGlzLm1vKSA/P1xuICAgICAgJ25vbmUnO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgIHRoaXMuaXNSZXBvcnRcbiAgICAgICAgPyBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5SRVBPUlRTXG4gICAgICAgIDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuREFTSEJPQVJEUyxcbiAgICAgIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTVBPTkVOVFMuREFTSEJPQVJEX1ZJRVcsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5BQ1RJT05TLkxPQUQsXG4gICAgICAgIG5hbWU6IGRhc2hib2FyZE5hbWUsXG4gICAgICAgIGlkOiB0aGlzLm1vLmlkLFxuICAgICAgICBuYW1lSWQ6IGAke2Rhc2hib2FyZE5hbWV9XyR7dGhpcy5tby5pZH1gLFxuICAgICAgICBwYXJlbnRBc3NldElkOiB0aGlzLmNvbnRleHQ/LmlkID8gdGhpcy5jb250ZXh0LmlkIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0TmFtZTogdGhpcy5jb250ZXh0Py5pZCA/IHBhcmVudE5hbWUgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXRUeXBlOiB0aGlzLmNvbnRleHQ/LmlkID8gdGhpcy5jb250ZXh0LnR5cGUgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMuY29udGV4dC5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0TmFtZURhc2hib2FyZE5hbWU6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgICA/IGAke3BhcmVudE5hbWV9XyR7ZGFzaGJvYXJkTmFtZX1gXG4gICAgICAgICAgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXRJZERhc2hib2FyZElkOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgICAgPyBgJHt0aGlzLmNvbnRleHQuaWR9XyR7dGhpcy5tby5pZH1gXG4gICAgICAgICAgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMubW8uaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWVJZERhc2hib2FyZE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICAgID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLmNvbnRleHQuaWR9XyR7ZGFzaGJvYXJkTmFtZX1fJHt0aGlzLm1vLmlkfWBcbiAgICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgICBkYXNoYm9hcmRUeXBlOiB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlID8gdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIDogbnVsbCxcbiAgICAgICAgY29udGV4dDogdGhpcy5pc1JlcG9ydFxuICAgICAgICAgID8gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULlJFUE9SVFxuICAgICAgICAgIDogdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRDb250ZXh0Rm9yR1ModGhpcy5jb250ZXh0KVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3REZWZhdWx0RGFzaGJvYXJkTmFtZShvYmo6IElNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbmFtZUtleSA9IE9iamVjdC5rZXlzKG9iaikuZmluZChrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2M4eV9EYXNoYm9hcmQhbmFtZSEnKSk7XG4gICAgaWYgKG5hbWVLZXkpIHtcbiAgICAgIHJldHVybiBuYW1lS2V5LnNwbGl0KCchJykucG9wKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgQG1lbW9pemUoKVxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRTdHJpbmdUb0hhc2goc3RyOiBzdHJpbmcpIHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnNob3VsZFNlbmRQaWlEYXRhKCkpXG4gICAgICA/IHN0clxuICAgICAgOiB0aGlzLmdhaW5zaWdodFNlcnZpY2UuaGFzaEdyb3VwTmFtZShzdHIpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlICpuZ0lmPVwidGl0bGVcIj5cbiAge3sgdGl0bGUgfX1cbjwvYzh5LXRpdGxlPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBbcHJpb3JpdHldPVwiMTAwMDBcIlxuICAqbmdJZj1cImRhc2hib2FyZD8uZGV2aWNlVHlwZSAmJiBkYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuLWNsZWFuIGJ0bi1saW5rXCJcbiAgICBwb3BvdmVyVGl0bGU9XCJ7eyAnRGFzaGJvYXJkIHRlbXBsYXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgIFtwb3BvdmVyXT1cImRhc2hib2FyZFR5cGVQb3BvdmVyUmVmXCJcbiAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJ0YWcgdGFnLS1pbmZvIHRleHQtMTJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZGFzaGJvYXJkLXRlbXBsYXRlLW1hcmtlclwiPjwvc3Bhbj5cbiAgICAgIHt7IGRhc2hib2FyZFR5cGVMYWJlbCB8IHRyYW5zbGF0ZTogeyBkYXNoYm9hcmRUeXBlOiBkYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIH0gfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8bmctdGVtcGxhdGUgI2Rhc2hib2FyZFR5cGVQb3BvdmVyUmVmPlxuICAgIDxkaXZcbiAgICAgIFtpbm5lckhUTUxdPVwiZGFzaGJvYXJkVHlwZVBvcG92ZXIgfCB0cmFuc2xhdGU6IHsgZGFzaGJvYXJkVHlwZTogZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSB9XCJcbiAgICA+PC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCItMVwiXG4gICpuZ0lmPVwiZGVmYXVsdFdpZGdldHMubGVuZ3RoID4gMFwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnUmVzZXQgd2lkZ2V0cycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHB4LWV2ZW50PVwiUmVzZXQgZGFzaGJvYXJkXCJcbiAgICAoY2xpY2spPVwicmVzdG9yZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgKHdpZGdldHNEYXNoYm9hcmQ/LmVkaXRNb2RlJCB8IGFzeW5jKVwiXG4gICAgZGF0YS1jeT1cImNvbnRleHQtZGFzaGJvYXJkLS1idXR0b24tcmVzZXQtZGFzaGJvYXJkXCJcbiAgPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgIGM4eUljb249XCJyZXNldFwiXG4gICAgPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cInZpc2libGUteHMtaW5saW5lIGhpZGRlbi1zbSB2aXNpYmxlLW1kLWlubGluZSB2aXNpYmxlLWxnLWlubGluZVwiPlxuICAgICAge3sgJ1Jlc2V0IHdpZGdldHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1oZWxwXG4gIHNyYz1cIi9kb2NzL2NvY2twaXQvd29ya2luZy13aXRoLWRhc2hib2FyZHMvI3dvcmtpbmctd2l0aC1kYXNoYm9hcmRzXCJcbiAgKm5nSWY9XCJzaG93Q29udGV4dEhlbHBCdXR0b25cIlxuPjwvYzh5LWhlbHA+XG5cbjxjOHktZGFzaGJvYXJkLWRldGFpbFxuICBjbGFzcz1cImQtY29udGVudHNcIlxuICBbaXNSZXBvcnRdPVwiaXNSZXBvcnRcIlxuICBbZGFzaGJvYXJkXT1cImRhc2hib2FyZFwiXG4gIFttb109XCJtb1wiXG4gIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICBbZGV2aWNlVHlwZV09XCJjb250ZXh0Py50eXBlXCJcbiAgW2hpZGVBdmFpbGFiaWxpdHldPVwiaGlkZUF2YWlsYWJpbGl0eVwiXG4gIChkYXNoYm9hcmRTYXZlZCk9XCJyZWxvYWREYXNoYm9hcmQoJGV2ZW50KVwiXG4gIChwcmV2aWV3Q2hhbmdlZCk9XCJkYXNoYm9hcmRQcmV2aWV3KCRldmVudClcIlxuPjwvYzh5LWRhc2hib2FyZC1kZXRhaWw+XG5cbjxjOHktd2lkZ2V0cy1kYXNoYm9hcmRcbiAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gIFtjb250ZXh0RGFzaGJvYXJkXT1cImRhc2hib2FyZFwiXG4gIFt3aWRnZXRzXT1cIndpZGdldHNcIlxuICBbaXNDb3B5RGlzYWJsZWRdPVwiaXNDb3B5RGlzYWJsZWRcIlxuICBbc2V0dGluZ3NdPVwie1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGlzRGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGNhbkRlbGV0ZTogY2FuRGVsZXRlICYmICEhZGFzaGJvYXJkLFxuICAgIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiBkYXNoYm9hcmQ/LnRyYW5zbGF0ZVdpZGdldFRpdGxlID8/IHRyYW5zbGF0ZVdpZGdldFRpdGxlLFxuICAgIGFsbG93RnVsbHNjcmVlbjogbW9kdWxlQ29uZmlnLmFsbG93RnVsbHNjcmVlbixcbiAgICB0aXRsZTogc2V0VGl0bGUgPyBkYXNoYm9hcmQ/Lm5hbWUgfHwgdGl0bGUgOiB1bmRlZmluZWQsXG4gICAgd2lkZ2V0TWFyZ2luOiBkYXNoYm9hcmQ/LndpZGdldE1hcmdpbixcbiAgICBjYW5Db3B5OiBjYW5Db3B5ICYmICEhZGFzaGJvYXJkLFxuICAgIGRlZmF1bHRXaWR0aDogZGFzaGJvYXJkPy5jb2x1bW5zID49IDI0ID8gOCA6IDQsXG4gICAgY29sdW1uczogZGFzaGJvYXJkPy5jb2x1bW5zIHx8IDEyXG4gIH1cIlxuICBbYnJlYWRjcnVtYl09XCJicmVhZGNydW1iU2V0dGluZ3NcIlxuICBbZWRpdE1vZGVCdXR0b25zXT1cIntcbiAgICB1bmRvQnV0dG9uRGlzYWJsZWQ6IGVkaXRNb2RlU2VydmljZS51bmRvQnV0dG9uRGlzYWJsZWQsXG4gICAgY2hhbmdlVG9VbmRvTmFtZTogZWRpdE1vZGVTZXJ2aWNlLmNoYW5nZVRvVW5kb05hbWUsXG4gICAgcmVkb0J1dHRvbkRpc2FibGVkOiAhZWRpdE1vZGVTZXJ2aWNlLnJlZG9TdGFja0xhc3RJdGVtLFxuICAgIGNoYW5nZVRvUmVkb05hbWU6IGVkaXRNb2RlU2VydmljZS5yZWRvU3RhY2tMYXN0SXRlbT8ubmFtZVxuICB9XCJcbiAgKG9uQ2hhbmdlRGFzaGJvYXJkKT1cInBvc2l0aW9uT3JXaWRnZXREaW1lbnNpb25DaGFuZ2UoJGV2ZW50KVwiXG4gIChvbkFkZFdpZGdldCk9XCJhZGRXaWRnZXQoKVwiXG4gIChvbkVkaXRXaWRnZXQpPVwiZWRpdFdpZGdldCgkZXZlbnQpXCJcbiAgKG9uRGVsZXRlV2lkZ2V0KT1cImRlbGV0ZVdpZGdldCgkZXZlbnQpXCJcbiAgKG9uU2F2ZURhc2hib2FyZCk9XCJzYXZlV2lkZ2V0c1RvRGFzaGJvYXJkKClcIlxuICAob25DYW5jZWxEYXNoYm9hcmQpPVwiY2FuY2VsRWRpdE1vZGUoKVwiXG4gIChyZXZlcnRDaGFuZ2UpPVwicmV2ZXJ0Q2hhbmdlKCRldmVudClcIlxuICAob25DaGFuZ2VTdGFydCk9XCJhZGREYXNoYm9hcmRDbGFzc1RvQm9keSgpXCJcbiAgKG9uQ2hhbmdlRW5kKT1cInJlbW92ZURhc2hib2FyZENsYXNzRnJvbUJvZHkoKVwiXG4gIChvbkVkaXREYXNoYm9hcmQpPVwiZGFzaGJvYXJkRGV0YWlscy5zaG93KHRydWUpXCJcbiAgKG9uQ29weURhc2hib2FyZCk9XCJjb3B5RGFzaGJvYXJkKClcIlxuICAob25EZWxldGVEYXNoYm9hcmQpPVwiZGVsZXRlRGFzaGJvYXJkKClcIlxuPjwvYzh5LXdpZGdldHMtZGFzaGJvYXJkPlxuIl19
|
|
@@ -146,4 +146,4 @@ export const PRODUCT_EXPERIENCE = {
|
|
|
146
146
|
}
|
|
147
147
|
};
|
|
148
148
|
export const REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY = 30;
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9jb250ZXh0LWRhc2hib2FyZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFJTCxPQUFPLEVBS1IsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBTSx3QkFBd0IsQ0FBQyxDQUFDO0FBQzFGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHO0lBQ3hDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3pCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQ3ZDLGFBQWEsRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUM7SUFDN0MsWUFBWSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUM7SUFDdEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDckIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDckIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDN0IsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQzlDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztDQUNXLENBQUM7QUFxSHJFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBQzNDLE9BQU8sRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxPQUFPLENBQUMsOEJBQThCLENBQUM7SUFDL0MsT0FBTyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUM5QixXQUFXLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFD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SUFDNUYsTUFBTTtJQUNOLEtBQUs7SUFDTDtRQUNFLEtBQUssRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDaEMsS0FBSyxFQUFFLHlCQUF5QjtRQUNoQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGtEQUFrRCxDQUFDO0tBQ3pFO0NBQ08sQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHO0lBQ3BDLGtCQUFrQjtJQUNsQixjQUFjO0lBQ2QsZ0JBQWdCO0NBQ1IsQ0FBQztBQWFYLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEtBQWMsQ0FBQztBQUd4RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxTQUFTLEVBQUU7UUFDVCxNQUFNLEVBQUU7WUFDTixVQUFVLEVBQUUsWUFBWTtZQUN4QixPQUFPLEVBQUUsU0FBUztTQUNuQjtRQUNELFVBQVUsRUFBRTtZQUNWLGNBQWMsRUFBRSxtQkFBbUI7WUFDbkMsc0JBQXNCLEVBQUUsd0JBQXdCO1lBQ2hELFlBQVksRUFBRSx1QkFBdUI7WUFDckMsVUFBVSxFQUFFLHVCQUF1QjtZQUNuQyxhQUFhLEVBQUUsZUFBZTtZQUM5QixnQkFBZ0IsRUFBRSxtQkFBbUI7U0FDdEM7UUFDRCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsUUFBUTtZQUNoQixNQUFNLEVBQUUsUUFBUTtZQUNoQixLQUFLLEVBQUUsT0FBTztZQUNkLEtBQUssRUFBRSxPQUFPO1NBQ2Y7UUFDRCxPQUFPLEVBQUU7WUFDUCwwQkFBMEIsRUFBRSx5QkFBeUI7WUFDckQsTUFBTSxFQUFFLFFBQVE7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixNQUFNLEVBQUUsUUFBUTtTQUNqQjtLQUNGO0NBQ08sQ0FBQztBQU1YLE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIFdpZGdldCxcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIFJvdXRlLFxuICBnZXR0ZXh0LFxuICBWaWV3Q29udGV4dCxcbiAgV2lkZ2V0RGlzcGxheVNldHRpbmdzLFxuICBUYWJXaXRoVGVtcGxhdGUsXG4gIFdpZGdldFNldHRpbmdzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5cbmV4cG9ydCBjb25zdCBDT05URVhUX0RBU0hCT0FSRF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignQ29udGV4dERhc2hib2FyZENvbmZpZycpO1xuZXhwb3J0IGNvbnN0IERBU0hCT0FSRF9TRVRUSU5HU19DSEFOR0VTID0ge1xuICBjbGFzc2VzOiBnZXR0ZXh0KCd0aGVtZScpLFxuICBnbG9iYWxSb2xlc0lkczogZ2V0dGV4dCgnZ2xvYmFsIHJvbGVzJyksXG4gIHdpZGdldENsYXNzZXM6IGdldHRleHQoJ3dpZGdldCBoZWFkZXIgc3R5bGUnKSxcbiAgd2lkZ2V0TWFyZ2luOiBnZXR0ZXh0KCd3aWRnZXQgbWFyZ2luJyksXG4gIGljb246IGdldHRleHQoJ2ljb24nKSxcbiAgbmFtZTogZ2V0dGV4dCgnbmFtZScpLFxuICBwcmlvcml0eTogZ2V0dGV4dCgncHJpb3JpdHknKSxcbiAgYzh5X0lzTmF2aWdhdG9yTm9kZTogZ2V0dGV4dCgnbmF2aWdhdG9yIGl0ZW0nKSxcbiAgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGdldHRleHQoJ3RyYW5zbGF0ZSB3aWRnZXQgdGl0bGUnKVxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUGFydGlhbDxSZWNvcmQ8a2V5b2YgQ29udGV4dERhc2hib2FyZCwgc3RyaW5nPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dERhc2hib2FyZENvbmZpZyB7XG4gIHdpZGdldEZpbHRlcj86IChjb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSA9PiBib29sZWFuO1xuICBhbGxvd0Z1bGxzY3JlZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHJvdXRlcz86IFJvdXRlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dFdpZGdldENvbmZpZyB7XG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0aGF0IGRlZmluZSBob3cgdGhlIGRlZmF1bHQgY29uZmlnIGNvbXBvbmVudCBpc1xuICAgKiBkaXNwbGF5ZWQuIFRoZXkgYXJlIHN0YXRpYyBhbmQgd2lsbCBub3QgYmUgc2F2ZWQuXG4gICAqL1xuICBzZXR0aW5ncz86IFdpZGdldFNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0aGF0IGFyZSBpbmplY3RlZCBpbiBhbnkgZGlzcGxheWluZyBjb21wb25lbnQuXG4gICAqL1xuICBkaXNwbGF5U2V0dGluZ3M/OiBXaWRnZXREaXNwbGF5U2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFdoYXRldmVyIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgY29uZmlndXJhdGlvbiB3aGVuIGEgd2lkZ2V0IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBjb25maWc/OiB7XG4gICAgLyoqXG4gICAgICogQW55IG90aGVyIGluZm9ybWF0aW9uIHRoYXQgc2hvdWxkIGJlIHN0b3JlZCBoZXJlLlxuICAgICAqL1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbiAgLyoqXG4gICAqIFRoZSBzZWxlY3RlZCBkZXZpY2Ugb3IgZ3JvdXAgKG5vdGU6IG5hbWluZyBpcyBpbmNvbnNpc3RlbnQgYXMgZ3JvdXAgd2FzIGFkZGVkIGxhdGVyXG4gICAqIGJ1dCBtdXN0IHN0YXkgZm9yIGFscmVhZHkgaW1wbGVtZW50ZWQgd2lkZ2V0cylcbiAgICovXG4gIGRldmljZT86IHtcbiAgICBpZD86IHN0cmluZyB8IG51bWJlcjtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbiAgLyoqXG4gICAqIEFueSBvdGhlciBpbmZvcm1hdGlvbiB0aGF0IHNob3VsZCBiZSBzdG9yZWQgaGVyZS5cbiAgICovXG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCBleHRlbmRzIElNYW5hZ2VkT2JqZWN0IHtcbiAgYzh5X0Rhc2hib2FyZD86IENvbnRleHREYXNoYm9hcmQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGM4eV9EYXNoYm9hcmRIaXN0b3J5PzogQ29udGV4dERhc2hib2FyZFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHREYXNoYm9hcmQge1xuICBpY29uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBwcmlvcml0eT86IG51bWJlcjtcbiAgZGV2aWNlVHlwZT86IGJvb2xlYW47XG4gIGRldmljZVR5cGVWYWx1ZT86IHN0cmluZztcbiAgaXNGcm96ZW4/OiBib29sZWFuO1xuICBjbGFzc2VzPzogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07XG4gIHdpZGdldENsYXNzZXM/OiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgd2lkZ2V0TWFyZ2luPzogbnVtYmVyO1xuICB0cmFuc2xhdGVXaWRnZXRUaXRsZT86IGJvb2xlYW47XG4gIGdsb2JhbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIGNvbHVtbnMgb24gdGhhdCBkYXNoYm9hcmQuXG4gICAqIENhbiBiZSBmcmVlbHkgY2hvc2VuLCBidXQgcHJvZHVjdCB1c2VzIGVpdGhlciAxMiBvciAyNC5cbiAgICovXG4gIGNvbHVtbnM/OiBudW1iZXI7XG4gIGNoaWxkcmVuPzoge1xuICAgIFtpZDogc3RyaW5nXTogV2lkZ2V0O1xuICB9O1xuICBnbG9iYWxSb2xlc0lkcz86IERhc2hib2FyZEdsb2JhbFJvbGVzO1xuICBjOHlfSXNOYXZpZ2F0b3JOb2RlPzogb2JqZWN0O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaGlzdG9yeURlc2NyaXB0aW9uPzogRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uO1xuICBjcmVhdGVkPzogc3RyaW5nO1xuICBhdXRob3I/OiBzdHJpbmc7XG59XG4vKipcbiAqIE9iamVjdCBkZXNjcmliaW5nIGNoYW5nZXMgYXBwbGllZCB0byBkYXNoYm9hcmQgc2V0dGluZ3MgYW5kIGl0cyB3aWRnZXRzLiBVc2VkIHRvIGRpc3BsYXkgdXNlci1mcmllbmRseSBjaGFuZ2UgbG9nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvbiB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdHlwZSBvZiBkYXNoYm9hcmQgY2hhbmdlIChvciBjcmVhdGlvbikuXG4gICAqL1xuICBjaGFuZ2VUeXBlPzogJ3Jlc2V0JyB8ICdjcmVhdGUnIHwgJ3VwZGF0ZSc7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGRhc2hib2FyZCBzZXR0aW5ncyB0aGF0IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqL1xuICBkYXNoYm9hcmRTZXR0aW5nQ2hhbmdlcz86IChrZXlvZiB0eXBlb2YgREFTSEJPQVJEX1NFVFRJTkdTX0NIQU5HRVMpW107XG4gIC8qKlxuICAgKiBUcnVlIGlmIGRhc2hib2FyZCBpcyB0eXBlZCBkYXNoYm9hcmQsIGZhbHNlIGlmIGl0J3Mgbm90LlxuICAgKi9cbiAgZGV2aWNlVHlwZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbmluZyBsaXN0cyBvZiB3aWRnZXRzIChieSB0aXRsZSkgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkLCBncm91cGVkIGJ5IGNoYW5nZSB0eXBlLCBlLmcuOlxuICAgKiBgYGB0c1xuICAgKiB3aWRnZXRDaGFuZ2VzOiB7XG4gICAqICAgICByZW1vdmVkOiBbJ0FwcGxpY2F0aW9ucyddLFxuICAgKiAgICAgY29uZmlnPzogWydEYXRhIHBvaW50cyBncmFwaCcsICdFdmVudHMgbGlzdCddLFxuICAgKiAgIH0sXG4gICAqIGBgYFxuICAgKi9cbiAgd2lkZ2V0Q2hhbmdlcz86IHtcbiAgICByZW1vdmVkPzogc3RyaW5nW107XG4gICAgYWRkZWQ/OiBzdHJpbmdbXTtcbiAgICBjb25maWc/OiBzdHJpbmdbXTtcbiAgICBhcnJhbmdlbWVudD86IHN0cmluZ1tdO1xuICB9O1xuICAvKipcbiAgICogU3RyaW5nIHVzZWQgdG8gZGlzcGxheSB0aGUgZGF0ZSBmcm9tIHdoaWNoIHRoZSBzdGF0ZSB3YXMgcmVzdG9yZWQuXG4gICAqL1xuICByZXN0b3JlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FID0ge1xuICBpbml0aWFsOiBnZXR0ZXh0KCdJbml0aWFsIHN0YXRlJyksXG4gIGNvbmZpZzogZ2V0dGV4dCgnV2lkZ2V0IGNvbmZpZ3VyYXRpb24gY2hhbmdlZCcpLFxuICByZW1vdmVkOiBnZXR0ZXh0KCdXaWRnZXQgcmVtb3ZlZCcpLFxuICBhZGRlZDogZ2V0dGV4dCgnV2lkZ2V0IGFkZGVkJyksXG4gIGFycmFuZ2VtZW50OiBnZXR0ZXh0KCdXaWRnZXRzIHJlYXJyYW5nZWQnKVxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPGtleW9mIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddIHwgJ2luaXRpYWwnLCBzdHJpbmc+O1xuLyoqXG4gKiBPYmplY3QgcmVwcmVzZW50aW5nIHN0YXRlIG9mIGRhc2hib2FyZCB3aWRnZXRzLiBJdHMgbWFpbiBwdXJwb3NlIGlzIHRvIGFsbG93IHRvIHVuZG8gYW5kIHJlZG8gY2hhbmdlc1xuICogYXBwbGllZCB0byBkYXNoYm9hcmQgY2hpbGRyZW4uXG4gKi9cbmV4cG9ydCB0eXBlIERhc2hib2FyZENoaWxkcmVuU3RhdGUgPSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjaGFuZ2UgYXBwbGllZCB0byBkYXNoYm9hcmQgdGhhdCByZXN1bHRzIGluIGN1cnJlbnQgc3RhdGUsIGUuZy4gJ3dpZGdldCByZW1vdmVkJ1xuICAgKi9cbiAgbmFtZTogKHR5cGVvZiBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRSlba2V5b2YgdHlwZW9mIERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FXTtcbiAgLyoqXG4gICAqIERhc2hib2FyZCBjaGlsZHJlbiBpbiBwYXJ0aWN1bGFyLCBpbW11dGFibGUgc3RhdGUuXG4gICAqL1xuICBjaGlsZHJlbjogQ29udGV4dERhc2hib2FyZFsnY2hpbGRyZW4nXTtcbiAgLyoqXG4gICAqIE9iamVjdCBkZXNjcmliaW5nIGNoYW5nZXMgYXBwbGllZCB0byBkYXNoYm9hcmQgd2lkZ2V0cyB0aGF0IGNhbiBiZSBlYXNpbHkgbWFwcGVkIHRvIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvbiB3aWRnZXRDaGFuZ2VzLlxuICAgKiBgYGB0c1xuICAgKiB7XG4gICAqICAgIHJlbW92ZWQ6IHtcbiAgICogICAgICAgIDA5Njk2OTI2MTc2Mzc3MDM6IHsgY29tcG9uZW50SWQ6IFwiRGF0YSBwb2ludHMgZ3JhcGhcIiwgY29uZmlnOiB7Li4ufSwgY2xhc3Nlczogey4uLn0gLi4ufVxuICAgKiAgICB9LFxuICAgKiAgICBjb25maWc6IHtcbiAgICogICAgICAgIDYzNDc1NjczNDU3Njc2NTM6IHsgY29tcG9uZW50SWQ6IFwiQXBwbGljYXRpb25zXCIsIGNvbmZpZzogey4uLn0sIGNsYXNzZXM6IHsuLi59IC4uLn0sXG4gICAqICAgICAgICA2NDU2MzQ1NjM0NTY0NTY2OiB7IGNvbXBvbmVudElkOiBcIkV2ZW50cyBsaXN0XCIsIGNvbmZpZzogey4uLn0sIGNsYXNzZXM6IHsuLi59IC4uLn0sXG4gICAqICAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGNoYW5nZUhpc3Rvcnk6IFBhcnRpYWw8XG4gICAgUmVjb3JkPFxuICAgICAga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgICB7XG4gICAgICAgIFtpZDogc3RyaW5nXTogV2lkZ2V0O1xuICAgICAgfVxuICAgID5cbiAgPjtcbn07XG5cbmV4cG9ydCBlbnVtIENvbnRleHREYXNoYm9hcmRUeXBlIHtcbiAgRGV2aWNlID0gJ2RldmljZScsXG4gIFR5cGUgPSAndHlwZScsXG4gIEdyb3VwID0gJ2dyb3VwJyxcbiAgTmFtZWQgPSAnbmFtZScsXG4gIFJlcG9ydCA9ICdyZXBvcnQnXG59XG5cbmV4cG9ydCBlbnVtIERhc2hib2FyZERldGFpbHNUYWJJZCB7XG4gIEdFTkVSQUwgPSAnZ2VuZXJhbCcsXG4gIEFQUEVBUkFOQ0UgPSAnYXBwZWFyYW5jZScsXG4gIFZFUlNJT05ISVNUT1JZID0gJ3ZlcnNpb25IaXN0b3J5J1xufVxuXG5leHBvcnQgdHlwZSBEYXNoYm9hcmREZXRhaWxzVGFicyA9IFJlY29yZDxcbiAgRGFzaGJvYXJkRGV0YWlsc1RhYklkLFxuICBUYWJXaXRoVGVtcGxhdGUgJiB7IGZlYXR1cmVJZDogRGFzaGJvYXJkRGV0YWlsc1RhYklkIH1cbj47XG5cbmV4cG9ydCBjb25zdCBXSURHRVRfSEVBREVSX0NMQVNTRVMgPSBbXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnUmVndWxhcmBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLXRpdGxlLXJlZ3VsYXInLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGhhcyBubyBib3JkZXIgYmV0d2VlbiBoZWFkZXIgYW5kIGNvbnRlbnQuJylcbiAgfSxcbiAge1xuICAgIGxhYmVsOiBnZXR0ZXh0KCdCb3JkZXJgc3R5bGVgJyksXG4gICAgY2xhc3M6ICdwYW5lbC10aXRsZS1ib3JkZXInLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGhhcyBhIHNtYWxsIHNlcGFyYXRpb24gYm9yZGVyIGJldHdlZW4gaGVhZGVyIGFuZCBjb250ZW50LicpXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnT3ZlcmxheWBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLXRpdGxlLW92ZXJsYXknLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGNvbnRlbnQgb3ZlcmxheXMgdGhlIGhlYWRlci4nKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ0hpZGRlbmBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLXRpdGxlLWhpZGRlbicsXG4gICAgZGVzY3JpcHRpb246IGdldHRleHQoJ1RoZSB3aWRnZXQgaGVhZGVyIGlzIG5vdCBzaG93bi4nKVxuICB9XG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgV0lER0VUX0NPTlRFTlRfQ0xBU1NFUyA9IFtcbiAge1xuICAgIGxhYmVsOiBnZXR0ZXh0KCdCcmFuZGVkYHN0eWxlYCcpLFxuICAgIGNsYXNzOiAncGFuZWwtY29udGVudC1icmFuZGVkJyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnVGhlIHdpZGdldCBpcyBzdHlsZWQgd2l0aCB0aGUgbWFpbiBicmFuZCBjb2xvci4nKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ01hdGNoIGRhc2hib2FyZGBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLWNvbnRlbnQtbGlnaHQnLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGFwcGVhcmFuY2UgbWF0Y2hlcyB0aGUgZGFzaGJvYXJkIGFwcGVhcmFuY2UuJylcbiAgfSxcbiAge1xuICAgIGxhYmVsOiBnZXR0ZXh0KCdMaWdodGBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLWNvbnRlbnQtd2hpdGUnLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGhhcyBsaWdodCBhcHBlYXJhbmNlLCB0aGF0IGlzLCBkYXJrIHRleHQgb24gbGlnaHQgYmFja2dyb3VuZC4nKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ0Rhcmtgc3R5bGVgJyksXG4gICAgY2xhc3M6ICdwYW5lbC1jb250ZW50LWRhcmsnLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGhhcyBkYXJrIGFwcGVhcmFuY2UsIHRoYXQgaXMsIGxpZ2h0IHRleHQgb24gZGFyayBiYWNrZ3JvdW5kLicpXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnVHJhbnNwYXJlbnRgc3R5bGVgJyksXG4gICAgY2xhc3M6ICdwYW5lbC1jb250ZW50LXRyYW5zcGFyZW50JyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnVGhlIHdpZGdldCBoYXMgbm8gYmFja2dyb3VuZC4nKVxuICB9XG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREFTSEJPQVJEX1RIRU1FX0NMQVNTRVMgPSBbXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnTWF0Y2ggVUlgdGhlbWVgJyksXG4gICAgY2xhc3M6ICdkYXNoYm9hcmQtdGhlbWUtbGlnaHQnLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgZGFzaGJvYXJkIGFwcGVhcmFuY2UgbWF0Y2hlcyB0aGUgVUkgYXBwZWFyYW5jZS4nKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ0xpZ2h0YHRoZW1lYCcpLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkLXRoZW1lLXdoaXRlJyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dChcbiAgICAgICdUaGUgZGFzaGJvYXJkIGhhcyBsaWdodCBhcHBlYXJhbmNlLCB0aGF0IGlzLCBkYXJrIHRleHQgb24gbGlnaHQgYmFja2dyb3VuZC4nXG4gICAgKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ0RhcmtgdGhlbWVgJyksXG4gICAgY2xhc3M6ICdkYXNoYm9hcmQtdGhlbWUtZGFyaycsXG4gICAgZGVzY3JpcHRpb246IGdldHRleHQoXG4gICAgICAnVGhlIGRhc2hib2FyZCBoYXMgZGFyayBhcHBlYXJhbmNlLCB0aGF0IGlzLCBsaWdodCB0ZXh0IG9uIGRhcmsgYmFja2dyb3VuZC4nXG4gICAgKVxuICB9LFxuICAvLyB7XG4gIC8vICAgbGFiZWw6IGdldHRleHQoJ1RyYW5zcGFyZW50YHRoZW1lYCcpLFxuICAvLyAgIGNsYXNzOiAnZGFzaGJvYXJkLXRoZW1lLXRyYW5zcGFyZW50JyxcbiAgLy8gICBkZXNjcmlwdGlvbjogZ2V0dGV4dChcbiAgLy8gICAgICdUaGUgZGFzaGJvYXJkIGlzIHN0eWxlZCB3aXRoIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZCBhbmQgdGhlcmVmb3JlIGlzIGJvcmRlci1sZXNzLidcbiAgLy8gICApXG4gIC8vIH0sXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnQnJhbmRlZGB0aGVtZWAnKSxcbiAgICBjbGFzczogJ2Rhc2hib2FyZC10aGVtZS1icmFuZGVkJyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnVGhlIGRhc2hib2FyZCBpcyBzdHlsZWQgdXNpbmcgdGhlIGJyYW5kIHBhbGV0dGUuJylcbiAgfVxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFNUWUxJTkdfQ0xBU1NfUFJFRklYRVMgPSBbXG4gICdkYXNoYm9hcmQtdGhlbWUtJyxcbiAgJ3BhbmVsLXRpdGxlLScsXG4gICdwYW5lbC1jb250ZW50LSdcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQ29weUNsaXBib2FyZCB7XG4gIGRhc2hib2FyZElkOiBzdHJpbmc7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgY29udGV4dDogRGFzaGJvYXJkQ29udGV4dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDb250ZXh0IHtcbiAgY29udGV4dDogVmlld0NvbnRleHQ7XG4gIGNvbnRleHREYXRhOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0Pjtcbn1cblxuZXhwb3J0IGNvbnN0IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQgPSAnYWxsJyBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIERhc2hib2FyZEdsb2JhbFJvbGVzID0gbnVtYmVyW10gfCB0eXBlb2YgQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRDtcblxuZXhwb3J0IGNvbnN0IFBST0RVQ1RfRVhQRVJJRU5DRSA9IHtcbiAgREFTSEJPQVJEOiB7XG4gICAgRVZFTlRTOiB7XG4gICAgICBEQVNIQk9BUkRTOiAnZGFzaGJvYXJkcycsXG4gICAgICBSRVBPUlRTOiAncmVwb3J0cydcbiAgICB9LFxuICAgIENPTVBPTkVOVFM6IHtcbiAgICAgIERBU0hCT0FSRF9WSUVXOiAnY29udGV4dC1kYXNoYm9hcmQnLFxuICAgICAgREFTSEJPQVJEX0FWQUlMQUJJTElUWTogJ2Rhc2hib2FyZC1hdmFpbGFiaWxpdHknLFxuICAgICAgUkVQT1JUU19MSVNUOiAncmVwb3J0LWRhc2hib2FyZC1saXN0JyxcbiAgICAgIEFERF9SRVBPUlQ6ICdyZXBvcnQtZGFzaGJvYXJkLWxpc3QnLFxuICAgICAgQUREX0RBU0hCT0FSRDogJ2FkZC1kYXNoYm9hcmQnLFxuICAgICAgREVMRVRFX0RBU0hCT0FSRDogJ2NvbnRleHQtZGFzaGJvYXJkJ1xuICAgIH0sXG4gICAgQ09OVEVYVDoge1xuICAgICAgUkVQT1JUOiAncmVwb3J0JyxcbiAgICAgIERFVklDRTogJ2RldmljZScsXG4gICAgICBBU1NFVDogJ2Fzc2V0JyxcbiAgICAgIEdST1VQOiAnZ3JvdXAnXG4gICAgfSxcbiAgICBBQ1RJT05TOiB7XG4gICAgICBBUFBMWV9HTE9CQUxfUk9MRVNfQ0hBTkdFUzogJ2FwcGx5R2xvYmFsUm9sZXNDaGFuZ2VzJyxcbiAgICAgIERFTEVURTogJ2RlbGV0ZScsXG4gICAgICBMT0FEOiAnbG9hZCcsXG4gICAgICBDUkVBVEU6ICdjcmVhdGUnXG4gICAgfVxuICB9XG59IGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbkRlYWN0aXZhdGVDb21wb25lbnQge1xuICBjYW5EZWFjdGl2YXRlOiAoKSA9PiBib29sZWFuIHwgT2JzZXJ2YWJsZTxib29sZWFuPiB8IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBjb25zdCBSRVBPUlRfREVGQVVMVF9OQVZJR0FUSU9OX05PREVfUFJJT1JJVFkgPSAzMDtcbiJdfQ==
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9jb250ZXh0LWRhc2hib2FyZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFJTCxPQUFPLEVBS1IsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBTSx3QkFBd0IsQ0FBQyxDQUFDO0FBQzFGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHO0lBQ3hDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3pCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQ3ZDLGFBQWEsRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUM7SUFDN0MsWUFBWSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUM7SUFDdEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDckIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDckIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDN0IsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQzlDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztDQUNXLENBQUM7QUFxSHJFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBQzNDLE9BQU8sRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxPQUFPLENBQUMsOEJBQThCLENBQUM7SUFDL0MsT0FBTyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUM5QixXQUFXLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFD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SUFDNUYsTUFBTTtJQUNOLEtBQUs7SUFDTDtRQUNFLEtBQUssRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDaEMsS0FBSyxFQUFFLHlCQUF5QjtRQUNoQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGtEQUFrRCxDQUFDO0tBQ3pFO0NBQ08sQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHO0lBQ3BDLGtCQUFrQjtJQUNsQixjQUFjO0lBQ2QsZ0JBQWdCO0NBQ1IsQ0FBQztBQWFYLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEtBQWMsQ0FBQztBQUd4RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxTQUFTLEVBQUU7UUFDVCxNQUFNLEVBQUU7WUFDTixVQUFVLEVBQUUsWUFBWTtZQUN4QixPQUFPLEVBQUUsU0FBUztTQUNuQjtRQUNELFVBQVUsRUFBRTtZQUNWLGNBQWMsRUFBRSxtQkFBbUI7WUFDbkMsc0JBQXNCLEVBQUUsd0JBQXdCO1lBQ2hELFlBQVksRUFBRSx1QkFBdUI7WUFDckMsVUFBVSxFQUFFLHVCQUF1QjtZQUNuQyxhQUFhLEVBQUUsZUFBZTtZQUM5QixnQkFBZ0IsRUFBRSxtQkFBbUI7U0FDdEM7UUFDRCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsUUFBUTtZQUNoQixNQUFNLEVBQUUsUUFBUTtZQUNoQixLQUFLLEVBQUUsT0FBTztZQUNkLEtBQUssRUFBRSxPQUFPO1NBQ2Y7UUFDRCxPQUFPLEVBQUU7WUFDUCwwQkFBMEIsRUFBRSx5QkFBeUI7WUFDckQsTUFBTSxFQUFFLFFBQVE7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixNQUFNLEVBQUUsUUFBUTtTQUNqQjtLQUNGO0NBQ08sQ0FBQztBQU1YLE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIFdpZGdldCxcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIFJvdXRlLFxuICBnZXR0ZXh0LFxuICBWaWV3Q29udGV4dCxcbiAgV2lkZ2V0RGlzcGxheVNldHRpbmdzLFxuICBUYWJXaXRoVGVtcGxhdGUsXG4gIFdpZGdldFNldHRpbmdzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5cbmV4cG9ydCBjb25zdCBDT05URVhUX0RBU0hCT0FSRF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignQ29udGV4dERhc2hib2FyZENvbmZpZycpO1xuZXhwb3J0IGNvbnN0IERBU0hCT0FSRF9TRVRUSU5HU19DSEFOR0VTID0ge1xuICBjbGFzc2VzOiBnZXR0ZXh0KCd0aGVtZScpLFxuICBnbG9iYWxSb2xlc0lkczogZ2V0dGV4dCgnZ2xvYmFsIHJvbGVzJyksXG4gIHdpZGdldENsYXNzZXM6IGdldHRleHQoJ3dpZGdldCBoZWFkZXIgc3R5bGUnKSxcbiAgd2lkZ2V0TWFyZ2luOiBnZXR0ZXh0KCd3aWRnZXQgbWFyZ2luJyksXG4gIGljb246IGdldHRleHQoJ2ljb24nKSxcbiAgbmFtZTogZ2V0dGV4dCgnbmFtZScpLFxuICBwcmlvcml0eTogZ2V0dGV4dCgncHJpb3JpdHknKSxcbiAgYzh5X0lzTmF2aWdhdG9yTm9kZTogZ2V0dGV4dCgnbmF2aWdhdG9yIGl0ZW0nKSxcbiAgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGdldHRleHQoJ3RyYW5zbGF0ZSB3aWRnZXQgdGl0bGUnKVxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUGFydGlhbDxSZWNvcmQ8a2V5b2YgQ29udGV4dERhc2hib2FyZCwgc3RyaW5nPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dERhc2hib2FyZENvbmZpZyB7XG4gIHdpZGdldEZpbHRlcj86IChjb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSA9PiBib29sZWFuO1xuICBhbGxvd0Z1bGxzY3JlZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHJvdXRlcz86IFJvdXRlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dFdpZGdldENvbmZpZyB7XG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0aGF0IGRlZmluZSBob3cgdGhlIGRlZmF1bHQgY29uZmlnIGNvbXBvbmVudCBpc1xuICAgKiBkaXNwbGF5ZWQuIFRoZXkgYXJlIHN0YXRpYyBhbmQgd2lsbCBub3QgYmUgc2F2ZWQuXG4gICAqL1xuICBzZXR0aW5ncz86IFdpZGdldFNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0aGF0IGFyZSBpbmplY3RlZCBpbiBhbnkgZGlzcGxheWluZyBjb21wb25lbnQuXG4gICAqL1xuICBkaXNwbGF5U2V0dGluZ3M/OiBXaWRnZXREaXNwbGF5U2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFdoYXRldmVyIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgY29uZmlndXJhdGlvbiB3aGVuIGEgd2lkZ2V0IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBjb25maWc/OiB7XG4gICAgLyoqXG4gICAgICogQW55IG90aGVyIGluZm9ybWF0aW9uIHRoYXQgc2hvdWxkIGJlIHN0b3JlZCBoZXJlLlxuICAgICAqL1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbiAgLyoqXG4gICAqIFRoZSBzZWxlY3RlZCBkZXZpY2Ugb3IgZ3JvdXAgKG5vdGU6IG5hbWluZyBpcyBpbmNvbnNpc3RlbnQgYXMgZ3JvdXAgd2FzIGFkZGVkIGxhdGVyXG4gICAqIGJ1dCBtdXN0IHN0YXkgZm9yIGFscmVhZHkgaW1wbGVtZW50ZWQgd2lkZ2V0cylcbiAgICovXG4gIGRldmljZT86IHtcbiAgICBpZD86IHN0cmluZyB8IG51bWJlcjtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbiAgLyoqXG4gICAqIEFueSBvdGhlciBpbmZvcm1hdGlvbiB0aGF0IHNob3VsZCBiZSBzdG9yZWQgaGVyZS5cbiAgICovXG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCBleHRlbmRzIElNYW5hZ2VkT2JqZWN0IHtcbiAgYzh5X0Rhc2hib2FyZD86IENvbnRleHREYXNoYm9hcmQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGM4eV9EYXNoYm9hcmRIaXN0b3J5PzogQ29udGV4dERhc2hib2FyZFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHREYXNoYm9hcmQge1xuICBpY29uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBwcmlvcml0eT86IG51bWJlcjtcbiAgZGV2aWNlVHlwZT86IGJvb2xlYW47XG4gIGRldmljZVR5cGVWYWx1ZT86IHN0cmluZztcbiAgaXNGcm96ZW4/OiBib29sZWFuO1xuICBjbGFzc2VzPzogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07XG4gIHdpZGdldENsYXNzZXM/OiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgd2lkZ2V0TWFyZ2luPzogbnVtYmVyO1xuICB0cmFuc2xhdGVXaWRnZXRUaXRsZT86IGJvb2xlYW47XG4gIGdsb2JhbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIGNvbHVtbnMgb24gdGhhdCBkYXNoYm9hcmQuXG4gICAqIENhbiBiZSBmcmVlbHkgY2hvc2VuLCBidXQgcHJvZHVjdCB1c2VzIGVpdGhlciAxMiBvciAyNC5cbiAgICovXG4gIGNvbHVtbnM/OiBudW1iZXI7XG4gIGNoaWxkcmVuPzoge1xuICAgIFtpZDogc3RyaW5nXTogV2lkZ2V0O1xuICB9O1xuICBnbG9iYWxSb2xlc0lkcz86IERhc2hib2FyZEdsb2JhbFJvbGVzO1xuICBjOHlfSXNOYXZpZ2F0b3JOb2RlPzogb2JqZWN0O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaGlzdG9yeURlc2NyaXB0aW9uPzogRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uO1xuICBjcmVhdGVkPzogc3RyaW5nO1xuICBhdXRob3I/OiBzdHJpbmc7XG59XG4vKipcbiAqIE9iamVjdCBkZXNjcmliaW5nIGNoYW5nZXMgYXBwbGllZCB0byBkYXNoYm9hcmQgc2V0dGluZ3MgYW5kIGl0cyB3aWRnZXRzLiBVc2VkIHRvIGRpc3BsYXkgdXNlci1mcmllbmRseSBjaGFuZ2UgbG9nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvbiB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdHlwZSBvZiBkYXNoYm9hcmQgY2hhbmdlIChvciBjcmVhdGlvbikuXG4gICAqL1xuICBjaGFuZ2VUeXBlPzogJ3Jlc2V0JyB8ICdjcmVhdGUnIHwgJ3VwZGF0ZSc7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGRhc2hib2FyZCBzZXR0aW5ncyB0aGF0IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqL1xuICBkYXNoYm9hcmRTZXR0aW5nQ2hhbmdlcz86IChrZXlvZiB0eXBlb2YgREFTSEJPQVJEX1NFVFRJTkdTX0NIQU5HRVMpW107XG4gIC8qKlxuICAgKiBUcnVlIGlmIGRhc2hib2FyZCBpcyB0eXBlZCBkYXNoYm9hcmQsIGZhbHNlIGlmIGl0J3Mgbm90LlxuICAgKi9cbiAgZGV2aWNlVHlwZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbmluZyBsaXN0cyBvZiB3aWRnZXRzIChieSB0aXRsZSkgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkLCBncm91cGVkIGJ5IGNoYW5nZSB0eXBlLCBlLmcuOlxuICAgKiBgYGB0c1xuICAgKiB3aWRnZXRDaGFuZ2VzOiB7XG4gICAqICAgICByZW1vdmVkOiBbJ0FwcGxpY2F0aW9ucyddLFxuICAgKiAgICAgY29uZmlnPzogWydEYXRhIHBvaW50cyBncmFwaCcsICdFdmVudHMgbGlzdCddLFxuICAgKiAgIH0sXG4gICAqIGBgYFxuICAgKi9cbiAgd2lkZ2V0Q2hhbmdlcz86IHtcbiAgICByZW1vdmVkPzogc3RyaW5nW107XG4gICAgYWRkZWQ/OiBzdHJpbmdbXTtcbiAgICBjb25maWc/OiBzdHJpbmdbXTtcbiAgICBhcnJhbmdlbWVudD86IHN0cmluZ1tdO1xuICB9O1xuICAvKipcbiAgICogU3RyaW5nIHVzZWQgdG8gZGlzcGxheSB0aGUgZGF0ZSBmcm9tIHdoaWNoIHRoZSBzdGF0ZSB3YXMgcmVzdG9yZWQuXG4gICAqL1xuICByZXN0b3JlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FID0ge1xuICBpbml0aWFsOiBnZXR0ZXh0KCdJbml0aWFsIHN0YXRlJyksXG4gIGNvbmZpZzogZ2V0dGV4dCgnV2lkZ2V0IGNvbmZpZ3VyYXRpb24gY2hhbmdlZCcpLFxuICByZW1vdmVkOiBnZXR0ZXh0KCdXaWRnZXQgcmVtb3ZlZCcpLFxuICBhZGRlZDogZ2V0dGV4dCgnV2lkZ2V0IGFkZGVkJyksXG4gIGFycmFuZ2VtZW50OiBnZXR0ZXh0KCdXaWRnZXRzIHJlYXJyYW5nZWQnKVxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPGtleW9mIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddIHwgJ2luaXRpYWwnLCBzdHJpbmc+O1xuLyoqXG4gKiBPYmplY3QgcmVwcmVzZW50aW5nIHN0YXRlIG9mIGRhc2hib2FyZCB3aWRnZXRzLiBJdHMgbWFpbiBwdXJwb3NlIGlzIHRvIGFsbG93IHRvIHVuZG8gYW5kIHJlZG8gY2hhbmdlc1xuICogYXBwbGllZCB0byBkYXNoYm9hcmQgY2hpbGRyZW4uXG4gKi9cbmV4cG9ydCB0eXBlIERhc2hib2FyZENoaWxkcmVuU3RhdGUgPSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjaGFuZ2UgYXBwbGllZCB0byBkYXNoYm9hcmQgdGhhdCByZXN1bHRzIGluIGN1cnJlbnQgc3RhdGUsIGUuZy4gJ3dpZGdldCByZW1vdmVkJ1xuICAgKi9cbiAgbmFtZTogKHR5cGVvZiBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRSlba2V5b2YgdHlwZW9mIERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FXTtcbiAgLyoqXG4gICAqIERhc2hib2FyZCBjaGlsZHJlbiBpbiBwYXJ0aWN1bGFyLCBpbW11dGFibGUgc3RhdGUuXG4gICAqL1xuICBjaGlsZHJlbjogQ29udGV4dERhc2hib2FyZFsnY2hpbGRyZW4nXTtcbiAgLyoqXG4gICAqIE9iamVjdCBkZXNjcmliaW5nIGNoYW5nZXMgYXBwbGllZCB0byBkYXNoYm9hcmQgd2lkZ2V0cyB0aGF0IGNhbiBiZSBlYXNpbHkgbWFwcGVkIHRvIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvbiB3aWRnZXRDaGFuZ2VzLlxuICAgKiBgYGB0c1xuICAgKiB7XG4gICAqICAgIHJlbW92ZWQ6IHtcbiAgICogICAgICAgIDA5Njk2OTI2MTc2Mzc3MDM6IHsgY29tcG9uZW50SWQ6IFwiRGF0YSBwb2ludHMgZ3JhcGhcIiwgY29uZmlnOiB7Li4ufSwgY2xhc3Nlczogey4uLn0gLi4ufVxuICAgKiAgICB9LFxuICAgKiAgICBjb25maWc6IHtcbiAgICogICAgICAgIDYzNDc1NjczNDU3Njc2NTM6IHsgY29tcG9uZW50SWQ6IFwiQXBwbGljYXRpb25zXCIsIGNvbmZpZzogey4uLn0sIGNsYXNzZXM6IHsuLi59IC4uLn0sXG4gICAqICAgICAgICA2NDU2MzQ1NjM0NTY0NTY2OiB7IGNvbXBvbmVudElkOiBcIkV2ZW50cyBsaXN0XCIsIGNvbmZpZzogey4uLn0sIGNsYXNzZXM6IHsuLi59IC4uLn0sXG4gICAqICAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGNoYW5nZUhpc3Rvcnk6IFBhcnRpYWw8XG4gICAgUmVjb3JkPFxuICAgICAga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgICB7XG4gICAgICAgIFtpZDogc3RyaW5nXTogV2lkZ2V0O1xuICAgICAgfVxuICAgID5cbiAgPjtcbn07XG5cbmV4cG9ydCBlbnVtIENvbnRleHREYXNoYm9hcmRUeXBlIHtcbiAgRGV2aWNlID0gJ2RldmljZScsXG4gIFR5cGUgPSAndHlwZScsXG4gIEdyb3VwID0gJ2dyb3VwJyxcbiAgTmFtZWQgPSAnbmFtZScsXG4gIFJlcG9ydCA9ICdyZXBvcnQnXG59XG5cbmV4cG9ydCBlbnVtIERhc2hib2FyZERldGFpbHNUYWJJZCB7XG4gIEdFTkVSQUwgPSAnZ2VuZXJhbCcsXG4gIEFQUEVBUkFOQ0UgPSAnYXBwZWFyYW5jZScsXG4gIFZFUlNJT05ISVNUT1JZID0gJ3ZlcnNpb25IaXN0b3J5J1xufVxuXG5leHBvcnQgdHlwZSBEYXNoYm9hcmREZXRhaWxzVGFicyA9IFJlY29yZDxcbiAgRGFzaGJvYXJkRGV0YWlsc1RhYklkLFxuICBUYWJXaXRoVGVtcGxhdGUgJiB7IGZlYXR1cmVJZDogRGFzaGJvYXJkRGV0YWlsc1RhYklkIH1cbj47XG5cbmV4cG9ydCBjb25zdCBXSURHRVRfSEVBREVSX0NMQVNTRVMgPSBbXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnUmVndWxhcmBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLXRpdGxlLXJlZ3VsYXInLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGhhcyBubyBib3JkZXIgYmV0d2VlbiBoZWFkZXIgYW5kIGNvbnRlbnQuJylcbiAgfSxcbiAge1xuICAgIGxhYmVsOiBnZXR0ZXh0KCdCb3JkZXJgc3R5bGVgJyksXG4gICAgY2xhc3M6ICdwYW5lbC10aXRsZS1ib3JkZXInLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGhhcyBhIHNtYWxsIHNlcGFyYXRpb24gYm9yZGVyIGJldHdlZW4gaGVhZGVyIGFuZCBjb250ZW50LicpXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnT3ZlcmxheWBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLXRpdGxlLW92ZXJsYXknLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGNvbnRlbnQgb3ZlcmxheXMgdGhlIGhlYWRlci4nKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ0hpZGRlbmBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLXRpdGxlLWhpZGRlbicsXG4gICAgZGVzY3JpcHRpb246IGdldHRleHQoJ1RoZSB3aWRnZXQgaGVhZGVyIGlzIG5vdCBzaG93bi4nKVxuICB9XG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgV0lER0VUX0NPTlRFTlRfQ0xBU1NFUyA9IFtcbiAge1xuICAgIGxhYmVsOiBnZXR0ZXh0KCdCcmFuZGVkYHN0eWxlYCcpLFxuICAgIGNsYXNzOiAncGFuZWwtY29udGVudC1icmFuZGVkJyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnVGhlIHdpZGdldCBpcyBzdHlsZWQgd2l0aCB0aGUgbWFpbiBicmFuZCBjb2xvci4nKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ01hdGNoIGRhc2hib2FyZGBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLWNvbnRlbnQtbGlnaHQnLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGFwcGVhcmFuY2UgbWF0Y2hlcyB0aGUgZGFzaGJvYXJkIGFwcGVhcmFuY2UuJylcbiAgfSxcbiAge1xuICAgIGxhYmVsOiBnZXR0ZXh0KCdMaWdodGBzdHlsZWAnKSxcbiAgICBjbGFzczogJ3BhbmVsLWNvbnRlbnQtd2hpdGUnLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGhhcyBsaWdodCBhcHBlYXJhbmNlLCB0aGF0IGlzLCBkYXJrIHRleHQgb24gbGlnaHQgYmFja2dyb3VuZC4nKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ0Rhcmtgc3R5bGVgJyksXG4gICAgY2xhc3M6ICdwYW5lbC1jb250ZW50LWRhcmsnLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgd2lkZ2V0IGhhcyBkYXJrIGFwcGVhcmFuY2UsIHRoYXQgaXMsIGxpZ2h0IHRleHQgb24gZGFyayBiYWNrZ3JvdW5kLicpXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnVHJhbnNwYXJlbnRgc3R5bGVgJyksXG4gICAgY2xhc3M6ICdwYW5lbC1jb250ZW50LXRyYW5zcGFyZW50JyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnVGhlIHdpZGdldCBoYXMgbm8gYmFja2dyb3VuZC4nKVxuICB9XG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREFTSEJPQVJEX1RIRU1FX0NMQVNTRVMgPSBbXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnTWF0Y2ggVUlgdGhlbWVgJyksXG4gICAgY2xhc3M6ICdkYXNoYm9hcmQtdGhlbWUtbGlnaHQnLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdUaGUgZGFzaGJvYXJkIGFwcGVhcmFuY2UgbWF0Y2hlcyB0aGUgVUkgYXBwZWFyYW5jZS4nKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ0xpZ2h0YHRoZW1lYCcpLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkLXRoZW1lLXdoaXRlJyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dChcbiAgICAgICdUaGUgZGFzaGJvYXJkIGhhcyBsaWdodCBhcHBlYXJhbmNlLCB0aGF0IGlzLCBkYXJrIHRleHQgb24gbGlnaHQgYmFja2dyb3VuZC4nXG4gICAgKVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGdldHRleHQoJ0RhcmtgdGhlbWVgJyksXG4gICAgY2xhc3M6ICdkYXNoYm9hcmQtdGhlbWUtZGFyaycsXG4gICAgZGVzY3JpcHRpb246IGdldHRleHQoXG4gICAgICAnVGhlIGRhc2hib2FyZCBoYXMgZGFyayBhcHBlYXJhbmNlLCB0aGF0IGlzLCBsaWdodCB0ZXh0IG9uIGRhcmsgYmFja2dyb3VuZC4nXG4gICAgKVxuICB9LFxuICAvLyB7XG4gIC8vICAgbGFiZWw6IGdldHRleHQoJ1RyYW5zcGFyZW50YHRoZW1lYCcpLFxuICAvLyAgIGNsYXNzOiAnZGFzaGJvYXJkLXRoZW1lLXRyYW5zcGFyZW50JyxcbiAgLy8gICBkZXNjcmlwdGlvbjogZ2V0dGV4dChcbiAgLy8gICAgICdUaGUgZGFzaGJvYXJkIGlzIHN0eWxlZCB3aXRoIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZCBhbmQgdGhlcmVmb3JlIGlzIGJvcmRlci1sZXNzLidcbiAgLy8gICApXG4gIC8vIH0sXG4gIHtcbiAgICBsYWJlbDogZ2V0dGV4dCgnQnJhbmRlZGB0aGVtZWAnKSxcbiAgICBjbGFzczogJ2Rhc2hib2FyZC10aGVtZS1icmFuZGVkJyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnVGhlIGRhc2hib2FyZCBpcyBzdHlsZWQgdXNpbmcgdGhlIGJyYW5kIHBhbGV0dGUuJylcbiAgfVxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFNUWUxJTkdfQ0xBU1NfUFJFRklYRVMgPSBbXG4gICdkYXNoYm9hcmQtdGhlbWUtJyxcbiAgJ3BhbmVsLXRpdGxlLScsXG4gICdwYW5lbC1jb250ZW50LSdcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQ29weUNsaXBib2FyZCB7XG4gIGRhc2hib2FyZElkOiBzdHJpbmc7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgY29udGV4dDogRGFzaGJvYXJkQ29udGV4dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDb250ZXh0IHtcbiAgY29udGV4dDogVmlld0NvbnRleHQ7XG4gIGNvbnRleHREYXRhOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0Pjtcbn1cblxuZXhwb3J0IGNvbnN0IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQgPSAnYWxsJyBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIERhc2hib2FyZEdsb2JhbFJvbGVzID0gbnVtYmVyW10gfCB0eXBlb2YgQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRDtcblxuZXhwb3J0IGNvbnN0IFBST0RVQ1RfRVhQRVJJRU5DRSA9IHtcbiAgREFTSEJPQVJEOiB7XG4gICAgRVZFTlRTOiB7XG4gICAgICBEQVNIQk9BUkRTOiAnZGFzaGJvYXJkcycsXG4gICAgICBSRVBPUlRTOiAncmVwb3J0cydcbiAgICB9LFxuICAgIENPTVBPTkVOVFM6IHtcbiAgICAgIERBU0hCT0FSRF9WSUVXOiAnY29udGV4dC1kYXNoYm9hcmQnLFxuICAgICAgREFTSEJPQVJEX0FWQUlMQUJJTElUWTogJ2Rhc2hib2FyZC1hdmFpbGFiaWxpdHknLFxuICAgICAgUkVQT1JUU19MSVNUOiAncmVwb3J0LWRhc2hib2FyZC1saXN0JyxcbiAgICAgIEFERF9SRVBPUlQ6ICdyZXBvcnQtZGFzaGJvYXJkLWxpc3QnLFxuICAgICAgQUREX0RBU0hCT0FSRDogJ2FkZC1kYXNoYm9hcmQnLFxuICAgICAgREVMRVRFX0RBU0hCT0FSRDogJ2NvbnRleHQtZGFzaGJvYXJkJ1xuICAgIH0sXG4gICAgQ09OVEVYVDoge1xuICAgICAgUkVQT1JUOiAncmVwb3J0JyxcbiAgICAgIERFVklDRTogJ2RldmljZScsXG4gICAgICBBU1NFVDogJ2Fzc2V0JyxcbiAgICAgIEdST1VQOiAnZ3JvdXAnXG4gICAgfSxcbiAgICBBQ1RJT05TOiB7XG4gICAgICBBUFBMWV9HTE9CQUxfUk9MRVNfQ0hBTkdFUzogJ2FwcGx5R2xvYmFsUm9sZXNDaGFuZ2VzJyxcbiAgICAgIERFTEVURTogJ2RlbGV0ZScsXG4gICAgICBMT0FEOiAnbG9hZCcsXG4gICAgICBDUkVBVEU6ICdjcmVhdGUnXG4gICAgfVxuICB9XG59IGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbkRlYWN0aXZhdGVDb21wb25lbnQge1xuICBjYW5EZWFjdGl2YXRlOiAoKSA9PiBib29sZWFuIHwgT2JzZXJ2YWJsZTxib29sZWFuPiB8IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBjb25zdCBSRVBPUlRfREVGQVVMVF9OQVZJR0FUSU9OX05PREVfUFJJT1JJVFkgPSAzMDtcblxuZXhwb3J0IHR5cGUgQWxsb3dUeXBlRGFzaGJvYXJkID0gJ2FsbG93JyB8ICdkaXNhbGxvdycgfCAnYWxsb3dfaWZfdHlwZV9maWxsZWQnO1xuIl19
|