@sapui5/sap.fe.core 1.101.0 → 1.103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +66 -30
- package/src/sap/fe/core/AppComponent.ts +68 -51
- package/src/sap/fe/core/AppStateHandler.js +13 -13
- package/src/sap/fe/core/AppStateHandler.ts +18 -18
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +279 -188
- package/src/sap/fe/core/CommonUtils.ts +306 -215
- package/src/sap/fe/core/ExtensionAPI.js +25 -30
- package/src/sap/fe/core/ExtensionAPI.ts +37 -41
- package/src/sap/fe/core/PageController.js +12 -7
- package/src/sap/fe/core/PageController.ts +10 -5
- package/src/sap/fe/core/TemplateComponent.js +6 -6
- package/src/sap/fe/core/TemplateComponent.ts +11 -11
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +351 -229
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +59 -34
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +11 -10
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
- package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +39 -21
- package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
- package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
- package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +21 -24
- package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +48 -43
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +50 -3
- package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
- package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +48 -48
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +56 -67
- package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +73 -37
- package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
- package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
- package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
- package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +92 -89
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
- package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
- package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/fpm/Component.js +2 -2
- package/src/sap/fe/core/fpm/Component.ts +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +15 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +532 -264
- package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +16 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +51 -3
- package/src/sap/fe/core/library.ts +47 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +151 -197
- package/src/sap/fe/core/messagebundle_ar.properties +36 -63
- package/src/sap/fe/core/messagebundle_bg.properties +36 -63
- package/src/sap/fe/core/messagebundle_ca.properties +36 -63
- package/src/sap/fe/core/messagebundle_cs.properties +36 -63
- package/src/sap/fe/core/messagebundle_cy.properties +36 -63
- package/src/sap/fe/core/messagebundle_da.properties +37 -64
- package/src/sap/fe/core/messagebundle_de.properties +36 -63
- package/src/sap/fe/core/messagebundle_el.properties +38 -65
- package/src/sap/fe/core/messagebundle_en.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
- package/src/sap/fe/core/messagebundle_es.properties +36 -63
- package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
- package/src/sap/fe/core/messagebundle_et.properties +36 -63
- package/src/sap/fe/core/messagebundle_fi.properties +36 -63
- package/src/sap/fe/core/messagebundle_fr.properties +39 -66
- package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
- package/src/sap/fe/core/messagebundle_hi.properties +36 -63
- package/src/sap/fe/core/messagebundle_hr.properties +36 -63
- package/src/sap/fe/core/messagebundle_hu.properties +35 -62
- package/src/sap/fe/core/messagebundle_id.properties +37 -64
- package/src/sap/fe/core/messagebundle_it.properties +54 -81
- package/src/sap/fe/core/messagebundle_iw.properties +36 -63
- package/src/sap/fe/core/messagebundle_ja.properties +36 -63
- package/src/sap/fe/core/messagebundle_kk.properties +36 -63
- package/src/sap/fe/core/messagebundle_ko.properties +36 -63
- package/src/sap/fe/core/messagebundle_lt.properties +36 -63
- package/src/sap/fe/core/messagebundle_lv.properties +36 -63
- package/src/sap/fe/core/messagebundle_ms.properties +37 -64
- package/src/sap/fe/core/messagebundle_nl.properties +37 -64
- package/src/sap/fe/core/messagebundle_no.properties +36 -63
- package/src/sap/fe/core/messagebundle_pl.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
- package/src/sap/fe/core/messagebundle_ro.properties +36 -63
- package/src/sap/fe/core/messagebundle_ru.properties +36 -63
- package/src/sap/fe/core/messagebundle_sh.properties +36 -63
- package/src/sap/fe/core/messagebundle_sk.properties +36 -63
- package/src/sap/fe/core/messagebundle_sl.properties +38 -65
- package/src/sap/fe/core/messagebundle_sv.properties +36 -63
- package/src/sap/fe/core/messagebundle_th.properties +36 -63
- package/src/sap/fe/core/messagebundle_tr.properties +36 -63
- package/src/sap/fe/core/messagebundle_uk.properties +37 -64
- package/src/sap/fe/core/messagebundle_vi.properties +37 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
- package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
- package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +63 -60
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
- package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
- package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +24 -18
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +3 -4
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
- package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +12 -11
- package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +79 -56
- package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
- package/src/sap/fe/core/templating/UIFormatters.js +163 -97
- package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/AnnotationHelper.js +0 -331
- package/src/sap/fe/core/AnnotationHelper.ts +0 -321
- package/src/sap/fe/core/RouterProxy.js +0 -938
- package/src/sap/fe/core/TransactionHelper.js +0 -1577
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
- package/src/sap/fe/core/actions/draft.js +0 -665
- package/src/sap/fe/core/actions/messageHandling.js +0 -579
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/actions/sticky.ts +0 -119
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
|
@@ -65,7 +65,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
|
|
|
65
65
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
66
66
|
// @ts-ignore
|
|
67
67
|
delete this._oAppComponent;
|
|
68
|
-
|
|
68
|
+
|
|
69
|
+
if (this._oContainer) {
|
|
70
|
+
this._oContainer.removeEventDelegate(this._fnContainerDelegate);
|
|
71
|
+
}
|
|
69
72
|
};
|
|
70
73
|
|
|
71
74
|
_proto.waitFor = function waitFor(oPromise) {
|
|
@@ -93,7 +96,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
|
|
|
93
96
|
if (!this._bAfterBindingAlreadyApplied) {
|
|
94
97
|
this._bAfterBindingAlreadyApplied = true;
|
|
95
98
|
var aBoundElements = [];
|
|
96
|
-
var
|
|
99
|
+
var aMDCTables = [];
|
|
100
|
+
var aNotBoundMDCCharts = [];
|
|
97
101
|
var iRequested = 0;
|
|
98
102
|
var iReceived = 0;
|
|
99
103
|
|
|
@@ -130,40 +134,73 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
|
|
|
130
134
|
}
|
|
131
135
|
};
|
|
132
136
|
|
|
137
|
+
var fnAttachDataEvents = function (event, oData) {
|
|
138
|
+
var binding = oData.binding ? oData.binding : oData.table.getRowBinding();
|
|
139
|
+
|
|
140
|
+
if (binding) {
|
|
141
|
+
binding.attachDataRequested(fnRequested);
|
|
142
|
+
binding.attachDataReceived(function (dataReceivedEvent) {
|
|
143
|
+
fnReceived(dataReceivedEvent);
|
|
144
|
+
_this3._bSeachTriggered = oData.isSeachTriggered ? !oData.isSeachTriggered : _this3._bSeachTriggered;
|
|
145
|
+
});
|
|
146
|
+
aBoundElements.push(binding);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
133
150
|
var fnSearch = function (oEvent) {
|
|
134
|
-
var
|
|
151
|
+
var aMDCTableLinkedToFilterBar = aMDCTables.filter(function (oElem) {
|
|
135
152
|
if (oEvent.getSource().sId === oElem.getFilter() && oElem.getVisible()) {
|
|
136
153
|
return true;
|
|
137
154
|
}
|
|
138
155
|
|
|
139
156
|
return false;
|
|
140
157
|
});
|
|
158
|
+
var aMDCCharts = aNotBoundMDCCharts.filter(function (oElem) {
|
|
159
|
+
if (oEvent.getSource().sId === oElem.getFilter() && oElem.getVisible()) {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
141
162
|
|
|
142
|
-
|
|
163
|
+
return false;
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
if (aMDCTableLinkedToFilterBar.length > 0 || aMDCCharts.length > 0) {
|
|
143
167
|
_this3._bSeachTriggered = true;
|
|
144
168
|
}
|
|
145
169
|
|
|
146
|
-
|
|
170
|
+
aMDCTableLinkedToFilterBar.forEach(function (oMDCTable) {
|
|
147
171
|
var oRowBinding = oMDCTable.getRowBinding();
|
|
148
172
|
|
|
149
|
-
var fnAttachDataEvents = function () {
|
|
150
|
-
oRowBinding.attachDataRequested(fnRequested);
|
|
151
|
-
oRowBinding.attachDataReceived(function (oEvent) {
|
|
152
|
-
fnReceived(oEvent);
|
|
153
|
-
_this3._bSeachTriggered = false;
|
|
154
|
-
});
|
|
155
|
-
aBoundElements.push(oRowBinding);
|
|
156
|
-
};
|
|
157
|
-
|
|
158
173
|
if (oRowBinding) {
|
|
159
|
-
fnAttachDataEvents(
|
|
174
|
+
fnAttachDataEvents(null, {
|
|
175
|
+
table: oMDCTable,
|
|
176
|
+
isSeachTriggered: true
|
|
177
|
+
});
|
|
160
178
|
} else {
|
|
161
|
-
oMDCTable.attachEventOnce("bindingUpdated",
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}, null);
|
|
179
|
+
oMDCTable.attachEventOnce("bindingUpdated", {
|
|
180
|
+
table: oMDCTable,
|
|
181
|
+
isSeachTriggered: true
|
|
182
|
+
}, fnAttachDataEvents, null);
|
|
165
183
|
}
|
|
166
184
|
});
|
|
185
|
+
aMDCCharts.forEach(function (oMDCChart) {
|
|
186
|
+
oMDCChart.innerChartBoundPromise.then(function () {
|
|
187
|
+
var oBinding = oMDCChart.getControlDelegate().getInnerChart(oMDCChart).getBinding("data");
|
|
188
|
+
|
|
189
|
+
if (oBinding) {
|
|
190
|
+
fnAttachDataEvents(null, {
|
|
191
|
+
binding: oBinding,
|
|
192
|
+
isSeachTriggered: true
|
|
193
|
+
});
|
|
194
|
+
} else {
|
|
195
|
+
oMDCChart.attachEventOnce("bindingUpdated", {
|
|
196
|
+
binding: oBinding,
|
|
197
|
+
isSeachTriggered: true
|
|
198
|
+
}, fnAttachDataEvents, null);
|
|
199
|
+
}
|
|
200
|
+
}).catch(function (oError) {
|
|
201
|
+
Log.error("Cannot find a inner bound chart", oError);
|
|
202
|
+
});
|
|
203
|
+
});
|
|
167
204
|
};
|
|
168
205
|
|
|
169
206
|
if (this.isContextExpected() && oBindingContext === undefined) {
|
|
@@ -179,6 +216,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
|
|
|
179
216
|
oElement.detachEvent("dataRequested", fnRequested);
|
|
180
217
|
oElement.detachEvent("dataReceived", fnReceived);
|
|
181
218
|
oElement.detachEvent("search", fnSearch);
|
|
219
|
+
oElement.detachEvent("bindingUpdated", fnAttachDataEvents);
|
|
182
220
|
});
|
|
183
221
|
_this3._bAfterBindingAlreadyApplied = false;
|
|
184
222
|
aBoundElements = [];
|
|
@@ -192,6 +230,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
|
|
|
192
230
|
}
|
|
193
231
|
|
|
194
232
|
var aTableInitializedPromises = [];
|
|
233
|
+
var aChartInitializedPromises = [];
|
|
195
234
|
|
|
196
235
|
this._oView.findAggregatedObjects(true, function (oElement) {
|
|
197
236
|
var oObjectBinding = oElement.getObjectBinding();
|
|
@@ -222,18 +261,38 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
|
|
|
222
261
|
_this3.bTablesLoaded = false; // access binding only after table is bound
|
|
223
262
|
|
|
224
263
|
aTableInitializedPromises.push(oElement.initialized().then(function () {
|
|
264
|
+
aMDCTables.push(oElement);
|
|
225
265
|
var oRowBinding = oElement.getRowBinding();
|
|
226
266
|
|
|
227
267
|
if (oRowBinding) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
268
|
+
fnAttachDataEvents(null, {
|
|
269
|
+
table: oElement
|
|
270
|
+
});
|
|
231
271
|
} else {
|
|
232
|
-
|
|
272
|
+
oElement.attachEventOnce("bindingUpdated", {
|
|
273
|
+
table: oElement
|
|
274
|
+
}, fnAttachDataEvents);
|
|
233
275
|
}
|
|
234
276
|
}).catch(function (oError) {
|
|
235
277
|
Log.error("Cannot find a bound table", oError);
|
|
236
278
|
}));
|
|
279
|
+
} else if (oElement.isA("sap.ui.mdc.Chart")) {
|
|
280
|
+
_this3.bChartsLoaded = false; // access binding only after table is bound
|
|
281
|
+
|
|
282
|
+
aChartInitializedPromises.push(oElement.initialized().then(function () {
|
|
283
|
+
var oInnerChart = oElement.getControlDelegate().getInnerChart(oElement);
|
|
284
|
+
var oBinding = oInnerChart && oInnerChart.getBinding("data");
|
|
285
|
+
|
|
286
|
+
if (oBinding) {
|
|
287
|
+
oBinding.attachDataRequested(fnRequested);
|
|
288
|
+
oBinding.attachDataReceived(fnReceived);
|
|
289
|
+
aBoundElements.push(oBinding);
|
|
290
|
+
} else {
|
|
291
|
+
aNotBoundMDCCharts.push(oElement);
|
|
292
|
+
}
|
|
293
|
+
}).catch(function (oError) {
|
|
294
|
+
Log.error("Cannot find a bound chart", oError);
|
|
295
|
+
}));
|
|
237
296
|
} else if (oElement.isA("sap.fe.core.controls.FilterBar")) {
|
|
238
297
|
oElement.attachEvent("search", fnSearch);
|
|
239
298
|
aBoundElements.push(oElement);
|
|
@@ -252,6 +311,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
|
|
|
252
311
|
_this3.checkPageReadyDebounced();
|
|
253
312
|
});
|
|
254
313
|
}
|
|
314
|
+
|
|
315
|
+
if (aChartInitializedPromises.length > 0) {
|
|
316
|
+
Promise.all(aChartInitializedPromises).then(function () {
|
|
317
|
+
_this3.bChartsLoaded = true;
|
|
318
|
+
|
|
319
|
+
_this3.checkPageReadyDebounced();
|
|
320
|
+
}).catch(function (oError) {
|
|
321
|
+
Log.info("There was an error with one or multiple charts", oError);
|
|
322
|
+
_this3.bChartsLoaded = true;
|
|
323
|
+
|
|
324
|
+
_this3.checkPageReadyDebounced();
|
|
325
|
+
});
|
|
326
|
+
}
|
|
255
327
|
}
|
|
256
328
|
};
|
|
257
329
|
|
|
@@ -355,7 +427,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
|
|
|
355
427
|
}
|
|
356
428
|
};
|
|
357
429
|
|
|
358
|
-
if (this.bShown && this.bDataReceived !== false && this.bTablesLoaded !== false && (!this.isContextExpected() || this.bHasContext) // Either no context is expected or there is one
|
|
430
|
+
if (this.bShown && this.bDataReceived !== false && this.bTablesLoaded !== false && this.bChartsLoaded !== false && (!this.isContextExpected() || this.bHasContext) // Either no context is expected or there is one
|
|
359
431
|
) {
|
|
360
432
|
if (this.bDataReceived === true && !bFromNav && !this._bWaitingForRefresh && Core.getUIDirty()) {
|
|
361
433
|
// If we requested data we get notified as soon as the data arrived, so before the next rendering tick
|
|
@@ -381,4 +453,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/services/TemplatedViewServiceFactory
|
|
|
381
453
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "waitFor", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "waitFor"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatched", [_dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatched"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatchedFinished", [_dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatchedFinished"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isPageReady", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "isPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "waitPageReady", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "waitPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "attachEventOnce", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "attachEventOnce"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "attachEvent", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "attachEvent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "detachEvent", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "detachEvent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isContextExpected", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "isContextExpected"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "checkPageReadyDebounced", [_dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "checkPageReadyDebounced"), _class2.prototype)), _class2)) || _class);
|
|
382
454
|
return PageReadyControllerExtension;
|
|
383
455
|
}, false);
|
|
384
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlBhZ2VSZWFkeS50cyJdLCJuYW1lcyI6WyJQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uIiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRob2RPdmVycmlkZSIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwicHJpdmF0ZUV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJvbkluaXQiLCJfbmJXYWl0cyIsIl9iU2VhY2hUcmlnZ2VyZWQiLCJfb0V2ZW50UHJvdmlkZXIiLCJFdmVudFByb3ZpZGVyIiwiX29WaWV3IiwiYmFzZSIsImdldFZpZXciLCJfb0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29QYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJhdHRhY2hDb250YWluZXJEZWZpbmVkIiwib0V2ZW50IiwicmVnaXN0ZXJDb250YWluZXIiLCJnZXRQYXJhbWV0ZXIiLCJvUm9vdENvbnRyb2xDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwib1BsYWNlaG9sZGVyIiwiZ2V0UGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRGVidWdFbmFibGVkIiwiYXR0YWNoRXZlbnQiLCJnZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMiLCJpUGFnZVJlYWR5RXZlbnRUaW1lc3RhbXAiLCJEYXRlIiwibm93IiwiaUhlcm9lc0JhdGNoUmVjZWl2ZWRFdmVudFRpbWVzdGFtcCIsIm9uRXhpdCIsIl9vQ29udGFpbmVyIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIl9mbkNvbnRhaW5lckRlbGVnYXRlIiwid2FpdEZvciIsIm9Qcm9taXNlIiwiZmluYWxseSIsInNldFRpbWVvdXQiLCJjYXRjaCIsIm9uUm91dGVNYXRjaGVkIiwiX2JJc1BhZ2VSZWFkeSIsIm9uUm91dGVNYXRjaGVkRmluaXNoZWQiLCJjaGVja1BhZ2VSZWFkeURlYm91bmNlZCIsIm9uQWZ0ZXJCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwiX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCIsImFCb3VuZEVsZW1lbnRzIiwiYU5vdEJvdW5kTURDVGFibGVzIiwiaVJlcXVlc3RlZCIsImlSZWNlaXZlZCIsImZuUmVxdWVzdGVkIiwiZ2V0U291cmNlIiwiZGV0YWNoRGF0YVJlcXVlc3RlZCIsImJEYXRhUmVjZWl2ZWQiLCJmblJlY2VpdmVkIiwic0dyb3VwSWQiLCJmaXJlRXZlbnQiLCJkZXRhY2hEYXRhUmVjZWl2ZWQiLCJmblNlYXJjaCIsImFNRENUYWJsZXMiLCJmaWx0ZXIiLCJvRWxlbSIsInNJZCIsImdldEZpbHRlciIsImdldFZpc2libGUiLCJsZW5ndGgiLCJmb3JFYWNoIiwib01EQ1RhYmxlIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZm5BdHRhY2hEYXRhRXZlbnRzIiwiYXR0YWNoRGF0YVJlcXVlc3RlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInB1c2giLCJhdHRhY2hFdmVudE9uY2UiLCJpc0NvbnRleHRFeHBlY3RlZCIsInVuZGVmaW5lZCIsImJIYXNDb250ZXh0Iiwib0VsZW1lbnQiLCJkZXRhY2hFdmVudCIsIm1haW5PYmplY3RCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFUYWJsZUluaXRpYWxpemVkUHJvbWlzZXMiLCJmaW5kQWdncmVnYXRlZE9iamVjdHMiLCJvT2JqZWN0QmluZGluZyIsImdldE9iamVjdEJpbmRpbmciLCJhQmluZGluZ0tleXMiLCJPYmplY3QiLCJrZXlzIiwibUJpbmRpbmdJbmZvcyIsInNQcm9wZXJ0eU5hbWUiLCJvTGlzdEJpbmRpbmciLCJiaW5kaW5nIiwiaXNBIiwiYlRhYmxlc0xvYWRlZCIsImluaXRpYWxpemVkIiwidGhlbiIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiUHJvbWlzZSIsImFsbCIsImluZm8iLCJpc1BhZ2VSZWFkeSIsIndhaXRQYWdlUmVhZHkiLCJyZXNvbHZlIiwic0V2ZW50SWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJvQ29udGFpbmVyIiwib25CZWZvcmVTaG93IiwiYlNob3duIiwib25CZWZvcmVIaWRlIiwib25BZnRlclNob3ciLCJfY2hlY2tQYWdlUmVhZHkiLCJhZGRFdmVudERlbGVnYXRlIiwicGFnZVJlYWR5VGltZXIiLCJjbGVhclRpbWVvdXQiLCJiRnJvbU5hdiIsImZuVUlVcGRhdGVkIiwiQ29yZSIsImdldFVJRGlydHkiLCJfYldhaXRpbmdGb3JSZWZyZXNoIiwiY2hlY2tVSVVwZGF0ZWQiLCJUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkiLCJnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlIiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQWVNQSw0QixXQURMQyxjQUFjLENBQUMsNENBQUQsQyxVQW1CYkMsY0FBYyxFLFVBcUNkQSxjQUFjLEUsVUFRZEMsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQVdkRixjQUFjLENBQUMsVUFBRCxDLFVBSWRBLGNBQWMsQ0FBQyxVQUFELEMsVUFLZEEsY0FBYyxDQUFDLFVBQUQsQyxVQStKZEMsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQUtkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBa0JkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBS2RELGVBQWUsRSxXQUNmQyxjQUFjLEUsV0FLZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQXdCZEMsZ0JBQWdCLEUsV0FDaEJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLE9BQW5CLEMsV0FLVkwsZUFBZSxFOzs7Ozs7Ozs7V0FwU1RNLE0sR0FEUCxrQkFDZ0I7QUFBQTs7QUFDZixXQUFLQyxRQUFMLEdBQWdCLENBQWhCO0FBQ0EsV0FBS0MsZ0JBQUwsR0FBd0IsS0FBeEI7QUFDQSxXQUFLQyxlQUFMLEdBQXVCLEtBQUtBLGVBQUwsR0FBdUIsS0FBS0EsZUFBNUIsR0FB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QXVYNUJ4SSw0QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCIuLi9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBtZXRob2RPdmVycmlkZSwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlBhZ2VSZWFkeVwiKVxuY2xhc3MgUGFnZVJlYWR5Q29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIF9vRXZlbnRQcm92aWRlciE6IEV2ZW50UHJvdmlkZXI7XG5cdHByaXZhdGUgX29WaWV3OiBhbnk7XG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cdHByaXZhdGUgX29QYWdlQ29tcG9uZW50ITogYW55O1xuXHRwcml2YXRlIF9vQ29udGFpbmVyITogYW55O1xuXHRwcml2YXRlIF9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQhOiBib29sZWFuO1xuXHRwcml2YXRlIF9mbkNvbnRhaW5lckRlbGVnYXRlOiBhbnk7XG5cdHByaXZhdGUgX25iV2FpdHMhOiBudW1iZXI7XG5cdHByaXZhdGUgX2JTZWFjaFRyaWdnZXJlZCE6IGJvb2xlYW47XG5cdHByaXZhdGUgX2JJc1BhZ2VSZWFkeSE6IGJvb2xlYW47XG5cdHByaXZhdGUgX2JXYWl0aW5nRm9yUmVmcmVzaCE6IGJvb2xlYW47XG5cdHByaXZhdGUgYlNob3duITogYm9vbGVhbjtcblx0cHJpdmF0ZSBiSGFzQ29udGV4dCE6IGJvb2xlYW47XG5cdHByaXZhdGUgYkRhdGFSZWNlaXZlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBiVGFibGVzTG9hZGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIHBhZ2VSZWFkeVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25Jbml0KCkge1xuXHRcdHRoaXMuX25iV2FpdHMgPSAwO1xuXHRcdHRoaXMuX2JTZWFjaFRyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMuX29FdmVudFByb3ZpZGVyID0gdGhpcy5fb0V2ZW50UHJvdmlkZXIgPyB0aGlzLl9vRXZlbnRQcm92aWRlciA6IG5ldyBFdmVudFByb3ZpZGVyKCk7XG5cdFx0dGhpcy5fb1ZpZXcgPSAodGhpcyBhcyBhbnkpLmJhc2UuZ2V0VmlldygpO1xuXHRcdHRoaXMuX29BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fb1ZpZXcpO1xuXHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuX29WaWV3KTtcblxuXHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCAmJiB0aGlzLl9vUGFnZUNvbXBvbmVudC5hdHRhY2hDb250YWluZXJEZWZpbmVkKSB7XG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5hdHRhY2hDb250YWluZXJEZWZpbmVkKChvRXZlbnQ6IEV2ZW50KSA9PiB0aGlzLnJlZ2lzdGVyQ29udGFpbmVyKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb250YWluZXJcIikpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZWdpc3RlckNvbnRhaW5lcih0aGlzLl9vVmlldyk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1Jvb3RDb250cm9sQ29udHJvbGxlciA9ICh0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkgYXMgVmlldykuZ2V0Q29udHJvbGxlcigpIGFzIGFueTtcblx0XHRjb25zdCBvUGxhY2Vob2xkZXIgPSBvUm9vdENvbnRyb2xDb250cm9sbGVyLmdldFBsYWNlaG9sZGVyICYmIG9Sb290Q29udHJvbENvbnRyb2xsZXIuZ2V0UGxhY2Vob2xkZXIoKTtcblx0XHRpZiAob1BsYWNlaG9sZGVyPy5pc1BsYWNlaG9sZGVyRGVidWdFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuYXR0YWNoRXZlbnQoXG5cdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRvUGxhY2Vob2xkZXIuZ2V0UGxhY2Vob2xkZXJEZWJ1Z1N0YXRzKCkuaVBhZ2VSZWFkeUV2ZW50VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblx0XHRcdHRoaXMuYXR0YWNoRXZlbnQoXG5cdFx0XHRcdFwiaGVyb2VzQmF0Y2hSZWNlaXZlZFwiLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0b1BsYWNlaG9sZGVyLmdldFBsYWNlaG9sZGVyRGVidWdTdGF0cygpLmlIZXJvZXNCYXRjaFJlY2VpdmVkRXZlbnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkV4aXQoKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb0FwcENvbXBvbmVudDtcblx0XHR0aGlzLl9vQ29udGFpbmVyICYmIHRoaXMuX29Db250YWluZXIucmVtb3ZlRXZlbnREZWxlZ2F0ZSh0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlKTtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgd2FpdEZvcihvUHJvbWlzZTogYW55KSB7XG5cdFx0dGhpcy5fbmJXYWl0cysrO1xuXHRcdG9Qcm9taXNlXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX25iV2FpdHMtLTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKG51bGwpO1xuXHR9XG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdG9uUm91dGVNYXRjaGVkKCkge1xuXHRcdHRoaXMuX2JJc1BhZ2VSZWFkeSA9IGZhbHNlO1xuXHR9XG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdG9uUm91dGVNYXRjaGVkRmluaXNoZWQoKSB7XG5cdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKFwiX3JvdXRpbmdcIilcblx0b25BZnRlckJpbmRpbmcob0JpbmRpbmdDb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0aWYgKCF0aGlzLl9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQpIHtcblx0XHRcdHRoaXMuX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCA9IHRydWU7XG5cdFx0XHRsZXQgYUJvdW5kRWxlbWVudHM6IGFueVtdID0gW107XG5cdFx0XHRjb25zdCBhTm90Qm91bmRNRENUYWJsZXM6IGFueVtdID0gW107XG5cdFx0XHRsZXQgaVJlcXVlc3RlZCA9IDA7XG5cdFx0XHRsZXQgaVJlY2VpdmVkID0gMDtcblx0XHRcdGNvbnN0IGZuUmVxdWVzdGVkID0gKG9FdmVudDogRXZlbnQpID0+IHtcblx0XHRcdFx0KG9FdmVudC5nZXRTb3VyY2UoKSBhcyBhbnkpLmRldGFjaERhdGFSZXF1ZXN0ZWQoZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRpUmVxdWVzdGVkKys7XG5cdFx0XHRcdHRoaXMuYkRhdGFSZWNlaXZlZCA9IGZhbHNlO1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZuUmVjZWl2ZWQgPSAob0V2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0XHRzd2l0Y2ggKChvRXZlbnQuZ2V0U291cmNlKCkgYXMgYW55KS5zR3JvdXBJZCkge1xuXHRcdFx0XHRcdGNhc2UgXCIkYXV0by5Xb3JrZXJzXCI6XG5cdFx0XHRcdFx0XHR0aGlzLl9vRXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJ3b3JrZXJzQmF0Y2hSZWNlaXZlZFwiKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCIkYXV0by5IZXJvZXNcIjpcblx0XHRcdFx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcImhlcm9lc0JhdGNoUmVjZWl2ZWRcIik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdChvRXZlbnQuZ2V0U291cmNlKCkgYXMgYW55KS5kZXRhY2hEYXRhUmVjZWl2ZWQoZm5SZWNlaXZlZCk7XG5cdFx0XHRcdGlSZWNlaXZlZCsrO1xuXHRcdFx0XHRpZiAoaVJlY2VpdmVkID49IGlSZXF1ZXN0ZWQgJiYgaVJlcXVlc3RlZCAhPT0gMCkge1xuXHRcdFx0XHRcdGlSZXF1ZXN0ZWQgPSAwO1xuXHRcdFx0XHRcdGlSZWNlaXZlZCA9IDA7XG5cdFx0XHRcdFx0dGhpcy5iRGF0YVJlY2VpdmVkID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLmNoZWNrUGFnZVJlYWR5RGVib3VuY2VkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBmblNlYXJjaCA9IChvRXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFNRENUYWJsZXMgPSBhTm90Qm91bmRNRENUYWJsZXMuZmlsdGVyKChvRWxlbSkgPT4ge1xuXHRcdFx0XHRcdGlmICgob0V2ZW50LmdldFNvdXJjZSgpIGFzIGFueSkuc0lkID09PSBvRWxlbS5nZXRGaWx0ZXIoKSAmJiBvRWxlbS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYU1EQ1RhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fYlNlYWNoVHJpZ2dlcmVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhTURDVGFibGVzLmZvckVhY2goKG9NRENUYWJsZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0bGV0IG9Sb3dCaW5kaW5nID0gb01EQ1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRjb25zdCBmbkF0dGFjaERhdGFFdmVudHMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRvUm93QmluZGluZy5hdHRhY2hEYXRhUmVxdWVzdGVkKGZuUmVxdWVzdGVkKTtcblx0XHRcdFx0XHRcdG9Sb3dCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZCgob0V2ZW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0Zm5SZWNlaXZlZChvRXZlbnQpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9iU2VhY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YUJvdW5kRWxlbWVudHMucHVzaChvUm93QmluZGluZyk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdGZuQXR0YWNoRGF0YUV2ZW50cygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvTURDVGFibGUuYXR0YWNoRXZlbnRPbmNlKFxuXHRcdFx0XHRcdFx0XHRcImJpbmRpbmdVcGRhdGVkXCIsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRvUm93QmluZGluZyA9IG9NRENUYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm5BdHRhY2hEYXRhRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdG51bGxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cdFx0XHRpZiAodGhpcy5pc0NvbnRleHRFeHBlY3RlZCgpICYmIG9CaW5kaW5nQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIEZvcmNlIHRvIG1lbnRpb24gd2UgYXJlIGV4cGVjdGluZyBkYXRhXG5cdFx0XHRcdHRoaXMuYkhhc0NvbnRleHQgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5iSGFzQ29udGV4dCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYXR0YWNoRXZlbnRPbmNlKFxuXHRcdFx0XHRcInBhZ2VSZWFkeVwiLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0YUJvdW5kRWxlbWVudHMuZm9yRWFjaCgob0VsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJkYXRhUmVxdWVzdGVkXCIsIGZuUmVxdWVzdGVkKTtcblx0XHRcdFx0XHRcdG9FbGVtZW50LmRldGFjaEV2ZW50KFwiZGF0YVJlY2VpdmVkXCIsIGZuUmVjZWl2ZWQpO1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJzZWFyY2hcIiwgZm5TZWFyY2gpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRoaXMuX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGFCb3VuZEVsZW1lbnRzID0gW107XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG1haW5PYmplY3RCaW5kaW5nID0gKG9CaW5kaW5nQ29udGV4dCBhcyBhbnkpLmdldEJpbmRpbmcoKTtcblx0XHRcdFx0bWFpbk9iamVjdEJpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdG1haW5PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0YUJvdW5kRWxlbWVudHMucHVzaChtYWluT2JqZWN0QmluZGluZyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGFUYWJsZUluaXRpYWxpemVkUHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW107XG5cdFx0XHR0aGlzLl9vVmlldy5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSwgKG9FbGVtZW50OiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb09iamVjdEJpbmRpbmcgPSBvRWxlbWVudC5nZXRPYmplY3RCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvT2JqZWN0QmluZGluZykge1xuXHRcdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIGFsbCBvYmplY3QgYmluZGluZyAobW9zdGx5IHVzZWQgb24gb2JqZWN0IHBhZ2VzKVxuXHRcdFx0XHRcdG9PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZXF1ZXN0ZWQoZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRcdG9PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9PYmplY3RCaW5kaW5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBhQmluZGluZ0tleXMgPSBPYmplY3Qua2V5cyhvRWxlbWVudC5tQmluZGluZ0luZm9zKTtcblx0XHRcdFx0XHRpZiAoYUJpbmRpbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFCaW5kaW5nS2V5cy5mb3JFYWNoKChzUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9FbGVtZW50Lm1CaW5kaW5nSW5mb3Nbc1Byb3BlcnR5TmFtZV0uYmluZGluZztcblx0XHRcdFx0XHRcdFx0Ly8gUmVnaXN0ZXIgb24gYWxsIGxpc3QgYmluZGluZywgZ29vZCBmb3IgYmFzaWMgdGFibGVzLCBwcm9ibGVtYXRpYyBmb3IgTURDLCBzZWUgYWJvdmVcblx0XHRcdFx0XHRcdFx0aWYgKG9MaXN0QmluZGluZyAmJiBvTGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRvTGlzdEJpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdFx0XHRcdFx0b0xpc3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9MaXN0QmluZGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUaGlzIGlzIGRpcnR5IGJ1dCBNREMgVGFibGUgaGFzIGEgd2VpcmQgbG9hZGluZyBsaWZlY3ljbGVcblx0XHRcdFx0aWYgKG9FbGVtZW50LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHR0aGlzLmJUYWJsZXNMb2FkZWQgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFx0YVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0b0VsZW1lbnRcblx0XHRcdFx0XHRcdFx0LmluaXRpYWxpemVkKClcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb0VsZW1lbnQuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1Jvd0JpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRvUm93QmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5SZWNlaXZlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9Sb3dCaW5kaW5nKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0YU5vdEJvdW5kTURDVGFibGVzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IEVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGZpbmQgYSBib3VuZCB0YWJsZVwiLCBvRXJyb3IgYXMgYW55KTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9FbGVtZW50LmlzQShcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZpbHRlckJhclwiKSkge1xuXHRcdFx0XHRcdG9FbGVtZW50LmF0dGFjaEV2ZW50KFwic2VhcmNoXCIsIGZuU2VhcmNoKTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFByb21pc2UuYWxsKGFUYWJsZUluaXRpYWxpemVkUHJvbWlzZXMpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgob0Vycm9yKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuaW5mbyhcIlRoZXJlIHdhcyBhbiBlcnJvciB3aXRoIG9uZSBvciBtdWx0aXBsZSB0YWJsZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGlzUGFnZVJlYWR5KCkge1xuXHRcdHJldHVybiB0aGlzLl9iSXNQYWdlUmVhZHk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHdhaXRQYWdlUmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc1BhZ2VSZWFkeSgpKSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuYXR0YWNoRXZlbnRPbmNlKFxuXHRcdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50T25jZShzRXZlbnRJZDogc3RyaW5nLCBvRGF0YTogYW55LCBmbkZ1bmN0aW9uPzogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnRPbmNlKHNFdmVudElkLCBvRGF0YSwgZm5GdW5jdGlvbiBhcyBGdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50KHNFdmVudElkOiBzdHJpbmcsIG9EYXRhOiBhbnksIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI6IGFueSkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoc0V2ZW50SWQsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgZGV0YWNoRXZlbnQoc0V2ZW50SWQ6IHN0cmluZywgZm5GdW5jdGlvbjogRnVuY3Rpb24pIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG5cdFx0cmV0dXJuIHRoaXMuX29FdmVudFByb3ZpZGVyLmRldGFjaEV2ZW50KHNFdmVudElkLCBmbkZ1bmN0aW9uKTtcblx0fVxuXHRwcml2YXRlIHJlZ2lzdGVyQ29udGFpbmVyKG9Db250YWluZXI6IE1hbmFnZWRPYmplY3QpIHtcblx0XHR0aGlzLl9vQ29udGFpbmVyID0gb0NvbnRhaW5lcjtcblx0XHR0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlID0ge1xuXHRcdFx0b25CZWZvcmVTaG93OiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYlNob3duID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuX2JJc1BhZ2VSZWFkeSA9IGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdG9uQmVmb3JlSGlkZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRvbkFmdGVyU2hvdzogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX2NoZWNrUGFnZVJlYWR5KHRydWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5fb0NvbnRhaW5lci5hZGRFdmVudERlbGVnYXRlKHRoaXMuX2ZuQ29udGFpbmVyRGVsZWdhdGUpO1xuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRwdWJsaWMgaXNDb250ZXh0RXhwZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBjaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpIHtcblx0XHRpZiAodGhpcy5wYWdlUmVhZHlUaW1lcikge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMucGFnZVJlYWR5VGltZXIpO1xuXHRcdH1cblx0XHR0aGlzLnBhZ2VSZWFkeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9jaGVja1BhZ2VSZWFkeSgpO1xuXHRcdH0sIDIwMCk7XG5cdH1cblxuXHRwdWJsaWMgX2NoZWNrUGFnZVJlYWR5KGJGcm9tTmF2OiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRjb25zdCBmblVJVXBkYXRlZCA9ICgpID0+IHtcblx0XHRcdC8vIFdhaXQgdW50aWwgdGhlIFVJIGlzIG5vIGxvbmdlciBkaXJ0eVxuXHRcdFx0aWYgKCFDb3JlLmdldFVJRGlydHkoKSkge1xuXHRcdFx0XHQoQ29yZSBhcyBDb3JlRXgpLmRldGFjaEV2ZW50KFwiVUlVcGRhdGVkXCIsIGZuVUlVcGRhdGVkKTtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX2NoZWNrUGFnZVJlYWR5KCk7XG5cdFx0XHRcdH0sIDIwKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gSW4gY2FzZSBVSVVwZGF0ZSBkb2VzIG5vdCBnZXQgY2FsbGVkLCBjaGVjayBpZiBVSSBpcyBub3QgZGlydHkgYW5kIHRoZW4gY2FsbCBfY2hlY2tQYWdlUmVhZHlcblx0XHRjb25zdCBjaGVja1VJVXBkYXRlZCA9ICgpID0+IHtcblx0XHRcdGlmIChDb3JlLmdldFVJRGlydHkoKSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdChDb3JlIGFzIENvcmVFeCkuZGV0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHR0aGlzLl9jaGVja1BhZ2VSZWFkeSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmJTaG93biAmJlxuXHRcdFx0dGhpcy5iRGF0YVJlY2VpdmVkICE9PSBmYWxzZSAmJlxuXHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkICE9PSBmYWxzZSAmJlxuXHRcdFx0KCF0aGlzLmlzQ29udGV4dEV4cGVjdGVkKCkgfHwgdGhpcy5iSGFzQ29udGV4dCkgLy8gRWl0aGVyIG5vIGNvbnRleHQgaXMgZXhwZWN0ZWQgb3IgdGhlcmUgaXMgb25lXG5cdFx0KSB7XG5cdFx0XHRpZiAodGhpcy5iRGF0YVJlY2VpdmVkID09PSB0cnVlICYmICFiRnJvbU5hdiAmJiAhdGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoICYmIENvcmUuZ2V0VUlEaXJ0eSgpKSB7XG5cdFx0XHRcdC8vIElmIHdlIHJlcXVlc3RlZCBkYXRhIHdlIGdldCBub3RpZmllZCBhcyBzb29uIGFzIHRoZSBkYXRhIGFycml2ZWQsIHNvIGJlZm9yZSB0aGUgbmV4dCByZW5kZXJpbmcgdGlja1xuXHRcdFx0XHR0aGlzLmJEYXRhUmVjZWl2ZWQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHRoaXMuX2JXYWl0aW5nRm9yUmVmcmVzaCA9IHRydWU7XG5cdFx0XHRcdChDb3JlIGFzIENvcmVFeCkuYXR0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2ggJiYgQ29yZS5nZXRVSURpcnR5KCkpIHx8XG5cdFx0XHRcdHRoaXMuX25iV2FpdHMgIT09IDAgfHxcblx0XHRcdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUoKSA+IDAgfHxcblx0XHRcdFx0dGhpcy5fYlNlYWNoVHJpZ2dlcmVkXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gdHJ1ZTtcblx0XHRcdFx0KENvcmUgYXMgQ29yZUV4KS5hdHRhY2hFdmVudChcIlVJVXBkYXRlZFwiLCBmblVJVXBkYXRlZCk7XG5cdFx0XHRcdHNldFRpbWVvdXQoY2hlY2tVSVVwZGF0ZWQsIDUwMCk7XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0Ly8gSW4gdGhlIGNhc2Ugd2UncmUgbm90IHdhaXRpbmcgZm9yIGFueSBkYXRhIChuYXZpZ2F0aW5nIGJhY2sgdG8gYSBwYWdlIHdlIGFscmVhZHkgaGF2ZSBsb2FkZWQpXG5cdFx0XHRcdC8vIGp1c3Qgd2FpdCBmb3IgYSBmcmFtZSB0byBmaXJlIHRoZSBldmVudC5cblx0XHRcdFx0dGhpcy5fYklzUGFnZVJlYWR5ID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicGFnZVJlYWR5XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl19
|
|
456
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlBhZ2VSZWFkeS50cyJdLCJuYW1lcyI6WyJQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uIiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRob2RPdmVycmlkZSIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwicHJpdmF0ZUV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJvbkluaXQiLCJfbmJXYWl0cyIsIl9iU2VhY2hUcmlnZ2VyZWQiLCJfb0V2ZW50UHJvdmlkZXIiLCJFdmVudFByb3ZpZGVyIiwiX29WaWV3IiwiYmFzZSIsImdldFZpZXciLCJfb0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29QYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJhdHRhY2hDb250YWluZXJEZWZpbmVkIiwib0V2ZW50IiwicmVnaXN0ZXJDb250YWluZXIiLCJnZXRQYXJhbWV0ZXIiLCJvUm9vdENvbnRyb2xDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwib1BsYWNlaG9sZGVyIiwiZ2V0UGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRGVidWdFbmFibGVkIiwiYXR0YWNoRXZlbnQiLCJnZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMiLCJpUGFnZVJlYWR5RXZlbnRUaW1lc3RhbXAiLCJEYXRlIiwibm93IiwiaUhlcm9lc0JhdGNoUmVjZWl2ZWRFdmVudFRpbWVzdGFtcCIsIm9uRXhpdCIsIl9vQ29udGFpbmVyIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIl9mbkNvbnRhaW5lckRlbGVnYXRlIiwid2FpdEZvciIsIm9Qcm9taXNlIiwiZmluYWxseSIsInNldFRpbWVvdXQiLCJjYXRjaCIsIm9uUm91dGVNYXRjaGVkIiwiX2JJc1BhZ2VSZWFkeSIsIm9uUm91dGVNYXRjaGVkRmluaXNoZWQiLCJjaGVja1BhZ2VSZWFkeURlYm91bmNlZCIsIm9uQWZ0ZXJCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwiX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCIsImFCb3VuZEVsZW1lbnRzIiwiYU1EQ1RhYmxlcyIsImFOb3RCb3VuZE1EQ0NoYXJ0cyIsImlSZXF1ZXN0ZWQiLCJpUmVjZWl2ZWQiLCJmblJlcXVlc3RlZCIsImdldFNvdXJjZSIsImRldGFjaERhdGFSZXF1ZXN0ZWQiLCJiRGF0YVJlY2VpdmVkIiwiZm5SZWNlaXZlZCIsInNHcm91cElkIiwiZmlyZUV2ZW50IiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiZm5BdHRhY2hEYXRhRXZlbnRzIiwiZXZlbnQiLCJvRGF0YSIsImJpbmRpbmciLCJ0YWJsZSIsImdldFJvd0JpbmRpbmciLCJhdHRhY2hEYXRhUmVxdWVzdGVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiZGF0YVJlY2VpdmVkRXZlbnQiLCJpc1NlYWNoVHJpZ2dlcmVkIiwicHVzaCIsImZuU2VhcmNoIiwiYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIiLCJmaWx0ZXIiLCJvRWxlbSIsInNJZCIsImdldEZpbHRlciIsImdldFZpc2libGUiLCJhTURDQ2hhcnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIm9NRENUYWJsZSIsIm9Sb3dCaW5kaW5nIiwiYXR0YWNoRXZlbnRPbmNlIiwib01EQ0NoYXJ0IiwiaW5uZXJDaGFydEJvdW5kUHJvbWlzZSIsInRoZW4iLCJvQmluZGluZyIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldElubmVyQ2hhcnQiLCJnZXRCaW5kaW5nIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJpc0NvbnRleHRFeHBlY3RlZCIsInVuZGVmaW5lZCIsImJIYXNDb250ZXh0Iiwib0VsZW1lbnQiLCJkZXRhY2hFdmVudCIsIm1haW5PYmplY3RCaW5kaW5nIiwiYVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcyIsImFDaGFydEluaXRpYWxpemVkUHJvbWlzZXMiLCJmaW5kQWdncmVnYXRlZE9iamVjdHMiLCJvT2JqZWN0QmluZGluZyIsImdldE9iamVjdEJpbmRpbmciLCJhQmluZGluZ0tleXMiLCJPYmplY3QiLCJrZXlzIiwibUJpbmRpbmdJbmZvcyIsInNQcm9wZXJ0eU5hbWUiLCJvTGlzdEJpbmRpbmciLCJpc0EiLCJiVGFibGVzTG9hZGVkIiwiaW5pdGlhbGl6ZWQiLCJiQ2hhcnRzTG9hZGVkIiwib0lubmVyQ2hhcnQiLCJQcm9taXNlIiwiYWxsIiwiaW5mbyIsImlzUGFnZVJlYWR5Iiwid2FpdFBhZ2VSZWFkeSIsInJlc29sdmUiLCJzRXZlbnRJZCIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJvQ29udGFpbmVyIiwib25CZWZvcmVTaG93IiwiYlNob3duIiwib25CZWZvcmVIaWRlIiwib25BZnRlclNob3ciLCJfY2hlY2tQYWdlUmVhZHkiLCJhZGRFdmVudERlbGVnYXRlIiwicGFnZVJlYWR5VGltZXIiLCJjbGVhclRpbWVvdXQiLCJiRnJvbU5hdiIsImZuVUlVcGRhdGVkIiwiQ29yZSIsImdldFVJRGlydHkiLCJfYldhaXRpbmdGb3JSZWZyZXNoIiwiY2hlY2tVSVVwZGF0ZWQiLCJUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkiLCJnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlIiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQWVNQSw0QixXQURMQyxjQUFjLENBQUMsNENBQUQsQyxVQW9CYkMsY0FBYyxFLFVBcUNkQSxjQUFjLEUsVUFVZEMsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQVdkRixjQUFjLENBQUMsVUFBRCxDLFVBSWRBLGNBQWMsQ0FBQyxVQUFELEMsVUFLZEEsY0FBYyxDQUFDLFVBQUQsQyxVQXVOZEMsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQUtkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBa0JkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBS2RELGVBQWUsRSxXQUNmQyxjQUFjLEUs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c291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwiLi4vaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuUGFnZVJlYWR5XCIpXG5jbGFzcyBQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgX29FdmVudFByb3ZpZGVyITogRXZlbnRQcm92aWRlcjtcblx0cHJpdmF0ZSBfb1ZpZXc6IGFueTtcblx0cHJpdmF0ZSBfb0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblx0cHJpdmF0ZSBfb1BhZ2VDb21wb25lbnQhOiBhbnk7XG5cdHByaXZhdGUgX29Db250YWluZXIhOiBhbnk7XG5cdHByaXZhdGUgX2JBZnRlckJpbmRpbmdBbHJlYWR5QXBwbGllZCE6IGJvb2xlYW47XG5cdHByaXZhdGUgX2ZuQ29udGFpbmVyRGVsZWdhdGU6IGFueTtcblx0cHJpdmF0ZSBfbmJXYWl0cyE6IG51bWJlcjtcblx0cHJpdmF0ZSBfYlNlYWNoVHJpZ2dlcmVkITogYm9vbGVhbjtcblx0cHJpdmF0ZSBfYklzUGFnZVJlYWR5ITogYm9vbGVhbjtcblx0cHJpdmF0ZSBfYldhaXRpbmdGb3JSZWZyZXNoITogYm9vbGVhbjtcblx0cHJpdmF0ZSBiU2hvd24hOiBib29sZWFuO1xuXHRwcml2YXRlIGJIYXNDb250ZXh0ITogYm9vbGVhbjtcblx0cHJpdmF0ZSBiRGF0YVJlY2VpdmVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIGJUYWJsZXNMb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgYkNoYXJ0c0xvYWRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBwYWdlUmVhZHlUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uSW5pdCgpIHtcblx0XHR0aGlzLl9uYldhaXRzID0gMDtcblx0XHR0aGlzLl9iU2VhY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblx0XHR0aGlzLl9vRXZlbnRQcm92aWRlciA9IHRoaXMuX29FdmVudFByb3ZpZGVyID8gdGhpcy5fb0V2ZW50UHJvdmlkZXIgOiBuZXcgRXZlbnRQcm92aWRlcigpO1xuXHRcdHRoaXMuX29WaWV3ID0gKHRoaXMgYXMgYW55KS5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX29WaWV3KTtcblx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLl9vVmlldyk7XG5cblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQgJiYgdGhpcy5fb1BhZ2VDb21wb25lbnQuYXR0YWNoQ29udGFpbmVyRGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQuYXR0YWNoQ29udGFpbmVyRGVmaW5lZCgob0V2ZW50OiBFdmVudCkgPT4gdGhpcy5yZWdpc3RlckNvbnRhaW5lcihvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGFpbmVyXCIpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVnaXN0ZXJDb250YWluZXIodGhpcy5fb1ZpZXcpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9Sb290Q29udHJvbENvbnRyb2xsZXIgPSAodGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpIGFzIFZpZXcpLmdldENvbnRyb2xsZXIoKSBhcyBhbnk7XG5cdFx0Y29uc3Qgb1BsYWNlaG9sZGVyID0gb1Jvb3RDb250cm9sQ29udHJvbGxlci5nZXRQbGFjZWhvbGRlciAmJiBvUm9vdENvbnRyb2xDb250cm9sbGVyLmdldFBsYWNlaG9sZGVyKCk7XG5cdFx0aWYgKG9QbGFjZWhvbGRlcj8uaXNQbGFjZWhvbGRlckRlYnVnRW5hYmxlZCgpKSB7XG5cdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFxuXHRcdFx0XHRcInBhZ2VSZWFkeVwiLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0b1BsYWNlaG9sZGVyLmdldFBsYWNlaG9sZGVyRGVidWdTdGF0cygpLmlQYWdlUmVhZHlFdmVudFRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFxuXHRcdFx0XHRcImhlcm9lc0JhdGNoUmVjZWl2ZWRcIixcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdG9QbGFjZWhvbGRlci5nZXRQbGFjZWhvbGRlckRlYnVnU3RhdHMoKS5pSGVyb2VzQmF0Y2hSZWNlaXZlZEV2ZW50VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25FeGl0KCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29BcHBDb21wb25lbnQ7XG5cdFx0aWYgKHRoaXMuX29Db250YWluZXIpIHtcblx0XHRcdHRoaXMuX29Db250YWluZXIucmVtb3ZlRXZlbnREZWxlZ2F0ZSh0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHdhaXRGb3Iob1Byb21pc2U6IGFueSkge1xuXHRcdHRoaXMuX25iV2FpdHMrKztcblx0XHRvUHJvbWlzZVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9uYldhaXRzLS07XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChudWxsKTtcblx0fVxuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRvblJvdXRlTWF0Y2hlZCgpIHtcblx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0fVxuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRvblJvdXRlTWF0Y2hlZEZpbmlzaGVkKCkge1xuXHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdG9uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCkge1xuXHRcdGlmICghdGhpcy5fYkFmdGVyQmluZGluZ0FscmVhZHlBcHBsaWVkKSB7XG5cdFx0XHR0aGlzLl9iQWZ0ZXJCaW5kaW5nQWxyZWFkeUFwcGxpZWQgPSB0cnVlO1xuXHRcdFx0bGV0IGFCb3VuZEVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0Y29uc3QgYU1EQ1RhYmxlczogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IGFOb3RCb3VuZE1EQ0NoYXJ0czogYW55W10gPSBbXTtcblx0XHRcdGxldCBpUmVxdWVzdGVkID0gMDtcblx0XHRcdGxldCBpUmVjZWl2ZWQgPSAwO1xuXHRcdFx0Y29uc3QgZm5SZXF1ZXN0ZWQgPSAob0V2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0XHQob0V2ZW50LmdldFNvdXJjZSgpIGFzIGFueSkuZGV0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdGlSZXF1ZXN0ZWQrKztcblx0XHRcdFx0dGhpcy5iRGF0YVJlY2VpdmVkID0gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZm5SZWNlaXZlZCA9IChvRXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAoKG9FdmVudC5nZXRTb3VyY2UoKSBhcyBhbnkpLnNHcm91cElkKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIiRhdXRvLldvcmtlcnNcIjpcblx0XHRcdFx0XHRcdHRoaXMuX29FdmVudFByb3ZpZGVyLmZpcmVFdmVudChcIndvcmtlcnNCYXRjaFJlY2VpdmVkXCIpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIiRhdXRvLkhlcm9lc1wiOlxuXHRcdFx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwiaGVyb2VzQmF0Y2hSZWNlaXZlZFwiKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdH1cblx0XHRcdFx0KG9FdmVudC5nZXRTb3VyY2UoKSBhcyBhbnkpLmRldGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0aVJlY2VpdmVkKys7XG5cdFx0XHRcdGlmIChpUmVjZWl2ZWQgPj0gaVJlcXVlc3RlZCAmJiBpUmVxdWVzdGVkICE9PSAwKSB7XG5cdFx0XHRcdFx0aVJlcXVlc3RlZCA9IDA7XG5cdFx0XHRcdFx0aVJlY2VpdmVkID0gMDtcblx0XHRcdFx0XHR0aGlzLmJEYXRhUmVjZWl2ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZuQXR0YWNoRGF0YUV2ZW50cyA9IChldmVudDogRXZlbnQgfCBudWxsLCBvRGF0YTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmcgPSBvRGF0YS5iaW5kaW5nID8gb0RhdGEuYmluZGluZyA6IG9EYXRhLnRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKGJpbmRpbmcpIHtcblx0XHRcdFx0XHRiaW5kaW5nLmF0dGFjaERhdGFSZXF1ZXN0ZWQoZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRcdGJpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKChkYXRhUmVjZWl2ZWRFdmVudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRmblJlY2VpdmVkKGRhdGFSZWNlaXZlZEV2ZW50KTtcblx0XHRcdFx0XHRcdHRoaXMuX2JTZWFjaFRyaWdnZXJlZCA9IG9EYXRhLmlzU2VhY2hUcmlnZ2VyZWQgPyAhb0RhdGEuaXNTZWFjaFRyaWdnZXJlZCA6IHRoaXMuX2JTZWFjaFRyaWdnZXJlZDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKGJpbmRpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBmblNlYXJjaCA9IChvRXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFNRENUYWJsZUxpbmtlZFRvRmlsdGVyQmFyID0gYU1EQ1RhYmxlcy5maWx0ZXIoKG9FbGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKChvRXZlbnQuZ2V0U291cmNlKCkgYXMgYW55KS5zSWQgPT09IG9FbGVtLmdldEZpbHRlcigpICYmIG9FbGVtLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGFNRENDaGFydHMgPSBhTm90Qm91bmRNRENDaGFydHMuZmlsdGVyKChvRWxlbSkgPT4ge1xuXHRcdFx0XHRcdGlmICgob0V2ZW50LmdldFNvdXJjZSgpIGFzIGFueSkuc0lkID09PSBvRWxlbS5nZXRGaWx0ZXIoKSAmJiBvRWxlbS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYU1EQ1RhYmxlTGlua2VkVG9GaWx0ZXJCYXIubGVuZ3RoID4gMCB8fCBhTURDQ2hhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0aGlzLl9iU2VhY2hUcmlnZ2VyZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFNRENUYWJsZUxpbmtlZFRvRmlsdGVyQmFyLmZvckVhY2goKG9NRENUYWJsZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvTURDVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0XHRcdFx0Zm5BdHRhY2hEYXRhRXZlbnRzKG51bGwsIHsgdGFibGU6IG9NRENUYWJsZSwgaXNTZWFjaFRyaWdnZXJlZDogdHJ1ZSB9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b01EQ1RhYmxlLmF0dGFjaEV2ZW50T25jZShcImJpbmRpbmdVcGRhdGVkXCIsIHsgdGFibGU6IG9NRENUYWJsZSwgaXNTZWFjaFRyaWdnZXJlZDogdHJ1ZSB9LCBmbkF0dGFjaERhdGFFdmVudHMsIG51bGwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFNRENDaGFydHMuZm9yRWFjaCgob01EQ0NoYXJ0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRvTURDQ2hhcnQuaW5uZXJDaGFydEJvdW5kUHJvbWlzZVxuXHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvQmluZGluZyA9IG9NRENDaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5nZXRJbm5lckNoYXJ0KG9NRENDaGFydCkuZ2V0QmluZGluZyhcImRhdGFcIik7XG5cdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRcdGZuQXR0YWNoRGF0YUV2ZW50cyhudWxsLCB7IGJpbmRpbmc6IG9CaW5kaW5nLCBpc1NlYWNoVHJpZ2dlcmVkOiB0cnVlIH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9NRENDaGFydC5hdHRhY2hFdmVudE9uY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRcImJpbmRpbmdVcGRhdGVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmRpbmc6IG9CaW5kaW5nLCBpc1NlYWNoVHJpZ2dlcmVkOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRmbkF0dGFjaERhdGFFdmVudHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBFcnJvcikge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZmluZCBhIGlubmVyIGJvdW5kIGNoYXJ0XCIsIG9FcnJvciBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHRcdGlmICh0aGlzLmlzQ29udGV4dEV4cGVjdGVkKCkgJiYgb0JpbmRpbmdDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gRm9yY2UgdG8gbWVudGlvbiB3ZSBhcmUgZXhwZWN0aW5nIGRhdGFcblx0XHRcdFx0dGhpcy5iSGFzQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmJIYXNDb250ZXh0ID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hdHRhY2hFdmVudE9uY2UoXG5cdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5mb3JFYWNoKChvRWxlbWVudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRvRWxlbWVudC5kZXRhY2hFdmVudChcImRhdGFSZXF1ZXN0ZWRcIiwgZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQuZGV0YWNoRXZlbnQoXCJkYXRhUmVjZWl2ZWRcIiwgZm5SZWNlaXZlZCk7XG5cdFx0XHRcdFx0XHRvRWxlbWVudC5kZXRhY2hFdmVudChcInNlYXJjaFwiLCBmblNlYXJjaCk7XG5cdFx0XHRcdFx0XHRvRWxlbWVudC5kZXRhY2hFdmVudChcImJpbmRpbmdVcGRhdGVkXCIsIGZuQXR0YWNoRGF0YUV2ZW50cyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5fYkFmdGVyQmluZGluZ0FscmVhZHlBcHBsaWVkID0gZmFsc2U7XG5cdFx0XHRcdFx0YUJvdW5kRWxlbWVudHMgPSBbXTtcblx0XHRcdFx0fSxcblx0XHRcdFx0bnVsbFxuXHRcdFx0KTtcblx0XHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgbWFpbk9iamVjdEJpbmRpbmcgPSAob0JpbmRpbmdDb250ZXh0IGFzIGFueSkuZ2V0QmluZGluZygpO1xuXHRcdFx0XHRtYWluT2JqZWN0QmluZGluZy5hdHRhY2hEYXRhUmVxdWVzdGVkKGZuUmVxdWVzdGVkKTtcblx0XHRcdFx0bWFpbk9iamVjdEJpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKGZuUmVjZWl2ZWQpO1xuXHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG1haW5PYmplY3RCaW5kaW5nKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlczogUHJvbWlzZTxhbnk+W10gPSBbXTtcblx0XHRcdGNvbnN0IGFDaGFydEluaXRpYWxpemVkUHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW107XG5cdFx0XHR0aGlzLl9vVmlldy5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSwgKG9FbGVtZW50OiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb09iamVjdEJpbmRpbmcgPSBvRWxlbWVudC5nZXRPYmplY3RCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvT2JqZWN0QmluZGluZykge1xuXHRcdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIGFsbCBvYmplY3QgYmluZGluZyAobW9zdGx5IHVzZWQgb24gb2JqZWN0IHBhZ2VzKVxuXHRcdFx0XHRcdG9PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZXF1ZXN0ZWQoZm5SZXF1ZXN0ZWQpO1xuXHRcdFx0XHRcdG9PYmplY3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9PYmplY3RCaW5kaW5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBhQmluZGluZ0tleXMgPSBPYmplY3Qua2V5cyhvRWxlbWVudC5tQmluZGluZ0luZm9zKTtcblx0XHRcdFx0XHRpZiAoYUJpbmRpbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFCaW5kaW5nS2V5cy5mb3JFYWNoKChzUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9FbGVtZW50Lm1CaW5kaW5nSW5mb3Nbc1Byb3BlcnR5TmFtZV0uYmluZGluZztcblx0XHRcdFx0XHRcdFx0Ly8gUmVnaXN0ZXIgb24gYWxsIGxpc3QgYmluZGluZywgZ29vZCBmb3IgYmFzaWMgdGFibGVzLCBwcm9ibGVtYXRpYyBmb3IgTURDLCBzZWUgYWJvdmVcblx0XHRcdFx0XHRcdFx0aWYgKG9MaXN0QmluZGluZyAmJiBvTGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRvTGlzdEJpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdFx0XHRcdFx0b0xpc3RCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblJlY2VpdmVkKTtcblx0XHRcdFx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9MaXN0QmluZGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUaGlzIGlzIGRpcnR5IGJ1dCBNREMgVGFibGUgaGFzIGEgd2VpcmQgbG9hZGluZyBsaWZlY3ljbGVcblx0XHRcdFx0aWYgKG9FbGVtZW50LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHR0aGlzLmJUYWJsZXNMb2FkZWQgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFx0YVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0b0VsZW1lbnRcblx0XHRcdFx0XHRcdFx0LmluaXRpYWxpemVkKClcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGFNRENUYWJsZXMucHVzaChvRWxlbWVudCk7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbWVudC5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmbkF0dGFjaERhdGFFdmVudHMobnVsbCwgeyB0YWJsZTogb0VsZW1lbnQgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9FbGVtZW50LmF0dGFjaEV2ZW50T25jZShcImJpbmRpbmdVcGRhdGVkXCIsIHsgdGFibGU6IG9FbGVtZW50IH0sIGZuQXR0YWNoRGF0YUV2ZW50cyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogRXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZmluZCBhIGJvdW5kIHRhYmxlXCIsIG9FcnJvciBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHRcdHRoaXMuYkNoYXJ0c0xvYWRlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0XHRhQ2hhcnRJbml0aWFsaXplZFByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRvRWxlbWVudFxuXHRcdFx0XHRcdFx0XHQuaW5pdGlhbGl6ZWQoKVxuXHRcdFx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvRWxlbWVudC5nZXRDb250cm9sRGVsZWdhdGUoKS5nZXRJbm5lckNoYXJ0KG9FbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvQmluZGluZyA9IG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlcXVlc3RlZChmblJlcXVlc3RlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRvQmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5SZWNlaXZlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9CaW5kaW5nKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0YU5vdEJvdW5kTURDQ2hhcnRzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IEVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGZpbmQgYSBib3VuZCBjaGFydFwiLCBvRXJyb3IgYXMgYW55KTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9FbGVtZW50LmlzQShcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZpbHRlckJhclwiKSkge1xuXHRcdFx0XHRcdG9FbGVtZW50LmF0dGFjaEV2ZW50KFwic2VhcmNoXCIsIGZuU2VhcmNoKTtcblx0XHRcdFx0XHRhQm91bmRFbGVtZW50cy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYVRhYmxlSW5pdGlhbGl6ZWRQcm9taXNlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFByb21pc2UuYWxsKGFUYWJsZUluaXRpYWxpemVkUHJvbWlzZXMpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgob0Vycm9yKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuaW5mbyhcIlRoZXJlIHdhcyBhbiBlcnJvciB3aXRoIG9uZSBvciBtdWx0aXBsZSB0YWJsZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChhQ2hhcnRJbml0aWFsaXplZFByb21pc2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0UHJvbWlzZS5hbGwoYUNoYXJ0SW5pdGlhbGl6ZWRQcm9taXNlcylcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmJDaGFydHNMb2FkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5jaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChvRXJyb3IpID0+IHtcblx0XHRcdFx0XHRcdExvZy5pbmZvKFwiVGhlcmUgd2FzIGFuIGVycm9yIHdpdGggb25lIG9yIG11bHRpcGxlIGNoYXJ0c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0dGhpcy5iQ2hhcnRzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuY2hlY2tQYWdlUmVhZHlEZWJvdW5jZWQoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGlzUGFnZVJlYWR5KCkge1xuXHRcdHJldHVybiB0aGlzLl9iSXNQYWdlUmVhZHk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHdhaXRQYWdlUmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc1BhZ2VSZWFkeSgpKSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuYXR0YWNoRXZlbnRPbmNlKFxuXHRcdFx0XHRcdFwicGFnZVJlYWR5XCIsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50T25jZShzRXZlbnRJZDogc3RyaW5nLCBvRGF0YTogYW55LCBmbkZ1bmN0aW9uPzogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnRPbmNlKHNFdmVudElkLCBvRGF0YSwgZm5GdW5jdGlvbiBhcyBGdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGF0dGFjaEV2ZW50KHNFdmVudElkOiBzdHJpbmcsIG9EYXRhOiBhbnksIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI6IGFueSkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0XHRyZXR1cm4gdGhpcy5fb0V2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoc0V2ZW50SWQsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgZGV0YWNoRXZlbnQoc0V2ZW50SWQ6IHN0cmluZywgZm5GdW5jdGlvbjogRnVuY3Rpb24pIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG5cdFx0cmV0dXJuIHRoaXMuX29FdmVudFByb3ZpZGVyLmRldGFjaEV2ZW50KHNFdmVudElkLCBmbkZ1bmN0aW9uKTtcblx0fVxuXHRwcml2YXRlIHJlZ2lzdGVyQ29udGFpbmVyKG9Db250YWluZXI6IE1hbmFnZWRPYmplY3QpIHtcblx0XHR0aGlzLl9vQ29udGFpbmVyID0gb0NvbnRhaW5lcjtcblx0XHR0aGlzLl9mbkNvbnRhaW5lckRlbGVnYXRlID0ge1xuXHRcdFx0b25CZWZvcmVTaG93OiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYlNob3duID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuX2JJc1BhZ2VSZWFkeSA9IGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdG9uQmVmb3JlSGlkZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9iSXNQYWdlUmVhZHkgPSBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRvbkFmdGVyU2hvdzogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJTaG93biA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX2NoZWNrUGFnZVJlYWR5KHRydWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5fb0NvbnRhaW5lci5hZGRFdmVudERlbGVnYXRlKHRoaXMuX2ZuQ29udGFpbmVyRGVsZWdhdGUpO1xuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRwdWJsaWMgaXNDb250ZXh0RXhwZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBjaGVja1BhZ2VSZWFkeURlYm91bmNlZCgpIHtcblx0XHRpZiAodGhpcy5wYWdlUmVhZHlUaW1lcikge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMucGFnZVJlYWR5VGltZXIpO1xuXHRcdH1cblx0XHR0aGlzLnBhZ2VSZWFkeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9jaGVja1BhZ2VSZWFkeSgpO1xuXHRcdH0sIDIwMCk7XG5cdH1cblxuXHRwdWJsaWMgX2NoZWNrUGFnZVJlYWR5KGJGcm9tTmF2OiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRjb25zdCBmblVJVXBkYXRlZCA9ICgpID0+IHtcblx0XHRcdC8vIFdhaXQgdW50aWwgdGhlIFVJIGlzIG5vIGxvbmdlciBkaXJ0eVxuXHRcdFx0aWYgKCFDb3JlLmdldFVJRGlydHkoKSkge1xuXHRcdFx0XHQoQ29yZSBhcyBDb3JlRXgpLmRldGFjaEV2ZW50KFwiVUlVcGRhdGVkXCIsIGZuVUlVcGRhdGVkKTtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX2NoZWNrUGFnZVJlYWR5KCk7XG5cdFx0XHRcdH0sIDIwKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gSW4gY2FzZSBVSVVwZGF0ZSBkb2VzIG5vdCBnZXQgY2FsbGVkLCBjaGVjayBpZiBVSSBpcyBub3QgZGlydHkgYW5kIHRoZW4gY2FsbCBfY2hlY2tQYWdlUmVhZHlcblx0XHRjb25zdCBjaGVja1VJVXBkYXRlZCA9ICgpID0+IHtcblx0XHRcdGlmIChDb3JlLmdldFVJRGlydHkoKSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRcdChDb3JlIGFzIENvcmVFeCkuZGV0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHR0aGlzLl9jaGVja1BhZ2VSZWFkeSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmJTaG93biAmJlxuXHRcdFx0dGhpcy5iRGF0YVJlY2VpdmVkICE9PSBmYWxzZSAmJlxuXHRcdFx0dGhpcy5iVGFibGVzTG9hZGVkICE9PSBmYWxzZSAmJlxuXHRcdFx0dGhpcy5iQ2hhcnRzTG9hZGVkICE9PSBmYWxzZSAmJlxuXHRcdFx0KCF0aGlzLmlzQ29udGV4dEV4cGVjdGVkKCkgfHwgdGhpcy5iSGFzQ29udGV4dCkgLy8gRWl0aGVyIG5vIGNvbnRleHQgaXMgZXhwZWN0ZWQgb3IgdGhlcmUgaXMgb25lXG5cdFx0KSB7XG5cdFx0XHRpZiAodGhpcy5iRGF0YVJlY2VpdmVkID09PSB0cnVlICYmICFiRnJvbU5hdiAmJiAhdGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoICYmIENvcmUuZ2V0VUlEaXJ0eSgpKSB7XG5cdFx0XHRcdC8vIElmIHdlIHJlcXVlc3RlZCBkYXRhIHdlIGdldCBub3RpZmllZCBhcyBzb29uIGFzIHRoZSBkYXRhIGFycml2ZWQsIHNvIGJlZm9yZSB0aGUgbmV4dCByZW5kZXJpbmcgdGlja1xuXHRcdFx0XHR0aGlzLmJEYXRhUmVjZWl2ZWQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHRoaXMuX2JXYWl0aW5nRm9yUmVmcmVzaCA9IHRydWU7XG5cdFx0XHRcdChDb3JlIGFzIENvcmVFeCkuYXR0YWNoRXZlbnQoXCJVSVVwZGF0ZWRcIiwgZm5VSVVwZGF0ZWQpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrVUlVcGRhdGVkLCA1MDApO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2ggJiYgQ29yZS5nZXRVSURpcnR5KCkpIHx8XG5cdFx0XHRcdHRoaXMuX25iV2FpdHMgIT09IDAgfHxcblx0XHRcdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUoKSA+IDAgfHxcblx0XHRcdFx0dGhpcy5fYlNlYWNoVHJpZ2dlcmVkXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5fYldhaXRpbmdGb3JSZWZyZXNoID0gdHJ1ZTtcblx0XHRcdFx0KENvcmUgYXMgQ29yZUV4KS5hdHRhY2hFdmVudChcIlVJVXBkYXRlZFwiLCBmblVJVXBkYXRlZCk7XG5cdFx0XHRcdHNldFRpbWVvdXQoY2hlY2tVSVVwZGF0ZWQsIDUwMCk7XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9iV2FpdGluZ0ZvclJlZnJlc2gpIHtcblx0XHRcdFx0Ly8gSW4gdGhlIGNhc2Ugd2UncmUgbm90IHdhaXRpbmcgZm9yIGFueSBkYXRhIChuYXZpZ2F0aW5nIGJhY2sgdG8gYSBwYWdlIHdlIGFscmVhZHkgaGF2ZSBsb2FkZWQpXG5cdFx0XHRcdC8vIGp1c3Qgd2FpdCBmb3IgYSBmcmFtZSB0byBmaXJlIHRoZSBldmVudC5cblx0XHRcdFx0dGhpcy5fYklzUGFnZVJlYWR5ID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5fb0V2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicGFnZVJlYWR5XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYWdlUmVhZHlDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl19
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
|
-
import AppComponent from "sap/fe/core/AppComponent";
|
|
2
|
+
import type AppComponent from "sap/fe/core/AppComponent";
|
|
3
3
|
import TemplatedViewServiceFactory from "sap/fe/core/services/TemplatedViewServiceFactory";
|
|
4
|
-
import Event from "sap/ui/base/Event";
|
|
4
|
+
import type Event from "sap/ui/base/Event";
|
|
5
5
|
import EventProvider from "sap/ui/base/EventProvider";
|
|
6
|
-
import ManagedObject from "sap/ui/base/ManagedObject";
|
|
6
|
+
import type ManagedObject from "sap/ui/base/ManagedObject";
|
|
7
7
|
import Component from "sap/ui/core/Component";
|
|
8
8
|
import Core from "sap/ui/core/Core";
|
|
9
9
|
import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
|
|
10
10
|
import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
|
|
11
|
-
import View from "sap/ui/core/mvc/View";
|
|
12
|
-
import Context from "sap/ui/model/Context";
|
|
13
|
-
import { CoreEx } from "types/extension_types";
|
|
11
|
+
import type View from "sap/ui/core/mvc/View";
|
|
12
|
+
import type Context from "sap/ui/model/Context";
|
|
13
|
+
import type { CoreEx } from "types/extension_types";
|
|
14
14
|
import CommonUtils from "../CommonUtils";
|
|
15
15
|
import { defineUI5Class, extensible, finalExtension, methodOverride, privateExtension, publicExtension } from "../helpers/ClassSupport";
|
|
16
16
|
|
|
@@ -31,6 +31,7 @@ class PageReadyControllerExtension extends ControllerExtension {
|
|
|
31
31
|
private bHasContext!: boolean;
|
|
32
32
|
private bDataReceived: boolean | undefined;
|
|
33
33
|
private bTablesLoaded: boolean | undefined;
|
|
34
|
+
private bChartsLoaded: boolean | undefined;
|
|
34
35
|
private pageReadyTimer: NodeJS.Timeout | undefined;
|
|
35
36
|
|
|
36
37
|
@methodOverride()
|
|
@@ -75,7 +76,9 @@ class PageReadyControllerExtension extends ControllerExtension {
|
|
|
75
76
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
76
77
|
// @ts-ignore
|
|
77
78
|
delete this._oAppComponent;
|
|
78
|
-
|
|
79
|
+
if (this._oContainer) {
|
|
80
|
+
this._oContainer.removeEventDelegate(this._fnContainerDelegate);
|
|
81
|
+
}
|
|
79
82
|
}
|
|
80
83
|
|
|
81
84
|
@publicExtension()
|
|
@@ -104,7 +107,8 @@ class PageReadyControllerExtension extends ControllerExtension {
|
|
|
104
107
|
if (!this._bAfterBindingAlreadyApplied) {
|
|
105
108
|
this._bAfterBindingAlreadyApplied = true;
|
|
106
109
|
let aBoundElements: any[] = [];
|
|
107
|
-
const
|
|
110
|
+
const aMDCTables: any[] = [];
|
|
111
|
+
const aNotBoundMDCCharts: any[] = [];
|
|
108
112
|
let iRequested = 0;
|
|
109
113
|
let iReceived = 0;
|
|
110
114
|
const fnRequested = (oEvent: Event) => {
|
|
@@ -131,40 +135,61 @@ class PageReadyControllerExtension extends ControllerExtension {
|
|
|
131
135
|
this.checkPageReadyDebounced();
|
|
132
136
|
}
|
|
133
137
|
};
|
|
138
|
+
const fnAttachDataEvents = (event: Event | null, oData: any) => {
|
|
139
|
+
const binding = oData.binding ? oData.binding : oData.table.getRowBinding();
|
|
140
|
+
if (binding) {
|
|
141
|
+
binding.attachDataRequested(fnRequested);
|
|
142
|
+
binding.attachDataReceived((dataReceivedEvent: any) => {
|
|
143
|
+
fnReceived(dataReceivedEvent);
|
|
144
|
+
this._bSeachTriggered = oData.isSeachTriggered ? !oData.isSeachTriggered : this._bSeachTriggered;
|
|
145
|
+
});
|
|
146
|
+
aBoundElements.push(binding);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
134
150
|
const fnSearch = (oEvent: Event) => {
|
|
135
|
-
const
|
|
151
|
+
const aMDCTableLinkedToFilterBar = aMDCTables.filter((oElem) => {
|
|
152
|
+
if ((oEvent.getSource() as any).sId === oElem.getFilter() && oElem.getVisible()) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
return false;
|
|
156
|
+
});
|
|
157
|
+
const aMDCCharts = aNotBoundMDCCharts.filter((oElem) => {
|
|
136
158
|
if ((oEvent.getSource() as any).sId === oElem.getFilter() && oElem.getVisible()) {
|
|
137
159
|
return true;
|
|
138
160
|
}
|
|
139
161
|
return false;
|
|
140
162
|
});
|
|
141
|
-
if (
|
|
163
|
+
if (aMDCTableLinkedToFilterBar.length > 0 || aMDCCharts.length > 0) {
|
|
142
164
|
this._bSeachTriggered = true;
|
|
143
165
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const fnAttachDataEvents = () => {
|
|
147
|
-
oRowBinding.attachDataRequested(fnRequested);
|
|
148
|
-
oRowBinding.attachDataReceived((oEvent: any) => {
|
|
149
|
-
fnReceived(oEvent);
|
|
150
|
-
this._bSeachTriggered = false;
|
|
151
|
-
});
|
|
152
|
-
aBoundElements.push(oRowBinding);
|
|
153
|
-
};
|
|
166
|
+
aMDCTableLinkedToFilterBar.forEach((oMDCTable: any) => {
|
|
167
|
+
const oRowBinding = oMDCTable.getRowBinding();
|
|
154
168
|
if (oRowBinding) {
|
|
155
|
-
fnAttachDataEvents();
|
|
169
|
+
fnAttachDataEvents(null, { table: oMDCTable, isSeachTriggered: true });
|
|
156
170
|
} else {
|
|
157
|
-
oMDCTable.attachEventOnce(
|
|
158
|
-
"bindingUpdated",
|
|
159
|
-
null,
|
|
160
|
-
() => {
|
|
161
|
-
oRowBinding = oMDCTable.getRowBinding();
|
|
162
|
-
fnAttachDataEvents();
|
|
163
|
-
},
|
|
164
|
-
null
|
|
165
|
-
);
|
|
171
|
+
oMDCTable.attachEventOnce("bindingUpdated", { table: oMDCTable, isSeachTriggered: true }, fnAttachDataEvents, null);
|
|
166
172
|
}
|
|
167
173
|
});
|
|
174
|
+
aMDCCharts.forEach((oMDCChart: any) => {
|
|
175
|
+
oMDCChart.innerChartBoundPromise
|
|
176
|
+
.then(() => {
|
|
177
|
+
const oBinding = oMDCChart.getControlDelegate().getInnerChart(oMDCChart).getBinding("data");
|
|
178
|
+
if (oBinding) {
|
|
179
|
+
fnAttachDataEvents(null, { binding: oBinding, isSeachTriggered: true });
|
|
180
|
+
} else {
|
|
181
|
+
oMDCChart.attachEventOnce(
|
|
182
|
+
"bindingUpdated",
|
|
183
|
+
{ binding: oBinding, isSeachTriggered: true },
|
|
184
|
+
fnAttachDataEvents,
|
|
185
|
+
null
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
.catch(function (oError: Error) {
|
|
190
|
+
Log.error("Cannot find a inner bound chart", oError as any);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
168
193
|
};
|
|
169
194
|
if (this.isContextExpected() && oBindingContext === undefined) {
|
|
170
195
|
// Force to mention we are expecting data
|
|
@@ -182,6 +207,7 @@ class PageReadyControllerExtension extends ControllerExtension {
|
|
|
182
207
|
oElement.detachEvent("dataRequested", fnRequested);
|
|
183
208
|
oElement.detachEvent("dataReceived", fnReceived);
|
|
184
209
|
oElement.detachEvent("search", fnSearch);
|
|
210
|
+
oElement.detachEvent("bindingUpdated", fnAttachDataEvents);
|
|
185
211
|
});
|
|
186
212
|
this._bAfterBindingAlreadyApplied = false;
|
|
187
213
|
aBoundElements = [];
|
|
@@ -196,6 +222,7 @@ class PageReadyControllerExtension extends ControllerExtension {
|
|
|
196
222
|
}
|
|
197
223
|
|
|
198
224
|
const aTableInitializedPromises: Promise<any>[] = [];
|
|
225
|
+
const aChartInitializedPromises: Promise<any>[] = [];
|
|
199
226
|
this._oView.findAggregatedObjects(true, (oElement: any) => {
|
|
200
227
|
const oObjectBinding = oElement.getObjectBinding();
|
|
201
228
|
if (oObjectBinding) {
|
|
@@ -225,19 +252,39 @@ class PageReadyControllerExtension extends ControllerExtension {
|
|
|
225
252
|
oElement
|
|
226
253
|
.initialized()
|
|
227
254
|
.then(() => {
|
|
255
|
+
aMDCTables.push(oElement);
|
|
228
256
|
const oRowBinding = oElement.getRowBinding();
|
|
229
257
|
if (oRowBinding) {
|
|
230
|
-
|
|
231
|
-
oRowBinding.attachDataReceived(fnReceived);
|
|
232
|
-
aBoundElements.push(oRowBinding);
|
|
258
|
+
fnAttachDataEvents(null, { table: oElement });
|
|
233
259
|
} else {
|
|
234
|
-
|
|
260
|
+
oElement.attachEventOnce("bindingUpdated", { table: oElement }, fnAttachDataEvents);
|
|
235
261
|
}
|
|
236
262
|
})
|
|
237
263
|
.catch(function (oError: Error) {
|
|
238
264
|
Log.error("Cannot find a bound table", oError as any);
|
|
239
265
|
})
|
|
240
266
|
);
|
|
267
|
+
} else if (oElement.isA("sap.ui.mdc.Chart")) {
|
|
268
|
+
this.bChartsLoaded = false;
|
|
269
|
+
// access binding only after table is bound
|
|
270
|
+
aChartInitializedPromises.push(
|
|
271
|
+
oElement
|
|
272
|
+
.initialized()
|
|
273
|
+
.then(() => {
|
|
274
|
+
const oInnerChart = oElement.getControlDelegate().getInnerChart(oElement);
|
|
275
|
+
const oBinding = oInnerChart && oInnerChart.getBinding("data");
|
|
276
|
+
if (oBinding) {
|
|
277
|
+
oBinding.attachDataRequested(fnRequested);
|
|
278
|
+
oBinding.attachDataReceived(fnReceived);
|
|
279
|
+
aBoundElements.push(oBinding);
|
|
280
|
+
} else {
|
|
281
|
+
aNotBoundMDCCharts.push(oElement);
|
|
282
|
+
}
|
|
283
|
+
})
|
|
284
|
+
.catch(function (oError: Error) {
|
|
285
|
+
Log.error("Cannot find a bound chart", oError as any);
|
|
286
|
+
})
|
|
287
|
+
);
|
|
241
288
|
} else if (oElement.isA("sap.fe.core.controls.FilterBar")) {
|
|
242
289
|
oElement.attachEvent("search", fnSearch);
|
|
243
290
|
aBoundElements.push(oElement);
|
|
@@ -255,6 +302,18 @@ class PageReadyControllerExtension extends ControllerExtension {
|
|
|
255
302
|
this.checkPageReadyDebounced();
|
|
256
303
|
});
|
|
257
304
|
}
|
|
305
|
+
if (aChartInitializedPromises.length > 0) {
|
|
306
|
+
Promise.all(aChartInitializedPromises)
|
|
307
|
+
.then(() => {
|
|
308
|
+
this.bChartsLoaded = true;
|
|
309
|
+
this.checkPageReadyDebounced();
|
|
310
|
+
})
|
|
311
|
+
.catch((oError) => {
|
|
312
|
+
Log.info("There was an error with one or multiple charts", oError);
|
|
313
|
+
this.bChartsLoaded = true;
|
|
314
|
+
this.checkPageReadyDebounced();
|
|
315
|
+
});
|
|
316
|
+
}
|
|
258
317
|
}
|
|
259
318
|
}
|
|
260
319
|
|
|
@@ -363,6 +422,7 @@ class PageReadyControllerExtension extends ControllerExtension {
|
|
|
363
422
|
this.bShown &&
|
|
364
423
|
this.bDataReceived !== false &&
|
|
365
424
|
this.bTablesLoaded !== false &&
|
|
425
|
+
this.bChartsLoaded !== false &&
|
|
366
426
|
(!this.isContextExpected() || this.bHasContext) // Either no context is expected or there is one
|
|
367
427
|
) {
|
|
368
428
|
if (this.bDataReceived === true && !bFromNav && !this._bWaitingForRefresh && Core.getUIDirty()) {
|