@sapui5/sap.fe.core 1.102.3 → 1.105.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 +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +120 -0
- package/src/sap/fe/core/ActionRuntime.ts +108 -0
- package/src/sap/fe/core/AppComponent.js +81 -35
- package/src/sap/fe/core/AppComponent.ts +68 -44
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- package/src/sap/fe/core/BaseController.js +12 -10
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +291 -218
- package/src/sap/fe/core/CommonUtils.ts +315 -251
- package/src/sap/fe/core/ExtensionAPI.js +25 -28
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +5 -5
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +21 -10
- package/src/sap/fe/core/TemplateComponent.ts +9 -6
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +8 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +197 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +164 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -230
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +275 -128
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +761 -700
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +478 -514
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +10 -10
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +104 -75
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +68 -68
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +162 -102
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +177 -121
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +67 -69
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +10 -10
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +98 -26
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +31 -32
- package/src/sap/fe/core/controllerextensions/Paginator.ts +33 -34
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -7
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +11 -12
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +171 -140
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +201 -132
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +13 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +13 -12
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +15 -15
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -18
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +60 -28
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +29 -21
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1424 -940
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +799 -836
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +410 -377
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +275 -358
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +752 -579
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +631 -599
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +92 -74
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +49 -52
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +110 -84
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +69 -81
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +64 -73
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +18 -2
- package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +25 -24
- 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 +12 -26
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -3
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +26 -26
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -3
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +3 -3
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +9 -4
- package/src/sap/fe/core/controls/FileWrapper.ts +16 -12
- package/src/sap/fe/core/controls/FilterBar.js +7 -3
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +44 -19
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +17 -13
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +4 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +48 -34
- package/src/sap/fe/core/converters/ConverterContext.ts +81 -67
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +18 -15
- 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 +74 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +176 -140
- 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 +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1956 -1494
- package/src/sap/fe/core/converters/controls/Common/Action.js +78 -51
- package/src/sap/fe/core/converters/controls/Common/Action.ts +87 -52
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -16
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +42 -43
- 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 +65 -29
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +93 -62
- package/src/sap/fe/core/converters/controls/Common/Form.js +31 -31
- package/src/sap/fe/core/converters/controls/Common/Form.ts +46 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +251 -264
- package/src/sap/fe/core/converters/controls/Common/Table.ts +344 -370
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +147 -144
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +89 -59
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +118 -71
- 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 +131 -95
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +123 -87
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +98 -87
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +121 -117
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +8 -6
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +18 -10
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +136 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +139 -0
- package/src/sap/fe/core/converters/helpers/ID.js +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- 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 -5
- 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 +53 -75
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +59 -90
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +58 -57
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +93 -86
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +58 -44
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +87 -80
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- 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 +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
- 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 +33 -7
- package/src/sap/fe/core/fpm/Component.ts +14 -0
- package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +19 -18
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +41 -43
- package/src/sap/fe/core/helpers/BindingToolkit.js +1836 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +397 -270
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -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 +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- 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/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- 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 +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +110 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +92 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +38 -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 +39 -67
- package/src/sap/fe/core/messagebundle_ar.properties +27 -44
- package/src/sap/fe/core/messagebundle_bg.properties +27 -44
- package/src/sap/fe/core/messagebundle_ca.properties +27 -44
- package/src/sap/fe/core/messagebundle_cs.properties +27 -44
- package/src/sap/fe/core/messagebundle_cy.properties +26 -43
- package/src/sap/fe/core/messagebundle_da.properties +27 -44
- package/src/sap/fe/core/messagebundle_de.properties +25 -42
- package/src/sap/fe/core/messagebundle_el.properties +28 -45
- package/src/sap/fe/core/messagebundle_en.properties +27 -44
- package/src/sap/fe/core/messagebundle_en_GB.properties +27 -44
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -42
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -40
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +25 -42
- package/src/sap/fe/core/messagebundle_es.properties +27 -44
- package/src/sap/fe/core/messagebundle_es_MX.properties +27 -44
- package/src/sap/fe/core/messagebundle_et.properties +27 -44
- package/src/sap/fe/core/messagebundle_fi.properties +27 -44
- package/src/sap/fe/core/messagebundle_fr.properties +26 -43
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -42
- package/src/sap/fe/core/messagebundle_hi.properties +27 -44
- package/src/sap/fe/core/messagebundle_hr.properties +27 -44
- package/src/sap/fe/core/messagebundle_hu.properties +27 -44
- package/src/sap/fe/core/messagebundle_id.properties +27 -44
- package/src/sap/fe/core/messagebundle_it.properties +43 -60
- package/src/sap/fe/core/messagebundle_iw.properties +27 -44
- package/src/sap/fe/core/messagebundle_ja.properties +27 -44
- package/src/sap/fe/core/messagebundle_kk.properties +27 -44
- package/src/sap/fe/core/messagebundle_ko.properties +30 -47
- package/src/sap/fe/core/messagebundle_lt.properties +27 -44
- package/src/sap/fe/core/messagebundle_lv.properties +27 -44
- package/src/sap/fe/core/messagebundle_ms.properties +27 -44
- package/src/sap/fe/core/messagebundle_nl.properties +29 -46
- package/src/sap/fe/core/messagebundle_no.properties +27 -44
- package/src/sap/fe/core/messagebundle_pl.properties +28 -45
- package/src/sap/fe/core/messagebundle_pt.properties +28 -45
- package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -44
- package/src/sap/fe/core/messagebundle_ro.properties +27 -44
- package/src/sap/fe/core/messagebundle_ru.properties +27 -44
- package/src/sap/fe/core/messagebundle_sh.properties +27 -44
- package/src/sap/fe/core/messagebundle_sk.properties +27 -44
- package/src/sap/fe/core/messagebundle_sl.properties +27 -44
- package/src/sap/fe/core/messagebundle_sv.properties +27 -44
- package/src/sap/fe/core/messagebundle_th.properties +25 -42
- package/src/sap/fe/core/messagebundle_tr.properties +27 -44
- package/src/sap/fe/core/messagebundle_uk.properties +27 -44
- package/src/sap/fe/core/messagebundle_vi.properties +27 -44
- package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -44
- package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -44
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +103 -75
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +72 -73
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +62 -50
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +56 -56
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +93 -77
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +64 -64
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +232 -200
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +145 -142
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- 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/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +85 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +90 -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 +23 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +47 -34
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- 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 +18 -17
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- 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 +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/Email.js +3 -3
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/
|
|
5
|
+
sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/DataModelPathHelper", "../../../helpers/BindingHelper", "../../../ManifestSettings"], function (tableFormatters, BindingToolkit, DataModelPathHelper, BindingHelper, ManifestSettings) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -14,22 +14,22 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
14
14
|
var isPathInsertable = DataModelPathHelper.isPathInsertable;
|
|
15
15
|
var isPathDeletable = DataModelPathHelper.isPathDeletable;
|
|
16
16
|
var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var and =
|
|
17
|
+
var pathInModel = BindingToolkit.pathInModel;
|
|
18
|
+
var or = BindingToolkit.or;
|
|
19
|
+
var notEqual = BindingToolkit.notEqual;
|
|
20
|
+
var not = BindingToolkit.not;
|
|
21
|
+
var length = BindingToolkit.length;
|
|
22
|
+
var isPathInModelExpression = BindingToolkit.isPathInModelExpression;
|
|
23
|
+
var isConstant = BindingToolkit.isConstant;
|
|
24
|
+
var ifElse = BindingToolkit.ifElse;
|
|
25
|
+
var greaterThan = BindingToolkit.greaterThan;
|
|
26
|
+
var greaterOrEqual = BindingToolkit.greaterOrEqual;
|
|
27
|
+
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
28
|
+
var formatResult = BindingToolkit.formatResult;
|
|
29
|
+
var equal = BindingToolkit.equal;
|
|
30
|
+
var constant = BindingToolkit.constant;
|
|
31
|
+
var compileExpression = BindingToolkit.compileExpression;
|
|
32
|
+
var and = BindingToolkit.and;
|
|
33
33
|
|
|
34
34
|
var AnnotationHiddenProperty;
|
|
35
35
|
|
|
@@ -42,10 +42,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
42
42
|
/**
|
|
43
43
|
* Generates the context for the standard actions.
|
|
44
44
|
*
|
|
45
|
-
* @param
|
|
46
|
-
* @param
|
|
47
|
-
* @param
|
|
48
|
-
* @param
|
|
45
|
+
* @param converterContext
|
|
46
|
+
* @param creationMode
|
|
47
|
+
* @param tableManifestConfiguration
|
|
48
|
+
* @param viewConfiguration
|
|
49
49
|
* @returns The context for table actions
|
|
50
50
|
*/
|
|
51
51
|
function generateStandardActionsContext(converterContext, creationMode, tableManifestConfiguration, viewConfiguration) {
|
|
@@ -67,8 +67,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
67
67
|
/**
|
|
68
68
|
* Checks if draft is supported.
|
|
69
69
|
*
|
|
70
|
-
* @param
|
|
71
|
-
* @returns
|
|
70
|
+
* @param converterContext
|
|
71
|
+
* @returns `true` if it is supported
|
|
72
72
|
*/
|
|
73
73
|
|
|
74
74
|
|
|
@@ -86,8 +86,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
86
86
|
/**
|
|
87
87
|
* Checks if sticky or draft is supported.
|
|
88
88
|
*
|
|
89
|
-
* @param
|
|
90
|
-
* @returns
|
|
89
|
+
* @param converterContext
|
|
90
|
+
* @returns `true` if it is supported
|
|
91
91
|
*/
|
|
92
92
|
|
|
93
93
|
|
|
@@ -103,8 +103,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
103
103
|
/**
|
|
104
104
|
* Gets the configured newAction into annotation.
|
|
105
105
|
*
|
|
106
|
-
* @param
|
|
107
|
-
* @returns
|
|
106
|
+
* @param converterContext
|
|
107
|
+
* @returns The new action info
|
|
108
108
|
*/
|
|
109
109
|
|
|
110
110
|
|
|
@@ -123,7 +123,7 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
123
123
|
availableProperty = availableProperty !== undefined ? availableProperty : true;
|
|
124
124
|
return {
|
|
125
125
|
name: newActionName,
|
|
126
|
-
available:
|
|
126
|
+
available: getExpressionFromAnnotation(availableProperty)
|
|
127
127
|
};
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -132,10 +132,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
132
132
|
/**
|
|
133
133
|
* Gets the binding expression for the action visibility configured into annotation.
|
|
134
134
|
*
|
|
135
|
-
* @param
|
|
136
|
-
* @param
|
|
137
|
-
* @param
|
|
138
|
-
* @returns
|
|
135
|
+
* @param converterContext
|
|
136
|
+
* @param sAnnotationTerm
|
|
137
|
+
* @param bWithNavigationPath
|
|
138
|
+
* @returns The binding expression for the action visibility
|
|
139
139
|
*/
|
|
140
140
|
|
|
141
141
|
|
|
@@ -150,15 +150,15 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
150
150
|
|
|
151
151
|
var visitedNavigationPaths = dataModelObjectPath.navigationProperties.length > 0 && bWithNavigationPath ? [dataModelObjectPath.navigationProperties[dataModelObjectPath.navigationProperties.length - 1].name] : [];
|
|
152
152
|
var actionAnnotationValue = (currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann11 = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann11 === void 0 ? void 0 : _currentEntitySet$ann11[sAnnotationTerm]) || false;
|
|
153
|
-
return currentEntitySet ?
|
|
153
|
+
return currentEntitySet ? getExpressionFromAnnotation(actionAnnotationValue, visitedNavigationPaths, undefined, function (path) {
|
|
154
154
|
return singletonPathVisitor(path, converterContext.getConvertedTypes(), visitedNavigationPaths);
|
|
155
155
|
}) : constant(false);
|
|
156
156
|
}
|
|
157
157
|
/**
|
|
158
158
|
* Gets the annotated restrictions for the actions.
|
|
159
159
|
*
|
|
160
|
-
* @param
|
|
161
|
-
* @returns
|
|
160
|
+
* @param converterContext
|
|
161
|
+
* @returns The restriction information
|
|
162
162
|
*/
|
|
163
163
|
|
|
164
164
|
|
|
@@ -199,10 +199,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
199
199
|
/**
|
|
200
200
|
* Checks if templating for insert/update actions is mandatory.
|
|
201
201
|
*
|
|
202
|
-
* @param
|
|
203
|
-
* @param
|
|
204
|
-
* @param
|
|
205
|
-
* @returns
|
|
202
|
+
* @param standardActionsContext
|
|
203
|
+
* @param isDraftOrSticky
|
|
204
|
+
* @param isCreateAlwaysHidden
|
|
205
|
+
* @returns The
|
|
206
206
|
*/
|
|
207
207
|
|
|
208
208
|
|
|
@@ -214,9 +214,9 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
214
214
|
/**
|
|
215
215
|
* Gets the binding expressions for the properties of the action Create.
|
|
216
216
|
*
|
|
217
|
-
* @param
|
|
218
|
-
* @param
|
|
219
|
-
* @returns
|
|
217
|
+
* @param converterContext
|
|
218
|
+
* @param standardActionsContext
|
|
219
|
+
* @returns The standard action info
|
|
220
220
|
*/
|
|
221
221
|
|
|
222
222
|
|
|
@@ -225,17 +225,17 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
225
225
|
function getStandardActionCreate(converterContext, standardActionsContext) {
|
|
226
226
|
var createVisibility = getCreateVisibility(converterContext, standardActionsContext);
|
|
227
227
|
return {
|
|
228
|
-
isTemplated:
|
|
229
|
-
visible:
|
|
230
|
-
enabled:
|
|
228
|
+
isTemplated: compileExpression(getCreateTemplating(standardActionsContext, createVisibility)),
|
|
229
|
+
visible: compileExpression(createVisibility),
|
|
230
|
+
enabled: compileExpression(getCreateEnablement(converterContext, standardActionsContext, createVisibility))
|
|
231
231
|
};
|
|
232
232
|
}
|
|
233
233
|
/**
|
|
234
234
|
* Gets the binding expressions for the properties of the action Delete.
|
|
235
235
|
*
|
|
236
|
-
* @param
|
|
237
|
-
* @param
|
|
238
|
-
* @returns
|
|
236
|
+
* @param converterContext
|
|
237
|
+
* @param standardActionsContext
|
|
238
|
+
* @returns The binding expressions for the properties of the action Delete.
|
|
239
239
|
*/
|
|
240
240
|
|
|
241
241
|
|
|
@@ -244,9 +244,9 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
244
244
|
function getStandardActionDelete(converterContext, standardActionsContext) {
|
|
245
245
|
var deleteVisibility = getDeleteVisibility(converterContext, standardActionsContext);
|
|
246
246
|
return {
|
|
247
|
-
isTemplated:
|
|
248
|
-
visible:
|
|
249
|
-
enabled:
|
|
247
|
+
isTemplated: compileExpression(getDefaultTemplating(deleteVisibility)),
|
|
248
|
+
visible: compileExpression(deleteVisibility),
|
|
249
|
+
enabled: compileExpression(getDeleteEnablement(converterContext, standardActionsContext, deleteVisibility))
|
|
250
250
|
};
|
|
251
251
|
}
|
|
252
252
|
/**
|
|
@@ -261,18 +261,18 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
261
261
|
function getCreationRow(converterContext, standardActionsContext) {
|
|
262
262
|
var creationRowVisibility = getCreateVisibility(converterContext, standardActionsContext, true);
|
|
263
263
|
return {
|
|
264
|
-
isTemplated:
|
|
265
|
-
visible:
|
|
266
|
-
enabled:
|
|
264
|
+
isTemplated: compileExpression(getCreateTemplating(standardActionsContext, creationRowVisibility, true)),
|
|
265
|
+
visible: compileExpression(creationRowVisibility),
|
|
266
|
+
enabled: compileExpression(getCreationRowEnablement(converterContext, standardActionsContext, creationRowVisibility))
|
|
267
267
|
};
|
|
268
268
|
}
|
|
269
269
|
/**
|
|
270
270
|
* Gets the binding expressions for the properties of the action Paste.
|
|
271
271
|
*
|
|
272
|
-
* @param
|
|
273
|
-
* @param
|
|
274
|
-
* @param
|
|
275
|
-
* @returns
|
|
272
|
+
* @param converterContext
|
|
273
|
+
* @param standardActionsContext
|
|
274
|
+
* @param isInsertUpdateActionsTemplated
|
|
275
|
+
* @returns The binding expressions for the properties of the action Paste.
|
|
276
276
|
*/
|
|
277
277
|
|
|
278
278
|
|
|
@@ -283,16 +283,16 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
283
283
|
var createEnablement = getCreateEnablement(converterContext, standardActionsContext, createVisibility);
|
|
284
284
|
var pasteVisibility = getPasteVisibility(converterContext, standardActionsContext, createVisibility, isInsertUpdateActionsTemplated);
|
|
285
285
|
return {
|
|
286
|
-
visible:
|
|
287
|
-
enabled:
|
|
286
|
+
visible: compileExpression(pasteVisibility),
|
|
287
|
+
enabled: compileExpression(getPasteEnablement(pasteVisibility, createEnablement))
|
|
288
288
|
};
|
|
289
289
|
}
|
|
290
290
|
/**
|
|
291
291
|
* Gets the binding expressions for the properties of the action MassEdit.
|
|
292
292
|
*
|
|
293
|
-
* @param
|
|
294
|
-
* @param
|
|
295
|
-
* @returns
|
|
293
|
+
* @param converterContext
|
|
294
|
+
* @param standardActionsContext
|
|
295
|
+
* @returns The binding expressions for the properties of the action MassEdit.
|
|
296
296
|
*/
|
|
297
297
|
|
|
298
298
|
|
|
@@ -301,18 +301,18 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
301
301
|
function getStandardActionMassEdit(converterContext, standardActionsContext) {
|
|
302
302
|
var massEditVisibility = getMassEditVisibility(converterContext, standardActionsContext);
|
|
303
303
|
return {
|
|
304
|
-
isTemplated:
|
|
305
|
-
visible:
|
|
306
|
-
enabled:
|
|
304
|
+
isTemplated: compileExpression(getDefaultTemplating(massEditVisibility)),
|
|
305
|
+
visible: compileExpression(massEditVisibility),
|
|
306
|
+
enabled: compileExpression(getMassEditEnablement(converterContext, standardActionsContext, massEditVisibility))
|
|
307
307
|
};
|
|
308
308
|
}
|
|
309
309
|
/**
|
|
310
310
|
* Gets the binding expression for the templating of the action Create.
|
|
311
311
|
*
|
|
312
|
-
* @param
|
|
313
|
-
* @param
|
|
314
|
-
* @param
|
|
315
|
-
* @returns
|
|
312
|
+
* @param standardActionsContext
|
|
313
|
+
* @param createVisibility
|
|
314
|
+
* @param isForCreationRow
|
|
315
|
+
* @returns The create binding expression
|
|
316
316
|
*/
|
|
317
317
|
|
|
318
318
|
|
|
@@ -330,8 +330,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
330
330
|
/**
|
|
331
331
|
* Gets the binding expression for the templating of the non-Create actions.
|
|
332
332
|
*
|
|
333
|
-
* @param
|
|
334
|
-
* @returns
|
|
333
|
+
* @param actionVisibility
|
|
334
|
+
* @returns The binding expression for the templating of the non-Create actions.
|
|
335
335
|
*/
|
|
336
336
|
|
|
337
337
|
|
|
@@ -343,10 +343,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
343
343
|
/**
|
|
344
344
|
* Gets the binding expression for the property visible of the action Create.
|
|
345
345
|
*
|
|
346
|
-
* @param
|
|
347
|
-
* @param
|
|
348
|
-
* @param
|
|
349
|
-
* @returns
|
|
346
|
+
* @param converterContext
|
|
347
|
+
* @param standardActionsContext
|
|
348
|
+
* @param isForCreationRow
|
|
349
|
+
* @returns The binding expression for the property visible of the action Create.
|
|
350
350
|
*/
|
|
351
351
|
|
|
352
352
|
|
|
@@ -377,14 +377,14 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
377
377
|
// - Otherwise
|
|
378
378
|
// - This depends on the value of the the UI.IsEditable
|
|
379
379
|
|
|
380
|
-
return ifElse(standardActionsContext.creationMode === CreationMode.External, and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable)), ifElse(or(and(isConstant(newAction === null || newAction === void 0 ? void 0 : newAction.available), equal(newAction === null || newAction === void 0 ? void 0 : newAction.available, false)), and(isConstant(isInsertable), equal(isInsertable, false), !newAction), and(isConstant(isCreateHidden), equal(isCreateHidden, true)), standardActionsContext.isViewWithMultipleVisualizations, converterContext.getTemplateType() === TemplateType.AnalyticalListPage, and(standardActionsContext.creationMode === CreationMode.InlineCreationRows, ((_standardActionsConte = standardActionsContext.tableManifestConfiguration) === null || _standardActionsConte === void 0 ? void 0 : _standardActionsConte.type) === "ResponsiveTable")), false, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, or(not(
|
|
380
|
+
return ifElse(standardActionsContext.creationMode === CreationMode.External, and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable)), ifElse(or(and(isConstant(newAction === null || newAction === void 0 ? void 0 : newAction.available), equal(newAction === null || newAction === void 0 ? void 0 : newAction.available, false)), and(isConstant(isInsertable), equal(isInsertable, false), !newAction), and(isConstant(isCreateHidden), equal(isCreateHidden, true)), standardActionsContext.isViewWithMultipleVisualizations, converterContext.getTemplateType() === TemplateType.AnalyticalListPage, and(standardActionsContext.creationMode === CreationMode.InlineCreationRows, ((_standardActionsConte = standardActionsContext.tableManifestConfiguration) === null || _standardActionsConte === void 0 ? void 0 : _standardActionsConte.type) === "ResponsiveTable")), false, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, or(not(isPathInModelExpression(isCreateHidden)), not(isCreateHidden)), and(not(isCreateHidden), UI.IsEditable))));
|
|
381
381
|
}
|
|
382
382
|
/**
|
|
383
383
|
* Gets the binding expression for the property visible of the action Delete.
|
|
384
384
|
*
|
|
385
|
-
* @param
|
|
386
|
-
* @param
|
|
387
|
-
* @returns
|
|
385
|
+
* @param converterContext
|
|
386
|
+
* @param standardActionsContext
|
|
387
|
+
* @returns The binding expression for the property visible of the action Delete.
|
|
388
388
|
*/
|
|
389
389
|
|
|
390
390
|
|
|
@@ -405,16 +405,16 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
405
405
|
// - If UI.DeleteHidden points to a property path -> provide a negated binding to this path
|
|
406
406
|
// - Otherwise, delete is visible
|
|
407
407
|
|
|
408
|
-
return ifElse(or(standardActionsContext.isViewWithMultipleVisualizations, converterContext.getTemplateType() === TemplateType.AnalyticalListPage), false, ifElse(and(isConstant(pathDeletableExpression), equal(pathDeletableExpression, false)), false, ifElse(and(isConstant(isDeleteHidden), equal(isDeleteHidden, constant(true))), false, ifElse(converterContext.getTemplateType() !== TemplateType.ListReport, and(not(isDeleteHidden), UI.IsEditable), not(and(
|
|
408
|
+
return ifElse(or(standardActionsContext.isViewWithMultipleVisualizations, converterContext.getTemplateType() === TemplateType.AnalyticalListPage), false, ifElse(and(isConstant(pathDeletableExpression), equal(pathDeletableExpression, false)), false, ifElse(and(isConstant(isDeleteHidden), equal(isDeleteHidden, constant(true))), false, ifElse(converterContext.getTemplateType() !== TemplateType.ListReport, and(not(isDeleteHidden), UI.IsEditable), not(and(isPathInModelExpression(isDeleteHidden), isDeleteHidden))))));
|
|
409
409
|
}
|
|
410
410
|
/**
|
|
411
411
|
* Gets the binding expression for the property visible of the action Paste.
|
|
412
412
|
*
|
|
413
|
-
* @param
|
|
414
|
-
* @param
|
|
415
|
-
* @param
|
|
416
|
-
* @param
|
|
417
|
-
* @returns
|
|
413
|
+
* @param converterContext
|
|
414
|
+
* @param standardActionsContext
|
|
415
|
+
* @param createVisibility
|
|
416
|
+
* @param isInsertUpdateActionsTemplated
|
|
417
|
+
* @returns The binding expression for the property visible of the action Paste.
|
|
418
418
|
*/
|
|
419
419
|
|
|
420
420
|
|
|
@@ -429,9 +429,9 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
429
429
|
/**
|
|
430
430
|
* Gets the binding expression for the property visible of the action MassEdit.
|
|
431
431
|
*
|
|
432
|
-
* @param
|
|
433
|
-
* @param
|
|
434
|
-
* @returns
|
|
432
|
+
* @param converterContext
|
|
433
|
+
* @param standardActionsContext
|
|
434
|
+
* @returns The binding expression for the property visible of the action MassEdit
|
|
435
435
|
*/
|
|
436
436
|
|
|
437
437
|
|
|
@@ -456,10 +456,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
456
456
|
/**
|
|
457
457
|
* Gets the binding expression for the property enabled of the creationRow.
|
|
458
458
|
*
|
|
459
|
-
* @param
|
|
460
|
-
* @param
|
|
461
|
-
* @param
|
|
462
|
-
* @returns
|
|
459
|
+
* @param converterContext
|
|
460
|
+
* @param standardActionsContext
|
|
461
|
+
* @param creationRowVisibility
|
|
462
|
+
* @returns The binding expression for the property enabled of the creationRow.
|
|
463
463
|
*/
|
|
464
464
|
|
|
465
465
|
|
|
@@ -493,15 +493,15 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
493
493
|
return singletonPathVisitor(path, converterContext.getConvertedTypes(), []);
|
|
494
494
|
}
|
|
495
495
|
}) : restrictionsInsertable;
|
|
496
|
-
return and(creationRowVisibility, isInsertable, or(!standardActionsContext.tableManifestConfiguration.disableAddRowButtonForEmptyData, formatResult([
|
|
496
|
+
return and(creationRowVisibility, isInsertable, or(!standardActionsContext.tableManifestConfiguration.disableAddRowButtonForEmptyData, formatResult([pathInModel("creationRowFieldValidity", "internal")], tableFormatters.validateCreationRowFields)));
|
|
497
497
|
}
|
|
498
498
|
/**
|
|
499
499
|
* Gets the binding expression for the property enabled of the action Create.
|
|
500
500
|
*
|
|
501
|
-
* @param
|
|
502
|
-
* @param
|
|
503
|
-
* @param
|
|
504
|
-
* @returns
|
|
501
|
+
* @param converterContext
|
|
502
|
+
* @param standardActionsContext
|
|
503
|
+
* @param createVisibility
|
|
504
|
+
* @returns The binding expression for the property enabled of the action Create.
|
|
505
505
|
*/
|
|
506
506
|
|
|
507
507
|
|
|
@@ -517,10 +517,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
517
517
|
/**
|
|
518
518
|
* Gets the binding expression for the property enabled of the action Delete.
|
|
519
519
|
*
|
|
520
|
-
* @param
|
|
521
|
-
* @param
|
|
522
|
-
* @param
|
|
523
|
-
* @returns
|
|
520
|
+
* @param converterContext
|
|
521
|
+
* @param standardActionsContext
|
|
522
|
+
* @param deleteVisibility
|
|
523
|
+
* @returns The binding expression for the property enabled of the action Delete.
|
|
524
524
|
*/
|
|
525
525
|
|
|
526
526
|
|
|
@@ -529,17 +529,17 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
529
529
|
function getDeleteEnablement(converterContext, standardActionsContext, deleteVisibility) {
|
|
530
530
|
var isDeletable = standardActionsContext.restrictions.isDeletable.expression;
|
|
531
531
|
var isOnlyDynamicOnCurrentEntity = !isConstant(isDeletable) && standardActionsContext.restrictions.isDeletable.navigationExpression._type === "Unresolvable";
|
|
532
|
-
var numberOfSelectedContexts =
|
|
533
|
-
var numberOfDeletableContexts =
|
|
534
|
-
var numberOfUnSavedContexts =
|
|
535
|
-
return and(deleteVisibility, ifElse(or(converterContext.getTemplateType() !== TemplateType.ObjectPage, isOnlyDynamicOnCurrentEntity), and(or(and(notEqual(numberOfDeletableContexts, undefined), greaterThan(length(numberOfDeletableContexts), 0)), and(notEqual(numberOfUnSavedContexts, undefined), greaterThan(length(numberOfUnSavedContexts), 0))),
|
|
532
|
+
var numberOfSelectedContexts = pathInModel("numberOfSelectedContexts", "internal");
|
|
533
|
+
var numberOfDeletableContexts = pathInModel("deletableContexts", "internal");
|
|
534
|
+
var numberOfUnSavedContexts = pathInModel("unSavedContexts", "internal");
|
|
535
|
+
return and(deleteVisibility, ifElse(or(converterContext.getTemplateType() !== TemplateType.ObjectPage, isOnlyDynamicOnCurrentEntity), and(or(and(notEqual(numberOfDeletableContexts, undefined), greaterThan(length(numberOfDeletableContexts), 0)), and(notEqual(numberOfUnSavedContexts, undefined), greaterThan(length(numberOfUnSavedContexts), 0))), pathInModel("deleteEnabled", "internal")), and(notEqual(numberOfSelectedContexts, 0), isDeletable)));
|
|
536
536
|
}
|
|
537
537
|
/**
|
|
538
538
|
* Gets the binding expression for the property enabled of the action Paste.
|
|
539
539
|
*
|
|
540
|
-
* @param
|
|
541
|
-
* @param
|
|
542
|
-
* @returns
|
|
540
|
+
* @param pasteVisibility
|
|
541
|
+
* @param createEnablement
|
|
542
|
+
* @returns The binding expression for the property enabled of the action Paste.
|
|
543
543
|
*/
|
|
544
544
|
|
|
545
545
|
|
|
@@ -551,10 +551,10 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
551
551
|
/**
|
|
552
552
|
* Gets the binding expression for the property enabled of the action MassEdit.
|
|
553
553
|
*
|
|
554
|
-
* @param
|
|
555
|
-
* @param
|
|
556
|
-
* @param
|
|
557
|
-
* @returns
|
|
554
|
+
* @param converterContext
|
|
555
|
+
* @param standardActionsContext
|
|
556
|
+
* @param massEditVisibility
|
|
557
|
+
* @returns The binding expression for the property enabled of the action MassEdit.
|
|
558
558
|
*/
|
|
559
559
|
|
|
560
560
|
|
|
@@ -563,8 +563,8 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
563
563
|
function getMassEditEnablement(converterContext, standardActionsContext, massEditVisibility) {
|
|
564
564
|
var pathUpdatableExpression = standardActionsContext.restrictions.isUpdatable.expression;
|
|
565
565
|
var isOnlyDynamicOnCurrentEntity = !isConstant(pathUpdatableExpression) && standardActionsContext.restrictions.isUpdatable.navigationExpression._type === "Unresolvable";
|
|
566
|
-
var numberOfSelectedContexts = greaterOrEqual(
|
|
567
|
-
var numberOfUpdatableContexts = greaterOrEqual(length(
|
|
566
|
+
var numberOfSelectedContexts = greaterOrEqual(pathInModel("numberOfSelectedContexts", "internal"), 1);
|
|
567
|
+
var numberOfUpdatableContexts = greaterOrEqual(length(pathInModel("updatableContexts", "internal")), 1);
|
|
568
568
|
var bIsDraftSupported = isDraftSupported(converterContext);
|
|
569
569
|
var bDisplayMode = isInDisplayMode(converterContext); // numberOfUpdatableContexts needs to be added to the binding in case
|
|
570
570
|
// 1. Update is dependent on current entity property (isOnlyDynamicOnCurrentEntity is true).
|
|
@@ -577,9 +577,9 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
577
577
|
/**
|
|
578
578
|
* Tells if the table in template is in display mode.
|
|
579
579
|
*
|
|
580
|
-
* @param
|
|
581
|
-
* @param
|
|
582
|
-
* @returns
|
|
580
|
+
* @param converterContext
|
|
581
|
+
* @param viewConfiguration
|
|
582
|
+
* @returns `true` if the table is in display mode
|
|
583
583
|
*/
|
|
584
584
|
|
|
585
585
|
|
|
@@ -599,4 +599,4 @@ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/helpers/Bin
|
|
|
599
599
|
_exports.isInDisplayMode = isInDisplayMode;
|
|
600
600
|
return _exports;
|
|
601
601
|
}, false);
|
|
602
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN0YW5kYXJkQWN0aW9ucy50cyJdLCJuYW1lcyI6WyJBbm5vdGF0aW9uSGlkZGVuUHJvcGVydHkiLCJnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJjb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRpb25Nb2RlIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJ2aWV3Q29uZmlndXJhdGlvbiIsImNvbGxlY3Rpb25QYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiY3JlYXRlIiwiaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4iLCJDcmVhdGVIaWRkZW4iLCJEZWxldGVIaWRkZW4iLCJ1cGRhdGUiLCJVcGRhdGVIaWRkZW4iLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldE1hbmlmZXN0V3JhcHBlciIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJuZXdBY3Rpb24iLCJnZXROZXdBY3Rpb24iLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiRHJhZnROb2RlIiwiYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCIsInRhcmdldE9iamVjdCIsImNvbnRhaW5zVGFyZ2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJiSXNEcmFmdFN1cHBvcnRlZCIsImJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIm5ld0FjdGlvbk5hbWUiLCJOZXdBY3Rpb24iLCJ0b1N0cmluZyIsImF2YWlsYWJsZVByb3BlcnR5IiwiZ2V0RW50aXR5VHlwZSIsImFjdGlvbnMiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwidW5kZWZpbmVkIiwibmFtZSIsImF2YWlsYWJsZSIsImFubm90YXRpb25FeHByZXNzaW9uIiwic0Fubm90YXRpb25UZXJtIiwiYldpdGhOYXZpZ2F0aW9uUGF0aCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJsZW5ndGgiLCJhY3Rpb25Bbm5vdGF0aW9uVmFsdWUiLCJVSSIsInBhdGgiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImdldENvbnZlcnRlZFR5cGVzIiwiY29uc3RhbnQiLCJyZXN0cmljdGlvbnNEZWYiLCJrZXkiLCJpc1BhdGhJbnNlcnRhYmxlIiwiaXNQYXRoVXBkYXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwicmVzdWx0IiwiZm9yRWFjaCIsImRlZiIsImRlZkZ1bmN0aW9uIiwiZXhwcmVzc2lvbiIsImFwcGx5IiwicGF0aFZpc2l0b3IiLCJuYXZpZ2F0aW9uUGF0aHMiLCJuYXZpZ2F0aW9uRXhwcmVzc2lvbiIsImlnbm9yZVRhcmdldENvbGxlY3Rpb24iLCJhdXRob3JpemVVbnJlc29sdmFibGUiLCJnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyIsInN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJpc0RyYWZ0T3JTdGlja3kiLCJpc0NyZWF0ZUFsd2F5c0hpZGRlbiIsIkNyZWF0aW9uTW9kZSIsIkV4dGVybmFsIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJjcmVhdGVWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsImlzVGVtcGxhdGVkIiwiY29tcGlsZUJpbmRpbmciLCJnZXRDcmVhdGVUZW1wbGF0aW5nIiwidmlzaWJsZSIsImVuYWJsZWQiLCJnZXRDcmVhdGVFbmFibGVtZW50IiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJkZWxldGVWaXNpYmlsaXR5IiwiZ2V0RGVsZXRlVmlzaWJpbGl0eSIsImdldERlZmF1bHRUZW1wbGF0aW5nIiwiZ2V0RGVsZXRlRW5hYmxlbWVudCIsImdldENyZWF0aW9uUm93IiwiY3JlYXRpb25Sb3dWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRpb25Sb3dFbmFibGVtZW50IiwiZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSIsImlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJwYXN0ZVZpc2liaWxpdHkiLCJnZXRQYXN0ZVZpc2liaWxpdHkiLCJnZXRQYXN0ZUVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwibWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRFbmFibGVtZW50IiwiaXNGb3JDcmVhdGlvblJvdyIsImFuZCIsIm9yIiwiQ3JlYXRpb25Sb3ciLCJub3QiLCJpc0NvbnN0YW50IiwiYWN0aW9uVmlzaWJpbGl0eSIsImlzSW5zZXJ0YWJsZSIsImlzQ3JlYXRlSGlkZGVuIiwiaWZFbHNlIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiTGlzdFJlcG9ydCIsIklzRWRpdGFibGUiLCJlcXVhbCIsIkFuYWx5dGljYWxMaXN0UGFnZSIsIklubGluZUNyZWF0aW9uUm93cyIsInR5cGUiLCJpc0JpbmRpbmciLCJpc0RlbGV0ZUhpZGRlbiIsImRlbGV0ZSIsInBhdGhEZWxldGFibGVFeHByZXNzaW9uIiwiaXNEZWxldGFibGUiLCJub3RFcXVhbCIsImVuYWJsZVBhc3RlIiwiaW5kZXhPZiIsImlzVXBkYXRlSGlkZGVuIiwicGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1VwZGF0YWJsZSIsImJNYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0IiwiZW5hYmxlTWFzc0VkaXQiLCJ0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uIiwiT2JqZWN0UGFnZSIsInJlc3RyaWN0aW9uc0luc2VydGFibGUiLCJwYXJ0bmVyIiwiX3R5cGUiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZm9ybWF0UmVzdWx0IiwiYmluZGluZ0V4cHJlc3Npb24iLCJ0YWJsZUZvcm1hdHRlcnMiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiQ29sbGVjdGlvblR5cGUiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwidGFyZ2V0IiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsIm51bWJlck9mRGVsZXRhYmxlQ29udGV4dHMiLCJudW1iZXJPZlVuU2F2ZWRDb250ZXh0cyIsImdyZWF0ZXJUaGFuIiwiZ3JlYXRlck9yRXF1YWwiLCJudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzIiwiYkRpc3BsYXlNb2RlIiwiaXNJbkRpc3BsYXlNb2RlIiwicnVudGltZUJpbmRpbmciLCJ0ZW1wbGF0ZVR5cGUiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTBCS0Esd0I7O2FBQUFBLHdCO0FBQUFBLElBQUFBLHdCO0FBQUFBLElBQUFBLHdCO0FBQUFBLElBQUFBLHdCO0tBQUFBLHdCLEtBQUFBLHdCOztBQW9DTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxXQUFTQyw4QkFBVCxDQUNOQyxnQkFETSxFQUVOQyxZQUZNLEVBR05DLDBCQUhNLEVBSU5DLGlCQUpNLEVBS21CO0FBQ3pCLFdBQU87QUFDTkMsTUFBQUEsY0FBYyxFQUFFQyxtQkFBbUIsQ0FBQ0wsZ0JBQWdCLENBQUNNLHNCQUFqQixFQUFELENBRDdCO0FBRU5DLE1BQUFBLGdCQUFnQixFQUFFO0FBQ2pCQyxRQUFBQSxNQUFNLEVBQUVDLHVCQUF1QixDQUFDVCxnQkFBRCxFQUFtQkYsd0JBQXdCLENBQUNZLFlBQTVDLENBRGQ7QUFFakIsa0JBQVVELHVCQUF1QixDQUFDVCxnQkFBRCxFQUFtQkYsd0JBQXdCLENBQUNhLFlBQTVDLENBRmhC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Q3ZILFFBQU1tSyxZQUFZLEdBQUd0SyxnQkFBZ0IsQ0FBQzBILGVBQWpCLEVBQXJCOztBQUNBLFFBQ0M0QyxZQUFZLEtBQUszQyxZQUFZLENBQUNDLFVBQTlCLElBQ0EwQyxZQUFZLEtBQUszQyxZQUFZLENBQUNJLGtCQUQ5QixJQUVDNUgsaUJBQWlCLElBQUlILGdCQUFnQixDQUFDZ0Isa0JBQWpCLEdBQXNDQyx5QkFBdEMsQ0FBZ0VkLGlCQUFoRSxDQUh2QixFQUlFO0FBQ0QsYUFBTyxJQUFQO0FBQ0EsS0FSc0gsQ0FTdkg7OztBQUNBLFdBQU8sS0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRFeHByZXNzaW9uLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdyZWF0ZXJPckVxdWFsLFxuXHRncmVhdGVyVGhhbixcblx0aWZFbHNlLFxuXHRpc0JpbmRpbmcsXG5cdGlzQ29uc3RhbnQsXG5cdGxlbmd0aCxcblx0bm90LFxuXHRub3RFcXVhbCxcblx0b3Jcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IGdldFRhcmdldE9iamVjdFBhdGgsIGlzUGF0aERlbGV0YWJsZSwgaXNQYXRoSW5zZXJ0YWJsZSwgaXNQYXRoVXBkYXRhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IHNpbmdsZXRvblBhdGhWaXNpdG9yLCBVSSB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSwgVGVtcGxhdGVUeXBlLCBWaWV3UGF0aENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9UYWJsZVwiO1xuXG5lbnVtIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eSB7XG5cdENyZWF0ZUhpZGRlbiA9IFwiQ3JlYXRlSGlkZGVuXCIsXG5cdERlbGV0ZUhpZGRlbiA9IFwiRGVsZXRlSGlkZGVuXCIsXG5cdFVwZGF0ZUhpZGRlbiA9IFwiVXBkYXRlSGlkZGVuXCJcbn1cblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlID0ge1xuXHRpc1RlbXBsYXRlZD86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR2aXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZW5hYmxlZDogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG50eXBlIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlID0ge1xuXHRleHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRuYXZpZ2F0aW9uRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG50eXBlIFN0YW5kYXJkQWN0aW9uc1Jlc3RyaWN0aW9uc1R5cGUgPSBSZWNvcmQ8c3RyaW5nLCBFeHByZXNzaW9uUmVzdHJpY3Rpb25zVHlwZT47XG5cbmV4cG9ydCB0eXBlIFN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSB7XG5cdGNvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdGhpZGRlbkFubm90YXRpb246IHtcblx0XHRjcmVhdGU6IEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0XCJkZWxldGVcIjogRXhwcmVzc2lvbjxib29sZWFuPjtcblx0XHR1cGRhdGU6IEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cdGlzVmlld1dpdGhNdWx0aXBsZVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiB7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHRhdmFpbGFibGU/OiBFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0cmVzdHJpY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRleHQgZm9yIHRoZSBzdGFuZGFyZCBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBjcmVhdGlvbk1vZGVcbiAqIEBwYXJhbSB7VGFibGVDb250cm9sQ29uZmlndXJhdGlvbn0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB7Vmlld1BhdGhDb25maWd1cmF0aW9ufSB2aWV3Q29uZmlndXJhdGlvblxuICogQHJldHVybnMgIFRoZSBjb250ZXh0IGZvciB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQge1xuXHRyZXR1cm4ge1xuXHRcdGNvbGxlY3Rpb25QYXRoOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0XHRjcmVhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eS5DcmVhdGVIaWRkZW4pLFxuXHRcdFx0XCJkZWxldGVcIjogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgQW5ub3RhdGlvbkhpZGRlblByb3BlcnR5LkRlbGV0ZUhpZGRlbiksXG5cdFx0XHR1cGRhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eS5VcGRhdGVIaWRkZW4pXG5cdFx0fSxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9uczogdmlld0NvbmZpZ3VyYXRpb25cblx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKVxuXHRcdFx0OiBmYWxzZSxcblx0XHRuZXdBY3Rpb246IGdldE5ld0FjdGlvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0cmVzdHJpY3Rpb25zOiBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZHJhZnQgaXMgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGJJc0RyYWZ0Um9vdCA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0Tm9kZSA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdD8uY29udGFpbnNUYXJnZXQgJiZcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZSlcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblxuXHRyZXR1cm4gYklzRHJhZnRSb290IHx8IGJJc0RyYWZ0Tm9kZSB8fCAoIWNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgJiYgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHN0aWNreSBvciBkcmFmdCBpcyBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IGJJc0RyYWZ0U3VwcG9ydGVkID0gaXNEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uU2Vzc2lvblxuXHRcdD8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFxuXHRcdD8gdHJ1ZVxuXHRcdDogZmFsc2U7XG5cblx0cmV0dXJuIGJJc0RyYWZ0U3VwcG9ydGVkIHx8IGJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJlZCBuZXdBY3Rpb24gaW50byBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0FjdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYW55IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG5ld0FjdGlvbk5hbWU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gPSAoXG5cdFx0Y3VycmVudEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24gfHxcblx0XHRjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uXG5cdCk/LnRvU3RyaW5nKCk7XG5cdGlmIChuZXdBY3Rpb25OYW1lKSB7XG5cdFx0bGV0IGF2YWlsYWJsZVByb3BlcnR5OiBhbnkgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYWN0aW9uc1tuZXdBY3Rpb25OYW1lXT8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZTtcblx0XHRhdmFpbGFibGVQcm9wZXJ0eSA9IGF2YWlsYWJsZVByb3BlcnR5ICE9PSB1bmRlZmluZWQgPyBhdmFpbGFibGVQcm9wZXJ0eSA6IHRydWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IG5ld0FjdGlvbk5hbWUsXG5cdFx0XHRhdmFpbGFibGU6IGFubm90YXRpb25FeHByZXNzaW9uKGF2YWlsYWJsZVByb3BlcnR5KVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eSBjb25maWd1cmVkIGludG8gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzQW5ub3RhdGlvblRlcm1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYldpdGhOYXZpZ2F0aW9uUGF0aFxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c0Fubm90YXRpb25UZXJtOiBzdHJpbmcsXG5cdGJXaXRoTmF2aWdhdGlvblBhdGggPSB0cnVlXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Ly8gQ29uc2lkZXIgb25seSB0aGUgbGFzdCBsZXZlbCBvZiBuYXZpZ2F0aW9uLiBUaGUgb3RoZXJzIGFyZSBhbHJlYWR5IGNvbnNpZGVyZWQgaW4gdGhlIGVsZW1lbnQgYmluZGluZyBvZiB0aGUgcGFnZS5cblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9XG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggPiAwICYmIGJXaXRoTmF2aWdhdGlvblBhdGhcblx0XHRcdD8gW2RhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXNbZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXS5uYW1lXVxuXHRcdFx0OiBbXTtcblx0Y29uc3QgYWN0aW9uQW5ub3RhdGlvblZhbHVlID1cblx0XHQoKGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJIGFzIGFueSk/LltzQW5ub3RhdGlvblRlcm1dIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+KSB8fCBmYWxzZTtcblxuXHRyZXR1cm4gY3VycmVudEVudGl0eVNldFxuXHRcdD8gYW5ub3RhdGlvbkV4cHJlc3Npb24oYWN0aW9uQW5ub3RhdGlvblZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCB1bmRlZmluZWQsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQgIClcblx0XHQ6IGNvbnN0YW50KGZhbHNlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBhbm5vdGF0ZWQgcmVzdHJpY3Rpb25zIGZvciB0aGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCByZXN0cmljdGlvbnNEZWYgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzSW5zZXJ0YWJsZVwiLFxuXHRcdFx0XCJmdW5jdGlvblwiOiBpc1BhdGhJbnNlcnRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNVcGRhdGFibGVcIixcblx0XHRcdFwiZnVuY3Rpb25cIjogaXNQYXRoVXBkYXRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNEZWxldGFibGVcIixcblx0XHRcdFwiZnVuY3Rpb25cIjogaXNQYXRoRGVsZXRhYmxlXG5cdFx0fVxuXHRdO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPiA9IHt9O1xuXHRyZXN0cmljdGlvbnNEZWYuZm9yRWFjaChmdW5jdGlvbiAoZGVmKSB7XG5cdFx0Y29uc3QgZGVmRnVuY3Rpb24gPSBkZWZbXCJmdW5jdGlvblwiXTtcblx0XHRyZXN1bHRbZGVmLmtleV0gPSB7XG5cdFx0XHRleHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKSxcblx0XHRcdG5hdmlnYXRpb25FeHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKVxuXHRcdH07XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0ZW1wbGF0aW5nIGZvciBpbnNlcnQvdXBkYXRlIGFjdGlvbnMgaXMgbWFuZGF0b3J5LlxuICpcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHtib29sZWFufSBpc0RyYWZ0T3JTdGlja3lcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNDcmVhdGVBbHdheXNIaWRkZW5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRHJhZnRPclN0aWNreTogYm9vbGVhbixcblx0aXNDcmVhdGVBbHdheXNIaWRkZW46IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKGlzRHJhZnRPclN0aWNreSB8fCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsKSAmJiAhaXNDcmVhdGVBbHdheXNIaWRkZW47XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIHtTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIHtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVCaW5kaW5nKGdldENyZWF0ZVRlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKGNyZWF0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVCaW5kaW5nKGdldENyZWF0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBEZWxldGUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIHtTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIHtcblx0Y29uc3QgZGVsZXRlVmlzaWJpbGl0eSA9IGdldERlbGV0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUJpbmRpbmcoZ2V0RGVmYXVsdFRlbXBsYXRpbmcoZGVsZXRlVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKGRlbGV0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVCaW5kaW5nKGdldERlbGV0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZGVsZXRlVmlzaWJpbGl0eSkpXG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUge1xuXHRjb25zdCBjcmVhdGlvblJvd1Zpc2liaWxpdHkgPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpO1xuXG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVCaW5kaW5nKGdldENyZWF0ZVRlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRpb25Sb3dWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoY3JlYXRpb25Sb3dWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlQmluZGluZyhnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRpb25Sb3dWaXNpYmlsaXR5KSlcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgYWN0aW9uIFBhc3RlLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtTdGFuZGFyZEFjdGlvbnNDb250ZXh0fSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZFxuICogQHJldHVybnMge1N0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIHtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNyZWF0ZUVuYWJsZW1lbnQgPSBnZXRDcmVhdGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0ZVZpc2liaWxpdHkpO1xuXHRjb25zdCBwYXN0ZVZpc2liaWxpdHkgPSBnZXRQYXN0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSwgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKTtcblx0cmV0dXJuIHtcblx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhwYXN0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVCaW5kaW5nKGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHksIGNyZWF0ZUVuYWJsZW1lbnQpKVxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhY3Rpb24gTWFzc0VkaXQuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIHtTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUge1xuXHRjb25zdCBtYXNzRWRpdFZpc2liaWxpdHkgPSBnZXRNYXNzRWRpdFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUJpbmRpbmcoZ2V0RGVmYXVsdFRlbXBsYXRpbmcobWFzc0VkaXRWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobWFzc0VkaXRWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlQmluZGluZyhnZXRNYXNzRWRpdEVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgbWFzc0VkaXRWaXNpYmlsaXR5KSlcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSBhY3Rpb24gQ3JlYXRlLlxuICpcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRm9yQ3JlYXRpb25Sb3dcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVRlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZVxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vVGVtcGxhdGluZyBvZiBDcmVhdGUgQnV0dG9uIGlzIG5vdCBkb25lOlxuXHQvLyBcdCAtIElmIEJ1dHRvbiBpcyBuZXZlciB2aXNpYmxlKGNvdmVyZWQgdGhlIEV4dGVybmFsIGNyZWF0ZSBidXR0b24sIG5ldyBBY3Rpb24pXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0ZSBCdXR0b25cblx0Ly9cdCAtIG9yIENyZWF0aW9uTW9kZSBpcyBub3Qgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0aW9uUm93IEJ1dHRvblxuXG5cdHJldHVybiBhbmQoXG5cdFx0Ly9YTk9SIGdhdGVcblx0XHRvcihcblx0XHRcdGFuZChpc0ZvckNyZWF0aW9uUm93LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93KSxcblx0XHRcdGFuZCghaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdylcblx0XHQpLFxuXHRcdG9yKG5vdChpc0NvbnN0YW50KGNyZWF0ZVZpc2liaWxpdHkpKSwgY3JlYXRlVmlzaWJpbGl0eSlcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSBub24tQ3JlYXRlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBhY3Rpb25WaXNpYmlsaXR5XG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VGVtcGxhdGluZyhhY3Rpb25WaXNpYmlsaXR5OiBFeHByZXNzaW9uPGJvb2xlYW4+KTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBvcihub3QoaXNDb25zdGFudChhY3Rpb25WaXNpYmlsaXR5KSksIGFjdGlvblZpc2liaWxpdHkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHZpc2libGUgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGb3JDcmVhdGlvblJvd1xuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj4gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0aXNGb3JDcmVhdGlvblJvdyA9IGZhbHNlXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNJbnNlcnRhYmxlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNJbnNlcnRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IGlzQ3JlYXRlSGlkZGVuID0gaXNGb3JDcmVhdGlvblJvd1xuXHRcdD8gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgQW5ub3RhdGlvbkhpZGRlblByb3BlcnR5LkNyZWF0ZUhpZGRlbiwgZmFsc2UpXG5cdFx0OiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlO1xuXHRjb25zdCBuZXdBY3Rpb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0Lm5ld0FjdGlvbjtcblx0Ly9DcmVhdGUgQnV0dG9uIGlzIHZpc2libGU6XG5cdC8vIFx0IC0gSWYgdGhlIGNyZWF0aW9uIG1vZGUgaXMgZXh0ZXJuYWxcblx0Ly8gICAgICAtIElmIHdlJ3JlIG9uIHRoZSBsaXN0IHJlcG9ydCBhbmQgY3JlYXRlIGlzIG5vdCBoaWRkZW5cblx0Ly9cdFx0LSBPdGhlcndpc2UgdGhpcyBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdGhlIFVJLklzRWRpdGFibGVcblx0Ly9cdCAtIE90aGVyd2lzZVxuXHQvL1x0XHQtIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdmFsaWQgdGhlbiBjcmVhdGUgYnV0dG9uIGlzbid0IHZpc2libGVcblx0Ly9cdFx0XHQtIG5vIG5ld0FjdGlvbiBhdmFpbGFibGVzXG5cdC8vXHRcdFx0LSBJdCdzIG5vdCBpbnNlcnRhYmxlIGFuZCB0aGVyZSBpcyBub3QgYSBuZXcgYWN0aW9uXG5cdC8vXHRcdFx0LSBjcmVhdGUgaXMgaGlkZGVuXG5cdC8vXHRcdFx0LSBUaGVyZSBhcmUgbXVsdGlwbGUgdmlzaWFsaXphdGlvbnNcblx0Ly9cdFx0XHQtIEl0J3MgYW4gQW5hbHl0aWNhbCBMaXN0IFBhZ2Vcblx0Ly9cdFx0XHQtIFVzZXMgSW5saW5lQ3JlYXRpb25Sb3dzIG1vZGUgYW5kIGEgUmVzcG9zaXZlIHRhYmxlIHR5cGVcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvLyBcdCBcdC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IC0+XG5cdC8vIFx0IFx0XHQtIElmIFVJLkNyZWF0ZUhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSBwYXRoIC0+IHByb3ZpZGUgYSBuZWdhdGVkIGJpbmRpbmcgdG8gdGhpcyBwYXRoXG5cdC8vIFx0IFx0XHQtIE90aGVyd2lzZSwgY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgXHQtIE90aGVyd2lzZVxuXHQvLyBcdCAgXHQgLSBUaGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSB0aGUgVUkuSXNFZGl0YWJsZVxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwsXG5cdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0aWZFbHNlKFxuXHRcdFx0b3IoXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KG5ld0FjdGlvbj8uYXZhaWxhYmxlKSwgZXF1YWwobmV3QWN0aW9uPy5hdmFpbGFibGUsIGZhbHNlKSksXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzSW5zZXJ0YWJsZSksIGVxdWFsKGlzSW5zZXJ0YWJsZSwgZmFsc2UpLCAhbmV3QWN0aW9uKSxcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNDcmVhdGVIaWRkZW4pLCBlcXVhbChpc0NyZWF0ZUhpZGRlbiwgdHJ1ZSkpLFxuXHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmlzVmlld1dpdGhNdWx0aXBsZVZpc3VhbGl6YXRpb25zLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlLFxuXHRcdFx0XHRhbmQoXG5cdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MsXG5cdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8udHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIlxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRvcihub3QoaXNCaW5kaW5nKGlzQ3JlYXRlSGlkZGVuKSksIG5vdChpc0NyZWF0ZUhpZGRlbikpLFxuXHRcdFx0XHRhbmQobm90KGlzQ3JlYXRlSGlkZGVuKSwgVUkuSXNFZGl0YWJsZSlcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIERlbGV0ZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj4gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzRGVsZXRlSGlkZGVuID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLmRlbGV0ZTtcblx0Y29uc3QgcGF0aERlbGV0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uO1xuXG5cdC8vRGVsZXRlIEJ1dHRvbiBpcyB2aXNpYmxlOlxuXHQvLyBcdCBQcmVyZXF1aXNpdGVzOlxuXHQvL1x0IC0gSWYgd2UncmUgbm90IG9uIG11bHRpcGxlIHZpc3VhbGl6YXRpb25zIGNvbmZpZ3VyYXRpb24gb3IgQUxQXG5cdC8vXG5cdC8vICAgLSBJZiByZXN0cmljdGlvbnMgb24gZGVsZXRhYmxlIHNldCB0byBmYWxzZSAtPiBub3QgdmlzaWJsZVxuXHQvLyAgIC0gT3RoZXJ3aXNlXG5cdC8vXHRcdFx0LSBJZiBVSS5EZWxldGVIaWRkZW4gaXMgdHJ1ZSAtPiBub3QgdmlzaWJsZVxuXHQvL1x0XHRcdC0gT3RoZXJ3aXNlXG5cdC8vIFx0IFx0XHRcdC0gSWYgd2UncmUgb24gT1AgLT4gZGVwZW5kaW5nIGlmIFVJIGlzIGVkaXRhYmxlIGFuZCByZXN0cmljdGlvbnMgb24gZGVsZXRhYmxlXG5cdC8vXHRcdFx0XHQtIE90aGVyd2lzZVxuXHQvL1x0XHRcdFx0IFx0LSBJZiBVSS5EZWxldGVIaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHkgcGF0aCAtPiBwcm92aWRlIGEgbmVnYXRlZCBiaW5kaW5nIHRvIHRoaXMgcGF0aFxuXHQvL1x0IFx0IFx0XHQgXHQtIE90aGVyd2lzZSwgZGVsZXRlIGlzIHZpc2libGVcblxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdG9yKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaXNWaWV3V2l0aE11bHRpcGxlVmlzdWFsaXphdGlvbnMsIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpLFxuXHRcdGZhbHNlLFxuXHRcdGlmRWxzZShcblx0XHRcdGFuZChpc0NvbnN0YW50KHBhdGhEZWxldGFibGVFeHByZXNzaW9uKSwgZXF1YWwocGF0aERlbGV0YWJsZUV4cHJlc3Npb24sIGZhbHNlKSksXG5cdFx0XHRmYWxzZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNEZWxldGVIaWRkZW4pLCBlcXVhbChpc0RlbGV0ZUhpZGRlbiwgY29uc3RhbnQodHJ1ZSkpKSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCxcblx0XHRcdFx0XHRhbmQobm90KGlzRGVsZXRlSGlkZGVuKSwgVUkuSXNFZGl0YWJsZSksXG5cdFx0XHRcdFx0bm90KGFuZChpc0JpbmRpbmcoaXNEZWxldGVIaWRkZW4pLCBpc0RlbGV0ZUhpZGRlbikpXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIFBhc3RlLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtTdGFuZGFyZEFjdGlvbnNDb250ZXh0fSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0ge0V4cHJlc3Npb248Ym9vbGVhbj59IGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vIElmIENyZWF0ZSBpcyB2aXNpYmxlLCBlbmFibGVQYXN0ZSBpcyBub3QgZGlzYWJsZWQgaW50byBtYW5pZmVzdCBhbmQgd2UgYXJlIG9uIE9QL2Jsb2NrcyBvdXRzaWRlIEZpb3JpIGVsZW1lbnRzIHRlbXBsYXRlc1xuXHQvLyBUaGVuIGJ1dHRvbiB3aWxsIGJlIHZpc2libGUgYWNjb3JkaW5nIHRvIGluc2VydGFibGUgcmVzdHJpY3Rpb25zIGFuZCBjcmVhdGUgdmlzaWJpbGl0eVxuXHQvLyBPdGhlcndpc2UgaXQncyBub3QgdmlzaWJsZVxuXHRyZXR1cm4gYW5kKFxuXHRcdG5vdEVxdWFsKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZW5hYmxlUGFzdGUsIGZhbHNlKSxcblx0XHRjcmVhdGVWaXNpYmlsaXR5LFxuXHRcdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCxcblx0XHRbVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2VdLmluZGV4T2YoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSkgPT09IC0xLFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIE1hc3NFZGl0LlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtTdGFuZGFyZEFjdGlvbnNDb250ZXh0fSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXNzRWRpdFZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc1VwZGF0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi51cGRhdGUsXG5cdFx0cGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uLFxuXHRcdGJNYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0OiBib29sZWFuID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8uZW5hYmxlTWFzc0VkaXQgfHwgZmFsc2U7XG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlXG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQ7XG5cdC8vTWFzc0VkaXQgaXMgdmlzaWJsZVxuXHQvLyBJZlxuXHQvL1x0XHQtIHRoZXJlIGlzIG5vIHN0YXRpYyByZXN0cmljdGlvbnMgc2V0IHRvIGZhbHNlXG5cdC8vXHRcdC0gYW5kIGVuYWJsZU1hc3NFZGl0IGlzIG5vdCBzZXQgdG8gZmFsc2UgaW50byB0aGUgbWFuaWZlc3Rcblx0Ly9cdFx0LSBhbmQgdGhlIHNlbGVjdGlvbk1vZGUgaXMgcmVsZXZhbnRcblx0Ly9cdFRoZW4gTWFzc0VkaXQgaXMgYWx3YXlzIHZpc2libGUgaW4gTFIgb3IgZHluYW1pY2FsbHkgdmlzaWJsZSBpbiBPUCBhY2NvcmRpbmcgdG8gdWk+RWRpdGFibGUgYW5kIGhpZGRlbkFubm90YXRpb25cblx0Ly8gIEJ1dHRvbiBpcyBoaWRkZW4gZm9yIGFsbCBvdGhlciBjYXNlc1xuXHRyZXR1cm4gYW5kKFxuXHRcdG5vdChhbmQoaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGVxdWFsKHBhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBmYWxzZSkpKSxcblx0XHRiTWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCxcblx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdG5vdChpc1VwZGF0ZUhpZGRlbilcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBjcmVhdGlvblJvdy5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBjcmVhdGlvblJvd1Zpc2liaWxpdHlcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRpb25Sb3dWaXNpYmlsaXR5OiBFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZSA9IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT4ge1xuXHRcdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0cGF0aCA9IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGNvbnN0IHBhcnRuZXIgPSBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXS5wYXJ0bmVyO1xuXHRcdFx0XHRpZiAocGFydG5lcikge1xuXHRcdFx0XHRcdHBhdGggPSBgJHtwYXJ0bmVyfS8ke3BhdGh9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgaXNJbnNlcnRhYmxlID1cblx0XHRyZXN0cmljdGlvbnNJbnNlcnRhYmxlLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiXG5cdFx0XHQ/IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZykgPT4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSlcblx0XHRcdCAgfSlcblx0XHRcdDogcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZTtcblxuXHRyZXR1cm4gYW5kKFxuXHRcdGNyZWF0aW9uUm93VmlzaWJpbGl0eSxcblx0XHRpc0luc2VydGFibGUsXG5cdFx0b3IoXG5cdFx0XHQhc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhLFxuXHRcdFx0Zm9ybWF0UmVzdWx0KFtiaW5kaW5nRXhwcmVzc2lvbihcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCBcImludGVybmFsXCIpXSwgdGFibGVGb3JtYXR0ZXJzLnZhbGlkYXRlQ3JlYXRpb25Sb3dGaWVsZHMpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IGVuYWJsZWQgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge1N0YW5kYXJkQWN0aW9uc0NvbnRleHR9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSB7RXhwcmVzc2lvbjxib29sZWFuPn0gY3JlYXRlVmlzaWJpbGl0eVxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj4gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRlVmlzaWJpbGl0eTogRXhwcmVzc2lvbjxib29sZWFuPlxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBDb2xsZWN0aW9uVHlwZSA9IGNvbnZlcnRlckNvbnRleHQucmVzb2x2ZUFic29sdXRlUGF0aDxhbnk+KHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY29sbGVjdGlvblBhdGgpLnRhcmdldD8uX3R5cGU7XG5cdHJldHVybiBhbmQoXG5cdFx0Y3JlYXRlVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdENvbGxlY3Rpb25UeXBlID09PSBcIkVudGl0eVNldFwiLFxuXHRcdFx0YW5kKGlzSW5zZXJ0YWJsZSwgb3IoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsIFVJLklzRWRpdGFibGUpKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBhY3Rpb24gRGVsZXRlLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtTdGFuZGFyZEFjdGlvbnNDb250ZXh0fSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0ge0V4cHJlc3Npb248Ym9vbGVhbj59IGRlbGV0ZVZpc2liaWxpdHlcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZUVuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGRlbGV0ZVZpc2liaWxpdHk6IEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0RlbGV0YWJsZSA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPVxuXHRcdCFpc0NvbnN0YW50KGlzRGVsZXRhYmxlKSAmJiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIjtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID0gYmluZGluZ0V4cHJlc3Npb24oXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgbnVtYmVyT2ZEZWxldGFibGVDb250ZXh0cyA9IGJpbmRpbmdFeHByZXNzaW9uKFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgbnVtYmVyT2ZVblNhdmVkQ29udGV4dHMgPSBiaW5kaW5nRXhwcmVzc2lvbihcInVuU2F2ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXG5cdHJldHVybiBhbmQoXG5cdFx0ZGVsZXRlVmlzaWJpbGl0eSxcblx0XHRpZkVsc2UoXG5cdFx0XHRvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSwgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSksXG5cdFx0XHRhbmQoXG5cdFx0XHRcdG9yKFxuXHRcdFx0XHRcdGFuZChub3RFcXVhbChudW1iZXJPZkRlbGV0YWJsZUNvbnRleHRzLCB1bmRlZmluZWQpLCBncmVhdGVyVGhhbihsZW5ndGgobnVtYmVyT2ZEZWxldGFibGVDb250ZXh0cyksIDApKSxcblx0XHRcdFx0XHRhbmQobm90RXF1YWwobnVtYmVyT2ZVblNhdmVkQ29udGV4dHMsIHVuZGVmaW5lZCksIGdyZWF0ZXJUaGFuKGxlbmd0aChudW1iZXJPZlVuU2F2ZWRDb250ZXh0cyksIDApKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRiaW5kaW5nRXhwcmVzc2lvbihcImRlbGV0ZUVuYWJsZWRcIiwgXCJpbnRlcm5hbFwiKVxuXHRcdFx0KSxcblx0XHRcdGFuZChub3RFcXVhbChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIDApLCBpc0RlbGV0YWJsZSlcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgYWN0aW9uIFBhc3RlLlxuICpcbiAqIEBwYXJhbSB7RXhwcmVzc2lvbjxib29sZWFuPn0gcGFzdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0ge0V4cHJlc3Npb248Ym9vbGVhbj59IGNyZWF0ZUVuYWJsZW1lbnRcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHk6IEV4cHJlc3Npb248Ym9vbGVhbj4sIGNyZWF0ZUVuYWJsZW1lbnQ6IEV4cHJlc3Npb248Ym9vbGVhbj4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGFuZChwYXN0ZVZpc2liaWxpdHksIGNyZWF0ZUVuYWJsZW1lbnQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IGVuYWJsZWQgb2YgdGhlIGFjdGlvbiBNYXNzRWRpdC5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7U3RhbmRhcmRBY3Rpb25zQ29udGV4dH0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBtYXNzRWRpdFZpc2liaWxpdHlcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0bWFzc0VkaXRWaXNpYmlsaXR5OiBFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5OiBhbnkgPVxuXHRcdCFpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSAmJlxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBncmVhdGVyT3JFcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKTtcblx0Y29uc3QgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKGxlbmd0aChiaW5kaW5nRXhwcmVzc2lvbihcInVwZGF0YWJsZUNvbnRleHRzXCIsIFwiaW50ZXJuYWxcIikpLCAxKTtcblx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBpc0RyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBiRGlzcGxheU1vZGUgPSBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgYmluZGluZyBpbiBjYXNlXG5cdC8vIDEuIFVwZGF0ZSBpcyBkZXBlbmRlbnQgb24gY3VycmVudCBlbnRpdHkgcHJvcGVydHkgKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgaXMgdHJ1ZSkuXG5cdC8vIDIuIFRoZSB0YWJsZSBpcyByZWFkIG9ubHkgYW5kIGRyYWZ0IGVuYWJsZWQobGlrZSBMUiksIGluIHRoaXMgY2FzZSBvbmx5IGFjdGl2ZSBjb250ZXh0cyBjYW4gYmUgbWFzcyBlZGl0ZWQuXG5cdC8vICAgIFNvLCB1cGRhdGUgZGVwZW5kcyBvbiAnSXNBY3RpdmVFbnRpdHknIHZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQgcnVudGltZS5cblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBpZkVsc2UoXG5cdFx0b3IoYW5kKGJEaXNwbGF5TW9kZSwgYklzRHJhZnRTdXBwb3J0ZWQpLCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5KSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzKSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzKVxuXHQpO1xuXG5cdHJldHVybiBhbmQobWFzc0VkaXRWaXNpYmlsaXR5LCBpZkVsc2UoaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSwgcnVudGltZUJpbmRpbmcsIGFuZChydW50aW1lQmluZGluZywgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pKSk7XG59XG5cbi8qKlxuICogVGVsbHMgaWYgdGhlIHRhYmxlIGluIHRlbXBsYXRlIGlzIGluIGRpc3BsYXkgbW9kZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7Vmlld1BhdGhDb25maWd1cmF0aW9ufSB2aWV3Q29uZmlndXJhdGlvblxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgfHxcblx0XHQodmlld0NvbmZpZ3VyYXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gdXBkYXRhYmxlIHdpbGwgYmUgaGFuZGxlZCBhdCB0aGUgcHJvcGVydHkgbGV2ZWxcblx0cmV0dXJuIGZhbHNlO1xufVxuIl19
|
|
602
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBbm5vdGF0aW9uSGlkZGVuUHJvcGVydHkiLCJnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJjb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRpb25Nb2RlIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJ2aWV3Q29uZmlndXJhdGlvbiIsImNvbGxlY3Rpb25QYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiY3JlYXRlIiwiaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4iLCJDcmVhdGVIaWRkZW4iLCJEZWxldGVIaWRkZW4iLCJ1cGRhdGUiLCJVcGRhdGVIaWRkZW4iLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldE1hbmlmZXN0V3JhcHBlciIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJuZXdBY3Rpb24iLCJnZXROZXdBY3Rpb24iLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiRHJhZnROb2RlIiwiYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCIsInRhcmdldE9iamVjdCIsImNvbnRhaW5zVGFyZ2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJiSXNEcmFmdFN1cHBvcnRlZCIsImJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIm5ld0FjdGlvbk5hbWUiLCJOZXdBY3Rpb24iLCJ0b1N0cmluZyIsImF2YWlsYWJsZVByb3BlcnR5IiwiZ2V0RW50aXR5VHlwZSIsImFjdGlvbnMiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwidW5kZWZpbmVkIiwibmFtZSIsImF2YWlsYWJsZSIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInNBbm5vdGF0aW9uVGVybSIsImJXaXRoTmF2aWdhdGlvblBhdGgiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibGVuZ3RoIiwiYWN0aW9uQW5ub3RhdGlvblZhbHVlIiwiVUkiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImNvbnN0YW50IiwicmVzdHJpY3Rpb25zRGVmIiwia2V5IiwiaXNQYXRoSW5zZXJ0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsInJlc3VsdCIsImZvckVhY2giLCJkZWYiLCJkZWZGdW5jdGlvbiIsImV4cHJlc3Npb24iLCJhcHBseSIsInBhdGhWaXNpdG9yIiwibmF2aWdhdGlvblBhdGhzIiwibmF2aWdhdGlvbkV4cHJlc3Npb24iLCJpZ25vcmVUYXJnZXRDb2xsZWN0aW9uIiwiYXV0aG9yaXplVW5yZXNvbHZhYmxlIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiaXNEcmFmdE9yU3RpY2t5IiwiaXNDcmVhdGVBbHdheXNIaWRkZW4iLCJDcmVhdGlvbk1vZGUiLCJFeHRlcm5hbCIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiY3JlYXRlVmlzaWJpbGl0eSIsImdldENyZWF0ZVZpc2liaWxpdHkiLCJpc1RlbXBsYXRlZCIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0Q3JlYXRlVGVtcGxhdGluZyIsInZpc2libGUiLCJlbmFibGVkIiwiZ2V0Q3JlYXRlRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJnZXREZWZhdWx0VGVtcGxhdGluZyIsImdldERlbGV0ZUVuYWJsZW1lbnQiLCJnZXRDcmVhdGlvblJvdyIsImNyZWF0aW9uUm93VmlzaWJpbGl0eSIsImdldENyZWF0aW9uUm93RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uUGFzdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJjcmVhdGVFbmFibGVtZW50IiwicGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVFbmFibGVtZW50IiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsIm1hc3NFZGl0VmlzaWJpbGl0eSIsImdldE1hc3NFZGl0VmlzaWJpbGl0eSIsImdldE1hc3NFZGl0RW5hYmxlbWVudCIsImlzRm9yQ3JlYXRpb25Sb3ciLCJhbmQiLCJvciIsIkNyZWF0aW9uUm93Iiwibm90IiwiaXNDb25zdGFudCIsImFjdGlvblZpc2liaWxpdHkiLCJpc0luc2VydGFibGUiLCJpc0NyZWF0ZUhpZGRlbiIsImlmRWxzZSIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkxpc3RSZXBvcnQiLCJJc0VkaXRhYmxlIiwiZXF1YWwiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJ0eXBlIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJpc0RlbGV0ZUhpZGRlbiIsImRlbGV0ZSIsInBhdGhEZWxldGFibGVFeHByZXNzaW9uIiwiaXNEZWxldGFibGUiLCJub3RFcXVhbCIsImVuYWJsZVBhc3RlIiwiaW5kZXhPZiIsImlzVXBkYXRlSGlkZGVuIiwicGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1VwZGF0YWJsZSIsImJNYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0IiwiZW5hYmxlTWFzc0VkaXQiLCJ0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uIiwiT2JqZWN0UGFnZSIsInJlc3RyaWN0aW9uc0luc2VydGFibGUiLCJwYXJ0bmVyIiwiX3R5cGUiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZm9ybWF0UmVzdWx0IiwicGF0aEluTW9kZWwiLCJ0YWJsZUZvcm1hdHRlcnMiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiQ29sbGVjdGlvblR5cGUiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwidGFyZ2V0IiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsIm51bWJlck9mRGVsZXRhYmxlQ29udGV4dHMiLCJudW1iZXJPZlVuU2F2ZWRDb250ZXh0cyIsImdyZWF0ZXJUaGFuIiwiZ3JlYXRlck9yRXF1YWwiLCJudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzIiwiYkRpc3BsYXlNb2RlIiwiaXNJbkRpc3BsYXlNb2RlIiwicnVudGltZUJpbmRpbmciLCJ0ZW1wbGF0ZVR5cGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN0YW5kYXJkQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0YWJsZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRncmVhdGVyT3JFcXVhbCxcblx0Z3JlYXRlclRoYW4sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdGxlbmd0aCxcblx0bm90LFxuXHRub3RFcXVhbCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBnZXRUYXJnZXRPYmplY3RQYXRoLCBpc1BhdGhEZWxldGFibGUsIGlzUGF0aEluc2VydGFibGUsIGlzUGF0aFVwZGF0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IHNpbmdsZXRvblBhdGhWaXNpdG9yLCBVSSB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgVmlld1BhdGhDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSwgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9UYWJsZVwiO1xuXG5lbnVtIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eSB7XG5cdENyZWF0ZUhpZGRlbiA9IFwiQ3JlYXRlSGlkZGVuXCIsXG5cdERlbGV0ZUhpZGRlbiA9IFwiRGVsZXRlSGlkZGVuXCIsXG5cdFVwZGF0ZUhpZGRlbiA9IFwiVXBkYXRlSGlkZGVuXCJcbn1cblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlID0ge1xuXHRpc1RlbXBsYXRlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW5hYmxlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG50eXBlIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlID0ge1xuXHRleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG5hdmlnYXRpb25FeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xudHlwZSBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlID0gUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvblJlc3RyaWN0aW9uc1R5cGU+O1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb250ZXh0ID0ge1xuXHRjb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0Y3JlYXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0XCJkZWxldGVcIjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdHVwZGF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9uczogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzoge1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0YXZhaWxhYmxlPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0cmVzdHJpY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRleHQgZm9yIHRoZSBzdGFuZGFyZCBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlXG4gKiBAcGFyYW0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB2aWV3Q29uZmlndXJhdGlvblxuICogQHJldHVybnMgIFRoZSBjb250ZXh0IGZvciB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQge1xuXHRyZXR1cm4ge1xuXHRcdGNvbGxlY3Rpb25QYXRoOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0XHRjcmVhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eS5DcmVhdGVIaWRkZW4pLFxuXHRcdFx0XCJkZWxldGVcIjogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgQW5ub3RhdGlvbkhpZGRlblByb3BlcnR5LkRlbGV0ZUhpZGRlbiksXG5cdFx0XHR1cGRhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIEFubm90YXRpb25IaWRkZW5Qcm9wZXJ0eS5VcGRhdGVIaWRkZW4pXG5cdFx0fSxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRpc1ZpZXdXaXRoTXVsdGlwbGVWaXN1YWxpemF0aW9uczogdmlld0NvbmZpZ3VyYXRpb25cblx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKVxuXHRcdFx0OiBmYWxzZSxcblx0XHRuZXdBY3Rpb246IGdldE5ld0FjdGlvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0cmVzdHJpY3Rpb25zOiBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZHJhZnQgaXMgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgc3VwcG9ydGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGJJc0RyYWZ0Um9vdCA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0Tm9kZSA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdD8uY29udGFpbnNUYXJnZXQgJiZcblx0XHQoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZSlcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblxuXHRyZXR1cm4gYklzRHJhZnRSb290IHx8IGJJc0RyYWZ0Tm9kZSB8fCAoIWNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgJiYgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHN0aWNreSBvciBkcmFmdCBpcyBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IGJJc0RyYWZ0U3VwcG9ydGVkID0gaXNEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uU2Vzc2lvblxuXHRcdD8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFxuXHRcdD8gdHJ1ZVxuXHRcdDogZmFsc2U7XG5cblx0cmV0dXJuIGJJc0RyYWZ0U3VwcG9ydGVkIHx8IGJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJlZCBuZXdBY3Rpb24gaW50byBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbmV3IGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdBY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGFueSB7XG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBuZXdBY3Rpb25OYW1lOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IChcblx0XHRjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiB8fFxuXHRcdGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb25cblx0KT8udG9TdHJpbmcoKTtcblx0aWYgKG5ld0FjdGlvbk5hbWUpIHtcblx0XHRsZXQgYXZhaWxhYmxlUHJvcGVydHk6IGFueSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hY3Rpb25zW25ld0FjdGlvbk5hbWVdPy5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlO1xuXHRcdGF2YWlsYWJsZVByb3BlcnR5ID0gYXZhaWxhYmxlUHJvcGVydHkgIT09IHVuZGVmaW5lZCA/IGF2YWlsYWJsZVByb3BlcnR5IDogdHJ1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogbmV3QWN0aW9uTmFtZSxcblx0XHRcdGF2YWlsYWJsZTogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGF2YWlsYWJsZVByb3BlcnR5KVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eSBjb25maWd1cmVkIGludG8gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHNBbm5vdGF0aW9uVGVybVxuICogQHBhcmFtIGJXaXRoTmF2aWdhdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNBbm5vdGF0aW9uVGVybTogc3RyaW5nLFxuXHRiV2l0aE5hdmlnYXRpb25QYXRoID0gdHJ1ZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Ly8gQ29uc2lkZXIgb25seSB0aGUgbGFzdCBsZXZlbCBvZiBuYXZpZ2F0aW9uLiBUaGUgb3RoZXJzIGFyZSBhbHJlYWR5IGNvbnNpZGVyZWQgaW4gdGhlIGVsZW1lbnQgYmluZGluZyBvZiB0aGUgcGFnZS5cblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9XG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggPiAwICYmIGJXaXRoTmF2aWdhdGlvblBhdGhcblx0XHRcdD8gW2RhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXNbZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXS5uYW1lXVxuXHRcdFx0OiBbXTtcblx0Y29uc3QgYWN0aW9uQW5ub3RhdGlvblZhbHVlID1cblx0XHQoKGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJIGFzIGFueSk/LltzQW5ub3RhdGlvblRlcm1dIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+KSB8fCBmYWxzZTtcblxuXHRyZXR1cm4gY3VycmVudEVudGl0eVNldFxuXHRcdD8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFjdGlvbkFubm90YXRpb25WYWx1ZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgdW5kZWZpbmVkLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMpXG5cdFx0ICApXG5cdFx0OiBjb25zdGFudChmYWxzZSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYW5ub3RhdGVkIHJlc3RyaWN0aW9ucyBmb3IgdGhlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCByZXN0cmljdGlvbnNEZWYgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzSW5zZXJ0YWJsZVwiLFxuXHRcdFx0XCJmdW5jdGlvblwiOiBpc1BhdGhJbnNlcnRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNVcGRhdGFibGVcIixcblx0XHRcdFwiZnVuY3Rpb25cIjogaXNQYXRoVXBkYXRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNEZWxldGFibGVcIixcblx0XHRcdFwiZnVuY3Rpb25cIjogaXNQYXRoRGVsZXRhYmxlXG5cdFx0fVxuXHRdO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPiA9IHt9O1xuXHRyZXN0cmljdGlvbnNEZWYuZm9yRWFjaChmdW5jdGlvbiAoZGVmKSB7XG5cdFx0Y29uc3QgZGVmRnVuY3Rpb24gPSBkZWZbXCJmdW5jdGlvblwiXTtcblx0XHRyZXN1bHRbZGVmLmtleV0gPSB7XG5cdFx0XHRleHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKSxcblx0XHRcdG5hdmlnYXRpb25FeHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKVxuXHRcdH07XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0ZW1wbGF0aW5nIGZvciBpbnNlcnQvdXBkYXRlIGFjdGlvbnMgaXMgbWFuZGF0b3J5LlxuICpcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNEcmFmdE9yU3RpY2t5XG4gKiBAcGFyYW0gaXNDcmVhdGVBbHdheXNIaWRkZW5cbiAqIEByZXR1cm5zIFRoZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRHJhZnRPclN0aWNreTogYm9vbGVhbixcblx0aXNDcmVhdGVBbHdheXNIaWRkZW46IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKGlzRHJhZnRPclN0aWNreSB8fCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsKSAmJiAhaXNDcmVhdGVBbHdheXNIaWRkZW47XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUge1xuXHRjb25zdCBjcmVhdGVWaXNpYmlsaXR5ID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3JlYXRlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSlcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgYWN0aW9uIERlbGV0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgYWN0aW9uIERlbGV0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUge1xuXHRjb25zdCBkZWxldGVWaXNpYmlsaXR5ID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhkZWxldGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oZGVsZXRlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5KSlcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25Sb3coXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZSB7XG5cdGNvbnN0IGNyZWF0aW9uUm93VmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdHJ1ZSk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHksIHRydWUpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjcmVhdGlvblJvd1Zpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0aW9uUm93RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHkpKVxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhY3Rpb24gUGFzdGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBQYXN0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIHtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNyZWF0ZUVuYWJsZW1lbnQgPSBnZXRDcmVhdGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0ZVZpc2liaWxpdHkpO1xuXHRjb25zdCBwYXN0ZVZpc2liaWxpdHkgPSBnZXRQYXN0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSwgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKTtcblx0cmV0dXJuIHtcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihwYXN0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHksIGNyZWF0ZUVuYWJsZW1lbnQpKVxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhY3Rpb24gTWFzc0VkaXQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjdGlvbiBNYXNzRWRpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZSB7XG5cdGNvbnN0IG1hc3NFZGl0VmlzaWJpbGl0eSA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihtYXNzRWRpdFZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHkpKVxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRlbXBsYXRpbmcgb2YgdGhlIGFjdGlvbiBDcmVhdGUuXG4gKlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gaXNGb3JDcmVhdGlvblJvd1xuICogQHJldHVybnMgVGhlIGNyZWF0ZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVRlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0aXNGb3JDcmVhdGlvblJvdyA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvL1RlbXBsYXRpbmcgb2YgQ3JlYXRlIEJ1dHRvbiBpcyBub3QgZG9uZTpcblx0Ly8gXHQgLSBJZiBCdXR0b24gaXMgbmV2ZXIgdmlzaWJsZShjb3ZlcmVkIHRoZSBFeHRlcm5hbCBjcmVhdGUgYnV0dG9uLCBuZXcgQWN0aW9uKVxuXHQvL1x0IC0gb3IgQ3JlYXRpb25Nb2RlIGlzIG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGUgQnV0dG9uXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgbm90IG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGlvblJvdyBCdXR0b25cblxuXHRyZXR1cm4gYW5kKFxuXHRcdC8vWE5PUiBnYXRlXG5cdFx0b3IoXG5cdFx0XHRhbmQoaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyksXG5cdFx0XHRhbmQoIWlzRm9yQ3JlYXRpb25Sb3csIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpXG5cdFx0KSxcblx0XHRvcihub3QoaXNDb25zdGFudChjcmVhdGVWaXNpYmlsaXR5KSksIGNyZWF0ZVZpc2liaWxpdHkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgbm9uLUNyZWF0ZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhY3Rpb25WaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgbm9uLUNyZWF0ZSBhY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFRlbXBsYXRpbmcoYWN0aW9uVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG9yKG5vdChpc0NvbnN0YW50KGFjdGlvblZpc2liaWxpdHkpKSwgYWN0aW9uVmlzaWJpbGl0eSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIENyZWF0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0ZvckNyZWF0aW9uUm93XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIENyZWF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNJbnNlcnRhYmxlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNJbnNlcnRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IGlzQ3JlYXRlSGlkZGVuID0gaXNGb3JDcmVhdGlvblJvd1xuXHRcdD8gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgQW5ub3RhdGlvbkhpZGRlblByb3BlcnR5LkNyZWF0ZUhpZGRlbiwgZmFsc2UpXG5cdFx0OiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlO1xuXHRjb25zdCBuZXdBY3Rpb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0Lm5ld0FjdGlvbjtcblx0Ly9DcmVhdGUgQnV0dG9uIGlzIHZpc2libGU6XG5cdC8vIFx0IC0gSWYgdGhlIGNyZWF0aW9uIG1vZGUgaXMgZXh0ZXJuYWxcblx0Ly8gICAgICAtIElmIHdlJ3JlIG9uIHRoZSBsaXN0IHJlcG9ydCBhbmQgY3JlYXRlIGlzIG5vdCBoaWRkZW5cblx0Ly9cdFx0LSBPdGhlcndpc2UgdGhpcyBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgdGhlIFVJLklzRWRpdGFibGVcblx0Ly9cdCAtIE90aGVyd2lzZVxuXHQvL1x0XHQtIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdmFsaWQgdGhlbiBjcmVhdGUgYnV0dG9uIGlzbid0IHZpc2libGVcblx0Ly9cdFx0XHQtIG5vIG5ld0FjdGlvbiBhdmFpbGFibGVzXG5cdC8vXHRcdFx0LSBJdCdzIG5vdCBpbnNlcnRhYmxlIGFuZCB0aGVyZSBpcyBub3QgYSBuZXcgYWN0aW9uXG5cdC8vXHRcdFx0LSBjcmVhdGUgaXMgaGlkZGVuXG5cdC8vXHRcdFx0LSBUaGVyZSBhcmUgbXVsdGlwbGUgdmlzaWFsaXphdGlvbnNcblx0Ly9cdFx0XHQtIEl0J3MgYW4gQW5hbHl0aWNhbCBMaXN0IFBhZ2Vcblx0Ly9cdFx0XHQtIFVzZXMgSW5saW5lQ3JlYXRpb25Sb3dzIG1vZGUgYW5kIGEgUmVzcG9zaXZlIHRhYmxlIHR5cGVcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvLyBcdCBcdC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IC0+XG5cdC8vIFx0IFx0XHQtIElmIFVJLkNyZWF0ZUhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSBwYXRoIC0+IHByb3ZpZGUgYSBuZWdhdGVkIGJpbmRpbmcgdG8gdGhpcyBwYXRoXG5cdC8vIFx0IFx0XHQtIE90aGVyd2lzZSwgY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgXHQtIE90aGVyd2lzZVxuXHQvLyBcdCAgXHQgLSBUaGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSB0aGUgVUkuSXNFZGl0YWJsZVxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwsXG5cdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0aWZFbHNlKFxuXHRcdFx0b3IoXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KG5ld0FjdGlvbj8uYXZhaWxhYmxlKSwgZXF1YWwobmV3QWN0aW9uPy5hdmFpbGFibGUsIGZhbHNlKSksXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzSW5zZXJ0YWJsZSksIGVxdWFsKGlzSW5zZXJ0YWJsZSwgZmFsc2UpLCAhbmV3QWN0aW9uKSxcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNDcmVhdGVIaWRkZW4pLCBlcXVhbChpc0NyZWF0ZUhpZGRlbiwgdHJ1ZSkpLFxuXHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmlzVmlld1dpdGhNdWx0aXBsZVZpc3VhbGl6YXRpb25zLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlLFxuXHRcdFx0XHRhbmQoXG5cdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MsXG5cdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8udHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIlxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRvcihub3QoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oaXNDcmVhdGVIaWRkZW4pKSwgbm90KGlzQ3JlYXRlSGlkZGVuKSksXG5cdFx0XHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2aXNpYmxlIG9mIHRoZSBhY3Rpb24gRGVsZXRlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHZpc2libGUgb2YgdGhlIGFjdGlvbiBEZWxldGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0RlbGV0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5kZWxldGU7XG5cdGNvbnN0IHBhdGhEZWxldGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvbjtcblxuXHQvL0RlbGV0ZSBCdXR0b24gaXMgdmlzaWJsZTpcblx0Ly8gXHQgUHJlcmVxdWlzaXRlczpcblx0Ly9cdCAtIElmIHdlJ3JlIG5vdCBvbiBtdWx0aXBsZSB2aXN1YWxpemF0aW9ucyBjb25maWd1cmF0aW9uIG9yIEFMUFxuXHQvL1xuXHQvLyAgIC0gSWYgcmVzdHJpY3Rpb25zIG9uIGRlbGV0YWJsZSBzZXQgdG8gZmFsc2UgLT4gbm90IHZpc2libGVcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvL1x0XHRcdC0gSWYgVUkuRGVsZXRlSGlkZGVuIGlzIHRydWUgLT4gbm90IHZpc2libGVcblx0Ly9cdFx0XHQtIE90aGVyd2lzZVxuXHQvLyBcdCBcdFx0XHQtIElmIHdlJ3JlIG9uIE9QIC0+IGRlcGVuZGluZyBpZiBVSSBpcyBlZGl0YWJsZSBhbmQgcmVzdHJpY3Rpb25zIG9uIGRlbGV0YWJsZVxuXHQvL1x0XHRcdFx0LSBPdGhlcndpc2Vcblx0Ly9cdFx0XHRcdCBcdC0gSWYgVUkuRGVsZXRlSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5IHBhdGggLT4gcHJvdmlkZSBhIG5lZ2F0ZWQgYmluZGluZyB0byB0aGlzIHBhdGhcblx0Ly9cdCBcdCBcdFx0IFx0LSBPdGhlcndpc2UsIGRlbGV0ZSBpcyB2aXNpYmxlXG5cblx0cmV0dXJuIGlmRWxzZShcblx0XHRvcihzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmlzVmlld1dpdGhNdWx0aXBsZVZpc3VhbGl6YXRpb25zLCBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSxcblx0XHRmYWxzZSxcblx0XHRpZkVsc2UoXG5cdFx0XHRhbmQoaXNDb25zdGFudChwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiksIGVxdWFsKHBhdGhEZWxldGFibGVFeHByZXNzaW9uLCBmYWxzZSkpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzRGVsZXRlSGlkZGVuKSwgZXF1YWwoaXNEZWxldGVIaWRkZW4sIGNvbnN0YW50KHRydWUpKSksXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRcdFx0YW5kKG5vdChpc0RlbGV0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUpLFxuXHRcdFx0XHRcdG5vdChhbmQoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oaXNEZWxldGVIaWRkZW4pLCBpc0RlbGV0ZUhpZGRlbikpXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgdmlzaWJsZSBvZiB0aGUgYWN0aW9uIFBhc3RlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2aXNpYmxlIG9mIHRoZSBhY3Rpb24gUGFzdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyBJZiBDcmVhdGUgaXMgdmlzaWJsZSwgZW5hYmxlUGFzdGUgaXMgbm90IGRpc2FibGVkIGludG8gbWFuaWZlc3QgYW5kIHdlIGFyZSBvbiBPUC9ibG9ja3Mgb3V0c2lkZSBGaW9yaSBlbGVtZW50cyB0ZW1wbGF0ZXNcblx0Ly8gVGhlbiBidXR0b24gd2lsbCBiZSB2aXNpYmxlIGFjY29yZGluZyB0byBpbnNlcnRhYmxlIHJlc3RyaWN0aW9ucyBhbmQgY3JlYXRlIHZpc2liaWxpdHlcblx0Ly8gT3RoZXJ3aXNlIGl0J3Mgbm90IHZpc2libGVcblx0cmV0dXJuIGFuZChcblx0XHRub3RFcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmVuYWJsZVBhc3RlLCBmYWxzZSksXG5cdFx0Y3JlYXRlVmlzaWJpbGl0eSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQsXG5cdFx0W1RlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LCBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXS5pbmRleE9mKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpID09PSAtMSxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvblxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHZpc2libGUgb2YgdGhlIGFjdGlvbiBNYXNzRWRpdC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2aXNpYmxlIG9mIHRoZSBhY3Rpb24gTWFzc0VkaXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0VmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNVcGRhdGVIaWRkZW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24udXBkYXRlLFxuXHRcdHBhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvbixcblx0XHRiTWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdDogYm9vbGVhbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LmVuYWJsZU1hc3NFZGl0IHx8IGZhbHNlO1xuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZVxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0O1xuXHQvL01hc3NFZGl0IGlzIHZpc2libGVcblx0Ly8gSWZcblx0Ly9cdFx0LSB0aGVyZSBpcyBubyBzdGF0aWMgcmVzdHJpY3Rpb25zIHNldCB0byBmYWxzZVxuXHQvL1x0XHQtIGFuZCBlbmFibGVNYXNzRWRpdCBpcyBub3Qgc2V0IHRvIGZhbHNlIGludG8gdGhlIG1hbmlmZXN0XG5cdC8vXHRcdC0gYW5kIHRoZSBzZWxlY3Rpb25Nb2RlIGlzIHJlbGV2YW50XG5cdC8vXHRUaGVuIE1hc3NFZGl0IGlzIGFsd2F5cyB2aXNpYmxlIGluIExSIG9yIGR5bmFtaWNhbGx5IHZpc2libGUgaW4gT1AgYWNjb3JkaW5nIHRvIHVpPkVkaXRhYmxlIGFuZCBoaWRkZW5Bbm5vdGF0aW9uXG5cdC8vICBCdXR0b24gaXMgaGlkZGVuIGZvciBhbGwgb3RoZXIgY2FzZXNcblx0cmV0dXJuIGFuZChcblx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0Yk1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3QsXG5cdFx0dGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRub3QoaXNVcGRhdGVIaWRkZW4pXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgY3JlYXRpb25Sb3cuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Sb3dWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgY3JlYXRpb25Sb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0aW9uUm93VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCByZXN0cmljdGlvbnNJbnNlcnRhYmxlID0gaXNQYXRoSW5zZXJ0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwge1xuXHRcdGlnbm9yZVRhcmdldENvbGxlY3Rpb246IHRydWUsXG5cdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PiB7XG5cdFx0XHRpZiAocGF0aC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRwYXRoID0gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdFx0XHRpZiAobmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgcGFydG5lciA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzW25hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCAtIDFdLnBhcnRuZXI7XG5cdFx0XHRcdGlmIChwYXJ0bmVyKSB7XG5cdFx0XHRcdFx0cGF0aCA9IGAke3BhcnRuZXJ9LyR7cGF0aH1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGF0aDtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBpc0luc2VydGFibGUgPVxuXHRcdHJlc3RyaWN0aW9uc0luc2VydGFibGUuX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCJcblx0XHRcdD8gaXNQYXRoSW5zZXJ0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwge1xuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIFtdKVxuXHRcdFx0ICB9KVxuXHRcdFx0OiByZXN0cmljdGlvbnNJbnNlcnRhYmxlO1xuXG5cdHJldHVybiBhbmQoXG5cdFx0Y3JlYXRpb25Sb3dWaXNpYmlsaXR5LFxuXHRcdGlzSW5zZXJ0YWJsZSxcblx0XHRvcihcblx0XHRcdCFzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEsXG5cdFx0XHRmb3JtYXRSZXN1bHQoW3BhdGhJbk1vZGVsKFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIFwiaW50ZXJuYWxcIildLCB0YWJsZUZvcm1hdHRlcnMudmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcylcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgYWN0aW9uIENyZWF0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgYWN0aW9uIENyZWF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZUVuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNJbnNlcnRhYmxlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNJbnNlcnRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IENvbGxlY3Rpb25UeXBlID0gY29udmVydGVyQ29udGV4dC5yZXNvbHZlQWJzb2x1dGVQYXRoPGFueT4oc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jb2xsZWN0aW9uUGF0aCkudGFyZ2V0Py5fdHlwZTtcblx0cmV0dXJuIGFuZChcblx0XHRjcmVhdGVWaXNpYmlsaXR5LFxuXHRcdG9yKFxuXHRcdFx0Q29sbGVjdGlvblR5cGUgPT09IFwiRW50aXR5U2V0XCIsXG5cdFx0XHRhbmQoaXNJbnNlcnRhYmxlLCBvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSwgVUkuSXNFZGl0YWJsZSkpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IGVuYWJsZWQgb2YgdGhlIGFjdGlvbiBEZWxldGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZGVsZXRlVmlzaWJpbGl0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IGVuYWJsZWQgb2YgdGhlIGFjdGlvbiBEZWxldGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRkZWxldGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA9XG5cdFx0IWlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBwYXRoSW5Nb2RlbChcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBudW1iZXJPZkRlbGV0YWJsZUNvbnRleHRzID0gcGF0aEluTW9kZWwoXCJkZWxldGFibGVDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBudW1iZXJPZlVuU2F2ZWRDb250ZXh0cyA9IHBhdGhJbk1vZGVsKFwidW5TYXZlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIik7XG5cblx0cmV0dXJuIGFuZChcblx0XHRkZWxldGVWaXNpYmlsaXR5LFxuXHRcdGlmRWxzZShcblx0XHRcdG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5KSxcblx0XHRcdGFuZChcblx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0YW5kKG5vdEVxdWFsKG51bWJlck9mRGVsZXRhYmxlQ29udGV4dHMsIHVuZGVmaW5lZCksIGdyZWF0ZXJUaGFuKGxlbmd0aChudW1iZXJPZkRlbGV0YWJsZUNvbnRleHRzKSwgMCkpLFxuXHRcdFx0XHRcdGFuZChub3RFcXVhbChudW1iZXJPZlVuU2F2ZWRDb250ZXh0cywgdW5kZWZpbmVkKSwgZ3JlYXRlclRoYW4obGVuZ3RoKG51bWJlck9mVW5TYXZlZENvbnRleHRzKSwgMCkpXG5cdFx0XHRcdCksXG5cdFx0XHRcdHBhdGhJbk1vZGVsKFwiZGVsZXRlRW5hYmxlZFwiLCBcImludGVybmFsXCIpXG5cdFx0XHQpLFxuXHRcdFx0YW5kKG5vdEVxdWFsKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgMCksIGlzRGVsZXRhYmxlKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBhY3Rpb24gUGFzdGUuXG4gKlxuICogQHBhcmFtIHBhc3RlVmlzaWJpbGl0eVxuICogQHBhcmFtIGNyZWF0ZUVuYWJsZW1lbnRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBhY3Rpb24gUGFzdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZUVuYWJsZW1lbnQoXG5cdHBhc3RlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjcmVhdGVFbmFibGVtZW50OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBhbmQocGFzdGVWaXNpYmlsaXR5LCBjcmVhdGVFbmFibGVtZW50KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSBlbmFibGVkIG9mIHRoZSBhY3Rpb24gTWFzc0VkaXQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gbWFzc0VkaXRWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHkgZW5hYmxlZCBvZiB0aGUgYWN0aW9uIE1hc3NFZGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFzc0VkaXRFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRtYXNzRWRpdFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5OiBhbnkgPVxuXHRcdCFpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSAmJlxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBncmVhdGVyT3JFcXVhbChwYXRoSW5Nb2RlbChcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKTtcblx0Y29uc3QgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKGxlbmd0aChwYXRoSW5Nb2RlbChcInVwZGF0YWJsZUNvbnRleHRzXCIsIFwiaW50ZXJuYWxcIikpLCAxKTtcblx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBpc0RyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBiRGlzcGxheU1vZGUgPSBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgYmluZGluZyBpbiBjYXNlXG5cdC8vIDEuIFVwZGF0ZSBpcyBkZXBlbmRlbnQgb24gY3VycmVudCBlbnRpdHkgcHJvcGVydHkgKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgaXMgdHJ1ZSkuXG5cdC8vIDIuIFRoZSB0YWJsZSBpcyByZWFkIG9ubHkgYW5kIGRyYWZ0IGVuYWJsZWQobGlrZSBMUiksIGluIHRoaXMgY2FzZSBvbmx5IGFjdGl2ZSBjb250ZXh0cyBjYW4gYmUgbWFzcyBlZGl0ZWQuXG5cdC8vICAgIFNvLCB1cGRhdGUgZGVwZW5kcyBvbiAnSXNBY3RpdmVFbnRpdHknIHZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQgcnVudGltZS5cblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBpZkVsc2UoXG5cdFx0b3IoYW5kKGJEaXNwbGF5TW9kZSwgYklzRHJhZnRTdXBwb3J0ZWQpLCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5KSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzKSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzKVxuXHQpO1xuXG5cdHJldHVybiBhbmQobWFzc0VkaXRWaXNpYmlsaXR5LCBpZkVsc2UoaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSwgcnVudGltZUJpbmRpbmcsIGFuZChydW50aW1lQmluZGluZywgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pKSk7XG59XG5cbi8qKlxuICogVGVsbHMgaWYgdGhlIHRhYmxlIGluIHRlbXBsYXRlIGlzIGluIGRpc3BsYXkgbW9kZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHZpZXdDb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhYmxlIGlzIGluIGRpc3BsYXkgbW9kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGlmIChcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0dGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlIHx8XG5cdFx0KHZpZXdDb25maWd1cmF0aW9uICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdC8vIHVwZGF0YWJsZSB3aWxsIGJlIGhhbmRsZWQgYXQgdGhlIHByb3BlcnR5IGxldmVsXG5cdHJldHVybiBmYWxzZTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNEJLQSx3Qjs7YUFBQUEsd0I7SUFBQUEsd0I7SUFBQUEsd0I7SUFBQUEsd0I7S0FBQUEsd0Is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
|