@sap/open.fe 1.99.0 → 1.100.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/package.json +1 -1
- package/packages/sap.fe.common/src/sap/fe/common/.library +1 -1
- package/packages/sap.fe.common/src/sap/fe/common/.theming +1 -1
- package/packages/sap.fe.common/src/sap/fe/common/MessageButton-dbg.js +1748 -1813
- package/packages/sap.fe.common/src/sap/fe/common/MessageButton.js +2 -3
- package/packages/sap.fe.common/src/sap/fe/common/MessageButton.ts +1801 -0
- package/packages/sap.fe.common/src/sap/fe/common/MessageFilter-dbg.js +77 -32
- package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.js +2 -3
- package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.ts +26 -0
- package/packages/sap.fe.common/src/sap/fe/common/MessagePopover-dbg.js +43 -53
- package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.js +2 -3
- package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.ts +39 -0
- package/packages/sap.fe.common/src/sap/fe/common/library-dbg.js +31 -38
- package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js +8 -9
- package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js.map +3 -3
- package/packages/sap.fe.common/src/sap/fe/common/library-preload.js +23 -71
- package/packages/sap.fe.common/src/sap/fe/common/library-preload.js.map +4 -4
- package/packages/sap.fe.common/src/sap/fe/common/library.js +4 -5
- package/packages/sap.fe.common/src/sap/fe/common/library.ts +35 -0
- package/packages/sap.fe.common/src/sap/fe/common/manifest.json +3 -3
- package/packages/sap.fe.common/src/sap/fe/common/resources.json +54 -32
- package/packages/sap.fe.common/test/sap/fe/common/designtime/api.json +1 -1
- package/packages/sap.fe.common/test/sap/fe/common/designtime/apiref/api.json +1 -1
- package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.jsmeta.json +1 -1
- package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.xmlmeta.json +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/.library +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/.theming +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper-dbg.js +1 -69
- package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.ts +0 -70
- package/packages/sap.fe.core/src/sap/fe/core/AppComponent-dbg.js +388 -399
- package/packages/sap.fe.core/src/sap/fe/core/AppComponent.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/AppComponent.ts +403 -0
- package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler-dbg.js +127 -158
- package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/BaseController-dbg.js +82 -58
- package/packages/sap.fe.core/src/sap/fe/core/BaseController.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/BaseController.ts +68 -0
- package/packages/sap.fe.core/src/sap/fe/core/CommonUtils-dbg.js +111 -20
- package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.ts +131 -32
- package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI-dbg.js +278 -274
- package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.ts +250 -0
- package/packages/sap.fe.core/src/sap/fe/core/PageController-dbg.js +157 -29
- package/packages/sap.fe.core/src/sap/fe/core/PageController.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/PageController.ts +60 -32
- package/packages/sap.fe.core/src/sap/fe/core/RouterProxy-dbg.js +694 -756
- package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.ts +11 -9
- package/packages/sap.fe.core/src/sap/fe/core/Synchronization-dbg.js +21 -31
- package/packages/sap.fe.core/src/sap/fe/core/Synchronization.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent.ts +10 -3
- package/packages/sap.fe.core/src/sap/fe/core/TemplateModel-dbg.js +20 -38
- package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.ts +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper-dbg.js +1354 -1370
- package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.ts +33 -22
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync-dbg.js +392 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon-dbg.js +136 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage-dbg.js +262 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
- package/packages/sap.fe.core/src/sap/fe/core/actions/draft-dbg.js +30 -68
- package/packages/sap.fe.core/src/sap/fe/core/actions/draft.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/actions/draft.ts +44 -71
- package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling-dbg.js +55 -36
- package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.ts +66 -46
- package/packages/sap.fe.core/src/sap/fe/core/actions/operations-dbg.js +34 -15
- package/packages/sap.fe.core/src/sap/fe/core/actions/operations.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/actions/operations.ts +48 -18
- package/packages/sap.fe.core/src/sap/fe/core/actions/sticky-dbg.js +17 -4
- package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.ts +21 -4
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata-dbg.js +69 -66
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1593 -1669
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +79 -54
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +718 -779
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +796 -816
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +1004 -1005
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +487 -521
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +141 -169
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +233 -244
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady-dbg.js +301 -336
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator-dbg.js +188 -175
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +157 -149
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing-dbg.js +144 -125
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +7 -6
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share-dbg.js +230 -268
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.ts +231 -0
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +592 -633
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState-dbg.js +788 -806
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
- package/packages/sap.fe.core/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
- package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution-dbg.js +67 -66
- package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.ts +72 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +90 -75
- package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +130 -125
- package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +103 -112
- package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper-dbg.js +122 -135
- package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar-dbg.js +162 -159
- package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.ts +143 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper-dbg.js +45 -39
- package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -42
- package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -2
- package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +126 -116
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +241 -255
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -141
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +335 -322
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
- package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +74 -74
- package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext-dbg.js +348 -379
- package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.ts +19 -16
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings-dbg.js +12 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper-dbg.js +354 -378
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter-dbg.js +6 -4
- package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
- package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter-dbg.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField-dbg.js +26 -12
- package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form-dbg.js +2 -2
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table-dbg.js +130 -23
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +118 -53
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +161 -207
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +115 -133
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +20 -6
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +12 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key-dbg.js +42 -57
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +25 -4
- package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +10 -4
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +7 -5
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
- package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +92 -98
- package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
- package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js.map +3 -3
- package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +104 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.js +5 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
- package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter-dbg.js +53 -2
- package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
- package/packages/sap.fe.core/src/sap/fe/core/fpm/Component-dbg.js +50 -54
- package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.ts +48 -0
- package/packages/sap.fe.core/src/sap/fe/core/fpm/manifest.json +2 -2
- package/packages/sap.fe.core/src/sap/fe/core/fpm/resources.json +7 -3
- package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +323 -309
- package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
- package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression-dbg.js +7 -7
- package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport-dbg.js +186 -62
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
- package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +5 -4
- package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
- package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper-dbg.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper-dbg.js +601 -684
- package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper-dbg.js +25 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
- package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +5 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
- package/packages/sap.fe.core/src/sap/fe/core/library-dbg.js +426 -451
- package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js +36 -32
- package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js.map +3 -3
- package/packages/sap.fe.core/src/sap/fe/core/library-preload.js +644 -738
- package/packages/sap.fe.core/src/sap/fe/core/library-preload.js.map +4 -4
- package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js +24 -35
- package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js.map +2 -2
- package/packages/sap.fe.core/src/sap/fe/core/library.js +2 -3
- package/packages/sap.fe.core/src/sap/fe/core/library.support.js +22 -33
- package/packages/sap.fe.core/src/sap/fe/core/library.support.ts +23 -0
- package/packages/sap.fe.core/src/sap/fe/core/library.ts +420 -0
- package/packages/sap.fe.core/src/sap/fe/core/manifest.json +10 -10
- package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +5 -3
- package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle.properties +22 -5
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ar.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_bg.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ca.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cs.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cy.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_da.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_de.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_el.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_et.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fi.properties +28 -8
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr.properties +28 -8
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hi.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hr.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hu.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_id.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_it.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_iw.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ja.properties +26 -6
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_kk.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ko.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lt.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lv.properties +28 -8
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ms.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_nl.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_no.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pl.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt.properties +28 -8
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ro.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ru.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sh.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sk.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sl.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sv.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_th.properties +26 -6
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_tr.properties +30 -10
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_uk.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_vi.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
- package/packages/sap.fe.core/src/sap/fe/core/resources.json +745 -384
- package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +45 -71
- package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +154 -192
- package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
- package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +66 -92
- package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +284 -339
- package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
- package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +67 -102
- package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
- package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +754 -814
- package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
- package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory-dbg.js +649 -736
- package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
- package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +567 -592
- package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
- package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +354 -386
- package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
- package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper-dbg.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper.ts +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics-dbg.js +36 -48
- package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +93 -85
- package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
- package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper-dbg.js +25 -32
- package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.ts +36 -35
- package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper-dbg.js +2 -2
- package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
- package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.js +1 -1
- package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.ts +37 -24
- package/packages/sap.fe.core/test/sap/fe/core/designtime/api.json +1664 -1
- package/packages/sap.fe.core/test/sap/fe/core/designtime/apiref/api.json +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jsmeta.json +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jstemplates.json +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.xmlmeta.json +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/MacroNavigationModel.js +59 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/RootEntity.json +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/Component.js +33 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.controller.js +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.view.xml +18 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/Entities.json +6 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/service.cds +6 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/manifest.json +68 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldMessages.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarSVandAnnotationDefaults/FilterBarSVandAnnotationDefaults.controller.js +1 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.controller.js +7 -2
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.view.xml +9 -3
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.js +23 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.ts +11 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/service.cds +11 -23
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/Component.js +40 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.controller.js +35 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.view.xml +21 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/RootEntity.json +82 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/service.cds +82 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/manifest.json +78 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/tableMessages.html +37 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/localService/ChildEntity.json +5 -4
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/manifest.json +3 -0
- package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/App.view.xml +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.js +1 -169
- package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.ts +0 -212
- package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.js +2305 -119
- package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.ts +2206 -67
- package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.js +40 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.ts +34 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.js +114 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.ts +114 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.js +113 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.ts +78 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.js +599 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.ts +614 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.js +23 -5
- package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.ts +26 -14
- package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.js +87 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.ts +82 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.js +124 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.ts +141 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/__snapshots__/TemplateConverter.spec.ts.snap +34768 -67
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.js +170 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.ts +155 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.js +101 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.ts +94 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.js +82 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.ts +77 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.js +2 -2
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.ts +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.js +7 -2
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.ts +7 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.js +104 -2
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.ts +96 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.js +83 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.ts +79 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.js +72 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.ts +64 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.js +619 -3
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.ts +668 -5
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.js +297 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.ts +276 -6
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.js +149 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.ts +142 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.js +776 -182
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.ts +181 -3
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/KPIManagement.spec.js +19 -43
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.js +2 -18
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.ts +8 -6
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.js +5 -27
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.ts +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.js +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.ts +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.js +86 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.ts +80 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.js +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.ts +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.js +2 -18
- package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.ts +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.js +45 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.ts +29 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.js +51 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.ts +47 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/controls/__snapshots__/FilterBar.spec.ts.snap +3 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.js +2 -2
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.ts +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.js +25 -36
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.ts +26 -36
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.js +3 -3
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.ts +2 -2
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.js +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.ts +6 -5
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.js +133 -9
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.ts +171 -8
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.js +174 -210
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.ts +294 -230
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/__snapshots__/Filter.spec.ts.snap +3 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.js +237 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.ts +246 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.js +9993 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.ts +11352 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.js +460 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.ts +543 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.js +616 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.ts +711 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/manifest.json +887 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.js +393 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.ts +434 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.js +31 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.ts +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/Filter.cds +27 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/MassEditHelper.cds +12 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/manifest.json +150 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata.xml +365 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_groupable_options.xml +96 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_textArrangement.xml +102 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_withPV.xml +359 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/Table.cds +89 -27
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.js +421 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.ts +413 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/aggregatedSD/metadata.xml +3767 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/manifest.json +185 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/metadata.xml +1534 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/manifest.json +887 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/data/salesOrderMetadata_qunit.xml +4995 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.js +48 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.ts +48 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.js +131 -51
- package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.ts +81 -31
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.js +13 -7
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.ts +12 -6
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.js +17 -3
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.ts +24 -7
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.js +61 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.ts +59 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.js +3 -3
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.ts +1 -2
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.js +4 -4
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.ts +6 -3
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.js +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.ts +1 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/AppStartupHelper.spec.ts.snap +19 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/MassEditHelper.spec.ts.snap +0 -73
- package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.js +11 -1
- package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.ts +15 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/__snapshots__/ChangePageConfiguration.spec.ts.snap +30 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.js +49 -5
- package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.ts +60 -5
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.js +384 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.ts +427 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.js +132 -2
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.ts +156 -2
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.js +273 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.ts +402 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.js +45 -0
- package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.ts +40 -0
- package/packages/sap.fe.core/test/sap/fe/core/qunit/TemplatingExpressions.qunit.js +2 -1
- package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/generalTests.json +0 -102
- package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.100.json +326 -0
- package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.99.json +0 -22
- package/packages/sap.fe.macros/src/sap/fe/macros/.library +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/.theming +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata-dbg.js +2 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI-dbg.js +22 -43
- package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.ts +3 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate-dbg.js +14 -24
- package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper-dbg.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicator.fragment.xml +3 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/Field.fragment.xml +16 -18
- package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI-dbg.js +162 -100
- package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.ts +93 -16
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.fragment.xml +2 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata-dbg.js +16 -8
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI-dbg.js +58 -83
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.ts +16 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate-dbg.js +112 -192
- package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata-dbg.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI-dbg.js +4 -20
- package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.fragment.xml +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI-dbg.js +10 -31
- package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI-dbg.js +147 -162
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.ts +32 -8
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata-dbg.js +5 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil-dbg.js +56 -74
- package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/Table.fragment.xml +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata-dbg.js +90 -39
- package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI-dbg.js +284 -251
- package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.ts +126 -14
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper-dbg.js +38 -101
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime-dbg.js +68 -6
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating-dbg.js +72 -12
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.ts +67 -10
- package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate-dbg.js +5 -12
- package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/DraftEditState.fragment.xml +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper-dbg.js +1 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils-dbg.js +62 -39
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue-dbg.js +104 -50
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.js +2 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.ts +68 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range-dbg.js +83 -35
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.js +2 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.ts +66 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value-dbg.js +327 -216
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.js +2 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.ts +303 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollaborationAvatar.fragment.xml +15 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata-dbg.js +14 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.ts +18 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.fragment.xml +12 -29
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata-dbg.js +9 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.fragment.xml +1 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata-dbg.js +529 -533
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.js +2 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.ts +568 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/FilterField.fragment.xml +0 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator-dbg.js +3 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.ts +3 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldContent.fragment.xml +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldStructure.fragment.xml +13 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/DataPoint.fragment.xml +4 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ExpandableText.fragment.xml +1 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +1 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Link.fragment.xml +38 -4
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickViewForm.fragment.xml +2 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +3 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/MdcFieldWithValueHelp.fragment.xml +1 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +55 -11
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/SemanticKeyWithDraftIndicator.fragment.xml +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Text.fragment.xml +3 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DatePicker.fragment.xml +9 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DateTimePicker.fragment.xml +9 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/Input.fragment.xml +12 -3
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithUnit.fragment.xml +26 -5
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithValueHelp.fragment.xml +10 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/RatingIndicator.fragment.xml +9 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/TimePicker.fragment.xml +9 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/fragments/ObjectIdentifierContent.fragment.xml +4 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating-dbg.js +31 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +20 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime-dbg.js +2 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.ts +7 -9
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper-dbg.js +90 -118
- package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/library-dbg.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js +13 -12
- package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js.map +2 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js +185 -214
- package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js.map +4 -4
- package/packages/sap.fe.macros/src/sap/fe/macros/library.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/manifest.json +9 -9
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle.properties +4 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ar.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_bg.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ca.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cs.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cy.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_da.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_de.properties +4 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_el.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_GB.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_sappsd.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es_MX.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_et.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fi.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr_CA.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hi.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hr.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hu.properties +4 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_id.properties +4 -2
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_it.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_iw.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ja.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_kk.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ko.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lt.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lv.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ms.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_nl.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_no.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pl.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt_PT.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ro.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ru.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sh.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sk.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sl.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sv.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_th.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_tr.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_uk.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_vi.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_CN.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_TW.properties +3 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/resources.json +273 -199
- package/packages/sap.fe.macros/src/sap/fe/macros/table/Actions.fragment.xml +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/table/Column.fragment.xml +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/table/ColumnContent.fragment.xml +2 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/CreationRow.fragment.xml +13 -20
- package/packages/sap.fe.macros/src/sap/fe/macros/table/CustomColumn.fragment.xml +1 -0
- package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper-dbg.js +5 -110
- package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate-dbg.js +98 -78
- package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata-dbg.js +1 -1
- package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata.js +1 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/api.json +211 -10
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/apiref/api.json +1 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.jsmeta.json +1 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.xmlmeta.json +1 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.js +1 -45
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.ts +0 -60
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.js +78 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.ts +71 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.js +35 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.ts +44 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarDelegate.spec.js +0 -76
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.js +27 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.ts +28 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.js +10 -12
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.ts +10 -10
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterUtils.spec.js +129 -15
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.js +13 -39
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.ts +2 -2
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.js +119 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.ts +113 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.js +166 -2
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.ts +190 -3
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.js +457 -389
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.ts +504 -425
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.js +104 -2
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.ts +158 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/ChartDelegate.spec.ts.snap +0 -6
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/DatapointMacro.spec.ts.snap +5 -5
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroDataFieldTypes.spec.ts.snap +114 -25
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithSemanticKey.spec.ts.snap +40 -40
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithValueHelp.spec.ts.snap +4 -8
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterBarMacro.spec.ts.snap +19 -19
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterField.spec.ts.snap +3 -5
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/QuickViewForm.spec.ts.snap +12 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/SimpleFieldMacro.spec.ts.snap +89 -90
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/Table.spec.ts.snap +1314 -58
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/TableMacro.spec.ts.snap +459 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldMacroDataFieldTypes.cds +18 -2
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/QuickViewForm.cds +6 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/Table.cds +107 -106
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/TableAPI.cds +197 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.js +33 -4
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.ts +30 -4
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.js +72 -29
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.ts +86 -18
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/__snapshots__/columnWidth.spec.ts.snap +51 -27
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.js +55 -9
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.ts +46 -6
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/data/columnWidth.cds +28 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.js +170 -43
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.ts +131 -15
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/__snapshots__/TableDelegate.spec.ts.snap +90 -53
- package/packages/sap.fe.macros/test/sap/fe/macros/jest/tsx/TestTSX.spec.tsx +2 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/index.json +0 -5
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldHelper.qunit.js +1 -99
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormElementTemplating.qunit.js +1 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MacroMetadata.qunit.js +4 -4
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableHelper.qunit.js +4 -4
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueHelpTemplating.qunit.js +15 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueListHelper.qunit.js +265 -106
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/metadata/simpleMetadata.js +38 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.100.json +372 -0
- package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.99.json +0 -11
- package/packages/sap.fe.navigation/src/sap/fe/navigation/.library +1 -1
- package/packages/sap.fe.navigation/src/sap/fe/navigation/.theming +1 -1
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-dbg.js +1 -1
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js +2 -2
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js.map +2 -2
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js +2 -2
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js.map +2 -2
- package/packages/sap.fe.navigation/src/sap/fe/navigation/library.js +1 -1
- package/packages/sap.fe.navigation/src/sap/fe/navigation/manifest.json +3 -3
- package/packages/sap.fe.navigation/src/sap/fe/navigation/resources.json +8 -8
- package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/api.json +1 -1
- package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/apiref/api.json +1 -1
- package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.xmlmeta.json +1 -1
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.library +1 -1
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.theming +1 -1
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-dbg.js +1 -1
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js.map +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js.map +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library.js +1 -1
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/manifest.json +3 -3
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/resources.json +27 -27
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/css_variables.source.less +316 -15
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/resources.json +1 -1
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.less +315 -14
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.source.less +315 -14
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/resources.json +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.less +316 -15
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.source.less +316 -15
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/resources.json +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.less +316 -15
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.source.less +316 -15
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/resources.json +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.less +315 -14
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.source.less +315 -14
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/resources.json +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.less +317 -16
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.source.less +317 -16
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/resources.json +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.less +317 -16
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.source.less +317 -16
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/resources.json +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.less +316 -15
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.source.less +316 -15
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/resources.json +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.less +316 -15
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.source.less +316 -15
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/resources.json +2 -2
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.less +400 -99
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.source.less +400 -99
- package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/resources.json +2 -2
- package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/api.json +1 -1
- package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/apiref/api.json +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/.library +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/.theming +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/manifest.json +2 -2
- package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/resources.json +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent-dbg.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component-dbg.js +7 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReport.view.xml +22 -21
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +13 -18
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/manifest.json +2 -2
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/resources.json +7 -7
- package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.xml +3 -3
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper-dbg.js +50 -9
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component-dbg.js +1 -12
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +50 -17
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +7 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox-dbg.designtime.js +3 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/manifest.json +2 -2
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/resources.json +19 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +36 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -0
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl-dbg.controller.js +3 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer-dbg.controller.js +3 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js.map +2 -2
- package/packages/sap.fe.templates/src/sap/fe/templates/library-dbg.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js +4 -3
- package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js.map +2 -2
- package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js +22 -21
- package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js.map +4 -4
- package/packages/sap.fe.templates/src/sap/fe/templates/library.js +1 -1
- package/packages/sap.fe.templates/src/sap/fe/templates/manifest.json +14 -14
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ar.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_bg.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ca.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cs.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cy.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_da.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_de.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_el.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_GB.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es_MX.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_et.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fi.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr_CA.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hi.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hr.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hu.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_id.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_it.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_iw.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ja.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_kk.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ko.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lt.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lv.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ms.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_nl.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_no.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pl.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt_PT.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ro.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ru.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sh.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sk.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sl.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sv.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_th.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_tr.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_uk.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_vi.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_TW.properties +0 -15
- package/packages/sap.fe.templates/src/sap/fe/templates/resources.json +115 -89
- package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/manifest.json +1 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/api.json +353 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/apiref/api.json +1 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.jsmeta.json +1 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.xmlmeta.json +1 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.js +1 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.ts +3 -3
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.js +1 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.ts +4 -4
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.js +1 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.ts +2 -2
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.js +2 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.ts +2 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/__snapshots__/HeaderFacet.spec.ts.snap +7 -7
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.js +30 -61
- package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.ts +1 -1
- package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.100.json +192 -0
- package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.99.json +0 -11
- package/packages/sap.fe.test/src/sap/fe/test/.library +1 -1
- package/packages/sap.fe.test/src/sap/fe/test/.theming +1 -1
- package/packages/sap.fe.test/src/sap/fe/test/FeMocks-dbg.js +1 -1
- package/packages/sap.fe.test/src/sap/fe/test/FeMocks.ts +8 -8
- package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper-dbg.js +6 -4
- package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.js +1 -1
- package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.ts +10 -6
- package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper-dbg.js +126 -203
- package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.js +1 -1
- package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.ts +17 -2
- package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI-dbg.js +9 -1
- package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI.js +1 -1
- package/packages/sap.fe.test/src/sap/fe/test/library-dbg.js +1 -1
- package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js +2 -2
- package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js.map +2 -2
- package/packages/sap.fe.test/src/sap/fe/test/library-preload.js +9 -18
- package/packages/sap.fe.test/src/sap/fe/test/library-preload.js.map +3 -3
- package/packages/sap.fe.test/src/sap/fe/test/library.js +1 -1
- package/packages/sap.fe.test/src/sap/fe/test/manifest.json +3 -3
- package/packages/sap.fe.test/src/sap/fe/test/resources.json +18 -18
- package/packages/sap.fe.test/test/sap/fe/test/designtime/api.json +1 -1
- package/packages/sap.fe.test/test/sap/fe/test/designtime/apiref/api.json +1 -1
- package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.xmlmeta.json +1 -1
- package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormTemplatingTs.qunit.js +0 -271
|
@@ -1,119 +1,2305 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
})
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define(["path", "sap/fe/core/CommonUtils", "sap/fe/navigation/SelectionVariant", "sap/fe/test/JestTemplatingHelper", "sap/m/MessageBox", "sap/fe/core/templating/FilterHelper", "sap/m/MessageView", "sap/fe/core/actions/messageHandling", "sap/m/Dialog"], function (path, CommonUtils, SelectionVariant, JestTemplatingHelper, MessageBox, FilterHelper, MessageView, MessageHandling, Dialog) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var getMetaModel = JestTemplatingHelper.getMetaModel;
|
|
9
|
+
var compileCDS = JestTemplatingHelper.compileCDS;
|
|
10
|
+
|
|
11
|
+
var metaModel;
|
|
12
|
+
beforeAll(function () {
|
|
13
|
+
try {
|
|
14
|
+
var sMetadataUrl = compileCDS(path.join(__dirname, "./data/computedDefaultValueService.cds"));
|
|
15
|
+
return Promise.resolve(getMetaModel(sMetadataUrl)).then(function (_getMetaModel) {
|
|
16
|
+
metaModel = _getMetaModel;
|
|
17
|
+
});
|
|
18
|
+
} catch (e) {
|
|
19
|
+
return Promise.reject(e);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
describe("CommonUtils", function () {
|
|
23
|
+
describe("getAdditionalParamsForCreate", function () {
|
|
24
|
+
it("getAdditionalParamsForCreate", function () {
|
|
25
|
+
try {
|
|
26
|
+
var oUriParams = {
|
|
27
|
+
"SalesOrderType": ["OR"],
|
|
28
|
+
"SalesOrganization": ["1"]
|
|
29
|
+
};
|
|
30
|
+
var oInbounds = {
|
|
31
|
+
"SalesOrderType": {
|
|
32
|
+
"useForCreate": true
|
|
33
|
+
},
|
|
34
|
+
"SalesOrganization": {
|
|
35
|
+
"useForCreate": true
|
|
36
|
+
},
|
|
37
|
+
"DistributionChannel": {
|
|
38
|
+
"useForCreate": true
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
var oExpectedOutput = {
|
|
42
|
+
SalesOrderType: "OR",
|
|
43
|
+
SalesOrganization: "1"
|
|
44
|
+
};
|
|
45
|
+
var actualOutput = CommonUtils.getAdditionalParamsForCreate(oUriParams, oInbounds);
|
|
46
|
+
expect(actualOutput).toEqual(oExpectedOutput);
|
|
47
|
+
return Promise.resolve();
|
|
48
|
+
} catch (e) {
|
|
49
|
+
return Promise.reject(e);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
it("getAdditionalParamsForCreate - no start up parameters", function () {
|
|
53
|
+
try {
|
|
54
|
+
var oUriParams = {};
|
|
55
|
+
var oInbounds = {
|
|
56
|
+
"SalesOrderType": {
|
|
57
|
+
"useForCreate": true
|
|
58
|
+
},
|
|
59
|
+
"SalesOrganization": {
|
|
60
|
+
"useForCreate": true
|
|
61
|
+
},
|
|
62
|
+
"DistributionChannel": {
|
|
63
|
+
"useForCreate": true
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
var oExpectedOutput = undefined;
|
|
67
|
+
var actualOutput = CommonUtils.getAdditionalParamsForCreate(oUriParams, oInbounds);
|
|
68
|
+
expect(actualOutput).toEqual(oExpectedOutput);
|
|
69
|
+
return Promise.resolve();
|
|
70
|
+
} catch (e) {
|
|
71
|
+
return Promise.reject(e);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
it("getAdditionalParamsForCreate - no Inbound Parameters", function () {
|
|
75
|
+
try {
|
|
76
|
+
var oUriParams = {
|
|
77
|
+
"SalesOrderType": ["OR"],
|
|
78
|
+
"SalesOrganization": ["1"]
|
|
79
|
+
};
|
|
80
|
+
var oInbounds = {};
|
|
81
|
+
var oExpectedOutput = undefined;
|
|
82
|
+
var actualOutput = CommonUtils.getAdditionalParamsForCreate(oUriParams, oInbounds);
|
|
83
|
+
expect(actualOutput).toEqual(oExpectedOutput);
|
|
84
|
+
return Promise.resolve();
|
|
85
|
+
} catch (e) {
|
|
86
|
+
return Promise.reject(e);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
it("getAdditionalParamsForCreate - no Inbound and start up Parameters", function () {
|
|
90
|
+
try {
|
|
91
|
+
var oUriParams = {};
|
|
92
|
+
var oInbounds = {};
|
|
93
|
+
var oExpectedOutput = undefined;
|
|
94
|
+
var actualOutput = CommonUtils.getAdditionalParamsForCreate(oUriParams, oInbounds);
|
|
95
|
+
expect(actualOutput).toEqual(oExpectedOutput);
|
|
96
|
+
return Promise.resolve();
|
|
97
|
+
} catch (e) {
|
|
98
|
+
return Promise.reject(e);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe("getNonComputedVisibleFields", function () {
|
|
103
|
+
it("getNonComputedVisibleFields - GUID ComputedDefaultValue key field with text annotation", function () {
|
|
104
|
+
try {
|
|
105
|
+
var aExpectedOutput = ["ID", "ImmutableNonKeyWithText", "ImmutableNonKeyWithoutText"];
|
|
106
|
+
var actualOutput = CommonUtils.getNonComputedVisibleFields(metaModel, "/EntityWithKeyFieldHavingText");
|
|
107
|
+
expect(actualOutput).toEqual(aExpectedOutput);
|
|
108
|
+
return Promise.resolve();
|
|
109
|
+
} catch (e) {
|
|
110
|
+
return Promise.reject(e);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
it("getNonComputedVisibleFields - GUID ComputedDefaultValue key field without text annotation", function () {
|
|
114
|
+
try {
|
|
115
|
+
var aExpectedOutput = [];
|
|
116
|
+
var actualOutput = CommonUtils.getNonComputedVisibleFields(metaModel, "/EntityWithKeyFieldNotHavingText");
|
|
117
|
+
expect(actualOutput).toEqual(aExpectedOutput);
|
|
118
|
+
return Promise.resolve();
|
|
119
|
+
} catch (e) {
|
|
120
|
+
return Promise.reject(e);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
it("getNonComputedVisibleFields - Hidden GUID ComputedDefaultValue key field", function () {
|
|
124
|
+
try {
|
|
125
|
+
var aExpectedOutput = [];
|
|
126
|
+
var actualOutput = CommonUtils.getNonComputedVisibleFields(metaModel, "/EntityWithHiddenKeyField");
|
|
127
|
+
expect(actualOutput).toEqual(aExpectedOutput);
|
|
128
|
+
return Promise.resolve();
|
|
129
|
+
} catch (e) {
|
|
130
|
+
return Promise.reject(e);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
it("getNonComputedVisibleFields - ReadOnly GUID ComputedDefaultValue key field", function () {
|
|
134
|
+
try {
|
|
135
|
+
var aExpectedOutput = ["ID"];
|
|
136
|
+
var actualOutput = CommonUtils.getNonComputedVisibleFields(metaModel, "/EntityWithReadOnlyKeyFieldHavingText");
|
|
137
|
+
expect(actualOutput).toEqual(aExpectedOutput);
|
|
138
|
+
return Promise.resolve();
|
|
139
|
+
} catch (e) {
|
|
140
|
+
return Promise.reject(e);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
it("getNonComputedVisibleFields - ReadOnly GUID ComputedDefaultValue key field", function () {
|
|
144
|
+
try {
|
|
145
|
+
var aExpectedOutput = [];
|
|
146
|
+
var actualOutput = CommonUtils.getNonComputedVisibleFields(metaModel, "/EntityWithReadOnlyKeyFieldNotHavingText");
|
|
147
|
+
expect(actualOutput).toEqual(aExpectedOutput);
|
|
148
|
+
return Promise.resolve();
|
|
149
|
+
} catch (e) {
|
|
150
|
+
return Promise.reject(e);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
it("getNonComputedVisibleFields - GUID key field with both Computed and ComputeDefaultValue annotation without view", function () {
|
|
154
|
+
try {
|
|
155
|
+
var aExpectedOutput = [];
|
|
156
|
+
var actualOutput = CommonUtils.getNonComputedVisibleFields(metaModel, "/EntityWithComputedAndComputedDefaultValueKeyField");
|
|
157
|
+
expect(actualOutput).toEqual(aExpectedOutput);
|
|
158
|
+
return Promise.resolve();
|
|
159
|
+
} catch (e) {
|
|
160
|
+
return Promise.reject(e);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
it("getNonComputedVisibleFields - GUID key field with both Computed and ComputeDefaultValue annotation", function () {
|
|
164
|
+
try {
|
|
165
|
+
var aExpectedOutput = [];
|
|
166
|
+
var oView = {
|
|
167
|
+
isA: jest.fn().mockReturnValue(true),
|
|
168
|
+
getDiagnostics: jest.fn().mockReturnValue({
|
|
169
|
+
addIssue: jest.fn().mockReturnValue("")
|
|
170
|
+
})
|
|
171
|
+
};
|
|
172
|
+
var actualOutput = CommonUtils.getNonComputedVisibleFields(metaModel, "/EntityWithComputedAndComputedDefaultValueKeyField", oView);
|
|
173
|
+
expect(oView.getDiagnostics().addIssue).toHaveBeenCalled();
|
|
174
|
+
expect(actualOutput).toEqual(aExpectedOutput);
|
|
175
|
+
return Promise.resolve();
|
|
176
|
+
} catch (e) {
|
|
177
|
+
return Promise.reject(e);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
describe("getOperatorsForProperty", function () {
|
|
182
|
+
it("getOperatorsForProperty - Single Value Allowed Expressions", function () {
|
|
183
|
+
try {
|
|
184
|
+
[{
|
|
185
|
+
dataField: "SalesOrderDate",
|
|
186
|
+
oContext: {
|
|
187
|
+
getObject: function (path) {
|
|
188
|
+
// Edm type
|
|
189
|
+
if (path === "/dummy/SalesOrderDate/$Type") {
|
|
190
|
+
return "Edm.Date";
|
|
191
|
+
} else {
|
|
192
|
+
// Filter Annotations
|
|
193
|
+
return {
|
|
194
|
+
FilterExpressionRestrictions: [{
|
|
195
|
+
Property: {
|
|
196
|
+
$PropertyPath: "SalesOrderDate"
|
|
197
|
+
},
|
|
198
|
+
AllowedExpressions: "SingleValue"
|
|
199
|
+
}]
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
expectedValue: "DATE,TODAY,YESTERDAY,TOMORROW,FIRSTDAYWEEK,LASTDAYWEEK,FIRSTDAYMONTH,LASTDAYMONTH,FIRSTDAYQUARTER,LASTDAYQUARTER,FIRSTDAYYEAR,LASTDAYYEAR",
|
|
205
|
+
sMessage: "Edm.Date and Single Value Or Search Expressions"
|
|
206
|
+
}, {
|
|
207
|
+
dataField: "SalesOrderDate",
|
|
208
|
+
oContext: {
|
|
209
|
+
getObject: function (path) {
|
|
210
|
+
// Edm type
|
|
211
|
+
if (path === "/dummy/SalesOrderDate/$Type") {
|
|
212
|
+
return "Edm.String";
|
|
213
|
+
} else {
|
|
214
|
+
// Filter Annotations
|
|
215
|
+
return {
|
|
216
|
+
FilterExpressionRestrictions: [{
|
|
217
|
+
Property: {
|
|
218
|
+
$PropertyPath: "SalesOrderDate"
|
|
219
|
+
},
|
|
220
|
+
AllowedExpressions: "SingleValue"
|
|
221
|
+
}]
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
expectedValue: "EQ",
|
|
227
|
+
sMessage: "Edm.String and Single Value Or Search Expressions"
|
|
228
|
+
}].forEach(function (oProperty) {
|
|
229
|
+
var actualValue = CommonUtils.getOperatorsForProperty(oProperty.dataField, "/dummy", oProperty.oContext, oProperty.oContext.getObject("/dummy/" + oProperty.dataField + "/$Type"), true);
|
|
230
|
+
expect(actualValue).toEqual(oProperty.expectedValue);
|
|
231
|
+
});
|
|
232
|
+
return Promise.resolve();
|
|
233
|
+
} catch (e) {
|
|
234
|
+
return Promise.reject(e);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
describe("CommonUtils - normalizeSearchTerm() input ", function () {
|
|
239
|
+
var aTests = [{
|
|
240
|
+
title: "is an empty search string",
|
|
241
|
+
input: "",
|
|
242
|
+
expected: undefined
|
|
243
|
+
}, {
|
|
244
|
+
title: "is an undefined search term",
|
|
245
|
+
input: undefined,
|
|
246
|
+
expected: undefined
|
|
247
|
+
}, {
|
|
248
|
+
title: "is a double quote",
|
|
249
|
+
input: '"',
|
|
250
|
+
expected: undefined
|
|
251
|
+
}, {
|
|
252
|
+
title: "is a single quote",
|
|
253
|
+
input: "'",
|
|
254
|
+
expected: '"\'"'
|
|
255
|
+
}, {
|
|
256
|
+
title: "contains two words",
|
|
257
|
+
input: "Wuthering Heights",
|
|
258
|
+
expected: '"Wuthering" "Heights"'
|
|
259
|
+
}, {
|
|
260
|
+
title: "contains a tab in between",
|
|
261
|
+
input: "Word0 Word1\tWord2 Word3",
|
|
262
|
+
expected: '"Word0" "Word1" "Word2" "Word3"'
|
|
263
|
+
}, {
|
|
264
|
+
title: "contains a return in between",
|
|
265
|
+
input: "Word0 Word1\nWord2\r\nWord3",
|
|
266
|
+
expected: '"Word0" "Word1" "Word2" "Word3"'
|
|
267
|
+
}, {
|
|
268
|
+
title: "contains multiple words with multiple spaces at the beginning",
|
|
269
|
+
input: " Wuthering, Heights Part-II",
|
|
270
|
+
expected: '"Wuthering," "Heights" "Part-II"'
|
|
271
|
+
}, {
|
|
272
|
+
title: "contains multiple words with multiple spaces in between",
|
|
273
|
+
input: "Wuthering, Heights Part- II",
|
|
274
|
+
expected: '"Wuthering," "Heights" "Part-" "II"'
|
|
275
|
+
}, {
|
|
276
|
+
title: "contains multiple words with multiple spaces at the end",
|
|
277
|
+
input: "Wuthering, Heights Part-II ",
|
|
278
|
+
expected: '"Wuthering," "Heights" "Part-II"'
|
|
279
|
+
}, {
|
|
280
|
+
title: "contains double quotes at the beginning",
|
|
281
|
+
input: '"Wuthering my Heights',
|
|
282
|
+
expected: '"Wuthering" "my" "Heights"'
|
|
283
|
+
}, {
|
|
284
|
+
title: "contains double quotes in between",
|
|
285
|
+
input: 'Wuth"ering',
|
|
286
|
+
expected: '"Wuth" "ering"'
|
|
287
|
+
}, {
|
|
288
|
+
title: "contains double quotes at the end",
|
|
289
|
+
input: 'Wuthering no heights"',
|
|
290
|
+
expected: '"Wuthering" "no" "heights"'
|
|
291
|
+
}, {
|
|
292
|
+
title: "contains multiple double quotes at the beginning",
|
|
293
|
+
input: '""Wuth"ering Heig"hts',
|
|
294
|
+
expected: '"Wuth" "ering" "Heig" "hts"'
|
|
295
|
+
}, {
|
|
296
|
+
title: "contains multiple double quotes in between",
|
|
297
|
+
input: 'Wuth"eri""ng Heig"hts',
|
|
298
|
+
expected: '"Wuth" "eri" "ng" "Heig" "hts"'
|
|
299
|
+
}, {
|
|
300
|
+
title: "contains multiple double quotes at the end",
|
|
301
|
+
input: 'Wuth"ering He"ights""',
|
|
302
|
+
expected: '"Wuth" "ering" "He" "ights"'
|
|
303
|
+
}, {
|
|
304
|
+
title: "contains a special character in string",
|
|
305
|
+
input: "Wuth)ering",
|
|
306
|
+
expected: '"Wuth)ering"'
|
|
307
|
+
}, {
|
|
308
|
+
title: "contains multiple special characters in string",
|
|
309
|
+
input: "W!u$t^h)er&in*g(",
|
|
310
|
+
expected: '"W!u$t^h)er&in*g("'
|
|
311
|
+
}, {
|
|
312
|
+
title: "contains single quotes in string",
|
|
313
|
+
input: "It's Apple's new iPhone",
|
|
314
|
+
expected: '"It\'s" "Apple\'s" "new" "iPhone"'
|
|
315
|
+
}];
|
|
316
|
+
aTests.forEach(function (test) {
|
|
317
|
+
it(test.title, {
|
|
318
|
+
"references": [{
|
|
319
|
+
"type": "JIRA",
|
|
320
|
+
"ID": "FIORITECHP1-21846"
|
|
321
|
+
}]
|
|
322
|
+
}, function () {
|
|
323
|
+
expect(CommonUtils.normalizeSearchTerm(test.input)).toBe(test.expected);
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
describe("Unit Test for isStickyEditMode", function () {
|
|
328
|
+
test("Unit test to check isStickyEditMode", function () {
|
|
329
|
+
[{
|
|
330
|
+
"oControl": {
|
|
331
|
+
getModel: function () {
|
|
332
|
+
return {
|
|
333
|
+
getMetaModel: function () {
|
|
334
|
+
return {
|
|
335
|
+
getObject: function (sParam) {
|
|
336
|
+
return sParam === "/" ? {
|
|
337
|
+
"rootEntitySet": {
|
|
338
|
+
$kind: "EntitySet"
|
|
339
|
+
}
|
|
340
|
+
} : {
|
|
341
|
+
"@com.sap.vocabularies.Session.v1.StickySessionSupported": true
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
},
|
|
346
|
+
getProperty: function () {
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
"expectedValue": true,
|
|
353
|
+
"sMessage": "Matched"
|
|
354
|
+
}, {
|
|
355
|
+
"oControl": {
|
|
356
|
+
getModel: function () {
|
|
357
|
+
return {
|
|
358
|
+
getMetaModel: function () {
|
|
359
|
+
return {
|
|
360
|
+
getObject: function (sParam) {
|
|
361
|
+
return sParam === "/" ? {
|
|
362
|
+
"rootEntitySet": {
|
|
363
|
+
$kind: "EntitySet"
|
|
364
|
+
}
|
|
365
|
+
} : null;
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
},
|
|
369
|
+
getProperty: function () {
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
"expectedValue": false,
|
|
376
|
+
"sMessage": "Matched"
|
|
377
|
+
}, {
|
|
378
|
+
"oControl": {
|
|
379
|
+
getModel: function () {
|
|
380
|
+
return {
|
|
381
|
+
getMetaModel: function () {
|
|
382
|
+
return {
|
|
383
|
+
getObject: function (sParam) {
|
|
384
|
+
return sParam === "/" ? {
|
|
385
|
+
"rootEntitySet": {
|
|
386
|
+
$kind: "EntitySet"
|
|
387
|
+
}
|
|
388
|
+
} : {
|
|
389
|
+
"@com.sap.vocabularies.Session.v1.StickySessionSupported": true
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
},
|
|
394
|
+
getProperty: function () {
|
|
395
|
+
return false;
|
|
396
|
+
}
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
"expectedValue": false,
|
|
401
|
+
"sMessage": "Matched"
|
|
402
|
+
}].forEach(function (oProperty) {
|
|
403
|
+
var actualValue = CommonUtils.isStickyEditMode(oProperty.oControl);
|
|
404
|
+
expect(actualValue).toEqual(oProperty.expectedValue); //, "Unit test to check isStickyEditMode() " + oProperty.sMessage + " : ok");
|
|
405
|
+
});
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
describe("Unit Test for isFieldControlPathInapplicable", function () {
|
|
409
|
+
test("Unit test to check isFieldControlPathInapplicable", function () {
|
|
410
|
+
[{
|
|
411
|
+
"attribute": {
|
|
412
|
+
"prop1": "A",
|
|
413
|
+
"prop2": "B",
|
|
414
|
+
"fieldControl": 0
|
|
415
|
+
},
|
|
416
|
+
"fieldControlPath": "fieldControl",
|
|
417
|
+
"expectedValue": true,
|
|
418
|
+
"message": "for inapplicable"
|
|
419
|
+
}, {
|
|
420
|
+
"attribute": {
|
|
421
|
+
"prop1": "A",
|
|
422
|
+
"prop2": "B",
|
|
423
|
+
"fieldControl": 7
|
|
424
|
+
},
|
|
425
|
+
"fieldControlPath": "fieldControl",
|
|
426
|
+
"expectedValue": false,
|
|
427
|
+
"message": "for different value"
|
|
428
|
+
}, {
|
|
429
|
+
"attribute": {
|
|
430
|
+
"prop1": "A",
|
|
431
|
+
"prop2": "B"
|
|
432
|
+
},
|
|
433
|
+
"fieldControlPath": "fieldControl",
|
|
434
|
+
"expectedValue": false,
|
|
435
|
+
"message": "when property doesn't exists"
|
|
436
|
+
}].forEach(function (oProperty) {
|
|
437
|
+
var actualValue = CommonUtils.isFieldControlPathInapplicable(oProperty.fieldControlPath, oProperty.attribute);
|
|
438
|
+
expect(actualValue).toEqual(oProperty.expectedValue); // ,"Unit test to check isFieldControlPathInapplicable() " + oProperty.message + " : ok"
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
describe("Unit Test for Remove Sensitive Data", function () {
|
|
443
|
+
test("Unit Test to check removeSensitiveData", function () {
|
|
444
|
+
var aAttributes = [{
|
|
445
|
+
"contextData": {
|
|
446
|
+
"%40odata.context": "yolo",
|
|
447
|
+
"SensitiveProp": "A",
|
|
448
|
+
"PublicationUUID": "00505691-8175-1ed8-9dbe-64c14268326b",
|
|
449
|
+
"FieldControlStatic": "D",
|
|
450
|
+
"fieldControl": 0
|
|
451
|
+
},
|
|
452
|
+
"entitySet": "SalesOrderManage"
|
|
453
|
+
}, {
|
|
454
|
+
"contextData": {
|
|
455
|
+
"%40odata.metadataEtag": "yolo",
|
|
456
|
+
"ExcludeNavProp": "B",
|
|
457
|
+
"PublicationUUID": "00505691-8175-1ed8-9dbe-64c14268326888",
|
|
458
|
+
"fieldControl": 7
|
|
459
|
+
},
|
|
460
|
+
"entitySet": "SalesOrderManage"
|
|
461
|
+
}, {
|
|
462
|
+
"contextData": {
|
|
463
|
+
"HasActiveEntity": false
|
|
464
|
+
},
|
|
465
|
+
"entitySet": "SalesOrderManage"
|
|
466
|
+
}],
|
|
467
|
+
oMetaModel = {
|
|
468
|
+
getObject: function (sPath) {
|
|
469
|
+
if (sPath.indexOf("PublicationUUID@") > -1) {
|
|
470
|
+
return {
|
|
471
|
+
"@com.sap.vocabularies.Common.v1.FieldControl": {
|
|
472
|
+
"$Path": "fieldControl"
|
|
473
|
+
}
|
|
474
|
+
};
|
|
475
|
+
} else if (sPath.indexOf("FieldControlStatic@") > -1) {
|
|
476
|
+
return {
|
|
477
|
+
"@com.sap.vocabularies.Common.v1.FieldControl": {
|
|
478
|
+
"$EnumMember": "@com.sap.vocabularies.Common.v1.FieldControl/Inapplicable"
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
} else if (sPath.indexOf("SensitiveProp@") > -1) {
|
|
482
|
+
return {
|
|
483
|
+
"@com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive": {
|
|
484
|
+
"$Path": "fieldControl"
|
|
485
|
+
}
|
|
486
|
+
};
|
|
487
|
+
} else if (sPath.indexOf("ExcludeNavProp@") > -1) {
|
|
488
|
+
return {
|
|
489
|
+
"@com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext": {
|
|
490
|
+
"$Path": "fieldControl"
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
},
|
|
496
|
+
ExpectedResult = [{
|
|
497
|
+
"fieldControl": 0
|
|
498
|
+
}, {
|
|
499
|
+
"PublicationUUID": "00505691-8175-1ed8-9dbe-64c14268326888",
|
|
500
|
+
"fieldControl": 7
|
|
501
|
+
}, {
|
|
502
|
+
"HasActiveEntity": false
|
|
503
|
+
}];
|
|
504
|
+
var Result = CommonUtils.removeSensitiveData(aAttributes, oMetaModel);
|
|
505
|
+
expect(JSON.stringify(ExpectedResult)).toEqual(JSON.stringify(Result));
|
|
506
|
+
});
|
|
507
|
+
});
|
|
508
|
+
describe("Unit Test for isPropertyFilterable", function () {
|
|
509
|
+
test("Unit test to check isPropertyFilterable with hidden", function () {
|
|
510
|
+
var fnCreateModel = function (oModel) {
|
|
511
|
+
return Object.assign({
|
|
512
|
+
createBindingContext: function () {
|
|
513
|
+
return {
|
|
514
|
+
getProperty: oModel.getObject
|
|
515
|
+
};
|
|
516
|
+
},
|
|
517
|
+
getProperty: function (sPath) {
|
|
518
|
+
return sPath === "/parameterEntity/@com.sap.vocabularies.Common.v1.ResultContext";
|
|
519
|
+
},
|
|
520
|
+
getObject: function (sPath) {
|
|
521
|
+
return sPath === "/parameterEntity/@com.sap.vocabularies.Common.v1.ResultContext";
|
|
522
|
+
}
|
|
523
|
+
}, oModel);
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
[{
|
|
527
|
+
model: {
|
|
528
|
+
getObject: function (sPath) {
|
|
529
|
+
if (sPath === "@com.sap.vocabularies.UI.v1.Hidden") {
|
|
530
|
+
return true;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
return {
|
|
534
|
+
"prop1": {}
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
},
|
|
538
|
+
entitySetPath: "/entitySet",
|
|
539
|
+
property: "prop1",
|
|
540
|
+
skipHiddenFilter: false,
|
|
541
|
+
expectedValue: false,
|
|
542
|
+
message: "full path and hidden"
|
|
543
|
+
}, {
|
|
544
|
+
model: {
|
|
545
|
+
getObject: function (sPath) {
|
|
546
|
+
if (sPath === "@com.sap.vocabularies.UI.v1.HiddenFilter") {
|
|
547
|
+
return true;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
return {
|
|
551
|
+
"prop1": {}
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
},
|
|
555
|
+
entitySetPath: "/entitySet",
|
|
556
|
+
property: "prop1",
|
|
557
|
+
skipHiddenFilter: false,
|
|
558
|
+
expectedValue: false,
|
|
559
|
+
message: "full path and hidden filter"
|
|
560
|
+
}, {
|
|
561
|
+
model: {
|
|
562
|
+
getObject: function (sPath) {
|
|
563
|
+
if (sPath === "@com.sap.vocabularies.UI.v1.Hidden") {
|
|
564
|
+
return true;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
return {
|
|
568
|
+
"prop1": {}
|
|
569
|
+
};
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
entitySetPath: "/entitySet",
|
|
573
|
+
property: "prop1",
|
|
574
|
+
skipHiddenFilter: false,
|
|
575
|
+
expectedValue: false,
|
|
576
|
+
message: "hidden"
|
|
577
|
+
}, {
|
|
578
|
+
model: {
|
|
579
|
+
getObject: function (sPath) {
|
|
580
|
+
if (sPath === "@com.sap.vocabularies.UI.v1.HiddenFilter") {
|
|
581
|
+
return true;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
return {
|
|
585
|
+
"prop1": {}
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
},
|
|
589
|
+
entitySetPath: "/entitySet",
|
|
590
|
+
property: "prop1",
|
|
591
|
+
skipHiddenFilter: false,
|
|
592
|
+
expectedValue: false,
|
|
593
|
+
message: "hidden filter"
|
|
594
|
+
}, {
|
|
595
|
+
model: {
|
|
596
|
+
getObject: function (sPath) {
|
|
597
|
+
if (sPath === "/entitySet@Org.OData.Capabilities.V1.FilterRestrictions") {
|
|
598
|
+
return {
|
|
599
|
+
NonFilterableProperties: [{
|
|
600
|
+
$PropertyPath: "prop1"
|
|
601
|
+
}]
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
return {
|
|
606
|
+
"prop1": {}
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
},
|
|
610
|
+
entitySetPath: "/entitySet",
|
|
611
|
+
property: "prop1",
|
|
612
|
+
skipHiddenFilter: false,
|
|
613
|
+
expectedValue: false,
|
|
614
|
+
message: "non-filterable"
|
|
615
|
+
}, {
|
|
616
|
+
model: {
|
|
617
|
+
getObject: function (sPath) {
|
|
618
|
+
if (sPath === "/entitySet@Org.OData.Capabilities.V1.FilterRestrictions") {
|
|
619
|
+
return {
|
|
620
|
+
NonFilterableProperties: [{
|
|
621
|
+
$PropertyPath: "prop1"
|
|
622
|
+
}]
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
return {
|
|
627
|
+
"prop1": {}
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
},
|
|
631
|
+
entitySetPath: "/entitySet",
|
|
632
|
+
property: "prop1",
|
|
633
|
+
skipHiddenFilter: false,
|
|
634
|
+
expectedValue: false,
|
|
635
|
+
message: "full path and non-filterable"
|
|
636
|
+
}, {
|
|
637
|
+
model: {
|
|
638
|
+
getObject: function (sPath) {
|
|
639
|
+
if (!sPath) {
|
|
640
|
+
return {};
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
switch (sPath) {
|
|
644
|
+
case "/entitySet/prop1@com.sap.vocabularies.UI.v1.HiddenFilter":
|
|
645
|
+
return true;
|
|
646
|
+
|
|
647
|
+
case "$Type":
|
|
648
|
+
return "Edm.String";
|
|
649
|
+
|
|
650
|
+
case "$kind":
|
|
651
|
+
return "Property";
|
|
652
|
+
|
|
653
|
+
case "/entitySet/":
|
|
654
|
+
return {
|
|
655
|
+
"prop1": {}
|
|
656
|
+
};
|
|
657
|
+
|
|
658
|
+
default:
|
|
659
|
+
return undefined;
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
},
|
|
663
|
+
entitySetPath: "/entitySet",
|
|
664
|
+
property: "prop1",
|
|
665
|
+
skipHiddenFilter: true,
|
|
666
|
+
expectedValue: true,
|
|
667
|
+
message: "skip hidden filter"
|
|
668
|
+
}, {
|
|
669
|
+
model: {
|
|
670
|
+
getObject: function (sPath) {
|
|
671
|
+
if (!sPath) {
|
|
672
|
+
return {};
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
switch (sPath) {
|
|
676
|
+
case "$Type":
|
|
677
|
+
return "Edm.Stream";
|
|
678
|
+
|
|
679
|
+
case "$kind":
|
|
680
|
+
return "Property";
|
|
681
|
+
|
|
682
|
+
case "/entitySet/":
|
|
683
|
+
return {
|
|
684
|
+
"prop1": {}
|
|
685
|
+
};
|
|
686
|
+
|
|
687
|
+
default:
|
|
688
|
+
return undefined;
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
},
|
|
692
|
+
entitySetPath: "/entitySet",
|
|
693
|
+
property: "prop1",
|
|
694
|
+
skipHiddenFilter: false,
|
|
695
|
+
expectedValue: false,
|
|
696
|
+
message: "type not filterable"
|
|
697
|
+
}, {
|
|
698
|
+
model: {
|
|
699
|
+
getObject: function (sPath) {
|
|
700
|
+
if (!sPath) {
|
|
701
|
+
return {};
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
switch (sPath) {
|
|
705
|
+
case "$Type":
|
|
706
|
+
return "Edm.String";
|
|
707
|
+
|
|
708
|
+
case "$kind":
|
|
709
|
+
return "Property";
|
|
710
|
+
|
|
711
|
+
case "/entitySet/":
|
|
712
|
+
return {
|
|
713
|
+
"prop1": {}
|
|
714
|
+
};
|
|
715
|
+
|
|
716
|
+
default:
|
|
717
|
+
return undefined;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
},
|
|
721
|
+
entitySetPath: "/entitySet",
|
|
722
|
+
property: "prop1",
|
|
723
|
+
skipHiddenFilter: false,
|
|
724
|
+
expectedValue: true,
|
|
725
|
+
message: "type filterable"
|
|
726
|
+
}, {
|
|
727
|
+
model: {
|
|
728
|
+
getObject: function (sPath) {
|
|
729
|
+
if (!sPath) {
|
|
730
|
+
return {};
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
switch (sPath) {
|
|
734
|
+
case "$Type":
|
|
735
|
+
return "com.sap.vocabularies.UI.v1.DataField";
|
|
736
|
+
|
|
737
|
+
case "Value/$Path/$Type":
|
|
738
|
+
return "Edm.Stream";
|
|
739
|
+
|
|
740
|
+
case "/entitySet/":
|
|
741
|
+
return {
|
|
742
|
+
"prop1": {}
|
|
743
|
+
};
|
|
744
|
+
|
|
745
|
+
default:
|
|
746
|
+
return undefined;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
entitySetPath: "/entitySet",
|
|
751
|
+
property: "prop1",
|
|
752
|
+
skipHiddenFilter: false,
|
|
753
|
+
expectedValue: false,
|
|
754
|
+
message: "datafield type not filterable"
|
|
755
|
+
}, {
|
|
756
|
+
model: {
|
|
757
|
+
getObject: function (sPath) {
|
|
758
|
+
if (!sPath) {
|
|
759
|
+
return {};
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
switch (sPath) {
|
|
763
|
+
case "$Type":
|
|
764
|
+
return "com.sap.vocabularies.UI.v1.DataField";
|
|
765
|
+
|
|
766
|
+
case "Value/$Path/$Type":
|
|
767
|
+
return "Edm.String";
|
|
768
|
+
|
|
769
|
+
case "/entitySet/":
|
|
770
|
+
return {
|
|
771
|
+
"prop1": {}
|
|
772
|
+
};
|
|
773
|
+
|
|
774
|
+
default:
|
|
775
|
+
return undefined;
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
},
|
|
779
|
+
entitySetPath: "/entitySet",
|
|
780
|
+
property: "prop1",
|
|
781
|
+
skipHiddenFilter: false,
|
|
782
|
+
expectedValue: true,
|
|
783
|
+
message: "datafield type filterable"
|
|
784
|
+
}, {
|
|
785
|
+
model: {},
|
|
786
|
+
entitySetPath: "/parameterEntity",
|
|
787
|
+
property: "prop1",
|
|
788
|
+
skipHiddenFilter: false,
|
|
789
|
+
expectedValue: true,
|
|
790
|
+
message: "parameter"
|
|
791
|
+
}].forEach(function (oProperty) {
|
|
792
|
+
var actualValue = CommonUtils.isPropertyFilterable(fnCreateModel(oProperty.model), oProperty.entitySetPath, oProperty.property, oProperty.skipHiddenFilter);
|
|
793
|
+
expect(actualValue).toEqual(oProperty.expectedValue); // ,"Unit test to check isPropertyFilterable with " + oProperty.message + " : ok"
|
|
794
|
+
});
|
|
795
|
+
});
|
|
796
|
+
});
|
|
797
|
+
describe("Test CommonUtils : addSelectionVariantToConditions", function () {
|
|
798
|
+
var that = {};
|
|
799
|
+
beforeEach(function () {
|
|
800
|
+
//CREATE MOCK
|
|
801
|
+
that.getValueStub = jest.spyOn(FilterHelper, "getTypeCompliantValue").mockImplementation(function fakeFn(oValue) {
|
|
802
|
+
return oValue;
|
|
803
|
+
});
|
|
804
|
+
that.getOperatorStub = jest.spyOn(CommonUtils, "getOperatorsForProperty").mockImplementation(function fakeFn() {
|
|
805
|
+
return undefined;
|
|
806
|
+
});
|
|
807
|
+
that.getValidPropsStub = jest.spyOn(CommonUtils, "getContextPathProperties").mockImplementation(function fakeFn(oValue) {
|
|
808
|
+
return that.validProperties;
|
|
809
|
+
});
|
|
810
|
+
that.getFilterableStub = jest.spyOn(CommonUtils, "isPropertyFilterable").mockImplementation(function fakeFn(oValue) {
|
|
811
|
+
return true;
|
|
812
|
+
});
|
|
813
|
+
that.getParameterInfoStub = jest.spyOn(CommonUtils, "getParameterInfo").mockImplementation(function fakeFn(oValue) {
|
|
814
|
+
return that.parameterInfo;
|
|
815
|
+
});
|
|
816
|
+
});
|
|
817
|
+
afterEach(function () {
|
|
818
|
+
//RESTORE
|
|
819
|
+
that.getValueStub.mockRestore();
|
|
820
|
+
that.getOperatorStub.mockRestore();
|
|
821
|
+
that.getValidPropsStub.mockRestore();
|
|
822
|
+
that.getFilterableStub.mockRestore();
|
|
823
|
+
that.getParameterInfoStub.mockRestore();
|
|
824
|
+
});
|
|
825
|
+
test("Test convertion of Selection Variant to conditions without valid properties.", function () {
|
|
826
|
+
var oSV = new SelectionVariant(),
|
|
827
|
+
oConditions = {};
|
|
828
|
+
oSV.addSelectOption("attribute1", "I", "EQ", "value1");
|
|
829
|
+
that.validProperties = {};
|
|
830
|
+
that.parameterInfo = {};
|
|
831
|
+
CommonUtils.addSelectionVariantToConditions(oSV, oConditions, {}, ""); //CHECK
|
|
832
|
+
|
|
833
|
+
expect(Object.keys(oConditions).length).toEqual(0); //, "CommonUtils: No conditions are added without any valid properties.");
|
|
834
|
+
});
|
|
835
|
+
test("Test conversion of Selection Variant to conditions with empty SV.", function () {
|
|
836
|
+
var oSV = new SelectionVariant(),
|
|
837
|
+
oConditions = {};
|
|
838
|
+
that.validProperties = {
|
|
839
|
+
"attribute1": {
|
|
840
|
+
$Type: "Edm.Boolean"
|
|
841
|
+
},
|
|
842
|
+
"attribute2": {
|
|
843
|
+
$Type: "Edm.String"
|
|
844
|
+
}
|
|
845
|
+
};
|
|
846
|
+
that.parameterInfo = {};
|
|
847
|
+
CommonUtils.addSelectionVariantToConditions(oSV, oConditions, {}, ""); //CHECK
|
|
848
|
+
|
|
849
|
+
expect(Object.keys(oConditions).length).toEqual(0); // "CommonUtils: No conditions are added with empty SV.");
|
|
850
|
+
});
|
|
851
|
+
test("Test conversion of Selection Variant to conditions.", function () {
|
|
852
|
+
var oSV = new SelectionVariant();
|
|
853
|
+
var oConditions = {};
|
|
854
|
+
var iCount = 0;
|
|
855
|
+
that.validProperties = {
|
|
856
|
+
"attribute1": {
|
|
857
|
+
$Type: "Edm.Boolean"
|
|
858
|
+
},
|
|
859
|
+
"attribute2": {
|
|
860
|
+
$Type: "Edm.String"
|
|
861
|
+
},
|
|
862
|
+
"Material": {
|
|
863
|
+
$Type: "Edm.String"
|
|
864
|
+
},
|
|
865
|
+
"MaterialCategory": {
|
|
866
|
+
$Type: "Edm.String"
|
|
867
|
+
},
|
|
868
|
+
"ItemNumber": {
|
|
869
|
+
$Type: "Edm.String"
|
|
870
|
+
},
|
|
871
|
+
"CityName": {
|
|
872
|
+
$Type: "Edm.String"
|
|
873
|
+
}
|
|
874
|
+
};
|
|
875
|
+
that.parameterInfo = {};
|
|
876
|
+
var oMetaModel = {
|
|
877
|
+
getObject: function (sPath) {
|
|
878
|
+
if (sPath.includes("_Item")) {
|
|
879
|
+
return {
|
|
880
|
+
sPath: sPath,
|
|
881
|
+
$isCollection: true,
|
|
882
|
+
$Type: "Edm.String"
|
|
883
|
+
};
|
|
884
|
+
} else {
|
|
885
|
+
return {
|
|
886
|
+
sPath: sPath,
|
|
887
|
+
$Type: "Edm.String"
|
|
888
|
+
};
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
};
|
|
892
|
+
oSV.addSelectOption("attribute1", "I", "EQ", "true");
|
|
893
|
+
oSV.addSelectOption("attribute2", "I", "EQ", "value1");
|
|
894
|
+
oSV.addSelectOption("attribute2", "I", "EQ", "value2");
|
|
895
|
+
oSV.addSelectOption("SalesOrderManage._Item.Material", "I", "EQ", "VNG01");
|
|
896
|
+
oSV.addSelectOption("_MaterialDetails.MaterialCategory", "I", "EQ", "A");
|
|
897
|
+
oSV.addSelectOption("ItemDetails.ItemNumber", "I", "EQ", "10");
|
|
898
|
+
CommonUtils.addSelectionVariantToConditions(oSV, oConditions, oMetaModel, "/SalesOrderManage");
|
|
899
|
+
oSV = new SelectionVariant();
|
|
900
|
+
oSV.addSelectOption("Customer.Set.CityName", "I", "EQ", "ABC");
|
|
901
|
+
CommonUtils.addSelectionVariantToConditions(oSV, oConditions, oMetaModel, "/Customer/Set");
|
|
902
|
+
var aProperties = Object.keys(oConditions);
|
|
903
|
+
aProperties.forEach(function (sPropertyName) {
|
|
904
|
+
iCount += oConditions[sPropertyName].length;
|
|
905
|
+
}); //CHECK
|
|
906
|
+
|
|
907
|
+
expect(aProperties.length).toEqual(6); // "CommonUtils: Correct no. of propertyPath are added from SV.");
|
|
908
|
+
|
|
909
|
+
expect(iCount).toEqual(7); // "CommonUtils: Correct no. of conditions are added from SV.");
|
|
910
|
+
|
|
911
|
+
expect(oConditions["SalesOrderManage/_Item*/Material"][0].values[0]).toEqual("VNG01"); //, "Conditions for navigation path is added");
|
|
912
|
+
|
|
913
|
+
expect(oConditions["_MaterialDetails/MaterialCategory"][0].values[0]).toEqual("A"); //, "Conditions for navigation path is added");
|
|
914
|
+
|
|
915
|
+
expect(oConditions["ItemDetails/ItemNumber"][0].values[0]).toEqual("10"); //, "Conditions for navigation path is added");
|
|
916
|
+
|
|
917
|
+
expect(oConditions["Customer/Set/CityName"][0].values[0]).toEqual("ABC"); //"Conditions for navigation path in case of pamaterized service is added"
|
|
918
|
+
});
|
|
919
|
+
test("Test conversion of Selection Variant to conditions with parameters.", function () {
|
|
920
|
+
var oSV = new SelectionVariant(),
|
|
921
|
+
oConditions = {};
|
|
922
|
+
var iCount = 0;
|
|
923
|
+
that.validProperties = {
|
|
924
|
+
"attribute1": {
|
|
925
|
+
$Type: "Edm.String"
|
|
926
|
+
}
|
|
927
|
+
};
|
|
928
|
+
that.parameterInfo = {
|
|
929
|
+
contextPath: "/Customer/Set",
|
|
930
|
+
parameterProperties: {
|
|
931
|
+
"param1": {
|
|
932
|
+
$Type: "Edm.Boolean"
|
|
933
|
+
},
|
|
934
|
+
"param2": {
|
|
935
|
+
$Type: "Edm.String"
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
};
|
|
939
|
+
oSV.addSelectOption("attribute1", "I", "EQ", "value1");
|
|
940
|
+
oSV.addSelectOption("$Parameter.param1", "I", "EQ", "true");
|
|
941
|
+
oSV.addSelectOption("P_param2", "I", "EQ", "paramValue1");
|
|
942
|
+
CommonUtils.addSelectionVariantToConditions(oSV, oConditions, {}, "");
|
|
943
|
+
var aProperties = Object.keys(oConditions);
|
|
944
|
+
aProperties.forEach(function (sPropertyName) {
|
|
945
|
+
iCount += oConditions[sPropertyName].length;
|
|
946
|
+
}); //CHECK
|
|
947
|
+
|
|
948
|
+
expect(aProperties.length).toEqual(3); //, "CommonUtils: Correct no. of propertyPath are added from SV.");
|
|
949
|
+
|
|
950
|
+
expect(iCount).toEqual(3); //, "CommonUtils: Correct no. of conditions are added from SV.");
|
|
951
|
+
});
|
|
952
|
+
test("Test conversion of Selection Variant to conditions with conflicting parameters.", function () {
|
|
953
|
+
var oSV = new SelectionVariant(),
|
|
954
|
+
oConditions = {};
|
|
955
|
+
var iCount = 0;
|
|
956
|
+
that.validProperties = {
|
|
957
|
+
"attribute1": {
|
|
958
|
+
$Type: "Edm.String"
|
|
959
|
+
}
|
|
960
|
+
};
|
|
961
|
+
that.parameterInfo = {
|
|
962
|
+
contextPath: "/Customer/Set",
|
|
963
|
+
parameterProperties: {
|
|
964
|
+
"param1": {
|
|
965
|
+
$Type: "Edm.Boolean"
|
|
966
|
+
},
|
|
967
|
+
"param2": {
|
|
968
|
+
$Type: "Edm.String"
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
};
|
|
972
|
+
oSV.addSelectOption("attribute1", "I", "EQ", "value1");
|
|
973
|
+
oSV.addSelectOption("P_param1", "I", "EQ", "false");
|
|
974
|
+
oSV.addSelectOption("$Parameter.param1", "I", "EQ", "true");
|
|
975
|
+
oSV.addSelectOption("$Parameter.param2", "I", "EQ", "paramValue2_$");
|
|
976
|
+
oSV.addSelectOption("P_param2", "I", "EQ", "paramValue2_P");
|
|
977
|
+
CommonUtils.addSelectionVariantToConditions(oSV, oConditions, {}, "");
|
|
978
|
+
var aProperties = Object.keys(oConditions);
|
|
979
|
+
aProperties.forEach(function (sPropertyName) {
|
|
980
|
+
iCount += oConditions[sPropertyName].length;
|
|
981
|
+
});
|
|
982
|
+
var param1Value = oConditions["param1"][0].values[0] === true;
|
|
983
|
+
var param2Value = oConditions["param2"][0].values[0] === "paramValue2_$"; //CHECK
|
|
984
|
+
|
|
985
|
+
expect(param1Value && param2Value).toBe(true); //, "CommonUtils: Correct parameter values are added from SV.");
|
|
986
|
+
|
|
987
|
+
expect(aProperties.length).toEqual(3); // === 3, "CommonUtils: Correct no. of propertyPath are added from SV.");
|
|
988
|
+
|
|
989
|
+
expect(iCount).toEqual(3); // === 3, "CommonUtils: Correct no. of conditions are added from SV.");
|
|
990
|
+
});
|
|
991
|
+
test("Test conversion of Selection Variant to conditions with parameters case of 'param -> P_param'.", function () {
|
|
992
|
+
var oSV = new SelectionVariant(),
|
|
993
|
+
oConditions = {};
|
|
994
|
+
var iCount = 0;
|
|
995
|
+
that.validProperties = {
|
|
996
|
+
"attribute1": {
|
|
997
|
+
$Type: "Edm.String"
|
|
998
|
+
}
|
|
999
|
+
};
|
|
1000
|
+
that.parameterInfo = {
|
|
1001
|
+
contextPath: "/Customer/Set",
|
|
1002
|
+
parameterProperties: {
|
|
1003
|
+
"P_param1": {
|
|
1004
|
+
$Type: "Edm.String"
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
};
|
|
1008
|
+
oSV.addSelectOption("attribute1", "I", "EQ", "value1");
|
|
1009
|
+
oSV.addSelectOption("param1", "I", "EQ", "paramValue1");
|
|
1010
|
+
CommonUtils.addSelectionVariantToConditions(oSV, oConditions, {}, "");
|
|
1011
|
+
var aProperties = Object.keys(oConditions);
|
|
1012
|
+
aProperties.forEach(function (sPropertyName) {
|
|
1013
|
+
iCount += oConditions[sPropertyName].length;
|
|
1014
|
+
});
|
|
1015
|
+
var param1Value = oConditions["P_param1"][0].values[0] === "paramValue1"; //CHECK
|
|
1016
|
+
|
|
1017
|
+
expect(param1Value).toBe(true); // "CommonUtils: Correct parameter values are added from SV.");
|
|
1018
|
+
|
|
1019
|
+
expect(aProperties.length).toEqual(2); // === 2, "CommonUtils: Correct no. of propertyPath are added from SV.");
|
|
1020
|
+
|
|
1021
|
+
expect(iCount).toEqual(2); // === 2, "CommonUtils: Correct no. of conditions are added from SV.");
|
|
1022
|
+
});
|
|
1023
|
+
test("Test conversion of Selection Variant to conditions with parameters case of fall back to filter field.", function () {
|
|
1024
|
+
var oSV = new SelectionVariant(),
|
|
1025
|
+
oConditions = {};
|
|
1026
|
+
var iCount = 0;
|
|
1027
|
+
that.validProperties = {
|
|
1028
|
+
"attribute1": {
|
|
1029
|
+
$Type: "Edm.String"
|
|
1030
|
+
},
|
|
1031
|
+
"param2": {
|
|
1032
|
+
$Type: "Edm.String"
|
|
1033
|
+
}
|
|
1034
|
+
};
|
|
1035
|
+
that.parameterInfo = {
|
|
1036
|
+
contextPath: "/Customer/Set",
|
|
1037
|
+
parameterProperties: {
|
|
1038
|
+
"P_param1": {
|
|
1039
|
+
$Type: "Edm.String"
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
};
|
|
1043
|
+
oSV.addSelectOption("attribute1", "I", "EQ", "value1");
|
|
1044
|
+
oSV.addSelectOption("P_param2", "I", "EQ", "paramValue2");
|
|
1045
|
+
CommonUtils.addSelectionVariantToConditions(oSV, oConditions, {}, "");
|
|
1046
|
+
var aProperties = Object.keys(oConditions);
|
|
1047
|
+
aProperties.forEach(function (sPropertyName) {
|
|
1048
|
+
iCount += oConditions[sPropertyName].length;
|
|
1049
|
+
});
|
|
1050
|
+
var param2Value = oConditions["param2"][0].values[0] === "paramValue2"; //CHECK
|
|
1051
|
+
|
|
1052
|
+
expect(param2Value).toBe(true); //, "CommonUtils: Correct parameter values are added from SV.");
|
|
1053
|
+
|
|
1054
|
+
expect(aProperties.length).toEqual(2); //== 2, "CommonUtils: Correct no. of propertyPath are added from SV.");
|
|
1055
|
+
|
|
1056
|
+
expect(iCount).toEqual(2); //, "CommonUtils: Correct no. of conditions are added from SV.");
|
|
1057
|
+
});
|
|
1058
|
+
test("Test conversion of Selection Variant to conditions with already existing conditions.", function () {
|
|
1059
|
+
var oSV = new SelectionVariant(),
|
|
1060
|
+
oConditions = {
|
|
1061
|
+
"attribute2": [{
|
|
1062
|
+
"operator": "EQ",
|
|
1063
|
+
"values": ["value3"]
|
|
1064
|
+
}]
|
|
1065
|
+
};
|
|
1066
|
+
var iCount = 0;
|
|
1067
|
+
that.validProperties = {
|
|
1068
|
+
"attribute1": {
|
|
1069
|
+
$Type: "Edm.Boolean"
|
|
1070
|
+
},
|
|
1071
|
+
"attribute2": {
|
|
1072
|
+
$Type: "Edm.String"
|
|
1073
|
+
}
|
|
1074
|
+
};
|
|
1075
|
+
that.parameterInfo = {};
|
|
1076
|
+
oSV.addSelectOption("attribute1", "I", "EQ", "true");
|
|
1077
|
+
oSV.addSelectOption("attribute2", "I", "EQ", "value1");
|
|
1078
|
+
oSV.addSelectOption("attribute2", "I", "EQ", "value2");
|
|
1079
|
+
CommonUtils.addSelectionVariantToConditions(oSV, oConditions, {}, "");
|
|
1080
|
+
var aProperties = Object.keys(oConditions);
|
|
1081
|
+
aProperties.forEach(function (sPropertyName) {
|
|
1082
|
+
iCount += oConditions[sPropertyName].length;
|
|
1083
|
+
}); //CHECK
|
|
1084
|
+
|
|
1085
|
+
expect(aProperties.length).toEqual(2); // === 2, "CommonUtils: Correct no. of propertyPath are added from SV.");
|
|
1086
|
+
|
|
1087
|
+
expect(iCount).toEqual(4); // 4, "CommonUtils: Correct no. of conditions are added from SV.");
|
|
1088
|
+
});
|
|
1089
|
+
});
|
|
1090
|
+
describe("addExternalStateFiltersToSelectionVariant", function () {
|
|
1091
|
+
test("addExternalStateFiltersToSelectionVariant", function () {
|
|
1092
|
+
var oInputSelectionVariant = new SelectionVariant();
|
|
1093
|
+
var oTargetInfo = {
|
|
1094
|
+
"propertiesWithoutConflict": {
|
|
1095
|
+
"Material": ["SalesOrderManage.Material"]
|
|
1096
|
+
}
|
|
1097
|
+
};
|
|
1098
|
+
var mFilters = {
|
|
1099
|
+
"filterConditions": {
|
|
1100
|
+
"Date": [{
|
|
1101
|
+
"operator": "EQ",
|
|
1102
|
+
"values": ["2020-03-04"]
|
|
1103
|
+
}],
|
|
1104
|
+
"DateTimeOffset": [{
|
|
1105
|
+
"operator": "EQ",
|
|
1106
|
+
"values": ["2020-03-04T20:53:54+0530"]
|
|
1107
|
+
}],
|
|
1108
|
+
"TimeOfDay": [{
|
|
1109
|
+
"operator": "EQ",
|
|
1110
|
+
"values": ["16:51:51"]
|
|
1111
|
+
}],
|
|
1112
|
+
"String": [],
|
|
1113
|
+
"Boolean": [{
|
|
1114
|
+
"operator": "EEQ",
|
|
1115
|
+
"values": [true]
|
|
1116
|
+
}],
|
|
1117
|
+
"Byte": [{
|
|
1118
|
+
"operator": "EQ",
|
|
1119
|
+
"values": [4]
|
|
1120
|
+
}],
|
|
1121
|
+
"ByteMulti": [{
|
|
1122
|
+
"operator": "LE",
|
|
1123
|
+
"values": [5]
|
|
1124
|
+
}, {
|
|
1125
|
+
"operator": "GE",
|
|
1126
|
+
"values": [10]
|
|
1127
|
+
}],
|
|
1128
|
+
"DateTimeOffsetMulti": [{
|
|
1129
|
+
"operator": "NOTGT",
|
|
1130
|
+
"values": ["2020-03-25T20:55:42+0530"]
|
|
1131
|
+
}, {
|
|
1132
|
+
"operator": "NOTLT",
|
|
1133
|
+
"values": ["2020-02-01T20:55:51+0530"]
|
|
1134
|
+
}],
|
|
1135
|
+
"Decimal": [{
|
|
1136
|
+
"operator": "EQ",
|
|
1137
|
+
"values": ["4.45"]
|
|
1138
|
+
}],
|
|
1139
|
+
"DecimalMulti": [{
|
|
1140
|
+
"operator": "NE",
|
|
1141
|
+
"values": ["6.25"]
|
|
1142
|
+
}],
|
|
1143
|
+
"Double": [{
|
|
1144
|
+
"operator": "EQ",
|
|
1145
|
+
"values": [3.333333]
|
|
1146
|
+
}],
|
|
1147
|
+
"DoubleMulti": [{
|
|
1148
|
+
"operator": "NOTGE",
|
|
1149
|
+
"values": [6.666666666]
|
|
1150
|
+
}, {
|
|
1151
|
+
"operator": "NOTGT",
|
|
1152
|
+
"values": [10.0000099999]
|
|
1153
|
+
}],
|
|
1154
|
+
"Guid": [{
|
|
1155
|
+
"operator": "EQ",
|
|
1156
|
+
"values": ["11111182-aaaa-bbbb-cccc-ddddeeeeffff"]
|
|
1157
|
+
}],
|
|
1158
|
+
"GuidMulti": [{
|
|
1159
|
+
"operator": "EQ",
|
|
1160
|
+
"values": ["11111183-aaaa-bbbb-cccc-ddddeeeeffff"]
|
|
1161
|
+
}, {
|
|
1162
|
+
"operator": "EQ",
|
|
1163
|
+
"values": ["11111185-aaaa-bbbb-cccc-ddddeeeeffff"]
|
|
1164
|
+
}],
|
|
1165
|
+
"Int16": [{
|
|
1166
|
+
"operator": "EQ",
|
|
1167
|
+
"values": [10]
|
|
1168
|
+
}],
|
|
1169
|
+
"Empty": [{
|
|
1170
|
+
"operator": "Empty",
|
|
1171
|
+
"values": []
|
|
1172
|
+
}],
|
|
1173
|
+
"Int16Multi": [{
|
|
1174
|
+
"operator": "EQ",
|
|
1175
|
+
"values": [15]
|
|
1176
|
+
}, {
|
|
1177
|
+
"operator": "NOTGE",
|
|
1178
|
+
"values": [10000]
|
|
1179
|
+
}, {
|
|
1180
|
+
"operator": "NOTBT",
|
|
1181
|
+
"values": [100, 200]
|
|
1182
|
+
}, {
|
|
1183
|
+
"operator": "NOTLT",
|
|
1184
|
+
"values": [10]
|
|
1185
|
+
}],
|
|
1186
|
+
"Int32": [{
|
|
1187
|
+
"operator": "EQ",
|
|
1188
|
+
"values": [9999999]
|
|
1189
|
+
}],
|
|
1190
|
+
"Int32Multi": [{
|
|
1191
|
+
"operator": "BT",
|
|
1192
|
+
"values": [1000000, 1000000000]
|
|
1193
|
+
}],
|
|
1194
|
+
"Int64": [{
|
|
1195
|
+
"operator": "EQ",
|
|
1196
|
+
"values": ["99"]
|
|
1197
|
+
}],
|
|
1198
|
+
"Int64Multi": [{
|
|
1199
|
+
"operator": "NOTLT",
|
|
1200
|
+
"values": ["9999999"]
|
|
1201
|
+
}, {
|
|
1202
|
+
"operator": "NE",
|
|
1203
|
+
"values": ["99999"]
|
|
1204
|
+
}],
|
|
1205
|
+
"SByte": [{
|
|
1206
|
+
"operator": "EQ",
|
|
1207
|
+
"values": [1]
|
|
1208
|
+
}],
|
|
1209
|
+
"SByteMulti": [{
|
|
1210
|
+
"operator": "EQ",
|
|
1211
|
+
"values": [2]
|
|
1212
|
+
}, {
|
|
1213
|
+
"operator": "GT",
|
|
1214
|
+
"values": [3]
|
|
1215
|
+
}],
|
|
1216
|
+
"Single": [{
|
|
1217
|
+
"operator": "EQ",
|
|
1218
|
+
"values": [1]
|
|
1219
|
+
}],
|
|
1220
|
+
"SingleMulti": [{
|
|
1221
|
+
"operator": "EQ",
|
|
1222
|
+
"values": [2]
|
|
1223
|
+
}],
|
|
1224
|
+
"StringMulti": [{
|
|
1225
|
+
"operator": "EndsWith",
|
|
1226
|
+
"values": ["xyz"]
|
|
1227
|
+
}, {
|
|
1228
|
+
"operator": "StartsWith",
|
|
1229
|
+
"values": ["abc"]
|
|
1230
|
+
}, {
|
|
1231
|
+
"operator": "Contains",
|
|
1232
|
+
"values": ["def"]
|
|
1233
|
+
}, {
|
|
1234
|
+
"operator": "NotStartsWith",
|
|
1235
|
+
"values": ["ijk"]
|
|
1236
|
+
}, {
|
|
1237
|
+
"operator": "NotEndsWith",
|
|
1238
|
+
"values": ["uvw"]
|
|
1239
|
+
}, {
|
|
1240
|
+
"operator": "NotContains",
|
|
1241
|
+
"values": ["pqr"]
|
|
1242
|
+
}],
|
|
1243
|
+
"TimeOfDayMulti": [{
|
|
1244
|
+
"operator": "EQ",
|
|
1245
|
+
"values": ["22:00:39"]
|
|
1246
|
+
}, {
|
|
1247
|
+
"operator": "EQ",
|
|
1248
|
+
"values": ["17:00:43"]
|
|
1249
|
+
}]
|
|
1250
|
+
},
|
|
1251
|
+
"filterConditionsWithoutConflict": {
|
|
1252
|
+
"Material": ["SalesOrderManage._Item.Material"]
|
|
1253
|
+
}
|
|
1254
|
+
};
|
|
1255
|
+
var oOutPutSelectionVariant = CommonUtils.addExternalStateFiltersToSelectionVariant(oInputSelectionVariant, mFilters, oTargetInfo);
|
|
1256
|
+
var oActualSelectionVariant = {
|
|
1257
|
+
_mParameters: {},
|
|
1258
|
+
_mSelectOptions: {
|
|
1259
|
+
"Date": [{
|
|
1260
|
+
"Sign": "I",
|
|
1261
|
+
"Option": "EQ",
|
|
1262
|
+
"Low": "2020-03-04",
|
|
1263
|
+
"High": null
|
|
1264
|
+
}],
|
|
1265
|
+
"DateTimeOffset": [{
|
|
1266
|
+
"Sign": "I",
|
|
1267
|
+
"Option": "EQ",
|
|
1268
|
+
"Low": "2020-03-04T20:53:54+0530",
|
|
1269
|
+
"High": null
|
|
1270
|
+
}],
|
|
1271
|
+
"TimeOfDay": [{
|
|
1272
|
+
"Sign": "I",
|
|
1273
|
+
"Option": "EQ",
|
|
1274
|
+
"Low": "16:51:51",
|
|
1275
|
+
"High": null
|
|
1276
|
+
}],
|
|
1277
|
+
"Boolean": [{
|
|
1278
|
+
"Sign": "I",
|
|
1279
|
+
"Option": "EQ",
|
|
1280
|
+
"Low": "true",
|
|
1281
|
+
"High": null
|
|
1282
|
+
}],
|
|
1283
|
+
"Byte": [{
|
|
1284
|
+
"Sign": "I",
|
|
1285
|
+
"Option": "EQ",
|
|
1286
|
+
"Low": "4",
|
|
1287
|
+
"High": null
|
|
1288
|
+
}],
|
|
1289
|
+
"ByteMulti": [{
|
|
1290
|
+
"Sign": "I",
|
|
1291
|
+
"Option": "LE",
|
|
1292
|
+
"Low": "5",
|
|
1293
|
+
"High": null
|
|
1294
|
+
}],
|
|
1295
|
+
"DateTimeOffsetMulti": [{
|
|
1296
|
+
"Sign": "E",
|
|
1297
|
+
"Option": "GT",
|
|
1298
|
+
"Low": "2020-03-25T20:55:42+0530",
|
|
1299
|
+
"High": null
|
|
1300
|
+
}, {
|
|
1301
|
+
"Sign": "E",
|
|
1302
|
+
"Option": "LT",
|
|
1303
|
+
"Low": "2020-02-01T20:55:51+0530",
|
|
1304
|
+
"High": null
|
|
1305
|
+
}],
|
|
1306
|
+
"Decimal": [{
|
|
1307
|
+
"Sign": "I",
|
|
1308
|
+
"Option": "EQ",
|
|
1309
|
+
"Low": "4.45",
|
|
1310
|
+
"High": null
|
|
1311
|
+
}],
|
|
1312
|
+
"DecimalMulti": [{
|
|
1313
|
+
"Sign": "I",
|
|
1314
|
+
"Option": "NE",
|
|
1315
|
+
"Low": "6.25",
|
|
1316
|
+
"High": null
|
|
1317
|
+
}],
|
|
1318
|
+
"Double": [{
|
|
1319
|
+
"Sign": "I",
|
|
1320
|
+
"Option": "EQ",
|
|
1321
|
+
"Low": "3.333333",
|
|
1322
|
+
"High": null
|
|
1323
|
+
}],
|
|
1324
|
+
"DoubleMulti": [{
|
|
1325
|
+
"Sign": "E",
|
|
1326
|
+
"Option": "GE",
|
|
1327
|
+
"Low": "6.666666666",
|
|
1328
|
+
"High": null
|
|
1329
|
+
}, {
|
|
1330
|
+
"Sign": "E",
|
|
1331
|
+
"Option": "GT",
|
|
1332
|
+
"Low": "10.0000099999",
|
|
1333
|
+
"High": null
|
|
1334
|
+
}],
|
|
1335
|
+
"Empty": [{
|
|
1336
|
+
"High": null,
|
|
1337
|
+
"Low": "",
|
|
1338
|
+
"Option": "EQ",
|
|
1339
|
+
"Sign": "I"
|
|
1340
|
+
}],
|
|
1341
|
+
"Guid": [{
|
|
1342
|
+
"Sign": "I",
|
|
1343
|
+
"Option": "EQ",
|
|
1344
|
+
"Low": "11111182-aaaa-bbbb-cccc-ddddeeeeffff",
|
|
1345
|
+
"High": null
|
|
1346
|
+
}],
|
|
1347
|
+
"GuidMulti": [{
|
|
1348
|
+
"Sign": "I",
|
|
1349
|
+
"Option": "EQ",
|
|
1350
|
+
"Low": "11111183-aaaa-bbbb-cccc-ddddeeeeffff",
|
|
1351
|
+
"High": null
|
|
1352
|
+
}, {
|
|
1353
|
+
"Sign": "I",
|
|
1354
|
+
"Option": "EQ",
|
|
1355
|
+
"Low": "11111185-aaaa-bbbb-cccc-ddddeeeeffff",
|
|
1356
|
+
"High": null
|
|
1357
|
+
}],
|
|
1358
|
+
"Int16": [{
|
|
1359
|
+
"Sign": "I",
|
|
1360
|
+
"Option": "EQ",
|
|
1361
|
+
"Low": "10",
|
|
1362
|
+
"High": null
|
|
1363
|
+
}],
|
|
1364
|
+
"Int16Multi": [{
|
|
1365
|
+
"Sign": "I",
|
|
1366
|
+
"Option": "EQ",
|
|
1367
|
+
"Low": "15",
|
|
1368
|
+
"High": null
|
|
1369
|
+
}, {
|
|
1370
|
+
"Sign": "E",
|
|
1371
|
+
"Option": "GE",
|
|
1372
|
+
"Low": "10000",
|
|
1373
|
+
"High": null
|
|
1374
|
+
}, {
|
|
1375
|
+
"Sign": "E",
|
|
1376
|
+
"Option": "BT",
|
|
1377
|
+
"Low": "100",
|
|
1378
|
+
"High": "200"
|
|
1379
|
+
}, {
|
|
1380
|
+
"Sign": "E",
|
|
1381
|
+
"Option": "LT",
|
|
1382
|
+
"Low": "10",
|
|
1383
|
+
"High": null
|
|
1384
|
+
}],
|
|
1385
|
+
"Int32": [{
|
|
1386
|
+
"Sign": "I",
|
|
1387
|
+
"Option": "EQ",
|
|
1388
|
+
"Low": "9999999",
|
|
1389
|
+
"High": null
|
|
1390
|
+
}],
|
|
1391
|
+
"Int32Multi": [{
|
|
1392
|
+
"Sign": "I",
|
|
1393
|
+
"Option": "BT",
|
|
1394
|
+
"Low": "1000000",
|
|
1395
|
+
"High": "1000000000"
|
|
1396
|
+
}],
|
|
1397
|
+
"Int64": [{
|
|
1398
|
+
"Sign": "I",
|
|
1399
|
+
"Option": "EQ",
|
|
1400
|
+
"Low": "99",
|
|
1401
|
+
"High": null
|
|
1402
|
+
}],
|
|
1403
|
+
"Int64Multi": [{
|
|
1404
|
+
"Sign": "E",
|
|
1405
|
+
"Option": "LT",
|
|
1406
|
+
"Low": "9999999",
|
|
1407
|
+
"High": null
|
|
1408
|
+
}, {
|
|
1409
|
+
"Sign": "I",
|
|
1410
|
+
"Option": "NE",
|
|
1411
|
+
"Low": "99999",
|
|
1412
|
+
"High": null
|
|
1413
|
+
}],
|
|
1414
|
+
"SByte": [{
|
|
1415
|
+
"Sign": "I",
|
|
1416
|
+
"Option": "EQ",
|
|
1417
|
+
"Low": "1",
|
|
1418
|
+
"High": null
|
|
1419
|
+
}],
|
|
1420
|
+
"SByteMulti": [{
|
|
1421
|
+
"Sign": "I",
|
|
1422
|
+
"Option": "EQ",
|
|
1423
|
+
"Low": "2",
|
|
1424
|
+
"High": null
|
|
1425
|
+
}, {
|
|
1426
|
+
"Sign": "I",
|
|
1427
|
+
"Option": "GT",
|
|
1428
|
+
"Low": "3",
|
|
1429
|
+
"High": null
|
|
1430
|
+
}],
|
|
1431
|
+
"Single": [{
|
|
1432
|
+
"Sign": "I",
|
|
1433
|
+
"Option": "EQ",
|
|
1434
|
+
"Low": "1",
|
|
1435
|
+
"High": null
|
|
1436
|
+
}],
|
|
1437
|
+
"SingleMulti": [{
|
|
1438
|
+
"Sign": "I",
|
|
1439
|
+
"Option": "EQ",
|
|
1440
|
+
"Low": "2",
|
|
1441
|
+
"High": null
|
|
1442
|
+
}],
|
|
1443
|
+
"StringMulti": [{
|
|
1444
|
+
"Sign": "I",
|
|
1445
|
+
"Option": "CP",
|
|
1446
|
+
"Low": "*xyz",
|
|
1447
|
+
"High": null
|
|
1448
|
+
}, {
|
|
1449
|
+
"Sign": "I",
|
|
1450
|
+
"Option": "CP",
|
|
1451
|
+
"Low": "abc*",
|
|
1452
|
+
"High": null
|
|
1453
|
+
}, {
|
|
1454
|
+
"Sign": "I",
|
|
1455
|
+
"Option": "CP",
|
|
1456
|
+
"Low": "def",
|
|
1457
|
+
"High": null
|
|
1458
|
+
}, {
|
|
1459
|
+
"Sign": "E",
|
|
1460
|
+
"Option": "CP",
|
|
1461
|
+
"Low": "ijk*",
|
|
1462
|
+
"High": null
|
|
1463
|
+
}, {
|
|
1464
|
+
"Sign": "E",
|
|
1465
|
+
"Option": "CP",
|
|
1466
|
+
"Low": "*uvw",
|
|
1467
|
+
"High": null
|
|
1468
|
+
}, {
|
|
1469
|
+
"Sign": "E",
|
|
1470
|
+
"Option": "CP",
|
|
1471
|
+
"Low": "pqr",
|
|
1472
|
+
"High": null
|
|
1473
|
+
}],
|
|
1474
|
+
"TimeOfDayMulti": [{
|
|
1475
|
+
"Sign": "I",
|
|
1476
|
+
"Option": "EQ",
|
|
1477
|
+
"Low": "22:00:39",
|
|
1478
|
+
"High": null
|
|
1479
|
+
}, {
|
|
1480
|
+
"Sign": "I",
|
|
1481
|
+
"Option": "EQ",
|
|
1482
|
+
"Low": "17:00:43",
|
|
1483
|
+
"High": null
|
|
1484
|
+
}]
|
|
1485
|
+
},
|
|
1486
|
+
_sId: ""
|
|
1487
|
+
};
|
|
1488
|
+
expect(oActualSelectionVariant).toEqual(oOutPutSelectionVariant); //"the external state filters have been added to the selection variant correctly"
|
|
1489
|
+
});
|
|
1490
|
+
});
|
|
1491
|
+
describe("Unit Test check Operators", function () {
|
|
1492
|
+
test("Unit test to check Operators", function () {
|
|
1493
|
+
[{
|
|
1494
|
+
dataField: "LastChangedDateTime",
|
|
1495
|
+
oContext: {
|
|
1496
|
+
getObject: function (path) {
|
|
1497
|
+
// Edm Type
|
|
1498
|
+
if (path === "/dummy/LastChangedDateTime/$Type") {
|
|
1499
|
+
return "Edm.DateTime";
|
|
1500
|
+
} else {
|
|
1501
|
+
// Filter Annotations
|
|
1502
|
+
return {
|
|
1503
|
+
FilterExpressionRestrictions: [{
|
|
1504
|
+
Property: {
|
|
1505
|
+
$PropertyPath: "LastChangedDateTime"
|
|
1506
|
+
},
|
|
1507
|
+
AllowedExpressions: "SingleRange"
|
|
1508
|
+
}]
|
|
1509
|
+
};
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
},
|
|
1513
|
+
expectedValue: "EQ,BT,LT,LE,GT,GE,NOTLT,NOTLE,NOTGT,NOTGE",
|
|
1514
|
+
sMessage: "Edm.String and Single Range"
|
|
1515
|
+
}, {
|
|
1516
|
+
dataField: "SalesOrderDate",
|
|
1517
|
+
oContext: {
|
|
1518
|
+
getObject: function (path) {
|
|
1519
|
+
// Edm Type
|
|
1520
|
+
if (path === "/dummy/SalesOrderDate/$Type") {
|
|
1521
|
+
return "Edm.Date";
|
|
1522
|
+
} else {
|
|
1523
|
+
// Filter Annotations
|
|
1524
|
+
return {
|
|
1525
|
+
FilterExpressionRestrictions: [{
|
|
1526
|
+
Property: {
|
|
1527
|
+
$PropertyPath: "SalesOrderDate"
|
|
1528
|
+
},
|
|
1529
|
+
AllowedExpressions: "SingleValue"
|
|
1530
|
+
}]
|
|
1531
|
+
};
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
},
|
|
1535
|
+
expectedValue: "EQ",
|
|
1536
|
+
sMessage: "Edm.Date and Single Value"
|
|
1537
|
+
}, {
|
|
1538
|
+
dataField: "SalesOrderDate",
|
|
1539
|
+
oContext: {
|
|
1540
|
+
getObject: function (path) {
|
|
1541
|
+
// Edm Type
|
|
1542
|
+
if (path === "/dummy/SalesOrderDate/$Type") {
|
|
1543
|
+
return "Edm.Date";
|
|
1544
|
+
} else {
|
|
1545
|
+
// Filter Annotations
|
|
1546
|
+
return {
|
|
1547
|
+
FilterExpressionRestrictions: [{
|
|
1548
|
+
Property: {
|
|
1549
|
+
$PropertyPath: "SalesOrderDate"
|
|
1550
|
+
},
|
|
1551
|
+
AllowedExpressions: "MultiValue"
|
|
1552
|
+
}]
|
|
1553
|
+
};
|
|
1554
|
+
}
|
|
1555
|
+
}
|
|
1556
|
+
},
|
|
1557
|
+
expectedValue: "EQ",
|
|
1558
|
+
sMessage: "Edm.Date and Multi Value"
|
|
1559
|
+
}, {
|
|
1560
|
+
dataField: "NetAmount",
|
|
1561
|
+
oContext: {
|
|
1562
|
+
getObject: function (path) {
|
|
1563
|
+
// Edm Type
|
|
1564
|
+
if (path === "/dummy/NetAmount/$Type") {
|
|
1565
|
+
return "Edm.Decimal";
|
|
1566
|
+
} else {
|
|
1567
|
+
// Filter Annotations
|
|
1568
|
+
return {
|
|
1569
|
+
FilterExpressionRestrictions: [{
|
|
1570
|
+
Property: {
|
|
1571
|
+
$PropertyPath: "NetAmount"
|
|
1572
|
+
},
|
|
1573
|
+
AllowedExpressions: "MultiRange"
|
|
1574
|
+
}]
|
|
1575
|
+
};
|
|
1576
|
+
}
|
|
1577
|
+
}
|
|
1578
|
+
},
|
|
1579
|
+
expectedValue: "EQ,BT,LT,LE,GT,GE,NE,NOTBT,NOTLT,NOTLE,NOTGT,NOTGE",
|
|
1580
|
+
sMessage: "Edm.Decimal and Multi Range"
|
|
1581
|
+
}, {
|
|
1582
|
+
dataField: "SoldToParty",
|
|
1583
|
+
oContext: {
|
|
1584
|
+
getObject: function (path) {
|
|
1585
|
+
// Edm type
|
|
1586
|
+
if (path === "/dummy/SoldToParty/$Type") {
|
|
1587
|
+
return "Edm.String";
|
|
1588
|
+
} else {
|
|
1589
|
+
// Filter Annotations
|
|
1590
|
+
return {
|
|
1591
|
+
FilterExpressionRestrictions: [{
|
|
1592
|
+
Property: {
|
|
1593
|
+
$PropertyPath: "SoldToParty"
|
|
1594
|
+
},
|
|
1595
|
+
AllowedExpressions: "SearchExpression"
|
|
1596
|
+
}]
|
|
1597
|
+
};
|
|
1598
|
+
}
|
|
1599
|
+
}
|
|
1600
|
+
},
|
|
1601
|
+
expectedValue: "Contains,StartsWith,EndsWith,NotContains,NotStartsWith,NotEndsWith",
|
|
1602
|
+
sMessage: "Edm.String and Search Expressions"
|
|
1603
|
+
}, {
|
|
1604
|
+
dataField: "SoldToParty",
|
|
1605
|
+
oContext: {
|
|
1606
|
+
getObject: function (path) {
|
|
1607
|
+
// Edm type
|
|
1608
|
+
if (path === "/dummy/SoldToParty/$Type") {
|
|
1609
|
+
return "Edm.String";
|
|
1610
|
+
} else {
|
|
1611
|
+
// Filter Annotations
|
|
1612
|
+
return {
|
|
1613
|
+
FilterExpressionRestrictions: [{
|
|
1614
|
+
Property: {
|
|
1615
|
+
$PropertyPath: "SoldToParty"
|
|
1616
|
+
},
|
|
1617
|
+
AllowedExpressions: "MultiRangeOrSearchExpression"
|
|
1618
|
+
}]
|
|
1619
|
+
};
|
|
1620
|
+
}
|
|
1621
|
+
}
|
|
1622
|
+
},
|
|
1623
|
+
expectedValue: "Contains,EQ,BT,StartsWith,EndsWith,LT,LE,GT,GE,NotContains,NE,NOTBT,NotStartsWith,NotEndsWith,NOTLT,NOTLE,NOTGT,NOTGE",
|
|
1624
|
+
sMessage: "Edm.String and MultiRange Or Search Expressions"
|
|
1625
|
+
}].forEach(function (oProperty) {
|
|
1626
|
+
var actualValue = CommonUtils.getOperatorsForProperty(oProperty.dataField, "/dummy", oProperty.oContext, oProperty.oContext.getObject("/dummy/" + oProperty.dataField + "/$Type"));
|
|
1627
|
+
expect(actualValue).toEqual(oProperty.expectedValue); // , "Unit test to check Operators for " + oProperty.sMessage + ": ok");
|
|
1628
|
+
});
|
|
1629
|
+
});
|
|
1630
|
+
});
|
|
1631
|
+
describe("Test CommonUtils : addDefaultDisplayCurrency", function () {
|
|
1632
|
+
test("Test adding default display currency to SV.", function () {
|
|
1633
|
+
[{
|
|
1634
|
+
aMandatoryFields: [],
|
|
1635
|
+
oAppData: {},
|
|
1636
|
+
oExpectedValue: undefined
|
|
1637
|
+
}, {
|
|
1638
|
+
aMandatoryFields: [{
|
|
1639
|
+
$PropertyPath: "DisplayCurrency"
|
|
1640
|
+
}],
|
|
1641
|
+
oAppData: {},
|
|
1642
|
+
oExpectedValue: undefined,
|
|
1643
|
+
sMessage: "no SV in appData"
|
|
1644
|
+
}, {
|
|
1645
|
+
aMandatoryFields: [{
|
|
1646
|
+
$PropertyPath: "DisplayCurrency"
|
|
1647
|
+
}],
|
|
1648
|
+
oAppData: {
|
|
1649
|
+
oSelectionVariant: new SelectionVariant()
|
|
1650
|
+
},
|
|
1651
|
+
oExpectedValue: undefined,
|
|
1652
|
+
sMessage: "no Defaulted SV"
|
|
1653
|
+
}, {
|
|
1654
|
+
aMandatoryFields: [{
|
|
1655
|
+
$PropertyPath: "DisplayCurrency"
|
|
1656
|
+
}],
|
|
1657
|
+
oAppData: {
|
|
1658
|
+
oSelectionVariant: new SelectionVariant(),
|
|
1659
|
+
oDefaultedSelectionVariant: new SelectionVariant()
|
|
1660
|
+
},
|
|
1661
|
+
oExpectedValue: undefined,
|
|
1662
|
+
sMessage: "no DisplayCurrency in Defaulted SV"
|
|
1663
|
+
}, {
|
|
1664
|
+
aMandatoryFields: [{
|
|
1665
|
+
$PropertyPath: "DisplayCurrency"
|
|
1666
|
+
}],
|
|
1667
|
+
oAppData: {
|
|
1668
|
+
oSelectionVariant: new SelectionVariant(),
|
|
1669
|
+
oDefaultedSelectionVariant: new SelectionVariant({
|
|
1670
|
+
"SelectOptions": [{
|
|
1671
|
+
"PropertyName": "DisplayCurrency",
|
|
1672
|
+
"Ranges": [{
|
|
1673
|
+
"Sign": "I",
|
|
1674
|
+
"Option": "EQ",
|
|
1675
|
+
"Low": "EUR",
|
|
1676
|
+
"High": null
|
|
1677
|
+
}]
|
|
1678
|
+
}]
|
|
1679
|
+
})
|
|
1680
|
+
},
|
|
1681
|
+
oExpectedValue: "EUR",
|
|
1682
|
+
sMessage: "DisplayCurrency in Defaulted SV"
|
|
1683
|
+
}, {
|
|
1684
|
+
aMandatoryFields: [{
|
|
1685
|
+
$PropertyPath: "DisplayCurrency"
|
|
1686
|
+
}],
|
|
1687
|
+
oAppData: {
|
|
1688
|
+
oSelectionVariant: new SelectionVariant({
|
|
1689
|
+
"SelectOptions": [{
|
|
1690
|
+
"PropertyName": "DisplayCurrency",
|
|
1691
|
+
"Ranges": [{
|
|
1692
|
+
"Sign": "I",
|
|
1693
|
+
"Option": "EQ",
|
|
1694
|
+
"Low": "INR",
|
|
1695
|
+
"High": null
|
|
1696
|
+
}]
|
|
1697
|
+
}]
|
|
1698
|
+
}),
|
|
1699
|
+
oDefaultedSelectionVariant: new SelectionVariant({
|
|
1700
|
+
"SelectOptions": [{
|
|
1701
|
+
"PropertyName": "DisplayCurrency",
|
|
1702
|
+
"Ranges": [{
|
|
1703
|
+
"Sign": "I",
|
|
1704
|
+
"Option": "EQ",
|
|
1705
|
+
"Low": "EUR",
|
|
1706
|
+
"High": null
|
|
1707
|
+
}]
|
|
1708
|
+
}]
|
|
1709
|
+
})
|
|
1710
|
+
},
|
|
1711
|
+
oExpectedValue: "INR",
|
|
1712
|
+
sMessage: "DisplayCurrency in SV and Defaulted SV"
|
|
1713
|
+
}].forEach(function (oTestData) {
|
|
1714
|
+
CommonUtils.addDefaultDisplayCurrency(oTestData.aMandatoryFields, oTestData.oAppData.oSelectionVariant, oTestData.oAppData.oDefaultedSelectionVariant);
|
|
1715
|
+
expect(oTestData.oAppData && oTestData.oAppData.oSelectionVariant && oTestData.oAppData.oSelectionVariant.getSelectOption("DisplayCurrency") && oTestData.oAppData.oSelectionVariant.getSelectOption("DisplayCurrency")[0].Low).toEqual(oTestData.oExpectedValue); // ,"NavHelper: addDefaultDisplayCurrency works when " + oTestData.sMessage + "."
|
|
1716
|
+
});
|
|
1717
|
+
});
|
|
1718
|
+
});
|
|
1719
|
+
describe("Unit Test to check getNonComputedVisibleFields", function () {
|
|
1720
|
+
test("Unit Test to check getNonComputedVisibleFields", function () {
|
|
1721
|
+
[{
|
|
1722
|
+
metaModel: {
|
|
1723
|
+
getObject: function (sPath) {
|
|
1724
|
+
switch (sPath) {
|
|
1725
|
+
case "/SalesOrderItem/":
|
|
1726
|
+
return {
|
|
1727
|
+
"$Key": ["key1", "key2"],
|
|
1728
|
+
"key1": {
|
|
1729
|
+
$kind: "Property"
|
|
1730
|
+
},
|
|
1731
|
+
"key2": {
|
|
1732
|
+
$kind: "Property"
|
|
1733
|
+
},
|
|
1734
|
+
"prop1": {
|
|
1735
|
+
$kind: "Property"
|
|
1736
|
+
}
|
|
1737
|
+
};
|
|
1738
|
+
|
|
1739
|
+
case "/SalesOrderItem/key2@":
|
|
1740
|
+
return {
|
|
1741
|
+
"@Org.OData.Core.V1.Computed": false
|
|
1742
|
+
};
|
|
1743
|
+
|
|
1744
|
+
case "/SalesOrderItem/prop1@":
|
|
1745
|
+
return {
|
|
1746
|
+
"@Org.OData.Core.V1.Immutable": true
|
|
1747
|
+
};
|
|
1748
|
+
|
|
1749
|
+
default:
|
|
1750
|
+
return {};
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
},
|
|
1754
|
+
path: "/SalesOrderItem",
|
|
1755
|
+
expectedValue: "key1,key2,prop1",
|
|
1756
|
+
message: "with technical keys and immutable prop"
|
|
1757
|
+
}, {
|
|
1758
|
+
metaModel: {
|
|
1759
|
+
getObject: function (sPath) {
|
|
1760
|
+
switch (sPath) {
|
|
1761
|
+
case "/SalesOrderItem/":
|
|
1762
|
+
return {
|
|
1763
|
+
"$Key": ["key1", "key2"],
|
|
1764
|
+
"key1": {
|
|
1765
|
+
$kind: "Property"
|
|
1766
|
+
},
|
|
1767
|
+
"key2": {
|
|
1768
|
+
$kind: "Property"
|
|
1769
|
+
},
|
|
1770
|
+
"prop1": {
|
|
1771
|
+
$kind: "Property"
|
|
1772
|
+
}
|
|
1773
|
+
};
|
|
1774
|
+
|
|
1775
|
+
default:
|
|
1776
|
+
return {};
|
|
1777
|
+
}
|
|
1778
|
+
}
|
|
1779
|
+
},
|
|
1780
|
+
path: "/SalesOrderItem",
|
|
1781
|
+
expectedValue: "key1,key2",
|
|
1782
|
+
message: "with technical keys and no immutable prop"
|
|
1783
|
+
}, {
|
|
1784
|
+
metaModel: {
|
|
1785
|
+
getObject: function (sPath) {
|
|
1786
|
+
switch (sPath) {
|
|
1787
|
+
case "/SalesOrderItem/":
|
|
1788
|
+
return {
|
|
1789
|
+
"$Key": ["key1", "key2"],
|
|
1790
|
+
"key1": {
|
|
1791
|
+
$kind: "Property"
|
|
1792
|
+
},
|
|
1793
|
+
"key2": {
|
|
1794
|
+
$kind: "Property"
|
|
1795
|
+
},
|
|
1796
|
+
"prop1": {
|
|
1797
|
+
$kind: "Property"
|
|
1798
|
+
}
|
|
1799
|
+
};
|
|
1800
|
+
|
|
1801
|
+
case "/SalesOrderItem/key2@":
|
|
1802
|
+
return {
|
|
1803
|
+
"@Org.OData.Core.V1.Computed": true
|
|
1804
|
+
};
|
|
1805
|
+
|
|
1806
|
+
case "/SalesOrderItem/prop1@":
|
|
1807
|
+
return {
|
|
1808
|
+
"@Org.OData.Core.V1.Immutable": true
|
|
1809
|
+
};
|
|
1810
|
+
|
|
1811
|
+
default:
|
|
1812
|
+
return {};
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
},
|
|
1816
|
+
path: "/SalesOrderItem",
|
|
1817
|
+
expectedValue: "key1,prop1",
|
|
1818
|
+
message: "with a computed technical key"
|
|
1819
|
+
}, {
|
|
1820
|
+
metaModel: {
|
|
1821
|
+
getObject: function (sPath) {
|
|
1822
|
+
switch (sPath) {
|
|
1823
|
+
case "/SalesOrderItem/":
|
|
1824
|
+
return {
|
|
1825
|
+
"$Key": ["key1", "key2"],
|
|
1826
|
+
"key1": {
|
|
1827
|
+
$kind: "Property"
|
|
1828
|
+
},
|
|
1829
|
+
"key2": {
|
|
1830
|
+
$kind: "Property"
|
|
1831
|
+
},
|
|
1832
|
+
"prop1": {
|
|
1833
|
+
$kind: "Property"
|
|
1834
|
+
}
|
|
1835
|
+
};
|
|
1836
|
+
|
|
1837
|
+
case "/SalesOrderItem/key2@":
|
|
1838
|
+
return {
|
|
1839
|
+
"@com.sap.vocabularies.UI.v1.Hidden": true
|
|
1840
|
+
};
|
|
1841
|
+
|
|
1842
|
+
case "/SalesOrderItem/prop1@":
|
|
1843
|
+
return {
|
|
1844
|
+
"@Org.OData.Core.V1.Immutable": true
|
|
1845
|
+
};
|
|
1846
|
+
|
|
1847
|
+
default:
|
|
1848
|
+
return {};
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
},
|
|
1852
|
+
path: "/SalesOrderItem",
|
|
1853
|
+
expectedValue: "key1,prop1",
|
|
1854
|
+
message: "with a hidden technical key"
|
|
1855
|
+
}, {
|
|
1856
|
+
metaModel: {
|
|
1857
|
+
getObject: function (sPath) {
|
|
1858
|
+
switch (sPath) {
|
|
1859
|
+
case "/SalesOrderItem/":
|
|
1860
|
+
return {
|
|
1861
|
+
"$Key": ["key1", "key2"],
|
|
1862
|
+
"key1": {
|
|
1863
|
+
$kind: "Property"
|
|
1864
|
+
},
|
|
1865
|
+
"key2": {
|
|
1866
|
+
$kind: "Property"
|
|
1867
|
+
},
|
|
1868
|
+
"prop1": {
|
|
1869
|
+
$kind: "Property"
|
|
1870
|
+
}
|
|
1871
|
+
};
|
|
1872
|
+
|
|
1873
|
+
case "/SalesOrderItem/prop1@":
|
|
1874
|
+
return {
|
|
1875
|
+
"@Org.OData.Core.V1.Immutable": true,
|
|
1876
|
+
"@com.sap.vocabularies.UI.v1.Hidden": true
|
|
1877
|
+
};
|
|
1878
|
+
|
|
1879
|
+
default:
|
|
1880
|
+
return {};
|
|
1881
|
+
}
|
|
1882
|
+
}
|
|
1883
|
+
},
|
|
1884
|
+
path: "/SalesOrderItem",
|
|
1885
|
+
expectedValue: "key1,key2",
|
|
1886
|
+
message: "with a hidden property"
|
|
1887
|
+
}, {
|
|
1888
|
+
metaModel: {
|
|
1889
|
+
getObject: function (sPath) {
|
|
1890
|
+
switch (sPath) {
|
|
1891
|
+
case "/SalesOrderItem/":
|
|
1892
|
+
return {
|
|
1893
|
+
"$Key": ["key1", "key2"],
|
|
1894
|
+
"key1": {
|
|
1895
|
+
$kind: "Property"
|
|
1896
|
+
},
|
|
1897
|
+
"key2": {
|
|
1898
|
+
$kind: "Property"
|
|
1899
|
+
},
|
|
1900
|
+
"prop1": {
|
|
1901
|
+
$kind: "Property"
|
|
1902
|
+
}
|
|
1903
|
+
};
|
|
1904
|
+
|
|
1905
|
+
case "/SalesOrderItem/prop1@":
|
|
1906
|
+
return {
|
|
1907
|
+
"@Org.OData.Core.V1.Immutable": true,
|
|
1908
|
+
"@Org.OData.Core.V1.Computed": true
|
|
1909
|
+
};
|
|
1910
|
+
|
|
1911
|
+
default:
|
|
1912
|
+
return {};
|
|
1913
|
+
}
|
|
1914
|
+
}
|
|
1915
|
+
},
|
|
1916
|
+
path: "/SalesOrderItem",
|
|
1917
|
+
expectedValue: "key1,key2",
|
|
1918
|
+
message: "with a computed property"
|
|
1919
|
+
}].forEach(function (oData) {
|
|
1920
|
+
var aKeyFields = CommonUtils.getNonComputedVisibleFields(oData.metaModel, oData.path);
|
|
1921
|
+
expect(aKeyFields.toString()).toEqual(oData.expectedValue); // ,"getNonComputedVisibleFields executed " + oData.message + " -- OK"
|
|
1922
|
+
});
|
|
1923
|
+
});
|
|
1924
|
+
});
|
|
1925
|
+
describe("Unit Test for checking Semantic Object Mappings", function () {
|
|
1926
|
+
test("Testing if semantic Object mappings are getting correcty replaced in the context or not", function () {
|
|
1927
|
+
var oSelectionVariant1 = new SelectionVariant();
|
|
1928
|
+
var oSelectionVariant2 = new SelectionVariant();
|
|
1929
|
+
oSelectionVariant1.addSelectOption("SalesOrder", "I", "EQ", "2919682", undefined);
|
|
1930
|
+
oSelectionVariant1.addSelectOption("Delivered", "I", "EQ", "false", undefined);
|
|
1931
|
+
oSelectionVariant2.addSelectOption("SalesOrder", "I", "EQ", "2919682", undefined);
|
|
1932
|
+
oSelectionVariant2.addSelectOption("Completed", "I", "EQ", "false", undefined);
|
|
1933
|
+
var sMapping1 = '[{"LocalProperty":{"$PropertyPath":"Delivered"},"SemanticObjectProperty":"Completed"}]'; // var sMapping2 = '[{"LocalProperty":{"$PropertyPath":"isImageUrl"},"SemanticObjectProperty":"ImageAddress"}]';
|
|
1934
|
+
|
|
1935
|
+
expect(JSON.stringify(CommonUtils.setSemanticObjectMappings(oSelectionVariant1, sMapping1))).toEqual(JSON.stringify(oSelectionVariant2));
|
|
1936
|
+
});
|
|
1937
|
+
test("Testing if SelectionVariant remains unchanged if no Mapping matches with any field in context", function () {
|
|
1938
|
+
var oSelectionVariant1 = new SelectionVariant();
|
|
1939
|
+
var oSelectionVariant2 = new SelectionVariant();
|
|
1940
|
+
oSelectionVariant1.addSelectOption("SalesOrder", "I", "EQ", "2919682", undefined);
|
|
1941
|
+
oSelectionVariant1.addSelectOption("Delivered", "I", "EQ", "false", undefined);
|
|
1942
|
+
oSelectionVariant2.addSelectOption("SalesOrder", "I", "EQ", "2919682", undefined);
|
|
1943
|
+
oSelectionVariant2.addSelectOption("Completed", "I", "EQ", "false", undefined); // var sMapping1 = '[{"LocalProperty":{"$PropertyPath":"Delivered"},"SemanticObjectProperty":"Completed"}]';
|
|
1944
|
+
|
|
1945
|
+
var sMapping2 = '[{"LocalProperty":{"$PropertyPath":"isImageUrl"},"SemanticObjectProperty":"ImageAddress"}]';
|
|
1946
|
+
expect(JSON.stringify(CommonUtils.setSemanticObjectMappings(oSelectionVariant1, sMapping2))).toEqual(JSON.stringify(oSelectionVariant1));
|
|
1947
|
+
});
|
|
1948
|
+
});
|
|
1949
|
+
describe("Unit Test for getHeaderFacetItemConfigForExternalNavigation", function () {
|
|
1950
|
+
test("Unit Test for getHeaderFacetItemConfigForExternalNavigation", function () {
|
|
1951
|
+
[{
|
|
1952
|
+
viewData: {
|
|
1953
|
+
controlConfiguration: {
|
|
1954
|
+
"@com.sap.vocabularies.UI.v1.DataPoint#dp1": {
|
|
1955
|
+
"navigation": {
|
|
1956
|
+
"targetOutbound": {
|
|
1957
|
+
"outbound": "outbound1"
|
|
1958
|
+
}
|
|
1959
|
+
}
|
|
1960
|
+
},
|
|
1961
|
+
"@com.sap.vocabularies.UI.v1.DataPoint#dp2": {
|
|
1962
|
+
"navigation": {
|
|
1963
|
+
"targetOutbound": {
|
|
1964
|
+
"outbound": "outbound1"
|
|
1965
|
+
},
|
|
1966
|
+
"targetSections": {
|
|
1967
|
+
"sectionId": "sectionID1"
|
|
1968
|
+
}
|
|
1969
|
+
}
|
|
1970
|
+
},
|
|
1971
|
+
"@com.sap.vocabularies.UI.v1.Chart#chart1": {
|
|
1972
|
+
"navigation": {
|
|
1973
|
+
"targetOutbound": {
|
|
1974
|
+
"outbound": "outbound1"
|
|
1975
|
+
},
|
|
1976
|
+
"targetSections": {
|
|
1977
|
+
"sectionId": "sectionID1"
|
|
1978
|
+
}
|
|
1979
|
+
}
|
|
1980
|
+
},
|
|
1981
|
+
"@com.sap.vocabularies.UI.v1.Chart#chart2": {
|
|
1982
|
+
"navigation": {
|
|
1983
|
+
"targetSections": {
|
|
1984
|
+
"sectionId": "sectionID1"
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1987
|
+
},
|
|
1988
|
+
"_Partner/@com.sap.vocabularies.UI.v1.LineItem": {
|
|
1989
|
+
"tableSettings": {
|
|
1990
|
+
"personalization": false
|
|
1991
|
+
}
|
|
1992
|
+
}
|
|
1993
|
+
}
|
|
1994
|
+
},
|
|
1995
|
+
crossNav: {
|
|
1996
|
+
"outbound1": {
|
|
1997
|
+
semanticObject: "SO1",
|
|
1998
|
+
action: "action1"
|
|
1999
|
+
}
|
|
2000
|
+
},
|
|
2001
|
+
expectedValue: {
|
|
2002
|
+
"fe::HeaderDPLink::DataPoint::dp1": {
|
|
2003
|
+
"action": "action1",
|
|
2004
|
+
"semanticObject": "SO1",
|
|
2005
|
+
"semanticObjectMapping": []
|
|
2006
|
+
},
|
|
2007
|
+
"fe::HeaderDPLink::DataPoint::dp2": {
|
|
2008
|
+
"action": "action1",
|
|
2009
|
+
"semanticObject": "SO1",
|
|
2010
|
+
"semanticObjectMapping": []
|
|
2011
|
+
},
|
|
2012
|
+
"fe::MicroChartLink::Chart::chart1": {
|
|
2013
|
+
"action": "action1",
|
|
2014
|
+
"semanticObject": "SO1",
|
|
2015
|
+
"semanticObjectMapping": []
|
|
2016
|
+
}
|
|
2017
|
+
},
|
|
2018
|
+
message: "with target outbound configured with valid SO-action"
|
|
2019
|
+
}, {
|
|
2020
|
+
viewData: {
|
|
2021
|
+
controlConfiguration: {
|
|
2022
|
+
"@com.sap.vocabularies.UI.v1.DataPoint#dp1": {
|
|
2023
|
+
"navigation": {
|
|
2024
|
+
"targetOutbound": {
|
|
2025
|
+
"outbound": "outbound1"
|
|
2026
|
+
}
|
|
2027
|
+
}
|
|
2028
|
+
},
|
|
2029
|
+
"@com.sap.vocabularies.UI.v1.DataPoint#dp2": {
|
|
2030
|
+
"navigation": {
|
|
2031
|
+
"targetOutbound": {
|
|
2032
|
+
"outbound": "outbound1"
|
|
2033
|
+
},
|
|
2034
|
+
"targetSections": {
|
|
2035
|
+
"sectionId": "sectionID1"
|
|
2036
|
+
}
|
|
2037
|
+
}
|
|
2038
|
+
},
|
|
2039
|
+
"@com.sap.vocabularies.UI.v1.Chart#chart1": {
|
|
2040
|
+
"navigation": {
|
|
2041
|
+
"targetOutbound": {
|
|
2042
|
+
"outbound": "outbound1"
|
|
2043
|
+
},
|
|
2044
|
+
"targetSections": {
|
|
2045
|
+
"sectionId": "sectionID1"
|
|
2046
|
+
}
|
|
2047
|
+
}
|
|
2048
|
+
},
|
|
2049
|
+
"@com.sap.vocabularies.UI.v1.Chart#chart2": {
|
|
2050
|
+
"navigation": {
|
|
2051
|
+
"targetSections": {
|
|
2052
|
+
"sectionId": "sectionID1"
|
|
2053
|
+
}
|
|
2054
|
+
}
|
|
2055
|
+
},
|
|
2056
|
+
"_Partner/@com.sap.vocabularies.UI.v1.LineItem": {
|
|
2057
|
+
"tableSettings": {
|
|
2058
|
+
"personalization": false
|
|
2059
|
+
}
|
|
2060
|
+
}
|
|
2061
|
+
}
|
|
2062
|
+
},
|
|
2063
|
+
crossNav: {
|
|
2064
|
+
"outbound1": {}
|
|
2065
|
+
},
|
|
2066
|
+
expectedValue: {},
|
|
2067
|
+
message: "with target outbound configured with no SO-action"
|
|
2068
|
+
}, {
|
|
2069
|
+
viewData: {
|
|
2070
|
+
controlConfiguration: {
|
|
2071
|
+
"@com.sap.vocabularies.UI.v1.DataPoint#dp1": {
|
|
2072
|
+
"navigation": {
|
|
2073
|
+
"targetOutbound": {
|
|
2074
|
+
"outbound": "outbound1"
|
|
2075
|
+
}
|
|
2076
|
+
}
|
|
2077
|
+
},
|
|
2078
|
+
"@com.sap.vocabularies.UI.v1.Chart#chart1": {
|
|
2079
|
+
"navigation": {
|
|
2080
|
+
"targetOutbound": {
|
|
2081
|
+
"outbound": "outbound1"
|
|
2082
|
+
}
|
|
2083
|
+
}
|
|
2084
|
+
}
|
|
2085
|
+
}
|
|
2086
|
+
},
|
|
2087
|
+
crossNav: {
|
|
2088
|
+
"outbound1": {
|
|
2089
|
+
semanticObject: "SO1",
|
|
2090
|
+
action: "action1",
|
|
2091
|
+
parameters: {
|
|
2092
|
+
"mappedProperty1": {
|
|
2093
|
+
"value": {
|
|
2094
|
+
"value": "mainProperty1",
|
|
2095
|
+
"format": "binding"
|
|
2096
|
+
}
|
|
2097
|
+
},
|
|
2098
|
+
"mappedProperty2": {
|
|
2099
|
+
"value": {
|
|
2100
|
+
"value": "mainProperty2",
|
|
2101
|
+
"format": "plain"
|
|
2102
|
+
}
|
|
2103
|
+
},
|
|
2104
|
+
"mainProperty3": {
|
|
2105
|
+
"defaultValue": {
|
|
2106
|
+
"value": "UserDefault.GLAccount",
|
|
2107
|
+
"format": "reference"
|
|
2108
|
+
},
|
|
2109
|
+
"filter": {
|
|
2110
|
+
"value": "\\d+",
|
|
2111
|
+
"format": "regexp"
|
|
2112
|
+
}
|
|
2113
|
+
}
|
|
2114
|
+
}
|
|
2115
|
+
}
|
|
2116
|
+
},
|
|
2117
|
+
expectedValue: {
|
|
2118
|
+
"fe::HeaderDPLink::DataPoint::dp1": {
|
|
2119
|
+
"action": "action1",
|
|
2120
|
+
"semanticObject": "SO1",
|
|
2121
|
+
"semanticObjectMapping": [{
|
|
2122
|
+
"LocalProperty": {
|
|
2123
|
+
"$PropertyPath": "mainProperty1"
|
|
2124
|
+
},
|
|
2125
|
+
"SemanticObjectProperty": "mappedProperty1"
|
|
2126
|
+
}]
|
|
2127
|
+
},
|
|
2128
|
+
"fe::MicroChartLink::Chart::chart1": {
|
|
2129
|
+
"action": "action1",
|
|
2130
|
+
"semanticObject": "SO1",
|
|
2131
|
+
"semanticObjectMapping": [{
|
|
2132
|
+
"LocalProperty": {
|
|
2133
|
+
"$PropertyPath": "mainProperty1"
|
|
2134
|
+
},
|
|
2135
|
+
"SemanticObjectProperty": "mappedProperty1"
|
|
2136
|
+
}]
|
|
2137
|
+
}
|
|
2138
|
+
},
|
|
2139
|
+
message: "with target outbound configured with valid SO-action and semantic mapping"
|
|
2140
|
+
}].forEach(function (oData) {
|
|
2141
|
+
var oHeaderFacetItems = CommonUtils.getHeaderFacetItemConfigForExternalNavigation(oData.viewData, oData.crossNav);
|
|
2142
|
+
expect(oHeaderFacetItems).toEqual(oData.expectedValue); // , "Unit test to check getHeaderFacetItemConfigForExternalNavigation " + oData.message + ": ok"
|
|
2143
|
+
});
|
|
2144
|
+
});
|
|
2145
|
+
});
|
|
2146
|
+
describe("Unit Test for getSemanticObjectMapping", function () {
|
|
2147
|
+
test("Unit Test for getSemanticObjectMapping", function () {
|
|
2148
|
+
[{
|
|
2149
|
+
outbound: {
|
|
2150
|
+
"outbound1": {
|
|
2151
|
+
semanticObject: "SO1",
|
|
2152
|
+
action: "action1"
|
|
2153
|
+
}
|
|
2154
|
+
},
|
|
2155
|
+
expectedValue: [],
|
|
2156
|
+
message: "with target outbound configured no semanticobject mapping"
|
|
2157
|
+
}, {
|
|
2158
|
+
outbound: {
|
|
2159
|
+
semanticObject: "SO1",
|
|
2160
|
+
action: "action1",
|
|
2161
|
+
parameters: {
|
|
2162
|
+
"mappedProperty1": {
|
|
2163
|
+
"value": {
|
|
2164
|
+
"value": "mainProperty1",
|
|
2165
|
+
"format": "binding"
|
|
2166
|
+
}
|
|
2167
|
+
},
|
|
2168
|
+
"mappedProperty2": {
|
|
2169
|
+
"value": {
|
|
2170
|
+
"value": "mainProperty2",
|
|
2171
|
+
"format": "plain"
|
|
2172
|
+
}
|
|
2173
|
+
},
|
|
2174
|
+
"mainProperty3": {
|
|
2175
|
+
"defaultValue": {
|
|
2176
|
+
"value": "UserDefault.GLAccount",
|
|
2177
|
+
"format": "reference"
|
|
2178
|
+
},
|
|
2179
|
+
"filter": {
|
|
2180
|
+
"value": "\\d+",
|
|
2181
|
+
"format": "regexp"
|
|
2182
|
+
}
|
|
2183
|
+
},
|
|
2184
|
+
"mappedProperty4": {
|
|
2185
|
+
"value": {
|
|
2186
|
+
"value": "mainProperty4",
|
|
2187
|
+
"format": "binding"
|
|
2188
|
+
}
|
|
2189
|
+
}
|
|
2190
|
+
}
|
|
2191
|
+
},
|
|
2192
|
+
expectedValue: [{
|
|
2193
|
+
"LocalProperty": {
|
|
2194
|
+
"$PropertyPath": "mainProperty1"
|
|
2195
|
+
},
|
|
2196
|
+
"SemanticObjectProperty": "mappedProperty1"
|
|
2197
|
+
}, {
|
|
2198
|
+
"LocalProperty": {
|
|
2199
|
+
"$PropertyPath": "mainProperty4"
|
|
2200
|
+
},
|
|
2201
|
+
"SemanticObjectProperty": "mappedProperty4"
|
|
2202
|
+
}],
|
|
2203
|
+
message: "with target outbound configured with valid SO-action and semantic mapping"
|
|
2204
|
+
}].forEach(function (oData) {
|
|
2205
|
+
var oHeaderFacetItems = CommonUtils.getSemanticObjectMapping(oData.outbound);
|
|
2206
|
+
expect(oHeaderFacetItems).toEqual(oData.expectedValue); // ,"Unit test to check getSemanticObjectMapping " + oData.message + ": ok"
|
|
2207
|
+
});
|
|
2208
|
+
});
|
|
2209
|
+
describe("fnOnStrictHandlingFailed", function () {
|
|
2210
|
+
test("fnOnStrictHandlingFailed for unbound action and single 412 message from backend", function () {
|
|
2211
|
+
try {
|
|
2212
|
+
var confirmWarning;
|
|
2213
|
+
var confirmSelection = "UnboundAction";
|
|
2214
|
+
jest.spyOn(MessageBox, "warning").mockImplementation(function (msg, options) {
|
|
2215
|
+
return confirmWarning.call(null, msg, options);
|
|
2216
|
+
});
|
|
2217
|
+
|
|
2218
|
+
confirmWarning = function (msg, options) {
|
|
2219
|
+
expect(options.title).toEqual("Warning");
|
|
2220
|
+
expect(msg).toEqual("Unable to execute the action due to a warning" + "\n" + "Proceed anyway?");
|
|
2221
|
+
options.onClose(confirmSelection);
|
|
2222
|
+
};
|
|
2223
|
+
|
|
2224
|
+
var oModel = {
|
|
2225
|
+
submitBatch: jest.fn().mockReturnValue(Promise.resolve({}))
|
|
2226
|
+
};
|
|
2227
|
+
var aMessages = [{
|
|
2228
|
+
message: "Unable to execute the action due to a warning"
|
|
2229
|
+
}];
|
|
2230
|
+
return Promise.resolve(CommonUtils.fnOnStrictHandlingFailed("actionImport", "UnboundAction", oModel, aMessages)).then(function () {});
|
|
2231
|
+
} catch (e) {
|
|
2232
|
+
return Promise.reject(e);
|
|
2233
|
+
}
|
|
2234
|
+
});
|
|
2235
|
+
test("fnOnStrictHandlingFailed for unbound action and multiple 412 messages from backend - ignore warnings and continue", function () {
|
|
2236
|
+
try {
|
|
2237
|
+
var oMockprepareMessageViewForDialog = jest.spyOn(MessageHandling, "prepareMessageViewForDialog");
|
|
2238
|
+
oMockprepareMessageViewForDialog.mockImplementationOnce(function () {
|
|
2239
|
+
var oMessageView = new MessageView({
|
|
2240
|
+
showDetailsPageHeader: false
|
|
2241
|
+
});
|
|
2242
|
+
return {
|
|
2243
|
+
oMessageView: oMessageView,
|
|
2244
|
+
bhasEtagMessage: false
|
|
2245
|
+
};
|
|
2246
|
+
});
|
|
2247
|
+
var oDialogOpenStub = jest.spyOn(Dialog.prototype, "open");
|
|
2248
|
+
oDialogOpenStub.mockImplementation(function () {
|
|
2249
|
+
var oActionButton = this.getBeginButton();
|
|
2250
|
+
oActionButton.firePress();
|
|
2251
|
+
});
|
|
2252
|
+
var oModel = {
|
|
2253
|
+
submitBatch: jest.fn().mockReturnValue(Promise.resolve({}))
|
|
2254
|
+
};
|
|
2255
|
+
var aMessages = [{
|
|
2256
|
+
message: "Unable to execute the action due to a warning"
|
|
2257
|
+
}, {
|
|
2258
|
+
message: "Unable to execute the action due to a warning"
|
|
2259
|
+
}];
|
|
2260
|
+
return Promise.resolve(expect(CommonUtils.fnOnStrictHandlingFailed("actionImport", "UnboundAction", oModel, aMessages))).then(function () {
|
|
2261
|
+
expect(oMockprepareMessageViewForDialog).toHaveBeenCalledTimes(1);
|
|
2262
|
+
expect(oDialogOpenStub).toHaveBeenCalledTimes(1);
|
|
2263
|
+
});
|
|
2264
|
+
} catch (e) {
|
|
2265
|
+
return Promise.reject(e);
|
|
2266
|
+
}
|
|
2267
|
+
});
|
|
2268
|
+
test("fnOnStrictHandlingFailed for unbound action and multiple 412 messages from backend - cancel", function () {
|
|
2269
|
+
try {
|
|
2270
|
+
var oMockprepareMessageViewForDialog = jest.spyOn(MessageHandling, "prepareMessageViewForDialog");
|
|
2271
|
+
oMockprepareMessageViewForDialog.mockImplementationOnce(function () {
|
|
2272
|
+
var oMessageView = new MessageView({
|
|
2273
|
+
showDetailsPageHeader: false
|
|
2274
|
+
});
|
|
2275
|
+
return {
|
|
2276
|
+
oMessageView: oMessageView,
|
|
2277
|
+
bhasEtagMessage: false
|
|
2278
|
+
};
|
|
2279
|
+
});
|
|
2280
|
+
var oDialogOpenStub = jest.spyOn(Dialog.prototype, "open");
|
|
2281
|
+
oDialogOpenStub.mockImplementation(function () {
|
|
2282
|
+
var oActionButton = this.getEndButton();
|
|
2283
|
+
oActionButton.firePress();
|
|
2284
|
+
});
|
|
2285
|
+
var oModel = {
|
|
2286
|
+
submitBatch: jest.fn().mockReturnValue(Promise.resolve({}))
|
|
2287
|
+
};
|
|
2288
|
+
var aMessages = [{
|
|
2289
|
+
message: "Unable to execute the action due to a warning"
|
|
2290
|
+
}, {
|
|
2291
|
+
message: "Unable to execute the action due to a warning"
|
|
2292
|
+
}];
|
|
2293
|
+
return Promise.resolve(expect(CommonUtils.fnOnStrictHandlingFailed("actionImport", "UnboundAction", oModel, aMessages))).then(function () {
|
|
2294
|
+
expect(oMockprepareMessageViewForDialog).toHaveBeenCalledTimes(2);
|
|
2295
|
+
expect(oDialogOpenStub).toHaveBeenCalledTimes(2);
|
|
2296
|
+
});
|
|
2297
|
+
} catch (e) {
|
|
2298
|
+
return Promise.reject(e);
|
|
2299
|
+
}
|
|
2300
|
+
});
|
|
2301
|
+
});
|
|
2302
|
+
});
|
|
2303
|
+
});
|
|
2304
|
+
}, false);
|
|
2305
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnNwZWMudHMiXSwibmFtZXMiOlsibWV0YU1vZGVsIiwiYmVmb3JlQWxsIiwic01ldGFkYXRhVXJsIiwiY29tcGlsZUNEUyIsInBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwiZ2V0TWV0YU1vZGVsIiwiZGVzY3JpYmUiLCJpdCIsIm9VcmlQYXJhbXMiLCJvSW5ib3VuZHMiLCJvRXhwZWN0ZWRPdXRwdXQiLCJTYWxlc09yZGVyVHlwZSIsIlNhbGVzT3JnYW5pemF0aW9uIiwiYWN0dWFsT3V0cHV0IiwiQ29tbW9uVXRpbHMiLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwiZXhwZWN0IiwidG9FcXVhbCIsInVuZGVmaW5lZCIsImFFeHBlY3RlZE91dHB1dCIsImdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsIm9WaWV3IiwiaXNBIiwiamVzdCIsImZuIiwibW9ja1JldHVyblZhbHVlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsInRvSGF2ZUJlZW5DYWxsZWQiLCJkYXRhRmllbGQiLCJvQ29udGV4dCIsImdldE9iamVjdCIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJleHBlY3RlZFZhbHVlIiwic01lc3NhZ2UiLCJmb3JFYWNoIiwib1Byb3BlcnR5IiwiYWN0dWFsVmFsdWUiLCJnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSIsImFUZXN0cyIsInRpdGxlIiwiaW5wdXQiLCJleHBlY3RlZCIsInRlc3QiLCJub3JtYWxpemVTZWFyY2hUZXJtIiwidG9CZSIsImdldE1vZGVsIiwic1BhcmFtIiwiJGtpbmQiLCJnZXRQcm9wZXJ0eSIsImlzU3RpY2t5RWRpdE1vZGUiLCJvQ29udHJvbCIsImlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZSIsImZpZWxkQ29udHJvbFBhdGgiLCJhdHRyaWJ1dGUiLCJhQXR0cmlidXRlcyIsIm9NZXRhTW9kZWwiLCJzUGF0aCIsImluZGV4T2YiLCJFeHBlY3RlZFJlc3VsdCIsIlJlc3VsdCIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJKU09OIiwic3RyaW5naWZ5IiwiZm5DcmVhdGVNb2RlbCIsIm9Nb2RlbCIsIk9iamVjdCIsImFzc2lnbiIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibW9kZWwiLCJlbnRpdHlTZXRQYXRoIiwicHJvcGVydHkiLCJza2lwSGlkZGVuRmlsdGVyIiwibWVzc2FnZSIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJ0aGF0IiwiYmVmb3JlRWFjaCIsImdldFZhbHVlU3R1YiIsInNweU9uIiwiRmlsdGVySGVscGVyIiwibW9ja0ltcGxlbWVudGF0aW9uIiwiZmFrZUZuIiwib1ZhbHVlIiwiZ2V0T3BlcmF0b3JTdHViIiwiZ2V0VmFsaWRQcm9wc1N0dWIiLCJ2YWxpZFByb3BlcnRpZXMiLCJnZXRGaWx0ZXJhYmxlU3R1YiIsImdldFBhcmFtZXRlckluZm9TdHViIiwicGFyYW1ldGVySW5mbyIsImFmdGVyRWFjaCIsIm1vY2tSZXN0b3JlIiwib1NWIiwiU2VsZWN0aW9uVmFyaWFudCIsIm9Db25kaXRpb25zIiwiYWRkU2VsZWN0T3B0aW9uIiwiYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyIsImtleXMiLCJsZW5ndGgiLCIkVHlwZSIsImlDb3VudCIsImluY2x1ZGVzIiwiJGlzQ29sbGVjdGlvbiIsImFQcm9wZXJ0aWVzIiwic1Byb3BlcnR5TmFtZSIsInZhbHVlcyIsImNvbnRleHRQYXRoIiwicGFyYW1ldGVyUHJvcGVydGllcyIsInBhcmFtMVZhbHVlIiwicGFyYW0yVmFsdWUiLCJvSW5wdXRTZWxlY3Rpb25WYXJpYW50Iiwib1RhcmdldEluZm8iLCJtRmlsdGVycyIsIm9PdXRQdXRTZWxlY3Rpb25WYXJpYW50IiwiYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQiLCJvQWN0dWFsU2VsZWN0aW9uVmFyaWFudCIsIl9tUGFyYW1ldGVycyIsIl9tU2VsZWN0T3B0aW9ucyIsIl9zSWQiLCJhTWFuZGF0b3J5RmllbGRzIiwib0FwcERhdGEiLCJvRXhwZWN0ZWRWYWx1ZSIsIm9TZWxlY3Rpb25WYXJpYW50Iiwib0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQiLCJvVGVzdERhdGEiLCJhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5IiwiZ2V0U2VsZWN0T3B0aW9uIiwiTG93Iiwib0RhdGEiLCJhS2V5RmllbGRzIiwidG9TdHJpbmciLCJvU2VsZWN0aW9uVmFyaWFudDEiLCJvU2VsZWN0aW9uVmFyaWFudDIiLCJzTWFwcGluZzEiLCJzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwic01hcHBpbmcyIiwidmlld0RhdGEiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImNyb3NzTmF2Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwib0hlYWRlckZhY2V0SXRlbXMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvdXRib3VuZCIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsImNvbmZpcm1XYXJuaW5nIiwiY29uZmlybVNlbGVjdGlvbiIsIk1lc3NhZ2VCb3giLCJtc2ciLCJvcHRpb25zIiwiY2FsbCIsIm9uQ2xvc2UiLCJzdWJtaXRCYXRjaCIsIlByb21pc2UiLCJyZXNvbHZlIiwiYU1lc3NhZ2VzIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwib01vY2twcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJNZXNzYWdlSGFuZGxpbmciLCJtb2NrSW1wbGVtZW50YXRpb25PbmNlIiwib01lc3NhZ2VWaWV3IiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJiaGFzRXRhZ01lc3NhZ2UiLCJvRGlhbG9nT3BlblN0dWIiLCJEaWFsb2ciLCJwcm90b3R5cGUiLCJvQWN0aW9uQnV0dG9uIiwiZ2V0QmVnaW5C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QSxlQUFlLENBQUNwRixrQkFBaEIsQ0FBbUMsWUFBdUI7QUFDekQsa0JBQU11RixhQUFhLEdBQUcsS0FBS0ksWUFBTCxFQUF0QjtBQUNBSixjQUFBQSxhQUFhLENBQUNFLFNBQWQ7QUFDQSxhQUhEO0FBSUEsZ0JBQU16RyxNQUF3QixHQUFHO0FBQ2hDd0YsY0FBQUEsV0FBVyxFQUFFckksSUFBSSxDQUFDQyxFQUFMLEdBQVVDLGVBQVYsQ0FBMEJvSSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FBMUI7QUFEbUIsYUFBakM7QUFHQSxnQkFBTUMsU0FBUyxHQUFHLENBQ2pCO0FBQ0NuRixjQUFBQSxPQUFPLEVBQUU7QUFEVixhQURpQixFQUlqQjtBQUNDQSxjQUFBQSxPQUFPLEVBQUU7QUFEVixhQUppQixDQUFsQjtBQW5Cb0gsbUNBMkI5RzVELE1BQU0sQ0FBQ0YsV0FBVyxDQUFDa0osd0JBQVosQ0FBcUMsY0FBckMsRUFBcUQsZUFBckQsRUFBc0U1RixNQUF0RSxFQUE4RTJGLFNBQTlFLENBQUQsQ0EzQndHO0FBNEJwSC9JLGNBQUFBLE1BQU0sQ0FBQ2lKLGdDQUFELENBQU4sQ0FBeUNhLHFCQUF6QyxDQUErRCxDQUEvRDtBQUNBOUosY0FBQUEsTUFBTSxDQUFDd0osZUFBRCxDQUFOLENBQXdCTSxxQkFBeEIsQ0FBOEMsQ0FBOUM7QUE3Qm9IO0FBOEJwSCxXQTlCRztBQUFBO0FBQUE7QUFBQSxVQUFKO0FBK0JBLE9BeEZPLENBQVI7QUF5RkEsS0EvSk8sQ0FBUjtBQWdLQSxHQWx4RU8sQ0FBUiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgeyBjb21waWxlQ0RTLCBnZXRNZXRhTW9kZWwgfSBmcm9tIFwic2FwL2ZlL3Rlc3QvSmVzdFRlbXBsYXRpbmdIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0ICogYXMgRmlsdGVySGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpbHRlckhlbHBlclwiO1xuaW1wb3J0IE1lc3NhZ2VWaWV3IGZyb20gXCJzYXAvbS9NZXNzYWdlVmlld1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvYWN0aW9ucy9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5cbmxldCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuYmVmb3JlQWxsKGFzeW5jIGZ1bmN0aW9uKCkge1xuXHRjb25zdCBzTWV0YWRhdGFVcmwgPSBjb21waWxlQ0RTKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi9kYXRhL2NvbXB1dGVkRGVmYXVsdFZhbHVlU2VydmljZS5jZHNcIikpO1xuXHRtZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcbn0pO1xuXG5kZXNjcmliZShcIkNvbW1vblV0aWxzXCIsIGZ1bmN0aW9uKCkge1xuXHRkZXNjcmliZShcImdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGVcIiwgZnVuY3Rpb24oKSB7XG5cdFx0aXQoXCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlXCIsIGFzeW5jIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3Qgb1VyaVBhcmFtcyA9IHtcblx0XHRcdFx0XCJTYWxlc09yZGVyVHlwZVwiOiBbXCJPUlwiXSxcblx0XHRcdFx0XCJTYWxlc09yZ2FuaXphdGlvblwiOiBbXCIxXCJdXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb0luYm91bmRzID0ge1xuXHRcdFx0XHRcIlNhbGVzT3JkZXJUeXBlXCI6IHtcblx0XHRcdFx0XHRcInVzZUZvckNyZWF0ZVwiOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiU2FsZXNPcmdhbml6YXRpb25cIjoge1xuXHRcdFx0XHRcdFwidXNlRm9yQ3JlYXRlXCI6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJEaXN0cmlidXRpb25DaGFubmVsXCI6IHtcblx0XHRcdFx0XHRcInVzZUZvckNyZWF0ZVwiOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBvRXhwZWN0ZWRPdXRwdXQgPSB7XG5cdFx0XHRcdFNhbGVzT3JkZXJUeXBlOiBcIk9SXCIsXG5cdFx0XHRcdFNhbGVzT3JnYW5pemF0aW9uOiBcIjFcIlxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGFjdHVhbE91dHB1dCA9IENvbW1vblV0aWxzLmdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUob1VyaVBhcmFtcywgb0luYm91bmRzKTtcblx0XHRcdGV4cGVjdChhY3R1YWxPdXRwdXQpLnRvRXF1YWwob0V4cGVjdGVkT3V0cHV0KTtcblx0XHR9KTtcblxuXHRcdGl0KFwiZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSAtIG5vIHN0YXJ0IHVwIHBhcmFtZXRlcnNcIiwgYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBvVXJpUGFyYW1zID0ge307XG5cdFx0XHRjb25zdCBvSW5ib3VuZHMgPSB7XG5cdFx0XHRcdFwiU2FsZXNPcmRlclR5cGVcIjoge1xuXHRcdFx0XHRcdFwidXNlRm9yQ3JlYXRlXCI6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJTYWxlc09yZ2FuaXphdGlvblwiOiB7XG5cdFx0XHRcdFx0XCJ1c2VGb3JDcmVhdGVcIjogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcIkRpc3RyaWJ1dGlvbkNoYW5uZWxcIjoge1xuXHRcdFx0XHRcdFwidXNlRm9yQ3JlYXRlXCI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IG9FeHBlY3RlZE91dHB1dCA9IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGFjdHVhbE91dHB1dCA9IENvbW1vblV0aWxzLmdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUob1VyaVBhcmFtcywgb0luYm91bmRzKTtcblx0XHRcdGV4cGVjdChhY3R1YWxPdXRwdXQpLnRvRXF1YWwob0V4cGVjdGVkT3V0cHV0KTtcblx0XHR9KTtcblxuXHRcdGl0KFwiZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSAtIG5vIEluYm91bmQgUGFyYW1ldGVyc1wiLCBhc3luYyBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IG9VcmlQYXJhbXMgPSB7XG5cdFx0XHRcdFwiU2FsZXNPcmRlclR5cGVcIjogW1wiT1JcIl0sXG5cdFx0XHRcdFwiU2FsZXNPcmdhbml6YXRpb25cIjogW1wiMVwiXVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IG9JbmJvdW5kcyA9IHt9O1xuXHRcdFx0Y29uc3Qgb0V4cGVjdGVkT3V0cHV0ID0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgYWN0dWFsT3V0cHV0ID0gQ29tbW9uVXRpbHMuZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShvVXJpUGFyYW1zLCBvSW5ib3VuZHMpO1xuXHRcdFx0ZXhwZWN0KGFjdHVhbE91dHB1dCkudG9FcXVhbChvRXhwZWN0ZWRPdXRwdXQpO1xuXHRcdH0pO1xuXG5cdFx0aXQoXCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIC0gbm8gSW5ib3VuZCBhbmQgc3RhcnQgdXAgUGFyYW1ldGVyc1wiLCBhc3luYyBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IG9VcmlQYXJhbXMgPSB7fTtcblx0XHRcdGNvbnN0IG9JbmJvdW5kcyA9IHt9O1xuXHRcdFx0Y29uc3Qgb0V4cGVjdGVkT3V0cHV0ID0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgYWN0dWFsT3V0cHV0ID0gQ29tbW9uVXRpbHMuZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShvVXJpUGFyYW1zLCBvSW5ib3VuZHMpO1xuXHRcdFx0ZXhwZWN0KGFjdHVhbE91dHB1dCkudG9FcXVhbChvRXhwZWN0ZWRPdXRwdXQpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcImdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkc1wiLCBmdW5jdGlvbigpIHtcblx0XHRpdChcImdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyAtIEdVSUQgQ29tcHV0ZWREZWZhdWx0VmFsdWUga2V5IGZpZWxkIHdpdGggdGV4dCBhbm5vdGF0aW9uXCIsIGFzeW5jIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3QgYUV4cGVjdGVkT3V0cHV0ID0gW1wiSURcIiwgXCJJbW11dGFibGVOb25LZXlXaXRoVGV4dFwiLCBcIkltbXV0YWJsZU5vbktleVdpdGhvdXRUZXh0XCJdO1xuXHRcdFx0Y29uc3QgYWN0dWFsT3V0cHV0ID0gQ29tbW9uVXRpbHMuZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG1ldGFNb2RlbCwgXCIvRW50aXR5V2l0aEtleUZpZWxkSGF2aW5nVGV4dFwiKTtcblx0XHRcdGV4cGVjdChhY3R1YWxPdXRwdXQpLnRvRXF1YWwoYUV4cGVjdGVkT3V0cHV0KTtcblx0XHR9KTtcblxuXHRcdGl0KFwiZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzIC0gR1VJRCBDb21wdXRlZERlZmF1bHRWYWx1ZSBrZXkgZmllbGQgd2l0aG91dCB0ZXh0IGFubm90YXRpb25cIiwgYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBhRXhwZWN0ZWRPdXRwdXQ6IGFueVtdID0gW107XG5cdFx0XHRjb25zdCBhY3R1YWxPdXRwdXQgPSBDb21tb25VdGlscy5nZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMobWV0YU1vZGVsLCBcIi9FbnRpdHlXaXRoS2V5RmllbGROb3RIYXZpbmdUZXh0XCIpO1xuXHRcdFx0ZXhwZWN0KGFjdHVhbE91dHB1dCkudG9FcXVhbChhRXhwZWN0ZWRPdXRwdXQpO1xuXHRcdH0pO1xuXG5cdFx0aXQoXCJnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMgLSBIaWRkZW4gR1VJRCBDb21wdXRlZERlZmF1bHRWYWx1ZSBrZXkgZmllbGRcIiwgYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBhRXhwZWN0ZWRPdXRwdXQ6IGFueVtdID0gW107XG5cdFx0XHRjb25zdCBhY3R1YWxPdXRwdXQgPSBDb21tb25VdGlscy5nZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMobWV0YU1vZGVsLCBcIi9FbnRpdHlXaXRoSGlkZGVuS2V5RmllbGRcIik7XG5cdFx0XHRleHBlY3QoYWN0dWFsT3V0cHV0KS50b0VxdWFsKGFFeHBlY3RlZE91dHB1dCk7XG5cdFx0fSk7XG5cblx0XHRpdChcImdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyAtIFJlYWRPbmx5IEdVSUQgQ29tcHV0ZWREZWZhdWx0VmFsdWUga2V5IGZpZWxkXCIsIGFzeW5jIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3QgYUV4cGVjdGVkT3V0cHV0OiBhbnlbXSA9IFtcIklEXCJdO1xuXHRcdFx0Y29uc3QgYWN0dWFsT3V0cHV0ID0gQ29tbW9uVXRpbHMuZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG1ldGFNb2RlbCwgXCIvRW50aXR5V2l0aFJlYWRPbmx5S2V5RmllbGRIYXZpbmdUZXh0XCIpO1xuXHRcdFx0ZXhwZWN0KGFjdHVhbE91dHB1dCkudG9FcXVhbChhRXhwZWN0ZWRPdXRwdXQpO1xuXHRcdH0pO1xuXG5cdFx0aXQoXCJnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMgLSBSZWFkT25seSBHVUlEIENvbXB1dGVkRGVmYXVsdFZhbHVlIGtleSBmaWVsZFwiLCBhc3luYyBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IGFFeHBlY3RlZE91dHB1dDogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IGFjdHVhbE91dHB1dCA9IENvbW1vblV0aWxzLmdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyhtZXRhTW9kZWwsIFwiL0VudGl0eVdpdGhSZWFkT25seUtleUZpZWxkTm90SGF2aW5nVGV4dFwiKTtcblx0XHRcdGV4cGVjdChhY3R1YWxPdXRwdXQpLnRvRXF1YWwoYUV4cGVjdGVkT3V0cHV0KTtcblx0XHR9KTtcblxuXHRcdGl0KFwiZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzIC0gR1VJRCBrZXkgZmllbGQgd2l0aCBib3RoIENvbXB1dGVkIGFuZCBDb21wdXRlRGVmYXVsdFZhbHVlIGFubm90YXRpb24gd2l0aG91dCB2aWV3XCIsIGFzeW5jIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3QgYUV4cGVjdGVkT3V0cHV0OiBhbnlbXSA9IFtdO1xuXHRcdFx0Y29uc3QgYWN0dWFsT3V0cHV0ID0gQ29tbW9uVXRpbHMuZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG1ldGFNb2RlbCwgXCIvRW50aXR5V2l0aENvbXB1dGVkQW5kQ29tcHV0ZWREZWZhdWx0VmFsdWVLZXlGaWVsZFwiKTtcblx0XHRcdGV4cGVjdChhY3R1YWxPdXRwdXQpLnRvRXF1YWwoYUV4cGVjdGVkT3V0cHV0KTtcblx0XHR9KTtcblxuXHRcdGl0KFwiZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzIC0gR1VJRCBrZXkgZmllbGQgd2l0aCBib3RoIENvbXB1dGVkIGFuZCBDb21wdXRlRGVmYXVsdFZhbHVlIGFubm90YXRpb25cIiwgYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBhRXhwZWN0ZWRPdXRwdXQ6IGFueVtdID0gW107XG5cdFx0XHRjb25zdCBvVmlldyA9IHtcblx0XHRcdFx0aXNBOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHRydWUpLFxuXHRcdFx0XHRnZXREaWFnbm9zdGljczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRcdFx0YWRkSXNzdWU6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoXCJcIilcblx0XHRcdFx0fSlcblx0XHRcdH07XG5cdFx0XHRjb25zdCBhY3R1YWxPdXRwdXQgPSBDb21tb25VdGlscy5nZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMoXG5cdFx0XHRcdG1ldGFNb2RlbCxcblx0XHRcdFx0XCIvRW50aXR5V2l0aENvbXB1dGVkQW5kQ29tcHV0ZWREZWZhdWx0VmFsdWVLZXlGaWVsZFwiLFxuXHRcdFx0XHRvVmlld1xuXHRcdFx0KTtcblx0XHRcdGV4cGVjdChvVmlldy5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cdFx0XHRleHBlY3QoYWN0dWFsT3V0cHV0KS50b0VxdWFsKGFFeHBlY3RlZE91dHB1dCk7XG5cdFx0fSk7XG5cdH0pO1xuXHRkZXNjcmliZShcImdldE9wZXJhdG9yc0ZvclByb3BlcnR5XCIsIGZ1bmN0aW9uKCkge1xuXHRcdGl0KFwiZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkgLSBTaW5nbGUgVmFsdWUgQWxsb3dlZCBFeHByZXNzaW9uc1wiLCBhc3luYyBmdW5jdGlvbigpIHtcblx0XHRcdFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGRhdGFGaWVsZDogXCJTYWxlc09yZGVyRGF0ZVwiLFxuXHRcdFx0XHRcdG9Db250ZXh0OiB7XG5cdFx0XHRcdFx0XHRnZXRPYmplY3Q6IGZ1bmN0aW9uKHBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHQvLyBFZG0gdHlwZVxuXHRcdFx0XHRcdFx0XHRpZiAocGF0aCA9PT0gXCIvZHVtbXkvU2FsZXNPcmRlckRhdGUvJFR5cGVcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIkVkbS5EYXRlXCI7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmlsdGVyIEFubm90YXRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnM6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFByb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IFwiU2FsZXNPcmRlckRhdGVcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEFsbG93ZWRFeHByZXNzaW9uczogXCJTaW5nbGVWYWx1ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRleHBlY3RlZFZhbHVlOlxuXHRcdFx0XHRcdFx0XCJEQVRFLFRPREFZLFlFU1RFUkRBWSxUT01PUlJPVyxGSVJTVERBWVdFRUssTEFTVERBWVdFRUssRklSU1REQVlNT05USCxMQVNUREFZTU9OVEgsRklSU1REQVlRVUFSVEVSLExBU1REQVlRVUFSVEVSLEZJUlNUREFZWUVBUixMQVNUREFZWUVBUlwiLFxuXHRcdFx0XHRcdHNNZXNzYWdlOiBcIkVkbS5EYXRlIGFuZCBTaW5nbGUgVmFsdWUgT3IgU2VhcmNoIEV4cHJlc3Npb25zXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGRhdGFGaWVsZDogXCJTYWxlc09yZGVyRGF0ZVwiLFxuXHRcdFx0XHRcdG9Db250ZXh0OiB7XG5cdFx0XHRcdFx0XHRnZXRPYmplY3Q6IGZ1bmN0aW9uKHBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHQvLyBFZG0gdHlwZVxuXHRcdFx0XHRcdFx0XHRpZiAocGF0aCA9PT0gXCIvZHVtbXkvU2FsZXNPcmRlckRhdGUvJFR5cGVcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIkVkbS5TdHJpbmdcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBGaWx0ZXIgQW5ub3RhdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0UHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogXCJTYWxlc09yZGVyRGF0ZVwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWxsb3dlZEV4cHJlc3Npb25zOiBcIlNpbmdsZVZhbHVlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IFwiRVFcIixcblx0XHRcdFx0XHRzTWVzc2FnZTogXCJFZG0uU3RyaW5nIGFuZCBTaW5nbGUgVmFsdWUgT3IgU2VhcmNoIEV4cHJlc3Npb25zXCJcblx0XHRcdFx0fVxuXHRcdFx0XS5mb3JFYWNoKGZ1bmN0aW9uKG9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCBhY3R1YWxWYWx1ZSA9IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5kYXRhRmllbGQsXG5cdFx0XHRcdFx0XCIvZHVtbXlcIixcblx0XHRcdFx0XHRvUHJvcGVydHkub0NvbnRleHQsXG5cdFx0XHRcdFx0b1Byb3BlcnR5Lm9Db250ZXh0LmdldE9iamVjdChcIi9kdW1teS9cIiArIG9Qcm9wZXJ0eS5kYXRhRmllbGQgKyBcIi8kVHlwZVwiKSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cGVjdChhY3R1YWxWYWx1ZSkudG9FcXVhbChvUHJvcGVydHkuZXhwZWN0ZWRWYWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG5cdGRlc2NyaWJlKFwiQ29tbW9uVXRpbHMgLSBub3JtYWxpemVTZWFyY2hUZXJtKCkgaW5wdXQgXCIsIGZ1bmN0aW9uKCkge1xuXHRcdGNvbnN0IGFUZXN0cyA9IFtcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IFwiaXMgYW4gZW1wdHkgc2VhcmNoIHN0cmluZ1wiLFxuXHRcdFx0XHRpbnB1dDogXCJcIixcblx0XHRcdFx0ZXhwZWN0ZWQ6IHVuZGVmaW5lZFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IFwiaXMgYW4gdW5kZWZpbmVkIHNlYXJjaCB0ZXJtXCIsXG5cdFx0XHRcdGlucHV0OiB1bmRlZmluZWQsXG5cdFx0XHRcdGV4cGVjdGVkOiB1bmRlZmluZWRcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBcImlzIGEgZG91YmxlIHF1b3RlXCIsXG5cdFx0XHRcdGlucHV0OiAnXCInLFxuXHRcdFx0XHRleHBlY3RlZDogdW5kZWZpbmVkXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogXCJpcyBhIHNpbmdsZSBxdW90ZVwiLFxuXHRcdFx0XHRpbnB1dDogXCInXCIsXG5cdFx0XHRcdGV4cGVjdGVkOiAnXCJcXCdcIidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBcImNvbnRhaW5zIHR3byB3b3Jkc1wiLFxuXHRcdFx0XHRpbnB1dDogXCJXdXRoZXJpbmcgSGVpZ2h0c1wiLFxuXHRcdFx0XHRleHBlY3RlZDogJ1wiV3V0aGVyaW5nXCIgXCJIZWlnaHRzXCInXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogXCJjb250YWlucyBhIHRhYiBpbiBiZXR3ZWVuXCIsXG5cdFx0XHRcdGlucHV0OiBcIldvcmQwIFdvcmQxXFx0V29yZDIgV29yZDNcIixcblx0XHRcdFx0ZXhwZWN0ZWQ6ICdcIldvcmQwXCIgXCJXb3JkMVwiIFwiV29yZDJcIiBcIldvcmQzXCInXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogXCJjb250YWlucyBhIHJldHVybiBpbiBiZXR3ZWVuXCIsXG5cdFx0XHRcdGlucHV0OiBcIldvcmQwIFdvcmQxXFxuV29yZDJcXHJcXG5Xb3JkM1wiLFxuXHRcdFx0XHRleHBlY3RlZDogJ1wiV29yZDBcIiBcIldvcmQxXCIgXCJXb3JkMlwiIFwiV29yZDNcIidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBcImNvbnRhaW5zIG11bHRpcGxlIHdvcmRzIHdpdGggbXVsdGlwbGUgc3BhY2VzIGF0IHRoZSBiZWdpbm5pbmdcIixcblx0XHRcdFx0aW5wdXQ6IFwiICAgICBXdXRoZXJpbmcsIEhlaWdodHMgUGFydC1JSVwiLFxuXHRcdFx0XHRleHBlY3RlZDogJ1wiV3V0aGVyaW5nLFwiIFwiSGVpZ2h0c1wiIFwiUGFydC1JSVwiJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IFwiY29udGFpbnMgbXVsdGlwbGUgd29yZHMgd2l0aCBtdWx0aXBsZSBzcGFjZXMgaW4gYmV0d2VlblwiLFxuXHRcdFx0XHRpbnB1dDogXCJXdXRoZXJpbmcsICAgIEhlaWdodHMgUGFydC0gIElJXCIsXG5cdFx0XHRcdGV4cGVjdGVkOiAnXCJXdXRoZXJpbmcsXCIgXCJIZWlnaHRzXCIgXCJQYXJ0LVwiIFwiSUlcIidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBcImNvbnRhaW5zIG11bHRpcGxlIHdvcmRzIHdpdGggbXVsdGlwbGUgc3BhY2VzIGF0IHRoZSBlbmRcIixcblx0XHRcdFx0aW5wdXQ6IFwiV3V0aGVyaW5nLCBIZWlnaHRzIFBhcnQtSUkgICAgXCIsXG5cdFx0XHRcdGV4cGVjdGVkOiAnXCJXdXRoZXJpbmcsXCIgXCJIZWlnaHRzXCIgXCJQYXJ0LUlJXCInXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogXCJjb250YWlucyBkb3VibGUgcXVvdGVzIGF0IHRoZSBiZWdpbm5pbmdcIixcblx0XHRcdFx0aW5wdXQ6ICdcIld1dGhlcmluZyBteSBIZWlnaHRzJyxcblx0XHRcdFx0ZXhwZWN0ZWQ6ICdcIld1dGhlcmluZ1wiIFwibXlcIiBcIkhlaWdodHNcIidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBcImNvbnRhaW5zIGRvdWJsZSBxdW90ZXMgaW4gYmV0d2VlblwiLFxuXHRcdFx0XHRpbnB1dDogJ1d1dGhcImVyaW5nJyxcblx0XHRcdFx0ZXhwZWN0ZWQ6ICdcIld1dGhcIiBcImVyaW5nXCInXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogXCJjb250YWlucyBkb3VibGUgcXVvdGVzIGF0IHRoZSBlbmRcIixcblx0XHRcdFx0aW5wdXQ6ICdXdXRoZXJpbmcgbm8gaGVpZ2h0c1wiJyxcblx0XHRcdFx0ZXhwZWN0ZWQ6ICdcIld1dGhlcmluZ1wiIFwibm9cIiBcImhlaWdodHNcIidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBcImNvbnRhaW5zIG11bHRpcGxlIGRvdWJsZSBxdW90ZXMgYXQgdGhlIGJlZ2lubmluZ1wiLFxuXHRcdFx0XHRpbnB1dDogJ1wiXCJXdXRoXCJlcmluZyBIZWlnXCJodHMnLFxuXHRcdFx0XHRleHBlY3RlZDogJ1wiV3V0aFwiIFwiZXJpbmdcIiBcIkhlaWdcIiBcImh0c1wiJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IFwiY29udGFpbnMgbXVsdGlwbGUgZG91YmxlIHF1b3RlcyBpbiBiZXR3ZWVuXCIsXG5cdFx0XHRcdGlucHV0OiAnV3V0aFwiZXJpXCJcIm5nIEhlaWdcImh0cycsXG5cdFx0XHRcdGV4cGVjdGVkOiAnXCJXdXRoXCIgXCJlcmlcIiBcIm5nXCIgXCJIZWlnXCIgXCJodHNcIidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHRpdGxlOiBcImNvbnRhaW5zIG11bHRpcGxlIGRvdWJsZSBxdW90ZXMgYXQgdGhlIGVuZFwiLFxuXHRcdFx0XHRpbnB1dDogJ1d1dGhcImVyaW5nIEhlXCJpZ2h0c1wiXCInLFxuXHRcdFx0XHRleHBlY3RlZDogJ1wiV3V0aFwiIFwiZXJpbmdcIiBcIkhlXCIgXCJpZ2h0c1wiJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IFwiY29udGFpbnMgYSBzcGVjaWFsIGNoYXJhY3RlciBpbiBzdHJpbmdcIixcblx0XHRcdFx0aW5wdXQ6IFwiV3V0aCllcmluZ1wiLFxuXHRcdFx0XHRleHBlY3RlZDogJ1wiV3V0aCllcmluZ1wiJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IFwiY29udGFpbnMgbXVsdGlwbGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHN0cmluZ1wiLFxuXHRcdFx0XHRpbnB1dDogXCJXIXUkdF5oKWVyJmluKmcoXCIsXG5cdFx0XHRcdGV4cGVjdGVkOiAnXCJXIXUkdF5oKWVyJmluKmcoXCInXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHR0aXRsZTogXCJjb250YWlucyBzaW5nbGUgcXVvdGVzIGluIHN0cmluZ1wiLFxuXHRcdFx0XHRpbnB1dDogXCJJdCdzIEFwcGxlJ3MgbmV3IGlQaG9uZVwiLFxuXHRcdFx0XHRleHBlY3RlZDogJ1wiSXRcXCdzXCIgXCJBcHBsZVxcJ3NcIiBcIm5ld1wiIFwiaVBob25lXCInXG5cdFx0XHR9XG5cdFx0XTtcblxuXHRcdGFUZXN0cy5mb3JFYWNoKHRlc3QgPT4ge1xuXHRcdFx0aXQoXG5cdFx0XHRcdHRlc3QudGl0bGUsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInJlZmVyZW5jZXNcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcInR5cGVcIjogXCJKSVJBXCIsXG5cdFx0XHRcdFx0XHRcdFwiSURcIjogXCJGSU9SSVRFQ0hQMS0yMTg0NlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRleHBlY3QoQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybSh0ZXN0LmlucHV0IGFzIHN0cmluZykpLnRvQmUodGVzdC5leHBlY3RlZCk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSk7XG5cdH0pO1xuXHRkZXNjcmliZShcIlVuaXQgVGVzdCBmb3IgaXNTdGlja3lFZGl0TW9kZVwiLCBmdW5jdGlvbigpIHtcblx0XHR0ZXN0KFwiVW5pdCB0ZXN0IHRvIGNoZWNrIGlzU3RpY2t5RWRpdE1vZGVcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcIm9Db250cm9sXCI6IHtcblx0XHRcdFx0XHRcdGdldE1vZGVsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0T2JqZWN0OiBmdW5jdGlvbihzUGFyYW06IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzUGFyYW0gPT09IFwiL1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvb3RFbnRpdHlTZXRcIjogeyAka2luZDogXCJFbnRpdHlTZXRcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRnZXRQcm9wZXJ0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcImV4cGVjdGVkVmFsdWVcIjogdHJ1ZSxcblx0XHRcdFx0XHRcInNNZXNzYWdlXCI6IFwiTWF0Y2hlZFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcIm9Db250cm9sXCI6IHtcblx0XHRcdFx0XHRcdGdldE1vZGVsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0T2JqZWN0OiBmdW5jdGlvbihzUGFyYW06IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzUGFyYW0gPT09IFwiL1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvb3RFbnRpdHlTZXRcIjogeyAka2luZDogXCJFbnRpdHlTZXRcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogbnVsbDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGdldFByb3BlcnR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwiZXhwZWN0ZWRWYWx1ZVwiOiBmYWxzZSxcblx0XHRcdFx0XHRcInNNZXNzYWdlXCI6IFwiTWF0Y2hlZFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcIm9Db250cm9sXCI6IHtcblx0XHRcdFx0XHRcdGdldE1vZGVsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0T2JqZWN0OiBmdW5jdGlvbihzUGFyYW06IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzUGFyYW0gPT09IFwiL1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvb3RFbnRpdHlTZXRcIjogeyAka2luZDogXCJFbnRpdHlTZXRcIiB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRnZXRQcm9wZXJ0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJleHBlY3RlZFZhbHVlXCI6IGZhbHNlLFxuXHRcdFx0XHRcdFwic01lc3NhZ2VcIjogXCJNYXRjaGVkXCJcblx0XHRcdFx0fVxuXHRcdFx0XS5mb3JFYWNoKGZ1bmN0aW9uKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IGFjdHVhbFZhbHVlID0gQ29tbW9uVXRpbHMuaXNTdGlja3lFZGl0TW9kZShvUHJvcGVydHkub0NvbnRyb2wpO1xuXHRcdFx0XHRleHBlY3QoYWN0dWFsVmFsdWUpLnRvRXF1YWwob1Byb3BlcnR5LmV4cGVjdGVkVmFsdWUpOyAvLywgXCJVbml0IHRlc3QgdG8gY2hlY2sgaXNTdGlja3lFZGl0TW9kZSgpIFwiICsgb1Byb3BlcnR5LnNNZXNzYWdlICsgXCIgOiBva1wiKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcIlVuaXQgVGVzdCBmb3IgaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHRlc3QoXCJVbml0IHRlc3QgdG8gY2hlY2sgaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0W1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJhdHRyaWJ1dGVcIjoge1xuXHRcdFx0XHRcdFx0XCJwcm9wMVwiOiBcIkFcIixcblx0XHRcdFx0XHRcdFwicHJvcDJcIjogXCJCXCIsXG5cdFx0XHRcdFx0XHRcImZpZWxkQ29udHJvbFwiOiAwXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcImZpZWxkQ29udHJvbFBhdGhcIjogXCJmaWVsZENvbnRyb2xcIixcblx0XHRcdFx0XHRcImV4cGVjdGVkVmFsdWVcIjogdHJ1ZSxcblx0XHRcdFx0XHRcIm1lc3NhZ2VcIjogXCJmb3IgaW5hcHBsaWNhYmxlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwiYXR0cmlidXRlXCI6IHtcblx0XHRcdFx0XHRcdFwicHJvcDFcIjogXCJBXCIsXG5cdFx0XHRcdFx0XHRcInByb3AyXCI6IFwiQlwiLFxuXHRcdFx0XHRcdFx0XCJmaWVsZENvbnRyb2xcIjogN1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJmaWVsZENvbnRyb2xQYXRoXCI6IFwiZmllbGRDb250cm9sXCIsXG5cdFx0XHRcdFx0XCJleHBlY3RlZFZhbHVlXCI6IGZhbHNlLFxuXHRcdFx0XHRcdFwibWVzc2FnZVwiOiBcImZvciBkaWZmZXJlbnQgdmFsdWVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJhdHRyaWJ1dGVcIjoge1xuXHRcdFx0XHRcdFx0XCJwcm9wMVwiOiBcIkFcIixcblx0XHRcdFx0XHRcdFwicHJvcDJcIjogXCJCXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwiZmllbGRDb250cm9sUGF0aFwiOiBcImZpZWxkQ29udHJvbFwiLFxuXHRcdFx0XHRcdFwiZXhwZWN0ZWRWYWx1ZVwiOiBmYWxzZSxcblx0XHRcdFx0XHRcIm1lc3NhZ2VcIjogXCJ3aGVuIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3RzXCJcblx0XHRcdFx0fVxuXHRcdFx0XS5mb3JFYWNoKGZ1bmN0aW9uKG9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCBhY3R1YWxWYWx1ZSA9IENvbW1vblV0aWxzLmlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShvUHJvcGVydHkuZmllbGRDb250cm9sUGF0aCwgb1Byb3BlcnR5LmF0dHJpYnV0ZSk7XG5cdFx0XHRcdGV4cGVjdChhY3R1YWxWYWx1ZSkudG9FcXVhbChvUHJvcGVydHkuZXhwZWN0ZWRWYWx1ZSk7IC8vICxcIlVuaXQgdGVzdCB0byBjaGVjayBpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUoKSBcIiArIG9Qcm9wZXJ0eS5tZXNzYWdlICsgXCIgOiBva1wiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG5cblx0ZGVzY3JpYmUoXCJVbml0IFRlc3QgZm9yIFJlbW92ZSBTZW5zaXRpdmUgRGF0YVwiLCBmdW5jdGlvbigpIHtcblx0XHR0ZXN0KFwiVW5pdCBUZXN0IHRvIGNoZWNrIHJlbW92ZVNlbnNpdGl2ZURhdGFcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBhQXR0cmlidXRlcyA9IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcImNvbnRleHREYXRhXCI6IHtcblx0XHRcdFx0XHRcdFx0XCIlNDBvZGF0YS5jb250ZXh0XCI6IFwieW9sb1wiLFxuXHRcdFx0XHRcdFx0XHRcIlNlbnNpdGl2ZVByb3BcIjogXCJBXCIsXG5cdFx0XHRcdFx0XHRcdFwiUHVibGljYXRpb25VVUlEXCI6IFwiMDA1MDU2OTEtODE3NS0xZWQ4LTlkYmUtNjRjMTQyNjgzMjZiXCIsXG5cdFx0XHRcdFx0XHRcdFwiRmllbGRDb250cm9sU3RhdGljXCI6IFwiRFwiLFxuXHRcdFx0XHRcdFx0XHRcImZpZWxkQ29udHJvbFwiOiAwXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJlbnRpdHlTZXRcIjogXCJTYWxlc09yZGVyTWFuYWdlXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFwiY29udGV4dERhdGFcIjoge1xuXHRcdFx0XHRcdFx0XHRcIiU0MG9kYXRhLm1ldGFkYXRhRXRhZ1wiOiBcInlvbG9cIixcblx0XHRcdFx0XHRcdFx0XCJFeGNsdWRlTmF2UHJvcFwiOiBcIkJcIixcblx0XHRcdFx0XHRcdFx0XCJQdWJsaWNhdGlvblVVSURcIjogXCIwMDUwNTY5MS04MTc1LTFlZDgtOWRiZS02NGMxNDI2ODMyNjg4OFwiLFxuXHRcdFx0XHRcdFx0XHRcImZpZWxkQ29udHJvbFwiOiA3XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJlbnRpdHlTZXRcIjogXCJTYWxlc09yZGVyTWFuYWdlXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFwiY29udGV4dERhdGFcIjoge1xuXHRcdFx0XHRcdFx0XHRcIkhhc0FjdGl2ZUVudGl0eVwiOiBmYWxzZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFwiZW50aXR5U2V0XCI6IFwiU2FsZXNPcmRlck1hbmFnZVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRvTWV0YU1vZGVsID0ge1xuXHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0aWYgKHNQYXRoLmluZGV4T2YoXCJQdWJsaWNhdGlvblVVSURAXCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFwiJFBhdGhcIjogXCJmaWVsZENvbnRyb2xcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc1BhdGguaW5kZXhPZihcIkZpZWxkQ29udHJvbFN0YXRpY0BcIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XCIkRW51bU1lbWJlclwiOiBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sL0luYXBwbGljYWJsZVwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzUGF0aC5pbmRleE9mKFwiU2Vuc2l0aXZlUHJvcEBcIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFwiJFBhdGhcIjogXCJmaWVsZENvbnRyb2xcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc1BhdGguaW5kZXhPZihcIkV4Y2x1ZGVOYXZQcm9wQFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dFwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcIiRQYXRoXCI6IFwiZmllbGRDb250cm9sXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRFeHBlY3RlZFJlc3VsdCA9IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcImZpZWxkQ29udHJvbFwiOiAwXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcIlB1YmxpY2F0aW9uVVVJRFwiOiBcIjAwNTA1NjkxLTgxNzUtMWVkOC05ZGJlLTY0YzE0MjY4MzI2ODg4XCIsXG5cdFx0XHRcdFx0XHRcImZpZWxkQ29udHJvbFwiOiA3XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcIkhhc0FjdGl2ZUVudGl0eVwiOiBmYWxzZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XTtcblx0XHRcdGNvbnN0IFJlc3VsdCA9IENvbW1vblV0aWxzLnJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwgYXMgYW55KTtcblx0XHRcdGV4cGVjdChKU09OLnN0cmluZ2lmeShFeHBlY3RlZFJlc3VsdCkpLnRvRXF1YWwoSlNPTi5zdHJpbmdpZnkoUmVzdWx0KSk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdGRlc2NyaWJlKFwiVW5pdCBUZXN0IGZvciBpc1Byb3BlcnR5RmlsdGVyYWJsZVwiLCBmdW5jdGlvbigpIHtcblx0XHR0ZXN0KFwiVW5pdCB0ZXN0IHRvIGNoZWNrIGlzUHJvcGVydHlGaWx0ZXJhYmxlIHdpdGggaGlkZGVuXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3QgZm5DcmVhdGVNb2RlbCA9IGZ1bmN0aW9uKG9Nb2RlbDogYW55KSB7XG5cdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNyZWF0ZUJpbmRpbmdDb250ZXh0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRnZXRQcm9wZXJ0eTogb01vZGVsLmdldE9iamVjdFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldFByb3BlcnR5OiBmdW5jdGlvbihzUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzUGF0aCA9PT0gXCIvcGFyYW1ldGVyRW50aXR5L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc1BhdGggPT09IFwiL3BhcmFtZXRlckVudGl0eS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9Nb2RlbFxuXHRcdFx0XHQpO1xuXHRcdFx0fTtcblxuXHRcdFx0W1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAoc1BhdGggPT09IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgXCJwcm9wMVwiOiB7fSB9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZW50aXR5U2V0UGF0aDogXCIvZW50aXR5U2V0XCIsXG5cdFx0XHRcdFx0cHJvcGVydHk6IFwicHJvcDFcIixcblx0XHRcdFx0XHRza2lwSGlkZGVuRmlsdGVyOiBmYWxzZSxcblx0XHRcdFx0XHRleHBlY3RlZFZhbHVlOiBmYWxzZSxcblx0XHRcdFx0XHRtZXNzYWdlOiBcImZ1bGwgcGF0aCBhbmQgaGlkZGVuXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG1vZGVsOiB7XG5cdFx0XHRcdFx0XHRnZXRPYmplY3Q6IGZ1bmN0aW9uKHNQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHNQYXRoID09PSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7IFwicHJvcDFcIjoge30gfTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVudGl0eVNldFBhdGg6IFwiL2VudGl0eVNldFwiLFxuXHRcdFx0XHRcdHByb3BlcnR5OiBcInByb3AxXCIsXG5cdFx0XHRcdFx0c2tpcEhpZGRlbkZpbHRlcjogZmFsc2UsXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZTogZmFsc2UsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJmdWxsIHBhdGggYW5kIGhpZGRlbiBmaWx0ZXJcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAoc1BhdGggPT09IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgXCJwcm9wMVwiOiB7fSB9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZW50aXR5U2V0UGF0aDogXCIvZW50aXR5U2V0XCIsXG5cdFx0XHRcdFx0cHJvcGVydHk6IFwicHJvcDFcIixcblx0XHRcdFx0XHRza2lwSGlkZGVuRmlsdGVyOiBmYWxzZSxcblx0XHRcdFx0XHRleHBlY3RlZFZhbHVlOiBmYWxzZSxcblx0XHRcdFx0XHRtZXNzYWdlOiBcImhpZGRlblwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRtb2RlbDoge1xuXHRcdFx0XHRcdFx0Z2V0T2JqZWN0OiBmdW5jdGlvbihzUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzUGF0aCA9PT0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4geyBcInByb3AxXCI6IHt9IH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlbnRpdHlTZXRQYXRoOiBcIi9lbnRpdHlTZXRcIixcblx0XHRcdFx0XHRwcm9wZXJ0eTogXCJwcm9wMVwiLFxuXHRcdFx0XHRcdHNraXBIaWRkZW5GaWx0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IGZhbHNlLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IFwiaGlkZGVuIGZpbHRlclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRtb2RlbDoge1xuXHRcdFx0XHRcdFx0Z2V0T2JqZWN0OiBmdW5jdGlvbihzUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzUGF0aCA9PT0gXCIvZW50aXR5U2V0QE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IFwicHJvcDFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4geyBcInByb3AxXCI6IHt9IH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlbnRpdHlTZXRQYXRoOiBcIi9lbnRpdHlTZXRcIixcblx0XHRcdFx0XHRwcm9wZXJ0eTogXCJwcm9wMVwiLFxuXHRcdFx0XHRcdHNraXBIaWRkZW5GaWx0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IGZhbHNlLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IFwibm9uLWZpbHRlcmFibGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAoc1BhdGggPT09IFwiL2VudGl0eVNldEBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkUHJvcGVydHlQYXRoOiBcInByb3AxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgXCJwcm9wMVwiOiB7fSB9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZW50aXR5U2V0UGF0aDogXCIvZW50aXR5U2V0XCIsXG5cdFx0XHRcdFx0cHJvcGVydHk6IFwicHJvcDFcIixcblx0XHRcdFx0XHRza2lwSGlkZGVuRmlsdGVyOiBmYWxzZSxcblx0XHRcdFx0XHRleHBlY3RlZFZhbHVlOiBmYWxzZSxcblx0XHRcdFx0XHRtZXNzYWdlOiBcImZ1bGwgcGF0aCBhbmQgbm9uLWZpbHRlcmFibGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiL2VudGl0eVNldC9wcm9wMUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIkVHlwZVwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiRWRtLlN0cmluZ1wiO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIka2luZFwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiUHJvcGVydHlcIjtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiL2VudGl0eVNldC9cIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IFwicHJvcDFcIjoge30gfTtcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZW50aXR5U2V0UGF0aDogXCIvZW50aXR5U2V0XCIsXG5cdFx0XHRcdFx0cHJvcGVydHk6IFwicHJvcDFcIixcblx0XHRcdFx0XHRza2lwSGlkZGVuRmlsdGVyOiB0cnVlLFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IHRydWUsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJza2lwIGhpZGRlbiBmaWx0ZXJcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiJFR5cGVcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIkVkbS5TdHJlYW1cIjtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiJGtpbmRcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIlByb3BlcnR5XCI7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi9lbnRpdHlTZXQvXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBcInByb3AxXCI6IHt9IH07XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVudGl0eVNldFBhdGg6IFwiL2VudGl0eVNldFwiLFxuXHRcdFx0XHRcdHByb3BlcnR5OiBcInByb3AxXCIsXG5cdFx0XHRcdFx0c2tpcEhpZGRlbkZpbHRlcjogZmFsc2UsXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZTogZmFsc2UsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJ0eXBlIG5vdCBmaWx0ZXJhYmxlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG1vZGVsOiB7XG5cdFx0XHRcdFx0XHRnZXRPYmplY3Q6IGZ1bmN0aW9uKHNQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFzUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIiRUeXBlXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJFZG0uU3RyaW5nXCI7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIiRraW5kXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJQcm9wZXJ0eVwiO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvZW50aXR5U2V0L1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgXCJwcm9wMVwiOiB7fSB9O1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlbnRpdHlTZXRQYXRoOiBcIi9lbnRpdHlTZXRcIixcblx0XHRcdFx0XHRwcm9wZXJ0eTogXCJwcm9wMVwiLFxuXHRcdFx0XHRcdHNraXBIaWRkZW5GaWx0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IHRydWUsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJ0eXBlIGZpbHRlcmFibGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiJFR5cGVcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJWYWx1ZS8kUGF0aC8kVHlwZVwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiRWRtLlN0cmVhbVwiO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvZW50aXR5U2V0L1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgXCJwcm9wMVwiOiB7fSB9O1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlbnRpdHlTZXRQYXRoOiBcIi9lbnRpdHlTZXRcIixcblx0XHRcdFx0XHRwcm9wZXJ0eTogXCJwcm9wMVwiLFxuXHRcdFx0XHRcdHNraXBIaWRkZW5GaWx0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IGZhbHNlLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IFwiZGF0YWZpZWxkIHR5cGUgbm90IGZpbHRlcmFibGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiJFR5cGVcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJWYWx1ZS8kUGF0aC8kVHlwZVwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiRWRtLlN0cmluZ1wiO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvZW50aXR5U2V0L1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgXCJwcm9wMVwiOiB7fSB9O1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlbnRpdHlTZXRQYXRoOiBcIi9lbnRpdHlTZXRcIixcblx0XHRcdFx0XHRwcm9wZXJ0eTogXCJwcm9wMVwiLFxuXHRcdFx0XHRcdHNraXBIaWRkZW5GaWx0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IHRydWUsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJkYXRhZmllbGQgdHlwZSBmaWx0ZXJhYmxlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG1vZGVsOiB7fSxcblx0XHRcdFx0XHRlbnRpdHlTZXRQYXRoOiBcIi9wYXJhbWV0ZXJFbnRpdHlcIixcblx0XHRcdFx0XHRwcm9wZXJ0eTogXCJwcm9wMVwiLFxuXHRcdFx0XHRcdHNraXBIaWRkZW5GaWx0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IHRydWUsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJwYXJhbWV0ZXJcIlxuXHRcdFx0XHR9XG5cdFx0XHRdLmZvckVhY2goZnVuY3Rpb24ob1Byb3BlcnR5KSB7XG5cdFx0XHRcdGNvbnN0IGFjdHVhbFZhbHVlID0gQ29tbW9uVXRpbHMuaXNQcm9wZXJ0eUZpbHRlcmFibGUoXG5cdFx0XHRcdFx0Zm5DcmVhdGVNb2RlbChvUHJvcGVydHkubW9kZWwpLFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5lbnRpdHlTZXRQYXRoLFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSxcblx0XHRcdFx0XHRvUHJvcGVydHkuc2tpcEhpZGRlbkZpbHRlclxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHBlY3QoYWN0dWFsVmFsdWUpLnRvRXF1YWwob1Byb3BlcnR5LmV4cGVjdGVkVmFsdWUpOyAvLyAsXCJVbml0IHRlc3QgdG8gY2hlY2sgaXNQcm9wZXJ0eUZpbHRlcmFibGUgd2l0aCBcIiArIG9Qcm9wZXJ0eS5tZXNzYWdlICsgXCIgOiBva1wiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG5cblx0ZGVzY3JpYmUoXCJUZXN0IENvbW1vblV0aWxzIDogYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9uc1wiLCBmdW5jdGlvbigpIHtcblx0XHRjb25zdCB0aGF0OiBhbnkgPSB7fTtcblx0XHRiZWZvcmVFYWNoKCgpID0+IHtcblx0XHRcdC8vQ1JFQVRFIE1PQ0tcblx0XHRcdHRoYXQuZ2V0VmFsdWVTdHViID0gamVzdC5zcHlPbihGaWx0ZXJIZWxwZXIsIFwiZ2V0VHlwZUNvbXBsaWFudFZhbHVlXCIpLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiBmYWtlRm4ob1ZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBvVmFsdWU7XG5cdFx0XHR9KTtcblx0XHRcdHRoYXQuZ2V0T3BlcmF0b3JTdHViID0gamVzdC5zcHlPbihDb21tb25VdGlscywgXCJnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eVwiKS5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24gZmFrZUZuKCkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGF0LmdldFZhbGlkUHJvcHNTdHViID0gamVzdC5zcHlPbihDb21tb25VdGlscywgXCJnZXRDb250ZXh0UGF0aFByb3BlcnRpZXNcIikubW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uIGZha2VGbihvVmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRoYXQudmFsaWRQcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGF0LmdldEZpbHRlcmFibGVTdHViID0gamVzdC5zcHlPbihDb21tb25VdGlscywgXCJpc1Byb3BlcnR5RmlsdGVyYWJsZVwiKS5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24gZmFrZUZuKG9WYWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0dGhhdC5nZXRQYXJhbWV0ZXJJbmZvU3R1YiA9IGplc3Quc3B5T24oQ29tbW9uVXRpbHMsIFwiZ2V0UGFyYW1ldGVySW5mb1wiKS5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24gZmFrZUZuKG9WYWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhhdC5wYXJhbWV0ZXJJbmZvO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0YWZ0ZXJFYWNoKCgpID0+IHtcblx0XHRcdC8vUkVTVE9SRVxuXHRcdFx0dGhhdC5nZXRWYWx1ZVN0dWIubW9ja1Jlc3RvcmUoKTtcblx0XHRcdHRoYXQuZ2V0T3BlcmF0b3JTdHViLm1vY2tSZXN0b3JlKCk7XG5cdFx0XHR0aGF0LmdldFZhbGlkUHJvcHNTdHViLm1vY2tSZXN0b3JlKCk7XG5cdFx0XHR0aGF0LmdldEZpbHRlcmFibGVTdHViLm1vY2tSZXN0b3JlKCk7XG5cdFx0XHR0aGF0LmdldFBhcmFtZXRlckluZm9TdHViLm1vY2tSZXN0b3JlKCk7XG5cdFx0fSk7XG5cblx0XHR0ZXN0KFwiVGVzdCBjb252ZXJ0aW9uIG9mIFNlbGVjdGlvbiBWYXJpYW50IHRvIGNvbmRpdGlvbnMgd2l0aG91dCB2YWxpZCBwcm9wZXJ0aWVzLlwiLCBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IG9TViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KCksXG5cdFx0XHRcdG9Db25kaXRpb25zID0ge307XG5cblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJhdHRyaWJ1dGUxXCIsIFwiSVwiLCBcIkVRXCIsIFwidmFsdWUxXCIpO1xuXHRcdFx0dGhhdC52YWxpZFByb3BlcnRpZXMgPSB7fTtcblx0XHRcdHRoYXQucGFyYW1ldGVySW5mbyA9IHt9O1xuXHRcdFx0Q29tbW9uVXRpbHMuYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyhvU1YsIG9Db25kaXRpb25zLCB7fSBhcyBhbnksIFwiXCIpO1xuXG5cdFx0XHQvL0NIRUNLXG5cdFx0XHRleHBlY3QoT2JqZWN0LmtleXMob0NvbmRpdGlvbnMpLmxlbmd0aCkudG9FcXVhbCgwKTsgLy8sIFwiQ29tbW9uVXRpbHM6IE5vIGNvbmRpdGlvbnMgYXJlIGFkZGVkIHdpdGhvdXQgYW55IHZhbGlkIHByb3BlcnRpZXMuXCIpO1xuXHRcdH0pO1xuXG5cdFx0dGVzdChcIlRlc3QgY29udmVyc2lvbiBvZiBTZWxlY3Rpb24gVmFyaWFudCB0byBjb25kaXRpb25zIHdpdGggZW1wdHkgU1YuXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3Qgb1NWID0gbmV3IFNlbGVjdGlvblZhcmlhbnQoKSxcblx0XHRcdFx0b0NvbmRpdGlvbnMgPSB7fTtcblxuXHRcdFx0dGhhdC52YWxpZFByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdFwiYXR0cmlidXRlMVwiOiB7XG5cdFx0XHRcdFx0JFR5cGU6IFwiRWRtLkJvb2xlYW5cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImF0dHJpYnV0ZTJcIjoge1xuXHRcdFx0XHRcdCRUeXBlOiBcIkVkbS5TdHJpbmdcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dGhhdC5wYXJhbWV0ZXJJbmZvID0ge307XG5cblx0XHRcdENvbW1vblV0aWxzLmFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMob1NWLCBvQ29uZGl0aW9ucywge30gYXMgYW55LCBcIlwiKTtcblxuXHRcdFx0Ly9DSEVDS1xuXHRcdFx0ZXhwZWN0KE9iamVjdC5rZXlzKG9Db25kaXRpb25zKS5sZW5ndGgpLnRvRXF1YWwoMCk7IC8vIFwiQ29tbW9uVXRpbHM6IE5vIGNvbmRpdGlvbnMgYXJlIGFkZGVkIHdpdGggZW1wdHkgU1YuXCIpO1xuXHRcdH0pO1xuXG5cdFx0dGVzdChcIlRlc3QgY29udmVyc2lvbiBvZiBTZWxlY3Rpb24gVmFyaWFudCB0byBjb25kaXRpb25zLlwiLCBmdW5jdGlvbigpIHtcblx0XHRcdGxldCBvU1YgPSBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnM6IGFueSA9IHt9O1xuXHRcdFx0bGV0IGlDb3VudCA9IDA7XG5cblx0XHRcdHRoYXQudmFsaWRQcm9wZXJ0aWVzID0ge1xuXHRcdFx0XHRcImF0dHJpYnV0ZTFcIjoge1xuXHRcdFx0XHRcdCRUeXBlOiBcIkVkbS5Cb29sZWFuXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJhdHRyaWJ1dGUyXCI6IHtcblx0XHRcdFx0XHQkVHlwZTogXCJFZG0uU3RyaW5nXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJNYXRlcmlhbFwiOiB7XG5cdFx0XHRcdFx0JFR5cGU6IFwiRWRtLlN0cmluZ1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiTWF0ZXJpYWxDYXRlZ29yeVwiOiB7XG5cdFx0XHRcdFx0JFR5cGU6IFwiRWRtLlN0cmluZ1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiSXRlbU51bWJlclwiOiB7XG5cdFx0XHRcdFx0JFR5cGU6IFwiRWRtLlN0cmluZ1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiQ2l0eU5hbWVcIjoge1xuXHRcdFx0XHRcdCRUeXBlOiBcIkVkbS5TdHJpbmdcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dGhhdC5wYXJhbWV0ZXJJbmZvID0ge307XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0ge1xuXHRcdFx0XHRnZXRPYmplY3Q6IGZ1bmN0aW9uKHNQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc1BhdGguaW5jbHVkZXMoXCJfSXRlbVwiKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgc1BhdGg6IHNQYXRoLCAkaXNDb2xsZWN0aW9uOiB0cnVlLCAkVHlwZTogXCJFZG0uU3RyaW5nXCIgfTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgc1BhdGg6IHNQYXRoLCAkVHlwZTogXCJFZG0uU3RyaW5nXCIgfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRvU1YuYWRkU2VsZWN0T3B0aW9uKFwiYXR0cmlidXRlMVwiLCBcIklcIiwgXCJFUVwiLCBcInRydWVcIik7XG5cdFx0XHRvU1YuYWRkU2VsZWN0T3B0aW9uKFwiYXR0cmlidXRlMlwiLCBcIklcIiwgXCJFUVwiLCBcInZhbHVlMVwiKTtcblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJhdHRyaWJ1dGUyXCIsIFwiSVwiLCBcIkVRXCIsIFwidmFsdWUyXCIpO1xuXHRcdFx0b1NWLmFkZFNlbGVjdE9wdGlvbihcIlNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWxcIiwgXCJJXCIsIFwiRVFcIiwgXCJWTkcwMVwiKTtcblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJfTWF0ZXJpYWxEZXRhaWxzLk1hdGVyaWFsQ2F0ZWdvcnlcIiwgXCJJXCIsIFwiRVFcIiwgXCJBXCIpO1xuXHRcdFx0b1NWLmFkZFNlbGVjdE9wdGlvbihcIkl0ZW1EZXRhaWxzLkl0ZW1OdW1iZXJcIiwgXCJJXCIsIFwiRVFcIiwgXCIxMFwiKTtcblxuXHRcdFx0Q29tbW9uVXRpbHMuYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyhvU1YsIG9Db25kaXRpb25zLCBvTWV0YU1vZGVsLCBcIi9TYWxlc09yZGVyTWFuYWdlXCIpO1xuXHRcdFx0b1NWID0gbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJDdXN0b21lci5TZXQuQ2l0eU5hbWVcIiwgXCJJXCIsIFwiRVFcIiwgXCJBQkNcIik7XG5cdFx0XHRDb21tb25VdGlscy5hZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zKG9TViwgb0NvbmRpdGlvbnMsIG9NZXRhTW9kZWwsIFwiL0N1c3RvbWVyL1NldFwiKTtcblxuXHRcdFx0Y29uc3QgYVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvQ29uZGl0aW9ucyk7XG5cdFx0XHRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHNQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0aUNvdW50ICs9IG9Db25kaXRpb25zW3NQcm9wZXJ0eU5hbWVdLmxlbmd0aDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvL0NIRUNLXG5cdFx0XHRleHBlY3QoYVByb3BlcnRpZXMubGVuZ3RoKS50b0VxdWFsKDYpOyAvLyBcIkNvbW1vblV0aWxzOiBDb3JyZWN0IG5vLiBvZiBwcm9wZXJ0eVBhdGggYXJlIGFkZGVkIGZyb20gU1YuXCIpO1xuXHRcdFx0ZXhwZWN0KGlDb3VudCkudG9FcXVhbCg3KTsgLy8gXCJDb21tb25VdGlsczogQ29ycmVjdCBuby4gb2YgY29uZGl0aW9ucyBhcmUgYWRkZWQgZnJvbSBTVi5cIik7XG5cdFx0XHRleHBlY3Qob0NvbmRpdGlvbnNbXCJTYWxlc09yZGVyTWFuYWdlL19JdGVtKi9NYXRlcmlhbFwiXVswXS52YWx1ZXNbMF0pLnRvRXF1YWwoXCJWTkcwMVwiKTsgLy8sIFwiQ29uZGl0aW9ucyBmb3IgbmF2aWdhdGlvbiBwYXRoIGlzIGFkZGVkXCIpO1xuXHRcdFx0ZXhwZWN0KG9Db25kaXRpb25zW1wiX01hdGVyaWFsRGV0YWlscy9NYXRlcmlhbENhdGVnb3J5XCJdWzBdLnZhbHVlc1swXSkudG9FcXVhbChcIkFcIik7IC8vLCBcIkNvbmRpdGlvbnMgZm9yIG5hdmlnYXRpb24gcGF0aCBpcyBhZGRlZFwiKTtcblx0XHRcdGV4cGVjdChvQ29uZGl0aW9uc1tcIkl0ZW1EZXRhaWxzL0l0ZW1OdW1iZXJcIl1bMF0udmFsdWVzWzBdKS50b0VxdWFsKFwiMTBcIik7IC8vLCBcIkNvbmRpdGlvbnMgZm9yIG5hdmlnYXRpb24gcGF0aCBpcyBhZGRlZFwiKTtcblx0XHRcdGV4cGVjdChvQ29uZGl0aW9uc1tcIkN1c3RvbWVyL1NldC9DaXR5TmFtZVwiXVswXS52YWx1ZXNbMF0pLnRvRXF1YWwoXCJBQkNcIik7IC8vXCJDb25kaXRpb25zIGZvciBuYXZpZ2F0aW9uIHBhdGggaW4gY2FzZSBvZiBwYW1hdGVyaXplZCBzZXJ2aWNlIGlzIGFkZGVkXCJcblx0XHR9KTtcblxuXHRcdHRlc3QoXCJUZXN0IGNvbnZlcnNpb24gb2YgU2VsZWN0aW9uIFZhcmlhbnQgdG8gY29uZGl0aW9ucyB3aXRoIHBhcmFtZXRlcnMuXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3Qgb1NWID0gbmV3IFNlbGVjdGlvblZhcmlhbnQoKSxcblx0XHRcdFx0b0NvbmRpdGlvbnM6IGFueSA9IHt9O1xuXHRcdFx0bGV0IGlDb3VudCA9IDA7XG5cblx0XHRcdHRoYXQudmFsaWRQcm9wZXJ0aWVzID0ge1xuXHRcdFx0XHRcImF0dHJpYnV0ZTFcIjoge1xuXHRcdFx0XHRcdCRUeXBlOiBcIkVkbS5TdHJpbmdcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dGhhdC5wYXJhbWV0ZXJJbmZvID0ge1xuXHRcdFx0XHRjb250ZXh0UGF0aDogXCIvQ3VzdG9tZXIvU2V0XCIsXG5cdFx0XHRcdHBhcmFtZXRlclByb3BlcnRpZXM6IHtcblx0XHRcdFx0XHRcInBhcmFtMVwiOiB7XG5cdFx0XHRcdFx0XHQkVHlwZTogXCJFZG0uQm9vbGVhblwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInBhcmFtMlwiOiB7XG5cdFx0XHRcdFx0XHQkVHlwZTogXCJFZG0uU3RyaW5nXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJhdHRyaWJ1dGUxXCIsIFwiSVwiLCBcIkVRXCIsIFwidmFsdWUxXCIpO1xuXHRcdFx0b1NWLmFkZFNlbGVjdE9wdGlvbihcIiRQYXJhbWV0ZXIucGFyYW0xXCIsIFwiSVwiLCBcIkVRXCIsIFwidHJ1ZVwiKTtcblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJQX3BhcmFtMlwiLCBcIklcIiwgXCJFUVwiLCBcInBhcmFtVmFsdWUxXCIpO1xuXG5cdFx0XHRDb21tb25VdGlscy5hZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zKG9TViwgb0NvbmRpdGlvbnMsIHt9IGFzIGFueSwgXCJcIik7XG5cblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0NvbmRpdGlvbnMpO1xuXHRcdFx0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihzUHJvcGVydHlOYW1lKSB7XG5cdFx0XHRcdGlDb3VudCArPSBvQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXS5sZW5ndGg7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly9DSEVDS1xuXHRcdFx0ZXhwZWN0KGFQcm9wZXJ0aWVzLmxlbmd0aCkudG9FcXVhbCgzKTsgLy8sIFwiQ29tbW9uVXRpbHM6IENvcnJlY3Qgbm8uIG9mIHByb3BlcnR5UGF0aCBhcmUgYWRkZWQgZnJvbSBTVi5cIik7XG5cdFx0XHRleHBlY3QoaUNvdW50KS50b0VxdWFsKDMpOyAvLywgXCJDb21tb25VdGlsczogQ29ycmVjdCBuby4gb2YgY29uZGl0aW9ucyBhcmUgYWRkZWQgZnJvbSBTVi5cIik7XG5cdFx0fSk7XG5cblx0XHR0ZXN0KFwiVGVzdCBjb252ZXJzaW9uIG9mIFNlbGVjdGlvbiBWYXJpYW50IHRvIGNvbmRpdGlvbnMgd2l0aCBjb25mbGljdGluZyBwYXJhbWV0ZXJzLlwiLCBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IG9TViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KCksXG5cdFx0XHRcdG9Db25kaXRpb25zOiBhbnkgPSB7fTtcblx0XHRcdGxldCBpQ291bnQgPSAwO1xuXG5cdFx0XHR0aGF0LnZhbGlkUHJvcGVydGllcyA9IHtcblx0XHRcdFx0XCJhdHRyaWJ1dGUxXCI6IHtcblx0XHRcdFx0XHQkVHlwZTogXCJFZG0uU3RyaW5nXCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHRoYXQucGFyYW1ldGVySW5mbyA9IHtcblx0XHRcdFx0Y29udGV4dFBhdGg6IFwiL0N1c3RvbWVyL1NldFwiLFxuXHRcdFx0XHRwYXJhbWV0ZXJQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XCJwYXJhbTFcIjoge1xuXHRcdFx0XHRcdFx0JFR5cGU6IFwiRWRtLkJvb2xlYW5cIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJwYXJhbTJcIjoge1xuXHRcdFx0XHRcdFx0JFR5cGU6IFwiRWRtLlN0cmluZ1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRvU1YuYWRkU2VsZWN0T3B0aW9uKFwiYXR0cmlidXRlMVwiLCBcIklcIiwgXCJFUVwiLCBcInZhbHVlMVwiKTtcblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJQX3BhcmFtMVwiLCBcIklcIiwgXCJFUVwiLCBcImZhbHNlXCIpO1xuXHRcdFx0b1NWLmFkZFNlbGVjdE9wdGlvbihcIiRQYXJhbWV0ZXIucGFyYW0xXCIsIFwiSVwiLCBcIkVRXCIsIFwidHJ1ZVwiKTtcblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCIkUGFyYW1ldGVyLnBhcmFtMlwiLCBcIklcIiwgXCJFUVwiLCBcInBhcmFtVmFsdWUyXyRcIik7XG5cdFx0XHRvU1YuYWRkU2VsZWN0T3B0aW9uKFwiUF9wYXJhbTJcIiwgXCJJXCIsIFwiRVFcIiwgXCJwYXJhbVZhbHVlMl9QXCIpO1xuXG5cdFx0XHRDb21tb25VdGlscy5hZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zKG9TViwgb0NvbmRpdGlvbnMsIHt9IGFzIGFueSwgXCJcIik7XG5cblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0NvbmRpdGlvbnMpO1xuXHRcdFx0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihzUHJvcGVydHlOYW1lKSB7XG5cdFx0XHRcdGlDb3VudCArPSBvQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXS5sZW5ndGg7XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgcGFyYW0xVmFsdWUgPSBvQ29uZGl0aW9uc1tcInBhcmFtMVwiXVswXS52YWx1ZXNbMF0gPT09IHRydWU7XG5cdFx0XHRjb25zdCBwYXJhbTJWYWx1ZSA9IG9Db25kaXRpb25zW1wicGFyYW0yXCJdWzBdLnZhbHVlc1swXSA9PT0gXCJwYXJhbVZhbHVlMl8kXCI7XG5cdFx0XHQvL0NIRUNLXG5cdFx0XHRleHBlY3QocGFyYW0xVmFsdWUgJiYgcGFyYW0yVmFsdWUpLnRvQmUodHJ1ZSk7IC8vLCBcIkNvbW1vblV0aWxzOiBDb3JyZWN0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGFkZGVkIGZyb20gU1YuXCIpO1xuXHRcdFx0ZXhwZWN0KGFQcm9wZXJ0aWVzLmxlbmd0aCkudG9FcXVhbCgzKTsgLy8gPT09IDMsIFwiQ29tbW9uVXRpbHM6IENvcnJlY3Qgbm8uIG9mIHByb3BlcnR5UGF0aCBhcmUgYWRkZWQgZnJvbSBTVi5cIik7XG5cdFx0XHRleHBlY3QoaUNvdW50KS50b0VxdWFsKDMpOyAvLyA9PT0gMywgXCJDb21tb25VdGlsczogQ29ycmVjdCBuby4gb2YgY29uZGl0aW9ucyBhcmUgYWRkZWQgZnJvbSBTVi5cIik7XG5cdFx0fSk7XG5cblx0XHR0ZXN0KFwiVGVzdCBjb252ZXJzaW9uIG9mIFNlbGVjdGlvbiBWYXJpYW50IHRvIGNvbmRpdGlvbnMgd2l0aCBwYXJhbWV0ZXJzIGNhc2Ugb2YgJ3BhcmFtIC0+IFBfcGFyYW0nLlwiLCBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IG9TViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KCksXG5cdFx0XHRcdG9Db25kaXRpb25zOiBhbnkgPSB7fTtcblx0XHRcdGxldCBpQ291bnQgPSAwO1xuXG5cdFx0XHR0aGF0LnZhbGlkUHJvcGVydGllcyA9IHtcblx0XHRcdFx0XCJhdHRyaWJ1dGUxXCI6IHtcblx0XHRcdFx0XHQkVHlwZTogXCJFZG0uU3RyaW5nXCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHRoYXQucGFyYW1ldGVySW5mbyA9IHtcblx0XHRcdFx0Y29udGV4dFBhdGg6IFwiL0N1c3RvbWVyL1NldFwiLFxuXHRcdFx0XHRwYXJhbWV0ZXJQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XCJQX3BhcmFtMVwiOiB7XG5cdFx0XHRcdFx0XHQkVHlwZTogXCJFZG0uU3RyaW5nXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJhdHRyaWJ1dGUxXCIsIFwiSVwiLCBcIkVRXCIsIFwidmFsdWUxXCIpO1xuXHRcdFx0b1NWLmFkZFNlbGVjdE9wdGlvbihcInBhcmFtMVwiLCBcIklcIiwgXCJFUVwiLCBcInBhcmFtVmFsdWUxXCIpO1xuXG5cdFx0XHRDb21tb25VdGlscy5hZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zKG9TViwgb0NvbmRpdGlvbnMsIHt9IGFzIGFueSwgXCJcIik7XG5cblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0NvbmRpdGlvbnMpO1xuXHRcdFx0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihzUHJvcGVydHlOYW1lKSB7XG5cdFx0XHRcdGlDb3VudCArPSBvQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXS5sZW5ndGg7XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgcGFyYW0xVmFsdWUgPSBvQ29uZGl0aW9uc1tcIlBfcGFyYW0xXCJdWzBdLnZhbHVlc1swXSA9PT0gXCJwYXJhbVZhbHVlMVwiO1xuXHRcdFx0Ly9DSEVDS1xuXHRcdFx0ZXhwZWN0KHBhcmFtMVZhbHVlKS50b0JlKHRydWUpOyAvLyBcIkNvbW1vblV0aWxzOiBDb3JyZWN0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGFkZGVkIGZyb20gU1YuXCIpO1xuXHRcdFx0ZXhwZWN0KGFQcm9wZXJ0aWVzLmxlbmd0aCkudG9FcXVhbCgyKTsgLy8gPT09IDIsIFwiQ29tbW9uVXRpbHM6IENvcnJlY3Qgbm8uIG9mIHByb3BlcnR5UGF0aCBhcmUgYWRkZWQgZnJvbSBTVi5cIik7XG5cdFx0XHRleHBlY3QoaUNvdW50KS50b0VxdWFsKDIpOyAvLyA9PT0gMiwgXCJDb21tb25VdGlsczogQ29ycmVjdCBuby4gb2YgY29uZGl0aW9ucyBhcmUgYWRkZWQgZnJvbSBTVi5cIik7XG5cdFx0fSk7XG5cblx0XHR0ZXN0KFwiVGVzdCBjb252ZXJzaW9uIG9mIFNlbGVjdGlvbiBWYXJpYW50IHRvIGNvbmRpdGlvbnMgd2l0aCBwYXJhbWV0ZXJzIGNhc2Ugb2YgZmFsbCBiYWNrIHRvIGZpbHRlciBmaWVsZC5cIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBvU1YgPSBuZXcgU2VsZWN0aW9uVmFyaWFudCgpLFxuXHRcdFx0XHRvQ29uZGl0aW9uczogYW55ID0ge307XG5cdFx0XHRsZXQgaUNvdW50ID0gMDtcblxuXHRcdFx0dGhhdC52YWxpZFByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdFwiYXR0cmlidXRlMVwiOiB7XG5cdFx0XHRcdFx0JFR5cGU6IFwiRWRtLlN0cmluZ1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwicGFyYW0yXCI6IHtcblx0XHRcdFx0XHQkVHlwZTogXCJFZG0uU3RyaW5nXCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHRoYXQucGFyYW1ldGVySW5mbyA9IHtcblx0XHRcdFx0Y29udGV4dFBhdGg6IFwiL0N1c3RvbWVyL1NldFwiLFxuXHRcdFx0XHRwYXJhbWV0ZXJQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XCJQX3BhcmFtMVwiOiB7XG5cdFx0XHRcdFx0XHQkVHlwZTogXCJFZG0uU3RyaW5nXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJhdHRyaWJ1dGUxXCIsIFwiSVwiLCBcIkVRXCIsIFwidmFsdWUxXCIpO1xuXHRcdFx0b1NWLmFkZFNlbGVjdE9wdGlvbihcIlBfcGFyYW0yXCIsIFwiSVwiLCBcIkVRXCIsIFwicGFyYW1WYWx1ZTJcIik7XG5cblx0XHRcdENvbW1vblV0aWxzLmFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMob1NWLCBvQ29uZGl0aW9ucywge30gYXMgYW55LCBcIlwiKTtcblxuXHRcdFx0Y29uc3QgYVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvQ29uZGl0aW9ucyk7XG5cdFx0XHRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHNQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0aUNvdW50ICs9IG9Db25kaXRpb25zW3NQcm9wZXJ0eU5hbWVdLmxlbmd0aDtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBwYXJhbTJWYWx1ZSA9IG9Db25kaXRpb25zW1wicGFyYW0yXCJdWzBdLnZhbHVlc1swXSA9PT0gXCJwYXJhbVZhbHVlMlwiO1xuXHRcdFx0Ly9DSEVDS1xuXHRcdFx0ZXhwZWN0KHBhcmFtMlZhbHVlKS50b0JlKHRydWUpOyAvLywgXCJDb21tb25VdGlsczogQ29ycmVjdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBhZGRlZCBmcm9tIFNWLlwiKTtcblx0XHRcdGV4cGVjdChhUHJvcGVydGllcy5sZW5ndGgpLnRvRXF1YWwoMik7IC8vPT0gMiwgXCJDb21tb25VdGlsczogQ29ycmVjdCBuby4gb2YgcHJvcGVydHlQYXRoIGFyZSBhZGRlZCBmcm9tIFNWLlwiKTtcblx0XHRcdGV4cGVjdChpQ291bnQpLnRvRXF1YWwoMik7IC8vLCBcIkNvbW1vblV0aWxzOiBDb3JyZWN0IG5vLiBvZiBjb25kaXRpb25zIGFyZSBhZGRlZCBmcm9tIFNWLlwiKTtcblx0XHR9KTtcblxuXHRcdHRlc3QoXCJUZXN0IGNvbnZlcnNpb24gb2YgU2VsZWN0aW9uIFZhcmlhbnQgdG8gY29uZGl0aW9ucyB3aXRoIGFscmVhZHkgZXhpc3RpbmcgY29uZGl0aW9ucy5cIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBvU1YgPSBuZXcgU2VsZWN0aW9uVmFyaWFudCgpLFxuXHRcdFx0XHRvQ29uZGl0aW9uczogYW55ID0ge1xuXHRcdFx0XHRcdFwiYXR0cmlidXRlMlwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbXCJ2YWx1ZTNcIl1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH07XG5cdFx0XHRsZXQgaUNvdW50ID0gMDtcblxuXHRcdFx0dGhhdC52YWxpZFByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdFwiYXR0cmlidXRlMVwiOiB7XG5cdFx0XHRcdFx0JFR5cGU6IFwiRWRtLkJvb2xlYW5cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImF0dHJpYnV0ZTJcIjoge1xuXHRcdFx0XHRcdCRUeXBlOiBcIkVkbS5TdHJpbmdcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dGhhdC5wYXJhbWV0ZXJJbmZvID0ge307XG5cblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJhdHRyaWJ1dGUxXCIsIFwiSVwiLCBcIkVRXCIsIFwidHJ1ZVwiKTtcblx0XHRcdG9TVi5hZGRTZWxlY3RPcHRpb24oXCJhdHRyaWJ1dGUyXCIsIFwiSVwiLCBcIkVRXCIsIFwidmFsdWUxXCIpO1xuXHRcdFx0b1NWLmFkZFNlbGVjdE9wdGlvbihcImF0dHJpYnV0ZTJcIiwgXCJJXCIsIFwiRVFcIiwgXCJ2YWx1ZTJcIik7XG5cblx0XHRcdENvbW1vblV0aWxzLmFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMob1NWLCBvQ29uZGl0aW9ucywge30gYXMgYW55LCBcIlwiKTtcblxuXHRcdFx0Y29uc3QgYVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvQ29uZGl0aW9ucyk7XG5cdFx0XHRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHNQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0aUNvdW50ICs9IG9Db25kaXRpb25zW3NQcm9wZXJ0eU5hbWVdLmxlbmd0aDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvL0NIRUNLXG5cdFx0XHRleHBlY3QoYVByb3BlcnRpZXMubGVuZ3RoKS50b0VxdWFsKDIpOyAvLyA9PT0gMiwgXCJDb21tb25VdGlsczogQ29ycmVjdCBuby4gb2YgcHJvcGVydHlQYXRoIGFyZSBhZGRlZCBmcm9tIFNWLlwiKTtcblx0XHRcdGV4cGVjdChpQ291bnQpLnRvRXF1YWwoNCk7IC8vIDQsIFwiQ29tbW9uVXRpbHM6IENvcnJlY3Qgbm8uIG9mIGNvbmRpdGlvbnMgYXJlIGFkZGVkIGZyb20gU1YuXCIpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcImFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50XCIsIGZ1bmN0aW9uKCkge1xuXHRcdHRlc3QoXCJhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudFwiLCBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IG9JbnB1dFNlbGVjdGlvblZhcmlhbnQgPSBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSB7XG5cdFx0XHRcdFwicHJvcGVydGllc1dpdGhvdXRDb25mbGljdFwiOiB7XG5cdFx0XHRcdFx0XCJNYXRlcmlhbFwiOiBbXCJTYWxlc09yZGVyTWFuYWdlLk1hdGVyaWFsXCJdXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBtRmlsdGVycyA9IHtcblx0XHRcdFx0XCJmaWx0ZXJDb25kaXRpb25zXCI6IHtcblx0XHRcdFx0XHRcIkRhdGVcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiRVFcIixcblx0XHRcdFx0XHRcdFx0XCJ2YWx1ZXNcIjogW1wiMjAyMC0wMy0wNFwiXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJEYXRlVGltZU9mZnNldFwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbXCIyMDIwLTAzLTA0VDIwOjUzOjU0KzA1MzBcIl1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiVGltZU9mRGF5XCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcIjE2OjUxOjUxXCJdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcIlN0cmluZ1wiOiBbXSxcblx0XHRcdFx0XHRcIkJvb2xlYW5cIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiRUVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFt0cnVlXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJCeXRlXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFs0XVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJCeXRlTXVsdGlcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiTEVcIixcblx0XHRcdFx0XHRcdFx0XCJ2YWx1ZXNcIjogWzVdXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiR0VcIixcblx0XHRcdFx0XHRcdFx0XCJ2YWx1ZXNcIjogWzEwXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJEYXRlVGltZU9mZnNldE11bHRpXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIk5PVEdUXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcIjIwMjAtMDMtMjVUMjA6NTU6NDIrMDUzMFwiXVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIk5PVExUXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcIjIwMjAtMDItMDFUMjA6NTU6NTErMDUzMFwiXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJEZWNpbWFsXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcIjQuNDVcIl1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiRGVjaW1hbE11bHRpXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIk5FXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcIjYuMjVcIl1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiRG91YmxlXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFszLjMzMzMzM11cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiRG91YmxlTXVsdGlcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiTk9UR0VcIixcblx0XHRcdFx0XHRcdFx0XCJ2YWx1ZXNcIjogWzYuNjY2NjY2NjY2XVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIk5PVEdUXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFsxMC4wMDAwMDk5OTk5XVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJHdWlkXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcIjExMTExMTgyLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZlwiXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJHdWlkTXVsdGlcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiRVFcIixcblx0XHRcdFx0XHRcdFx0XCJ2YWx1ZXNcIjogW1wiMTExMTExODMtYWFhYS1iYmJiLWNjY2MtZGRkZGVlZWVmZmZmXCJdXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiRVFcIixcblx0XHRcdFx0XHRcdFx0XCJ2YWx1ZXNcIjogW1wiMTExMTExODUtYWFhYS1iYmJiLWNjY2MtZGRkZGVlZWVmZmZmXCJdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcIkludDE2XCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFsxMF1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiRW1wdHlcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiRW1wdHlcIixcblx0XHRcdFx0XHRcdFx0XCJ2YWx1ZXNcIjogW11cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiSW50MTZNdWx0aVwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbMTVdXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiTk9UR0VcIixcblx0XHRcdFx0XHRcdFx0XCJ2YWx1ZXNcIjogWzEwMDAwXVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIk5PVEJUXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFsxMDAsIDIwMF1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJOT1RMVFwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbMTBdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcIkludDMyXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFs5OTk5OTk5XVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJJbnQzMk11bHRpXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkJUXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFsxMDAwMDAwLCAxMDAwMDAwMDAwXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJJbnQ2NFwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbXCI5OVwiXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJJbnQ2NE11bHRpXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIk5PVExUXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcIjk5OTk5OTlcIl1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJORVwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbXCI5OTk5OVwiXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJTQnl0ZVwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbMV1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiU0J5dGVNdWx0aVwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbMl1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJHVFwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbM11cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiU2luZ2xlXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFsxXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJTaW5nbGVNdWx0aVwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbMl1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiU3RyaW5nTXVsdGlcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiRW5kc1dpdGhcIixcblx0XHRcdFx0XHRcdFx0XCJ2YWx1ZXNcIjogW1wieHl6XCJdXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwiU3RhcnRzV2l0aFwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbXCJhYmNcIl1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJDb250YWluc1wiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbXCJkZWZcIl1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJOb3RTdGFydHNXaXRoXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcImlqa1wiXVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIk5vdEVuZHNXaXRoXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcInV2d1wiXVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIk5vdENvbnRhaW5zXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcInBxclwiXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJUaW1lT2ZEYXlNdWx0aVwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwib3BlcmF0b3JcIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcInZhbHVlc1wiOiBbXCIyMjowMDozOVwiXVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJvcGVyYXRvclwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFwidmFsdWVzXCI6IFtcIjE3OjAwOjQzXCJdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3RcIjoge1xuXHRcdFx0XHRcdFwiTWF0ZXJpYWxcIjogW1wiU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbFwiXVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb091dFB1dFNlbGVjdGlvblZhcmlhbnQgPSBDb21tb25VdGlscy5hZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChcblx0XHRcdFx0b0lucHV0U2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0bUZpbHRlcnMsXG5cdFx0XHRcdG9UYXJnZXRJbmZvXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb0FjdHVhbFNlbGVjdGlvblZhcmlhbnQgPSB7XG5cdFx0XHRcdF9tUGFyYW1ldGVyczoge30sXG5cdFx0XHRcdF9tU2VsZWN0T3B0aW9uczoge1xuXHRcdFx0XHRcdFwiRGF0ZVwiOiBbeyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiRVFcIiwgXCJMb3dcIjogXCIyMDIwLTAzLTA0XCIsIFwiSGlnaFwiOiBudWxsIH1dLFxuXHRcdFx0XHRcdFwiRGF0ZVRpbWVPZmZzZXRcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIlNpZ25cIjogXCJJXCIsXG5cdFx0XHRcdFx0XHRcdFwiT3B0aW9uXCI6IFwiRVFcIixcblx0XHRcdFx0XHRcdFx0XCJMb3dcIjogXCIyMDIwLTAzLTA0VDIwOjUzOjU0KzA1MzBcIixcblx0XHRcdFx0XHRcdFx0XCJIaWdoXCI6IG51bGxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiVGltZU9mRGF5XCI6IFt7IFwiU2lnblwiOiBcIklcIiwgXCJPcHRpb25cIjogXCJFUVwiLCBcIkxvd1wiOiBcIjE2OjUxOjUxXCIsIFwiSGlnaFwiOiBudWxsIH1dLFxuXHRcdFx0XHRcdFwiQm9vbGVhblwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwiU2lnblwiOiBcIklcIixcblx0XHRcdFx0XHRcdFx0XCJPcHRpb25cIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcIkxvd1wiOiBcInRydWVcIixcblx0XHRcdFx0XHRcdFx0XCJIaWdoXCI6IG51bGxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiQnl0ZVwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwiU2lnblwiOiBcIklcIixcblx0XHRcdFx0XHRcdFx0XCJPcHRpb25cIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcIkxvd1wiOiBcIjRcIixcblx0XHRcdFx0XHRcdFx0XCJIaWdoXCI6IG51bGxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiQnl0ZU11bHRpXCI6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJTaWduXCI6IFwiSVwiLFxuXHRcdFx0XHRcdFx0XHRcIk9wdGlvblwiOiBcIkxFXCIsXG5cdFx0XHRcdFx0XHRcdFwiTG93XCI6IFwiNVwiLFxuXHRcdFx0XHRcdFx0XHRcIkhpZ2hcIjogbnVsbFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJEYXRlVGltZU9mZnNldE11bHRpXCI6IFtcblx0XHRcdFx0XHRcdHsgXCJTaWduXCI6IFwiRVwiLCBcIk9wdGlvblwiOiBcIkdUXCIsIFwiTG93XCI6IFwiMjAyMC0wMy0yNVQyMDo1NTo0MiswNTMwXCIsIFwiSGlnaFwiOiBudWxsIH0sXG5cdFx0XHRcdFx0XHR7IFwiU2lnblwiOiBcIkVcIiwgXCJPcHRpb25cIjogXCJMVFwiLCBcIkxvd1wiOiBcIjIwMjAtMDItMDFUMjA6NTU6NTErMDUzMFwiLCBcIkhpZ2hcIjogbnVsbCB9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcIkRlY2ltYWxcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIlNpZ25cIjogXCJJXCIsXG5cdFx0XHRcdFx0XHRcdFwiT3B0aW9uXCI6IFwiRVFcIixcblx0XHRcdFx0XHRcdFx0XCJMb3dcIjogXCI0LjQ1XCIsXG5cdFx0XHRcdFx0XHRcdFwiSGlnaFwiOiBudWxsXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcIkRlY2ltYWxNdWx0aVwiOiBbeyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiTkVcIiwgXCJMb3dcIjogXCI2LjI1XCIsIFwiSGlnaFwiOiBudWxsIH1dLFxuXHRcdFx0XHRcdFwiRG91YmxlXCI6IFt7IFwiU2lnblwiOiBcIklcIiwgXCJPcHRpb25cIjogXCJFUVwiLCBcIkxvd1wiOiBcIjMuMzMzMzMzXCIsIFwiSGlnaFwiOiBudWxsIH1dLFxuXHRcdFx0XHRcdFwiRG91YmxlTXVsdGlcIjogW1xuXHRcdFx0XHRcdFx0eyBcIlNpZ25cIjogXCJFXCIsIFwiT3B0aW9uXCI6IFwiR0VcIiwgXCJMb3dcIjogXCI2LjY2NjY2NjY2NlwiLCBcIkhpZ2hcIjogbnVsbCB9LFxuXHRcdFx0XHRcdFx0eyBcIlNpZ25cIjogXCJFXCIsIFwiT3B0aW9uXCI6IFwiR1RcIiwgXCJMb3dcIjogXCIxMC4wMDAwMDk5OTk5XCIsIFwiSGlnaFwiOiBudWxsIH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiRW1wdHlcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIkhpZ2hcIjogbnVsbCxcblx0XHRcdFx0XHRcdFx0XCJMb3dcIjogXCJcIixcblx0XHRcdFx0XHRcdFx0XCJPcHRpb25cIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcIlNpZ25cIjogXCJJXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiR3VpZFwiOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwiU2lnblwiOiBcIklcIixcblx0XHRcdFx0XHRcdFx0XCJPcHRpb25cIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcIkxvd1wiOiBcIjExMTExMTgyLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZlwiLFxuXHRcdFx0XHRcdFx0XHRcIkhpZ2hcIjogbnVsbFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJHdWlkTXVsdGlcIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcIlNpZ25cIjogXCJJXCIsXG5cdFx0XHRcdFx0XHRcdFwiT3B0aW9uXCI6IFwiRVFcIixcblx0XHRcdFx0XHRcdFx0XCJMb3dcIjogXCIxMTExMTE4My1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmZcIixcblx0XHRcdFx0XHRcdFx0XCJIaWdoXCI6IG51bGxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwiU2lnblwiOiBcIklcIixcblx0XHRcdFx0XHRcdFx0XCJPcHRpb25cIjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcIkxvd1wiOiBcIjExMTExMTg1LWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZlwiLFxuXHRcdFx0XHRcdFx0XHRcIkhpZ2hcIjogbnVsbFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJJbnQxNlwiOiBbeyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiRVFcIiwgXCJMb3dcIjogXCIxMFwiLCBcIkhpZ2hcIjogbnVsbCB9XSxcblx0XHRcdFx0XHRcIkludDE2TXVsdGlcIjogW1xuXHRcdFx0XHRcdFx0eyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiRVFcIiwgXCJMb3dcIjogXCIxNVwiLCBcIkhpZ2hcIjogbnVsbCB9LFxuXHRcdFx0XHRcdFx0eyBcIlNpZ25cIjogXCJFXCIsIFwiT3B0aW9uXCI6IFwiR0VcIiwgXCJMb3dcIjogXCIxMDAwMFwiLCBcIkhpZ2hcIjogbnVsbCB9LFxuXHRcdFx0XHRcdFx0eyBcIlNpZ25cIjogXCJFXCIsIFwiT3B0aW9uXCI6IFwiQlRcIiwgXCJMb3dcIjogXCIxMDBcIiwgXCJIaWdoXCI6IFwiMjAwXCIgfSxcblx0XHRcdFx0XHRcdHsgXCJTaWduXCI6IFwiRVwiLCBcIk9wdGlvblwiOiBcIkxUXCIsIFwiTG93XCI6IFwiMTBcIiwgXCJIaWdoXCI6IG51bGwgfVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJJbnQzMlwiOiBbeyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiRVFcIiwgXCJMb3dcIjogXCI5OTk5OTk5XCIsIFwiSGlnaFwiOiBudWxsIH1dLFxuXHRcdFx0XHRcdFwiSW50MzJNdWx0aVwiOiBbeyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiQlRcIiwgXCJMb3dcIjogXCIxMDAwMDAwXCIsIFwiSGlnaFwiOiBcIjEwMDAwMDAwMDBcIiB9XSxcblx0XHRcdFx0XHRcIkludDY0XCI6IFt7IFwiU2lnblwiOiBcIklcIiwgXCJPcHRpb25cIjogXCJFUVwiLCBcIkxvd1wiOiBcIjk5XCIsIFwiSGlnaFwiOiBudWxsIH1dLFxuXHRcdFx0XHRcdFwiSW50NjRNdWx0aVwiOiBbXG5cdFx0XHRcdFx0XHR7IFwiU2lnblwiOiBcIkVcIiwgXCJPcHRpb25cIjogXCJMVFwiLCBcIkxvd1wiOiBcIjk5OTk5OTlcIiwgXCJIaWdoXCI6IG51bGwgfSxcblx0XHRcdFx0XHRcdHsgXCJTaWduXCI6IFwiSVwiLCBcIk9wdGlvblwiOiBcIk5FXCIsIFwiTG93XCI6IFwiOTk5OTlcIiwgXCJIaWdoXCI6IG51bGwgfVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XCJTQnl0ZVwiOiBbeyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiRVFcIiwgXCJMb3dcIjogXCIxXCIsIFwiSGlnaFwiOiBudWxsIH1dLFxuXHRcdFx0XHRcdFwiU0J5dGVNdWx0aVwiOiBbXG5cdFx0XHRcdFx0XHR7IFwiU2lnblwiOiBcIklcIiwgXCJPcHRpb25cIjogXCJFUVwiLCBcIkxvd1wiOiBcIjJcIiwgXCJIaWdoXCI6IG51bGwgfSxcblx0XHRcdFx0XHRcdHsgXCJTaWduXCI6IFwiSVwiLCBcIk9wdGlvblwiOiBcIkdUXCIsIFwiTG93XCI6IFwiM1wiLCBcIkhpZ2hcIjogbnVsbCB9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcIlNpbmdsZVwiOiBbeyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiRVFcIiwgXCJMb3dcIjogXCIxXCIsIFwiSGlnaFwiOiBudWxsIH1dLFxuXHRcdFx0XHRcdFwiU2luZ2xlTXVsdGlcIjogW3sgXCJTaWduXCI6IFwiSVwiLCBcIk9wdGlvblwiOiBcIkVRXCIsIFwiTG93XCI6IFwiMlwiLCBcIkhpZ2hcIjogbnVsbCB9XSxcblx0XHRcdFx0XHRcIlN0cmluZ011bHRpXCI6IFtcblx0XHRcdFx0XHRcdHsgXCJTaWduXCI6IFwiSVwiLCBcIk9wdGlvblwiOiBcIkNQXCIsIFwiTG93XCI6IFwiKnh5elwiLCBcIkhpZ2hcIjogbnVsbCB9LFxuXHRcdFx0XHRcdFx0eyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiQ1BcIiwgXCJMb3dcIjogXCJhYmMqXCIsIFwiSGlnaFwiOiBudWxsIH0sXG5cdFx0XHRcdFx0XHR7IFwiU2lnblwiOiBcIklcIiwgXCJPcHRpb25cIjogXCJDUFwiLCBcIkxvd1wiOiBcImRlZlwiLCBcIkhpZ2hcIjogbnVsbCB9LFxuXHRcdFx0XHRcdFx0eyBcIlNpZ25cIjogXCJFXCIsIFwiT3B0aW9uXCI6IFwiQ1BcIiwgXCJMb3dcIjogXCJpamsqXCIsIFwiSGlnaFwiOiBudWxsIH0sXG5cdFx0XHRcdFx0XHR7IFwiU2lnblwiOiBcIkVcIiwgXCJPcHRpb25cIjogXCJDUFwiLCBcIkxvd1wiOiBcIip1dndcIiwgXCJIaWdoXCI6IG51bGwgfSxcblx0XHRcdFx0XHRcdHsgXCJTaWduXCI6IFwiRVwiLCBcIk9wdGlvblwiOiBcIkNQXCIsIFwiTG93XCI6IFwicHFyXCIsIFwiSGlnaFwiOiBudWxsIH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFwiVGltZU9mRGF5TXVsdGlcIjogW1xuXHRcdFx0XHRcdFx0eyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiRVFcIiwgXCJMb3dcIjogXCIyMjowMDozOVwiLCBcIkhpZ2hcIjogbnVsbCB9LFxuXHRcdFx0XHRcdFx0eyBcIlNpZ25cIjogXCJJXCIsIFwiT3B0aW9uXCI6IFwiRVFcIiwgXCJMb3dcIjogXCIxNzowMDo0M1wiLCBcIkhpZ2hcIjogbnVsbCB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRfc0lkOiBcIlwiXG5cdFx0XHR9O1xuXHRcdFx0ZXhwZWN0KG9BY3R1YWxTZWxlY3Rpb25WYXJpYW50KS50b0VxdWFsKG9PdXRQdXRTZWxlY3Rpb25WYXJpYW50KTsgLy9cInRoZSBleHRlcm5hbCBzdGF0ZSBmaWx0ZXJzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgY29ycmVjdGx5XCJcblx0XHR9KTtcblx0fSk7XG5cdGRlc2NyaWJlKFwiVW5pdCBUZXN0IGNoZWNrIE9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcblx0XHR0ZXN0KFwiVW5pdCB0ZXN0IHRvIGNoZWNrIE9wZXJhdG9yc1wiLCBmdW5jdGlvbigpIHtcblx0XHRcdFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGRhdGFGaWVsZDogXCJMYXN0Q2hhbmdlZERhdGVUaW1lXCIsXG5cdFx0XHRcdFx0b0NvbnRleHQ6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24ocGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEVkbSBUeXBlXG5cdFx0XHRcdFx0XHRcdGlmIChwYXRoID09PSBcIi9kdW1teS9MYXN0Q2hhbmdlZERhdGVUaW1lLyRUeXBlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJFZG0uRGF0ZVRpbWVcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBGaWx0ZXIgQW5ub3RhdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0UHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogXCJMYXN0Q2hhbmdlZERhdGVUaW1lXCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlUmFuZ2VcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZTogXCJFUSxCVCxMVCxMRSxHVCxHRSxOT1RMVCxOT1RMRSxOT1RHVCxOT1RHRVwiLFxuXHRcdFx0XHRcdHNNZXNzYWdlOiBcIkVkbS5TdHJpbmcgYW5kIFNpbmdsZSBSYW5nZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRkYXRhRmllbGQ6IFwiU2FsZXNPcmRlckRhdGVcIixcblx0XHRcdFx0XHRvQ29udGV4dDoge1xuXHRcdFx0XHRcdFx0Z2V0T2JqZWN0OiBmdW5jdGlvbihwYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0Ly8gRWRtIFR5cGVcblx0XHRcdFx0XHRcdFx0aWYgKHBhdGggPT09IFwiL2R1bW15L1NhbGVzT3JkZXJEYXRlLyRUeXBlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJFZG0uRGF0ZVwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdC8vIEZpbHRlciBBbm5vdGF0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eTogeyAkUHJvcGVydHlQYXRoOiBcIlNhbGVzT3JkZXJEYXRlXCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlVmFsdWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZTogXCJFUVwiLFxuXHRcdFx0XHRcdHNNZXNzYWdlOiBcIkVkbS5EYXRlIGFuZCBTaW5nbGUgVmFsdWVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZGF0YUZpZWxkOiBcIlNhbGVzT3JkZXJEYXRlXCIsXG5cdFx0XHRcdFx0b0NvbnRleHQ6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24ocGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEVkbSBUeXBlXG5cdFx0XHRcdFx0XHRcdGlmIChwYXRoID09PSBcIi9kdW1teS9TYWxlc09yZGVyRGF0ZS8kVHlwZVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiRWRtLkRhdGVcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBGaWx0ZXIgQW5ub3RhdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0UHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogXCJTYWxlc09yZGVyRGF0ZVwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWxsb3dlZEV4cHJlc3Npb25zOiBcIk11bHRpVmFsdWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZTogXCJFUVwiLFxuXHRcdFx0XHRcdHNNZXNzYWdlOiBcIkVkbS5EYXRlIGFuZCBNdWx0aSBWYWx1ZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRkYXRhRmllbGQ6IFwiTmV0QW1vdW50XCIsXG5cdFx0XHRcdFx0b0NvbnRleHQ6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24ocGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEVkbSBUeXBlXG5cdFx0XHRcdFx0XHRcdGlmIChwYXRoID09PSBcIi9kdW1teS9OZXRBbW91bnQvJFR5cGVcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIkVkbS5EZWNpbWFsXCI7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmlsdGVyIEFubm90YXRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnM6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFByb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IFwiTmV0QW1vdW50XCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiTXVsdGlSYW5nZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRleHBlY3RlZFZhbHVlOiBcIkVRLEJULExULExFLEdULEdFLE5FLE5PVEJULE5PVExULE5PVExFLE5PVEdULE5PVEdFXCIsXG5cdFx0XHRcdFx0c01lc3NhZ2U6IFwiRWRtLkRlY2ltYWwgYW5kIE11bHRpIFJhbmdlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGRhdGFGaWVsZDogXCJTb2xkVG9QYXJ0eVwiLFxuXHRcdFx0XHRcdG9Db250ZXh0OiB7XG5cdFx0XHRcdFx0XHRnZXRPYmplY3Q6IGZ1bmN0aW9uKHBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHQvLyBFZG0gdHlwZVxuXHRcdFx0XHRcdFx0XHRpZiAocGF0aCA9PT0gXCIvZHVtbXkvU29sZFRvUGFydHkvJFR5cGVcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIkVkbS5TdHJpbmdcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBGaWx0ZXIgQW5ub3RhdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0UHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogXCJTb2xkVG9QYXJ0eVwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QWxsb3dlZEV4cHJlc3Npb25zOiBcIlNlYXJjaEV4cHJlc3Npb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZTogXCJDb250YWlucyxTdGFydHNXaXRoLEVuZHNXaXRoLE5vdENvbnRhaW5zLE5vdFN0YXJ0c1dpdGgsTm90RW5kc1dpdGhcIixcblx0XHRcdFx0XHRzTWVzc2FnZTogXCJFZG0uU3RyaW5nIGFuZCBTZWFyY2ggRXhwcmVzc2lvbnNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZGF0YUZpZWxkOiBcIlNvbGRUb1BhcnR5XCIsXG5cdFx0XHRcdFx0b0NvbnRleHQ6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24ocGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEVkbSB0eXBlXG5cdFx0XHRcdFx0XHRcdGlmIChwYXRoID09PSBcIi9kdW1teS9Tb2xkVG9QYXJ0eS8kVHlwZVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiRWRtLlN0cmluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdC8vIEZpbHRlciBBbm5vdGF0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eTogeyAkUHJvcGVydHlQYXRoOiBcIlNvbGRUb1BhcnR5XCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRleHBlY3RlZFZhbHVlOlxuXHRcdFx0XHRcdFx0XCJDb250YWlucyxFUSxCVCxTdGFydHNXaXRoLEVuZHNXaXRoLExULExFLEdULEdFLE5vdENvbnRhaW5zLE5FLE5PVEJULE5vdFN0YXJ0c1dpdGgsTm90RW5kc1dpdGgsTk9UTFQsTk9UTEUsTk9UR1QsTk9UR0VcIixcblx0XHRcdFx0XHRzTWVzc2FnZTogXCJFZG0uU3RyaW5nIGFuZCBNdWx0aVJhbmdlIE9yIFNlYXJjaCBFeHByZXNzaW9uc1wiXG5cdFx0XHRcdH1cblx0XHRcdF0uZm9yRWFjaChmdW5jdGlvbihvUHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3QgYWN0dWFsVmFsdWUgPSBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRvUHJvcGVydHkuZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFwiL2R1bW15XCIsXG5cdFx0XHRcdFx0b1Byb3BlcnR5Lm9Db250ZXh0LFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5vQ29udGV4dC5nZXRPYmplY3QoXCIvZHVtbXkvXCIgKyBvUHJvcGVydHkuZGF0YUZpZWxkICsgXCIvJFR5cGVcIilcblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwZWN0KGFjdHVhbFZhbHVlKS50b0VxdWFsKG9Qcm9wZXJ0eS5leHBlY3RlZFZhbHVlKTsgLy8gLCBcIlVuaXQgdGVzdCB0byBjaGVjayBPcGVyYXRvcnMgZm9yIFwiICsgb1Byb3BlcnR5LnNNZXNzYWdlICsgXCI6ICBva1wiKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcIlRlc3QgQ29tbW9uVXRpbHMgOiBhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5XCIsIGZ1bmN0aW9uKCkge1xuXHRcdHRlc3QoXCJUZXN0IGFkZGluZyBkZWZhdWx0IGRpc3BsYXkgY3VycmVuY3kgdG8gU1YuXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0W1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YU1hbmRhdG9yeUZpZWxkczogW10sXG5cdFx0XHRcdFx0b0FwcERhdGE6IHt9LFxuXHRcdFx0XHRcdG9FeHBlY3RlZFZhbHVlOiB1bmRlZmluZWRcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGFNYW5kYXRvcnlGaWVsZHM6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEaXNwbGF5Q3VycmVuY3lcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0b0FwcERhdGE6IHt9LFxuXHRcdFx0XHRcdG9FeHBlY3RlZFZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0c01lc3NhZ2U6IFwibm8gU1YgaW4gYXBwRGF0YVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRhTWFuZGF0b3J5RmllbGRzOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IFwiRGlzcGxheUN1cnJlbmN5XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdG9BcHBEYXRhOiB7XG5cdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudDogbmV3IFNlbGVjdGlvblZhcmlhbnQoKVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b0V4cGVjdGVkVmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRzTWVzc2FnZTogXCJubyBEZWZhdWx0ZWQgU1ZcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YU1hbmRhdG9yeUZpZWxkczogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHQkUHJvcGVydHlQYXRoOiBcIkRpc3BsYXlDdXJyZW5jeVwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRvQXBwRGF0YToge1xuXHRcdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQ6IG5ldyBTZWxlY3Rpb25WYXJpYW50KCksXG5cdFx0XHRcdFx0XHRvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudDogbmV3IFNlbGVjdGlvblZhcmlhbnQoKVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b0V4cGVjdGVkVmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRzTWVzc2FnZTogXCJubyBEaXNwbGF5Q3VycmVuY3kgaW4gRGVmYXVsdGVkIFNWXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGFNYW5kYXRvcnlGaWVsZHM6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEaXNwbGF5Q3VycmVuY3lcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0b0FwcERhdGE6IHtcblx0XHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50OiBuZXcgU2VsZWN0aW9uVmFyaWFudCgpLFxuXHRcdFx0XHRcdFx0b0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQ6IG5ldyBTZWxlY3Rpb25WYXJpYW50KHtcblx0XHRcdFx0XHRcdFx0XCJTZWxlY3RPcHRpb25zXCI6IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcIlByb3BlcnR5TmFtZVwiOiBcIkRpc3BsYXlDdXJyZW5jeVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJSYW5nZXNcIjogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJTaWduXCI6IFwiSVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiT3B0aW9uXCI6IFwiRVFcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkxvd1wiOiBcIkVVUlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiSGlnaFwiOiBudWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvRXhwZWN0ZWRWYWx1ZTogXCJFVVJcIixcblx0XHRcdFx0XHRzTWVzc2FnZTogXCJEaXNwbGF5Q3VycmVuY3kgaW4gRGVmYXVsdGVkIFNWXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGFNYW5kYXRvcnlGaWVsZHM6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEaXNwbGF5Q3VycmVuY3lcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0b0FwcERhdGE6IHtcblx0XHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50OiBuZXcgU2VsZWN0aW9uVmFyaWFudCh7XG5cdFx0XHRcdFx0XHRcdFwiU2VsZWN0T3B0aW9uc1wiOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJQcm9wZXJ0eU5hbWVcIjogXCJEaXNwbGF5Q3VycmVuY3lcIixcblx0XHRcdFx0XHRcdFx0XHRcdFwiUmFuZ2VzXCI6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiU2lnblwiOiBcIklcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk9wdGlvblwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJMb3dcIjogXCJJTlJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkhpZ2hcIjogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdG9EZWZhdWx0ZWRTZWxlY3Rpb25WYXJpYW50OiBuZXcgU2VsZWN0aW9uVmFyaWFudCh7XG5cdFx0XHRcdFx0XHRcdFwiU2VsZWN0T3B0aW9uc1wiOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJQcm9wZXJ0eU5hbWVcIjogXCJEaXNwbGF5Q3VycmVuY3lcIixcblx0XHRcdFx0XHRcdFx0XHRcdFwiUmFuZ2VzXCI6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiU2lnblwiOiBcIklcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk9wdGlvblwiOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJMb3dcIjogXCJFVVJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkhpZ2hcIjogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b0V4cGVjdGVkVmFsdWU6IFwiSU5SXCIsXG5cdFx0XHRcdFx0c01lc3NhZ2U6IFwiRGlzcGxheUN1cnJlbmN5IGluIFNWIGFuZCBEZWZhdWx0ZWQgU1ZcIlxuXHRcdFx0XHR9XG5cdFx0XHRdLmZvckVhY2goZnVuY3Rpb24ob1Rlc3REYXRhKSB7XG5cdFx0XHRcdENvbW1vblV0aWxzLmFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koXG5cdFx0XHRcdFx0b1Rlc3REYXRhLmFNYW5kYXRvcnlGaWVsZHMsXG5cdFx0XHRcdFx0b1Rlc3REYXRhLm9BcHBEYXRhLm9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdG9UZXN0RGF0YS5vQXBwRGF0YS5vRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHBlY3QoXG5cdFx0XHRcdFx0b1Rlc3REYXRhLm9BcHBEYXRhICYmXG5cdFx0XHRcdFx0XHRvVGVzdERhdGEub0FwcERhdGEub1NlbGVjdGlvblZhcmlhbnQgJiZcblx0XHRcdFx0XHRcdG9UZXN0RGF0YS5vQXBwRGF0YS5vU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIikgJiZcblx0XHRcdFx0XHRcdG9UZXN0RGF0YS5vQXBwRGF0YS5vU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIilbMF0uTG93XG5cdFx0XHRcdCkudG9FcXVhbChvVGVzdERhdGEub0V4cGVjdGVkVmFsdWUpOyAvLyAsXCJOYXZIZWxwZXI6IGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3kgd29ya3Mgd2hlbiBcIiArIG9UZXN0RGF0YS5zTWVzc2FnZSArIFwiLlwiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG5cblx0ZGVzY3JpYmUoXCJVbml0IFRlc3QgdG8gY2hlY2sgZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHRlc3QoXCJVbml0IFRlc3QgdG8gY2hlY2sgZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0W1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bWV0YU1vZGVsOiB7XG5cdFx0XHRcdFx0XHRnZXRPYmplY3Q6IGZ1bmN0aW9uKHNQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChzUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvU2FsZXNPcmRlckl0ZW0vXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIiRLZXlcIjogW1wia2V5MVwiLCBcImtleTJcIl0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwia2V5MVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImtleTJcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCRraW5kOiBcIlByb3BlcnR5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJwcm9wMVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvU2FsZXNPcmRlckl0ZW0va2V5MkBcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCI6IGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvU2FsZXNPcmRlckl0ZW0vcHJvcDFAXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIjogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRwYXRoOiBcIi9TYWxlc09yZGVySXRlbVwiLFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IFwia2V5MSxrZXkyLHByb3AxXCIsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJ3aXRoIHRlY2huaWNhbCBrZXlzIGFuZCBpbW11dGFibGUgcHJvcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRtZXRhTW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi9TYWxlc09yZGVySXRlbS9cIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiJEtleVwiOiBbXCJrZXkxXCIsIFwia2V5MlwiXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJrZXkxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQka2luZDogXCJQcm9wZXJ0eVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwia2V5MlwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInByb3AxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQka2luZDogXCJQcm9wZXJ0eVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cGF0aDogXCIvU2FsZXNPcmRlckl0ZW1cIixcblx0XHRcdFx0XHRleHBlY3RlZFZhbHVlOiBcImtleTEsa2V5MlwiLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IFwid2l0aCB0ZWNobmljYWwga2V5cyBhbmQgbm8gaW1tdXRhYmxlIHByb3BcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bWV0YU1vZGVsOiB7XG5cdFx0XHRcdFx0XHRnZXRPYmplY3Q6IGZ1bmN0aW9uKHNQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChzUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvU2FsZXNPcmRlckl0ZW0vXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIiRLZXlcIjogW1wia2V5MVwiLCBcImtleTJcIl0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwia2V5MVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImtleTJcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCRraW5kOiBcIlByb3BlcnR5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJwcm9wMVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvU2FsZXNPcmRlckl0ZW0va2V5MkBcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCI6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi9TYWxlc09yZGVySXRlbS9wcm9wMUBcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhdGg6IFwiL1NhbGVzT3JkZXJJdGVtXCIsXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZTogXCJrZXkxLHByb3AxXCIsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJ3aXRoIGEgY29tcHV0ZWQgdGVjaG5pY2FsIGtleVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRtZXRhTW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi9TYWxlc09yZGVySXRlbS9cIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiJEtleVwiOiBbXCJrZXkxXCIsIFwia2V5MlwiXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJrZXkxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQka2luZDogXCJQcm9wZXJ0eVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwia2V5MlwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInByb3AxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQka2luZDogXCJQcm9wZXJ0eVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi9TYWxlc09yZGVySXRlbS9rZXkyQFwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi9TYWxlc09yZGVySXRlbS9wcm9wMUBcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhdGg6IFwiL1NhbGVzT3JkZXJJdGVtXCIsXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZTogXCJrZXkxLHByb3AxXCIsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJ3aXRoIGEgaGlkZGVuIHRlY2huaWNhbCBrZXlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bWV0YU1vZGVsOiB7XG5cdFx0XHRcdFx0XHRnZXRPYmplY3Q6IGZ1bmN0aW9uKHNQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChzUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvU2FsZXNPcmRlckl0ZW0vXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIiRLZXlcIjogW1wia2V5MVwiLCBcImtleTJcIl0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwia2V5MVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImtleTJcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCRraW5kOiBcIlByb3BlcnR5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJwcm9wMVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvU2FsZXNPcmRlckl0ZW0vcHJvcDFAXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cGF0aDogXCIvU2FsZXNPcmRlckl0ZW1cIixcblx0XHRcdFx0XHRleHBlY3RlZFZhbHVlOiBcImtleTEsa2V5MlwiLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IFwid2l0aCBhIGhpZGRlbiBwcm9wZXJ0eVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRtZXRhTW9kZWw6IHtcblx0XHRcdFx0XHRcdGdldE9iamVjdDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi9TYWxlc09yZGVySXRlbS9cIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiJEtleVwiOiBbXCJrZXkxXCIsIFwia2V5MlwiXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJrZXkxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQka2luZDogXCJQcm9wZXJ0eVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwia2V5MlwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInByb3AxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQka2luZDogXCJQcm9wZXJ0eVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIi9TYWxlc09yZGVySXRlbS9wcm9wMUBcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhdGg6IFwiL1NhbGVzT3JkZXJJdGVtXCIsXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZTogXCJrZXkxLGtleTJcIixcblx0XHRcdFx0XHRtZXNzYWdlOiBcIndpdGggYSBjb21wdXRlZCBwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdF0uZm9yRWFjaChmdW5jdGlvbihvRGF0YSkge1xuXHRcdFx0XHRjb25zdCBhS2V5RmllbGRzID0gQ29tbW9uVXRpbHMuZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG9EYXRhLm1ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbCwgb0RhdGEucGF0aCk7XG5cdFx0XHRcdGV4cGVjdChhS2V5RmllbGRzLnRvU3RyaW5nKCkpLnRvRXF1YWwob0RhdGEuZXhwZWN0ZWRWYWx1ZSk7IC8vICxcImdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyBleGVjdXRlZCBcIiArIG9EYXRhLm1lc3NhZ2UgKyBcIiAtLSBPS1wiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG5cblx0ZGVzY3JpYmUoXCJVbml0IFRlc3QgZm9yIGNoZWNraW5nIFNlbWFudGljIE9iamVjdCBNYXBwaW5nc1wiLCBmdW5jdGlvbigpIHtcblx0XHR0ZXN0KFwiVGVzdGluZyBpZiBzZW1hbnRpYyBPYmplY3QgbWFwcGluZ3MgYXJlIGdldHRpbmcgY29ycmVjdHkgcmVwbGFjZWQgaW4gdGhlIGNvbnRleHQgb3Igbm90XCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3Qgb1NlbGVjdGlvblZhcmlhbnQxID0gbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRcdGNvbnN0IG9TZWxlY3Rpb25WYXJpYW50MiA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50MS5hZGRTZWxlY3RPcHRpb24oXCJTYWxlc09yZGVyXCIsIFwiSVwiLCBcIkVRXCIsIFwiMjkxOTY4MlwiLCB1bmRlZmluZWQpO1xuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQxLmFkZFNlbGVjdE9wdGlvbihcIkRlbGl2ZXJlZFwiLCBcIklcIiwgXCJFUVwiLCBcImZhbHNlXCIsIHVuZGVmaW5lZCk7XG5cblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Mi5hZGRTZWxlY3RPcHRpb24oXCJTYWxlc09yZGVyXCIsIFwiSVwiLCBcIkVRXCIsIFwiMjkxOTY4MlwiLCB1bmRlZmluZWQpO1xuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQyLmFkZFNlbGVjdE9wdGlvbihcIkNvbXBsZXRlZFwiLCBcIklcIiwgXCJFUVwiLCBcImZhbHNlXCIsIHVuZGVmaW5lZCk7XG5cblx0XHRcdGNvbnN0IHNNYXBwaW5nMSA9ICdbe1wiTG9jYWxQcm9wZXJ0eVwiOntcIiRQcm9wZXJ0eVBhdGhcIjpcIkRlbGl2ZXJlZFwifSxcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjpcIkNvbXBsZXRlZFwifV0nO1xuXHRcdFx0Ly8gdmFyIHNNYXBwaW5nMiA9ICdbe1wiTG9jYWxQcm9wZXJ0eVwiOntcIiRQcm9wZXJ0eVBhdGhcIjpcImlzSW1hZ2VVcmxcIn0sXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6XCJJbWFnZUFkZHJlc3NcIn1dJztcblx0XHRcdGV4cGVjdChKU09OLnN0cmluZ2lmeShDb21tb25VdGlscy5zZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50MSwgc01hcHBpbmcxIGFzIGFueSkpKS50b0VxdWFsKFxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeShvU2VsZWN0aW9uVmFyaWFudDIpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdHRlc3QoXCJUZXN0aW5nIGlmIFNlbGVjdGlvblZhcmlhbnQgcmVtYWlucyB1bmNoYW5nZWQgaWYgbm8gTWFwcGluZyBtYXRjaGVzIHdpdGggYW55IGZpZWxkIGluIGNvbnRleHRcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBvU2VsZWN0aW9uVmFyaWFudDEgPSBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0Y29uc3Qgb1NlbGVjdGlvblZhcmlhbnQyID0gbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQxLmFkZFNlbGVjdE9wdGlvbihcIlNhbGVzT3JkZXJcIiwgXCJJXCIsIFwiRVFcIiwgXCIyOTE5NjgyXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudDEuYWRkU2VsZWN0T3B0aW9uKFwiRGVsaXZlcmVkXCIsIFwiSVwiLCBcIkVRXCIsIFwiZmFsc2VcIiwgdW5kZWZpbmVkKTtcblxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQyLmFkZFNlbGVjdE9wdGlvbihcIlNhbGVzT3JkZXJcIiwgXCJJXCIsIFwiRVFcIiwgXCIyOTE5NjgyXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudDIuYWRkU2VsZWN0T3B0aW9uKFwiQ29tcGxldGVkXCIsIFwiSVwiLCBcIkVRXCIsIFwiZmFsc2VcIiwgdW5kZWZpbmVkKTtcblxuXHRcdFx0Ly8gdmFyIHNNYXBwaW5nMSA9ICdbe1wiTG9jYWxQcm9wZXJ0eVwiOntcIiRQcm9wZXJ0eVBhdGhcIjpcIkRlbGl2ZXJlZFwifSxcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjpcIkNvbXBsZXRlZFwifV0nO1xuXHRcdFx0Y29uc3Qgc01hcHBpbmcyID0gJ1t7XCJMb2NhbFByb3BlcnR5XCI6e1wiJFByb3BlcnR5UGF0aFwiOlwiaXNJbWFnZVVybFwifSxcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjpcIkltYWdlQWRkcmVzc1wifV0nO1xuXHRcdFx0ZXhwZWN0KEpTT04uc3RyaW5naWZ5KENvbW1vblV0aWxzLnNldFNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQxLCBzTWFwcGluZzIgYXMgYW55KSkpLnRvRXF1YWwoXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KG9TZWxlY3Rpb25WYXJpYW50MSlcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdGRlc2NyaWJlKFwiVW5pdCBUZXN0IGZvciBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb25cIiwgZnVuY3Rpb24oKSB7XG5cdFx0dGVzdChcIlVuaXQgVGVzdCBmb3IgZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0W1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dmlld0RhdGE6IHtcblx0XHRcdFx0XHRcdGNvbnRyb2xDb25maWd1cmF0aW9uOiB7XG5cdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludCNkcDFcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFwibmF2aWdhdGlvblwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcInRhcmdldE91dGJvdW5kXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJvdXRib3VuZFwiOiBcIm91dGJvdW5kMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnQjZHAyXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcIm5hdmlnYXRpb25cIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJ0YXJnZXRPdXRib3VuZFwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwib3V0Ym91bmRcIjogXCJvdXRib3VuZDFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFwidGFyZ2V0U2VjdGlvbnNcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInNlY3Rpb25JZFwiOiBcInNlY3Rpb25JRDFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnQjY2hhcnQxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcIm5hdmlnYXRpb25cIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJ0YXJnZXRPdXRib3VuZFwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwib3V0Ym91bmRcIjogXCJvdXRib3VuZDFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFwidGFyZ2V0U2VjdGlvbnNcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInNlY3Rpb25JZFwiOiBcInNlY3Rpb25JRDFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnQjY2hhcnQyXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcIm5hdmlnYXRpb25cIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJ0YXJnZXRTZWN0aW9uc1wiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwic2VjdGlvbklkXCI6IFwic2VjdGlvbklEMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcIl9QYXJ0bmVyL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XCJ0YWJsZVNldHRpbmdzXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFwicGVyc29uYWxpemF0aW9uXCI6IGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRjcm9zc05hdjoge1xuXHRcdFx0XHRcdFx0XCJvdXRib3VuZDFcIjoge1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogXCJTTzFcIixcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBcImFjdGlvbjFcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXhwZWN0ZWRWYWx1ZToge1xuXHRcdFx0XHRcdFx0XCJmZTo6SGVhZGVyRFBMaW5rOjpEYXRhUG9pbnQ6OmRwMVwiOiB7XG5cdFx0XHRcdFx0XHRcdFwiYWN0aW9uXCI6IFwiYWN0aW9uMVwiLFxuXHRcdFx0XHRcdFx0XHRcInNlbWFudGljT2JqZWN0XCI6IFwiU08xXCIsXG5cdFx0XHRcdFx0XHRcdFwic2VtYW50aWNPYmplY3RNYXBwaW5nXCI6IFtdXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJmZTo6SGVhZGVyRFBMaW5rOjpEYXRhUG9pbnQ6OmRwMlwiOiB7XG5cdFx0XHRcdFx0XHRcdFwiYWN0aW9uXCI6IFwiYWN0aW9uMVwiLFxuXHRcdFx0XHRcdFx0XHRcInNlbWFudGljT2JqZWN0XCI6IFwiU08xXCIsXG5cdFx0XHRcdFx0XHRcdFwic2VtYW50aWNPYmplY3RNYXBwaW5nXCI6IFtdXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJmZTo6TWljcm9DaGFydExpbms6OkNoYXJ0OjpjaGFydDFcIjoge1xuXHRcdFx0XHRcdFx0XHRcImFjdGlvblwiOiBcImFjdGlvbjFcIixcblx0XHRcdFx0XHRcdFx0XCJzZW1hbnRpY09iamVjdFwiOiBcIlNPMVwiLFxuXHRcdFx0XHRcdFx0XHRcInNlbWFudGljT2JqZWN0TWFwcGluZ1wiOiBbXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJ3aXRoIHRhcmdldCBvdXRib3VuZCBjb25maWd1cmVkIHdpdGggdmFsaWQgU08tYWN0aW9uXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHZpZXdEYXRhOiB7XG5cdFx0XHRcdFx0XHRjb250cm9sQ29uZmlndXJhdGlvbjoge1xuXHRcdFx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnQjZHAxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcIm5hdmlnYXRpb25cIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJ0YXJnZXRPdXRib3VuZFwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwib3V0Ym91bmRcIjogXCJvdXRib3VuZDFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50I2RwMlwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XCJuYXZpZ2F0aW9uXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFwidGFyZ2V0T3V0Ym91bmRcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIm91dGJvdW5kXCI6IFwib3V0Ym91bmQxXCJcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcInRhcmdldFNlY3Rpb25zXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJzZWN0aW9uSWRcIjogXCJzZWN0aW9uSUQxXCJcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0I2NoYXJ0MVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XCJuYXZpZ2F0aW9uXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFwidGFyZ2V0T3V0Ym91bmRcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIm91dGJvdW5kXCI6IFwib3V0Ym91bmQxXCJcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcInRhcmdldFNlY3Rpb25zXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJzZWN0aW9uSWRcIjogXCJzZWN0aW9uSUQxXCJcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0I2NoYXJ0MlwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XCJuYXZpZ2F0aW9uXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFwidGFyZ2V0U2VjdGlvbnNcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInNlY3Rpb25JZFwiOiBcInNlY3Rpb25JRDFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJfUGFydG5lci9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIjoge1xuXHRcdFx0XHRcdFx0XHRcdFwidGFibGVTZXR0aW5nc1wiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcInBlcnNvbmFsaXphdGlvblwiOiBmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Y3Jvc3NOYXY6IHtcblx0XHRcdFx0XHRcdFwib3V0Ym91bmQxXCI6IHt9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRleHBlY3RlZFZhbHVlOiB7fSxcblx0XHRcdFx0XHRtZXNzYWdlOiBcIndpdGggdGFyZ2V0IG91dGJvdW5kIGNvbmZpZ3VyZWQgd2l0aCBubyBTTy1hY3Rpb25cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dmlld0RhdGE6IHtcblx0XHRcdFx0XHRcdGNvbnRyb2xDb25maWd1cmF0aW9uOiB7XG5cdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludCNkcDFcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFwibmF2aWdhdGlvblwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcInRhcmdldE91dGJvdW5kXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJvdXRib3VuZFwiOiBcIm91dGJvdW5kMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydCNjaGFydDFcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFwibmF2aWdhdGlvblwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcInRhcmdldE91dGJvdW5kXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJvdXRib3VuZFwiOiBcIm91dGJvdW5kMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRjcm9zc05hdjoge1xuXHRcdFx0XHRcdFx0XCJvdXRib3VuZDFcIjoge1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogXCJTTzFcIixcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBcImFjdGlvbjFcIixcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdFx0XHRcdFwibWFwcGVkUHJvcGVydHkxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFwidmFsdWVcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInZhbHVlXCI6IFwibWFpblByb3BlcnR5MVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImZvcm1hdFwiOiBcImJpbmRpbmdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XCJtYXBwZWRQcm9wZXJ0eTJcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJ2YWx1ZVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwidmFsdWVcIjogXCJtYWluUHJvcGVydHkyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiZm9ybWF0XCI6IFwicGxhaW5cIlxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XCJtYWluUHJvcGVydHkzXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFwiZGVmYXVsdFZhbHVlXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJ2YWx1ZVwiOiBcIlVzZXJEZWZhdWx0LkdMQWNjb3VudFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImZvcm1hdFwiOiBcInJlZmVyZW5jZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJmaWx0ZXJcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInZhbHVlXCI6IFwiXFxcXGQrXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiZm9ybWF0XCI6IFwicmVnZXhwXCJcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IHtcblx0XHRcdFx0XHRcdFwiZmU6OkhlYWRlckRQTGluazo6RGF0YVBvaW50OjpkcDFcIjoge1xuXHRcdFx0XHRcdFx0XHRcImFjdGlvblwiOiBcImFjdGlvbjFcIixcblx0XHRcdFx0XHRcdFx0XCJzZW1hbnRpY09iamVjdFwiOiBcIlNPMVwiLFxuXHRcdFx0XHRcdFx0XHRcInNlbWFudGljT2JqZWN0TWFwcGluZ1wiOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJMb2NhbFByb3BlcnR5XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCIkUHJvcGVydHlQYXRoXCI6IFwibWFpblByb3BlcnR5MVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6IFwibWFwcGVkUHJvcGVydHkxXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcImZlOjpNaWNyb0NoYXJ0TGluazo6Q2hhcnQ6OmNoYXJ0MVwiOiB7XG5cdFx0XHRcdFx0XHRcdFwiYWN0aW9uXCI6IFwiYWN0aW9uMVwiLFxuXHRcdFx0XHRcdFx0XHRcInNlbWFudGljT2JqZWN0XCI6IFwiU08xXCIsXG5cdFx0XHRcdFx0XHRcdFwic2VtYW50aWNPYmplY3RNYXBwaW5nXCI6IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcIkxvY2FsUHJvcGVydHlcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIiRQcm9wZXJ0eVBhdGhcIjogXCJtYWluUHJvcGVydHkxXCJcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogXCJtYXBwZWRQcm9wZXJ0eTFcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJ3aXRoIHRhcmdldCBvdXRib3VuZCBjb25maWd1cmVkIHdpdGggdmFsaWQgU08tYWN0aW9uIGFuZCBzZW1hbnRpYyBtYXBwaW5nXCJcblx0XHRcdFx0fVxuXHRcdFx0XS5mb3JFYWNoKGZ1bmN0aW9uKG9EYXRhKSB7XG5cdFx0XHRcdGNvbnN0IG9IZWFkZXJGYWNldEl0ZW1zID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKG9EYXRhLnZpZXdEYXRhLCBvRGF0YS5jcm9zc05hdik7XG5cdFx0XHRcdGV4cGVjdChvSGVhZGVyRmFjZXRJdGVtcykudG9FcXVhbChvRGF0YS5leHBlY3RlZFZhbHVlKTsgLy8gLCBcIlVuaXQgdGVzdCB0byBjaGVjayBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24gXCIgKyBvRGF0YS5tZXNzYWdlICsgXCI6ICBva1wiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG5cdGRlc2NyaWJlKFwiVW5pdCBUZXN0IGZvciBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmdcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dGVzdChcIlVuaXQgVGVzdCBmb3IgZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0W1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0b3V0Ym91bmQ6IHtcblx0XHRcdFx0XHRcdFwib3V0Ym91bmQxXCI6IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IFwiU08xXCIsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogXCJhY3Rpb24xXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IFtdLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IFwid2l0aCB0YXJnZXQgb3V0Ym91bmQgY29uZmlndXJlZCBubyBzZW1hbnRpY29iamVjdCBtYXBwaW5nXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG91dGJvdW5kOiB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogXCJTTzFcIixcblx0XHRcdFx0XHRcdGFjdGlvbjogXCJhY3Rpb24xXCIsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdFx0XHRcdFwibWFwcGVkUHJvcGVydHkxXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcInZhbHVlXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFwidmFsdWVcIjogXCJtYWluUHJvcGVydHkxXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcImZvcm1hdFwiOiBcImJpbmRpbmdcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJtYXBwZWRQcm9wZXJ0eTJcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFwidmFsdWVcIjoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJ2YWx1ZVwiOiBcIm1haW5Qcm9wZXJ0eTJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFwiZm9ybWF0XCI6IFwicGxhaW5cIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJtYWluUHJvcGVydHkzXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcImRlZmF1bHRWYWx1ZVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcInZhbHVlXCI6IFwiVXNlckRlZmF1bHQuR0xBY2NvdW50XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcImZvcm1hdFwiOiBcInJlZmVyZW5jZVwiXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcImZpbHRlclwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcInZhbHVlXCI6IFwiXFxcXGQrXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcImZvcm1hdFwiOiBcInJlZ2V4cFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcIm1hcHBlZFByb3BlcnR5NFwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XCJ2YWx1ZVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcInZhbHVlXCI6IFwibWFpblByb3BlcnR5NFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJmb3JtYXRcIjogXCJiaW5kaW5nXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGV4cGVjdGVkVmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XCJMb2NhbFByb3BlcnR5XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcIiRQcm9wZXJ0eVBhdGhcIjogXCJtYWluUHJvcGVydHkxXCJcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6IFwibWFwcGVkUHJvcGVydHkxXCJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFwiTG9jYWxQcm9wZXJ0eVwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0XCIkUHJvcGVydHlQYXRoXCI6IFwibWFpblByb3BlcnR5NFwiXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiOiBcIm1hcHBlZFByb3BlcnR5NFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRtZXNzYWdlOiBcIndpdGggdGFyZ2V0IG91dGJvdW5kIGNvbmZpZ3VyZWQgd2l0aCB2YWxpZCBTTy1hY3Rpb24gYW5kIHNlbWFudGljIG1hcHBpbmdcIlxuXHRcdFx0XHR9XG5cdFx0XHRdLmZvckVhY2goZnVuY3Rpb24ob0RhdGEpIHtcblx0XHRcdFx0Y29uc3Qgb0hlYWRlckZhY2V0SXRlbXMgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob0RhdGEub3V0Ym91bmQpO1xuXHRcdFx0XHRleHBlY3Qob0hlYWRlckZhY2V0SXRlbXMpLnRvRXF1YWwob0RhdGEuZXhwZWN0ZWRWYWx1ZSk7IC8vICxcIlVuaXQgdGVzdCB0byBjaGVjayBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcgXCIgKyBvRGF0YS5tZXNzYWdlICsgXCI6ICBva1wiXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGRlc2NyaWJlKFwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkXCIsICgpID0+IHtcblx0XHRcdHRlc3QoXCJmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQgZm9yIHVuYm91bmQgYWN0aW9uIGFuZCBzaW5nbGUgNDEyIG1lc3NhZ2UgZnJvbSBiYWNrZW5kXCIsIGFzeW5jIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsZXQgY29uZmlybVdhcm5pbmc6IChtc2c6IHN0cmluZywgb3B0aW9ucz86IG9iamVjdCkgPT4gdm9pZDtcblx0XHRcdFx0bGV0IGNvbmZpcm1TZWxlY3Rpb246IHN0cmluZyA9IFwiVW5ib3VuZEFjdGlvblwiO1xuXHRcdFx0XHRqZXN0LnNweU9uKE1lc3NhZ2VCb3gsIFwid2FybmluZ1wiKS5tb2NrSW1wbGVtZW50YXRpb24oKG1zZzogc3RyaW5nLCBvcHRpb25zPzogYW55KSA9PlxuXHRcdFx0XHRcdGNvbmZpcm1XYXJuaW5nLmNhbGwobnVsbCwgbXNnLCBvcHRpb25zKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbmZpcm1XYXJuaW5nID0gKG1zZzogc3RyaW5nLCBvcHRpb25zPzogYW55KSA9PiB7XG5cdFx0XHRcdFx0ZXhwZWN0KG9wdGlvbnMudGl0bGUpLnRvRXF1YWwoXCJXYXJuaW5nXCIpO1xuXHRcdFx0XHRcdGV4cGVjdChtc2cpLnRvRXF1YWwoXCJVbmFibGUgdG8gZXhlY3V0ZSB0aGUgYWN0aW9uIGR1ZSB0byBhIHdhcm5pbmdcIiArIFwiXFxuXCIgKyBcIlByb2NlZWQgYW55d2F5P1wiKTtcblx0XHRcdFx0XHRvcHRpb25zLm9uQ2xvc2UoY29uZmlybVNlbGVjdGlvbik7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3Qgb01vZGVsOiBPRGF0YU1vZGVsIHwgYW55ID0ge1xuXHRcdFx0XHRcdHN1Ym1pdEJhdGNoOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZSh7fSkpXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGFNZXNzYWdlcyA9IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRtZXNzYWdlOiBcIlVuYWJsZSB0byBleGVjdXRlIHRoZSBhY3Rpb24gZHVlIHRvIGEgd2FybmluZ1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdO1xuXHRcdFx0XHRhd2FpdCBDb21tb25VdGlscy5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQoXCJhY3Rpb25JbXBvcnRcIiwgXCJVbmJvdW5kQWN0aW9uXCIsIG9Nb2RlbCwgYU1lc3NhZ2VzKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0ZXN0KFwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIGZvciB1bmJvdW5kIGFjdGlvbiBhbmQgbXVsdGlwbGUgNDEyIG1lc3NhZ2VzIGZyb20gYmFja2VuZCAtIGlnbm9yZSB3YXJuaW5ncyBhbmQgY29udGludWVcIiwgYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxldCBvTW9ja3ByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyA9IGplc3Quc3B5T24oTWVzc2FnZUhhbmRsaW5nLCBcInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZ1wiKTtcblx0XHRcdFx0b01vY2twcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb01lc3NhZ2VWaWV3ID0gbmV3IE1lc3NhZ2VWaWV3KHtcblx0XHRcdFx0XHRcdHNob3dEZXRhaWxzUGFnZUhlYWRlcjogZmFsc2Vcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0b01lc3NhZ2VWaWV3OiBvTWVzc2FnZVZpZXcsXG5cdFx0XHRcdFx0XHRiaGFzRXRhZ01lc3NhZ2U6IGZhbHNlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGxldCBvRGlhbG9nT3BlblN0dWIgPSBqZXN0LnNweU9uKERpYWxvZy5wcm90b3R5cGUsIFwib3BlblwiKTtcblx0XHRcdFx0b0RpYWxvZ09wZW5TdHViLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbih0aGlzOiBEaWFsb2cpIHtcblx0XHRcdFx0XHRjb25zdCBvQWN0aW9uQnV0dG9uID0gdGhpcy5nZXRCZWdpbkJ1dHRvbigpO1xuXHRcdFx0XHRcdG9BY3Rpb25CdXR0b24uZmlyZVByZXNzKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBvTW9kZWw6IE9EYXRhTW9kZWwgfCBhbnkgPSB7XG5cdFx0XHRcdFx0c3VibWl0QmF0Y2g6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKHt9KSlcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgYU1lc3NhZ2VzID0gW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6IFwiVW5hYmxlIHRvIGV4ZWN1dGUgdGhlIGFjdGlvbiBkdWUgdG8gYSB3YXJuaW5nXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6IFwiVW5hYmxlIHRvIGV4ZWN1dGUgdGhlIGFjdGlvbiBkdWUgdG8gYSB3YXJuaW5nXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF07XG5cdFx0XHRcdGF3YWl0IGV4cGVjdChDb21tb25VdGlscy5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQoXCJhY3Rpb25JbXBvcnRcIiwgXCJVbmJvdW5kQWN0aW9uXCIsIG9Nb2RlbCwgYU1lc3NhZ2VzKSk7XG5cdFx0XHRcdGV4cGVjdChvTW9ja3ByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0XHRleHBlY3Qob0RpYWxvZ09wZW5TdHViKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGVzdChcImZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCBmb3IgdW5ib3VuZCBhY3Rpb24gYW5kIG11bHRpcGxlIDQxMiBtZXNzYWdlcyBmcm9tIGJhY2tlbmQgLSBjYW5jZWxcIiwgYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxldCBvTW9ja3ByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyA9IGplc3Quc3B5T24oTWVzc2FnZUhhbmRsaW5nLCBcInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZ1wiKTtcblx0XHRcdFx0b01vY2twcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb01lc3NhZ2VWaWV3ID0gbmV3IE1lc3NhZ2VWaWV3KHtcblx0XHRcdFx0XHRcdHNob3dEZXRhaWxzUGFnZUhlYWRlcjogZmFsc2Vcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0b01lc3NhZ2VWaWV3OiBvTWVzc2FnZVZpZXcsXG5cdFx0XHRcdFx0XHRiaGFzRXRhZ01lc3NhZ2U6IGZhbHNlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGxldCBvRGlhbG9nT3BlblN0dWIgPSBqZXN0LnNweU9uKERpYWxvZy5wcm90b3R5cGUsIFwib3BlblwiKTtcblx0XHRcdFx0b0RpYWxvZ09wZW5TdHViLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbih0aGlzOiBEaWFsb2cpIHtcblx0XHRcdFx0XHRjb25zdCBvQWN0aW9uQnV0dG9uID0gdGhpcy5nZXRFbmRCdXR0b24oKTtcblx0XHRcdFx0XHRvQWN0aW9uQnV0dG9uLmZpcmVQcmVzcygpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3Qgb01vZGVsOiBPRGF0YU1vZGVsIHwgYW55ID0ge1xuXHRcdFx0XHRcdHN1Ym1pdEJhdGNoOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZSh7fSkpXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGFNZXNzYWdlcyA9IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRtZXNzYWdlOiBcIlVuYWJsZSB0byBleGVjdXRlIHRoZSBhY3Rpb24gZHVlIHRvIGEgd2FybmluZ1wiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRtZXNzYWdlOiBcIlVuYWJsZSB0byBleGVjdXRlIHRoZSBhY3Rpb24gZHVlIHRvIGEgd2FybmluZ1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdO1xuXHRcdFx0XHRhd2FpdCBleHBlY3QoQ29tbW9uVXRpbHMuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkKFwiYWN0aW9uSW1wb3J0XCIsIFwiVW5ib3VuZEFjdGlvblwiLCBvTW9kZWwsIGFNZXNzYWdlcykpO1xuXHRcdFx0XHRleHBlY3Qob01vY2twcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcblx0XHRcdFx0ZXhwZWN0KG9EaWFsb2dPcGVuU3R1YikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0pO1xufSk7XG4iXX0=
|