@sapui5/sap.fe.core 1.110.0 → 1.111.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/README.md +0 -4
- package/package.json +2 -23
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime-dbg.js +182 -0
- package/src/sap/fe/core/ActionRuntime.js +3 -181
- package/src/sap/fe/core/ActionRuntime.js.map +1 -0
- package/src/sap/fe/core/ActionRuntime.ts +3 -5
- package/src/sap/fe/core/AppComponent-dbg.js +435 -0
- package/src/sap/fe/core/AppComponent.js +3 -439
- package/src/sap/fe/core/AppComponent.js.map +1 -0
- package/src/sap/fe/core/AppComponent.ts +0 -3
- package/src/sap/fe/core/AppStateHandler-dbg.js +200 -0
- package/src/sap/fe/core/AppStateHandler.js +3 -227
- package/src/sap/fe/core/AppStateHandler.js.map +1 -0
- package/src/sap/fe/core/BaseController-dbg.js +76 -0
- package/src/sap/fe/core/BaseController.js +3 -73
- package/src/sap/fe/core/BaseController.js.map +1 -0
- package/src/sap/fe/core/CommonUtils-dbg.js +2135 -0
- package/src/sap/fe/core/CommonUtils.js +3 -2296
- package/src/sap/fe/core/CommonUtils.js.map +1 -0
- package/src/sap/fe/core/CommonUtils.ts +34 -28
- package/src/sap/fe/core/ExtensionAPI-dbg.js +273 -0
- package/src/sap/fe/core/ExtensionAPI.js +3 -280
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -0
- package/src/sap/fe/core/PageController-dbg.js +203 -0
- package/src/sap/fe/core/PageController.js +3 -200
- package/src/sap/fe/core/PageController.js.map +1 -0
- package/src/sap/fe/core/TemplateComponent-dbg.js +218 -0
- package/src/sap/fe/core/TemplateComponent.js +3 -216
- package/src/sap/fe/core/TemplateComponent.js.map +1 -0
- package/src/sap/fe/core/TemplateModel-dbg.js +75 -0
- package/src/sap/fe/core/TemplateModel.js +3 -72
- package/src/sap/fe/core/TemplateModel.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +57 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +3 -54
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +410 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +11 -355
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +118 -52
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter-dbg.js +14 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +3 -11
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +44 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +3 -40
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +932 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +16 -1292
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +40 -42
- package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +434 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -481
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -5
- package/src/sap/fe/core/controllerextensions/BusyLocker-dbg.js +92 -0
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +3 -89
- package/src/sap/fe/core/controllerextensions/BusyLocker.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1659 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +3 -1868
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +180 -125
- package/src/sap/fe/core/controllerextensions/Feedback-dbg.js +70 -0
- package/src/sap/fe/core/controllerextensions/Feedback.js +3 -67
- package/src/sap/fe/core/controllerextensions/Feedback.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +83 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -84
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -8
- package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +711 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +3 -707
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +79 -48
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +791 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +3 -696
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +107 -7
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +984 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +3 -996
- package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +43 -23
- package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1013 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +3 -1011
- package/src/sap/fe/core/controllerextensions/KPIManagement.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -10
- package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +135 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.js +3 -133
- package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +221 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +3 -224
- package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +254 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -279
- package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +169 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +3 -174
- package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Paginator.ts +4 -5
- package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +132 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -130
- package/src/sap/fe/core/controllerextensions/Placeholder.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Routing-dbg.js +138 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +3 -135
- package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +10 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -7
- package/src/sap/fe/core/controllerextensions/RoutingListener.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +317 -0
- package/src/sap/fe/core/controllerextensions/Share.js +3 -356
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -1
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +553 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -651
- package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +411 -553
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +903 -0
- package/src/sap/fe/core/controllerextensions/ViewState.js +3 -967
- package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/ViewState.ts +90 -41
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +99 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -96
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +314 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +3 -336
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +152 -0
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +3 -161
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +243 -0
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +3 -302
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +252 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +6 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +188 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +1196 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +3 -1479
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +239 -289
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +689 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -785
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +134 -142
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +236 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -287
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +1422 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +3 -1598
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +40 -24
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +185 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +3 -214
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +1219 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -1213
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +304 -0
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +3 -339
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason-dbg.js +15 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +6 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.ts +6 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +798 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +3 -799
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -0
- package/src/sap/fe/core/controls/Any-dbg.js +32 -0
- package/src/sap/fe/core/controls/Any.js +3 -29
- package/src/sap/fe/core/controls/Any.js.map +1 -0
- package/src/sap/fe/core/controls/AnyElement-dbg.js +29 -0
- package/src/sap/fe/core/controls/AnyElement.js +3 -26
- package/src/sap/fe/core/controls/AnyElement.js.map +1 -0
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +72 -0
- package/src/sap/fe/core/controls/CommandExecution.js +3 -69
- package/src/sap/fe/core/controls/CommandExecution.js.map +1 -0
- package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +151 -0
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -148
- package/src/sap/fe/core/controls/ConditionalWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +330 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +3 -328
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +126 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -124
- package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +1 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +170 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -171
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -0
- package/src/sap/fe/core/controls/FieldWrapper-dbg.js +194 -0
- package/src/sap/fe/core/controls/FieldWrapper.js +3 -191
- package/src/sap/fe/core/controls/FieldWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/FileWrapper-dbg.js +280 -0
- package/src/sap/fe/core/controls/FileWrapper.js +3 -277
- package/src/sap/fe/core/controls/FileWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/FilterBar-dbg.js +167 -0
- package/src/sap/fe/core/controls/FilterBar.js +3 -166
- package/src/sap/fe/core/controls/FilterBar.js.map +1 -0
- package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +92 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +3 -89
- package/src/sap/fe/core/controls/FormElementWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/MassEditSelect-dbg.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.js +3 -30
- package/src/sap/fe/core/controls/MassEditSelect.js.map +1 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -34
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +119 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -121
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +267 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +3 -264
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -150
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +310 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -307
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +491 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -504
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +2 -2
- package/src/sap/fe/core/converters/ConverterContext-dbg.js +403 -0
- package/src/sap/fe/core/converters/ConverterContext.js +3 -406
- package/src/sap/fe/core/converters/ConverterContext.js.map +1 -0
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +88 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -84
- package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -0
- package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +402 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +3 -406
- package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -0
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +1161 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +3 -1225
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -0
- package/src/sap/fe/core/converters/MetaModelConverter.ts +193 -199
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +89 -0
- package/src/sap/fe/core/converters/TemplateConverter.js +3 -86
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -0
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +396 -0
- package/src/sap/fe/core/converters/annotations/DataField.js +3 -394
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -0
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -5
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1948 -0
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +3 -1868
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +424 -0
- package/src/sap/fe/core/converters/controls/Common/Action.js +3 -446
- package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Action.ts +31 -14
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +276 -0
- package/src/sap/fe/core/converters/controls/Common/Chart.js +3 -260
- package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +52 -7
- package/src/sap/fe/core/converters/controls/Common/Criticality-dbg.js +42 -0
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -39
- package/src/sap/fe/core/converters/controls/Common/Criticality.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +247 -0
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -242
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +229 -0
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -234
- package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +374 -0
- package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -371
- package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +2596 -0
- package/src/sap/fe/core/converters/controls/Common/Table.js +3 -2527
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Table.ts +214 -77
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +522 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +3 -527
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +51 -50
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +786 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +3 -845
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +0 -64
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +291 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +3 -316
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +30 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +56 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +3 -53
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +438 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -431
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +597 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +3 -630
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +204 -0
- package/src/sap/fe/core/converters/helpers/Aggregation.js +3 -204
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +100 -0
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -99
- package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +199 -0
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +3 -199
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +143 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +3 -140
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +2 -1
- package/src/sap/fe/core/converters/helpers/ID-dbg.js +92 -0
- package/src/sap/fe/core/converters/helpers/ID.js +3 -89
- package/src/sap/fe/core/converters/helpers/ID.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +62 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +3 -59
- package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/Key-dbg.js +62 -0
- package/src/sap/fe/core/converters/helpers/Key.js +3 -59
- package/src/sap/fe/core/converters/helpers/Key.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper-dbg.js +80 -0
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +3 -77
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js.map +1 -0
- package/src/sap/fe/core/converters/objectPage/FormMenuActions-dbg.js +142 -0
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +3 -139
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js.map +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +406 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +3 -422
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +132 -111
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +557 -0
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +3 -589
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -0
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +474 -0
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +3 -477
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -0
- package/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +103 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -100
- package/src/sap/fe/core/designtime/AppComponent.designtime.js.map +1 -0
- package/src/sap/fe/core/designtime/library-preload.designtime.js +7 -0
- package/src/sap/fe/core/designtime/library-preload.designtime.js.map +1 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +95 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +3 -92
- package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +46 -0
- package/src/sap/fe/core/formatters/FPMFormatter.js +3 -44
- package/src/sap/fe/core/formatters/FPMFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/FPMFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +343 -0
- package/src/sap/fe/core/formatters/FiscalFormat.js +6 -0
- package/src/sap/fe/core/formatters/FiscalFormat.js.map +1 -0
- package/src/sap/fe/core/formatters/FiscalFormat.ts +319 -0
- package/src/sap/fe/core/formatters/KPIFormatter-dbg.js +86 -0
- package/src/sap/fe/core/formatters/KPIFormatter.js +3 -83
- package/src/sap/fe/core/formatters/KPIFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/StandardFormatter-dbg.js +80 -0
- package/src/sap/fe/core/formatters/StandardFormatter.js +3 -78
- package/src/sap/fe/core/formatters/StandardFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +276 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +3 -275
- package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/TableFormatterTypes-dbg.js +20 -0
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +3 -17
- package/src/sap/fe/core/formatters/TableFormatterTypes.js.map +1 -0
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +172 -0
- package/src/sap/fe/core/formatters/ValueFormatter.js +3 -161
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -8
- package/src/sap/fe/core/fpm/Component-dbg.js +94 -0
- package/src/sap/fe/core/fpm/Component.js +3 -91
- package/src/sap/fe/core/fpm/Component.js.map +1 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AnnotationEnum-dbg.js +30 -0
- package/src/sap/fe/core/helpers/AnnotationEnum.js +3 -36
- package/src/sap/fe/core/helpers/AnnotationEnum.js.map +1 -0
- package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +334 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.js +3 -335
- package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +1739 -0
- package/src/sap/fe/core/helpers/BindingToolkit.js +3 -1611
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -0
- package/src/sap/fe/core/helpers/BindingToolkit.ts +277 -97
- package/src/sap/fe/core/helpers/ClassSupport-dbg.js +421 -0
- package/src/sap/fe/core/helpers/ClassSupport.js +3 -420
- package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -0
- package/src/sap/fe/core/helpers/ClassSupport.ts +13 -15
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +526 -0
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -618
- package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/DeleteHelper.ts +116 -134
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +55 -0
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +3 -52
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/EditState-dbg.js +80 -0
- package/src/sap/fe/core/helpers/EditState.js +3 -77
- package/src/sap/fe/core/helpers/EditState.js.map +1 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper-dbg.js +55 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +3 -52
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/FPMHelper-dbg.js +55 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -52
- package/src/sap/fe/core/helpers/FPMHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +180 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -177
- package/src/sap/fe/core/helpers/KeepAliveHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes-dbg.js +28 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +3 -25
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js.map +1 -0
- package/src/sap/fe/core/helpers/LoaderUtils-dbg.js +29 -0
- package/src/sap/fe/core/helpers/LoaderUtils.js +3 -30
- package/src/sap/fe/core/helpers/LoaderUtils.js.map +1 -0
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +1229 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +3 -1309
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/MassEditHelper.ts +6 -6
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +65 -0
- package/src/sap/fe/core/helpers/MessageStrip.js +3 -62
- package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -0
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +489 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +3 -503
- package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/ModelHelper.ts +13 -36
- package/src/sap/fe/core/helpers/PasteHelper-dbg.js +174 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -185
- package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +371 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -368
- package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +70 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +141 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +3 -137
- package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +3 -2
- package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +204 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +3 -208
- package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/Synchronization-dbg.js +35 -0
- package/src/sap/fe/core/helpers/Synchronization.js +3 -33
- package/src/sap/fe/core/helpers/Synchronization.js.map +1 -0
- package/src/sap/fe/core/helpers/ToES6Promise-dbg.js +29 -0
- package/src/sap/fe/core/helpers/ToES6Promise.js +3 -26
- package/src/sap/fe/core/helpers/ToES6Promise.js.map +1 -0
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +20 -0
- package/src/sap/fe/core/helpers/TypeGuards.js +3 -19
- package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -0
- package/src/sap/fe/core/helpers/TypeGuards.ts +5 -1
- package/src/sap/fe/core/jsx-runtime/Fragment-dbg.js +14 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +3 -11
- package/src/sap/fe/core/jsx-runtime/Fragment.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +76 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +3 -86
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +124 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +3 -98
- package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +43 -17
- package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +41 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml-dbg.js +94 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +3 -90
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +3 -28
- package/src/sap/fe/core/jsx-runtime/jsx.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx.ts +19 -1
- package/src/sap/fe/core/jsx-runtime/jsxs-dbg.js +10 -0
- package/src/sap/fe/core/jsx-runtime/jsxs.js +3 -7
- package/src/sap/fe/core/jsx-runtime/jsxs.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +154 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +3 -153
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -0
- package/src/sap/fe/core/library-dbg.js +437 -0
- package/src/sap/fe/core/library-preload.js +900 -0
- package/src/sap/fe/core/library-preload.js.map +1 -0
- package/src/sap/fe/core/library-preload.support.js +177 -0
- package/src/sap/fe/core/library-preload.support.js.map +1 -0
- package/src/sap/fe/core/library.js +3 -461
- package/src/sap/fe/core/library.js.map +1 -0
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +12 -25
- package/src/sap/fe/core/manifest.json +100 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +99 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -96
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -0
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +22 -0
- package/src/sap/fe/core/messagebundle_bg.properties +22 -0
- package/src/sap/fe/core/messagebundle_ca.properties +22 -0
- package/src/sap/fe/core/messagebundle_cs.properties +22 -0
- package/src/sap/fe/core/messagebundle_cy.properties +22 -0
- package/src/sap/fe/core/messagebundle_da.properties +22 -0
- package/src/sap/fe/core/messagebundle_de.properties +22 -0
- package/src/sap/fe/core/messagebundle_el.properties +22 -0
- package/src/sap/fe/core/messagebundle_en.properties +22 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +22 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +22 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +4 -0
- package/src/sap/fe/core/messagebundle_es.properties +22 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +22 -0
- package/src/sap/fe/core/messagebundle_et.properties +22 -0
- package/src/sap/fe/core/messagebundle_fi.properties +22 -0
- package/src/sap/fe/core/messagebundle_fr.properties +22 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +22 -0
- package/src/sap/fe/core/messagebundle_hi.properties +22 -0
- package/src/sap/fe/core/messagebundle_hr.properties +23 -1
- package/src/sap/fe/core/messagebundle_hu.properties +22 -0
- package/src/sap/fe/core/messagebundle_id.properties +22 -0
- package/src/sap/fe/core/messagebundle_it.properties +22 -0
- package/src/sap/fe/core/messagebundle_iw.properties +22 -0
- package/src/sap/fe/core/messagebundle_ja.properties +22 -0
- package/src/sap/fe/core/messagebundle_kk.properties +22 -0
- package/src/sap/fe/core/messagebundle_ko.properties +22 -0
- package/src/sap/fe/core/messagebundle_lt.properties +22 -0
- package/src/sap/fe/core/messagebundle_lv.properties +22 -0
- package/src/sap/fe/core/messagebundle_ms.properties +22 -0
- package/src/sap/fe/core/messagebundle_nl.properties +22 -0
- package/src/sap/fe/core/messagebundle_no.properties +22 -0
- package/src/sap/fe/core/messagebundle_pl.properties +22 -0
- package/src/sap/fe/core/messagebundle_pt.properties +22 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +22 -0
- package/src/sap/fe/core/messagebundle_ro.properties +22 -0
- package/src/sap/fe/core/messagebundle_ru.properties +22 -0
- package/src/sap/fe/core/messagebundle_sh.properties +22 -0
- package/src/sap/fe/core/messagebundle_sk.properties +22 -0
- package/src/sap/fe/core/messagebundle_sl.properties +22 -0
- package/src/sap/fe/core/messagebundle_sv.properties +22 -0
- package/src/sap/fe/core/messagebundle_th.properties +22 -0
- package/src/sap/fe/core/messagebundle_tr.properties +22 -0
- package/src/sap/fe/core/messagebundle_uk.properties +22 -0
- package/src/sap/fe/core/messagebundle_vi.properties +22 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +22 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +22 -0
- package/src/sap/fe/core/operationsHelper-dbg.js +155 -0
- package/src/sap/fe/core/operationsHelper.js +3 -205
- package/src/sap/fe/core/operationsHelper.js.map +1 -0
- package/src/sap/fe/core/operationsHelper.ts +14 -68
- package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +837 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -855
- package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -0
- package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +190 -0
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -190
- package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -0
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +506 -0
- package/src/sap/fe/core/rootView/RootViewBaseController.js +3 -538
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -0
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -4
- package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +60 -0
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -60
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +196 -0
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -219
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +80 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -82
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +320 -0
- package/src/sap/fe/core/services/NavigationServiceFactory.js +3 -320
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +91 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -89
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +817 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -847
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +6 -3
- package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +732 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +3 -752
- package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +569 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +3 -599
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +355 -0
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +3 -387
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +37 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +3 -34
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js.map +1 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +4 -4
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +3 -3
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +3 -3
- package/src/sap/fe/core/support/CommonHelper-dbg.js +63 -0
- package/src/sap/fe/core/support/CommonHelper.js +3 -60
- package/src/sap/fe/core/support/CommonHelper.js.map +1 -0
- package/src/sap/fe/core/support/Diagnostics-dbg.js +44 -0
- package/src/sap/fe/core/support/Diagnostics.js +3 -49
- package/src/sap/fe/core/support/Diagnostics.js.map +1 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +3 -3
- package/src/sap/fe/core/templating/CommonFormatters-dbg.js +70 -0
- package/src/sap/fe/core/templating/CommonFormatters.js +3 -66
- package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +9 -3
- package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +136 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +3 -133
- package/src/sap/fe/core/templating/CriticalityFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +58 -0
- package/src/sap/fe/core/templating/DataFieldFormatters.js +3 -55
- package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +363 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +3 -372
- package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +17 -8
- package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +56 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +3 -124
- package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +0 -47
- package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +68 -0
- package/src/sap/fe/core/templating/EntitySetHelper.js +3 -81
- package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -0
- package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +77 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +3 -74
- package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -0
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +346 -0
- package/src/sap/fe/core/templating/FilterHelper.js +3 -339
- package/src/sap/fe/core/templating/FilterHelper.js.map +1 -0
- package/src/sap/fe/core/templating/FilterHelper.ts +2 -21
- package/src/sap/fe/core/templating/FilterTemplating-dbg.js +62 -0
- package/src/sap/fe/core/templating/FilterTemplating.js +3 -59
- package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -0
- package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +93 -0
- package/src/sap/fe/core/templating/PropertyFormatters.js +3 -90
- package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +340 -0
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -337
- package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper-dbg.js +91 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +3 -43
- package/src/sap/fe/core/templating/SemanticObjectHelper.js.map +1 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +45 -1
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +498 -0
- package/src/sap/fe/core/templating/UIFormatters.js +3 -544
- package/src/sap/fe/core/templating/UIFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/UIFormatters.ts +60 -110
- package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +35 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -33
- package/src/sap/fe/core/type/DateTimeWithTimezone.js.map +1 -0
- package/src/sap/fe/core/type/EDM-dbg.js +84 -0
- package/src/sap/fe/core/type/EDM.js +6 -0
- package/src/sap/fe/core/type/EDM.js.map +1 -0
- package/src/sap/fe/core/type/EDM.ts +70 -0
- package/src/sap/fe/core/type/Email-dbg.js +29 -0
- package/src/sap/fe/core/type/Email.js +3 -26
- package/src/sap/fe/core/type/Email.js.map +1 -0
- package/src/sap/fe/core/type/FiscalDate-dbg.js +174 -0
- package/src/sap/fe/core/type/FiscalDate.js +6 -0
- package/src/sap/fe/core/type/FiscalDate.js.map +1 -0
- package/src/sap/fe/core/type/FiscalDate.ts +179 -0
- package/src/sap/fe/core/type/TypeUtil-dbg.js +58 -0
- package/src/sap/fe/core/type/TypeUtil.js +3 -55
- package/src/sap/fe/core/type/TypeUtil.js.map +1 -0
- package/src/sap/fe/core/type/TypeUtil.ts +1 -0
- package/src/.eslintrc +0 -7
|
@@ -1,1482 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/editFlow/operations", "sap/fe/core/controllerextensions/editFlow/sticky", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/helpers/DeleteHelper", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/m/Button", "sap/m/Dialog", "sap/m/MessageBox", "sap/m/MessageToast", "sap/m/Popover", "sap/m/Text", "sap/m/VBox", "sap/ui/core/Core", "sap/ui/core/Fragment", "sap/ui/core/library", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/model/json/JSONModel", "../../helpers/ToES6Promise"], function (Log, CommonUtils, BusyLocker, draft, operations, sticky, messageHandling, deleteHelper, FPMHelper, ModelHelper, StableIdHelper, FELibrary, Button, Dialog, MessageBox, MessageToast, Popover, Text, VBox, Core, Fragment, coreLibrary, XMLPreprocessor, XMLTemplateProcessor, JSONModel, toES6Promise) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var generate = StableIdHelper.generate;
|
|
9
|
-
function _catch(body, recover) {
|
|
10
|
-
try {
|
|
11
|
-
var result = body();
|
|
12
|
-
} catch (e) {
|
|
13
|
-
return recover(e);
|
|
14
|
-
}
|
|
15
|
-
if (result && result.then) {
|
|
16
|
-
return result.then(void 0, recover);
|
|
17
|
-
}
|
|
18
|
-
return result;
|
|
19
|
-
}
|
|
20
|
-
function _finallyRethrows(body, finalizer) {
|
|
21
|
-
try {
|
|
22
|
-
var result = body();
|
|
23
|
-
} catch (e) {
|
|
24
|
-
return finalizer(true, e);
|
|
25
|
-
}
|
|
26
|
-
if (result && result.then) {
|
|
27
|
-
return result.then(finalizer.bind(null, false), finalizer.bind(null, true));
|
|
28
|
-
}
|
|
29
|
-
return finalizer(false, result);
|
|
30
|
-
}
|
|
31
|
-
var CreationMode = FELibrary.CreationMode;
|
|
32
|
-
var ProgrammingModel = FELibrary.ProgrammingModel;
|
|
33
|
-
var ValueState = coreLibrary.ValueState;
|
|
34
|
-
/* Make sure that the mParameters is not the oEvent */
|
|
35
|
-
function getParameters(mParameters) {
|
|
36
|
-
if (mParameters && mParameters.getMetadata && mParameters.getMetadata().getName() === "sap.ui.base.Event") {
|
|
37
|
-
mParameters = {};
|
|
38
|
-
}
|
|
39
|
-
return mParameters || {};
|
|
40
|
-
}
|
|
41
|
-
var TransactionHelper = /*#__PURE__*/function () {
|
|
42
|
-
function TransactionHelper(oAppComponent, oLockObject) {
|
|
43
|
-
this._oAppComponent = oAppComponent;
|
|
44
|
-
this.oLockObject = oLockObject;
|
|
45
|
-
}
|
|
46
|
-
var _proto = TransactionHelper.prototype;
|
|
47
|
-
_proto.getProgrammingModel = function getProgrammingModel(oContext) {
|
|
48
|
-
if (!this.sProgrammingModel && oContext) {
|
|
49
|
-
var sPath;
|
|
50
|
-
if (oContext.isA("sap.ui.model.odata.v4.Context")) {
|
|
51
|
-
sPath = oContext.getPath();
|
|
52
|
-
} else {
|
|
53
|
-
sPath = oContext.isRelative() ? oContext.getResolvedPath() : oContext.getPath();
|
|
54
|
-
}
|
|
55
|
-
if (ModelHelper.isDraftSupported(oContext.getModel().getMetaModel(), sPath)) {
|
|
56
|
-
this.sProgrammingModel = ProgrammingModel.Draft;
|
|
57
|
-
} else if (ModelHelper.isStickySessionSupported(oContext.getModel().getMetaModel())) {
|
|
58
|
-
this.sProgrammingModel = ProgrammingModel.Sticky;
|
|
59
|
-
} else {
|
|
60
|
-
// as the transaction helper is a singleton we don't store the non draft as the user could
|
|
61
|
-
// start with a non draft child page and navigates back to a draft enabled one
|
|
62
|
-
return ProgrammingModel.NonDraft;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return this.sProgrammingModel;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Validates a document.
|
|
70
|
-
*
|
|
71
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
72
|
-
* @static
|
|
73
|
-
* @param oContext Context of the document to be validated
|
|
74
|
-
* @param [mParameters] Can contain the following attributes:
|
|
75
|
-
* @param [mParameters.data] A map of data that should be validated
|
|
76
|
-
* @param [mParameters.customValidationFunction] A string representing the path to the validation function
|
|
77
|
-
* @param oView Contains the object of the current view
|
|
78
|
-
* @returns Promise resolves with result of the custom validation function
|
|
79
|
-
* @ui5-restricted
|
|
80
|
-
* @final
|
|
81
|
-
*/;
|
|
82
|
-
_proto.validateDocument = function validateDocument(oContext, mParameters, oView) {
|
|
83
|
-
var sCustomValidationFunction = mParameters && mParameters.customValidationFunction;
|
|
84
|
-
if (sCustomValidationFunction) {
|
|
85
|
-
var sModule = sCustomValidationFunction.substring(0, sCustomValidationFunction.lastIndexOf(".") || -1).replace(/\./gi, "/"),
|
|
86
|
-
sFunctionName = sCustomValidationFunction.substring(sCustomValidationFunction.lastIndexOf(".") + 1, sCustomValidationFunction.length),
|
|
87
|
-
mData = mParameters.data;
|
|
88
|
-
delete mData["@$ui5.context.isTransient"];
|
|
89
|
-
return FPMHelper.validationWrapper(sModule, sFunctionName, mData, oView, oContext);
|
|
90
|
-
}
|
|
91
|
-
return Promise.resolve([]);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Creates a new document.
|
|
96
|
-
*
|
|
97
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
98
|
-
* @static
|
|
99
|
-
* @param oMainListBinding OData V4 ListBinding object
|
|
100
|
-
* @param [mInParameters] Optional, can contain the following attributes:
|
|
101
|
-
* @param [mInParameters.data] A map of data that should be sent within the POST
|
|
102
|
-
* @param [mInParameters.busyMode] Global (default), Local, None TODO: to be refactored
|
|
103
|
-
* @param [mInParameters.busyId] ID of the local busy indicator
|
|
104
|
-
* @param [mInParameters.keepTransientContextOnFailed] If set, the context stays in the list if the POST failed and POST will be repeated with the next change
|
|
105
|
-
* @param [mInParameters.inactive] If set, the context is set as inactive for empty rows
|
|
106
|
-
* @param [mInParameters.skipParameterDialog] Skips the action parameter dialog
|
|
107
|
-
* @param oResourceBundle
|
|
108
|
-
* @param messageHandler
|
|
109
|
-
* @param bFromCopyPaste
|
|
110
|
-
* @param oView The current view
|
|
111
|
-
* @returns Promise resolves with new binding context
|
|
112
|
-
* @ui5-restricted
|
|
113
|
-
* @final
|
|
114
|
-
*/;
|
|
115
|
-
_proto.createDocument = function createDocument(oMainListBinding, mInParameters, oResourceBundle, messageHandler) {
|
|
116
|
-
var bFromCopyPaste = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
117
|
-
var oView = arguments.length > 5 ? arguments[5] : undefined;
|
|
118
|
-
try {
|
|
119
|
-
var _exit2 = false;
|
|
120
|
-
var _this2 = this;
|
|
121
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
122
|
-
var oModel = oMainListBinding.getModel(),
|
|
123
|
-
oMetaModel = oModel.getMetaModel(),
|
|
124
|
-
sMetaPath = oMetaModel.getMetaPath(oMainListBinding.getHeaderContext().getPath()),
|
|
125
|
-
sCreateHash = _this2._getAppComponent().getRouterProxy().getHash(),
|
|
126
|
-
oComponentData = _this2._getAppComponent().getComponentData(),
|
|
127
|
-
oStartupParameters = oComponentData && oComponentData.startupParameters || {},
|
|
128
|
-
sNewAction = !oMainListBinding.isRelative() ? _this2._getNewAction(oStartupParameters, sCreateHash, oMetaModel, sMetaPath) : undefined;
|
|
129
|
-
var mBindingParameters = {
|
|
130
|
-
$$patchWithoutSideEffects: true
|
|
131
|
-
};
|
|
132
|
-
var sMessagesPath = oMetaModel.getObject("".concat(sMetaPath, "/@com.sap.vocabularies.Common.v1.Messages/$Path"));
|
|
133
|
-
var sBusyPath = "/busy";
|
|
134
|
-
var sFunctionName = oMetaModel.getObject("".concat(sMetaPath, "@com.sap.vocabularies.Common.v1.DefaultValuesFunction")) || oMetaModel.getObject("".concat(ModelHelper.getTargetEntitySet(oMetaModel.getContext(sMetaPath)), "@com.sap.vocabularies.Common.v1.DefaultValuesFunction"));
|
|
135
|
-
var bFunctionOnNavProp;
|
|
136
|
-
var oNewDocumentContext;
|
|
137
|
-
if (sFunctionName) {
|
|
138
|
-
if (oMetaModel.getObject("".concat(sMetaPath, "@com.sap.vocabularies.Common.v1.DefaultValuesFunction")) && ModelHelper.getTargetEntitySet(oMetaModel.getContext(sMetaPath)) !== sMetaPath) {
|
|
139
|
-
bFunctionOnNavProp = true;
|
|
140
|
-
} else {
|
|
141
|
-
bFunctionOnNavProp = false;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
if (sMessagesPath) {
|
|
145
|
-
mBindingParameters["$select"] = sMessagesPath;
|
|
146
|
-
}
|
|
147
|
-
var mParameters = getParameters(mInParameters);
|
|
148
|
-
if (!oMainListBinding) {
|
|
149
|
-
throw new Error("Binding required for new document creation");
|
|
150
|
-
}
|
|
151
|
-
var sProgrammingModel = _this2.getProgrammingModel(oMainListBinding);
|
|
152
|
-
if (sProgrammingModel !== ProgrammingModel.Draft && sProgrammingModel !== ProgrammingModel.Sticky) {
|
|
153
|
-
throw new Error("Create document only allowed for draft or sticky session supported services");
|
|
154
|
-
}
|
|
155
|
-
if (mParameters.busyMode === "Local") {
|
|
156
|
-
sBusyPath = "/busyLocal/".concat(mParameters.busyId);
|
|
157
|
-
}
|
|
158
|
-
mParameters.beforeCreateCallBack = bFromCopyPaste ? null : mParameters.beforeCreateCallBack;
|
|
159
|
-
BusyLocker.lock(_this2.oLockObject, sBusyPath);
|
|
160
|
-
var oResourceBundleCore = Core.getLibraryResourceBundle("sap.fe.core");
|
|
161
|
-
var oResult;
|
|
162
|
-
return Promise.resolve(_finallyRethrows(function () {
|
|
163
|
-
return _catch(function () {
|
|
164
|
-
function _temp8(_result) {
|
|
165
|
-
if (_exit2) return _result;
|
|
166
|
-
oNewDocumentContext = oNewDocumentContext || oResult;
|
|
167
|
-
return Promise.resolve(messageHandler.showMessageDialog({
|
|
168
|
-
control: mParameters.parentControl
|
|
169
|
-
})).then(function () {
|
|
170
|
-
return oNewDocumentContext;
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
var _temp7 = function () {
|
|
174
|
-
if (sNewAction) {
|
|
175
|
-
return Promise.resolve(_this2.callAction(sNewAction, {
|
|
176
|
-
contexts: oMainListBinding.getHeaderContext(),
|
|
177
|
-
showActionParameterDialog: true,
|
|
178
|
-
label: _this2._getSpecificCreateActionDialogLabel(oMetaModel, sMetaPath, sNewAction, oResourceBundleCore),
|
|
179
|
-
bindingParameters: mBindingParameters,
|
|
180
|
-
parentControl: mParameters.parentControl,
|
|
181
|
-
bIsCreateAction: true,
|
|
182
|
-
skipParameterDialog: mParameters.skipParameterDialog
|
|
183
|
-
}, null, messageHandler)).then(function (_this$callAction) {
|
|
184
|
-
oResult = _this$callAction;
|
|
185
|
-
});
|
|
186
|
-
} else {
|
|
187
|
-
var bIsNewPageCreation = mParameters.creationMode !== CreationMode.CreationRow && mParameters.creationMode !== CreationMode.Inline;
|
|
188
|
-
var aNonComputedVisibleKeyFields = bIsNewPageCreation ? CommonUtils.getNonComputedVisibleFields(oMetaModel, sMetaPath, oView) : [];
|
|
189
|
-
sFunctionName = bFromCopyPaste ? null : sFunctionName;
|
|
190
|
-
var sFunctionPath, oFunctionContext;
|
|
191
|
-
if (sFunctionName) {
|
|
192
|
-
//bound to the source entity:
|
|
193
|
-
if (bFunctionOnNavProp) {
|
|
194
|
-
sFunctionPath = oMainListBinding.getContext() && "".concat(oMetaModel.getMetaPath(oMainListBinding.getContext().getPath()), "/").concat(sFunctionName);
|
|
195
|
-
oFunctionContext = oMainListBinding.getContext();
|
|
196
|
-
} else {
|
|
197
|
-
sFunctionPath = oMainListBinding.getHeaderContext() && "".concat(oMetaModel.getMetaPath(oMainListBinding.getHeaderContext().getPath()), "/").concat(sFunctionName);
|
|
198
|
-
oFunctionContext = oMainListBinding.getHeaderContext();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
var oFunction = sFunctionPath && oMetaModel.createBindingContext(sFunctionPath);
|
|
202
|
-
return _catch(function () {
|
|
203
|
-
function _temp6(_result2) {
|
|
204
|
-
if (_exit2) return _result2;
|
|
205
|
-
mParameters.data = oData ? Object.assign({}, oData, mParameters.data) : mParameters.data;
|
|
206
|
-
if (mParameters.data) {
|
|
207
|
-
delete mParameters.data["@odata.context"];
|
|
208
|
-
}
|
|
209
|
-
var _temp4 = function () {
|
|
210
|
-
if (aNonComputedVisibleKeyFields.length > 0) {
|
|
211
|
-
return Promise.resolve(_this2._launchDialogWithKeyFields(oMainListBinding, aNonComputedVisibleKeyFields, oModel, mParameters, messageHandler)).then(function (_this$_launchDialogWi) {
|
|
212
|
-
oResult = _this$_launchDialogWi;
|
|
213
|
-
oNewDocumentContext = oResult.newContext;
|
|
214
|
-
});
|
|
215
|
-
} else {
|
|
216
|
-
function _temp9() {
|
|
217
|
-
oNewDocumentContext = oMainListBinding.create(mParameters.data, true, mParameters.createAtEnd, mParameters.inactive);
|
|
218
|
-
var _temp = function () {
|
|
219
|
-
if (!mParameters.inactive) {
|
|
220
|
-
return Promise.resolve(_this2.onAfterCreateCompletion(oMainListBinding, oNewDocumentContext, mParameters)).then(function (_this$onAfterCreateCo) {
|
|
221
|
-
oResult = _this$onAfterCreateCo;
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
}();
|
|
225
|
-
if (_temp && _temp.then) return _temp.then(function () {});
|
|
226
|
-
}
|
|
227
|
-
var _temp10 = function () {
|
|
228
|
-
if (mParameters.beforeCreateCallBack) {
|
|
229
|
-
return Promise.resolve(toES6Promise(mParameters.beforeCreateCallBack({
|
|
230
|
-
contextPath: oMainListBinding && oMainListBinding.getPath()
|
|
231
|
-
}))).then(function () {});
|
|
232
|
-
}
|
|
233
|
-
}();
|
|
234
|
-
return _temp10 && _temp10.then ? _temp10.then(_temp9) : _temp9(_temp10);
|
|
235
|
-
}
|
|
236
|
-
}();
|
|
237
|
-
if (_temp4 && _temp4.then) return _temp4.then(function () {});
|
|
238
|
-
}
|
|
239
|
-
var oData;
|
|
240
|
-
var _temp5 = _catch(function () {
|
|
241
|
-
return Promise.resolve(oFunction && oFunction.getObject() && oFunction.getObject()[0].$IsBound ? operations.callBoundFunction(sFunctionName, oFunctionContext, oModel) : operations.callFunctionImport(sFunctionName, oModel)).then(function (oContext) {
|
|
242
|
-
if (oContext) {
|
|
243
|
-
oData = oContext.getObject();
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
}, function (oError) {
|
|
247
|
-
Log.error("Error while executing the function ".concat(sFunctionName), oError);
|
|
248
|
-
throw oError;
|
|
249
|
-
});
|
|
250
|
-
return _temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5);
|
|
251
|
-
}, function (oError) {
|
|
252
|
-
Log.error("Error while creating the new document", oError);
|
|
253
|
-
throw oError;
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
}();
|
|
257
|
-
return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7);
|
|
258
|
-
}, function (error) {
|
|
259
|
-
// TODO: currently, the only errors handled here are raised as string - should be changed to Error objects
|
|
260
|
-
return Promise.resolve(messageHandler.showMessageDialog({
|
|
261
|
-
control: mParameters.parentControl
|
|
262
|
-
})).then(function () {
|
|
263
|
-
var _oNewDocumentContext;
|
|
264
|
-
if ((error === FELibrary.Constants.ActionExecutionFailed || error === FELibrary.Constants.CancelActionDialog) && (_oNewDocumentContext = oNewDocumentContext) !== null && _oNewDocumentContext !== void 0 && _oNewDocumentContext.isTransient()) {
|
|
265
|
-
// This is a workaround suggested by model as Context.delete results in an error
|
|
266
|
-
// TODO: remove the $direct once model resolves this issue
|
|
267
|
-
// this line shows the expected console error Uncaught (in promise) Error: Request canceled: POST Travel; group: submitLater
|
|
268
|
-
oNewDocumentContext.delete("$direct");
|
|
269
|
-
}
|
|
270
|
-
throw error;
|
|
271
|
-
});
|
|
272
|
-
});
|
|
273
|
-
}, function (_wasThrown, _result4) {
|
|
274
|
-
BusyLocker.unlock(_this2.oLockObject, sBusyPath);
|
|
275
|
-
if (_wasThrown) throw _result4;
|
|
276
|
-
return _result4;
|
|
277
|
-
}));
|
|
278
|
-
} catch (e) {
|
|
279
|
-
return Promise.reject(e);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Find the active contexts of the documents, only for the draft roots.
|
|
284
|
-
*
|
|
285
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
286
|
-
* @static
|
|
287
|
-
* @param aContexts Contexts Either one context or an array with contexts to be deleted
|
|
288
|
-
* @param bFindActiveContexts
|
|
289
|
-
* @returns Array of the active contexts
|
|
290
|
-
*/
|
|
291
|
-
;
|
|
292
|
-
_proto.findActiveDraftRootContexts = function findActiveDraftRootContexts(aContexts, bFindActiveContexts) {
|
|
293
|
-
if (!bFindActiveContexts) {
|
|
294
|
-
return Promise.resolve();
|
|
295
|
-
}
|
|
296
|
-
var activeContexts = aContexts.reduce(function (aResult, oContext) {
|
|
297
|
-
var oMetaModel = oContext.getModel().getMetaModel();
|
|
298
|
-
var sMetaPath = oMetaModel.getMetaPath(oContext.getPath());
|
|
299
|
-
if (oMetaModel.getObject("".concat(sMetaPath, "@com.sap.vocabularies.Common.v1.DraftRoot"))) {
|
|
300
|
-
var bIsActiveEntity = oContext.getObject().IsActiveEntity,
|
|
301
|
-
bHasActiveEntity = oContext.getObject().HasActiveEntity;
|
|
302
|
-
if (!bIsActiveEntity && bHasActiveEntity) {
|
|
303
|
-
var oActiveContext = oContext.getModel().bindContext("".concat(oContext.getPath(), "/SiblingEntity")).getBoundContext();
|
|
304
|
-
aResult.push(oActiveContext);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
return aResult;
|
|
308
|
-
}, []);
|
|
309
|
-
return Promise.all(activeContexts.map(function (oContext) {
|
|
310
|
-
return oContext.requestCanonicalPath().then(function () {
|
|
311
|
-
return oContext;
|
|
312
|
-
});
|
|
313
|
-
}));
|
|
314
|
-
};
|
|
315
|
-
_proto._isDraftEnabled = function _isDraftEnabled(vContexts, mParameters) {
|
|
316
|
-
var contextForDraftModel = vContexts[0] || mParameters.unSavedContexts && mParameters.unSavedContexts[0] || mParameters.draftsWithDeletableActive && mParameters.draftsWithDeletableActive[0] || mParameters.draftsWithNonDeletableActive && mParameters.draftsWithNonDeletableActive[0] || mParameters.createModeContexts && mParameters.createModeContexts[0];
|
|
317
|
-
var sProgrammingModel = this.getProgrammingModel(contextForDraftModel);
|
|
318
|
-
return sProgrammingModel === ProgrammingModel.Draft;
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Delete one or multiple document(s).
|
|
322
|
-
*
|
|
323
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
324
|
-
* @static
|
|
325
|
-
* @param vInContexts Contexts Either one context or an array with contexts to be deleted
|
|
326
|
-
* @param mParameters Optional, can contain the following attributes:
|
|
327
|
-
* @param mParameters.title Title of the object to be deleted
|
|
328
|
-
* @param mParameters.description Description of the object to be deleted
|
|
329
|
-
* @param mParameters.numberOfSelectedContexts Number of objects selected
|
|
330
|
-
* @param mParameters.noDialog To disable the confirmation dialog
|
|
331
|
-
* @param oResourceBundle
|
|
332
|
-
* @param messageHandler
|
|
333
|
-
* @returns A Promise resolved once the document are deleted
|
|
334
|
-
*/;
|
|
335
|
-
_proto.deleteDocument = function deleteDocument(vInContexts, mParameters, oResourceBundle, messageHandler) {
|
|
336
|
-
var bDialogConfirmed = false;
|
|
337
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
338
|
-
var that = this,
|
|
339
|
-
oResourceBundleCore = Core.getLibraryResourceBundle("sap.fe.core");
|
|
340
|
-
var aParams;
|
|
341
|
-
BusyLocker.lock(this.oLockObject);
|
|
342
|
-
var vContexts;
|
|
343
|
-
if (Array.isArray(vInContexts)) {
|
|
344
|
-
vContexts = vInContexts;
|
|
345
|
-
} else {
|
|
346
|
-
vContexts = [vInContexts];
|
|
347
|
-
}
|
|
348
|
-
return new Promise(function (resolve, reject) {
|
|
349
|
-
try {
|
|
350
|
-
var draftEnabled = that._isDraftEnabled(vContexts, mParameters);
|
|
351
|
-
var items = [];
|
|
352
|
-
var options = [];
|
|
353
|
-
if (mParameters) {
|
|
354
|
-
if (!mParameters.numberOfSelectedContexts) {
|
|
355
|
-
// non-Table
|
|
356
|
-
if (draftEnabled) {
|
|
357
|
-
for (var i = 0; i < vContexts.length; i++) {
|
|
358
|
-
var oContextData = vContexts[i].getObject();
|
|
359
|
-
if (oContextData.IsActiveEntity === true && oContextData.HasDraftEntity === true && oContextData.DraftAdministrativeData && oContextData.DraftAdministrativeData.InProcessByUser && !oContextData.DraftAdministrativeData.DraftIsCreatedByMe) {
|
|
360
|
-
var sLockedUser = "";
|
|
361
|
-
var draftAdminData = oContextData && oContextData.DraftAdministrativeData;
|
|
362
|
-
if (draftAdminData) {
|
|
363
|
-
sLockedUser = draftAdminData["InProcessByUser"];
|
|
364
|
-
}
|
|
365
|
-
aParams = [sLockedUser];
|
|
366
|
-
MessageBox.show(CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_SINGLE_OBJECT_LOCKED", oResourceBundle, aParams), {
|
|
367
|
-
title: oResourceBundleCore.getText("C_COMMON_DELETE"),
|
|
368
|
-
onClose: reject
|
|
369
|
-
});
|
|
370
|
-
return;
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
mParameters = getParameters(mParameters);
|
|
375
|
-
var nonTableTxt = "";
|
|
376
|
-
if (mParameters.title) {
|
|
377
|
-
if (mParameters.description) {
|
|
378
|
-
aParams = [mParameters.title + " ", mParameters.description];
|
|
379
|
-
} else {
|
|
380
|
-
aParams = [mParameters.title, ""];
|
|
381
|
-
}
|
|
382
|
-
nonTableTxt = CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO", oResourceBundle, aParams, mParameters.entitySetName);
|
|
383
|
-
} else {
|
|
384
|
-
nonTableTxt = CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR", oResourceBundle, undefined, mParameters.entitySetName);
|
|
385
|
-
}
|
|
386
|
-
options.push({
|
|
387
|
-
type: "deletableContexts",
|
|
388
|
-
contexts: vContexts,
|
|
389
|
-
text: nonTableTxt,
|
|
390
|
-
selected: true,
|
|
391
|
-
control: "text"
|
|
392
|
-
});
|
|
393
|
-
} else {
|
|
394
|
-
// Table
|
|
395
|
-
var totalDeletable = vContexts.length;
|
|
396
|
-
if (draftEnabled) {
|
|
397
|
-
totalDeletable += mParameters.draftsWithNonDeletableActive.length + mParameters.draftsWithDeletableActive.length + mParameters.unSavedContexts.length + mParameters.createModeContexts.length;
|
|
398
|
-
deleteHelper.updateDraftOptionsForDeletableTexts(mParameters, vContexts, totalDeletable, oResourceBundle, items, options);
|
|
399
|
-
}
|
|
400
|
-
deleteHelper.updateOptionsForDeletableTexts(mParameters, vContexts, oResourceBundle, options);
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
// Content of Delete Dialog
|
|
405
|
-
deleteHelper.updateContentForDeleteDialog(options, items);
|
|
406
|
-
var vBox = new VBox({
|
|
407
|
-
items: items
|
|
408
|
-
});
|
|
409
|
-
var sTitle = oResourceBundleCore.getText("C_COMMON_DELETE");
|
|
410
|
-
var fnConfirm = function () {
|
|
411
|
-
try {
|
|
412
|
-
BusyLocker.lock(that.oLockObject);
|
|
413
|
-
var _temp12 = _finallyRethrows(function () {
|
|
414
|
-
return _catch(function () {
|
|
415
|
-
return Promise.resolve(deleteHelper.deleteConfirmHandler(options, mParameters, messageHandler, oResourceBundle, that._oAppComponent, draftEnabled)).then(function () {
|
|
416
|
-
resolve();
|
|
417
|
-
});
|
|
418
|
-
}, function () {
|
|
419
|
-
reject();
|
|
420
|
-
});
|
|
421
|
-
}, function (_wasThrown2, _result5) {
|
|
422
|
-
BusyLocker.unlock(that.oLockObject);
|
|
423
|
-
if (_wasThrown2) throw _result5;
|
|
424
|
-
return _result5;
|
|
425
|
-
});
|
|
426
|
-
return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(function () {}) : void 0);
|
|
427
|
-
} catch (e) {
|
|
428
|
-
return Promise.reject(e);
|
|
429
|
-
}
|
|
430
|
-
};
|
|
431
|
-
var oDialog = new Dialog({
|
|
432
|
-
title: sTitle,
|
|
433
|
-
state: "Warning",
|
|
434
|
-
content: [vBox],
|
|
435
|
-
ariaLabelledBy: items,
|
|
436
|
-
beginButton: new Button({
|
|
437
|
-
text: oResourceBundleCore.getText("C_COMMON_DELETE"),
|
|
438
|
-
type: "Emphasized",
|
|
439
|
-
press: function () {
|
|
440
|
-
messageHandling.removeBoundTransitionMessages();
|
|
441
|
-
bDialogConfirmed = true;
|
|
442
|
-
oDialog.close();
|
|
443
|
-
fnConfirm();
|
|
444
|
-
}
|
|
445
|
-
}),
|
|
446
|
-
endButton: new Button({
|
|
447
|
-
text: CommonUtils.getTranslatedText("C_COMMON_DIALOG_CANCEL", oResourceBundle),
|
|
448
|
-
press: function () {
|
|
449
|
-
oDialog.close();
|
|
450
|
-
}
|
|
451
|
-
}),
|
|
452
|
-
afterClose: function () {
|
|
453
|
-
oDialog.destroy();
|
|
454
|
-
// if dialog is closed unconfirmed (e.g. via "Cancel" or Escape button), ensure to reject promise
|
|
455
|
-
if (!bDialogConfirmed) {
|
|
456
|
-
reject();
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
});
|
|
460
|
-
if (mParameters.noDialog) {
|
|
461
|
-
fnConfirm();
|
|
462
|
-
} else {
|
|
463
|
-
oDialog.addStyleClass("sapUiContentPadding");
|
|
464
|
-
oDialog.open();
|
|
465
|
-
}
|
|
466
|
-
} finally {
|
|
467
|
-
BusyLocker.unlock(that.oLockObject);
|
|
468
|
-
}
|
|
469
|
-
});
|
|
470
|
-
}
|
|
471
|
-
/**
|
|
472
|
-
* Edits a document.
|
|
473
|
-
*
|
|
474
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
475
|
-
* @static
|
|
476
|
-
* @param oContext Context of the active document
|
|
477
|
-
* @param oView Current view
|
|
478
|
-
* @param messageHandler
|
|
479
|
-
* @returns Promise resolves with the new draft context in case of draft programming model
|
|
480
|
-
* @ui5-restricted
|
|
481
|
-
* @final
|
|
482
|
-
*/;
|
|
483
|
-
_proto.editDocument = function editDocument(oContext, oView, messageHandler) {
|
|
484
|
-
try {
|
|
485
|
-
var _this4 = this;
|
|
486
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
487
|
-
var that = _this4;
|
|
488
|
-
var sProgrammingModel = _this4.getProgrammingModel(oContext);
|
|
489
|
-
if (!oContext) {
|
|
490
|
-
throw new Error("Binding context to active document is required");
|
|
491
|
-
}
|
|
492
|
-
if (sProgrammingModel !== ProgrammingModel.Draft && sProgrammingModel !== ProgrammingModel.Sticky) {
|
|
493
|
-
throw new Error("Edit is only allowed for draft or sticky session supported services");
|
|
494
|
-
}
|
|
495
|
-
BusyLocker.lock(that.oLockObject);
|
|
496
|
-
// before triggering the edit action we'll have to remove all bound transition messages
|
|
497
|
-
messageHandler.removeTransitionMessages();
|
|
498
|
-
return Promise.resolve(_finallyRethrows(function () {
|
|
499
|
-
return _catch(function () {
|
|
500
|
-
return Promise.resolve(sProgrammingModel === ProgrammingModel.Draft ? draft.createDraftFromActiveDocument(oContext, _this4._getAppComponent(), {
|
|
501
|
-
bPreserveChanges: true,
|
|
502
|
-
oView: oView
|
|
503
|
-
}) : sticky.editDocumentInStickySession(oContext, _this4._getAppComponent())).then(function (oNewContext) {
|
|
504
|
-
return Promise.resolve(messageHandler.showMessageDialog()).then(function () {
|
|
505
|
-
return oNewContext;
|
|
506
|
-
});
|
|
507
|
-
});
|
|
508
|
-
}, function (err) {
|
|
509
|
-
return Promise.resolve(messageHandler.showMessages({
|
|
510
|
-
concurrentEditFlag: true
|
|
511
|
-
})).then(function () {
|
|
512
|
-
throw err;
|
|
513
|
-
});
|
|
514
|
-
});
|
|
515
|
-
}, function (_wasThrown3, _result6) {
|
|
516
|
-
BusyLocker.unlock(that.oLockObject);
|
|
517
|
-
if (_wasThrown3) throw _result6;
|
|
518
|
-
return _result6;
|
|
519
|
-
}));
|
|
520
|
-
} catch (e) {
|
|
521
|
-
return Promise.reject(e);
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
/**
|
|
525
|
-
* Cancel 'edit' mode of a document.
|
|
526
|
-
*
|
|
527
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
528
|
-
* @static
|
|
529
|
-
* @param oContext Context of the document to be canceled or deleted
|
|
530
|
-
* @param [mInParameters] Optional, can contain the following attributes:
|
|
531
|
-
* @param mInParameters.cancelButton Cancel Button of the discard popover (mandatory for now)
|
|
532
|
-
* @param mInParameters.skipDiscardPopover Optional, supresses the discard popover incase of draft applications while navigating out of OP
|
|
533
|
-
* @param oResourceBundle
|
|
534
|
-
* @param messageHandler
|
|
535
|
-
* @param isNewObject True if we're trying to cancel a newly created object
|
|
536
|
-
* @param isObjectModified True if the object has been modified by the user
|
|
537
|
-
* @returns Promise resolves with ???
|
|
538
|
-
* @ui5-restricted
|
|
539
|
-
* @final
|
|
540
|
-
*/
|
|
541
|
-
;
|
|
542
|
-
_proto.cancelDocument = function cancelDocument(oContext, mInParameters, oResourceBundle, messageHandler, isNewObject, isObjectModified) {
|
|
543
|
-
try {
|
|
544
|
-
var _this6 = this;
|
|
545
|
-
//context must always be passed - mandatory parameter
|
|
546
|
-
if (!oContext) {
|
|
547
|
-
throw new Error("No context exists. Pass a meaningful context");
|
|
548
|
-
}
|
|
549
|
-
BusyLocker.lock(_this6.oLockObject);
|
|
550
|
-
var mParameters = getParameters(mInParameters);
|
|
551
|
-
var oModel = oContext.getModel();
|
|
552
|
-
var sProgrammingModel = _this6.getProgrammingModel(oContext);
|
|
553
|
-
if (sProgrammingModel !== ProgrammingModel.Draft && sProgrammingModel !== ProgrammingModel.Sticky) {
|
|
554
|
-
throw new Error("Cancel document only allowed for draft or sticky session supported services");
|
|
555
|
-
}
|
|
556
|
-
return Promise.resolve(_finallyRethrows(function () {
|
|
557
|
-
return _catch(function () {
|
|
558
|
-
function _temp22() {
|
|
559
|
-
function _temp20() {
|
|
560
|
-
function _temp18() {
|
|
561
|
-
function _temp16() {
|
|
562
|
-
// remove existing bound transition messages
|
|
563
|
-
messageHandler.removeTransitionMessages();
|
|
564
|
-
// show unbound messages
|
|
565
|
-
return Promise.resolve(messageHandler.showMessages()).then(function () {
|
|
566
|
-
return returnedValue;
|
|
567
|
-
});
|
|
568
|
-
}
|
|
569
|
-
var _temp15 = function () {
|
|
570
|
-
if (sProgrammingModel === ProgrammingModel.Draft) {
|
|
571
|
-
var _temp23 = function () {
|
|
572
|
-
if (isNewObject) {
|
|
573
|
-
if (oContext.hasPendingChanges()) {
|
|
574
|
-
oContext.getBinding().resetChanges();
|
|
575
|
-
}
|
|
576
|
-
return Promise.resolve(draft.deleteDraft(oContext, _this6._oAppComponent)).then(function (_draft$deleteDraft) {
|
|
577
|
-
returnedValue = _draft$deleteDraft;
|
|
578
|
-
});
|
|
579
|
-
} else {
|
|
580
|
-
var oSiblingContext = oModel.bindContext("".concat(oContext.getPath(), "/SiblingEntity")).getBoundContext();
|
|
581
|
-
var _temp24 = _finallyRethrows(function () {
|
|
582
|
-
return Promise.resolve(oSiblingContext.requestCanonicalPath()).then(function (sCanonicalPath) {
|
|
583
|
-
if (oContext.hasPendingChanges()) {
|
|
584
|
-
oContext.getBinding().resetChanges();
|
|
585
|
-
}
|
|
586
|
-
returnedValue = oModel.bindContext(sCanonicalPath).getBoundContext();
|
|
587
|
-
});
|
|
588
|
-
}, function (_wasThrown4, _result7) {
|
|
589
|
-
return Promise.resolve(draft.deleteDraft(oContext, _this6._oAppComponent)).then(function () {
|
|
590
|
-
if (_wasThrown4) throw _result7;
|
|
591
|
-
return _result7;
|
|
592
|
-
});
|
|
593
|
-
});
|
|
594
|
-
if (_temp24 && _temp24.then) return _temp24.then(function () {});
|
|
595
|
-
}
|
|
596
|
-
}();
|
|
597
|
-
if (_temp23 && _temp23.then) return _temp23.then(function () {});
|
|
598
|
-
} else {
|
|
599
|
-
return Promise.resolve(sticky.discardDocument(oContext)).then(function (discardedContext) {
|
|
600
|
-
if (discardedContext) {
|
|
601
|
-
if (discardedContext.hasPendingChanges()) {
|
|
602
|
-
discardedContext.getBinding().resetChanges();
|
|
603
|
-
}
|
|
604
|
-
if (!isNewObject) {
|
|
605
|
-
discardedContext.refresh();
|
|
606
|
-
returnedValue = discardedContext;
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
});
|
|
610
|
-
}
|
|
611
|
-
}();
|
|
612
|
-
return _temp15 && _temp15.then ? _temp15.then(_temp16) : _temp16(_temp15);
|
|
613
|
-
}
|
|
614
|
-
if (oContext.isKeepAlive()) {
|
|
615
|
-
oContext.setKeepAlive(false);
|
|
616
|
-
}
|
|
617
|
-
var _temp17 = function () {
|
|
618
|
-
if (mParameters.beforeCancelCallBack) {
|
|
619
|
-
return Promise.resolve(mParameters.beforeCancelCallBack({
|
|
620
|
-
context: oContext
|
|
621
|
-
})).then(function () {});
|
|
622
|
-
}
|
|
623
|
-
}();
|
|
624
|
-
return _temp17 && _temp17.then ? _temp17.then(_temp18) : _temp18(_temp17);
|
|
625
|
-
}
|
|
626
|
-
var _temp19 = function () {
|
|
627
|
-
if (!mParameters.skipDiscardPopover) {
|
|
628
|
-
return Promise.resolve(_this6._showDiscardPopover(mParameters.cancelButton, isObjectModified, oResourceBundle)).then(function () {});
|
|
629
|
-
}
|
|
630
|
-
}();
|
|
631
|
-
return _temp19 && _temp19.then ? _temp19.then(_temp20) : _temp20(_temp19);
|
|
632
|
-
}
|
|
633
|
-
var returnedValue = false;
|
|
634
|
-
var _temp21 = function () {
|
|
635
|
-
if (sProgrammingModel === ProgrammingModel.Draft && !isObjectModified) {
|
|
636
|
-
var draftDataContext = oModel.bindContext("".concat(oContext.getPath(), "/DraftAdministrativeData")).getBoundContext();
|
|
637
|
-
return Promise.resolve(draftDataContext.requestObject()).then(function (draftAdminData) {
|
|
638
|
-
if (draftAdminData) {
|
|
639
|
-
isObjectModified = draftAdminData.CreationDateTime !== draftAdminData.LastChangeDateTime;
|
|
640
|
-
}
|
|
641
|
-
});
|
|
642
|
-
}
|
|
643
|
-
}();
|
|
644
|
-
return _temp21 && _temp21.then ? _temp21.then(_temp22) : _temp22(_temp21);
|
|
645
|
-
}, function (err) {
|
|
646
|
-
return Promise.resolve(messageHandler.showMessages()).then(function () {
|
|
647
|
-
throw err;
|
|
648
|
-
});
|
|
649
|
-
});
|
|
650
|
-
}, function (_wasThrown5, _result8) {
|
|
651
|
-
BusyLocker.unlock(_this6.oLockObject);
|
|
652
|
-
if (_wasThrown5) throw _result8;
|
|
653
|
-
return _result8;
|
|
654
|
-
}));
|
|
655
|
-
} catch (e) {
|
|
656
|
-
return Promise.reject(e);
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
/**
|
|
660
|
-
* Saves the document.
|
|
661
|
-
*
|
|
662
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
663
|
-
* @static
|
|
664
|
-
* @param oContext Context of the document to be saved
|
|
665
|
-
* @param oResourceBundle
|
|
666
|
-
* @param bExecuteSideEffectsOnError
|
|
667
|
-
* @param aBindings
|
|
668
|
-
* @param messageHandler
|
|
669
|
-
* @param isNewObject True if we're trying to cancel a newly created object
|
|
670
|
-
* @returns Promise resolves with ???
|
|
671
|
-
* @ui5-restricted
|
|
672
|
-
* @final
|
|
673
|
-
*/
|
|
674
|
-
;
|
|
675
|
-
_proto.saveDocument = function saveDocument(oContext, oResourceBundle, bExecuteSideEffectsOnError, aBindings, messageHandler, isNewObject) {
|
|
676
|
-
try {
|
|
677
|
-
var _this8 = this;
|
|
678
|
-
if (!oContext) {
|
|
679
|
-
return Promise.reject(new Error("Binding context to draft document is required"));
|
|
680
|
-
}
|
|
681
|
-
var sProgrammingModel = _this8.getProgrammingModel(oContext);
|
|
682
|
-
if (sProgrammingModel !== ProgrammingModel.Sticky && sProgrammingModel !== ProgrammingModel.Draft) {
|
|
683
|
-
throw new Error("Save is only allowed for draft or sticky session supported services");
|
|
684
|
-
}
|
|
685
|
-
// in case of saving / activating the bound transition messages shall be removed before the PATCH/POST
|
|
686
|
-
// is sent to the backend
|
|
687
|
-
messageHandler.removeTransitionMessages();
|
|
688
|
-
return Promise.resolve(_finallyRethrows(function () {
|
|
689
|
-
return _catch(function () {
|
|
690
|
-
BusyLocker.lock(_this8.oLockObject);
|
|
691
|
-
return Promise.resolve(sProgrammingModel === ProgrammingModel.Draft ? draft.activateDocument(oContext, _this8._getAppComponent(), {}, messageHandler) : sticky.activateDocument(oContext, _this8._getAppComponent())).then(function (oActiveDocument) {
|
|
692
|
-
var messagesReceived = messageHandling.getMessages().concat(messageHandling.getMessages(true, true)); // get unbound and bound messages present in the model
|
|
693
|
-
if (!(messagesReceived.length === 1 && messagesReceived[0].type === coreLibrary.MessageType.Success)) {
|
|
694
|
-
// show our object creation toast only if it is not coming from backend
|
|
695
|
-
MessageToast.show(isNewObject ? CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_OBJECT_CREATED", oResourceBundle) : CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_OBJECT_SAVED", oResourceBundle));
|
|
696
|
-
}
|
|
697
|
-
return oActiveDocument;
|
|
698
|
-
});
|
|
699
|
-
}, function (err) {
|
|
700
|
-
if (aBindings && aBindings.length > 0) {
|
|
701
|
-
/* The sideEffects are executed only for table items in transient state */
|
|
702
|
-
aBindings.forEach(function (oListBinding) {
|
|
703
|
-
if (!CommonUtils.hasTransientContext(oListBinding) && bExecuteSideEffectsOnError) {
|
|
704
|
-
var oAppComponent = _this8._getAppComponent();
|
|
705
|
-
oAppComponent.getSideEffectsService().requestSideEffectsForNavigationProperty(oListBinding.getPath(), oContext);
|
|
706
|
-
}
|
|
707
|
-
});
|
|
708
|
-
}
|
|
709
|
-
return Promise.resolve(messageHandler.showMessages()).then(function () {
|
|
710
|
-
throw err;
|
|
711
|
-
});
|
|
712
|
-
});
|
|
713
|
-
}, function (_wasThrown6, _result9) {
|
|
714
|
-
BusyLocker.unlock(_this8.oLockObject);
|
|
715
|
-
if (_wasThrown6) throw _result9;
|
|
716
|
-
return _result9;
|
|
717
|
-
}));
|
|
718
|
-
} catch (e) {
|
|
719
|
-
return Promise.reject(e);
|
|
720
|
-
}
|
|
721
|
-
}
|
|
722
|
-
/**
|
|
723
|
-
* Calls a bound or unbound action.
|
|
724
|
-
*
|
|
725
|
-
* @function
|
|
726
|
-
* @static
|
|
727
|
-
* @name sap.fe.core.TransactionHelper.callAction
|
|
728
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
729
|
-
* @param sActionName The name of the action to be called
|
|
730
|
-
* @param [mParameters] Contains the following attributes:
|
|
731
|
-
* @param [mParameters.parameterValues] A map of action parameter names and provided values
|
|
732
|
-
* @param [mParameters.skipParameterDialog] Skips the parameter dialog if values are provided for all of them
|
|
733
|
-
* @param [mParameters.contexts] Mandatory for a bound action: Either one context or an array with contexts for which the action is to be called
|
|
734
|
-
* @param [mParameters.model] Mandatory for an unbound action: An instance of an OData V4 model
|
|
735
|
-
* @param [mParameters.invocationGrouping] Mode how actions are to be called: 'ChangeSet' to put all action calls into one changeset, 'Isolated' to put them into separate changesets
|
|
736
|
-
* @param [mParameters.label] A human-readable label for the action
|
|
737
|
-
* @param [mParameters.bGetBoundContext] If specified, the action promise returns the bound context
|
|
738
|
-
* @param oView Contains the object of the current view
|
|
739
|
-
* @param messageHandler
|
|
740
|
-
* @returns Promise resolves with an array of response objects (TODO: to be changed)
|
|
741
|
-
* @ui5-restricted
|
|
742
|
-
* @final
|
|
743
|
-
*/
|
|
744
|
-
;
|
|
745
|
-
_proto.callAction = function callAction(sActionName, mParameters, oView, messageHandler) {
|
|
746
|
-
try {
|
|
747
|
-
var _this10 = this;
|
|
748
|
-
mParameters = getParameters(mParameters);
|
|
749
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
750
|
-
var that = _this10;
|
|
751
|
-
var oContext, oModel;
|
|
752
|
-
var mBindingParameters = mParameters.bindingParameters;
|
|
753
|
-
if (!sActionName) {
|
|
754
|
-
throw new Error("Provide name of action to be executed");
|
|
755
|
-
}
|
|
756
|
-
// action imports are not directly obtained from the metaModel by it is present inside the entityContainer
|
|
757
|
-
// and the acions it refers to present outside the entitycontainer, hence to obtain kind of the action
|
|
758
|
-
// split() on its name was required
|
|
759
|
-
var sName = sActionName.split("/")[1];
|
|
760
|
-
sActionName = sName || sActionName;
|
|
761
|
-
oContext = sName ? undefined : mParameters.contexts;
|
|
762
|
-
//checking whether the context is an array with more than 0 length or not an array(create action)
|
|
763
|
-
if (oContext && (Array.isArray(oContext) && oContext.length || !Array.isArray(oContext))) {
|
|
764
|
-
oContext = Array.isArray(oContext) ? oContext[0] : oContext;
|
|
765
|
-
oModel = oContext.getModel();
|
|
766
|
-
}
|
|
767
|
-
if (mParameters.model) {
|
|
768
|
-
oModel = mParameters.model;
|
|
769
|
-
}
|
|
770
|
-
if (!oModel) {
|
|
771
|
-
throw new Error("Pass a context for a bound action or pass the model for an unbound action");
|
|
772
|
-
}
|
|
773
|
-
// get the binding parameters $select and $expand for the side effect on this action
|
|
774
|
-
// also gather additional property paths to be requested such as text associations
|
|
775
|
-
var oAppComponent = that._getAppComponent();
|
|
776
|
-
var mSideEffectsParameters = oAppComponent.getSideEffectsService().getODataActionSideEffects(sActionName, oContext) || {};
|
|
777
|
-
var displayUnapplicableContextsDialog = function () {
|
|
778
|
-
if (!mParameters.notApplicableContext || mParameters.notApplicableContext.length === 0) {
|
|
779
|
-
return Promise.resolve(mParameters.contexts);
|
|
780
|
-
}
|
|
781
|
-
return new Promise(function (resolve, reject) {
|
|
782
|
-
try {
|
|
783
|
-
var fnOpenAndFillDialog = function (oDlg) {
|
|
784
|
-
var oDialogContent;
|
|
785
|
-
var nNotApplicable = mParameters.notApplicableContext.length,
|
|
786
|
-
aNotApplicableItems = [];
|
|
787
|
-
for (var i = 0; i < mParameters.notApplicableContext.length; i++) {
|
|
788
|
-
oDialogContent = mParameters.notApplicableContext[i].getObject();
|
|
789
|
-
aNotApplicableItems.push(oDialogContent);
|
|
790
|
-
}
|
|
791
|
-
var oNotApplicableItemsModel = new JSONModel(aNotApplicableItems);
|
|
792
|
-
var oTotals = new JSONModel({
|
|
793
|
-
total: nNotApplicable,
|
|
794
|
-
label: mParameters.label
|
|
795
|
-
});
|
|
796
|
-
oDlg.setModel(oNotApplicableItemsModel, "notApplicable");
|
|
797
|
-
oDlg.setModel(oTotals, "totals");
|
|
798
|
-
oDlg.open();
|
|
799
|
-
};
|
|
800
|
-
// Show the contexts that are not applicable and will not therefore be processed
|
|
801
|
-
var sFragmentName = "sap.fe.core.controls.ActionPartial";
|
|
802
|
-
var oDialogFragment = XMLTemplateProcessor.loadTemplate(sFragmentName, "fragment");
|
|
803
|
-
var oMetaModel = oModel.getMetaModel();
|
|
804
|
-
var sCanonicalPath = mParameters.contexts[0].getCanonicalPath();
|
|
805
|
-
var sEntitySet = "".concat(sCanonicalPath.substr(0, sCanonicalPath.indexOf("(")), "/");
|
|
806
|
-
var oDialogLabelModel = new JSONModel({
|
|
807
|
-
title: mParameters.label
|
|
808
|
-
});
|
|
809
|
-
var _temp29 = _catch(function () {
|
|
810
|
-
return Promise.resolve(XMLPreprocessor.process(oDialogFragment, {
|
|
811
|
-
name: sFragmentName
|
|
812
|
-
}, {
|
|
813
|
-
bindingContexts: {
|
|
814
|
-
entityType: oMetaModel.createBindingContext(sEntitySet),
|
|
815
|
-
label: oDialogLabelModel.createBindingContext("/")
|
|
816
|
-
},
|
|
817
|
-
models: {
|
|
818
|
-
entityType: oMetaModel,
|
|
819
|
-
metaModel: oMetaModel,
|
|
820
|
-
label: oDialogLabelModel
|
|
821
|
-
}
|
|
822
|
-
})).then(function (oFragment) {
|
|
823
|
-
// eslint-disable-next-line prefer-const
|
|
824
|
-
var oDialog;
|
|
825
|
-
var oController = {
|
|
826
|
-
onClose: function () {
|
|
827
|
-
// User cancels action
|
|
828
|
-
oDialog.close();
|
|
829
|
-
resolve();
|
|
830
|
-
},
|
|
831
|
-
onContinue: function () {
|
|
832
|
-
// Users continues the action with the bound contexts
|
|
833
|
-
oDialog.close();
|
|
834
|
-
resolve(mParameters.applicableContext);
|
|
835
|
-
}
|
|
836
|
-
};
|
|
837
|
-
return Promise.resolve(Fragment.load({
|
|
838
|
-
definition: oFragment,
|
|
839
|
-
controller: oController
|
|
840
|
-
})).then(function (_Fragment$load) {
|
|
841
|
-
oDialog = _Fragment$load;
|
|
842
|
-
oController.onClose = function () {
|
|
843
|
-
// User cancels action
|
|
844
|
-
oDialog.close();
|
|
845
|
-
resolve();
|
|
846
|
-
};
|
|
847
|
-
oController.onContinue = function () {
|
|
848
|
-
// Users continues the action with the bound contexts
|
|
849
|
-
oDialog.close();
|
|
850
|
-
resolve(mParameters.applicableContext);
|
|
851
|
-
};
|
|
852
|
-
mParameters.parentControl.addDependent(oDialog);
|
|
853
|
-
fnOpenAndFillDialog(oDialog);
|
|
854
|
-
});
|
|
855
|
-
});
|
|
856
|
-
}, function (oError) {
|
|
857
|
-
reject(oError);
|
|
858
|
-
});
|
|
859
|
-
return Promise.resolve(_temp29 && _temp29.then ? _temp29.then(function () {}) : void 0);
|
|
860
|
-
} catch (e) {
|
|
861
|
-
return Promise.reject(e);
|
|
862
|
-
}
|
|
863
|
-
});
|
|
864
|
-
};
|
|
865
|
-
return Promise.resolve(_catch(function () {
|
|
866
|
-
function _temp27() {
|
|
867
|
-
return Promise.resolve(_this10._handleActionResponse(messageHandler, mParameters, sActionName)).then(function () {
|
|
868
|
-
return oResult;
|
|
869
|
-
});
|
|
870
|
-
}
|
|
871
|
-
var oResult;
|
|
872
|
-
var _temp26 = function () {
|
|
873
|
-
if (oContext && oModel) {
|
|
874
|
-
return Promise.resolve(displayUnapplicableContextsDialog()).then(function (contextToProcess) {
|
|
875
|
-
var _temp25 = function () {
|
|
876
|
-
if (contextToProcess) {
|
|
877
|
-
return Promise.resolve(operations.callBoundAction(sActionName, contextToProcess, oModel, oAppComponent, {
|
|
878
|
-
parameterValues: mParameters.parameterValues,
|
|
879
|
-
invocationGrouping: mParameters.invocationGrouping,
|
|
880
|
-
label: mParameters.label,
|
|
881
|
-
skipParameterDialog: mParameters.skipParameterDialog,
|
|
882
|
-
mBindingParameters: mBindingParameters,
|
|
883
|
-
entitySetName: mParameters.entitySetName,
|
|
884
|
-
additionalSideEffect: mSideEffectsParameters,
|
|
885
|
-
onSubmitted: function () {
|
|
886
|
-
messageHandler.removeTransitionMessages();
|
|
887
|
-
BusyLocker.lock(that.oLockObject);
|
|
888
|
-
},
|
|
889
|
-
onResponse: function () {
|
|
890
|
-
BusyLocker.unlock(that.oLockObject);
|
|
891
|
-
},
|
|
892
|
-
parentControl: mParameters.parentControl,
|
|
893
|
-
controlId: mParameters.controlId,
|
|
894
|
-
internalModelContext: mParameters.internalModelContext,
|
|
895
|
-
operationAvailableMap: mParameters.operationAvailableMap,
|
|
896
|
-
bIsCreateAction: mParameters.bIsCreateAction,
|
|
897
|
-
bGetBoundContext: mParameters.bGetBoundContext,
|
|
898
|
-
bObjectPage: mParameters.bObjectPage,
|
|
899
|
-
messageHandler: messageHandler,
|
|
900
|
-
defaultValuesExtensionFunction: mParameters.defaultValuesExtensionFunction,
|
|
901
|
-
selectedItems: mParameters.contexts
|
|
902
|
-
})).then(function (_operations$callBound) {
|
|
903
|
-
oResult = _operations$callBound;
|
|
904
|
-
});
|
|
905
|
-
} else {
|
|
906
|
-
oResult = null;
|
|
907
|
-
}
|
|
908
|
-
}();
|
|
909
|
-
if (_temp25 && _temp25.then) return _temp25.then(function () {});
|
|
910
|
-
});
|
|
911
|
-
} else {
|
|
912
|
-
return Promise.resolve(operations.callActionImport(sActionName, oModel, oAppComponent, {
|
|
913
|
-
parameterValues: mParameters.parameterValues,
|
|
914
|
-
label: mParameters.label,
|
|
915
|
-
skipParameterDialog: mParameters.skipParameterDialog,
|
|
916
|
-
bindingParameters: mBindingParameters,
|
|
917
|
-
entitySetName: mParameters.entitySetName,
|
|
918
|
-
onSubmitted: function () {
|
|
919
|
-
BusyLocker.lock(that.oLockObject);
|
|
920
|
-
},
|
|
921
|
-
onResponse: function () {
|
|
922
|
-
BusyLocker.unlock(that.oLockObject);
|
|
923
|
-
},
|
|
924
|
-
parentControl: mParameters.parentControl,
|
|
925
|
-
internalModelContext: mParameters.internalModelContext,
|
|
926
|
-
operationAvailableMap: mParameters.operationAvailableMap,
|
|
927
|
-
messageHandler: messageHandler,
|
|
928
|
-
bObjectPage: mParameters.bObjectPage
|
|
929
|
-
})).then(function (_operations$callActio) {
|
|
930
|
-
oResult = _operations$callActio;
|
|
931
|
-
});
|
|
932
|
-
}
|
|
933
|
-
}();
|
|
934
|
-
return _temp26 && _temp26.then ? _temp26.then(_temp27) : _temp27(_temp26);
|
|
935
|
-
}, function (err) {
|
|
936
|
-
return Promise.resolve(_this10._handleActionResponse(messageHandler, mParameters, sActionName)).then(function () {
|
|
937
|
-
throw err;
|
|
938
|
-
});
|
|
939
|
-
}));
|
|
940
|
-
} catch (e) {
|
|
941
|
-
return Promise.reject(e);
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
/**
|
|
945
|
-
* Handles messages for action call.
|
|
946
|
-
*
|
|
947
|
-
* @function
|
|
948
|
-
* @name sap.fe.core.TransactionHelper#_handleActionResponse
|
|
949
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
950
|
-
* @param messageHandler
|
|
951
|
-
* @param mParameters Parameters to be considered for the action.
|
|
952
|
-
* @param sActionName The name of the action to be called
|
|
953
|
-
* @returns Promise after message dialog is opened if required.
|
|
954
|
-
* @ui5-restricted
|
|
955
|
-
* @final
|
|
956
|
-
*/
|
|
957
|
-
;
|
|
958
|
-
_proto._handleActionResponse = function _handleActionResponse(messageHandler, mParameters, sActionName) {
|
|
959
|
-
var aTransientMessages = messageHandling.getMessages(true, true);
|
|
960
|
-
var actionName = mParameters.label ? mParameters.label : sActionName;
|
|
961
|
-
if (aTransientMessages.length > 0 && mParameters && mParameters.internalModelContext) {
|
|
962
|
-
mParameters.internalModelContext.setProperty("sActionName", mParameters.label ? mParameters.label : sActionName);
|
|
963
|
-
}
|
|
964
|
-
var control;
|
|
965
|
-
if (mParameters.controlId) {
|
|
966
|
-
control = mParameters.parentControl.byId(mParameters.controlId);
|
|
967
|
-
} else {
|
|
968
|
-
control = mParameters.parentControl;
|
|
969
|
-
}
|
|
970
|
-
return messageHandler.showMessages({
|
|
971
|
-
sActionName: actionName,
|
|
972
|
-
control: control
|
|
973
|
-
});
|
|
974
|
-
}
|
|
975
|
-
/**
|
|
976
|
-
* Handles validation errors for the 'Discard' action.
|
|
977
|
-
*
|
|
978
|
-
* @function
|
|
979
|
-
* @name sap.fe.core.TransactionHelper#handleValidationError
|
|
980
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
981
|
-
* @static
|
|
982
|
-
* @ui5-restricted
|
|
983
|
-
* @final
|
|
984
|
-
*/;
|
|
985
|
-
_proto.handleValidationError = function handleValidationError() {
|
|
986
|
-
var oMessageManager = Core.getMessageManager(),
|
|
987
|
-
errorToRemove = oMessageManager.getMessageModel().getData().filter(function (error) {
|
|
988
|
-
// only needs to handle validation messages, technical and persistent errors needs not to be checked here.
|
|
989
|
-
if (error.validation) {
|
|
990
|
-
return error;
|
|
991
|
-
}
|
|
992
|
-
});
|
|
993
|
-
oMessageManager.removeMessages(errorToRemove);
|
|
994
|
-
}
|
|
995
|
-
/**
|
|
996
|
-
* Shows a popover if it needs to be shown.
|
|
997
|
-
* TODO: Popover is shown if user has modified any data.
|
|
998
|
-
* TODO: Popover is shown if there's a difference from draft admin data.
|
|
999
|
-
*
|
|
1000
|
-
* @static
|
|
1001
|
-
* @name sap.fe.core.TransactionHelper._showDiscardPopover
|
|
1002
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
1003
|
-
* @param oCancelButton The control which will open the popover
|
|
1004
|
-
* @param bIsModified
|
|
1005
|
-
* @param oResourceBundle
|
|
1006
|
-
* @returns Promise resolves if user confirms discard, rejects if otherwise, rejects if no control passed to open popover
|
|
1007
|
-
* @ui5-restricted
|
|
1008
|
-
* @final
|
|
1009
|
-
*/;
|
|
1010
|
-
_proto._showDiscardPopover = function _showDiscardPopover(oCancelButton, bIsModified, oResourceBundle) {
|
|
1011
|
-
// TODO: Implement this popover as a fragment as in v2??
|
|
1012
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
1013
|
-
var that = this;
|
|
1014
|
-
return new Promise(function (resolve, reject) {
|
|
1015
|
-
if (!oCancelButton) {
|
|
1016
|
-
reject("Cancel button not found");
|
|
1017
|
-
}
|
|
1018
|
-
//Show popover only when data is changed.
|
|
1019
|
-
if (bIsModified) {
|
|
1020
|
-
var fnOnAfterDiscard = function () {
|
|
1021
|
-
oCancelButton.setEnabled(true);
|
|
1022
|
-
if (that._oPopover.data("continueDiscard")) {
|
|
1023
|
-
resolve();
|
|
1024
|
-
} else {
|
|
1025
|
-
reject("Discard operation was rejected. Document has not been discarded");
|
|
1026
|
-
}
|
|
1027
|
-
that._oPopover.detachAfterClose(fnOnAfterDiscard);
|
|
1028
|
-
};
|
|
1029
|
-
if (!that._oPopover) {
|
|
1030
|
-
var oText = new Text({
|
|
1031
|
-
//This text is the same as LR v2.
|
|
1032
|
-
//TODO: Display message provided by app developer???
|
|
1033
|
-
text: CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_DRAFT_DISCARD_MESSAGE", oResourceBundle)
|
|
1034
|
-
}),
|
|
1035
|
-
oButton = new Button({
|
|
1036
|
-
text: CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_DRAFT_DISCARD_BUTTON", oResourceBundle),
|
|
1037
|
-
width: "100%",
|
|
1038
|
-
press: function () {
|
|
1039
|
-
that.handleValidationError();
|
|
1040
|
-
that._oPopover.data("continueDiscard", true);
|
|
1041
|
-
that._oPopover.close();
|
|
1042
|
-
},
|
|
1043
|
-
ariaLabelledBy: oText
|
|
1044
|
-
});
|
|
1045
|
-
that._oPopover = new Popover({
|
|
1046
|
-
showHeader: false,
|
|
1047
|
-
placement: "Top",
|
|
1048
|
-
content: [new VBox({
|
|
1049
|
-
items: [oText, oButton]
|
|
1050
|
-
})],
|
|
1051
|
-
beforeOpen: function () {
|
|
1052
|
-
// make sure to NOT trigger multiple cancel flows
|
|
1053
|
-
oCancelButton.setEnabled(false);
|
|
1054
|
-
that._oPopover.setInitialFocus(oButton);
|
|
1055
|
-
that._oPopover.data("continueDiscard", false);
|
|
1056
|
-
}
|
|
1057
|
-
});
|
|
1058
|
-
that._oPopover.addStyleClass("sapUiContentPadding");
|
|
1059
|
-
}
|
|
1060
|
-
that._oPopover.attachAfterClose(fnOnAfterDiscard);
|
|
1061
|
-
that._oPopover.openBy(oCancelButton, false);
|
|
1062
|
-
} else {
|
|
1063
|
-
that.handleValidationError();
|
|
1064
|
-
resolve();
|
|
1065
|
-
}
|
|
1066
|
-
});
|
|
1067
|
-
}
|
|
1068
|
-
/**
|
|
1069
|
-
* Retrieves the owner component.
|
|
1070
|
-
*
|
|
1071
|
-
* @function
|
|
1072
|
-
* @static
|
|
1073
|
-
* @private
|
|
1074
|
-
* @name sap.fe.core.TransactionHelper._getOwnerComponent
|
|
1075
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
1076
|
-
* @returns The app component
|
|
1077
|
-
* @ui5-restricted
|
|
1078
|
-
* @final
|
|
1079
|
-
*/;
|
|
1080
|
-
_proto._getAppComponent = function _getAppComponent() {
|
|
1081
|
-
return this._oAppComponent;
|
|
1082
|
-
};
|
|
1083
|
-
_proto._onFieldChange = function _onFieldChange(oEvent, oCreateButton, messageHandler, fnValidateRequiredProperties) {
|
|
1084
|
-
messageHandler.removeTransitionMessages();
|
|
1085
|
-
var oField = oEvent.getSource();
|
|
1086
|
-
var oFieldPromise = oEvent.getParameter("promise");
|
|
1087
|
-
if (oFieldPromise) {
|
|
1088
|
-
return oFieldPromise.then(function (value) {
|
|
1089
|
-
// Setting value of field as '' in case of value help and validating other fields
|
|
1090
|
-
oField.setValue(value);
|
|
1091
|
-
fnValidateRequiredProperties();
|
|
1092
|
-
return oField.getValue();
|
|
1093
|
-
}).catch(function (value) {
|
|
1094
|
-
if (value !== "") {
|
|
1095
|
-
//disabling the continue button in case of invalid value in field
|
|
1096
|
-
oCreateButton.setEnabled(false);
|
|
1097
|
-
} else {
|
|
1098
|
-
// validating all the fields in case of empty value in field
|
|
1099
|
-
oField.setValue(value);
|
|
1100
|
-
fnValidateRequiredProperties();
|
|
1101
|
-
}
|
|
1102
|
-
});
|
|
1103
|
-
}
|
|
1104
|
-
};
|
|
1105
|
-
_proto._launchDialogWithKeyFields = function _launchDialogWithKeyFields(oListBinding, mFields, oModel, mParameters, messageHandler) {
|
|
1106
|
-
var _this11 = this;
|
|
1107
|
-
var oDialog;
|
|
1108
|
-
var oParentControl = mParameters.parentControl;
|
|
1109
|
-
|
|
1110
|
-
// Crate a fake (transient) listBinding and context, just for the binding context of the dialog
|
|
1111
|
-
var oTransientListBinding = oModel.bindList(oListBinding.getPath(), oListBinding.getContext(), [], [], {
|
|
1112
|
-
$$updateGroupId: "submitLater"
|
|
1113
|
-
});
|
|
1114
|
-
oTransientListBinding.refreshInternal = function () {
|
|
1115
|
-
/* */
|
|
1116
|
-
};
|
|
1117
|
-
var oTransientContext = oTransientListBinding.create(mParameters.data, true);
|
|
1118
|
-
return new Promise(function (resolve, reject) {
|
|
1119
|
-
try {
|
|
1120
|
-
var sFragmentName = "sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog";
|
|
1121
|
-
var oFragment = XMLTemplateProcessor.loadTemplate(sFragmentName, "fragment"),
|
|
1122
|
-
oResourceBundle = oParentControl.getController().oResourceBundle,
|
|
1123
|
-
oMetaModel = oModel.getMetaModel(),
|
|
1124
|
-
aImmutableFields = [],
|
|
1125
|
-
oAppComponent = _this11._getAppComponent(),
|
|
1126
|
-
sPath = oListBinding.isRelative() ? oListBinding.getResolvedPath() : oListBinding.getPath(),
|
|
1127
|
-
oEntitySetContext = oMetaModel.createBindingContext(sPath),
|
|
1128
|
-
sMetaPath = oMetaModel.getMetaPath(sPath);
|
|
1129
|
-
for (var i in mFields) {
|
|
1130
|
-
aImmutableFields.push(oMetaModel.createBindingContext("".concat(sMetaPath, "/").concat(mFields[i])));
|
|
1131
|
-
}
|
|
1132
|
-
var oImmutableCtxModel = new JSONModel(aImmutableFields);
|
|
1133
|
-
var oImmutableCtx = oImmutableCtxModel.createBindingContext("/");
|
|
1134
|
-
var aRequiredProperties = CommonUtils.getRequiredPropertiesFromInsertRestrictions(sMetaPath, oMetaModel);
|
|
1135
|
-
var oRequiredPropertyPathsCtxModel = new JSONModel(aRequiredProperties);
|
|
1136
|
-
var oRequiredPropertyPathsCtx = oRequiredPropertyPathsCtxModel.createBindingContext("/");
|
|
1137
|
-
return Promise.resolve(XMLPreprocessor.process(oFragment, {
|
|
1138
|
-
name: sFragmentName
|
|
1139
|
-
}, {
|
|
1140
|
-
bindingContexts: {
|
|
1141
|
-
entitySet: oEntitySetContext,
|
|
1142
|
-
fields: oImmutableCtx,
|
|
1143
|
-
requiredProperties: oRequiredPropertyPathsCtx
|
|
1144
|
-
},
|
|
1145
|
-
models: {
|
|
1146
|
-
entitySet: oEntitySetContext.getModel(),
|
|
1147
|
-
fields: oImmutableCtx.getModel(),
|
|
1148
|
-
metaModel: oMetaModel,
|
|
1149
|
-
requiredProperties: oRequiredPropertyPathsCtxModel
|
|
1150
|
-
}
|
|
1151
|
-
})).then(function (oNewFragment) {
|
|
1152
|
-
var aFormElements = [];
|
|
1153
|
-
var mFieldValueMap = {};
|
|
1154
|
-
// eslint-disable-next-line prefer-const
|
|
1155
|
-
var oCreateButton;
|
|
1156
|
-
var validateRequiredProperties = function () {
|
|
1157
|
-
try {
|
|
1158
|
-
function _temp32() {
|
|
1159
|
-
oCreateButton.setEnabled(bEnabled);
|
|
1160
|
-
}
|
|
1161
|
-
var bEnabled = false;
|
|
1162
|
-
var _temp33 = _catch(function () {
|
|
1163
|
-
return Promise.resolve(Promise.all(aFormElements.map(function (oFormElement) {
|
|
1164
|
-
return oFormElement.getFields()[0];
|
|
1165
|
-
}).filter(function (oField) {
|
|
1166
|
-
// The continue button should remain disabled in case of empty required fields.
|
|
1167
|
-
return oField.getRequired() || oField.getValueState() === ValueState.Error;
|
|
1168
|
-
}).map(function (oField) {
|
|
1169
|
-
try {
|
|
1170
|
-
var _exit4 = false;
|
|
1171
|
-
function _temp37(_result11) {
|
|
1172
|
-
return _exit4 ? _result11 : oField.getValue() === "" ? undefined : oField.getValue();
|
|
1173
|
-
}
|
|
1174
|
-
var sFieldId = oField.getId();
|
|
1175
|
-
var _temp38 = function () {
|
|
1176
|
-
if (sFieldId in mFieldValueMap) {
|
|
1177
|
-
return _catch(function () {
|
|
1178
|
-
return Promise.resolve(mFieldValueMap[sFieldId]).then(function (vValue) {
|
|
1179
|
-
var _temp34 = oField.getValue() === "" ? undefined : vValue;
|
|
1180
|
-
_exit4 = true;
|
|
1181
|
-
return _temp34;
|
|
1182
|
-
});
|
|
1183
|
-
}, function () {
|
|
1184
|
-
_exit4 = true;
|
|
1185
|
-
return undefined;
|
|
1186
|
-
});
|
|
1187
|
-
}
|
|
1188
|
-
}();
|
|
1189
|
-
return Promise.resolve(_temp38 && _temp38.then ? _temp38.then(_temp37) : _temp37(_temp38));
|
|
1190
|
-
} catch (e) {
|
|
1191
|
-
return Promise.reject(e);
|
|
1192
|
-
}
|
|
1193
|
-
}))).then(function (aResults) {
|
|
1194
|
-
bEnabled = aResults.every(function (vValue) {
|
|
1195
|
-
if (Array.isArray(vValue)) {
|
|
1196
|
-
vValue = vValue[0];
|
|
1197
|
-
}
|
|
1198
|
-
return vValue !== undefined && vValue !== null && vValue !== "";
|
|
1199
|
-
});
|
|
1200
|
-
});
|
|
1201
|
-
}, function () {
|
|
1202
|
-
bEnabled = false;
|
|
1203
|
-
});
|
|
1204
|
-
return Promise.resolve(_temp33 && _temp33.then ? _temp33.then(_temp32) : _temp32(_temp33));
|
|
1205
|
-
} catch (e) {
|
|
1206
|
-
return Promise.reject(e);
|
|
1207
|
-
}
|
|
1208
|
-
};
|
|
1209
|
-
var oController = {
|
|
1210
|
-
/*
|
|
1211
|
-
fired on focus out from field or on selecting a value from the valuehelp.
|
|
1212
|
-
the create button is enabled when a value is added.
|
|
1213
|
-
liveChange is not fired when value is added from valuehelp.
|
|
1214
|
-
value validation is not done for create button enablement.
|
|
1215
|
-
*/
|
|
1216
|
-
handleChange: function (oEvent) {
|
|
1217
|
-
var sFieldId = oEvent.getParameter("id");
|
|
1218
|
-
mFieldValueMap[sFieldId] = _this11._onFieldChange(oEvent, oCreateButton, messageHandler, validateRequiredProperties);
|
|
1219
|
-
},
|
|
1220
|
-
/*
|
|
1221
|
-
fired on key press. the create button is enabled when a value is added.
|
|
1222
|
-
liveChange is not fired when value is added from valuehelp.
|
|
1223
|
-
value validation is not done for create button enablement.
|
|
1224
|
-
*/
|
|
1225
|
-
handleLiveChange: function (oEvent) {
|
|
1226
|
-
var sFieldId = oEvent.getParameter("id");
|
|
1227
|
-
var vValue = oEvent.getParameter("value");
|
|
1228
|
-
mFieldValueMap[sFieldId] = vValue;
|
|
1229
|
-
validateRequiredProperties();
|
|
1230
|
-
}
|
|
1231
|
-
};
|
|
1232
|
-
return Promise.resolve(Fragment.load({
|
|
1233
|
-
definition: oNewFragment,
|
|
1234
|
-
controller: oController
|
|
1235
|
-
})).then(function (oDialogContent) {
|
|
1236
|
-
var oResult;
|
|
1237
|
-
var closeDialog = function () {
|
|
1238
|
-
//rejected/resolved the promis returned by _launchDialogWithKeyFields
|
|
1239
|
-
//as soon as the dialog is closed. Without waiting for the dialog's
|
|
1240
|
-
//animation to finish
|
|
1241
|
-
if (oResult.error) {
|
|
1242
|
-
reject(oResult.error);
|
|
1243
|
-
} else {
|
|
1244
|
-
resolve(oResult.response);
|
|
1245
|
-
}
|
|
1246
|
-
oDialog.close();
|
|
1247
|
-
};
|
|
1248
|
-
oDialog = new Dialog(generate(["CreateDialog", sMetaPath]), {
|
|
1249
|
-
title: CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_SAPFE_ACTION_CREATE", oResourceBundle),
|
|
1250
|
-
content: [oDialogContent],
|
|
1251
|
-
beginButton: {
|
|
1252
|
-
text: CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_SAPFE_ACTION_CREATE_BUTTON", oResourceBundle),
|
|
1253
|
-
type: "Emphasized",
|
|
1254
|
-
press: function (oEvent) {
|
|
1255
|
-
try {
|
|
1256
|
-
var createButton = oEvent.getSource();
|
|
1257
|
-
createButton.setEnabled(false);
|
|
1258
|
-
BusyLocker.lock(oDialog);
|
|
1259
|
-
mParameters.bIsCreateDialog = true;
|
|
1260
|
-
var _temp42 = _finallyRethrows(function () {
|
|
1261
|
-
return _catch(function () {
|
|
1262
|
-
return Promise.resolve(Promise.all(Object.keys(mFieldValueMap).map(function (sKey) {
|
|
1263
|
-
try {
|
|
1264
|
-
return Promise.resolve(mFieldValueMap[sKey]).then(function (oValue) {
|
|
1265
|
-
var oDialogValue = {};
|
|
1266
|
-
oDialogValue[sKey] = oValue;
|
|
1267
|
-
return oDialogValue;
|
|
1268
|
-
});
|
|
1269
|
-
} catch (e) {
|
|
1270
|
-
return Promise.reject(e);
|
|
1271
|
-
}
|
|
1272
|
-
}))).then(function (aValues) {
|
|
1273
|
-
function _temp40() {
|
|
1274
|
-
var transientData = oTransientContext.getObject();
|
|
1275
|
-
var createData = {};
|
|
1276
|
-
Object.keys(transientData).forEach(function (sPropertyPath) {
|
|
1277
|
-
var oProperty = oMetaModel.getObject("".concat(sMetaPath, "/").concat(sPropertyPath));
|
|
1278
|
-
// ensure navigation properties are not part of the payload, deep create not supported
|
|
1279
|
-
if (oProperty && oProperty.$kind === "NavigationProperty") {
|
|
1280
|
-
return;
|
|
1281
|
-
}
|
|
1282
|
-
createData[sPropertyPath] = transientData[sPropertyPath];
|
|
1283
|
-
});
|
|
1284
|
-
var oNewDocumentContext = oListBinding.create(createData, true, mParameters.createAtEnd, mParameters.inactive);
|
|
1285
|
-
var oPromise = _this11.onAfterCreateCompletion(oListBinding, oNewDocumentContext, mParameters);
|
|
1286
|
-
return Promise.resolve(oPromise).then(function (oResponse) {
|
|
1287
|
-
if (!oResponse || oResponse && oResponse.bKeepDialogOpen !== true) {
|
|
1288
|
-
var _oResponse;
|
|
1289
|
-
oResponse = (_oResponse = oResponse) !== null && _oResponse !== void 0 ? _oResponse : {};
|
|
1290
|
-
oDialog.setBindingContext(null);
|
|
1291
|
-
oResponse.newContext = oNewDocumentContext;
|
|
1292
|
-
oResult = {
|
|
1293
|
-
response: oResponse
|
|
1294
|
-
};
|
|
1295
|
-
closeDialog();
|
|
1296
|
-
}
|
|
1297
|
-
});
|
|
1298
|
-
}
|
|
1299
|
-
var _temp39 = function () {
|
|
1300
|
-
if (mParameters.beforeCreateCallBack) {
|
|
1301
|
-
return Promise.resolve(toES6Promise(mParameters.beforeCreateCallBack({
|
|
1302
|
-
contextPath: oListBinding && oListBinding.getPath(),
|
|
1303
|
-
createParameters: aValues
|
|
1304
|
-
}))).then(function () {});
|
|
1305
|
-
}
|
|
1306
|
-
}();
|
|
1307
|
-
return _temp39 && _temp39.then ? _temp39.then(_temp40) : _temp40(_temp39);
|
|
1308
|
-
});
|
|
1309
|
-
}, function (oError) {
|
|
1310
|
-
if (oError !== FELibrary.Constants.CreationFailed) {
|
|
1311
|
-
// other errors are not expected
|
|
1312
|
-
oResult = {
|
|
1313
|
-
error: oError
|
|
1314
|
-
};
|
|
1315
|
-
closeDialog();
|
|
1316
|
-
} else {
|
|
1317
|
-
createButton.setEnabled(true);
|
|
1318
|
-
}
|
|
1319
|
-
});
|
|
1320
|
-
}, function (_wasThrown7, _result12) {
|
|
1321
|
-
BusyLocker.unlock(oDialog);
|
|
1322
|
-
messageHandler.showMessages();
|
|
1323
|
-
if (_wasThrown7) throw _result12;
|
|
1324
|
-
return _result12;
|
|
1325
|
-
});
|
|
1326
|
-
return Promise.resolve(_temp42 && _temp42.then ? _temp42.then(function () {}) : void 0);
|
|
1327
|
-
} catch (e) {
|
|
1328
|
-
return Promise.reject(e);
|
|
1329
|
-
}
|
|
1330
|
-
}
|
|
1331
|
-
},
|
|
1332
|
-
endButton: {
|
|
1333
|
-
text: CommonUtils.getTranslatedText("C_COMMON_ACTION_PARAMETER_DIALOG_CANCEL", oResourceBundle),
|
|
1334
|
-
press: function () {
|
|
1335
|
-
oResult = {
|
|
1336
|
-
error: FELibrary.Constants.CancelActionDialog
|
|
1337
|
-
};
|
|
1338
|
-
closeDialog();
|
|
1339
|
-
}
|
|
1340
|
-
},
|
|
1341
|
-
afterClose: function () {
|
|
1342
|
-
var _oDialog$getBindingCo;
|
|
1343
|
-
// show footer as per UX guidelines when dialog is not open
|
|
1344
|
-
(_oDialog$getBindingCo = oDialog.getBindingContext("internal")) === null || _oDialog$getBindingCo === void 0 ? void 0 : _oDialog$getBindingCo.setProperty("isCreateDialogOpen", false);
|
|
1345
|
-
oDialog.destroy();
|
|
1346
|
-
oTransientListBinding.destroy();
|
|
1347
|
-
}
|
|
1348
|
-
});
|
|
1349
|
-
aFormElements = oDialogContent === null || oDialogContent === void 0 ? void 0 : oDialogContent.getAggregation("form").getAggregation("formContainers")[0].getAggregation("formElements");
|
|
1350
|
-
if (oParentControl && oParentControl.addDependent) {
|
|
1351
|
-
// if there is a parent control specified add the dialog as dependent
|
|
1352
|
-
oParentControl.addDependent(oDialog);
|
|
1353
|
-
}
|
|
1354
|
-
oCreateButton = oDialog.getBeginButton();
|
|
1355
|
-
oDialog.setBindingContext(oTransientContext);
|
|
1356
|
-
return _catch(function () {
|
|
1357
|
-
return Promise.resolve(CommonUtils.setUserDefaults(oAppComponent, aImmutableFields, oTransientContext, false, mParameters.createAction, mParameters.data)).then(function () {
|
|
1358
|
-
validateRequiredProperties();
|
|
1359
|
-
// footer must not be visible when the dialog is open as per UX guidelines
|
|
1360
|
-
oDialog.getBindingContext("internal").setProperty("isCreateDialogOpen", true);
|
|
1361
|
-
oDialog.open();
|
|
1362
|
-
});
|
|
1363
|
-
}, function (oError) {
|
|
1364
|
-
return Promise.resolve(messageHandler.showMessages()).then(function () {
|
|
1365
|
-
throw oError;
|
|
1366
|
-
});
|
|
1367
|
-
});
|
|
1368
|
-
});
|
|
1369
|
-
});
|
|
1370
|
-
} catch (e) {
|
|
1371
|
-
return Promise.reject(e);
|
|
1372
|
-
}
|
|
1373
|
-
});
|
|
1374
|
-
};
|
|
1375
|
-
_proto.onAfterCreateCompletion = function onAfterCreateCompletion(oListBinding, oNewDocumentContext, mParameters) {
|
|
1376
|
-
var _this12 = this;
|
|
1377
|
-
var fnResolve;
|
|
1378
|
-
var oPromise = new Promise(function (resolve) {
|
|
1379
|
-
fnResolve = resolve;
|
|
1380
|
-
});
|
|
1381
|
-
var fnCreateCompleted = function (oEvent) {
|
|
1382
|
-
var oContext = oEvent.getParameter("context"),
|
|
1383
|
-
bSuccess = oEvent.getParameter("success");
|
|
1384
|
-
if (oContext === oNewDocumentContext) {
|
|
1385
|
-
oListBinding.detachCreateCompleted(fnCreateCompleted, _this12);
|
|
1386
|
-
fnResolve(bSuccess);
|
|
1387
|
-
}
|
|
1388
|
-
};
|
|
1389
|
-
var fnSafeContextCreated = function () {
|
|
1390
|
-
oNewDocumentContext.created().then(undefined, function () {
|
|
1391
|
-
Log.trace("transient creation context deleted");
|
|
1392
|
-
}).catch(function (contextError) {
|
|
1393
|
-
Log.trace("transient creation context deletion error", contextError);
|
|
1394
|
-
});
|
|
1395
|
-
};
|
|
1396
|
-
oListBinding.attachCreateCompleted(fnCreateCompleted, this);
|
|
1397
|
-
return oPromise.then(function (bSuccess) {
|
|
1398
|
-
if (!bSuccess) {
|
|
1399
|
-
if (!mParameters.keepTransientContextOnFailed) {
|
|
1400
|
-
// Cancel the pending POST and delete the context in the listBinding
|
|
1401
|
-
fnSafeContextCreated(); // To avoid a 'request cancelled' error in the console
|
|
1402
|
-
oListBinding.resetChanges();
|
|
1403
|
-
oListBinding.getModel().resetChanges(oListBinding.getUpdateGroupId());
|
|
1404
|
-
throw FELibrary.Constants.CreationFailed;
|
|
1405
|
-
}
|
|
1406
|
-
return {
|
|
1407
|
-
bKeepDialogOpen: true
|
|
1408
|
-
};
|
|
1409
|
-
} else {
|
|
1410
|
-
return oNewDocumentContext.created();
|
|
1411
|
-
}
|
|
1412
|
-
});
|
|
1413
|
-
}
|
|
1414
|
-
/**
|
|
1415
|
-
* Retrieves the name of the NewAction to be executed.
|
|
1416
|
-
*
|
|
1417
|
-
* @function
|
|
1418
|
-
* @static
|
|
1419
|
-
* @private
|
|
1420
|
-
* @name sap.fe.core.TransactionHelper._getNewAction
|
|
1421
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
1422
|
-
* @param oStartupParameters Startup parameters of the application
|
|
1423
|
-
* @param sCreateHash Hash to be checked for action type
|
|
1424
|
-
* @param oMetaModel The MetaModel used to check for NewAction parameter
|
|
1425
|
-
* @param sMetaPath The MetaPath
|
|
1426
|
-
* @returns The name of the action
|
|
1427
|
-
* @ui5-restricted
|
|
1428
|
-
* @final
|
|
1429
|
-
*/;
|
|
1430
|
-
_proto._getNewAction = function _getNewAction(oStartupParameters, sCreateHash, oMetaModel, sMetaPath) {
|
|
1431
|
-
var sNewAction;
|
|
1432
|
-
if (oStartupParameters && oStartupParameters.preferredMode && sCreateHash.toUpperCase().indexOf("I-ACTION=CREATEWITH") > -1) {
|
|
1433
|
-
var sPreferredMode = oStartupParameters.preferredMode[0];
|
|
1434
|
-
sNewAction = sPreferredMode.toUpperCase().indexOf("CREATEWITH:") > -1 ? sPreferredMode.substr(sPreferredMode.lastIndexOf(":") + 1) : undefined;
|
|
1435
|
-
} else if (oStartupParameters && oStartupParameters.preferredMode && sCreateHash.toUpperCase().indexOf("I-ACTION=AUTOCREATEWITH") > -1) {
|
|
1436
|
-
var _sPreferredMode = oStartupParameters.preferredMode[0];
|
|
1437
|
-
sNewAction = _sPreferredMode.toUpperCase().indexOf("AUTOCREATEWITH:") > -1 ? _sPreferredMode.substr(_sPreferredMode.lastIndexOf(":") + 1) : undefined;
|
|
1438
|
-
} else {
|
|
1439
|
-
sNewAction = oMetaModel && oMetaModel.getObject !== undefined ? oMetaModel.getObject("".concat(sMetaPath, "@com.sap.vocabularies.Session.v1.StickySessionSupported/NewAction")) || oMetaModel.getObject("".concat(sMetaPath, "@com.sap.vocabularies.Common.v1.DraftRoot/NewAction")) : undefined;
|
|
1440
|
-
}
|
|
1441
|
-
return sNewAction;
|
|
1442
|
-
}
|
|
1443
|
-
/**
|
|
1444
|
-
* Retrieves the label for the title of a specific create action dialog, e.g. Create Sales Order from Quotation.
|
|
1445
|
-
*
|
|
1446
|
-
* The following priority is applied:
|
|
1447
|
-
* 1. label of line-item annotation.
|
|
1448
|
-
* 2. label annotated in the action.
|
|
1449
|
-
* 3. "Create" as a constant from i18n.
|
|
1450
|
-
*
|
|
1451
|
-
* @function
|
|
1452
|
-
* @static
|
|
1453
|
-
* @private
|
|
1454
|
-
* @name sap.fe.core.TransactionHelper._getSpecificCreateActionDialogLabel
|
|
1455
|
-
* @memberof sap.fe.core.TransactionHelper
|
|
1456
|
-
* @param oMetaModel The MetaModel used to check for the NewAction parameter
|
|
1457
|
-
* @param sMetaPath The MetaPath
|
|
1458
|
-
* @param sNewAction Contains the name of the action to be executed
|
|
1459
|
-
* @param oResourceBundleCore ResourceBundle to access the default Create label
|
|
1460
|
-
* @returns The label for the Create Action Dialog
|
|
1461
|
-
* @ui5-restricted
|
|
1462
|
-
* @final
|
|
1463
|
-
*/;
|
|
1464
|
-
_proto._getSpecificCreateActionDialogLabel = function _getSpecificCreateActionDialogLabel(oMetaModel, sMetaPath, sNewAction, oResourceBundleCore) {
|
|
1465
|
-
var fnGetLabelFromLineItemAnnotation = function () {
|
|
1466
|
-
if (oMetaModel && oMetaModel.getObject("".concat(sMetaPath, "/@com.sap.vocabularies.UI.v1.LineItem"))) {
|
|
1467
|
-
var iLineItemIndex = oMetaModel.getObject("".concat(sMetaPath, "/@com.sap.vocabularies.UI.v1.LineItem")).findIndex(function (oLineItem) {
|
|
1468
|
-
var aLineItemAction = oLineItem.Action ? oLineItem.Action.split("(") : undefined;
|
|
1469
|
-
return aLineItemAction ? aLineItemAction[0] === sNewAction : false;
|
|
1470
|
-
});
|
|
1471
|
-
return iLineItemIndex > -1 ? oMetaModel.getObject("".concat(sMetaPath, "/@com.sap.vocabularies.UI.v1.LineItem"))[iLineItemIndex].Label : undefined;
|
|
1472
|
-
} else {
|
|
1473
|
-
return undefined;
|
|
1474
|
-
}
|
|
1475
|
-
};
|
|
1476
|
-
return fnGetLabelFromLineItemAnnotation() || oMetaModel && oMetaModel.getObject("".concat(sMetaPath, "/").concat(sNewAction, "@com.sap.vocabularies.Common.v1.Label")) || oResourceBundleCore && oResourceBundleCore.getText("C_TRANSACTION_HELPER_SAPFE_ACTION_CREATE");
|
|
1477
|
-
};
|
|
1478
|
-
return TransactionHelper;
|
|
1479
|
-
}();
|
|
1480
|
-
return TransactionHelper;
|
|
1481
|
-
}, false);
|
|
1482
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIkNyZWF0aW9uTW9kZSIsIkZFTGlicmFyeSIsIlByb2dyYW1taW5nTW9kZWwiLCJWYWx1ZVN0YXRlIiwiY29yZUxpYnJhcnkiLCJnZXRQYXJhbWV0ZXJzIiwibVBhcmFtZXRlcnMiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJUcmFuc2FjdGlvbkhlbHBlciIsIm9BcHBDb21wb25lbnQiLCJvTG9ja09iamVjdCIsIl9vQXBwQ29tcG9uZW50IiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsIm9Db250ZXh0Iiwic1Byb2dyYW1taW5nTW9kZWwiLCJzUGF0aCIsImlzQSIsImdldFBhdGgiLCJpc1JlbGF0aXZlIiwiZ2V0UmVzb2x2ZWRQYXRoIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJEcmFmdCIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIlN0aWNreSIsIk5vbkRyYWZ0IiwidmFsaWRhdGVEb2N1bWVudCIsIm9WaWV3Iiwic0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsInNNb2R1bGUiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInJlcGxhY2UiLCJzRnVuY3Rpb25OYW1lIiwibGVuZ3RoIiwibURhdGEiLCJkYXRhIiwiRlBNSGVscGVyIiwidmFsaWRhdGlvbldyYXBwZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNyZWF0ZURvY3VtZW50Iiwib01haW5MaXN0QmluZGluZyIsIm1JblBhcmFtZXRlcnMiLCJvUmVzb3VyY2VCdW5kbGUiLCJtZXNzYWdlSGFuZGxlciIsImJGcm9tQ29weVBhc3RlIiwib01vZGVsIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0SGVhZGVyQ29udGV4dCIsInNDcmVhdGVIYXNoIiwiX2dldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5IiwiZ2V0SGFzaCIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwic05ld0FjdGlvbiIsIl9nZXROZXdBY3Rpb24iLCJ1bmRlZmluZWQiLCJtQmluZGluZ1BhcmFtZXRlcnMiLCIkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzIiwic01lc3NhZ2VzUGF0aCIsImdldE9iamVjdCIsInNCdXN5UGF0aCIsImdldFRhcmdldEVudGl0eVNldCIsImdldENvbnRleHQiLCJiRnVuY3Rpb25Pbk5hdlByb3AiLCJvTmV3RG9jdW1lbnRDb250ZXh0IiwiRXJyb3IiLCJidXN5TW9kZSIsImJ1c3lJZCIsImJlZm9yZUNyZWF0ZUNhbGxCYWNrIiwiQnVzeUxvY2tlciIsImxvY2siLCJvUmVzb3VyY2VCdW5kbGVDb3JlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsIm9SZXN1bHQiLCJzaG93TWVzc2FnZURpYWxvZyIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiY2FsbEFjdGlvbiIsImNvbnRleHRzIiwic2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyIsImxhYmVsIiwiX2dldFNwZWNpZmljQ3JlYXRlQWN0aW9uRGlhbG9nTGFiZWwiLCJiaW5kaW5nUGFyYW1ldGVycyIsImJJc0NyZWF0ZUFjdGlvbiIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJiSXNOZXdQYWdlQ3JlYXRpb24iLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIklubGluZSIsImFOb25Db21wdXRlZFZpc2libGVLZXlGaWVsZHMiLCJDb21tb25VdGlscyIsImdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsInNGdW5jdGlvblBhdGgiLCJvRnVuY3Rpb25Db250ZXh0Iiwib0Z1bmN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJvRGF0YSIsIk9iamVjdCIsImFzc2lnbiIsIl9sYXVuY2hEaWFsb2dXaXRoS2V5RmllbGRzIiwibmV3Q29udGV4dCIsImNyZWF0ZSIsImNyZWF0ZUF0RW5kIiwiaW5hY3RpdmUiLCJvbkFmdGVyQ3JlYXRlQ29tcGxldGlvbiIsInRvRVM2UHJvbWlzZSIsImNvbnRleHRQYXRoIiwiJElzQm91bmQiLCJvcGVyYXRpb25zIiwiY2FsbEJvdW5kRnVuY3Rpb24iLCJjYWxsRnVuY3Rpb25JbXBvcnQiLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsIkNvbnN0YW50cyIsIkFjdGlvbkV4ZWN1dGlvbkZhaWxlZCIsIkNhbmNlbEFjdGlvbkRpYWxvZyIsImlzVHJhbnNpZW50IiwiZGVsZXRlIiwidW5sb2NrIiwiZmluZEFjdGl2ZURyYWZ0Um9vdENvbnRleHRzIiwiYUNvbnRleHRzIiwiYkZpbmRBY3RpdmVDb250ZXh0cyIsImFjdGl2ZUNvbnRleHRzIiwicmVkdWNlIiwiYVJlc3VsdCIsImJJc0FjdGl2ZUVudGl0eSIsIklzQWN0aXZlRW50aXR5IiwiYkhhc0FjdGl2ZUVudGl0eSIsIkhhc0FjdGl2ZUVudGl0eSIsIm9BY3RpdmVDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJwdXNoIiwiYWxsIiwibWFwIiwicmVxdWVzdENhbm9uaWNhbFBhdGgiLCJfaXNEcmFmdEVuYWJsZWQiLCJ2Q29udGV4dHMiLCJjb250ZXh0Rm9yRHJhZnRNb2RlbCIsInVuU2F2ZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwiY3JlYXRlTW9kZUNvbnRleHRzIiwiZGVsZXRlRG9jdW1lbnQiLCJ2SW5Db250ZXh0cyIsImJEaWFsb2dDb25maXJtZWQiLCJ0aGF0IiwiYVBhcmFtcyIsIkFycmF5IiwiaXNBcnJheSIsInJlamVjdCIsImRyYWZ0RW5hYmxlZCIsIml0ZW1zIiwib3B0aW9ucyIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsImkiLCJvQ29udGV4dERhdGEiLCJIYXNEcmFmdEVudGl0eSIsIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIiwiSW5Qcm9jZXNzQnlVc2VyIiwiRHJhZnRJc0NyZWF0ZWRCeU1lIiwic0xvY2tlZFVzZXIiLCJkcmFmdEFkbWluRGF0YSIsIk1lc3NhZ2VCb3giLCJzaG93IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJ0aXRsZSIsImdldFRleHQiLCJvbkNsb3NlIiwibm9uVGFibGVUeHQiLCJkZXNjcmlwdGlvbiIsImVudGl0eVNldE5hbWUiLCJ0eXBlIiwidGV4dCIsInNlbGVjdGVkIiwidG90YWxEZWxldGFibGUiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEcmFmdE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyIsInVwZGF0ZU9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyIsInVwZGF0ZUNvbnRlbnRGb3JEZWxldGVEaWFsb2ciLCJ2Qm94IiwiVkJveCIsInNUaXRsZSIsImZuQ29uZmlybSIsImRlbGV0ZUNvbmZpcm1IYW5kbGVyIiwib0RpYWxvZyIsIkRpYWxvZyIsInN0YXRlIiwiY29udGVudCIsImFyaWFMYWJlbGxlZEJ5IiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJwcmVzcyIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiY2xvc2UiLCJlbmRCdXR0b24iLCJhZnRlckNsb3NlIiwiZGVzdHJveSIsIm5vRGlhbG9nIiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJlZGl0RG9jdW1lbnQiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJkcmFmdCIsImNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYlByZXNlcnZlQ2hhbmdlcyIsInN0aWNreSIsImVkaXREb2N1bWVudEluU3RpY2t5U2Vzc2lvbiIsIm9OZXdDb250ZXh0IiwiZXJyIiwic2hvd01lc3NhZ2VzIiwiY29uY3VycmVudEVkaXRGbGFnIiwiY2FuY2VsRG9jdW1lbnQiLCJpc05ld09iamVjdCIsImlzT2JqZWN0TW9kaWZpZWQiLCJyZXR1cm5lZFZhbHVlIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiZGVsZXRlRHJhZnQiLCJvU2libGluZ0NvbnRleHQiLCJzQ2Fub25pY2FsUGF0aCIsImRpc2NhcmREb2N1bWVudCIsImRpc2NhcmRlZENvbnRleHQiLCJyZWZyZXNoIiwiaXNLZWVwQWxpdmUiLCJzZXRLZWVwQWxpdmUiLCJiZWZvcmVDYW5jZWxDYWxsQmFjayIsImNvbnRleHQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJfc2hvd0Rpc2NhcmRQb3BvdmVyIiwiY2FuY2VsQnV0dG9uIiwiZHJhZnREYXRhQ29udGV4dCIsInJlcXVlc3RPYmplY3QiLCJDcmVhdGlvbkRhdGVUaW1lIiwiTGFzdENoYW5nZURhdGVUaW1lIiwic2F2ZURvY3VtZW50IiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJhQmluZGluZ3MiLCJhY3RpdmF0ZURvY3VtZW50Iiwib0FjdGl2ZURvY3VtZW50IiwibWVzc2FnZXNSZWNlaXZlZCIsImdldE1lc3NhZ2VzIiwiY29uY2F0IiwiTWVzc2FnZVR5cGUiLCJTdWNjZXNzIiwiTWVzc2FnZVRvYXN0IiwiZm9yRWFjaCIsIm9MaXN0QmluZGluZyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJzQWN0aW9uTmFtZSIsInNOYW1lIiwic3BsaXQiLCJtb2RlbCIsIm1TaWRlRWZmZWN0c1BhcmFtZXRlcnMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwiZGlzcGxheVVuYXBwbGljYWJsZUNvbnRleHRzRGlhbG9nIiwibm90QXBwbGljYWJsZUNvbnRleHQiLCJmbk9wZW5BbmRGaWxsRGlhbG9nIiwib0RsZyIsIm9EaWFsb2dDb250ZW50Iiwibk5vdEFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZUl0ZW1zIiwib05vdEFwcGxpY2FibGVJdGVtc01vZGVsIiwiSlNPTk1vZGVsIiwib1RvdGFscyIsInRvdGFsIiwic2V0TW9kZWwiLCJzRnJhZ21lbnROYW1lIiwib0RpYWxvZ0ZyYWdtZW50IiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGUiLCJnZXRDYW5vbmljYWxQYXRoIiwic0VudGl0eVNldCIsInN1YnN0ciIsImluZGV4T2YiLCJvRGlhbG9nTGFiZWxNb2RlbCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJuYW1lIiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5VHlwZSIsIm1vZGVscyIsIm1ldGFNb2RlbCIsIm9GcmFnbWVudCIsIm9Db250cm9sbGVyIiwib25Db250aW51ZSIsImFwcGxpY2FibGVDb250ZXh0IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImNvbnRyb2xsZXIiLCJhZGREZXBlbmRlbnQiLCJfaGFuZGxlQWN0aW9uUmVzcG9uc2UiLCJjb250ZXh0VG9Qcm9jZXNzIiwiY2FsbEJvdW5kQWN0aW9uIiwicGFyYW1ldGVyVmFsdWVzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiYWRkaXRpb25hbFNpZGVFZmZlY3QiLCJvblN1Ym1pdHRlZCIsIm9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImJHZXRCb3VuZENvbnRleHQiLCJiT2JqZWN0UGFnZSIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJjYWxsQWN0aW9uSW1wb3J0IiwiYVRyYW5zaWVudE1lc3NhZ2VzIiwiYWN0aW9uTmFtZSIsInNldFByb3BlcnR5IiwiYnlJZCIsImhhbmRsZVZhbGlkYXRpb25FcnJvciIsIm9NZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZXJyb3JUb1JlbW92ZSIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJmaWx0ZXIiLCJ2YWxpZGF0aW9uIiwicmVtb3ZlTWVzc2FnZXMiLCJvQ2FuY2VsQnV0dG9uIiwiYklzTW9kaWZpZWQiLCJmbk9uQWZ0ZXJEaXNjYXJkIiwic2V0RW5hYmxlZCIsIl9vUG9wb3ZlciIsImRldGFjaEFmdGVyQ2xvc2UiLCJvVGV4dCIsIlRleHQiLCJvQnV0dG9uIiwid2lkdGgiLCJQb3BvdmVyIiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsImJlZm9yZU9wZW4iLCJzZXRJbml0aWFsRm9jdXMiLCJhdHRhY2hBZnRlckNsb3NlIiwib3BlbkJ5IiwiX29uRmllbGRDaGFuZ2UiLCJvRXZlbnQiLCJvQ3JlYXRlQnV0dG9uIiwiZm5WYWxpZGF0ZVJlcXVpcmVkUHJvcGVydGllcyIsIm9GaWVsZCIsImdldFNvdXJjZSIsIm9GaWVsZFByb21pc2UiLCJnZXRQYXJhbWV0ZXIiLCJ2YWx1ZSIsInNldFZhbHVlIiwiZ2V0VmFsdWUiLCJjYXRjaCIsIm1GaWVsZHMiLCJvUGFyZW50Q29udHJvbCIsIm9UcmFuc2llbnRMaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJCR1cGRhdGVHcm91cElkIiwicmVmcmVzaEludGVybmFsIiwib1RyYW5zaWVudENvbnRleHQiLCJnZXRDb250cm9sbGVyIiwiYUltbXV0YWJsZUZpZWxkcyIsIm9FbnRpdHlTZXRDb250ZXh0Iiwib0ltbXV0YWJsZUN0eE1vZGVsIiwib0ltbXV0YWJsZUN0eCIsImFSZXF1aXJlZFByb3BlcnRpZXMiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwib1JlcXVpcmVkUHJvcGVydHlQYXRoc0N0eE1vZGVsIiwib1JlcXVpcmVkUHJvcGVydHlQYXRoc0N0eCIsImVudGl0eVNldCIsImZpZWxkcyIsInJlcXVpcmVkUHJvcGVydGllcyIsIm9OZXdGcmFnbWVudCIsImFGb3JtRWxlbWVudHMiLCJtRmllbGRWYWx1ZU1hcCIsInZhbGlkYXRlUmVxdWlyZWRQcm9wZXJ0aWVzIiwiYkVuYWJsZWQiLCJvRm9ybUVsZW1lbnQiLCJnZXRGaWVsZHMiLCJnZXRSZXF1aXJlZCIsImdldFZhbHVlU3RhdGUiLCJzRmllbGRJZCIsImdldElkIiwidlZhbHVlIiwiYVJlc3VsdHMiLCJldmVyeSIsImhhbmRsZUNoYW5nZSIsImhhbmRsZUxpdmVDaGFuZ2UiLCJjbG9zZURpYWxvZyIsInJlc3BvbnNlIiwiZ2VuZXJhdGUiLCJjcmVhdGVCdXR0b24iLCJiSXNDcmVhdGVEaWFsb2ciLCJrZXlzIiwic0tleSIsIm9WYWx1ZSIsIm9EaWFsb2dWYWx1ZSIsImFWYWx1ZXMiLCJ0cmFuc2llbnREYXRhIiwiY3JlYXRlRGF0YSIsInNQcm9wZXJ0eVBhdGgiLCJvUHJvcGVydHkiLCIka2luZCIsIm9Qcm9taXNlIiwib1Jlc3BvbnNlIiwiYktlZXBEaWFsb2dPcGVuIiwic2V0QmluZGluZ0NvbnRleHQiLCJjcmVhdGVQYXJhbWV0ZXJzIiwiQ3JlYXRpb25GYWlsZWQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldEFnZ3JlZ2F0aW9uIiwiZ2V0QmVnaW5CdXR0b24iLCJzZXRVc2VyRGVmYXVsdHMiLCJjcmVhdGVBY3Rpb24iLCJmblJlc29sdmUiLCJmbkNyZWF0ZUNvbXBsZXRlZCIsImJTdWNjZXNzIiwiZGV0YWNoQ3JlYXRlQ29tcGxldGVkIiwiZm5TYWZlQ29udGV4dENyZWF0ZWQiLCJjcmVhdGVkIiwidHJhY2UiLCJjb250ZXh0RXJyb3IiLCJhdHRhY2hDcmVhdGVDb21wbGV0ZWQiLCJrZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkIiwiZ2V0VXBkYXRlR3JvdXBJZCIsInByZWZlcnJlZE1vZGUiLCJ0b1VwcGVyQ2FzZSIsInNQcmVmZXJyZWRNb2RlIiwiZm5HZXRMYWJlbEZyb21MaW5lSXRlbUFubm90YXRpb24iLCJpTGluZUl0ZW1JbmRleCIsImZpbmRJbmRleCIsIm9MaW5lSXRlbSIsImFMaW5lSXRlbUFjdGlvbiIsIkFjdGlvbiIsIkxhYmVsIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUcmFuc2FjdGlvbkhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBvcGVyYXRpb25zIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zXCI7XG5pbXBvcnQgc3RpY2t5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9zdGlja3lcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgZGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBjb3JlTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE9EYXRhTGlzdEJpbmRpbmcsIFY0Q29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0b0VTNlByb21pc2UgZnJvbSBcIi4uLy4uL2hlbHBlcnMvVG9FUzZQcm9taXNlXCI7XG5cbmNvbnN0IENyZWF0aW9uTW9kZSA9IEZFTGlicmFyeS5DcmVhdGlvbk1vZGU7XG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG5jb25zdCBWYWx1ZVN0YXRlID0gY29yZUxpYnJhcnkuVmFsdWVTdGF0ZTtcbi8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtUGFyYW1ldGVycyBpcyBub3QgdGhlIG9FdmVudCAqL1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVycyhtUGFyYW1ldGVyczogYW55KSB7XG5cdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5nZXRNZXRhZGF0YSAmJiBtUGFyYW1ldGVycy5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkuYmFzZS5FdmVudFwiKSB7XG5cdFx0bVBhcmFtZXRlcnMgPSB7fTtcblx0fVxuXHRyZXR1cm4gbVBhcmFtZXRlcnMgfHwge307XG59XG5cbmNsYXNzIFRyYW5zYWN0aW9uSGVscGVyIHtcblx0X29BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0b0xvY2tPYmplY3Q6IGFueTtcblx0c1Byb2dyYW1taW5nTW9kZWw/OiB0eXBlb2YgUHJvZ3JhbW1pbmdNb2RlbDtcblx0X29Qb3BvdmVyITogUG9wb3Zlcjtcblx0Y29uc3RydWN0b3Iob0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBvTG9ja09iamVjdDogYW55KSB7XG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudCA9IG9BcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5vTG9ja09iamVjdCA9IG9Mb2NrT2JqZWN0O1xuXHR9XG5cdGdldFByb2dyYW1taW5nTW9kZWwob0NvbnRleHQ/OiBhbnkpOiB0eXBlb2YgUHJvZ3JhbW1pbmdNb2RlbCB7XG5cdFx0aWYgKCF0aGlzLnNQcm9ncmFtbWluZ01vZGVsICYmIG9Db250ZXh0KSB7XG5cdFx0XHRsZXQgc1BhdGg7XG5cdFx0XHRpZiAob0NvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0c1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzUGF0aCA9IG9Db250ZXh0LmlzUmVsYXRpdmUoKSA/IG9Db250ZXh0LmdldFJlc29sdmVkUGF0aCgpIDogb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSwgc1BhdGgpKSB7XG5cdFx0XHRcdHRoaXMuc1Byb2dyYW1taW5nTW9kZWwgPSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0O1xuXHRcdFx0fSBlbHNlIGlmIChNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0dGhpcy5zUHJvZ3JhbW1pbmdNb2RlbCA9IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gYXMgdGhlIHRyYW5zYWN0aW9uIGhlbHBlciBpcyBhIHNpbmdsZXRvbiB3ZSBkb24ndCBzdG9yZSB0aGUgbm9uIGRyYWZ0IGFzIHRoZSB1c2VyIGNvdWxkXG5cdFx0XHRcdC8vIHN0YXJ0IHdpdGggYSBub24gZHJhZnQgY2hpbGQgcGFnZSBhbmQgbmF2aWdhdGVzIGJhY2sgdG8gYSBkcmFmdCBlbmFibGVkIG9uZVxuXHRcdFx0XHRyZXR1cm4gUHJvZ3JhbW1pbmdNb2RlbC5Ob25EcmFmdDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc1Byb2dyYW1taW5nTW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogVmFsaWRhdGVzIGEgZG9jdW1lbnQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5UcmFuc2FjdGlvbkhlbHBlclxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSB2YWxpZGF0ZWRcblx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRhdGFdIEEgbWFwIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgdmFsaWRhdGVkXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uXSBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggdG8gdGhlIHZhbGlkYXRpb24gZnVuY3Rpb25cblx0ICogQHBhcmFtIG9WaWV3IENvbnRhaW5zIHRoZSBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggcmVzdWx0IG9mIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvblxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHR2YWxpZGF0ZURvY3VtZW50KG9Db250ZXh0OiBWNENvbnRleHQsIG1QYXJhbWV0ZXJzOiBhbnksIG9WaWV3OiBWaWV3KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRcdGlmIChzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uKSB7XG5cdFx0XHRjb25zdCBzTW9kdWxlID0gc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbi5zdWJzdHJpbmcoMCwgc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpLnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0XHRzRnVuY3Rpb25OYW1lID0gc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdFx0c0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxLFxuXHRcdFx0XHRcdHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHRcdCksXG5cdFx0XHRcdG1EYXRhID0gbVBhcmFtZXRlcnMuZGF0YTtcblx0XHRcdGRlbGV0ZSBtRGF0YVtcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIl07XG5cdFx0XHRyZXR1cm4gRlBNSGVscGVyLnZhbGlkYXRpb25XcmFwcGVyKHNNb2R1bGUsIHNGdW5jdGlvbk5hbWUsIG1EYXRhLCBvVmlldywgb0NvbnRleHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuVHJhbnNhY3Rpb25IZWxwZXJcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0gb01haW5MaXN0QmluZGluZyBPRGF0YSBWNCBMaXN0QmluZGluZyBvYmplY3Rcblx0ICogQHBhcmFtIFttSW5QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gW21JblBhcmFtZXRlcnMuZGF0YV0gQSBtYXAgb2YgZGF0YSB0aGF0IHNob3VsZCBiZSBzZW50IHdpdGhpbiB0aGUgUE9TVFxuXHQgKiBAcGFyYW0gW21JblBhcmFtZXRlcnMuYnVzeU1vZGVdIEdsb2JhbCAoZGVmYXVsdCksIExvY2FsLCBOb25lIFRPRE86IHRvIGJlIHJlZmFjdG9yZWRcblx0ICogQHBhcmFtIFttSW5QYXJhbWV0ZXJzLmJ1c3lJZF0gSUQgb2YgdGhlIGxvY2FsIGJ1c3kgaW5kaWNhdG9yXG5cdCAqIEBwYXJhbSBbbUluUGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkXSBJZiBzZXQsIHRoZSBjb250ZXh0IHN0YXlzIGluIHRoZSBsaXN0IGlmIHRoZSBQT1NUIGZhaWxlZCBhbmQgUE9TVCB3aWxsIGJlIHJlcGVhdGVkIHdpdGggdGhlIG5leHQgY2hhbmdlXG5cdCAqIEBwYXJhbSBbbUluUGFyYW1ldGVycy5pbmFjdGl2ZV0gSWYgc2V0LCB0aGUgY29udGV4dCBpcyBzZXQgYXMgaW5hY3RpdmUgZm9yIGVtcHR5IHJvd3Ncblx0ICogQHBhcmFtIFttSW5QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2ddIFNraXBzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZ1xuXHQgKiBAcGFyYW0gb1Jlc291cmNlQnVuZGxlXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0gYkZyb21Db3B5UGFzdGVcblx0ICogQHBhcmFtIG9WaWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIG5ldyBiaW5kaW5nIGNvbnRleHRcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgY3JlYXRlRG9jdW1lbnQoXG5cdFx0b01haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRtSW5QYXJhbWV0ZXJzOlxuXHRcdFx0fCB7XG5cdFx0XHRcdFx0ZGF0YT86IGFueTtcblx0XHRcdFx0XHRidXN5TW9kZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRidXN5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRrZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkPzogYW55O1xuXHRcdFx0XHRcdGluYWN0aXZlPzogYm9vbGVhbjtcblx0XHRcdCAgfVxuXHRcdFx0fCB1bmRlZmluZWQsXG5cdFx0b1Jlc291cmNlQnVuZGxlOiBhbnksXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdGJGcm9tQ29weVBhc3RlOiBib29sZWFuID0gZmFsc2UsXG5cdFx0b1ZpZXc6IGFueVxuXHQpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3Qgb01vZGVsID0gb01haW5MaXN0QmluZGluZy5nZXRNb2RlbCgpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob01haW5MaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCkhLmdldFBhdGgoKSksXG5cdFx0XHRzQ3JlYXRlSGFzaCA9IHRoaXMuX2dldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuZ2V0SGFzaCgpLFxuXHRcdFx0b0NvbXBvbmVudERhdGEgPSB0aGlzLl9nZXRBcHBDb21wb25lbnQoKS5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9LFxuXHRcdFx0c05ld0FjdGlvbiA9ICFvTWFpbkxpc3RCaW5kaW5nLmlzUmVsYXRpdmUoKVxuXHRcdFx0XHQ/IHRoaXMuX2dldE5ld0FjdGlvbihvU3RhcnR1cFBhcmFtZXRlcnMsIHNDcmVhdGVIYXNoLCBvTWV0YU1vZGVsLCBzTWV0YVBhdGgpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG1CaW5kaW5nUGFyYW1ldGVyczogYW55ID0geyAkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzOiB0cnVlIH07XG5cdFx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlcy8kUGF0aGApO1xuXHRcdGxldCBzQnVzeVBhdGggPSBcIi9idXN5XCI7XG5cdFx0bGV0IHNGdW5jdGlvbk5hbWUgPVxuXHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uYCkgfHxcblx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgJHtNb2RlbEhlbHBlci5nZXRUYXJnZXRFbnRpdHlTZXQob01ldGFNb2RlbC5nZXRDb250ZXh0KHNNZXRhUGF0aCkpfUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uYFxuXHRcdFx0KTtcblx0XHRsZXQgYkZ1bmN0aW9uT25OYXZQcm9wO1xuXHRcdGxldCBvTmV3RG9jdW1lbnRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc0Z1bmN0aW9uTmFtZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZWZhdWx0VmFsdWVzRnVuY3Rpb25gKSAmJlxuXHRcdFx0XHRNb2RlbEhlbHBlci5nZXRUYXJnZXRFbnRpdHlTZXQob01ldGFNb2RlbC5nZXRDb250ZXh0KHNNZXRhUGF0aCkpICE9PSBzTWV0YVBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRiRnVuY3Rpb25Pbk5hdlByb3AgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YkZ1bmN0aW9uT25OYXZQcm9wID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRtQmluZGluZ1BhcmFtZXRlcnNbXCIkc2VsZWN0XCJdID0gc01lc3NhZ2VzUGF0aDtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKG1JblBhcmFtZXRlcnMpO1xuXHRcdGlmICghb01haW5MaXN0QmluZGluZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQmluZGluZyByZXF1aXJlZCBmb3IgbmV3IGRvY3VtZW50IGNyZWF0aW9uXCIpO1xuXHRcdH1cblx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChvTWFpbkxpc3RCaW5kaW5nKTtcblx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDcmVhdGUgZG9jdW1lbnQgb25seSBhbGxvd2VkIGZvciBkcmFmdCBvciBzdGlja3kgc2Vzc2lvbiBzdXBwb3J0ZWQgc2VydmljZXNcIik7XG5cdFx0fVxuXHRcdGlmIChtUGFyYW1ldGVycy5idXN5TW9kZSA9PT0gXCJMb2NhbFwiKSB7XG5cdFx0XHRzQnVzeVBhdGggPSBgL2J1c3lMb2NhbC8ke21QYXJhbWV0ZXJzLmJ1c3lJZH1gO1xuXHRcdH1cblx0XHRtUGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayA9IGJGcm9tQ29weVBhc3RlID8gbnVsbCA6IG1QYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrO1xuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLm9Mb2NrT2JqZWN0LCBzQnVzeVBhdGgpO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZUNvcmUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRcdGxldCBvUmVzdWx0OiBhbnk7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKHNOZXdBY3Rpb24pIHtcblx0XHRcdFx0b1Jlc3VsdCA9IGF3YWl0IHRoaXMuY2FsbEFjdGlvbihcblx0XHRcdFx0XHRzTmV3QWN0aW9uLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbnRleHRzOiBvTWFpbkxpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKSxcblx0XHRcdFx0XHRcdHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2c6IHRydWUsXG5cdFx0XHRcdFx0XHRsYWJlbDogdGhpcy5fZ2V0U3BlY2lmaWNDcmVhdGVBY3Rpb25EaWFsb2dMYWJlbChvTWV0YU1vZGVsLCBzTWV0YVBhdGgsIHNOZXdBY3Rpb24sIG9SZXNvdXJjZUJ1bmRsZUNvcmUpLFxuXHRcdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlcnM6IG1CaW5kaW5nUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdHBhcmVudENvbnRyb2w6IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0XHRiSXNDcmVhdGVBY3Rpb246IHRydWUsXG5cdFx0XHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nOiBtUGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBiSXNOZXdQYWdlQ3JlYXRpb24gPVxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIG1QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0XHRcdFx0Y29uc3QgYU5vbkNvbXB1dGVkVmlzaWJsZUtleUZpZWxkcyA9IGJJc05ld1BhZ2VDcmVhdGlvblxuXHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG9NZXRhTW9kZWwsIHNNZXRhUGF0aCwgb1ZpZXcpXG5cdFx0XHRcdFx0OiBbXTtcblx0XHRcdFx0c0Z1bmN0aW9uTmFtZSA9IGJGcm9tQ29weVBhc3RlID8gbnVsbCA6IHNGdW5jdGlvbk5hbWU7XG5cdFx0XHRcdGxldCBzRnVuY3Rpb25QYXRoLCBvRnVuY3Rpb25Db250ZXh0O1xuXHRcdFx0XHRpZiAoc0Z1bmN0aW9uTmFtZSkge1xuXHRcdFx0XHRcdC8vYm91bmQgdG8gdGhlIHNvdXJjZSBlbnRpdHk6XG5cdFx0XHRcdFx0aWYgKGJGdW5jdGlvbk9uTmF2UHJvcCkge1xuXHRcdFx0XHRcdFx0c0Z1bmN0aW9uUGF0aCA9XG5cdFx0XHRcdFx0XHRcdG9NYWluTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpICYmXG5cdFx0XHRcdFx0XHRcdGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob01haW5MaXN0QmluZGluZy5nZXRDb250ZXh0KCkuZ2V0UGF0aCgpKX0vJHtzRnVuY3Rpb25OYW1lfWA7XG5cdFx0XHRcdFx0XHRvRnVuY3Rpb25Db250ZXh0ID0gb01haW5MaXN0QmluZGluZy5nZXRDb250ZXh0KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNGdW5jdGlvblBhdGggPVxuXHRcdFx0XHRcdFx0XHRvTWFpbkxpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKSAmJlxuXHRcdFx0XHRcdFx0XHRgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9NYWluTGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpIS5nZXRQYXRoKCkpfS8ke3NGdW5jdGlvbk5hbWV9YDtcblx0XHRcdFx0XHRcdG9GdW5jdGlvbkNvbnRleHQgPSBvTWFpbkxpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgb0Z1bmN0aW9uID0gc0Z1bmN0aW9uUGF0aCAmJiAob01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKSBhcyBhbnkpO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bGV0IG9EYXRhOiBhbnk7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0ID1cblx0XHRcdFx0XHRcdFx0b0Z1bmN0aW9uICYmIG9GdW5jdGlvbi5nZXRPYmplY3QoKSAmJiBvRnVuY3Rpb24uZ2V0T2JqZWN0KClbMF0uJElzQm91bmRcblx0XHRcdFx0XHRcdFx0XHQ/IGF3YWl0IG9wZXJhdGlvbnMuY2FsbEJvdW5kRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb0Z1bmN0aW9uQ29udGV4dCwgb01vZGVsKVxuXHRcdFx0XHRcdFx0XHRcdDogYXdhaXQgb3BlcmF0aW9ucy5jYWxsRnVuY3Rpb25JbXBvcnQoc0Z1bmN0aW9uTmFtZSwgb01vZGVsKTtcblx0XHRcdFx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRvRGF0YSA9IG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEVycm9yIHdoaWxlIGV4ZWN1dGluZyB0aGUgZnVuY3Rpb24gJHtzRnVuY3Rpb25OYW1lfWAsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRhdGEgPSBvRGF0YSA/IE9iamVjdC5hc3NpZ24oe30sIG9EYXRhLCBtUGFyYW1ldGVycy5kYXRhKSA6IG1QYXJhbWV0ZXJzLmRhdGE7XG5cdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmRhdGEpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBtUGFyYW1ldGVycy5kYXRhW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChhTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdG9SZXN1bHQgPSBhd2FpdCB0aGlzLl9sYXVuY2hEaWFsb2dXaXRoS2V5RmllbGRzKFxuXHRcdFx0XHRcdFx0XHRvTWFpbkxpc3RCaW5kaW5nLFxuXHRcdFx0XHRcdFx0XHRhTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGRzLFxuXHRcdFx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdG9OZXdEb2N1bWVudENvbnRleHQgPSBvUmVzdWx0Lm5ld0NvbnRleHQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjaykge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCB0b0VTNlByb21pc2UoXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2soe1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NYWluTGlzdEJpbmRpbmcgJiYgb01haW5MaXN0QmluZGluZy5nZXRQYXRoKClcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRvTmV3RG9jdW1lbnRDb250ZXh0ID0gb01haW5MaXN0QmluZGluZy5jcmVhdGUoXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRhdGEsXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbmFjdGl2ZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGlmICghbVBhcmFtZXRlcnMuaW5hY3RpdmUpIHtcblx0XHRcdFx0XHRcdFx0b1Jlc3VsdCA9IGF3YWl0IHRoaXMub25BZnRlckNyZWF0ZUNvbXBsZXRpb24ob01haW5MaXN0QmluZGluZywgb05ld0RvY3VtZW50Q29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgbmV3IGRvY3VtZW50XCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0dGhyb3cgb0Vycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG9OZXdEb2N1bWVudENvbnRleHQgPSBvTmV3RG9jdW1lbnRDb250ZXh0IHx8IG9SZXN1bHQ7XG5cblx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHsgY29udHJvbDogbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCB9KTtcblx0XHRcdHJldHVybiBvTmV3RG9jdW1lbnRDb250ZXh0ITtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0Ly8gVE9ETzogY3VycmVudGx5LCB0aGUgb25seSBlcnJvcnMgaGFuZGxlZCBoZXJlIGFyZSByYWlzZWQgYXMgc3RyaW5nIC0gc2hvdWxkIGJlIGNoYW5nZWQgdG8gRXJyb3Igb2JqZWN0c1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coeyBjb250cm9sOiBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sIH0pO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoZXJyb3IgPT09IEZFTGlicmFyeS5Db25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkIHx8IGVycm9yID09PSBGRUxpYnJhcnkuQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZykgJiZcblx0XHRcdFx0b05ld0RvY3VtZW50Q29udGV4dD8uaXNUcmFuc2llbnQoKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHN1Z2dlc3RlZCBieSBtb2RlbCBhcyBDb250ZXh0LmRlbGV0ZSByZXN1bHRzIGluIGFuIGVycm9yXG5cdFx0XHRcdC8vIFRPRE86IHJlbW92ZSB0aGUgJGRpcmVjdCBvbmNlIG1vZGVsIHJlc29sdmVzIHRoaXMgaXNzdWVcblx0XHRcdFx0Ly8gdGhpcyBsaW5lIHNob3dzIHRoZSBleHBlY3RlZCBjb25zb2xlIGVycm9yIFVuY2F1Z2h0IChpbiBwcm9taXNlKSBFcnJvcjogUmVxdWVzdCBjYW5jZWxlZDogUE9TVCBUcmF2ZWw7IGdyb3VwOiBzdWJtaXRMYXRlclxuXHRcdFx0XHRvTmV3RG9jdW1lbnRDb250ZXh0LmRlbGV0ZShcIiRkaXJlY3RcIik7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5vTG9ja09iamVjdCwgc0J1c3lQYXRoKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIEZpbmQgdGhlIGFjdGl2ZSBjb250ZXh0cyBvZiB0aGUgZG9jdW1lbnRzLCBvbmx5IGZvciB0aGUgZHJhZnQgcm9vdHMuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5UcmFuc2FjdGlvbkhlbHBlclxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgdG8gYmUgZGVsZXRlZFxuXHQgKiBAcGFyYW0gYkZpbmRBY3RpdmVDb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBcnJheSBvZiB0aGUgYWN0aXZlIGNvbnRleHRzXG5cdCAqL1xuXHRmaW5kQWN0aXZlRHJhZnRSb290Q29udGV4dHMoYUNvbnRleHRzOiBWNENvbnRleHRbXSwgYkZpbmRBY3RpdmVDb250ZXh0czogYW55KSB7XG5cdFx0aWYgKCFiRmluZEFjdGl2ZUNvbnRleHRzKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IGFjdGl2ZUNvbnRleHRzID0gYUNvbnRleHRzLnJlZHVjZShmdW5jdGlvbiAoYVJlc3VsdDogYW55LCBvQ29udGV4dDogYW55KSB7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGlmIChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgKSkge1xuXHRcdFx0XHRjb25zdCBiSXNBY3RpdmVFbnRpdHkgPSBvQ29udGV4dC5nZXRPYmplY3QoKS5Jc0FjdGl2ZUVudGl0eSxcblx0XHRcdFx0XHRiSGFzQWN0aXZlRW50aXR5ID0gb0NvbnRleHQuZ2V0T2JqZWN0KCkuSGFzQWN0aXZlRW50aXR5O1xuXHRcdFx0XHRpZiAoIWJJc0FjdGl2ZUVudGl0eSAmJiBiSGFzQWN0aXZlRW50aXR5KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0FjdGl2ZUNvbnRleHQgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KGAke29Db250ZXh0LmdldFBhdGgoKX0vU2libGluZ0VudGl0eWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRcdGFSZXN1bHQucHVzaChvQWN0aXZlQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhUmVzdWx0O1xuXHRcdH0sIFtdKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRhY3RpdmVDb250ZXh0cy5tYXAoZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RDYW5vbmljYWxQYXRoKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdF9pc0RyYWZ0RW5hYmxlZCh2Q29udGV4dHM6IFY0Q29udGV4dFtdLCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3QgY29udGV4dEZvckRyYWZ0TW9kZWwgPVxuXHRcdFx0dkNvbnRleHRzWzBdIHx8XG5cdFx0XHQobVBhcmFtZXRlcnMudW5TYXZlZENvbnRleHRzICYmIG1QYXJhbWV0ZXJzLnVuU2F2ZWRDb250ZXh0c1swXSkgfHxcblx0XHRcdChtUGFyYW1ldGVycy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlICYmIG1QYXJhbWV0ZXJzLmRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVbMF0pIHx8XG5cdFx0XHQobVBhcmFtZXRlcnMuZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSAmJiBtUGFyYW1ldGVycy5kcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlWzBdKSB8fFxuXHRcdFx0KG1QYXJhbWV0ZXJzLmNyZWF0ZU1vZGVDb250ZXh0cyAmJiBtUGFyYW1ldGVycy5jcmVhdGVNb2RlQ29udGV4dHNbMF0pO1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKGNvbnRleHRGb3JEcmFmdE1vZGVsKTtcblx0XHRyZXR1cm4gc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQ7XG5cdH1cblx0LyoqXG5cdCAqIERlbGV0ZSBvbmUgb3IgbXVsdGlwbGUgZG9jdW1lbnQocykuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5UcmFuc2FjdGlvbkhlbHBlclxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB2SW5Db250ZXh0cyBDb250ZXh0cyBFaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyB0byBiZSBkZWxldGVkXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMudGl0bGUgVGl0bGUgb2YgdGhlIG9iamVjdCB0byBiZSBkZWxldGVkXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5kZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0IHRvIGJlIGRlbGV0ZWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyBOdW1iZXIgb2Ygb2JqZWN0cyBzZWxlY3RlZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMubm9EaWFsb2cgVG8gZGlzYWJsZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ1xuXHQgKiBAcGFyYW0gb1Jlc291cmNlQnVuZGxlXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2ZWQgb25jZSB0aGUgZG9jdW1lbnQgYXJlIGRlbGV0ZWRcblx0ICovXG5cdGRlbGV0ZURvY3VtZW50KHZJbkNvbnRleHRzOiBWNENvbnRleHQsIG1QYXJhbWV0ZXJzOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogYW55LCBtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIpIHtcblx0XHRsZXQgYkRpYWxvZ0NvbmZpcm1lZCA9IGZhbHNlO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzLFxuXHRcdFx0b1Jlc291cmNlQnVuZGxlQ29yZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0bGV0IGFQYXJhbXM7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMub0xvY2tPYmplY3QpO1xuXHRcdGxldCB2Q29udGV4dHM6IFY0Q29udGV4dFtdO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZJbkNvbnRleHRzKSkge1xuXHRcdFx0dkNvbnRleHRzID0gdkluQ29udGV4dHM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZDb250ZXh0cyA9IFt2SW5Db250ZXh0c107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0RW5hYmxlZCA9IHRoYXQuX2lzRHJhZnRFbmFibGVkKHZDb250ZXh0cywgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRjb25zdCBpdGVtczogYW55W10gPSBbXTtcblx0XHRcdFx0Y29uc3Qgb3B0aW9uczogYW55W10gPSBbXTtcblxuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRpZiAoIW1QYXJhbWV0ZXJzLm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRcdFx0Ly8gbm9uLVRhYmxlXG5cdFx0XHRcdFx0XHRpZiAoZHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdkNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gdkNvbnRleHRzW2ldLmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHREYXRhLkhhc0RyYWZ0RW50aXR5ID09PSB0cnVlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dERhdGEuRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0RGF0YS5EcmFmdEFkbWluaXN0cmF0aXZlRGF0YS5JblByb2Nlc3NCeVVzZXIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCFvQ29udGV4dERhdGEuRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuRHJhZnRJc0NyZWF0ZWRCeU1lXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc0xvY2tlZFVzZXIgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZHJhZnRBZG1pbkRhdGEgPSBvQ29udGV4dERhdGEgJiYgb0NvbnRleHREYXRhLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGRyYWZ0QWRtaW5EYXRhKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNMb2NrZWRVc2VyID0gZHJhZnRBZG1pbkRhdGFbXCJJblByb2Nlc3NCeVVzZXJcIl07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhUGFyYW1zID0gW3NMb2NrZWRVc2VyXTtcblx0XHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guc2hvdyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9PQkpFQ1RfTE9DS0VEXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFQYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGVDb3JlLmdldFRleHQoXCJDX0NPTU1PTl9ERUxFVEVcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbG9zZTogcmVqZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMobVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0bGV0IG5vblRhYmxlVHh0ID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy50aXRsZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZGVzY3JpcHRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRhUGFyYW1zID0gW21QYXJhbWV0ZXJzLnRpdGxlICsgXCIgXCIsIG1QYXJhbWV0ZXJzLmRlc2NyaXB0aW9uXTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhUGFyYW1zID0gW21QYXJhbWV0ZXJzLnRpdGxlLCBcIlwiXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRub25UYWJsZVR4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPXCIsXG5cdFx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHRcdGFQYXJhbXMsXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bm9uVGFibGVUeHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfU0lOR1VMQVJcIixcblx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGVsZXRhYmxlQ29udGV4dHNcIixcblx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IHZDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0dGV4dDogbm9uVGFibGVUeHQsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRjb250cm9sOiBcInRleHRcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRhYmxlXG5cdFx0XHRcdFx0XHRsZXQgdG90YWxEZWxldGFibGUgPSB2Q29udGV4dHMubGVuZ3RoO1xuXG5cdFx0XHRcdFx0XHRpZiAoZHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0XHRcdHRvdGFsRGVsZXRhYmxlICs9XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggK1xuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUubGVuZ3RoICtcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy51blNhdmVkQ29udGV4dHMubGVuZ3RoICtcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGVNb2RlQ29udGV4dHMubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRkZWxldGVIZWxwZXIudXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0dkNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdHRvdGFsRGVsZXRhYmxlLFxuXHRcdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0XHRpdGVtcyxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGRlbGV0ZUhlbHBlci51cGRhdGVPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMobVBhcmFtZXRlcnMsIHZDb250ZXh0cywgb1Jlc291cmNlQnVuZGxlLCBvcHRpb25zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb250ZW50IG9mIERlbGV0ZSBEaWFsb2dcblx0XHRcdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZUNvbnRlbnRGb3JEZWxldGVEaWFsb2cob3B0aW9ucywgaXRlbXMpO1xuXHRcdFx0XHRjb25zdCB2Qm94ID0gbmV3IFZCb3goeyBpdGVtczogaXRlbXMgfSk7XG5cdFx0XHRcdGNvbnN0IHNUaXRsZSA9IG9SZXNvdXJjZUJ1bmRsZUNvcmUuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURVwiKTtcblxuXHRcdFx0XHRjb25zdCBmbkNvbmZpcm0gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0QnVzeUxvY2tlci5sb2NrKHRoYXQub0xvY2tPYmplY3QpO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBkZWxldGVIZWxwZXIuZGVsZXRlQ29uZmlybUhhbmRsZXIoXG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHR0aGF0Ll9vQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRkcmFmdEVuYWJsZWRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGF0Lm9Mb2NrT2JqZWN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdHRpdGxlOiBzVGl0bGUsXG5cdFx0XHRcdFx0c3RhdGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IFt2Qm94XSxcblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeTogaXRlbXMsXG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlQ29yZS5nZXRUZXh0KFwiQ19DT01NT05fREVMRVRFXCIpLFxuXHRcdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdFx0YkRpYWxvZ0NvbmZpcm1lZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0Zm5Db25maXJtKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdHRleHQ6IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdFx0Ly8gaWYgZGlhbG9nIGlzIGNsb3NlZCB1bmNvbmZpcm1lZCAoZS5nLiB2aWEgXCJDYW5jZWxcIiBvciBFc2NhcGUgYnV0dG9uKSwgZW5zdXJlIHRvIHJlamVjdCBwcm9taXNlXG5cdFx0XHRcdFx0XHRpZiAoIWJEaWFsb2dDb25maXJtZWQpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGFzIGFueSk7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5ub0RpYWxvZykge1xuXHRcdFx0XHRcdGZuQ29uZmlybSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9EaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0XHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoYXQub0xvY2tPYmplY3QpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBFZGl0cyBhIGRvY3VtZW50LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuVHJhbnNhY3Rpb25IZWxwZXJcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50XG5cdCAqIEBwYXJhbSBvVmlldyBDdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGRyYWZ0IGNvbnRleHQgaW4gY2FzZSBvZiBkcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBlZGl0RG9jdW1lbnQob0NvbnRleHQ6IFY0Q29udGV4dCwgb1ZpZXc6IFZpZXcsIG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcik6IFByb21pc2U8VjRDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0Y29uc3Qgc1Byb2dyYW1taW5nTW9kZWwgPSB0aGlzLmdldFByb2dyYW1taW5nTW9kZWwob0NvbnRleHQpO1xuXHRcdGlmICghb0NvbnRleHQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkJpbmRpbmcgY29udGV4dCB0byBhY3RpdmUgZG9jdW1lbnQgaXMgcmVxdWlyZWRcIik7XG5cdFx0fVxuXHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCAmJiBzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkVkaXQgaXMgb25seSBhbGxvd2VkIGZvciBkcmFmdCBvciBzdGlja3kgc2Vzc2lvbiBzdXBwb3J0ZWQgc2VydmljZXNcIik7XG5cdFx0fVxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGF0Lm9Mb2NrT2JqZWN0KTtcblx0XHQvLyBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgZWRpdCBhY3Rpb24gd2UnbGwgaGF2ZSB0byByZW1vdmUgYWxsIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXNcblx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBvTmV3Q29udGV4dCA9XG5cdFx0XHRcdHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0XG5cdFx0XHRcdFx0PyBhd2FpdCBkcmFmdC5jcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudChvQ29udGV4dCwgdGhpcy5fZ2V0QXBwQ29tcG9uZW50KCksIHtcblx0XHRcdFx0XHRcdFx0YlByZXNlcnZlQ2hhbmdlczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0b1ZpZXc6IG9WaWV3XG5cdFx0XHRcdFx0ICB9IGFzIGFueSlcblx0XHRcdFx0XHQ6IGF3YWl0IHN0aWNreS5lZGl0RG9jdW1lbnRJblN0aWNreVNlc3Npb24ob0NvbnRleHQsIHRoaXMuX2dldEFwcENvbXBvbmVudCgpKTtcblxuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdHJldHVybiBvTmV3Q29udGV4dDtcblx0XHR9IGNhdGNoIChlcnI6IGFueSkge1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgY29uY3VycmVudEVkaXRGbGFnOiB0cnVlIH0pO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGF0Lm9Mb2NrT2JqZWN0KTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIENhbmNlbCAnZWRpdCcgbW9kZSBvZiBhIGRvY3VtZW50LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuVHJhbnNhY3Rpb25IZWxwZXJcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgY2FuY2VsZWQgb3IgZGVsZXRlZFxuXHQgKiBAcGFyYW0gW21JblBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiBDYW5jZWwgQnV0dG9uIG9mIHRoZSBkaXNjYXJkIHBvcG92ZXIgKG1hbmRhdG9yeSBmb3Igbm93KVxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycy5za2lwRGlzY2FyZFBvcG92ZXIgT3B0aW9uYWwsIHN1cHJlc3NlcyB0aGUgZGlzY2FyZCBwb3BvdmVyIGluY2FzZSBvZiBkcmFmdCBhcHBsaWNhdGlvbnMgd2hpbGUgbmF2aWdhdGluZyBvdXQgb2YgT1Bcblx0ICogQHBhcmFtIG9SZXNvdXJjZUJ1bmRsZVxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXJcblx0ICogQHBhcmFtIGlzTmV3T2JqZWN0IFRydWUgaWYgd2UncmUgdHJ5aW5nIHRvIGNhbmNlbCBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0XG5cdCAqIEBwYXJhbSBpc09iamVjdE1vZGlmaWVkIFRydWUgaWYgdGhlIG9iamVjdCBoYXMgYmVlbiBtb2RpZmllZCBieSB0aGUgdXNlclxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggPz8/XG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIGNhbmNlbERvY3VtZW50KFxuXHRcdG9Db250ZXh0OiBWNENvbnRleHQsXG5cdFx0bUluUGFyYW1ldGVyczogeyBjYW5jZWxCdXR0b246IGFueTsgc2tpcERpc2NhcmRQb3BvdmVyOiBib29sZWFuIH0gfCB1bmRlZmluZWQsXG5cdFx0b1Jlc291cmNlQnVuZGxlOiBhbnksXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdGlzTmV3T2JqZWN0OiBib29sZWFuLFxuXHRcdGlzT2JqZWN0TW9kaWZpZWQ6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxWNENvbnRleHQgfCBib29sZWFuPiB7XG5cdFx0Ly9jb250ZXh0IG11c3QgYWx3YXlzIGJlIHBhc3NlZCAtIG1hbmRhdG9yeSBwYXJhbWV0ZXJcblx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJObyBjb250ZXh0IGV4aXN0cy4gUGFzcyBhIG1lYW5pbmdmdWwgY29udGV4dFwiKTtcblx0XHR9XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMub0xvY2tPYmplY3QpO1xuXHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0gZ2V0UGFyYW1ldGVycyhtSW5QYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KTtcblxuXHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCAmJiBzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbmNlbCBkb2N1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGRyYWZ0IG9yIHN0aWNreSBzZXNzaW9uIHN1cHBvcnRlZCBzZXJ2aWNlc1wiKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGxldCByZXR1cm5lZFZhbHVlOiBWNENvbnRleHQgfCBib29sZWFuID0gZmFsc2U7XG5cblx0XHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCAmJiAhaXNPYmplY3RNb2RpZmllZCkge1xuXHRcdFx0XHRjb25zdCBkcmFmdERhdGFDb250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KGAke29Db250ZXh0LmdldFBhdGgoKX0vRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFgKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0Y29uc3QgZHJhZnRBZG1pbkRhdGEgPSBhd2FpdCBkcmFmdERhdGFDb250ZXh0LnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdFx0aWYgKGRyYWZ0QWRtaW5EYXRhKSB7XG5cdFx0XHRcdFx0aXNPYmplY3RNb2RpZmllZCA9IGRyYWZ0QWRtaW5EYXRhLkNyZWF0aW9uRGF0ZVRpbWUgIT09IGRyYWZ0QWRtaW5EYXRhLkxhc3RDaGFuZ2VEYXRlVGltZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCFtUGFyYW1ldGVycy5za2lwRGlzY2FyZFBvcG92ZXIpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5fc2hvd0Rpc2NhcmRQb3BvdmVyKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiwgaXNPYmplY3RNb2RpZmllZCwgb1Jlc291cmNlQnVuZGxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuYmVmb3JlQ2FuY2VsQ2FsbEJhY2spIHtcblx0XHRcdFx0YXdhaXQgbVBhcmFtZXRlcnMuYmVmb3JlQ2FuY2VsQ2FsbEJhY2soeyBjb250ZXh0OiBvQ29udGV4dCB9KTtcblx0XHRcdH1cblx0XHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0XHRpZiAoaXNOZXdPYmplY3QpIHtcblx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm5lZFZhbHVlID0gYXdhaXQgZHJhZnQuZGVsZXRlRHJhZnQob0NvbnRleHQsIHRoaXMuX29BcHBDb21wb25lbnQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IG9TaWJsaW5nQ29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtvQ29udGV4dC5nZXRQYXRoKCl9L1NpYmxpbmdFbnRpdHlgKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0Nhbm9uaWNhbFBhdGggPSBhd2FpdCBvU2libGluZ0NvbnRleHQucmVxdWVzdENhbm9uaWNhbFBhdGgoKTtcblx0XHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybmVkVmFsdWUgPSBvTW9kZWwuYmluZENvbnRleHQoc0Nhbm9uaWNhbFBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBkcmFmdC5kZWxldGVEcmFmdChvQ29udGV4dCwgdGhpcy5fb0FwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBkaXNjYXJkZWRDb250ZXh0ID0gYXdhaXQgc3RpY2t5LmRpc2NhcmREb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHRcdGlmIChkaXNjYXJkZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0aWYgKGRpc2NhcmRlZENvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0ZGlzY2FyZGVkQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICghaXNOZXdPYmplY3QpIHtcblx0XHRcdFx0XHRcdGRpc2NhcmRlZENvbnRleHQucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuZWRWYWx1ZSA9IGRpc2NhcmRlZENvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHJlbW92ZSBleGlzdGluZyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdFx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdC8vIHNob3cgdW5ib3VuZCBtZXNzYWdlc1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHRyZXR1cm4gcmV0dXJuZWRWYWx1ZTtcblx0XHR9IGNhdGNoIChlcnI6IGFueSkge1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMub0xvY2tPYmplY3QpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZG9jdW1lbnQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5UcmFuc2FjdGlvbkhlbHBlclxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSBzYXZlZFxuXHQgKiBAcGFyYW0gb1Jlc291cmNlQnVuZGxlXG5cdCAqIEBwYXJhbSBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvclxuXHQgKiBAcGFyYW0gYUJpbmRpbmdzXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0gaXNOZXdPYmplY3QgVHJ1ZSBpZiB3ZSdyZSB0cnlpbmcgdG8gY2FuY2VsIGEgbmV3bHkgY3JlYXRlZCBvYmplY3Rcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoID8/P1xuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBzYXZlRG9jdW1lbnQoXG5cdFx0b0NvbnRleHQ6IFY0Q29udGV4dCxcblx0XHRvUmVzb3VyY2VCdW5kbGU6IGFueSxcblx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogYW55LFxuXHRcdGFCaW5kaW5nczogYW55LFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRpc05ld09iamVjdDogYm9vbGVhblxuXHQpOiBQcm9taXNlPFY0Q29udGV4dD4ge1xuXHRcdGlmICghb0NvbnRleHQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gZHJhZnQgZG9jdW1lbnQgaXMgcmVxdWlyZWRcIikpO1xuXHRcdH1cblx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dCk7XG5cdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsICE9PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSAmJiBzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2F2ZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGRyYWZ0IG9yIHN0aWNreSBzZXNzaW9uIHN1cHBvcnRlZCBzZXJ2aWNlc1wiKTtcblx0XHR9XG5cdFx0Ly8gaW4gY2FzZSBvZiBzYXZpbmcgLyBhY3RpdmF0aW5nIHRoZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIHNoYWxsIGJlIHJlbW92ZWQgYmVmb3JlIHRoZSBQQVRDSC9QT1NUXG5cdFx0Ly8gaXMgc2VudCB0byB0aGUgYmFja2VuZFxuXHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLm9Mb2NrT2JqZWN0KTtcblx0XHRcdGNvbnN0IG9BY3RpdmVEb2N1bWVudCA9XG5cdFx0XHRcdHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0XG5cdFx0XHRcdFx0PyBhd2FpdCBkcmFmdC5hY3RpdmF0ZURvY3VtZW50KG9Db250ZXh0LCB0aGlzLl9nZXRBcHBDb21wb25lbnQoKSwge30sIG1lc3NhZ2VIYW5kbGVyKVxuXHRcdFx0XHRcdDogYXdhaXQgc3RpY2t5LmFjdGl2YXRlRG9jdW1lbnQob0NvbnRleHQsIHRoaXMuX2dldEFwcENvbXBvbmVudCgpKTtcblxuXHRcdFx0Y29uc3QgbWVzc2FnZXNSZWNlaXZlZCA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcygpLmNvbmNhdChtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXModHJ1ZSwgdHJ1ZSkpOyAvLyBnZXQgdW5ib3VuZCBhbmQgYm91bmQgbWVzc2FnZXMgcHJlc2VudCBpbiB0aGUgbW9kZWxcblx0XHRcdGlmICghKG1lc3NhZ2VzUmVjZWl2ZWQubGVuZ3RoID09PSAxICYmIG1lc3NhZ2VzUmVjZWl2ZWRbMF0udHlwZSA9PT0gY29yZUxpYnJhcnkuTWVzc2FnZVR5cGUuU3VjY2VzcykpIHtcblx0XHRcdFx0Ly8gc2hvdyBvdXIgb2JqZWN0IGNyZWF0aW9uIHRvYXN0IG9ubHkgaWYgaXQgaXMgbm90IGNvbWluZyBmcm9tIGJhY2tlbmRcblx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coXG5cdFx0XHRcdFx0aXNOZXdPYmplY3Rcblx0XHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9PQkpFQ1RfQ1JFQVRFRFwiLCBvUmVzb3VyY2VCdW5kbGUpXG5cdFx0XHRcdFx0XHQ6IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfT0JKRUNUX1NBVkVEXCIsIG9SZXNvdXJjZUJ1bmRsZSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9BY3RpdmVEb2N1bWVudDtcblx0XHR9IGNhdGNoIChlcnI6IGFueSkge1xuXHRcdFx0aWYgKGFCaW5kaW5ncyAmJiBhQmluZGluZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvKiBUaGUgc2lkZUVmZmVjdHMgYXJlIGV4ZWN1dGVkIG9ubHkgZm9yIHRhYmxlIGl0ZW1zIGluIHRyYW5zaWVudCBzdGF0ZSAqL1xuXHRcdFx0XHRhQmluZGluZ3MuZm9yRWFjaCgob0xpc3RCaW5kaW5nOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAoIUNvbW1vblV0aWxzLmhhc1RyYW5zaWVudENvbnRleHQob0xpc3RCaW5kaW5nKSAmJiBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuX2dldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkob0xpc3RCaW5kaW5nLmdldFBhdGgoKSwgb0NvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5vTG9ja09iamVjdCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBDYWxscyBhIGJvdW5kIG9yIHVuYm91bmQgYWN0aW9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHN0YXRpY1xuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5UcmFuc2FjdGlvbkhlbHBlci5jYWxsQWN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5UcmFuc2FjdGlvbkhlbHBlclxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZ10gU2tpcHMgdGhlIHBhcmFtZXRlciBkaWFsb2cgaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIG9mIHRoZW1cblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbjogRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgdG8gYmUgY2FsbGVkXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb246IEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nXSBNb2RlIGhvdyBhY3Rpb25zIGFyZSB0byBiZSBjYWxsZWQ6ICdDaGFuZ2VTZXQnIHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgJ0lzb2xhdGVkJyB0byBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGNoYW5nZXNldHNcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHRdIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBwcm9taXNlIHJldHVybnMgdGhlIGJvdW5kIGNvbnRleHRcblx0ICogQHBhcmFtIG9WaWV3IENvbnRhaW5zIHRoZSBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXJcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWU6IHN0cmluZywgbVBhcmFtZXRlcnM6IGFueSwgb1ZpZXc6IFZpZXcgfCBudWxsLCBtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIpOiBQcm9taXNlPGFueT4ge1xuXHRcdG1QYXJhbWV0ZXJzID0gZ2V0UGFyYW1ldGVycyhtUGFyYW1ldGVycyk7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0bGV0IG9Db250ZXh0LCBvTW9kZWw6IGFueTtcblx0XHRjb25zdCBtQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5iaW5kaW5nUGFyYW1ldGVycztcblx0XHRpZiAoIXNBY3Rpb25OYW1lKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlIG5hbWUgb2YgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkXCIpO1xuXHRcdH1cblx0XHQvLyBhY3Rpb24gaW1wb3J0cyBhcmUgbm90IGRpcmVjdGx5IG9idGFpbmVkIGZyb20gdGhlIG1ldGFNb2RlbCBieSBpdCBpcyBwcmVzZW50IGluc2lkZSB0aGUgZW50aXR5Q29udGFpbmVyXG5cdFx0Ly8gYW5kIHRoZSBhY2lvbnMgaXQgcmVmZXJzIHRvIHByZXNlbnQgb3V0c2lkZSB0aGUgZW50aXR5Y29udGFpbmVyLCBoZW5jZSB0byBvYnRhaW4ga2luZCBvZiB0aGUgYWN0aW9uXG5cdFx0Ly8gc3BsaXQoKSBvbiBpdHMgbmFtZSB3YXMgcmVxdWlyZWRcblx0XHRjb25zdCBzTmFtZSA9IHNBY3Rpb25OYW1lLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRzQWN0aW9uTmFtZSA9IHNOYW1lIHx8IHNBY3Rpb25OYW1lO1xuXHRcdG9Db250ZXh0ID0gc05hbWUgPyB1bmRlZmluZWQgOiBtUGFyYW1ldGVycy5jb250ZXh0cztcblx0XHQvL2NoZWNraW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaXMgYW4gYXJyYXkgd2l0aCBtb3JlIHRoYW4gMCBsZW5ndGggb3Igbm90IGFuIGFycmF5KGNyZWF0ZSBhY3Rpb24pXG5cdFx0aWYgKG9Db250ZXh0ICYmICgoQXJyYXkuaXNBcnJheShvQ29udGV4dCkgJiYgb0NvbnRleHQubGVuZ3RoKSB8fCAhQXJyYXkuaXNBcnJheShvQ29udGV4dCkpKSB7XG5cdFx0XHRvQ29udGV4dCA9IEFycmF5LmlzQXJyYXkob0NvbnRleHQpID8gb0NvbnRleHRbMF0gOiBvQ29udGV4dDtcblx0XHRcdG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cdFx0fVxuXHRcdGlmIChtUGFyYW1ldGVycy5tb2RlbCkge1xuXHRcdFx0b01vZGVsID0gbVBhcmFtZXRlcnMubW9kZWw7XG5cdFx0fVxuXHRcdGlmICghb01vZGVsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQYXNzIGEgY29udGV4dCBmb3IgYSBib3VuZCBhY3Rpb24gb3IgcGFzcyB0aGUgbW9kZWwgZm9yIGFuIHVuYm91bmQgYWN0aW9uXCIpO1xuXHRcdH1cblx0XHQvLyBnZXQgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyAkc2VsZWN0IGFuZCAkZXhwYW5kIGZvciB0aGUgc2lkZSBlZmZlY3Qgb24gdGhpcyBhY3Rpb25cblx0XHQvLyBhbHNvIGdhdGhlciBhZGRpdGlvbmFsIHByb3BlcnR5IHBhdGhzIHRvIGJlIHJlcXVlc3RlZCBzdWNoIGFzIHRleHQgYXNzb2NpYXRpb25zXG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoYXQuX2dldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IG1TaWRlRWZmZWN0c1BhcmFtZXRlcnMgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoc0FjdGlvbk5hbWUsIG9Db250ZXh0KSB8fCB7fTtcblxuXHRcdGNvbnN0IGRpc3BsYXlVbmFwcGxpY2FibGVDb250ZXh0c0RpYWxvZyA9ICgpOiBQcm9taXNlPFY0Q29udGV4dFtdIHwgdm9pZD4gPT4ge1xuXHRcdFx0aWYgKCFtUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dCB8fCBtUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtUGFyYW1ldGVycy5jb250ZXh0cyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZuT3BlbkFuZEZpbGxEaWFsb2cgPSBmdW5jdGlvbiAob0RsZzogRGlhbG9nKSB7XG5cdFx0XHRcdFx0bGV0IG9EaWFsb2dDb250ZW50O1xuXHRcdFx0XHRcdGNvbnN0IG5Ob3RBcHBsaWNhYmxlID0gbVBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHQubGVuZ3RoLFxuXHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVJdGVtcyA9IFtdO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbVBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdG9EaWFsb2dDb250ZW50ID0gbVBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRbaV0uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUl0ZW1zLnB1c2gob0RpYWxvZ0NvbnRlbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvTm90QXBwbGljYWJsZUl0ZW1zTW9kZWwgPSBuZXcgSlNPTk1vZGVsKGFOb3RBcHBsaWNhYmxlSXRlbXMpO1xuXHRcdFx0XHRcdGNvbnN0IG9Ub3RhbHMgPSBuZXcgSlNPTk1vZGVsKHsgdG90YWw6IG5Ob3RBcHBsaWNhYmxlLCBsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwgfSk7XG5cdFx0XHRcdFx0b0RsZy5zZXRNb2RlbChvTm90QXBwbGljYWJsZUl0ZW1zTW9kZWwsIFwibm90QXBwbGljYWJsZVwiKTtcblx0XHRcdFx0XHRvRGxnLnNldE1vZGVsKG9Ub3RhbHMsIFwidG90YWxzXCIpO1xuXHRcdFx0XHRcdG9EbGcub3BlbigpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHQvLyBTaG93IHRoZSBjb250ZXh0cyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSBhbmQgd2lsbCBub3QgdGhlcmVmb3JlIGJlIHByb2Nlc3NlZFxuXHRcdFx0XHRjb25zdCBzRnJhZ21lbnROYW1lID0gXCJzYXAuZmUuY29yZS5jb250cm9scy5BY3Rpb25QYXJ0aWFsXCI7XG5cdFx0XHRcdGNvbnN0IG9EaWFsb2dGcmFnbWVudCA9IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpO1xuXHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBzQ2Fub25pY2FsUGF0aCA9IG1QYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldENhbm9uaWNhbFBhdGgoKTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IGAke3NDYW5vbmljYWxQYXRoLnN1YnN0cigwLCBzQ2Fub25pY2FsUGF0aC5pbmRleE9mKFwiKFwiKSl9L2A7XG5cdFx0XHRcdGNvbnN0IG9EaWFsb2dMYWJlbE1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0dGl0bGU6IG1QYXJhbWV0ZXJzLmxhYmVsXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0ZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdFx0XHRvRGlhbG9nRnJhZ21lbnQsXG5cdFx0XHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5VHlwZTogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0KSxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogb0RpYWxvZ0xhYmVsTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRcdGVudGl0eVR5cGU6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBvRGlhbG9nTGFiZWxNb2RlbFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG5cdFx0XHRcdFx0bGV0IG9EaWFsb2c6IERpYWxvZztcblx0XHRcdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IHtcblx0XHRcdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0Ly8gVXNlciBjYW5jZWxzIGFjdGlvblxuXHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvbkNvbnRpbnVlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFVzZXJzIGNvbnRpbnVlcyB0aGUgYWN0aW9uIHdpdGggdGhlIGJvdW5kIGNvbnRleHRzXG5cdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShtUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRvRGlhbG9nID0gKGF3YWl0IEZyYWdtZW50LmxvYWQoeyBkZWZpbml0aW9uOiBvRnJhZ21lbnQsIGNvbnRyb2xsZXI6IG9Db250cm9sbGVyIH0pKSBhcyBEaWFsb2c7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIub25DbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdC8vIFVzZXIgY2FuY2VscyBhY3Rpb25cblx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLm9uQ29udGludWUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHQvLyBVc2VycyBjb250aW51ZXMgdGhlIGFjdGlvbiB3aXRoIHRoZSBib3VuZCBjb250ZXh0c1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShtUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dCk7XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wuYWRkRGVwZW5kZW50KG9EaWFsb2cpO1xuXHRcdFx0XHRcdGZuT3BlbkFuZEZpbGxEaWFsb2cob0RpYWxvZyk7XG5cdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGxldCBvUmVzdWx0OiBhbnk7XG5cdFx0XHRpZiAob0NvbnRleHQgJiYgb01vZGVsKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRUb1Byb2Nlc3MgPSBhd2FpdCBkaXNwbGF5VW5hcHBsaWNhYmxlQ29udGV4dHNEaWFsb2coKTtcblx0XHRcdFx0aWYgKGNvbnRleHRUb1Byb2Nlc3MpIHtcblx0XHRcdFx0XHRvUmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9ucy5jYWxsQm91bmRBY3Rpb24oc0FjdGlvbk5hbWUsIGNvbnRleHRUb1Byb2Nlc3MsIG9Nb2RlbCwgb0FwcENvbXBvbmVudCwge1xuXHRcdFx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzOiBtUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXMsXG5cdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0XHRcdGxhYmVsOiBtUGFyYW1ldGVycy5sYWJlbCxcblx0XHRcdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c6IG1QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2csXG5cdFx0XHRcdFx0XHRtQmluZGluZ1BhcmFtZXRlcnM6IG1CaW5kaW5nUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdGVudGl0eVNldE5hbWU6IG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUsXG5cdFx0XHRcdFx0XHRhZGRpdGlvbmFsU2lkZUVmZmVjdDogbVNpZGVFZmZlY3RzUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdG9uU3VibWl0dGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sodGhhdC5vTG9ja09iamVjdCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b25SZXNwb25zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGF0Lm9Mb2NrT2JqZWN0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRwYXJlbnRDb250cm9sOiBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0Y29udHJvbElkOiBtUGFyYW1ldGVycy5jb250cm9sSWQsXG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dDogbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRcdGJJc0NyZWF0ZUFjdGlvbjogbVBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uLFxuXHRcdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dDogbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRcdGJPYmplY3RQYWdlOiBtUGFyYW1ldGVycy5iT2JqZWN0UGFnZSxcblx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyOiBtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRJdGVtczogbVBhcmFtZXRlcnMuY29udGV4dHNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvUmVzdWx0ID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1Jlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbnMuY2FsbEFjdGlvbkltcG9ydChzQWN0aW9uTmFtZSwgb01vZGVsLCBvQXBwQ29tcG9uZW50LCB7XG5cdFx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzOiBtUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXMsXG5cdFx0XHRcdFx0bGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLFxuXHRcdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c6IG1QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2csXG5cdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlcnM6IG1CaW5kaW5nUGFyYW1ldGVycyxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lOiBtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRcdG9uU3VibWl0dGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sodGhhdC5vTG9ja09iamVjdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvblJlc3BvbnNlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGF0Lm9Mb2NrT2JqZWN0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhcmVudENvbnRyb2w6IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogbVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyOiBtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRiT2JqZWN0UGFnZTogbVBhcmFtZXRlcnMuYk9iamVjdFBhZ2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IHRoaXMuX2hhbmRsZUFjdGlvblJlc3BvbnNlKG1lc3NhZ2VIYW5kbGVyLCBtUGFyYW1ldGVycywgc0FjdGlvbk5hbWUpO1xuXHRcdFx0cmV0dXJuIG9SZXN1bHQ7XG5cdFx0fSBjYXRjaCAoZXJyOiBhbnkpIHtcblx0XHRcdGF3YWl0IHRoaXMuX2hhbmRsZUFjdGlvblJlc3BvbnNlKG1lc3NhZ2VIYW5kbGVyLCBtUGFyYW1ldGVycywgc0FjdGlvbk5hbWUpO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlcyBtZXNzYWdlcyBmb3IgYWN0aW9uIGNhbGwuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5UcmFuc2FjdGlvbkhlbHBlciNfaGFuZGxlQWN0aW9uUmVzcG9uc2Vcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLlRyYW5zYWN0aW9uSGVscGVyXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgUGFyYW1ldGVycyB0byBiZSBjb25zaWRlcmVkIGZvciB0aGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSBhZnRlciBtZXNzYWdlIGRpYWxvZyBpcyBvcGVuZWQgaWYgcmVxdWlyZWQuXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9oYW5kbGVBY3Rpb25SZXNwb25zZShtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsIG1QYXJhbWV0ZXJzOiBhbnksIHNBY3Rpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhVHJhbnNpZW50TWVzc2FnZXMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXModHJ1ZSwgdHJ1ZSk7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IG1QYXJhbWV0ZXJzLmxhYmVsID8gbVBhcmFtZXRlcnMubGFiZWwgOiBzQWN0aW9uTmFtZTtcblx0XHRpZiAoYVRyYW5zaWVudE1lc3NhZ2VzLmxlbmd0aCA+IDAgJiYgbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic0FjdGlvbk5hbWVcIiwgbVBhcmFtZXRlcnMubGFiZWwgPyBtUGFyYW1ldGVycy5sYWJlbCA6IHNBY3Rpb25OYW1lKTtcblx0XHR9XG5cdFx0bGV0IGNvbnRyb2w7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkge1xuXHRcdFx0Y29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wuYnlJZChtUGFyYW1ldGVycy5jb250cm9sSWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IHNBY3Rpb25OYW1lOiBhY3Rpb25OYW1lLCBjb250cm9sOiBjb250cm9sIH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBIYW5kbGVzIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGUgJ0Rpc2NhcmQnIGFjdGlvbi5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLlRyYW5zYWN0aW9uSGVscGVyI2hhbmRsZVZhbGlkYXRpb25FcnJvclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuVHJhbnNhY3Rpb25IZWxwZXJcblx0ICogQHN0YXRpY1xuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRoYW5kbGVWYWxpZGF0aW9uRXJyb3IoKSB7XG5cdFx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLFxuXHRcdFx0ZXJyb3JUb1JlbW92ZSA9IG9NZXNzYWdlTWFuYWdlclxuXHRcdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0Ly8gb25seSBuZWVkcyB0byBoYW5kbGUgdmFsaWRhdGlvbiBtZXNzYWdlcywgdGVjaG5pY2FsIGFuZCBwZXJzaXN0ZW50IGVycm9ycyBuZWVkcyBub3QgdG8gYmUgY2hlY2tlZCBoZXJlLlxuXHRcdFx0XHRcdGlmIChlcnJvci52YWxpZGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoZXJyb3JUb1JlbW92ZSk7XG5cdH1cblx0LyoqXG5cdCAqIFNob3dzIGEgcG9wb3ZlciBpZiBpdCBuZWVkcyB0byBiZSBzaG93bi5cblx0ICogVE9ETzogUG9wb3ZlciBpcyBzaG93biBpZiB1c2VyIGhhcyBtb2RpZmllZCBhbnkgZGF0YS5cblx0ICogVE9ETzogUG9wb3ZlciBpcyBzaG93biBpZiB0aGVyZSdzIGEgZGlmZmVyZW5jZSBmcm9tIGRyYWZ0IGFkbWluIGRhdGEuXG5cdCAqXG5cdCAqIEBzdGF0aWNcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuVHJhbnNhY3Rpb25IZWxwZXIuX3Nob3dEaXNjYXJkUG9wb3ZlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuVHJhbnNhY3Rpb25IZWxwZXJcblx0ICogQHBhcmFtIG9DYW5jZWxCdXR0b24gVGhlIGNvbnRyb2wgd2hpY2ggd2lsbCBvcGVuIHRoZSBwb3BvdmVyXG5cdCAqIEBwYXJhbSBiSXNNb2RpZmllZFxuXHQgKiBAcGFyYW0gb1Jlc291cmNlQnVuZGxlXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgaWYgdXNlciBjb25maXJtcyBkaXNjYXJkLCByZWplY3RzIGlmIG90aGVyd2lzZSwgcmVqZWN0cyBpZiBubyBjb250cm9sIHBhc3NlZCB0byBvcGVuIHBvcG92ZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0X3Nob3dEaXNjYXJkUG9wb3ZlcihvQ2FuY2VsQnV0dG9uOiBhbnksIGJJc01vZGlmaWVkOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogYW55KSB7XG5cdFx0Ly8gVE9ETzogSW1wbGVtZW50IHRoaXMgcG9wb3ZlciBhcyBhIGZyYWdtZW50IGFzIGluIHYyPz9cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRpZiAoIW9DYW5jZWxCdXR0b24pIHtcblx0XHRcdFx0cmVqZWN0KFwiQ2FuY2VsIGJ1dHRvbiBub3QgZm91bmRcIik7XG5cdFx0XHR9XG5cdFx0XHQvL1Nob3cgcG9wb3ZlciBvbmx5IHdoZW4gZGF0YSBpcyBjaGFuZ2VkLlxuXHRcdFx0aWYgKGJJc01vZGlmaWVkKSB7XG5cdFx0XHRcdGNvbnN0IGZuT25BZnRlckRpc2NhcmQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0b0NhbmNlbEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpO1xuXHRcdFx0XHRcdGlmICh0aGF0Ll9vUG9wb3Zlci5kYXRhKFwiY29udGludWVEaXNjYXJkXCIpKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlamVjdChcIkRpc2NhcmQgb3BlcmF0aW9uIHdhcyByZWplY3RlZC4gRG9jdW1lbnQgaGFzIG5vdCBiZWVuIGRpc2NhcmRlZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhhdC5fb1BvcG92ZXIuZGV0YWNoQWZ0ZXJDbG9zZShmbk9uQWZ0ZXJEaXNjYXJkKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKCF0aGF0Ll9vUG9wb3Zlcikge1xuXHRcdFx0XHRcdGNvbnN0IG9UZXh0ID0gbmV3IFRleHQoe1xuXHRcdFx0XHRcdFx0XHQvL1RoaXMgdGV4dCBpcyB0aGUgc2FtZSBhcyBMUiB2Mi5cblx0XHRcdFx0XHRcdFx0Ly9UT0RPOiBEaXNwbGF5IG1lc3NhZ2UgcHJvdmlkZWQgYnkgYXBwIGRldmVsb3Blcj8/P1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RSQUZUX0RJU0NBUkRfTUVTU0FHRVwiLCBvUmVzb3VyY2VCdW5kbGUpXG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdG9CdXR0b24gPSBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0dGV4dDogQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9EUkFGVF9ESVNDQVJEX0JVVFRPTlwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogXCIxMDAlXCIsXG5cdFx0XHRcdFx0XHRcdHByZXNzOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhhdC5oYW5kbGVWYWxpZGF0aW9uRXJyb3IoKTtcblx0XHRcdFx0XHRcdFx0XHR0aGF0Ll9vUG9wb3Zlci5kYXRhKFwiY29udGludWVEaXNjYXJkXCIsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdHRoYXQuX29Qb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5OiBvVGV4dFxuXHRcdFx0XHRcdFx0fSBhcyBhbnkpO1xuXHRcdFx0XHRcdHRoYXQuX29Qb3BvdmVyID0gbmV3IFBvcG92ZXIoe1xuXHRcdFx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRwbGFjZW1lbnQ6IFwiVG9wXCIsXG5cdFx0XHRcdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFx0XHRcdG5ldyBWQm94KHtcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogW29UZXh0LCBvQnV0dG9uXVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdGJlZm9yZU9wZW46ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gbWFrZSBzdXJlIHRvIE5PVCB0cmlnZ2VyIG11bHRpcGxlIGNhbmNlbCBmbG93c1xuXHRcdFx0XHRcdFx0XHRvQ2FuY2VsQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR0aGF0Ll9vUG9wb3Zlci5zZXRJbml0aWFsRm9jdXMob0J1dHRvbik7XG5cdFx0XHRcdFx0XHRcdHRoYXQuX29Qb3BvdmVyLmRhdGEoXCJjb250aW51ZURpc2NhcmRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRoYXQuX29Qb3BvdmVyLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoYXQuX29Qb3BvdmVyLmF0dGFjaEFmdGVyQ2xvc2UoZm5PbkFmdGVyRGlzY2FyZCk7XG5cdFx0XHRcdHRoYXQuX29Qb3BvdmVyLm9wZW5CeShvQ2FuY2VsQnV0dG9uLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGF0LmhhbmRsZVZhbGlkYXRpb25FcnJvcigpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgb3duZXIgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHN0YXRpY1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5UcmFuc2FjdGlvbkhlbHBlci5fZ2V0T3duZXJDb21wb25lbnRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLlRyYW5zYWN0aW9uSGVscGVyXG5cdCAqIEByZXR1cm5zIFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9nZXRBcHBDb21wb25lbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29BcHBDb21wb25lbnQ7XG5cdH1cblxuXHRfb25GaWVsZENoYW5nZShvRXZlbnQ6IGFueSwgb0NyZWF0ZUJ1dHRvbjogYW55LCBtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsIGZuVmFsaWRhdGVSZXF1aXJlZFByb3BlcnRpZXM6IEZ1bmN0aW9uKSB7XG5cdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0Y29uc3Qgb0ZpZWxkID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IG9GaWVsZFByb21pc2UgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKTtcblx0XHRpZiAob0ZpZWxkUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIG9GaWVsZFByb21pc2Vcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHQvLyBTZXR0aW5nIHZhbHVlIG9mIGZpZWxkIGFzICcnIGluIGNhc2Ugb2YgdmFsdWUgaGVscCBhbmQgdmFsaWRhdGluZyBvdGhlciBmaWVsZHNcblx0XHRcdFx0XHRvRmllbGQuc2V0VmFsdWUodmFsdWUpO1xuXHRcdFx0XHRcdGZuVmFsaWRhdGVSZXF1aXJlZFByb3BlcnRpZXMoKTtcblxuXHRcdFx0XHRcdHJldHVybiBvRmllbGQuZ2V0VmFsdWUoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlICE9PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHQvL2Rpc2FibGluZyB0aGUgY29udGludWUgYnV0dG9uIGluIGNhc2Ugb2YgaW52YWxpZCB2YWx1ZSBpbiBmaWVsZFxuXHRcdFx0XHRcdFx0b0NyZWF0ZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gdmFsaWRhdGluZyBhbGwgdGhlIGZpZWxkcyBpbiBjYXNlIG9mIGVtcHR5IHZhbHVlIGluIGZpZWxkXG5cdFx0XHRcdFx0XHRvRmllbGQuc2V0VmFsdWUodmFsdWUpO1xuXHRcdFx0XHRcdFx0Zm5WYWxpZGF0ZVJlcXVpcmVkUHJvcGVydGllcygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0X2xhdW5jaERpYWxvZ1dpdGhLZXlGaWVsZHMoXG5cdFx0b0xpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdG1GaWVsZHM6IGFueSxcblx0XHRvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0bVBhcmFtZXRlcnM6IGFueSxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KSB7XG5cdFx0bGV0IG9EaWFsb2c6IERpYWxvZztcblx0XHRjb25zdCBvUGFyZW50Q29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cblx0XHQvLyBDcmF0ZSBhIGZha2UgKHRyYW5zaWVudCkgbGlzdEJpbmRpbmcgYW5kIGNvbnRleHQsIGp1c3QgZm9yIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZ1xuXHRcdGNvbnN0IG9UcmFuc2llbnRMaXN0QmluZGluZyA9IG9Nb2RlbC5iaW5kTGlzdChvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBvTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLCBbXSwgW10sIHtcblx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCJzdWJtaXRMYXRlclwiXG5cdFx0fSkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRvVHJhbnNpZW50TGlzdEJpbmRpbmcucmVmcmVzaEludGVybmFsID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0LyogKi9cblx0XHR9O1xuXHRcdGNvbnN0IG9UcmFuc2llbnRDb250ZXh0ID0gb1RyYW5zaWVudExpc3RCaW5kaW5nLmNyZWF0ZShtUGFyYW1ldGVycy5kYXRhLCB0cnVlKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBzRnJhZ21lbnROYW1lID0gXCJzYXAvZmUvY29yZS9jb250cm9scy9Ob25Db21wdXRlZFZpc2libGVLZXlGaWVsZHNEaWFsb2dcIjtcblx0XHRcdGNvbnN0IG9GcmFnbWVudCA9IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpLFxuXHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBvUGFyZW50Q29udHJvbC5nZXRDb250cm9sbGVyKCkub1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRhSW1tdXRhYmxlRmllbGRzOiBhbnlbXSA9IFtdLFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50ID0gdGhpcy5fZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRcdHNQYXRoID0gKG9MaXN0QmluZGluZy5pc1JlbGF0aXZlKCkgPyBvTGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkgOiBvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpKSBhcyBzdHJpbmcsXG5cdFx0XHRcdG9FbnRpdHlTZXRDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCkgYXMgQ29udGV4dCxcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gbUZpZWxkcykge1xuXHRcdFx0XHRhSW1tdXRhYmxlRmllbGRzLnB1c2gob01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7bUZpZWxkc1tpXX1gKSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvSW1tdXRhYmxlQ3R4TW9kZWwgPSBuZXcgSlNPTk1vZGVsKGFJbW11dGFibGVGaWVsZHMpO1xuXHRcdFx0Y29uc3Qgb0ltbXV0YWJsZUN0eCA9IG9JbW11dGFibGVDdHhNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dDtcblx0XHRcdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zKHNNZXRhUGF0aCwgb01ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBvUmVxdWlyZWRQcm9wZXJ0eVBhdGhzQ3R4TW9kZWwgPSBuZXcgSlNPTk1vZGVsKGFSZXF1aXJlZFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3Qgb1JlcXVpcmVkUHJvcGVydHlQYXRoc0N0eCA9IG9SZXF1aXJlZFByb3BlcnR5UGF0aHNDdHhNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dDtcblx0XHRcdGNvbnN0IG9OZXdGcmFnbWVudCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0XHRvRnJhZ21lbnQsXG5cdFx0XHRcdHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9FbnRpdHlTZXRDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZmllbGRzOiBvSW1tdXRhYmxlQ3R4LFxuXHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBvUmVxdWlyZWRQcm9wZXJ0eVBhdGhzQ3R4XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdGVudGl0eVNldDogb0VudGl0eVNldENvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdGZpZWxkczogb0ltbXV0YWJsZUN0eC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBvUmVxdWlyZWRQcm9wZXJ0eVBhdGhzQ3R4TW9kZWxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cblx0XHRcdGxldCBhRm9ybUVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0Y29uc3QgbUZpZWxkVmFsdWVNYXA6IGFueSA9IHt9O1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXHRcdFx0bGV0IG9DcmVhdGVCdXR0b246IEJ1dHRvbjtcblxuXHRcdFx0Y29uc3QgdmFsaWRhdGVSZXF1aXJlZFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGxldCBiRW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGFSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0XHRhRm9ybUVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKG9Gb3JtRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Gb3JtRWxlbWVudC5nZXRGaWVsZHMoKVswXTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob0ZpZWxkOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgY29udGludWUgYnV0dG9uIHNob3VsZCByZW1haW4gZGlzYWJsZWQgaW4gY2FzZSBvZiBlbXB0eSByZXF1aXJlZCBmaWVsZHMuXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9GaWVsZC5nZXRSZXF1aXJlZCgpIHx8IG9GaWVsZC5nZXRWYWx1ZVN0YXRlKCkgPT09IFZhbHVlU3RhdGUuRXJyb3I7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC5tYXAoYXN5bmMgZnVuY3Rpb24gKG9GaWVsZDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc0ZpZWxkSWQgPSBvRmllbGQuZ2V0SWQoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc0ZpZWxkSWQgaW4gbUZpZWxkVmFsdWVNYXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZWYWx1ZSA9IGF3YWl0IG1GaWVsZFZhbHVlTWFwW3NGaWVsZElkXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9GaWVsZC5nZXRWYWx1ZSgpID09PSBcIlwiID8gdW5kZWZpbmVkIDogdlZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvRmllbGQuZ2V0VmFsdWUoKSA9PT0gXCJcIiA/IHVuZGVmaW5lZCA6IG9GaWVsZC5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YkVuYWJsZWQgPSBhUmVzdWx0cy5ldmVyeShmdW5jdGlvbiAodlZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZWYWx1ZSkpIHtcblx0XHRcdFx0XHRcdFx0dlZhbHVlID0gdlZhbHVlWzBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHZWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZWYWx1ZSAhPT0gbnVsbCAmJiB2VmFsdWUgIT09IFwiXCI7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdGJFbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0b0NyZWF0ZUJ1dHRvbi5zZXRFbmFibGVkKGJFbmFibGVkKTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IHtcblx0XHRcdFx0Lypcblx0XHRcdFx0XHRcdFx0XHRcdGZpcmVkIG9uIGZvY3VzIG91dCBmcm9tIGZpZWxkIG9yIG9uIHNlbGVjdGluZyBhIHZhbHVlIGZyb20gdGhlIHZhbHVlaGVscC5cblx0XHRcdFx0XHRcdFx0XHRcdHRoZSBjcmVhdGUgYnV0dG9uIGlzIGVuYWJsZWQgd2hlbiBhIHZhbHVlIGlzIGFkZGVkLlxuXHRcdFx0XHRcdFx0XHRcdFx0bGl2ZUNoYW5nZSBpcyBub3QgZmlyZWQgd2hlbiB2YWx1ZSBpcyBhZGRlZCBmcm9tIHZhbHVlaGVscC5cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlIHZhbGlkYXRpb24gaXMgbm90IGRvbmUgZm9yIGNyZWF0ZSBidXR0b24gZW5hYmxlbWVudC5cblx0XHRcdFx0XHRcdFx0XHQqL1xuXHRcdFx0XHRoYW5kbGVDaGFuZ2U6IChvRXZlbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNGaWVsZElkID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImlkXCIpO1xuXHRcdFx0XHRcdG1GaWVsZFZhbHVlTWFwW3NGaWVsZElkXSA9IHRoaXMuX29uRmllbGRDaGFuZ2Uob0V2ZW50LCBvQ3JlYXRlQnV0dG9uLCBtZXNzYWdlSGFuZGxlciwgdmFsaWRhdGVSZXF1aXJlZFByb3BlcnRpZXMpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRcdFx0ZmlyZWQgb24ga2V5IHByZXNzLiB0aGUgY3JlYXRlIGJ1dHRvbiBpcyBlbmFibGVkIHdoZW4gYSB2YWx1ZSBpcyBhZGRlZC5cblx0XHRcdFx0XHRcdFx0XHRcdGxpdmVDaGFuZ2UgaXMgbm90IGZpcmVkIHdoZW4gdmFsdWUgaXMgYWRkZWQgZnJvbSB2YWx1ZWhlbHAuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSB2YWxpZGF0aW9uIGlzIG5vdCBkb25lIGZvciBjcmVhdGUgYnV0dG9uIGVuYWJsZW1lbnQuXG5cdFx0XHRcdFx0XHRcdFx0Ki9cblx0XHRcdFx0aGFuZGxlTGl2ZUNoYW5nZTogKG9FdmVudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc0ZpZWxkSWQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaWRcIik7XG5cdFx0XHRcdFx0Y29uc3QgdlZhbHVlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInZhbHVlXCIpO1xuXHRcdFx0XHRcdG1GaWVsZFZhbHVlTWFwW3NGaWVsZElkXSA9IHZWYWx1ZTtcblx0XHRcdFx0XHR2YWxpZGF0ZVJlcXVpcmVkUHJvcGVydGllcygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBvRGlhbG9nQ29udGVudDogYW55ID0gYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGRlZmluaXRpb246IG9OZXdGcmFnbWVudCxcblx0XHRcdFx0Y29udHJvbGxlcjogb0NvbnRyb2xsZXJcblx0XHRcdH0pO1xuXHRcdFx0bGV0IG9SZXN1bHQ6IGFueTtcblx0XHRcdGNvbnN0IGNsb3NlRGlhbG9nID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvL3JlamVjdGVkL3Jlc29sdmVkIHRoZSBwcm9taXMgcmV0dXJuZWQgYnkgX2xhdW5jaERpYWxvZ1dpdGhLZXlGaWVsZHNcblx0XHRcdFx0Ly9hcyBzb29uIGFzIHRoZSBkaWFsb2cgaXMgY2xvc2VkLiBXaXRob3V0IHdhaXRpbmcgZm9yIHRoZSBkaWFsb2cnc1xuXHRcdFx0XHQvL2FuaW1hdGlvbiB0byBmaW5pc2hcblx0XHRcdFx0aWYgKG9SZXN1bHQuZXJyb3IpIHtcblx0XHRcdFx0XHRyZWplY3Qob1Jlc3VsdC5lcnJvcik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShvUmVzdWx0LnJlc3BvbnNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHR9O1xuXG5cdFx0XHRvRGlhbG9nID0gbmV3IERpYWxvZyhnZW5lcmF0ZShbXCJDcmVhdGVEaWFsb2dcIiwgc01ldGFQYXRoXSksIHtcblx0XHRcdFx0dGl0bGU6IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfU0FQRkVfQUNUSU9OX0NSRUFURVwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRjb250ZW50OiBbb0RpYWxvZ0NvbnRlbnRdLFxuXHRcdFx0XHRiZWdpbkJ1dHRvbjoge1xuXHRcdFx0XHRcdHRleHQ6IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfU0FQRkVfQUNUSU9OX0NSRUFURV9CVVRUT05cIiwgb1Jlc291cmNlQnVuZGxlKSxcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogYXN5bmMgKG9FdmVudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBjcmVhdGVCdXR0b24gPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdFx0XHRjcmVhdGVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7XG5cdFx0XHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5iSXNDcmVhdGVEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKG1GaWVsZFZhbHVlTWFwKS5tYXAoYXN5bmMgZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1ZhbHVlID0gYXdhaXQgbUZpZWxkVmFsdWVNYXBbc0tleV07XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvRGlhbG9nVmFsdWU6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZ1ZhbHVlW3NLZXldID0gb1ZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9EaWFsb2dWYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRhd2FpdCB0b0VTNlByb21pc2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTGlzdEJpbmRpbmcgJiYgb0xpc3RCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3JlYXRlUGFyYW1ldGVyczogYVZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRyYW5zaWVudERhdGEgPSBvVHJhbnNpZW50Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY3JlYXRlRGF0YTogYW55ID0ge307XG5cdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHRyYW5zaWVudERhdGEpLmZvckVhY2goZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vJHtzUHJvcGVydHlQYXRofWApO1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVuc3VyZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwYXlsb2FkLCBkZWVwIGNyZWF0ZSBub3Qgc3VwcG9ydGVkXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHkuJGtpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRlRGF0YVtzUHJvcGVydHlQYXRoXSA9IHRyYW5zaWVudERhdGFbc1Byb3BlcnR5UGF0aF07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3RG9jdW1lbnRDb250ZXh0ID0gb0xpc3RCaW5kaW5nLmNyZWF0ZShcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGVEYXRhLFxuXHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRlQXRFbmQsXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW5hY3RpdmVcblx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBvUHJvbWlzZSA9IHRoaXMub25BZnRlckNyZWF0ZUNvbXBsZXRpb24ob0xpc3RCaW5kaW5nLCBvTmV3RG9jdW1lbnRDb250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0XHRcdGxldCBvUmVzcG9uc2U6IGFueSA9IGF3YWl0IG9Qcm9taXNlO1xuXHRcdFx0XHRcdFx0XHRpZiAoIW9SZXNwb25zZSB8fCAob1Jlc3BvbnNlICYmIG9SZXNwb25zZS5iS2VlcERpYWxvZ09wZW4gIT09IHRydWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b1Jlc3BvbnNlID0gb1Jlc3BvbnNlID8/IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0XHRcdG9SZXNwb25zZS5uZXdDb250ZXh0ID0gb05ld0RvY3VtZW50Q29udGV4dDtcblx0XHRcdFx0XHRcdFx0XHRvUmVzdWx0ID0geyByZXNwb25zZTogb1Jlc3BvbnNlIH07XG5cdFx0XHRcdFx0XHRcdFx0Y2xvc2VEaWFsb2coKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaW4gY2FzZSBvZiBjcmVhdGlvbiBmYWlsZWQsIGRpYWxvZyBzaG91bGQgc3RheSBvcGVuIC0gdG8gYWNoaWV2ZSB0aGUgc2FtZSwgbm90aGluZyBoYXMgdG8gYmUgZG9uZSAobGlrZSBpbiBjYXNlIG9mIHN1Y2Nlc3Mgd2l0aCBiS2VlcERpYWxvZ09wZW4pXG5cdFx0XHRcdFx0XHRcdGlmIChvRXJyb3IgIT09IEZFTGlicmFyeS5Db25zdGFudHMuQ3JlYXRpb25GYWlsZWQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBvdGhlciBlcnJvcnMgYXJlIG5vdCBleHBlY3RlZFxuXHRcdFx0XHRcdFx0XHRcdG9SZXN1bHQgPSB7IGVycm9yOiBvRXJyb3IgfTtcblx0XHRcdFx0XHRcdFx0XHRjbG9zZURpYWxvZygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRlbmRCdXR0b246IHtcblx0XHRcdFx0XHR0ZXh0OiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09NTU9OX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX0NBTkNFTFwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRvUmVzdWx0ID0geyBlcnJvcjogRkVMaWJyYXJ5LkNvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cgfTtcblx0XHRcdFx0XHRcdGNsb3NlRGlhbG9nKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gc2hvdyBmb290ZXIgYXMgcGVyIFVYIGd1aWRlbGluZXMgd2hlbiBkaWFsb2cgaXMgbm90IG9wZW5cblx0XHRcdFx0XHQob0RpYWxvZy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJpc0NyZWF0ZURpYWxvZ09wZW5cIiwgZmFsc2UpO1xuXHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdG9UcmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gYXMgYW55KTtcblx0XHRcdGFGb3JtRWxlbWVudHMgPSBvRGlhbG9nQ29udGVudD8uZ2V0QWdncmVnYXRpb24oXCJmb3JtXCIpLmdldEFnZ3JlZ2F0aW9uKFwiZm9ybUNvbnRhaW5lcnNcIilbMF0uZ2V0QWdncmVnYXRpb24oXCJmb3JtRWxlbWVudHNcIik7XG5cdFx0XHRpZiAob1BhcmVudENvbnRyb2wgJiYgb1BhcmVudENvbnRyb2wuYWRkRGVwZW5kZW50KSB7XG5cdFx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcGFyZW50IGNvbnRyb2wgc3BlY2lmaWVkIGFkZCB0aGUgZGlhbG9nIGFzIGRlcGVuZGVudFxuXHRcdFx0XHRvUGFyZW50Q29udHJvbC5hZGREZXBlbmRlbnQob0RpYWxvZyk7XG5cdFx0XHR9XG5cdFx0XHRvQ3JlYXRlQnV0dG9uID0gb0RpYWxvZy5nZXRCZWdpbkJ1dHRvbigpO1xuXHRcdFx0b0RpYWxvZy5zZXRCaW5kaW5nQ29udGV4dChvVHJhbnNpZW50Q29udGV4dCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMoXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRhSW1tdXRhYmxlRmllbGRzLFxuXHRcdFx0XHRcdG9UcmFuc2llbnRDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0ZUFjdGlvbixcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5kYXRhXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHZhbGlkYXRlUmVxdWlyZWRQcm9wZXJ0aWVzKCk7XG5cdFx0XHRcdC8vIGZvb3RlciBtdXN0IG5vdCBiZSB2aXNpYmxlIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuIGFzIHBlciBVWCBndWlkZWxpbmVzXG5cdFx0XHRcdChvRGlhbG9nLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFwiaXNDcmVhdGVEaWFsb2dPcGVuXCIsIHRydWUpO1xuXHRcdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcygpO1xuXHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0b25BZnRlckNyZWF0ZUNvbXBsZXRpb24ob0xpc3RCaW5kaW5nOiBhbnksIG9OZXdEb2N1bWVudENvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGxldCBmblJlc29sdmU6IEZ1bmN0aW9uO1xuXHRcdGNvbnN0IG9Qcm9taXNlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcblx0XHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBmbkNyZWF0ZUNvbXBsZXRlZCA9IChvRXZlbnQ6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKSxcblx0XHRcdFx0YlN1Y2Nlc3MgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3VjY2Vzc1wiKTtcblx0XHRcdGlmIChvQ29udGV4dCA9PT0gb05ld0RvY3VtZW50Q29udGV4dCkge1xuXHRcdFx0XHRvTGlzdEJpbmRpbmcuZGV0YWNoQ3JlYXRlQ29tcGxldGVkKGZuQ3JlYXRlQ29tcGxldGVkLCB0aGlzKTtcblx0XHRcdFx0Zm5SZXNvbHZlKGJTdWNjZXNzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGZuU2FmZUNvbnRleHRDcmVhdGVkID0gKCkgPT4ge1xuXHRcdFx0b05ld0RvY3VtZW50Q29udGV4dFxuXHRcdFx0XHQuY3JlYXRlZCgpXG5cdFx0XHRcdC50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdExvZy50cmFjZShcInRyYW5zaWVudCBjcmVhdGlvbiBjb250ZXh0IGRlbGV0ZWRcIik7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoY29udGV4dEVycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cudHJhY2UoXCJ0cmFuc2llbnQgY3JlYXRpb24gY29udGV4dCBkZWxldGlvbiBlcnJvclwiLCBjb250ZXh0RXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0b0xpc3RCaW5kaW5nLmF0dGFjaENyZWF0ZUNvbXBsZXRlZChmbkNyZWF0ZUNvbXBsZXRlZCwgdGhpcyk7XG5cblx0XHRyZXR1cm4gb1Byb21pc2UudGhlbigoYlN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcblx0XHRcdGlmICghYlN1Y2Nlc3MpIHtcblx0XHRcdFx0aWYgKCFtUGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkKSB7XG5cdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBwZW5kaW5nIFBPU1QgYW5kIGRlbGV0ZSB0aGUgY29udGV4dCBpbiB0aGUgbGlzdEJpbmRpbmdcblx0XHRcdFx0XHRmblNhZmVDb250ZXh0Q3JlYXRlZCgpOyAvLyBUbyBhdm9pZCBhICdyZXF1ZXN0IGNhbmNlbGxlZCcgZXJyb3IgaW4gdGhlIGNvbnNvbGVcblx0XHRcdFx0XHRvTGlzdEJpbmRpbmcucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0b0xpc3RCaW5kaW5nLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKG9MaXN0QmluZGluZy5nZXRVcGRhdGVHcm91cElkKCkpO1xuXG5cdFx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5DcmVhdGlvbkZhaWxlZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4geyBiS2VlcERpYWxvZ09wZW46IHRydWUgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBvTmV3RG9jdW1lbnRDb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBOZXdBY3Rpb24gdG8gYmUgZXhlY3V0ZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAc3RhdGljXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLlRyYW5zYWN0aW9uSGVscGVyLl9nZXROZXdBY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLlRyYW5zYWN0aW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgU3RhcnR1cCBwYXJhbWV0ZXJzIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcGFyYW0gc0NyZWF0ZUhhc2ggSGFzaCB0byBiZSBjaGVja2VkIGZvciBhY3Rpb24gdHlwZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgTWV0YU1vZGVsIHVzZWQgdG8gY2hlY2sgZm9yIE5ld0FjdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHNNZXRhUGF0aCBUaGUgTWV0YVBhdGhcblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZ2V0TmV3QWN0aW9uKG9TdGFydHVwUGFyYW1ldGVyczogYW55LCBzQ3JlYXRlSGFzaDogc3RyaW5nLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc01ldGFQYXRoOiBzdHJpbmcpIHtcblx0XHRsZXQgc05ld0FjdGlvbjtcblxuXHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnMgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgJiYgc0NyZWF0ZUhhc2gudG9VcHBlckNhc2UoKS5pbmRleE9mKFwiSS1BQ1RJT049Q1JFQVRFV0lUSFwiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBzUHJlZmVycmVkTW9kZSA9IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdO1xuXHRcdFx0c05ld0FjdGlvbiA9XG5cdFx0XHRcdHNQcmVmZXJyZWRNb2RlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihcIkNSRUFURVdJVEg6XCIpID4gLTFcblx0XHRcdFx0XHQ/IHNQcmVmZXJyZWRNb2RlLnN1YnN0cihzUHJlZmVycmVkTW9kZS5sYXN0SW5kZXhPZihcIjpcIikgKyAxKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMgJiZcblx0XHRcdG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlICYmXG5cdFx0XHRzQ3JlYXRlSGFzaC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoXCJJLUFDVElPTj1BVVRPQ1JFQVRFV0lUSFwiKSA+IC0xXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBzUHJlZmVycmVkTW9kZSA9IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdO1xuXHRcdFx0c05ld0FjdGlvbiA9XG5cdFx0XHRcdHNQcmVmZXJyZWRNb2RlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihcIkFVVE9DUkVBVEVXSVRIOlwiKSA+IC0xXG5cdFx0XHRcdFx0PyBzUHJlZmVycmVkTW9kZS5zdWJzdHIoc1ByZWZlcnJlZE1vZGUubGFzdEluZGV4T2YoXCI6XCIpICsgMSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c05ld0FjdGlvbiA9XG5cdFx0XHRcdG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRPYmplY3QgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdD8gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWQvTmV3QWN0aW9uYCkgfHxcblx0XHRcdFx0XHQgIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9OZXdBY3Rpb25gKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gc05ld0FjdGlvbjtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBsYWJlbCBmb3IgdGhlIHRpdGxlIG9mIGEgc3BlY2lmaWMgY3JlYXRlIGFjdGlvbiBkaWFsb2csIGUuZy4gQ3JlYXRlIFNhbGVzIE9yZGVyIGZyb20gUXVvdGF0aW9uLlxuXHQgKlxuXHQgKiBUaGUgZm9sbG93aW5nIHByaW9yaXR5IGlzIGFwcGxpZWQ6XG5cdCAqIDEuIGxhYmVsIG9mIGxpbmUtaXRlbSBhbm5vdGF0aW9uLlxuXHQgKiAyLiBsYWJlbCBhbm5vdGF0ZWQgaW4gdGhlIGFjdGlvbi5cblx0ICogMy4gXCJDcmVhdGVcIiBhcyBhIGNvbnN0YW50IGZyb20gaTE4bi5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBzdGF0aWNcblx0ICogQHByaXZhdGVcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuVHJhbnNhY3Rpb25IZWxwZXIuX2dldFNwZWNpZmljQ3JlYXRlQWN0aW9uRGlhbG9nTGFiZWxcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLlRyYW5zYWN0aW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBNZXRhTW9kZWwgdXNlZCB0byBjaGVjayBmb3IgdGhlIE5ld0FjdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHNNZXRhUGF0aCBUaGUgTWV0YVBhdGhcblx0ICogQHBhcmFtIHNOZXdBY3Rpb24gQ29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gb1Jlc291cmNlQnVuZGxlQ29yZSBSZXNvdXJjZUJ1bmRsZSB0byBhY2Nlc3MgdGhlIGRlZmF1bHQgQ3JlYXRlIGxhYmVsXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbCBmb3IgdGhlIENyZWF0ZSBBY3Rpb24gRGlhbG9nXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9nZXRTcGVjaWZpY0NyZWF0ZUFjdGlvbkRpYWxvZ0xhYmVsKFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHNNZXRhUGF0aDogc3RyaW5nLFxuXHRcdHNOZXdBY3Rpb246IHN0cmluZyxcblx0XHRvUmVzb3VyY2VCdW5kbGVDb3JlOiBSZXNvdXJjZUJ1bmRsZVxuXHQpIHtcblx0XHRjb25zdCBmbkdldExhYmVsRnJvbUxpbmVJdGVtQW5ub3RhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtYCkpIHtcblx0XHRcdFx0Y29uc3QgaUxpbmVJdGVtSW5kZXggPSBvTWV0YU1vZGVsXG5cdFx0XHRcdFx0LmdldE9iamVjdChgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbWApXG5cdFx0XHRcdFx0LmZpbmRJbmRleChmdW5jdGlvbiAob0xpbmVJdGVtOiBhbnkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFMaW5lSXRlbUFjdGlvbiA9IG9MaW5lSXRlbS5BY3Rpb24gPyBvTGluZUl0ZW0uQWN0aW9uLnNwbGl0KFwiKFwiKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdHJldHVybiBhTGluZUl0ZW1BY3Rpb24gPyBhTGluZUl0ZW1BY3Rpb25bMF0gPT09IHNOZXdBY3Rpb24gOiBmYWxzZTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGlMaW5lSXRlbUluZGV4ID4gLTFcblx0XHRcdFx0XHQ/IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtYClbaUxpbmVJdGVtSW5kZXhdLkxhYmVsXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0Zm5HZXRMYWJlbEZyb21MaW5lSXRlbUFubm90YXRpb24oKSB8fFxuXHRcdFx0KG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofS8ke3NOZXdBY3Rpb259QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbGApKSB8fFxuXHRcdFx0KG9SZXNvdXJjZUJ1bmRsZUNvcmUgJiYgb1Jlc291cmNlQnVuZGxlQ29yZS5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfU0FQRkVfQUNUSU9OX0NSRUFURVwiKSlcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zYWN0aW9uSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7OztFQWtqQk8sZ0JBQWdCQSxJQUFJLEVBQUVDLE9BQU8sRUFBRTtJQUNyQyxJQUFJO01BQ0gsSUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQUU7SUFDcEIsQ0FBQyxDQUFDLE9BQU1HLENBQUMsRUFBRTtNQUNWLE9BQU9GLE9BQU8sQ0FBQ0UsQ0FBQyxDQUFDO0lBQ2xCO0lBQ0EsSUFB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
|
|
5
|
+
sap.ui.define(["sap/base/Log","sap/fe/core/CommonUtils","sap/fe/core/controllerextensions/BusyLocker","sap/fe/core/controllerextensions/editFlow/draft","sap/fe/core/controllerextensions/editFlow/operations","sap/fe/core/controllerextensions/editFlow/sticky","sap/fe/core/controllerextensions/messageHandler/messageHandling","sap/fe/core/helpers/DeleteHelper","sap/fe/core/helpers/FPMHelper","sap/fe/core/helpers/ModelHelper","sap/fe/core/helpers/StableIdHelper","sap/fe/core/library","sap/m/Button","sap/m/Dialog","sap/m/MessageBox","sap/m/MessageToast","sap/m/Popover","sap/m/Text","sap/m/VBox","sap/ui/core/Core","sap/ui/core/Fragment","sap/ui/core/library","sap/ui/core/util/XMLPreprocessor","sap/ui/core/XMLTemplateProcessor","sap/ui/model/json/JSONModel","../../helpers/ToES6Promise"],function(e,t,n,o,a,s,r,i,l,c,d,u,g,f,p,C,h,m,b,y,w,x,A,E,T,D){"use strict";var P=d.generate;const M=u.CreationMode;const v=u.ProgrammingModel;const O=x.ValueState;function _(e){if(e&&e.getMetadata&&e.getMetadata().getName()==="sap.ui.base.Event"){e={}}return e||{}}let I=function(){function d(){}var I=d.prototype;I.busyLock=function e(t,o){n.lock(t.getModel("ui"),o)};I.busyUnlock=function e(t,o){n.unlock(t.getModel("ui"),o)};I.getProgrammingModel=function e(t){let n;if(t.isA("sap.ui.model.odata.v4.Context")){n=t.getPath()}else{n=(t.isRelative()?t.getResolvedPath():t.getPath())??""}const o=t.getModel().getMetaModel();if(c.isDraftSupported(o,n)){return v.Draft}else if(c.isStickySessionSupported(o)){return v.Sticky}else{return v.NonDraft}};I.validateDocument=function e(t,n,o){const a=n&&n.customValidationFunction;if(a){const e=a.substring(0,a.lastIndexOf(".")||-1).replace(/\./gi,"/"),s=a.substring(a.lastIndexOf(".")+1,a.length),r=n.data;delete r["@$ui5.context.isTransient"];return l.validationWrapper(e,s,r,o,t)}return Promise.resolve([])};I.createDocument=async function n(o,s,r,i,l,d){const g=o.getModel(),f=g.getMetaModel(),p=f.getMetaPath(o.getHeaderContext().getPath()),C=r.getRouterProxy().getHash(),h=r.getComponentData(),m=h&&h.startupParameters||{},b=!o.isRelative()?this._getNewAction(m,C,f,p):undefined;const w={$$patchWithoutSideEffects:true};const x=f.getObject(`${p}/@com.sap.vocabularies.Common.v1.Messages/$Path`);let A="/busy";let E=f.getObject(`${p}@com.sap.vocabularies.Common.v1.DefaultValuesFunction`)||f.getObject(`${c.getTargetEntitySet(f.getContext(p))}@com.sap.vocabularies.Common.v1.DefaultValuesFunction`);let T;let P;if(E){if(f.getObject(`${p}@com.sap.vocabularies.Common.v1.DefaultValuesFunction`)&&c.getTargetEntitySet(f.getContext(p))!==p){T=true}else{T=false}}if(x){w["$select"]=x}const O=_(s);if(!o){throw new Error("Binding required for new document creation")}const I=this.getProgrammingModel(o);if(I!==v.Draft&&I!==v.Sticky){throw new Error("Create document only allowed for draft or sticky session supported services")}if(O.busyMode==="Local"){A=`/busyLocal/${O.busyId}`}O.beforeCreateCallBack=l?null:O.beforeCreateCallBack;this.busyLock(r,A);const S=y.getLibraryResourceBundle("sap.fe.core");let B;try{if(b){B=await this.callAction(b,{contexts:o.getHeaderContext(),showActionParameterDialog:true,label:this._getSpecificCreateActionDialogLabel(f,p,b,S),bindingParameters:w,parentControl:O.parentControl,bIsCreateAction:true,skipParameterDialog:O.skipParameterDialog},null,r,i)}else{const n=O.creationMode!==M.CreationRow&&O.creationMode!==M.Inline;const s=n?t.getNonComputedVisibleFields(f,p,d):[];E=l?null:E;let c,u;if(E){if(T){c=o.getContext()&&`${f.getMetaPath(o.getContext().getPath())}/${E}`;u=o.getContext()}else{c=o.getHeaderContext()&&`${f.getMetaPath(o.getHeaderContext().getPath())}/${E}`;u=o.getHeaderContext()}}const C=c&&f.createBindingContext(c);try{let t;try{const e=C&&C.getObject()&&C.getObject()[0].$IsBound?await a.callBoundFunction(E,u,g):await a.callFunctionImport(E,g);if(e){t=e.getObject()}}catch(t){e.error(`Error while executing the function ${E}`,t);throw t}O.data=t?Object.assign({},t,O.data):O.data;if(O.data){delete O.data["@odata.context"]}if(s.length>0){B=await this._launchDialogWithKeyFields(o,s,g,O,r,i);P=B.newContext}else{if(O.beforeCreateCallBack){await D(O.beforeCreateCallBack({contextPath:o&&o.getPath()}))}P=o.create(O.data,true,O.createAtEnd,O.inactive);if(!O.inactive){B=await this.onAfterCreateCompletion(o,P,O)}}}catch(t){e.error("Error while creating the new document",t);throw t}}P=P||B;await i.showMessageDialog({control:O.parentControl});return P}catch(e){var N;await i.showMessageDialog({control:O.parentControl});if((e===u.Constants.ActionExecutionFailed||e===u.Constants.CancelActionDialog)&&(N=P)!==null&&N!==void 0&&N.isTransient()){P.delete("$direct")}throw e}finally{this.busyUnlock(r,A)}};I._isDraftEnabled=function e(t){const n=t[0];const o=this.getProgrammingModel(n);return o===v.Draft};I.deleteDocument=function e(n,o,a,s,l){const c=y.getLibraryResourceBundle("sap.fe.core");let d;this.busyLock(a);const u=Array.isArray(n)?[...n]:[n];return new Promise((e,n)=>{try{const C=this._isDraftEnabled(o.selectedContexts||u);const h=[];const m=[];if(o){if(!o.numberOfSelectedContexts){if(C){const e=u.find(e=>{const t=e.getObject();return t.IsActiveEntity===true&&t.HasDraftEntity===true&&t.DraftAdministrativeData&&t.DraftAdministrativeData.InProcessByUser&&!t.DraftAdministrativeData.DraftIsCreatedByMe});if(e){const o=e.getObject().DraftAdministrativeData.InProcessByUser;p.show(t.getTranslatedText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_SINGLE_OBJECT_LOCKED",s,[o]),{title:c.getText("C_COMMON_DELETE"),onClose:n});return}}o=_(o);let e="";if(o.title){if(o.description){d=[o.title+" ",o.description]}else{d=[o.title,""]}e=t.getTranslatedText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO",s,d,o.entitySetName)}else{e=t.getTranslatedText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR",s,undefined,o.entitySetName)}m.push({type:"deletableContexts",contexts:u,text:e,selected:true,control:"text"})}else{let e=u.length;if(C){e+=o.draftsWithNonDeletableActive.length+o.draftsWithDeletableActive.length+o.unSavedContexts.length+o.createModeContexts.length;i.updateDraftOptionsForDeletableTexts(o,u,e,s,h,m)}i.updateOptionsForDeletableTexts(o,u,s,m)}}i.updateContentForDeleteDialog(m,h);const y=new b({items:h});const w=c.getText("C_COMMON_DELETE");const x=async()=>{this.busyLock(a);try{await i.deleteConfirmHandler(m,o,l,s,a,C);e()}catch(e){n()}finally{this.busyUnlock(a)}};let A=false;const E=new f({title:w,state:"Warning",content:[y],ariaLabelledBy:h,beginButton:new g({text:c.getText("C_COMMON_DELETE"),type:"Emphasized",press:function(){r.removeBoundTransitionMessages();A=true;E.close();x()}}),endButton:new g({text:t.getTranslatedText("C_COMMON_DIALOG_CANCEL",s),press:function(){E.close()}}),afterClose:function(){E.destroy();if(!A){n()}}});if(o.noDialog){x()}else{E.addStyleClass("sapUiContentPadding");E.open()}}finally{this.busyUnlock(a)}})};I.editDocument=async function e(t,n,a,r){const i=this.getProgrammingModel(t);if(!t){throw new Error("Binding context to active document is required")}if(i!==v.Draft&&i!==v.Sticky){throw new Error("Edit is only allowed for draft or sticky session supported services")}this.busyLock(a);r.removeTransitionMessages();try{const e=i===v.Draft?await o.createDraftFromActiveDocument(t,a,{bPreserveChanges:true,oView:n}):await s.editDocumentInStickySession(t,a);await r.showMessageDialog();return e}catch(e){await r.showMessages({concurrentEditFlag:true});throw e}finally{this.busyUnlock(a)}};I.cancelDocument=async function e(t,n,a,r,i,l,c){if(!t){throw new Error("No context exists. Pass a meaningful context")}this.busyLock(a);const d=_(n);const u=t.getModel();const g=this.getProgrammingModel(t);if(g!==v.Draft&&g!==v.Sticky){throw new Error("Cancel document only allowed for draft or sticky session supported services")}try{let e=false;if(g===v.Draft&&!c){const e=u.bindContext(`${t.getPath()}/DraftAdministrativeData`).getBoundContext();const n=await e.requestObject();if(n){c=n.CreationDateTime!==n.LastChangeDateTime}}if(!d.skipDiscardPopover){await this._confirmDiscard(d.cancelButton,c,r)}if(t.isKeepAlive()){t.setKeepAlive(false)}if(d.beforeCancelCallBack){await d.beforeCancelCallBack({context:t})}if(g===v.Draft){if(l){if(t.hasPendingChanges()){t.getBinding().resetChanges()}e=await o.deleteDraft(t,a)}else{const n=u.bindContext(`${t.getPath()}/SiblingEntity`).getBoundContext();try{const s=await n.requestCanonicalPath();if(t.hasPendingChanges()){t.getBinding().resetChanges()}e=u.bindContext(s).getBoundContext()}finally{await o.deleteDraft(t,a)}}}else{const n=await s.discardDocument(t);if(n){if(n.hasPendingChanges()){n.getBinding().resetChanges()}if(!l){n.refresh();e=n}}}i.removeTransitionMessages();await i.showMessages();return e}catch(e){await i.showMessages();throw e}finally{this.busyUnlock(a)}};I.saveDocument=async function e(n,a,i,l,c,d,u){const g=this.getProgrammingModel(n);if(g!==v.Sticky&&g!==v.Draft){throw new Error("Save is only allowed for draft or sticky session supported services")}d.removeTransitionMessages();try{this.busyLock(a);const e=g===v.Draft?await o.activateDocument(n,a,{},d):await s.activateDocument(n,a);const l=r.getMessages().concat(r.getMessages(true,true));if(!(l.length===1&&l[0].type===x.MessageType.Success)){C.show(u?t.getTranslatedText("C_TRANSACTION_HELPER_OBJECT_CREATED",i):t.getTranslatedText("C_TRANSACTION_HELPER_OBJECT_SAVED",i))}return e}catch(e){if(l&&(c===null||c===void 0?void 0:c.length)>0){c.forEach(e=>{if(!t.hasTransientContext(e)){a.getSideEffectsService().requestSideEffectsForNavigationProperty(e.getPath(),n)}})}await d.showMessages();throw e}finally{this.busyUnlock(a)}};I.callAction=async function e(t,n,o,s,r){n=_(n);let i,l;const c=n.bindingParameters;if(!t){throw new Error("Provide name of action to be executed")}const d=t.split("/")[1];t=d||t;i=d?undefined:n.contexts;if(i&&(Array.isArray(i)&&i.length||!Array.isArray(i))){i=Array.isArray(i)?i[0]:i;l=i.getModel()}if(n.model){l=n.model}if(!l){throw new Error("Pass a context for a bound action or pass the model for an unbound action")}const u=s.getSideEffectsService().getODataActionSideEffects(t,i)||{};const g=()=>{if(!n.notApplicableContext||n.notApplicableContext.length===0){return Promise.resolve(n.contexts)}return new Promise(async(e,t)=>{const o=function(e){let t;const o=n.notApplicableContext.length,a=[];for(let e=0;e<n.notApplicableContext.length;e++){t=n.notApplicableContext[e].getObject();a.push(t)}const s=new T(a);const r=new T({total:o,label:n.label});e.setModel(s,"notApplicable");e.setModel(r,"totals");e.open()};const a="sap.fe.core.controls.ActionPartial";const s=E.loadTemplate(a,"fragment");const r=l.getMetaModel();const i=n.contexts[0].getCanonicalPath();const c=`${i.substr(0,i.indexOf("("))}/`;const d=new T({title:n.label});try{const t=await A.process(s,{name:a},{bindingContexts:{entityType:r.createBindingContext(c),label:d.createBindingContext("/")},models:{entityType:r,metaModel:r,label:d}});let i;const l={onClose:function(){i.close();e()},onContinue:function(){i.close();e(n.applicableContext)}};i=await w.load({definition:t,controller:l});l.onClose=function(){i.close();e()};l.onContinue=function(){i.close();e(n.applicableContext)};n.parentControl.addDependent(i);o(i)}catch(e){t(e)}})};try{let e;if(i&&l){const o=await g();if(o){e=await a.callBoundAction(t,o,l,s,{parameterValues:n.parameterValues,invocationGrouping:n.invocationGrouping,label:n.label,skipParameterDialog:n.skipParameterDialog,mBindingParameters:c,entitySetName:n.entitySetName,additionalSideEffect:u,onSubmitted:()=>{r.removeTransitionMessages();this.busyLock(s)},onResponse:()=>{this.busyUnlock(s)},parentControl:n.parentControl,controlId:n.controlId,internalModelContext:n.internalModelContext,operationAvailableMap:n.operationAvailableMap,bIsCreateAction:n.bIsCreateAction,bGetBoundContext:n.bGetBoundContext,bObjectPage:n.bObjectPage,messageHandler:r,defaultValuesExtensionFunction:n.defaultValuesExtensionFunction,selectedItems:n.contexts})}else{e=null}}else{e=await a.callActionImport(t,l,s,{parameterValues:n.parameterValues,label:n.label,skipParameterDialog:n.skipParameterDialog,bindingParameters:c,entitySetName:n.entitySetName,onSubmitted:()=>{this.busyLock(s)},onResponse:()=>{this.busyUnlock(s)},parentControl:n.parentControl,internalModelContext:n.internalModelContext,operationAvailableMap:n.operationAvailableMap,messageHandler:r,bObjectPage:n.bObjectPage})}await this._handleActionResponse(r,n,t);return e}catch(e){await this._handleActionResponse(r,n,t);throw e}};I._handleActionResponse=function e(t,n,o){const a=r.getMessages(true,true);const s=n.label?n.label:o;if(a.length>0&&n&&n.internalModelContext){n.internalModelContext.setProperty("sActionName",n.label?n.label:o)}let i;if(n.controlId){i=n.parentControl.byId(n.controlId)}else{i=n.parentControl}return t.showMessages({sActionName:s,control:i})};I.handleValidationError=function e(){const t=y.getMessageManager(),n=t.getMessageModel().getData().filter(function(e){if(e.validation){return e}});t.removeMessages(n)};I._createPopover=function e(t){return new h(t)};I._confirmDiscard=function e(n,o,a){if(!o){this.handleValidationError();return Promise.resolve()}n.setEnabled(false);return new Promise((e,o)=>{const s=this._createPopover({showHeader:false,placement:"Top"});s.addStyleClass("sapUiContentPadding");const r=new m({text:t.getTranslatedText("C_TRANSACTION_HELPER_DRAFT_DISCARD_MESSAGE",a)});const i=new g({text:t.getTranslatedText("C_TRANSACTION_HELPER_DRAFT_DISCARD_BUTTON",a),width:"100%",press:()=>{this.handleValidationError();s.data("continueDiscard",true);s.close()},ariaLabelledBy:[r]});s.addContent(new b({items:[r,i]}));s.attachBeforeOpen(()=>{s.setInitialFocus(i)});s.attachAfterClose(()=>{n.setEnabled(true);if(s.data("continueDiscard")){e()}else{o()}});s.openBy(n,false)})};I._onFieldChange=function e(t,n,o,a){o.removeTransitionMessages();const s=t.getSource();const r=t.getParameter("promise");if(r){return r.then(function(e){s.setValue(e);a();return s.getValue()}).catch(function(e){if(e!==""){n.setEnabled(false)}else{s.setValue(e);a()}})}};I._launchDialogWithKeyFields=function e(o,a,s,r,i,l){let c;const d=r.parentControl;const g=s.bindList(o.getPath(),o.getContext(),[],[],{$$updateGroupId:"submitLater"});g.refreshInternal=function(){};const p=g.create(r.data,true);return new Promise(async(e,C)=>{const h="sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog";const m=E.loadTemplate(h,"fragment"),b=d.getController().oResourceBundle,y=s.getMetaModel(),x=[],M=o.isRelative()?o.getResolvedPath():o.getPath(),v=y.createBindingContext(M),_=y.getMetaPath(M);for(const e in a){x.push(y.createBindingContext(`${_}/${a[e]}`))}const I=new T(x);const S=I.createBindingContext("/");const B=t.getRequiredPropertiesFromInsertRestrictions(_,y);const N=new T(B);const R=N.createBindingContext("/");const k=await A.process(m,{name:h},{bindingContexts:{entitySet:v,fields:S,requiredProperties:R},models:{entitySet:v.getModel(),fields:S.getModel(),metaModel:y,requiredProperties:N}});let L=[];const F={};let H;const $=async function(){let e=false;try{const t=await Promise.all(L.map(function(e){return e.getFields()[0]}).filter(function(e){return e.getRequired()||e.getValueState()===O.Error}).map(async function(e){const t=e.getId();if(t in F){try{const n=await F[t];return e.getValue()===""?undefined:n}catch(e){return undefined}}return e.getValue()===""?undefined:e.getValue()}));e=t.every(function(e){if(Array.isArray(e)){e=e[0]}return e!==undefined&&e!==null&&e!==""})}catch(t){e=false}H.setEnabled(e)};const j={handleChange:e=>{const t=e.getParameter("id");F[t]=this._onFieldChange(e,H,l,$)},handleLiveChange:e=>{const t=e.getParameter("id");const n=e.getParameter("value");F[t]=n;$()}};const U=await w.load({definition:k,controller:j});let V;const W=function(){if(V.error){C(V.error)}else{e(V.response)}c.close()};c=new f(P(["CreateDialog",_]),{title:t.getTranslatedText("C_TRANSACTION_HELPER_SAPFE_ACTION_CREATE",b),content:[U],beginButton:{text:t.getTranslatedText("C_TRANSACTION_HELPER_SAPFE_ACTION_CREATE_BUTTON",b),type:"Emphasized",press:async e=>{const t=e.getSource();t.setEnabled(false);n.lock(c);r.bIsCreateDialog=true;try{const e=await Promise.all(Object.keys(F).map(async function(e){const t=await F[e];const n={};n[e]=t;return n}));if(r.beforeCreateCallBack){await D(r.beforeCreateCallBack({contextPath:o&&o.getPath(),createParameters:e}))}const t=p.getObject();const a={};Object.keys(t).forEach(function(e){const n=y.getObject(`${_}/${e}`);if(n&&n.$kind==="NavigationProperty"){return}a[e]=t[e]});const s=o.create(a,true,r.createAtEnd,r.inactive);const i=this.onAfterCreateCompletion(o,s,r);let d=await i;if(!d||d&&d.bKeepDialogOpen!==true){d=d??{};c.setBindingContext(null);d.newContext=s;V={response:d};W()}}catch(e){if(e!==u.Constants.CreationFailed){V={error:e};W()}else{t.setEnabled(true)}}finally{n.unlock(c);l.showMessages()}}},endButton:{text:t.getTranslatedText("C_COMMON_ACTION_PARAMETER_DIALOG_CANCEL",b),press:function(){V={error:u.Constants.CancelActionDialog};W()}},afterClose:function(){var e;(e=c.getBindingContext("internal"))===null||e===void 0?void 0:e.setProperty("isCreateDialogOpen",false);c.destroy();g.destroy()}});L=U===null||U===void 0?void 0:U.getAggregation("form").getAggregation("formContainers")[0].getAggregation("formElements");if(d&&d.addDependent){d.addDependent(c)}H=c.getBeginButton();c.setBindingContext(p);try{await t.setUserDefaults(i,x,p,false,r.createAction,r.data);$();c.getBindingContext("internal").setProperty("isCreateDialogOpen",true);c.open()}catch(e){await l.showMessages();throw e}})};I.onAfterCreateCompletion=function t(n,o,a){let s;const r=new Promise(e=>{s=e});const i=e=>{const t=e.getParameter("context"),a=e.getParameter("success");if(t===o){n.detachCreateCompleted(i,this);s(a)}};const l=()=>{o.created().then(undefined,function(){e.trace("transient creation context deleted")}).catch(function(t){e.trace("transient creation context deletion error",t)})};n.attachCreateCompleted(i,this);return r.then(e=>{if(!e){if(!a.keepTransientContextOnFailed){l();n.resetChanges();n.getModel().resetChanges(n.getUpdateGroupId());throw u.Constants.CreationFailed}return{bKeepDialogOpen:true}}else{return o.created()}})};I._getNewAction=function e(t,n,o,a){let s;if(t&&t.preferredMode&&n.toUpperCase().indexOf("I-ACTION=CREATEWITH")>-1){const e=t.preferredMode[0];s=e.toUpperCase().indexOf("CREATEWITH:")>-1?e.substr(e.lastIndexOf(":")+1):undefined}else if(t&&t.preferredMode&&n.toUpperCase().indexOf("I-ACTION=AUTOCREATEWITH")>-1){const e=t.preferredMode[0];s=e.toUpperCase().indexOf("AUTOCREATEWITH:")>-1?e.substr(e.lastIndexOf(":")+1):undefined}else{s=o&&o.getObject!==undefined?o.getObject(`${a}@com.sap.vocabularies.Session.v1.StickySessionSupported/NewAction`)||o.getObject(`${a}@com.sap.vocabularies.Common.v1.DraftRoot/NewAction`):undefined}return s};I._getSpecificCreateActionDialogLabel=function e(t,n,o,a){const s=function(){if(t&&t.getObject(`${n}/@com.sap.vocabularies.UI.v1.LineItem`)){const e=t.getObject(`${n}/@com.sap.vocabularies.UI.v1.LineItem`).findIndex(function(e){const t=e.Action?e.Action.split("("):undefined;return t?t[0]===o:false});return e>-1?t.getObject(`${n}/@com.sap.vocabularies.UI.v1.LineItem`)[e].Label:undefined}else{return undefined}};return s()||t&&t.getObject(`${n}/${o}@com.sap.vocabularies.Common.v1.Label`)||a&&a.getText("C_TRANSACTION_HELPER_SAPFE_ACTION_CREATE")};return d}();const S=new I;return S},false);
|
|
6
|
+
//# sourceMappingURL=TransactionHelper.js.map
|