@sapui5/sap.fe.core 1.102.0 → 1.103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +62 -26
- package/src/sap/fe/core/AppComponent.ts +56 -40
- package/src/sap/fe/core/AppStateHandler.js +10 -10
- package/src/sap/fe/core/AppStateHandler.ts +9 -9
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +236 -109
- package/src/sap/fe/core/CommonUtils.ts +252 -136
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +8 -8
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/controllerextensions/EditFlow.js +129 -118
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +22 -22
- package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
- 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 +6 -6
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
- 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 +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- 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 +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- 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/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- 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 +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
- package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
- 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 +54 -34
- package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
- package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
- package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
- 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 +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- 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 +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -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/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +14 -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/MassEditHelper.js +281 -254
- package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
- 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/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +42 -3
- 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 +49 -35
- package/src/sap/fe/core/messagebundle_ar.properties +13 -5
- package/src/sap/fe/core/messagebundle_bg.properties +13 -5
- package/src/sap/fe/core/messagebundle_ca.properties +13 -5
- package/src/sap/fe/core/messagebundle_cs.properties +13 -5
- package/src/sap/fe/core/messagebundle_cy.properties +14 -6
- package/src/sap/fe/core/messagebundle_da.properties +13 -5
- package/src/sap/fe/core/messagebundle_de.properties +15 -7
- package/src/sap/fe/core/messagebundle_el.properties +14 -6
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
- package/src/sap/fe/core/messagebundle_es.properties +13 -5
- package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
- package/src/sap/fe/core/messagebundle_et.properties +13 -5
- package/src/sap/fe/core/messagebundle_fi.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
- package/src/sap/fe/core/messagebundle_hi.properties +14 -6
- package/src/sap/fe/core/messagebundle_hr.properties +14 -6
- package/src/sap/fe/core/messagebundle_hu.properties +13 -5
- package/src/sap/fe/core/messagebundle_id.properties +13 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -25
- package/src/sap/fe/core/messagebundle_iw.properties +13 -5
- package/src/sap/fe/core/messagebundle_ja.properties +14 -6
- package/src/sap/fe/core/messagebundle_kk.properties +13 -5
- package/src/sap/fe/core/messagebundle_ko.properties +13 -5
- package/src/sap/fe/core/messagebundle_lt.properties +13 -5
- package/src/sap/fe/core/messagebundle_lv.properties +14 -6
- package/src/sap/fe/core/messagebundle_ms.properties +13 -5
- package/src/sap/fe/core/messagebundle_nl.properties +13 -5
- package/src/sap/fe/core/messagebundle_no.properties +13 -5
- package/src/sap/fe/core/messagebundle_pl.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
- package/src/sap/fe/core/messagebundle_ro.properties +13 -5
- package/src/sap/fe/core/messagebundle_ru.properties +13 -5
- package/src/sap/fe/core/messagebundle_sh.properties +13 -5
- package/src/sap/fe/core/messagebundle_sk.properties +13 -5
- package/src/sap/fe/core/messagebundle_sl.properties +17 -9
- package/src/sap/fe/core/messagebundle_sv.properties +14 -6
- package/src/sap/fe/core/messagebundle_th.properties +13 -5
- package/src/sap/fe/core/messagebundle_tr.properties +13 -5
- package/src/sap/fe/core/messagebundle_uk.properties +13 -5
- package/src/sap/fe/core/messagebundle_vi.properties +13 -5
- package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
- package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +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 +10 -9
- package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
- 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 +148 -93
- package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -2,1730 +2,2146 @@
|
|
|
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([], function
|
|
6
|
-
|
|
5
|
+
sap.ui.define([], function() {
|
|
6
|
+
/*!
|
|
7
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
8
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
9
|
+
*/
|
|
10
|
+
"use strict";
|
|
7
11
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
11
|
-
|
|
12
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
13
|
-
|
|
14
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
15
|
-
|
|
16
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
17
|
-
|
|
18
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
19
|
-
|
|
20
|
-
function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
|
|
21
|
-
|
|
22
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
23
|
-
|
|
24
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
25
|
-
|
|
26
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
27
|
-
|
|
28
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
29
|
-
|
|
30
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
31
|
-
|
|
32
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
33
|
-
|
|
34
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
35
|
-
|
|
36
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
37
|
-
|
|
38
|
-
var Path = /*#__PURE__*/_createClass(function Path(pathExpression, targetName, annotationsTerm, annotationType, term) {
|
|
39
|
-
_classCallCheck(this, Path);
|
|
40
|
-
|
|
41
|
-
this.path = pathExpression.Path;
|
|
42
|
-
this.type = "Path";
|
|
43
|
-
this.$target = targetName;
|
|
44
|
-
this.term = term, this.annotationType = annotationType, this.annotationsTerm = annotationsTerm;
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
var TermToTypes;
|
|
48
|
-
|
|
49
|
-
(function (TermToTypes) {
|
|
50
|
-
TermToTypes["Org.OData.Authorization.V1.SecuritySchemes"] = "Org.OData.Authorization.V1.SecurityScheme";
|
|
51
|
-
TermToTypes["Org.OData.Authorization.V1.Authorizations"] = "Org.OData.Authorization.V1.Authorization";
|
|
52
|
-
TermToTypes["Org.OData.Core.V1.Revisions"] = "Org.OData.Core.V1.RevisionType";
|
|
53
|
-
TermToTypes["Org.OData.Core.V1.Links"] = "Org.OData.Core.V1.Link";
|
|
54
|
-
TermToTypes["Org.OData.Core.V1.Example"] = "Org.OData.Core.V1.ExampleValue";
|
|
55
|
-
TermToTypes["Org.OData.Core.V1.Messages"] = "Org.OData.Core.V1.MessageType";
|
|
56
|
-
TermToTypes["Org.OData.Core.V1.ValueException"] = "Org.OData.Core.V1.ValueExceptionType";
|
|
57
|
-
TermToTypes["Org.OData.Core.V1.ResourceException"] = "Org.OData.Core.V1.ResourceExceptionType";
|
|
58
|
-
TermToTypes["Org.OData.Core.V1.DataModificationException"] = "Org.OData.Core.V1.DataModificationExceptionType";
|
|
59
|
-
TermToTypes["Org.OData.Core.V1.IsLanguageDependent"] = "Org.OData.Core.V1.Tag";
|
|
60
|
-
TermToTypes["Org.OData.Core.V1.DereferenceableIDs"] = "Org.OData.Core.V1.Tag";
|
|
61
|
-
TermToTypes["Org.OData.Core.V1.ConventionalIDs"] = "Org.OData.Core.V1.Tag";
|
|
62
|
-
TermToTypes["Org.OData.Core.V1.Permissions"] = "Org.OData.Core.V1.Permission";
|
|
63
|
-
TermToTypes["Org.OData.Core.V1.DefaultNamespace"] = "Org.OData.Core.V1.Tag";
|
|
64
|
-
TermToTypes["Org.OData.Core.V1.Immutable"] = "Org.OData.Core.V1.Tag";
|
|
65
|
-
TermToTypes["Org.OData.Core.V1.Computed"] = "Org.OData.Core.V1.Tag";
|
|
66
|
-
TermToTypes["Org.OData.Core.V1.ComputedDefaultValue"] = "Org.OData.Core.V1.Tag";
|
|
67
|
-
TermToTypes["Org.OData.Core.V1.IsURL"] = "Org.OData.Core.V1.Tag";
|
|
68
|
-
TermToTypes["Org.OData.Core.V1.IsMediaType"] = "Org.OData.Core.V1.Tag";
|
|
69
|
-
TermToTypes["Org.OData.Core.V1.ContentDisposition"] = "Org.OData.Core.V1.ContentDispositionType";
|
|
70
|
-
TermToTypes["Org.OData.Core.V1.OptimisticConcurrency"] = "Edm.PropertyPath";
|
|
71
|
-
TermToTypes["Org.OData.Core.V1.AdditionalProperties"] = "Org.OData.Core.V1.Tag";
|
|
72
|
-
TermToTypes["Org.OData.Core.V1.AutoExpand"] = "Org.OData.Core.V1.Tag";
|
|
73
|
-
TermToTypes["Org.OData.Core.V1.AutoExpandReferences"] = "Org.OData.Core.V1.Tag";
|
|
74
|
-
TermToTypes["Org.OData.Core.V1.MayImplement"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
75
|
-
TermToTypes["Org.OData.Core.V1.Ordered"] = "Org.OData.Core.V1.Tag";
|
|
76
|
-
TermToTypes["Org.OData.Core.V1.PositionalInsert"] = "Org.OData.Core.V1.Tag";
|
|
77
|
-
TermToTypes["Org.OData.Core.V1.AlternateKeys"] = "Org.OData.Core.V1.AlternateKey";
|
|
78
|
-
TermToTypes["Org.OData.Core.V1.OptionalParameter"] = "Org.OData.Core.V1.OptionalParameterType";
|
|
79
|
-
TermToTypes["Org.OData.Core.V1.OperationAvailable"] = "Edm.Boolean";
|
|
80
|
-
TermToTypes["Org.OData.Core.V1.SymbolicName"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
81
|
-
TermToTypes["Org.OData.Capabilities.V1.ConformanceLevel"] = "Org.OData.Capabilities.V1.ConformanceLevelType";
|
|
82
|
-
TermToTypes["Org.OData.Capabilities.V1.AsynchronousRequestsSupported"] = "Org.OData.Core.V1.Tag";
|
|
83
|
-
TermToTypes["Org.OData.Capabilities.V1.BatchContinueOnErrorSupported"] = "Org.OData.Core.V1.Tag";
|
|
84
|
-
TermToTypes["Org.OData.Capabilities.V1.IsolationSupported"] = "Org.OData.Capabilities.V1.IsolationLevel";
|
|
85
|
-
TermToTypes["Org.OData.Capabilities.V1.CrossJoinSupported"] = "Org.OData.Core.V1.Tag";
|
|
86
|
-
TermToTypes["Org.OData.Capabilities.V1.CallbackSupported"] = "Org.OData.Capabilities.V1.CallbackType";
|
|
87
|
-
TermToTypes["Org.OData.Capabilities.V1.ChangeTracking"] = "Org.OData.Capabilities.V1.ChangeTrackingType";
|
|
88
|
-
TermToTypes["Org.OData.Capabilities.V1.CountRestrictions"] = "Org.OData.Capabilities.V1.CountRestrictionsType";
|
|
89
|
-
TermToTypes["Org.OData.Capabilities.V1.NavigationRestrictions"] = "Org.OData.Capabilities.V1.NavigationRestrictionsType";
|
|
90
|
-
TermToTypes["Org.OData.Capabilities.V1.IndexableByKey"] = "Org.OData.Core.V1.Tag";
|
|
91
|
-
TermToTypes["Org.OData.Capabilities.V1.TopSupported"] = "Org.OData.Core.V1.Tag";
|
|
92
|
-
TermToTypes["Org.OData.Capabilities.V1.SkipSupported"] = "Org.OData.Core.V1.Tag";
|
|
93
|
-
TermToTypes["Org.OData.Capabilities.V1.ComputeSupported"] = "Org.OData.Core.V1.Tag";
|
|
94
|
-
TermToTypes["Org.OData.Capabilities.V1.SelectSupport"] = "Org.OData.Capabilities.V1.SelectSupportType";
|
|
95
|
-
TermToTypes["Org.OData.Capabilities.V1.BatchSupported"] = "Org.OData.Core.V1.Tag";
|
|
96
|
-
TermToTypes["Org.OData.Capabilities.V1.BatchSupport"] = "Org.OData.Capabilities.V1.BatchSupportType";
|
|
97
|
-
TermToTypes["Org.OData.Capabilities.V1.FilterRestrictions"] = "Org.OData.Capabilities.V1.FilterRestrictionsType";
|
|
98
|
-
TermToTypes["Org.OData.Capabilities.V1.SortRestrictions"] = "Org.OData.Capabilities.V1.SortRestrictionsType";
|
|
99
|
-
TermToTypes["Org.OData.Capabilities.V1.ExpandRestrictions"] = "Org.OData.Capabilities.V1.ExpandRestrictionsType";
|
|
100
|
-
TermToTypes["Org.OData.Capabilities.V1.SearchRestrictions"] = "Org.OData.Capabilities.V1.SearchRestrictionsType";
|
|
101
|
-
TermToTypes["Org.OData.Capabilities.V1.KeyAsSegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
102
|
-
TermToTypes["Org.OData.Capabilities.V1.QuerySegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
103
|
-
TermToTypes["Org.OData.Capabilities.V1.InsertRestrictions"] = "Org.OData.Capabilities.V1.InsertRestrictionsType";
|
|
104
|
-
TermToTypes["Org.OData.Capabilities.V1.DeepInsertSupport"] = "Org.OData.Capabilities.V1.DeepInsertSupportType";
|
|
105
|
-
TermToTypes["Org.OData.Capabilities.V1.UpdateRestrictions"] = "Org.OData.Capabilities.V1.UpdateRestrictionsType";
|
|
106
|
-
TermToTypes["Org.OData.Capabilities.V1.DeepUpdateSupport"] = "Org.OData.Capabilities.V1.DeepUpdateSupportType";
|
|
107
|
-
TermToTypes["Org.OData.Capabilities.V1.DeleteRestrictions"] = "Org.OData.Capabilities.V1.DeleteRestrictionsType";
|
|
108
|
-
TermToTypes["Org.OData.Capabilities.V1.CollectionPropertyRestrictions"] = "Org.OData.Capabilities.V1.CollectionPropertyRestrictionsType";
|
|
109
|
-
TermToTypes["Org.OData.Capabilities.V1.OperationRestrictions"] = "Org.OData.Capabilities.V1.OperationRestrictionsType";
|
|
110
|
-
TermToTypes["Org.OData.Capabilities.V1.AnnotationValuesInQuerySupported"] = "Org.OData.Core.V1.Tag";
|
|
111
|
-
TermToTypes["Org.OData.Capabilities.V1.ModificationQueryOptions"] = "Org.OData.Capabilities.V1.ModificationQueryOptionsType";
|
|
112
|
-
TermToTypes["Org.OData.Capabilities.V1.ReadRestrictions"] = "Org.OData.Capabilities.V1.ReadRestrictionsType";
|
|
113
|
-
TermToTypes["Org.OData.Capabilities.V1.CustomHeaders"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
114
|
-
TermToTypes["Org.OData.Capabilities.V1.CustomQueryOptions"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
115
|
-
TermToTypes["Org.OData.Capabilities.V1.MediaLocationUpdateSupported"] = "Org.OData.Core.V1.Tag";
|
|
116
|
-
TermToTypes["Org.OData.Aggregation.V1.ApplySupported"] = "Org.OData.Aggregation.V1.ApplySupportedType";
|
|
117
|
-
TermToTypes["Org.OData.Aggregation.V1.Groupable"] = "Org.OData.Core.V1.Tag";
|
|
118
|
-
TermToTypes["Org.OData.Aggregation.V1.Aggregatable"] = "Org.OData.Core.V1.Tag";
|
|
119
|
-
TermToTypes["Org.OData.Aggregation.V1.ContextDefiningProperties"] = "Edm.PropertyPath";
|
|
120
|
-
TermToTypes["Org.OData.Aggregation.V1.LeveledHierarchy"] = "Edm.PropertyPath";
|
|
121
|
-
TermToTypes["Org.OData.Aggregation.V1.RecursiveHierarchy"] = "Org.OData.Aggregation.V1.RecursiveHierarchyType";
|
|
122
|
-
TermToTypes["Org.OData.Aggregation.V1.AvailableOnAggregates"] = "Org.OData.Aggregation.V1.AvailableOnAggregatesType";
|
|
123
|
-
TermToTypes["Org.OData.Validation.V1.Minimum"] = "Edm.PrimitiveType";
|
|
124
|
-
TermToTypes["Org.OData.Validation.V1.Maximum"] = "Edm.PrimitiveType";
|
|
125
|
-
TermToTypes["Org.OData.Validation.V1.Exclusive"] = "Org.OData.Core.V1.Tag";
|
|
126
|
-
TermToTypes["Org.OData.Validation.V1.AllowedValues"] = "Org.OData.Validation.V1.AllowedValue";
|
|
127
|
-
TermToTypes["Org.OData.Validation.V1.MultipleOf"] = "Edm.Decimal";
|
|
128
|
-
TermToTypes["Org.OData.Validation.V1.Constraint"] = "Org.OData.Validation.V1.ConstraintType";
|
|
129
|
-
TermToTypes["Org.OData.Validation.V1.ItemsOf"] = "Org.OData.Validation.V1.ItemsOfType";
|
|
130
|
-
TermToTypes["Org.OData.Validation.V1.OpenPropertyTypeConstraint"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
131
|
-
TermToTypes["Org.OData.Validation.V1.DerivedTypeConstraint"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
132
|
-
TermToTypes["Org.OData.Validation.V1.AllowedTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
133
|
-
TermToTypes["Org.OData.Validation.V1.ApplicableTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
134
|
-
TermToTypes["Org.OData.Validation.V1.MaxItems"] = "Edm.Int64";
|
|
135
|
-
TermToTypes["Org.OData.Validation.V1.MinItems"] = "Edm.Int64";
|
|
136
|
-
TermToTypes["Org.OData.Measures.V1.Scale"] = "Edm.Byte";
|
|
137
|
-
TermToTypes["Org.OData.Measures.V1.DurationGranularity"] = "Org.OData.Measures.V1.DurationGranularityType";
|
|
138
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.Dimension"] = "Org.OData.Core.V1.Tag";
|
|
139
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.Measure"] = "Org.OData.Core.V1.Tag";
|
|
140
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.AccumulativeMeasure"] = "Org.OData.Core.V1.Tag";
|
|
141
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.RolledUpPropertyCount"] = "Edm.Int16";
|
|
142
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.PlanningAction"] = "Org.OData.Core.V1.Tag";
|
|
143
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.AggregatedProperties"] = "com.sap.vocabularies.Analytics.v1.AggregatedPropertyType";
|
|
144
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ServiceVersion"] = "Edm.Int32";
|
|
145
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ServiceSchemaVersion"] = "Edm.Int32";
|
|
146
|
-
TermToTypes["com.sap.vocabularies.Common.v1.TextFor"] = "Edm.PropertyPath";
|
|
147
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsLanguageIdentifier"] = "Org.OData.Core.V1.Tag";
|
|
148
|
-
TermToTypes["com.sap.vocabularies.Common.v1.TextFormat"] = "com.sap.vocabularies.Common.v1.TextFormatType";
|
|
149
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDigitSequence"] = "Org.OData.Core.V1.Tag";
|
|
150
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsUpperCase"] = "Org.OData.Core.V1.Tag";
|
|
151
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCurrency"] = "Org.OData.Core.V1.Tag";
|
|
152
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsUnit"] = "Org.OData.Core.V1.Tag";
|
|
153
|
-
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificScale"] = "Edm.PrimitiveType";
|
|
154
|
-
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificPrecision"] = "Edm.PrimitiveType";
|
|
155
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SecondaryKey"] = "Edm.PropertyPath";
|
|
156
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MinOccurs"] = "Edm.Int64";
|
|
157
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MaxOccurs"] = "Edm.Int64";
|
|
158
|
-
TermToTypes["com.sap.vocabularies.Common.v1.AssociationEntity"] = "Edm.NavigationPropertyPath";
|
|
159
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DerivedNavigation"] = "Edm.NavigationPropertyPath";
|
|
160
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Masked"] = "Org.OData.Core.V1.Tag";
|
|
161
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MaskedAlways"] = "Org.OData.Core.V1.Tag";
|
|
162
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SemanticObjectMapping"] = "com.sap.vocabularies.Common.v1.SemanticObjectMappingType";
|
|
163
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsInstanceAnnotation"] = "Org.OData.Core.V1.Tag";
|
|
164
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FilterExpressionRestrictions"] = "com.sap.vocabularies.Common.v1.FilterExpressionRestrictionType";
|
|
165
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FieldControl"] = "com.sap.vocabularies.Common.v1.FieldControlType";
|
|
166
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Application"] = "com.sap.vocabularies.Common.v1.ApplicationType";
|
|
167
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Timestamp"] = "Edm.DateTimeOffset";
|
|
168
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ErrorResolution"] = "com.sap.vocabularies.Common.v1.ErrorResolutionType";
|
|
169
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Messages"] = "Edm.ComplexType";
|
|
170
|
-
TermToTypes["com.sap.vocabularies.Common.v1.numericSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
171
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MaximumNumericMessageSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
172
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsActionCritical"] = "Edm.Boolean";
|
|
173
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Attributes"] = "Edm.PropertyPath";
|
|
174
|
-
TermToTypes["com.sap.vocabularies.Common.v1.RelatedRecursiveHierarchy"] = "Edm.AnnotationPath";
|
|
175
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Interval"] = "com.sap.vocabularies.Common.v1.IntervalType";
|
|
176
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ResultContext"] = "Org.OData.Core.V1.Tag";
|
|
177
|
-
TermToTypes["com.sap.vocabularies.Common.v1.WeakReferentialConstraint"] = "com.sap.vocabularies.Common.v1.WeakReferentialConstraintType";
|
|
178
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsNaturalPerson"] = "Org.OData.Core.V1.Tag";
|
|
179
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueList"] = "com.sap.vocabularies.Common.v1.ValueListType";
|
|
180
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueListRelevantQualifiers"] = "com.sap.vocabularies.Common.v1.SimpleIdentifier";
|
|
181
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueListWithFixedValues"] = "Org.OData.Core.V1.Tag";
|
|
182
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueListMapping"] = "com.sap.vocabularies.Common.v1.ValueListMappingType";
|
|
183
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
184
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
185
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarQuarter"] = "Org.OData.Core.V1.Tag";
|
|
186
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
187
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarWeek"] = "Org.OData.Core.V1.Tag";
|
|
188
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
189
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
190
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
191
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
192
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearMonth"] = "Org.OData.Core.V1.Tag";
|
|
193
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
194
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarDate"] = "Org.OData.Core.V1.Tag";
|
|
195
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
196
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalPeriod"] = "Org.OData.Core.V1.Tag";
|
|
197
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearPeriod"] = "Org.OData.Core.V1.Tag";
|
|
198
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalQuarter"] = "Org.OData.Core.V1.Tag";
|
|
199
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
200
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalWeek"] = "Org.OData.Core.V1.Tag";
|
|
201
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
202
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
203
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearVariant"] = "Org.OData.Core.V1.Tag";
|
|
204
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MutuallyExclusiveTerm"] = "Org.OData.Core.V1.Tag";
|
|
205
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DraftRoot"] = "com.sap.vocabularies.Common.v1.DraftRootType";
|
|
206
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DraftNode"] = "com.sap.vocabularies.Common.v1.DraftNodeType";
|
|
207
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DraftActivationVia"] = "com.sap.vocabularies.Common.v1.SimpleIdentifier";
|
|
208
|
-
TermToTypes["com.sap.vocabularies.Common.v1.EditableFieldFor"] = "Edm.PropertyPath";
|
|
209
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SemanticKey"] = "Edm.PropertyPath";
|
|
210
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SideEffects"] = "com.sap.vocabularies.Common.v1.SideEffectsType";
|
|
211
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DefaultValuesFunction"] = "com.sap.vocabularies.Common.v1.QualifiedName";
|
|
212
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValue"] = "Edm.PrimitiveType";
|
|
213
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValueHigh"] = "Edm.PrimitiveType";
|
|
214
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SortOrder"] = "com.sap.vocabularies.Common.v1.SortOrderType";
|
|
215
|
-
TermToTypes["com.sap.vocabularies.Common.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Common.v1.RecursiveHierarchyType";
|
|
216
|
-
TermToTypes["com.sap.vocabularies.Common.v1.CreatedAt"] = "Edm.DateTimeOffset";
|
|
217
|
-
TermToTypes["com.sap.vocabularies.Common.v1.CreatedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
218
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ChangedAt"] = "Edm.DateTimeOffset";
|
|
219
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ChangedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
220
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ApplyMultiUnitBehaviorForSortingAndFiltering"] = "Org.OData.Core.V1.Tag";
|
|
221
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.CurrencyCodes"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
222
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.UnitsOfMeasure"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
223
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.StandardCode"] = "Edm.PropertyPath";
|
|
224
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.ExternalCode"] = "Edm.PropertyPath";
|
|
225
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.IsConfigurationDeprecationCode"] = "Edm.Boolean";
|
|
226
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Contact"] = "com.sap.vocabularies.Communication.v1.ContactType";
|
|
227
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Address"] = "com.sap.vocabularies.Communication.v1.AddressType";
|
|
228
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.IsEmailAddress"] = "Org.OData.Core.V1.Tag";
|
|
229
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.IsPhoneNumber"] = "Org.OData.Core.V1.Tag";
|
|
230
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Event"] = "com.sap.vocabularies.Communication.v1.EventData";
|
|
231
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Task"] = "com.sap.vocabularies.Communication.v1.TaskData";
|
|
232
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Message"] = "com.sap.vocabularies.Communication.v1.MessageData";
|
|
233
|
-
TermToTypes["com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchyType";
|
|
234
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.EntitySemantics"] = "com.sap.vocabularies.PersonalData.v1.EntitySemanticsType";
|
|
235
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.FieldSemantics"] = "com.sap.vocabularies.PersonalData.v1.FieldSemanticsType";
|
|
236
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallyPersonal"] = "Org.OData.Core.V1.Tag";
|
|
237
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] = "Org.OData.Core.V1.Tag";
|
|
238
|
-
TermToTypes["com.sap.vocabularies.Session.v1.StickySessionSupported"] = "com.sap.vocabularies.Session.v1.StickySessionSupportedType";
|
|
239
|
-
TermToTypes["com.sap.vocabularies.UI.v1.HeaderInfo"] = "com.sap.vocabularies.UI.v1.HeaderInfoType";
|
|
240
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Identification"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
241
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Badge"] = "com.sap.vocabularies.UI.v1.BadgeType";
|
|
242
|
-
TermToTypes["com.sap.vocabularies.UI.v1.LineItem"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
243
|
-
TermToTypes["com.sap.vocabularies.UI.v1.StatusInfo"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
244
|
-
TermToTypes["com.sap.vocabularies.UI.v1.FieldGroup"] = "com.sap.vocabularies.UI.v1.FieldGroupType";
|
|
245
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ConnectedFields"] = "com.sap.vocabularies.UI.v1.ConnectedFieldsType";
|
|
246
|
-
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocations"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
247
|
-
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocation"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
248
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Contacts"] = "Edm.AnnotationPath";
|
|
249
|
-
TermToTypes["com.sap.vocabularies.UI.v1.MediaResource"] = "com.sap.vocabularies.UI.v1.MediaResourceType";
|
|
250
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DataPoint"] = "com.sap.vocabularies.UI.v1.DataPointType";
|
|
251
|
-
TermToTypes["com.sap.vocabularies.UI.v1.KPI"] = "com.sap.vocabularies.UI.v1.KPIType";
|
|
252
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Chart"] = "com.sap.vocabularies.UI.v1.ChartDefinitionType";
|
|
253
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ValueCriticality"] = "com.sap.vocabularies.UI.v1.ValueCriticalityType";
|
|
254
|
-
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityLabels"] = "com.sap.vocabularies.UI.v1.CriticalityLabelType";
|
|
255
|
-
TermToTypes["com.sap.vocabularies.UI.v1.SelectionFields"] = "Edm.PropertyPath";
|
|
256
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Facets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
257
|
-
TermToTypes["com.sap.vocabularies.UI.v1.HeaderFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
258
|
-
TermToTypes["com.sap.vocabularies.UI.v1.QuickViewFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
259
|
-
TermToTypes["com.sap.vocabularies.UI.v1.QuickCreateFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
260
|
-
TermToTypes["com.sap.vocabularies.UI.v1.FilterFacets"] = "com.sap.vocabularies.UI.v1.ReferenceFacet";
|
|
261
|
-
TermToTypes["com.sap.vocabularies.UI.v1.SelectionPresentationVariant"] = "com.sap.vocabularies.UI.v1.SelectionPresentationVariantType";
|
|
262
|
-
TermToTypes["com.sap.vocabularies.UI.v1.PresentationVariant"] = "com.sap.vocabularies.UI.v1.PresentationVariantType";
|
|
263
|
-
TermToTypes["com.sap.vocabularies.UI.v1.SelectionVariant"] = "com.sap.vocabularies.UI.v1.SelectionVariantType";
|
|
264
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ThingPerspective"] = "Org.OData.Core.V1.Tag";
|
|
265
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsSummary"] = "Org.OData.Core.V1.Tag";
|
|
266
|
-
TermToTypes["com.sap.vocabularies.UI.v1.PartOfPreview"] = "Org.OData.Core.V1.Tag";
|
|
267
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Map"] = "Org.OData.Core.V1.Tag";
|
|
268
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Gallery"] = "Org.OData.Core.V1.Tag";
|
|
269
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsImageURL"] = "Org.OData.Core.V1.Tag";
|
|
270
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsImage"] = "Org.OData.Core.V1.Tag";
|
|
271
|
-
TermToTypes["com.sap.vocabularies.UI.v1.MultiLineText"] = "Org.OData.Core.V1.Tag";
|
|
272
|
-
TermToTypes["com.sap.vocabularies.UI.v1.TextArrangement"] = "com.sap.vocabularies.UI.v1.TextArrangementType";
|
|
273
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Importance"] = "com.sap.vocabularies.UI.v1.ImportanceType";
|
|
274
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Hidden"] = "Org.OData.Core.V1.Tag";
|
|
275
|
-
TermToTypes["com.sap.vocabularies.UI.v1.CreateHidden"] = "Org.OData.Core.V1.Tag";
|
|
276
|
-
TermToTypes["com.sap.vocabularies.UI.v1.UpdateHidden"] = "Org.OData.Core.V1.Tag";
|
|
277
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DeleteHidden"] = "Org.OData.Core.V1.Tag";
|
|
278
|
-
TermToTypes["com.sap.vocabularies.UI.v1.HiddenFilter"] = "Org.OData.Core.V1.Tag";
|
|
279
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DataFieldDefault"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
280
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Criticality"] = "com.sap.vocabularies.UI.v1.CriticalityType";
|
|
281
|
-
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityCalculation"] = "com.sap.vocabularies.UI.v1.CriticalityCalculationType";
|
|
282
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Emphasized"] = "Org.OData.Core.V1.Tag";
|
|
283
|
-
TermToTypes["com.sap.vocabularies.UI.v1.OrderBy"] = "Edm.PropertyPath";
|
|
284
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ParameterDefaultValue"] = "Edm.PrimitiveType";
|
|
285
|
-
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationState"] = "com.sap.vocabularies.UI.v1.RecommendationStateType";
|
|
286
|
-
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationList"] = "com.sap.vocabularies.UI.v1.RecommendationListType";
|
|
287
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] = "Org.OData.Core.V1.Tag";
|
|
288
|
-
TermToTypes["com.sap.vocabularies.HTML5.v1.CssDefaults"] = "com.sap.vocabularies.HTML5.v1.CssDefaultsType";
|
|
289
|
-
})(TermToTypes || (TermToTypes = {}));
|
|
290
|
-
|
|
291
|
-
var defaultReferences = [{
|
|
292
|
-
alias: "Capabilities",
|
|
293
|
-
namespace: "Org.OData.Capabilities.V1",
|
|
294
|
-
uri: ""
|
|
295
|
-
}, {
|
|
296
|
-
alias: "Aggregation",
|
|
297
|
-
namespace: "Org.OData.Aggregation.V1",
|
|
298
|
-
uri: ""
|
|
299
|
-
}, {
|
|
300
|
-
alias: "Validation",
|
|
301
|
-
namespace: "Org.OData.Validation.V1",
|
|
302
|
-
uri: ""
|
|
303
|
-
}, {
|
|
304
|
-
namespace: "Org.OData.Core.V1",
|
|
305
|
-
alias: "Core",
|
|
306
|
-
uri: ""
|
|
307
|
-
}, {
|
|
308
|
-
namespace: "Org.OData.Measures.V1",
|
|
309
|
-
alias: "Measures",
|
|
310
|
-
uri: ""
|
|
311
|
-
}, {
|
|
312
|
-
namespace: "com.sap.vocabularies.Common.v1",
|
|
313
|
-
alias: "Common",
|
|
314
|
-
uri: ""
|
|
315
|
-
}, {
|
|
316
|
-
namespace: "com.sap.vocabularies.UI.v1",
|
|
317
|
-
alias: "UI",
|
|
318
|
-
uri: ""
|
|
319
|
-
}, {
|
|
320
|
-
namespace: "com.sap.vocabularies.Session.v1",
|
|
321
|
-
alias: "Session",
|
|
322
|
-
uri: ""
|
|
323
|
-
}, {
|
|
324
|
-
namespace: "com.sap.vocabularies.Analytics.v1",
|
|
325
|
-
alias: "Analytics",
|
|
326
|
-
uri: ""
|
|
327
|
-
}, {
|
|
328
|
-
namespace: "com.sap.vocabularies.CodeList.v1",
|
|
329
|
-
alias: "CodeList",
|
|
330
|
-
uri: ""
|
|
331
|
-
}, {
|
|
332
|
-
namespace: "com.sap.vocabularies.PersonalData.v1",
|
|
333
|
-
alias: "PersonalData",
|
|
334
|
-
uri: ""
|
|
335
|
-
}, {
|
|
336
|
-
namespace: "com.sap.vocabularies.Communication.v1",
|
|
337
|
-
alias: "Communication",
|
|
338
|
-
uri: ""
|
|
339
|
-
}, {
|
|
340
|
-
namespace: "com.sap.vocabularies.HTML5.v1",
|
|
341
|
-
alias: "HTML5",
|
|
342
|
-
uri: ""
|
|
343
|
-
}];
|
|
344
|
-
_exports.defaultReferences = defaultReferences;
|
|
345
|
-
|
|
346
|
-
function alias(references, unaliasedValue) {
|
|
347
|
-
if (!references.reverseReferenceMap) {
|
|
348
|
-
references.reverseReferenceMap = references.reduce(function (map, reference) {
|
|
349
|
-
map[reference.namespace] = reference;
|
|
350
|
-
return map;
|
|
351
|
-
}, {});
|
|
352
|
-
}
|
|
12
|
+
function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
|
|
353
13
|
|
|
354
|
-
|
|
355
|
-
return unaliasedValue;
|
|
356
|
-
}
|
|
14
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
357
15
|
|
|
358
|
-
|
|
359
|
-
var namespace = unaliasedValue.substr(0, lastDotIndex);
|
|
360
|
-
var value = unaliasedValue.substr(lastDotIndex + 1);
|
|
361
|
-
var reference = references.reverseReferenceMap[namespace];
|
|
362
|
-
|
|
363
|
-
if (reference) {
|
|
364
|
-
return "".concat(reference.alias, ".").concat(value);
|
|
365
|
-
} else {
|
|
366
|
-
// Try to see if it's an annotation Path like to_SalesOrder/@UI.LineItem
|
|
367
|
-
if (unaliasedValue.indexOf("@") !== -1) {
|
|
368
|
-
var _unaliasedValue$split = unaliasedValue.split("@"),
|
|
369
|
-
_unaliasedValue$split2 = _toArray(_unaliasedValue$split),
|
|
370
|
-
preAlias = _unaliasedValue$split2[0],
|
|
371
|
-
postAlias = _unaliasedValue$split2.slice(1);
|
|
372
|
-
|
|
373
|
-
return "".concat(preAlias, "@").concat(alias(references, postAlias.join("@")));
|
|
374
|
-
} else {
|
|
375
|
-
return unaliasedValue;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
}
|
|
16
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
379
17
|
|
|
380
|
-
|
|
381
|
-
if (!references.referenceMap) {
|
|
382
|
-
references.referenceMap = references.reduce(function (map, reference) {
|
|
383
|
-
map[reference.alias] = reference;
|
|
384
|
-
return map;
|
|
385
|
-
}, {});
|
|
386
|
-
}
|
|
18
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
387
19
|
|
|
388
|
-
|
|
389
|
-
return aliasedValue;
|
|
390
|
-
}
|
|
20
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
391
21
|
|
|
392
|
-
|
|
393
|
-
_aliasedValue$split2 = _toArray(_aliasedValue$split),
|
|
394
|
-
alias = _aliasedValue$split2[0],
|
|
395
|
-
value = _aliasedValue$split2.slice(1);
|
|
396
|
-
|
|
397
|
-
var reference = references.referenceMap[alias];
|
|
398
|
-
|
|
399
|
-
if (reference) {
|
|
400
|
-
return "".concat(reference.namespace, ".").concat(value.join("."));
|
|
401
|
-
} else {
|
|
402
|
-
// Try to see if it's an annotation Path like to_SalesOrder/@UI.LineItem
|
|
403
|
-
if (aliasedValue.indexOf("@") !== -1) {
|
|
404
|
-
var _aliasedValue$split3 = aliasedValue.split("@"),
|
|
405
|
-
_aliasedValue$split4 = _toArray(_aliasedValue$split3),
|
|
406
|
-
preAlias = _aliasedValue$split4[0],
|
|
407
|
-
postAlias = _aliasedValue$split4.slice(1);
|
|
408
|
-
|
|
409
|
-
return "".concat(preAlias, "@").concat(unalias(references, postAlias.join("@")));
|
|
410
|
-
} else {
|
|
411
|
-
return aliasedValue;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
}
|
|
22
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
415
23
|
|
|
416
|
-
|
|
417
|
-
var objectMap = {};
|
|
24
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
418
25
|
|
|
419
|
-
|
|
420
|
-
objectMap[parserOutput.schema.entityContainer.fullyQualifiedName] = parserOutput.schema.entityContainer;
|
|
421
|
-
}
|
|
26
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
422
27
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
});
|
|
426
|
-
parserOutput.schema.actions.forEach(function (action) {
|
|
427
|
-
objectMap[action.fullyQualifiedName] = action;
|
|
28
|
+
var AnnotationConverter;
|
|
29
|
+
/******/
|
|
428
30
|
|
|
429
|
-
|
|
430
|
-
|
|
31
|
+
(function () {
|
|
32
|
+
// webpackBootstrap
|
|
431
33
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
34
|
+
/******/
|
|
35
|
+
"use strict";
|
|
36
|
+
/******/
|
|
37
|
+
|
|
38
|
+
var __webpack_modules__ = {
|
|
39
|
+
/***/
|
|
40
|
+
875:
|
|
41
|
+
/***/
|
|
42
|
+
function (__unused_webpack_module, exports, __webpack_require__) {
|
|
43
|
+
Object.defineProperty(exports, "__esModule", {
|
|
44
|
+
value: true
|
|
45
|
+
});
|
|
46
|
+
exports.convert = void 0;
|
|
47
|
+
|
|
48
|
+
var utils_1 = __webpack_require__(69);
|
|
49
|
+
/**
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
var Path =
|
|
55
|
+
/**
|
|
56
|
+
* @param pathExpression
|
|
57
|
+
* @param targetName
|
|
58
|
+
* @param annotationsTerm
|
|
59
|
+
* @param term
|
|
60
|
+
*/
|
|
61
|
+
function Path(pathExpression, targetName, annotationsTerm, term) {
|
|
62
|
+
this.path = pathExpression.Path;
|
|
63
|
+
this.type = 'Path';
|
|
64
|
+
this.$target = targetName;
|
|
65
|
+
this.term = term;
|
|
66
|
+
this.annotationsTerm = annotationsTerm;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Creates a Map based on the fullyQualifiedName of each object part of the metadata.
|
|
70
|
+
*
|
|
71
|
+
* @param rawMetadata the rawMetadata we're working against
|
|
72
|
+
* @returns the objectmap for easy access to the different object of the metadata
|
|
73
|
+
*/
|
|
438
74
|
|
|
439
|
-
objectMap[unBoundActionName].actions.push(action);
|
|
440
|
-
}
|
|
441
75
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
});
|
|
445
|
-
});
|
|
446
|
-
parserOutput.schema.complexTypes.forEach(function (complexType) {
|
|
447
|
-
objectMap[complexType.fullyQualifiedName] = complexType;
|
|
448
|
-
complexType.properties.forEach(function (property) {
|
|
449
|
-
objectMap[property.fullyQualifiedName] = property;
|
|
450
|
-
});
|
|
451
|
-
});
|
|
452
|
-
parserOutput.schema.typeDefinitions.forEach(function (typeDefinition) {
|
|
453
|
-
objectMap[typeDefinition.fullyQualifiedName] = typeDefinition;
|
|
454
|
-
});
|
|
455
|
-
parserOutput.schema.entityTypes.forEach(function (entityType) {
|
|
456
|
-
objectMap[entityType.fullyQualifiedName] = entityType;
|
|
457
|
-
entityType.entityProperties.forEach(function (property) {
|
|
458
|
-
objectMap[property.fullyQualifiedName] = property;
|
|
459
|
-
|
|
460
|
-
if (property.type.indexOf("Edm") !== 0) {
|
|
461
|
-
// Handle complex types
|
|
462
|
-
var complexTypeDefinition = objectMap[property.type];
|
|
463
|
-
|
|
464
|
-
if (complexTypeDefinition && complexTypeDefinition._type === "ComplexType" && complexTypeDefinition.properties) {
|
|
465
|
-
complexTypeDefinition.properties.forEach(function (complexTypeProp) {
|
|
466
|
-
var complexTypePropTarget = Object.assign(complexTypeProp, {
|
|
467
|
-
_type: "Property",
|
|
468
|
-
fullyQualifiedName: property.fullyQualifiedName + "/" + complexTypeProp.name
|
|
469
|
-
});
|
|
470
|
-
objectMap[complexTypePropTarget.fullyQualifiedName] = complexTypePropTarget;
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
entityType.navigationProperties.forEach(function (navProperty) {
|
|
476
|
-
objectMap[navProperty.fullyQualifiedName] = navProperty;
|
|
477
|
-
});
|
|
478
|
-
});
|
|
479
|
-
Object.keys(parserOutput.schema.annotations).forEach(function (annotationSource) {
|
|
480
|
-
parserOutput.schema.annotations[annotationSource].forEach(function (annotationList) {
|
|
481
|
-
var currentTargetName = unalias(parserOutput.references, annotationList.target);
|
|
482
|
-
annotationList.annotations.forEach(function (annotation) {
|
|
483
|
-
var annotationFQN = "".concat(currentTargetName, "@").concat(unalias(parserOutput.references, annotation.term));
|
|
76
|
+
function buildObjectMap(rawMetadata) {
|
|
77
|
+
var _a;
|
|
484
78
|
|
|
485
|
-
|
|
486
|
-
annotationFQN += "#".concat(annotation.qualifier);
|
|
487
|
-
}
|
|
79
|
+
var objectMap = {};
|
|
488
80
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
81
|
+
if ((_a = rawMetadata.schema.entityContainer) === null || _a === void 0 ? void 0 : _a.fullyQualifiedName) {
|
|
82
|
+
objectMap[rawMetadata.schema.entityContainer.fullyQualifiedName] = rawMetadata.schema.entityContainer;
|
|
83
|
+
}
|
|
492
84
|
|
|
493
|
-
|
|
494
|
-
|
|
85
|
+
rawMetadata.schema.entitySets.forEach(function (entitySet) {
|
|
86
|
+
objectMap[entitySet.fullyQualifiedName] = entitySet;
|
|
495
87
|
});
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
return objectMap;
|
|
499
|
-
}
|
|
88
|
+
rawMetadata.schema.actions.forEach(function (action) {
|
|
89
|
+
objectMap[action.fullyQualifiedName] = action;
|
|
500
90
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
return currentTarget + unalias(defaultReferences, path);
|
|
504
|
-
} else {
|
|
505
|
-
return currentTarget + "/" + path;
|
|
506
|
-
}
|
|
507
|
-
}
|
|
91
|
+
if (action.isBound) {
|
|
92
|
+
var unBoundActionName = action.fullyQualifiedName.split('(')[0];
|
|
508
93
|
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
}
|
|
94
|
+
if (!objectMap[unBoundActionName]) {
|
|
95
|
+
objectMap[unBoundActionName] = {
|
|
96
|
+
_type: 'UnboundGenericAction',
|
|
97
|
+
actions: []
|
|
98
|
+
};
|
|
99
|
+
}
|
|
516
100
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
var annotationsTerm = arguments.length > 6 ? arguments[6] : undefined;
|
|
101
|
+
objectMap[unBoundActionName].actions.push(action);
|
|
102
|
+
var actionSplit = action.fullyQualifiedName.split('(');
|
|
103
|
+
objectMap["".concat(actionSplit[1].split(')')[0], "/").concat(actionSplit[0])] = action;
|
|
104
|
+
}
|
|
522
105
|
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
106
|
+
action.parameters.forEach(function (parameter) {
|
|
107
|
+
objectMap[parameter.fullyQualifiedName] = parameter;
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
rawMetadata.schema.complexTypes.forEach(function (complexType) {
|
|
111
|
+
objectMap[complexType.fullyQualifiedName] = complexType;
|
|
112
|
+
complexType.properties.forEach(function (property) {
|
|
113
|
+
objectMap[property.fullyQualifiedName] = property;
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
rawMetadata.schema.typeDefinitions.forEach(function (typeDefinition) {
|
|
117
|
+
objectMap[typeDefinition.fullyQualifiedName] = typeDefinition;
|
|
118
|
+
});
|
|
119
|
+
rawMetadata.schema.entityTypes.forEach(function (entityType) {
|
|
120
|
+
entityType.annotations = {}; // 'annotations' property is mandatory
|
|
121
|
+
|
|
122
|
+
objectMap[entityType.fullyQualifiedName] = entityType;
|
|
123
|
+
entityType.entityProperties.forEach(function (property) {
|
|
124
|
+
objectMap[property.fullyQualifiedName] = property; // Handle complex types
|
|
125
|
+
|
|
126
|
+
var complexTypeDefinition = objectMap[property.type];
|
|
127
|
+
|
|
128
|
+
if ((0, utils_1.isComplexTypeDefinition)(complexTypeDefinition)) {
|
|
129
|
+
complexTypeDefinition.properties.forEach(function (complexTypeProp) {
|
|
130
|
+
var complexTypePropTarget = Object.assign(complexTypeProp, {
|
|
131
|
+
_type: 'Property',
|
|
132
|
+
fullyQualifiedName: property.fullyQualifiedName + '/' + complexTypeProp.name
|
|
133
|
+
});
|
|
134
|
+
objectMap[complexTypePropTarget.fullyQualifiedName] = complexTypePropTarget;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
entityType.navigationProperties.forEach(function (navProperty) {
|
|
139
|
+
objectMap[navProperty.fullyQualifiedName] = navProperty;
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
Object.keys(rawMetadata.schema.annotations).forEach(function (annotationSource) {
|
|
143
|
+
rawMetadata.schema.annotations[annotationSource].forEach(function (annotationList) {
|
|
144
|
+
var currentTargetName = (0, utils_1.unalias)(rawMetadata.references, annotationList.target);
|
|
145
|
+
annotationList.annotations.forEach(function (annotation) {
|
|
146
|
+
var annotationFQN = "".concat(currentTargetName, "@").concat((0, utils_1.unalias)(rawMetadata.references, annotation.term));
|
|
526
147
|
|
|
148
|
+
if (annotation.qualifier) {
|
|
149
|
+
annotationFQN += "#".concat(annotation.qualifier);
|
|
150
|
+
}
|
|
527
151
|
|
|
528
|
-
|
|
152
|
+
objectMap[annotationFQN] = annotation;
|
|
153
|
+
annotation.fullyQualifiedName = annotationFQN;
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
return objectMap;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Combine two strings representing path in the metamodel while ensuring their specificities (annotation...) are respected.
|
|
161
|
+
*
|
|
162
|
+
* @param currentTarget the current path
|
|
163
|
+
* @param path the part we want to append
|
|
164
|
+
* @returns the complete path including the extension.
|
|
165
|
+
*/
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
function combinePath(currentTarget, path) {
|
|
169
|
+
if (path.startsWith('@')) {
|
|
170
|
+
return currentTarget + (0, utils_1.unalias)(utils_1.defaultReferences, path);
|
|
171
|
+
} else {
|
|
172
|
+
return currentTarget + '/' + path;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
529
175
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
176
|
+
var ALL_ANNOTATION_ERRORS = {};
|
|
177
|
+
var ANNOTATION_ERRORS = [];
|
|
178
|
+
/**
|
|
179
|
+
* @param path
|
|
180
|
+
* @param oErrorMsg
|
|
181
|
+
*/
|
|
533
182
|
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
var _pathPart$split = pathPart.split("@"),
|
|
541
|
-
_pathPart$split2 = _slicedToArray(_pathPart$split, 2),
|
|
542
|
-
_path = _pathPart$split2[0],
|
|
543
|
-
annotationPath = _pathPart$split2[1];
|
|
544
|
-
|
|
545
|
-
targetPathSplit.push(_path);
|
|
546
|
-
targetPathSplit.push("@".concat(annotationPath));
|
|
547
|
-
} else {
|
|
548
|
-
targetPathSplit.push(pathPart);
|
|
549
|
-
}
|
|
550
|
-
});
|
|
551
|
-
var currentPath = path;
|
|
552
|
-
var currentContext = currentTarget;
|
|
553
|
-
var target = targetPathSplit.reduce(function (currentValue, pathPart) {
|
|
554
|
-
if (pathPart === "$Type" && currentValue._type === "EntityType") {
|
|
555
|
-
return currentValue;
|
|
183
|
+
function addAnnotationErrorMessage(path, oErrorMsg) {
|
|
184
|
+
if (!ALL_ANNOTATION_ERRORS[path]) {
|
|
185
|
+
ALL_ANNOTATION_ERRORS[path] = [oErrorMsg];
|
|
186
|
+
} else {
|
|
187
|
+
ALL_ANNOTATION_ERRORS[path].push(oErrorMsg);
|
|
188
|
+
}
|
|
556
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Resolves a specific path based on the objectMap.
|
|
192
|
+
*
|
|
193
|
+
* @param objectMap
|
|
194
|
+
* @param currentTarget
|
|
195
|
+
* @param path
|
|
196
|
+
* @param pathOnly
|
|
197
|
+
* @param includeVisitedObjects
|
|
198
|
+
* @param annotationsTerm
|
|
199
|
+
* @returns the resolved object
|
|
200
|
+
*/
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
function _resolveTarget(objectMap, currentTarget, path) {
|
|
204
|
+
var pathOnly = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
205
|
+
var includeVisitedObjects = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
206
|
+
var annotationsTerm = arguments.length > 5 ? arguments[5] : undefined;
|
|
207
|
+
var oErrorMsg;
|
|
208
|
+
|
|
209
|
+
if (!path) {
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
557
212
|
|
|
558
|
-
|
|
559
|
-
// Empty Path after an entitySet means entityType
|
|
560
|
-
if (currentValue && currentValue._type === "EntitySet" && currentValue.entityType) {
|
|
561
|
-
if (includeVisitedObjects) {
|
|
562
|
-
aVisitedObjects.push(currentValue);
|
|
563
|
-
}
|
|
213
|
+
var aVisitedObjects = [];
|
|
564
214
|
|
|
565
|
-
|
|
215
|
+
if (currentTarget && currentTarget._type === 'Property') {
|
|
216
|
+
currentTarget = objectMap[currentTarget.fullyQualifiedName.split('/')[0]];
|
|
566
217
|
}
|
|
567
218
|
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
219
|
+
path = combinePath(currentTarget.fullyQualifiedName, path);
|
|
220
|
+
var pathSplit = path.split('/');
|
|
221
|
+
var targetPathSplit = [];
|
|
222
|
+
pathSplit.forEach(function (pathPart) {
|
|
223
|
+
// Separate out the annotation
|
|
224
|
+
if (pathPart.indexOf('@') !== -1) {
|
|
225
|
+
var _pathPart$split = pathPart.split('@'),
|
|
226
|
+
_pathPart$split2 = _slicedToArray(_pathPart$split, 2),
|
|
227
|
+
splittedPath = _pathPart$split2[0],
|
|
228
|
+
annotationPath = _pathPart$split2[1];
|
|
229
|
+
|
|
230
|
+
targetPathSplit.push(splittedPath);
|
|
231
|
+
targetPathSplit.push("@".concat(annotationPath));
|
|
232
|
+
} else {
|
|
233
|
+
targetPathSplit.push(pathPart);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
var currentPath = path;
|
|
237
|
+
var currentContext = currentTarget;
|
|
238
|
+
var target = targetPathSplit.reduce(function (currentValue, pathPart) {
|
|
239
|
+
if (pathPart === '$Type' && currentValue._type === 'EntityType') {
|
|
240
|
+
return currentValue;
|
|
571
241
|
}
|
|
572
242
|
|
|
573
|
-
|
|
574
|
-
|
|
243
|
+
if ((pathPart === '@$ui5.overload' || pathPart === '0') && currentValue._type === 'Action') {
|
|
244
|
+
return currentValue;
|
|
245
|
+
}
|
|
575
246
|
|
|
576
|
-
|
|
577
|
-
|
|
247
|
+
if (pathPart.length === 0) {
|
|
248
|
+
// Empty Path after an entitySet means entityType
|
|
249
|
+
if (currentValue && currentValue._type === 'EntitySet' && currentValue.entityType) {
|
|
250
|
+
if (includeVisitedObjects) {
|
|
251
|
+
aVisitedObjects.push(currentValue);
|
|
252
|
+
}
|
|
578
253
|
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
}
|
|
254
|
+
currentValue = currentValue.entityType;
|
|
255
|
+
}
|
|
582
256
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
return currentValue;
|
|
588
|
-
} else if (currentValue._type === "EntitySet" && currentValue.entityType) {
|
|
589
|
-
currentPath = combinePath(currentValue.entityTypeName, pathPart);
|
|
590
|
-
} else if (currentValue._type === "NavigationProperty" && currentValue.targetTypeName) {
|
|
591
|
-
currentPath = combinePath(currentValue.targetTypeName, pathPart);
|
|
592
|
-
} else if (currentValue._type === "NavigationProperty" && currentValue.targetType) {
|
|
593
|
-
currentPath = combinePath(currentValue.targetType.fullyQualifiedName, pathPart);
|
|
594
|
-
} else if (currentValue._type === "Property") {
|
|
595
|
-
// ComplexType or Property
|
|
596
|
-
if (currentValue.targetType) {
|
|
597
|
-
currentPath = combinePath(currentValue.targetType.fullyQualifiedName, pathPart);
|
|
598
|
-
} else {
|
|
599
|
-
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
600
|
-
}
|
|
601
|
-
} else if (currentValue._type === "Action" && currentValue.isBound) {
|
|
602
|
-
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
257
|
+
if (currentValue && currentValue._type === 'NavigationProperty' && currentValue.targetType) {
|
|
258
|
+
if (includeVisitedObjects) {
|
|
259
|
+
aVisitedObjects.push(currentValue);
|
|
260
|
+
}
|
|
603
261
|
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
}
|
|
607
|
-
} else if (currentValue._type === "ActionParameter" && currentValue.isEntitySet) {
|
|
608
|
-
currentPath = combinePath(currentValue.type, pathPart);
|
|
609
|
-
} else if (currentValue._type === "ActionParameter" && !currentValue.isEntitySet) {
|
|
610
|
-
currentPath = combinePath(currentTarget.fullyQualifiedName.substr(0, currentTarget.fullyQualifiedName.lastIndexOf("/")), pathPart);
|
|
262
|
+
currentValue = currentValue.targetType;
|
|
263
|
+
}
|
|
611
264
|
|
|
612
|
-
|
|
613
|
-
|
|
265
|
+
return currentValue;
|
|
266
|
+
}
|
|
614
267
|
|
|
615
|
-
if (
|
|
616
|
-
|
|
268
|
+
if (includeVisitedObjects && currentValue !== null && currentValue !== undefined) {
|
|
269
|
+
aVisitedObjects.push(currentValue);
|
|
617
270
|
}
|
|
618
271
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
272
|
+
if (!currentValue) {
|
|
273
|
+
currentPath = pathPart;
|
|
274
|
+
} else if (currentValue._type === 'EntitySet' && pathPart === '$Type') {
|
|
275
|
+
currentValue = currentValue.targetType;
|
|
276
|
+
return currentValue;
|
|
277
|
+
} else if (currentValue._type === 'EntitySet' && currentValue.entityType) {
|
|
278
|
+
currentPath = combinePath(currentValue.entityTypeName, pathPart);
|
|
279
|
+
} else if (currentValue._type === 'NavigationProperty') {
|
|
280
|
+
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
281
|
+
|
|
282
|
+
if (!objectMap[currentPath]) {
|
|
283
|
+
// Fallback log error
|
|
284
|
+
currentPath = combinePath(currentValue.targetTypeName, pathPart);
|
|
632
285
|
}
|
|
633
|
-
})
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
286
|
+
} else if (currentValue._type === 'Property') {
|
|
287
|
+
// ComplexType or Property
|
|
288
|
+
if (currentValue.targetType) {
|
|
289
|
+
currentPath = combinePath(currentValue.targetType.fullyQualifiedName, pathPart);
|
|
290
|
+
} else {
|
|
291
|
+
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
292
|
+
}
|
|
293
|
+
} else if (currentValue._type === 'Action' && currentValue.isBound) {
|
|
294
|
+
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
639
295
|
|
|
640
|
-
|
|
641
|
-
|
|
296
|
+
if (pathPart === '$Parameter') {
|
|
297
|
+
return currentValue.parameters;
|
|
298
|
+
}
|
|
642
299
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
300
|
+
if (!objectMap[currentPath]) {
|
|
301
|
+
currentPath = combinePath(currentValue.sourceType, pathPart);
|
|
302
|
+
}
|
|
303
|
+
} else if (currentValue._type === 'ActionParameter' && currentValue.isEntitySet) {
|
|
304
|
+
currentPath = combinePath(currentValue.type, pathPart);
|
|
305
|
+
} else if (currentValue._type === 'ActionParameter' && !currentValue.isEntitySet) {
|
|
306
|
+
currentPath = combinePath(currentTarget.fullyQualifiedName.substring(0, currentTarget.fullyQualifiedName.lastIndexOf('/')), pathPart);
|
|
307
|
+
|
|
308
|
+
if (!objectMap[currentPath]) {
|
|
309
|
+
var lastIdx = currentTarget.fullyQualifiedName.lastIndexOf('/');
|
|
310
|
+
|
|
311
|
+
if (lastIdx === -1) {
|
|
312
|
+
lastIdx = currentTarget.fullyQualifiedName.length;
|
|
646
313
|
}
|
|
647
|
-
});
|
|
648
314
|
|
|
649
|
-
|
|
650
|
-
|
|
315
|
+
currentPath = combinePath(objectMap[currentTarget.fullyQualifiedName.substring(0, lastIdx)].sourceType, pathPart);
|
|
316
|
+
}
|
|
317
|
+
} else {
|
|
318
|
+
currentPath = combinePath(currentValue.fullyQualifiedName, pathPart);
|
|
651
319
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
} else if (currentValue.hasOwnProperty("$Type") && !objectMap[currentPath]) {
|
|
657
|
-
// This is now an annotation value
|
|
658
|
-
var entityType = objectMap[currentValue.fullyQualifiedName.split("@")[0]];
|
|
320
|
+
if (pathPart !== 'name' && currentValue[pathPart] !== undefined) {
|
|
321
|
+
return currentValue[pathPart];
|
|
322
|
+
} else if (pathPart === '$AnnotationPath' && currentValue.$target) {
|
|
323
|
+
var contextToResolve = objectMap[currentValue.fullyQualifiedName.split('@')[0]];
|
|
659
324
|
|
|
660
|
-
|
|
661
|
-
currentPath = combinePath(entityType.fullyQualifiedName, pathPart);
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
}
|
|
325
|
+
var subTarget = _resolveTarget(objectMap, contextToResolve, currentValue.value, false, true);
|
|
665
326
|
|
|
666
|
-
|
|
667
|
-
|
|
327
|
+
subTarget.visitedObjects.forEach(function (visitedSubObject) {
|
|
328
|
+
if (aVisitedObjects.indexOf(visitedSubObject) === -1) {
|
|
329
|
+
aVisitedObjects.push(visitedSubObject);
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
return subTarget.target;
|
|
333
|
+
} else if (pathPart === '$Path' && currentValue.$target) {
|
|
334
|
+
currentContext = aVisitedObjects.concat().reverse().find(function (obj) {
|
|
335
|
+
return obj._type === 'EntityType' || obj._type === 'EntitySet' || obj._type === 'NavigationProperty';
|
|
336
|
+
});
|
|
668
337
|
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
var oErrorMsg = {
|
|
672
|
-
message: "Unable to resolve the path expression: " + "\n" + path + "\n" + "\n" + "Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n" + "<Annotation Term = " + annotationsTerm + ">" + "\n" + "<Record Type = " + annotationType + ">" + "\n" + "<AnnotationPath = " + path + ">"
|
|
673
|
-
};
|
|
674
|
-
addAnnotationErrorMessage(path, oErrorMsg);
|
|
675
|
-
} else {
|
|
676
|
-
var oErrorMsg = {
|
|
677
|
-
message: "Unable to resolve the path expression: " + path + "\n" + "\n" + "Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n" + "<Annotation Term = " + pathSplit[0] + ">" + "\n" + "<PropertyValue Path= " + pathSplit[1] + ">"
|
|
678
|
-
};
|
|
679
|
-
addAnnotationErrorMessage(path, oErrorMsg);
|
|
680
|
-
} // console.log("Missing target " + path);
|
|
338
|
+
if (currentContext) {
|
|
339
|
+
var _subTarget = _resolveTarget(objectMap, currentContext, currentValue.path, false, true);
|
|
681
340
|
|
|
682
|
-
|
|
341
|
+
_subTarget.visitedObjects.forEach(function (visitedSubObject) {
|
|
342
|
+
if (aVisitedObjects.indexOf(visitedSubObject) === -1) {
|
|
343
|
+
aVisitedObjects.push(visitedSubObject);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
683
346
|
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
}
|
|
347
|
+
return _subTarget.target;
|
|
348
|
+
}
|
|
687
349
|
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
350
|
+
return currentValue.$target;
|
|
351
|
+
} else if (pathPart.startsWith('$Path') && currentValue.$target) {
|
|
352
|
+
var intermediateTarget = currentValue.$target;
|
|
353
|
+
currentPath = combinePath(intermediateTarget.fullyQualifiedName, pathPart.substring(5));
|
|
354
|
+
} else if (currentValue.hasOwnProperty('$Type') && !objectMap[currentPath]) {
|
|
355
|
+
// This is now an annotation value
|
|
356
|
+
var entityType = objectMap[currentValue.fullyQualifiedName.split('@')[0]];
|
|
694
357
|
|
|
695
|
-
|
|
696
|
-
|
|
358
|
+
if (entityType) {
|
|
359
|
+
currentPath = combinePath(entityType.fullyQualifiedName, pathPart);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
697
363
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
}
|
|
364
|
+
return objectMap[currentPath];
|
|
365
|
+
}, null);
|
|
701
366
|
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
367
|
+
if (!target) {
|
|
368
|
+
if (annotationsTerm) {
|
|
369
|
+
var annotationType = inferTypeFromTerm(annotationsTerm, currentTarget);
|
|
370
|
+
oErrorMsg = {
|
|
371
|
+
message: 'Unable to resolve the path expression: ' + '\n' + path + '\n' + '\n' + 'Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n' + '<Annotation Term = ' + annotationsTerm + '>' + '\n' + '<Record Type = ' + annotationType + '>' + '\n' + '<AnnotationPath = ' + path + '>'
|
|
372
|
+
};
|
|
373
|
+
addAnnotationErrorMessage(path, oErrorMsg);
|
|
374
|
+
} else {
|
|
375
|
+
oErrorMsg = {
|
|
376
|
+
message: 'Unable to resolve the path expression: ' + path + '\n' + '\n' + 'Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n' + '<Annotation Term = ' + pathSplit[0] + '>' + '\n' + '<PropertyValue Path= ' + pathSplit[1] + '>'
|
|
377
|
+
};
|
|
378
|
+
addAnnotationErrorMessage(path, oErrorMsg);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
if (pathOnly) {
|
|
383
|
+
return currentPath;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
if (includeVisitedObjects) {
|
|
387
|
+
return {
|
|
388
|
+
visitedObjects: aVisitedObjects,
|
|
389
|
+
target: target
|
|
390
|
+
};
|
|
391
|
+
}
|
|
706
392
|
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
393
|
+
return target;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Typeguard to check if the path contains an annotation.
|
|
397
|
+
*
|
|
398
|
+
* @param pathStr the path to evaluate
|
|
399
|
+
* @returns true if there is an annotation in the path.
|
|
400
|
+
*/
|
|
710
401
|
|
|
711
|
-
case "Int":
|
|
712
|
-
return propertyValue.Int;
|
|
713
402
|
|
|
714
|
-
|
|
715
|
-
return
|
|
403
|
+
function isAnnotationPath(pathStr) {
|
|
404
|
+
return pathStr.indexOf('@') !== -1;
|
|
405
|
+
}
|
|
716
406
|
|
|
717
|
-
|
|
718
|
-
|
|
407
|
+
function parseValue(propertyValue, valueFQN, objectMap, context) {
|
|
408
|
+
if (propertyValue === undefined) {
|
|
409
|
+
return undefined;
|
|
410
|
+
}
|
|
719
411
|
|
|
720
|
-
|
|
721
|
-
|
|
412
|
+
switch (propertyValue.type) {
|
|
413
|
+
case 'String':
|
|
414
|
+
return propertyValue.String;
|
|
415
|
+
|
|
416
|
+
case 'Int':
|
|
417
|
+
return propertyValue.Int;
|
|
418
|
+
|
|
419
|
+
case 'Bool':
|
|
420
|
+
return propertyValue.Bool;
|
|
421
|
+
|
|
422
|
+
case 'Decimal':
|
|
423
|
+
return (0, utils_1.Decimal)(propertyValue.Decimal);
|
|
424
|
+
|
|
425
|
+
case 'Date':
|
|
426
|
+
return propertyValue.Date;
|
|
427
|
+
|
|
428
|
+
case 'EnumMember':
|
|
429
|
+
return (0, utils_1.alias)(context.rawMetadata.references, propertyValue.EnumMember);
|
|
430
|
+
|
|
431
|
+
case 'PropertyPath':
|
|
432
|
+
return {
|
|
433
|
+
type: 'PropertyPath',
|
|
434
|
+
value: propertyValue.PropertyPath,
|
|
435
|
+
fullyQualifiedName: valueFQN,
|
|
436
|
+
$target: _resolveTarget(objectMap, context.currentTarget, propertyValue.PropertyPath, false, false, context.currentTerm)
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
case 'NavigationPropertyPath':
|
|
440
|
+
return {
|
|
441
|
+
type: 'NavigationPropertyPath',
|
|
442
|
+
value: propertyValue.NavigationPropertyPath,
|
|
443
|
+
fullyQualifiedName: valueFQN,
|
|
444
|
+
$target: _resolveTarget(objectMap, context.currentTarget, propertyValue.NavigationPropertyPath, false, false, context.currentTerm)
|
|
445
|
+
};
|
|
446
|
+
|
|
447
|
+
case 'AnnotationPath':
|
|
448
|
+
var annotationTarget = _resolveTarget(objectMap, context.currentTarget, (0, utils_1.unalias)(context.rawMetadata.references, propertyValue.AnnotationPath), true, false, context.currentTerm);
|
|
449
|
+
|
|
450
|
+
var annotationPath = {
|
|
451
|
+
type: 'AnnotationPath',
|
|
452
|
+
value: propertyValue.AnnotationPath,
|
|
453
|
+
fullyQualifiedName: valueFQN,
|
|
454
|
+
$target: annotationTarget,
|
|
455
|
+
annotationsTerm: context.currentTerm,
|
|
456
|
+
term: '',
|
|
457
|
+
path: ''
|
|
458
|
+
};
|
|
459
|
+
context.unresolvedAnnotations.push({
|
|
460
|
+
inline: false,
|
|
461
|
+
toResolve: annotationPath
|
|
462
|
+
});
|
|
463
|
+
return annotationPath;
|
|
722
464
|
|
|
723
|
-
|
|
724
|
-
|
|
465
|
+
case 'Path':
|
|
466
|
+
var $target = _resolveTarget(objectMap, context.currentTarget, propertyValue.Path, true, false, context.currentTerm);
|
|
725
467
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
468
|
+
var path = new Path(propertyValue, $target, context.currentTerm, '');
|
|
469
|
+
context.unresolvedAnnotations.push({
|
|
470
|
+
inline: isAnnotationPath(propertyValue.Path),
|
|
471
|
+
toResolve: path
|
|
472
|
+
});
|
|
473
|
+
return path;
|
|
474
|
+
|
|
475
|
+
case 'Record':
|
|
476
|
+
return parseRecord(propertyValue.Record, valueFQN, objectMap, context);
|
|
477
|
+
|
|
478
|
+
case 'Collection':
|
|
479
|
+
return parseCollection(propertyValue.Collection, valueFQN, objectMap, context);
|
|
480
|
+
|
|
481
|
+
case 'Apply':
|
|
482
|
+
case 'Null':
|
|
483
|
+
case 'Not':
|
|
484
|
+
case 'Eq':
|
|
485
|
+
case 'Ne':
|
|
486
|
+
case 'Gt':
|
|
487
|
+
case 'Ge':
|
|
488
|
+
case 'Lt':
|
|
489
|
+
case 'Le':
|
|
490
|
+
case 'If':
|
|
491
|
+
case 'And':
|
|
492
|
+
case 'Or':
|
|
493
|
+
default:
|
|
494
|
+
return propertyValue;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Infer the type of a term based on its type.
|
|
499
|
+
*
|
|
500
|
+
* @param annotationsTerm The annotation term
|
|
501
|
+
* @param annotationTarget the annotation target
|
|
502
|
+
* @returns the inferred type.
|
|
503
|
+
*/
|
|
733
504
|
|
|
734
|
-
case "NavigationPropertyPath":
|
|
735
|
-
return {
|
|
736
|
-
type: "NavigationPropertyPath",
|
|
737
|
-
value: propertyValue.NavigationPropertyPath,
|
|
738
|
-
fullyQualifiedName: valueFQN,
|
|
739
|
-
$target: resolveTarget(objectMap, currentTarget, propertyValue.NavigationPropertyPath, false, false, annotationType, annotationsTerm)
|
|
740
|
-
};
|
|
741
505
|
|
|
742
|
-
|
|
743
|
-
var
|
|
744
|
-
var
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
fullyQualifiedName: valueFQN,
|
|
748
|
-
$target: annotationTarget,
|
|
749
|
-
annotationType: annotationType,
|
|
750
|
-
annotationsTerm: annotationsTerm,
|
|
751
|
-
term: "",
|
|
752
|
-
path: ""
|
|
506
|
+
function inferTypeFromTerm(annotationsTerm, annotationTarget) {
|
|
507
|
+
var targetType = utils_1.TermToTypes[annotationsTerm];
|
|
508
|
+
var oErrorMsg = {
|
|
509
|
+
isError: false,
|
|
510
|
+
message: "The type of the record used within the term ".concat(annotationsTerm, " was not defined and was inferred as ").concat(targetType, ".\nHint: If possible, try to maintain the Type property for each Record.\n<Annotations Target=\"").concat(annotationTarget, "\">\n\t<Annotation Term=\"").concat(annotationsTerm, "\">\n\t\t<Record>...</Record>\n\t</Annotation>\n</Annotations>")
|
|
753
511
|
};
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
});
|
|
758
|
-
return annotationPath;
|
|
759
|
-
|
|
760
|
-
case "Path":
|
|
761
|
-
var $target = resolveTarget(objectMap, currentTarget, propertyValue.Path, true, false, annotationType, annotationsTerm);
|
|
762
|
-
var path = new Path(propertyValue, $target, annotationsTerm, annotationType, "");
|
|
763
|
-
toResolve.push({
|
|
764
|
-
inline: isAnnotationPath(propertyValue.Path),
|
|
765
|
-
toResolve: path
|
|
766
|
-
});
|
|
767
|
-
return path;
|
|
768
|
-
|
|
769
|
-
case "Record":
|
|
770
|
-
return parseRecord(propertyValue.Record, valueFQN, parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, annotationType, annotationsTerm);
|
|
771
|
-
|
|
772
|
-
case "Collection":
|
|
773
|
-
return parseCollection(propertyValue.Collection, valueFQN, parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, annotationType, annotationsTerm);
|
|
774
|
-
|
|
775
|
-
case "Apply":
|
|
776
|
-
case "Null":
|
|
777
|
-
case "Not":
|
|
778
|
-
case "Eq":
|
|
779
|
-
case "Ne":
|
|
780
|
-
case "Gt":
|
|
781
|
-
case "Ge":
|
|
782
|
-
case "Lt":
|
|
783
|
-
case "Le":
|
|
784
|
-
case "If":
|
|
785
|
-
case "And":
|
|
786
|
-
case "Or":
|
|
787
|
-
return propertyValue;
|
|
788
|
-
}
|
|
789
|
-
}
|
|
512
|
+
addAnnotationErrorMessage(annotationTarget + '/' + annotationsTerm, oErrorMsg);
|
|
513
|
+
return targetType;
|
|
514
|
+
}
|
|
790
515
|
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
isError: false,
|
|
795
|
-
message: "The type of the record used within the term ".concat(annotationsTerm, " was not defined and was inferred as ").concat(targetType, ".\nHint: If possible, try to maintain the Type property for each Record.\n<Annotations Target=\"").concat(annotationTarget, "\">\n\t<Annotation Term=\"").concat(annotationsTerm, "\">\n\t\t<Record>...</Record>\n\t</Annotation>\n</Annotations>")
|
|
796
|
-
};
|
|
797
|
-
addAnnotationErrorMessage(annotationTarget + "/" + annotationsTerm, oErrorMsg);
|
|
798
|
-
return targetType;
|
|
799
|
-
}
|
|
516
|
+
function isDataFieldWithForAction(annotationContent, annotationTerm) {
|
|
517
|
+
return annotationContent.hasOwnProperty('Action') && (annotationTerm.$Type === 'com.sap.vocabularies.UI.v1.DataFieldForAction' || annotationTerm.$Type === 'com.sap.vocabularies.UI.v1.DataFieldWithAction');
|
|
518
|
+
}
|
|
800
519
|
|
|
801
|
-
|
|
802
|
-
|
|
520
|
+
function parseRecordType(recordDefinition, context) {
|
|
521
|
+
var targetType;
|
|
803
522
|
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
var annotationTerm = {
|
|
811
|
-
$Type: targetType,
|
|
812
|
-
fullyQualifiedName: currentFQN
|
|
813
|
-
};
|
|
814
|
-
var annotationContent = {};
|
|
523
|
+
if (!recordDefinition.type && context.currentTerm) {
|
|
524
|
+
targetType = inferTypeFromTerm(context.currentTerm, context.currentTarget.fullyQualifiedName);
|
|
525
|
+
} else {
|
|
526
|
+
targetType = (0, utils_1.unalias)(context.rawMetadata.references, recordDefinition.type);
|
|
527
|
+
}
|
|
815
528
|
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
target: currentFQN,
|
|
819
|
-
annotations: recordDefinition.annotations,
|
|
820
|
-
__source: annotationSource
|
|
821
|
-
};
|
|
822
|
-
unresolvedAnnotations.push(subAnnotationList);
|
|
823
|
-
}
|
|
529
|
+
return targetType;
|
|
530
|
+
}
|
|
824
531
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
532
|
+
function parseRecord(recordDefinition, currentFQN, objectMap, context) {
|
|
533
|
+
var targetType = parseRecordType(recordDefinition, context);
|
|
534
|
+
var annotationTerm = {
|
|
535
|
+
$Type: targetType,
|
|
536
|
+
fullyQualifiedName: currentFQN
|
|
537
|
+
};
|
|
538
|
+
var annotationContent = {};
|
|
828
539
|
|
|
829
|
-
if (
|
|
830
|
-
var
|
|
831
|
-
target:
|
|
832
|
-
annotations:
|
|
833
|
-
__source:
|
|
540
|
+
if (Array.isArray(recordDefinition.annotations)) {
|
|
541
|
+
var subAnnotationList = {
|
|
542
|
+
target: currentFQN,
|
|
543
|
+
annotations: recordDefinition.annotations,
|
|
544
|
+
__source: context.currentSource
|
|
834
545
|
};
|
|
835
|
-
|
|
546
|
+
context.additionalAnnotations.push(subAnnotationList);
|
|
836
547
|
}
|
|
837
548
|
|
|
838
|
-
if (
|
|
839
|
-
|
|
549
|
+
if (recordDefinition.propertyValues) {
|
|
550
|
+
recordDefinition.propertyValues.forEach(function (propertyValue) {
|
|
551
|
+
annotationContent[propertyValue.name] = parseValue(propertyValue.value, "".concat(currentFQN, "/").concat(propertyValue.name), objectMap, context);
|
|
552
|
+
|
|
553
|
+
if (Array.isArray(propertyValue.annotations)) {
|
|
554
|
+
var _subAnnotationList = {
|
|
555
|
+
target: "".concat(currentFQN, "/").concat(propertyValue.name),
|
|
556
|
+
annotations: propertyValue.annotations,
|
|
557
|
+
__source: context.currentSource
|
|
558
|
+
};
|
|
559
|
+
context.additionalAnnotations.push(_subAnnotationList);
|
|
560
|
+
}
|
|
840
561
|
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
562
|
+
if (isDataFieldWithForAction(annotationContent, annotationTerm)) {
|
|
563
|
+
annotationContent.ActionTarget = context.currentTarget.actions && context.currentTarget.actions[annotationContent.Action] || objectMap[annotationContent.Action];
|
|
564
|
+
|
|
565
|
+
if (!annotationContent.ActionTarget) {
|
|
566
|
+
// Add to diagnostics debugger;
|
|
567
|
+
ANNOTATION_ERRORS.push({
|
|
568
|
+
message: 'Unable to resolve the action ' + annotationContent.Action + ' defined for ' + annotationTerm.fullyQualifiedName
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
});
|
|
847
573
|
}
|
|
848
|
-
});
|
|
849
|
-
}
|
|
850
574
|
|
|
851
|
-
|
|
852
|
-
|
|
575
|
+
return Object.assign(annotationTerm, annotationContent);
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Retrieve or infer the collection type based on its content.
|
|
579
|
+
*
|
|
580
|
+
* @param collectionDefinition
|
|
581
|
+
* @returns the type of the collection
|
|
582
|
+
*/
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
function getOrInferCollectionType(collectionDefinition) {
|
|
586
|
+
var type = collectionDefinition.type;
|
|
587
|
+
|
|
588
|
+
if (type === undefined && collectionDefinition.length > 0) {
|
|
589
|
+
var firstColItem = collectionDefinition[0];
|
|
590
|
+
|
|
591
|
+
if (firstColItem.hasOwnProperty('PropertyPath')) {
|
|
592
|
+
type = 'PropertyPath';
|
|
593
|
+
} else if (firstColItem.hasOwnProperty('Path')) {
|
|
594
|
+
type = 'Path';
|
|
595
|
+
} else if (firstColItem.hasOwnProperty('AnnotationPath')) {
|
|
596
|
+
type = 'AnnotationPath';
|
|
597
|
+
} else if (firstColItem.hasOwnProperty('NavigationPropertyPath')) {
|
|
598
|
+
type = 'NavigationPropertyPath';
|
|
599
|
+
} else if (typeof firstColItem === 'object' && (firstColItem.hasOwnProperty('type') || firstColItem.hasOwnProperty('propertyValues'))) {
|
|
600
|
+
type = 'Record';
|
|
601
|
+
} else if (typeof firstColItem === 'string') {
|
|
602
|
+
type = 'String';
|
|
603
|
+
}
|
|
604
|
+
} else if (type === undefined) {
|
|
605
|
+
type = 'EmptyCollection';
|
|
606
|
+
}
|
|
853
607
|
|
|
854
|
-
|
|
855
|
-
var type = collectionDefinition.type;
|
|
856
|
-
|
|
857
|
-
if (type === undefined && collectionDefinition.length > 0) {
|
|
858
|
-
var firstColItem = collectionDefinition[0];
|
|
859
|
-
|
|
860
|
-
if (firstColItem.hasOwnProperty("PropertyPath")) {
|
|
861
|
-
type = "PropertyPath";
|
|
862
|
-
} else if (firstColItem.hasOwnProperty("Path")) {
|
|
863
|
-
type = "Path";
|
|
864
|
-
} else if (firstColItem.hasOwnProperty("AnnotationPath")) {
|
|
865
|
-
type = "AnnotationPath";
|
|
866
|
-
} else if (firstColItem.hasOwnProperty("NavigationPropertyPath")) {
|
|
867
|
-
type = "NavigationPropertyPath";
|
|
868
|
-
} else if (typeof firstColItem === "object" && (firstColItem.hasOwnProperty("type") || firstColItem.hasOwnProperty("propertyValues"))) {
|
|
869
|
-
type = "Record";
|
|
870
|
-
} else if (typeof firstColItem === "string") {
|
|
871
|
-
type = "String";
|
|
608
|
+
return type;
|
|
872
609
|
}
|
|
873
|
-
} else if (type === undefined) {
|
|
874
|
-
type = "EmptyCollection";
|
|
875
|
-
}
|
|
876
610
|
|
|
877
|
-
|
|
878
|
-
|
|
611
|
+
function parseCollection(collectionDefinition, parentFQN, objectMap, context) {
|
|
612
|
+
var collectionDefinitionType = getOrInferCollectionType(collectionDefinition);
|
|
613
|
+
|
|
614
|
+
switch (collectionDefinitionType) {
|
|
615
|
+
case 'PropertyPath':
|
|
616
|
+
return collectionDefinition.map(function (propertyPath, propertyIdx) {
|
|
617
|
+
return {
|
|
618
|
+
type: 'PropertyPath',
|
|
619
|
+
value: propertyPath.PropertyPath,
|
|
620
|
+
fullyQualifiedName: "".concat(parentFQN, "/").concat(propertyIdx),
|
|
621
|
+
$target: _resolveTarget(objectMap, context.currentTarget, propertyPath.PropertyPath, false, false, context.currentTerm)
|
|
622
|
+
};
|
|
623
|
+
});
|
|
879
624
|
|
|
880
|
-
|
|
881
|
-
|
|
625
|
+
case 'Path':
|
|
626
|
+
return collectionDefinition.map(function (pathValue) {
|
|
627
|
+
var $target = _resolveTarget(objectMap, context.currentTarget, pathValue.Path, true, false, context.currentTerm);
|
|
882
628
|
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
$target: resolveTarget(objectMap, currentTarget, propertyPath.PropertyPath, false, false, annotationType, annotationsTerm)
|
|
891
|
-
};
|
|
892
|
-
});
|
|
629
|
+
var path = new Path(pathValue, $target, context.currentTerm, '');
|
|
630
|
+
context.unresolvedAnnotations.push({
|
|
631
|
+
inline: isAnnotationPath(pathValue.Path),
|
|
632
|
+
toResolve: path
|
|
633
|
+
});
|
|
634
|
+
return path;
|
|
635
|
+
});
|
|
893
636
|
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
637
|
+
case 'AnnotationPath':
|
|
638
|
+
return collectionDefinition.map(function (annotationPath, annotationIdx) {
|
|
639
|
+
var annotationTarget = _resolveTarget(objectMap, context.currentTarget, annotationPath.AnnotationPath, true, false, context.currentTerm);
|
|
640
|
+
|
|
641
|
+
var annotationCollectionElement = {
|
|
642
|
+
type: 'AnnotationPath',
|
|
643
|
+
value: annotationPath.AnnotationPath,
|
|
644
|
+
fullyQualifiedName: "".concat(parentFQN, "/").concat(annotationIdx),
|
|
645
|
+
$target: annotationTarget,
|
|
646
|
+
annotationsTerm: context.currentTerm,
|
|
647
|
+
term: '',
|
|
648
|
+
path: ''
|
|
649
|
+
};
|
|
650
|
+
context.unresolvedAnnotations.push({
|
|
651
|
+
inline: false,
|
|
652
|
+
toResolve: annotationCollectionElement
|
|
653
|
+
});
|
|
654
|
+
return annotationCollectionElement;
|
|
655
|
+
});
|
|
904
656
|
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
annotationsTerm: annotationsTerm,
|
|
915
|
-
term: "",
|
|
916
|
-
path: ""
|
|
917
|
-
};
|
|
918
|
-
toResolve.push({
|
|
919
|
-
inline: false,
|
|
920
|
-
toResolve: annotationCollectionElement
|
|
921
|
-
});
|
|
922
|
-
return annotationCollectionElement;
|
|
923
|
-
});
|
|
657
|
+
case 'NavigationPropertyPath':
|
|
658
|
+
return collectionDefinition.map(function (navPropertyPath, navPropIdx) {
|
|
659
|
+
return {
|
|
660
|
+
type: 'NavigationPropertyPath',
|
|
661
|
+
value: navPropertyPath.NavigationPropertyPath,
|
|
662
|
+
fullyQualifiedName: "".concat(parentFQN, "/").concat(navPropIdx),
|
|
663
|
+
$target: _resolveTarget(objectMap, context.currentTarget, navPropertyPath.NavigationPropertyPath, false, false, context.currentTerm)
|
|
664
|
+
};
|
|
665
|
+
});
|
|
924
666
|
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
value: navPropertyPath.NavigationPropertyPath,
|
|
930
|
-
fullyQualifiedName: "".concat(parentFQN, "/").concat(navPropIdx),
|
|
931
|
-
$target: resolveTarget(objectMap, currentTarget, navPropertyPath.NavigationPropertyPath, false, false, annotationType, annotationsTerm)
|
|
932
|
-
};
|
|
933
|
-
});
|
|
667
|
+
case 'Record':
|
|
668
|
+
return collectionDefinition.map(function (recordDefinition, recordIdx) {
|
|
669
|
+
return parseRecord(recordDefinition, "".concat(parentFQN, "/").concat(recordIdx), objectMap, context);
|
|
670
|
+
});
|
|
934
671
|
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
672
|
+
case 'Apply':
|
|
673
|
+
case 'Null':
|
|
674
|
+
case 'If':
|
|
675
|
+
case 'Eq':
|
|
676
|
+
case 'Ne':
|
|
677
|
+
case 'Lt':
|
|
678
|
+
case 'Gt':
|
|
679
|
+
case 'Le':
|
|
680
|
+
case 'Ge':
|
|
681
|
+
case 'Not':
|
|
682
|
+
case 'And':
|
|
683
|
+
case 'Or':
|
|
684
|
+
return collectionDefinition.map(function (ifValue) {
|
|
685
|
+
return ifValue;
|
|
686
|
+
});
|
|
939
687
|
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
case "And":
|
|
951
|
-
case "Or":
|
|
952
|
-
return collectionDefinition.map(function (ifValue) {
|
|
953
|
-
return ifValue;
|
|
954
|
-
});
|
|
688
|
+
case 'String':
|
|
689
|
+
return collectionDefinition.map(function (stringValue) {
|
|
690
|
+
if (typeof stringValue === 'string') {
|
|
691
|
+
return stringValue;
|
|
692
|
+
} else if (stringValue === undefined) {
|
|
693
|
+
return stringValue;
|
|
694
|
+
} else {
|
|
695
|
+
return stringValue.String;
|
|
696
|
+
}
|
|
697
|
+
});
|
|
955
698
|
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
} else if (stringValue === undefined) {
|
|
961
|
-
return stringValue;
|
|
962
|
-
} else {
|
|
963
|
-
return stringValue.String;
|
|
964
|
-
}
|
|
965
|
-
});
|
|
699
|
+
default:
|
|
700
|
+
if (collectionDefinition.length === 0) {
|
|
701
|
+
return [];
|
|
702
|
+
}
|
|
966
703
|
|
|
967
|
-
|
|
968
|
-
if (collectionDefinition.length === 0) {
|
|
969
|
-
return [];
|
|
704
|
+
throw new Error('Unsupported case');
|
|
970
705
|
}
|
|
706
|
+
}
|
|
971
707
|
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
708
|
+
function convertAnnotation(annotation, objectMap, context) {
|
|
709
|
+
if (annotation.record) {
|
|
710
|
+
return parseRecord(annotation.record, annotation.fullyQualifiedName, objectMap, context);
|
|
711
|
+
} else if (annotation.collection === undefined) {
|
|
712
|
+
if (annotation.value) {
|
|
713
|
+
return parseValue(annotation.value, annotation.fullyQualifiedName, objectMap, context);
|
|
714
|
+
} else {
|
|
715
|
+
return true;
|
|
716
|
+
}
|
|
717
|
+
} else if (annotation.collection) {
|
|
718
|
+
var collection = parseCollection(annotation.collection, annotation.fullyQualifiedName, objectMap, context);
|
|
719
|
+
collection.fullyQualifiedName = annotation.fullyQualifiedName;
|
|
720
|
+
return collection;
|
|
721
|
+
} else {
|
|
722
|
+
throw new Error('Unsupported case');
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
/**
|
|
726
|
+
* Creates a resolvePath function for a given entityType.
|
|
727
|
+
*
|
|
728
|
+
* @param entityType The entityType for which the function should be created
|
|
729
|
+
* @param objectMap The current objectMap
|
|
730
|
+
* @returns the resolvePath function that starts at the entityType
|
|
731
|
+
*/
|
|
732
|
+
|
|
733
|
+
|
|
734
|
+
function createResolvePathFn(entityType, objectMap) {
|
|
735
|
+
return function (relativePath, includeVisitedObjects) {
|
|
736
|
+
var annotationTerm = '';
|
|
737
|
+
return _resolveTarget(objectMap, entityType, relativePath, false, includeVisitedObjects, annotationTerm);
|
|
738
|
+
};
|
|
739
|
+
}
|
|
975
740
|
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
$Type: annotationType,
|
|
981
|
-
fullyQualifiedName: annotation.fullyQualifiedName,
|
|
982
|
-
qualifier: annotation.qualifier
|
|
983
|
-
};
|
|
984
|
-
var annotationContent = {};
|
|
985
|
-
annotation.record.propertyValues.forEach(function (propertyValue) {
|
|
986
|
-
annotationContent[propertyValue.name] = parseValue(propertyValue.value, "".concat(annotation.fullyQualifiedName, "/").concat(propertyValue.name), parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, annotationType, annotation.term);
|
|
741
|
+
function resolveV2NavigationProperty(navProp, associations, objectMap, outNavProp) {
|
|
742
|
+
var targetAssociation = associations.find(function (association) {
|
|
743
|
+
return association.fullyQualifiedName === navProp.relationship;
|
|
744
|
+
});
|
|
987
745
|
|
|
988
|
-
if (
|
|
989
|
-
|
|
746
|
+
if (targetAssociation) {
|
|
747
|
+
var associationEnd = targetAssociation.associationEnd.find(function (end) {
|
|
748
|
+
return end.role === navProp.toRole;
|
|
749
|
+
});
|
|
990
750
|
|
|
991
|
-
if (
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
}); // Add to diagnostics
|
|
995
|
-
// debugger;
|
|
751
|
+
if (associationEnd) {
|
|
752
|
+
outNavProp.targetType = objectMap[associationEnd.type];
|
|
753
|
+
outNavProp.isCollection = associationEnd.multiplicity === '*';
|
|
996
754
|
}
|
|
997
755
|
}
|
|
998
|
-
});
|
|
999
|
-
return Object.assign(annotationTerm, annotationContent);
|
|
1000
|
-
} else if (annotation.collection === undefined) {
|
|
1001
|
-
if (annotation.value) {
|
|
1002
|
-
return parseValue(annotation.value, annotation.fullyQualifiedName, parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, "", annotation.term);
|
|
1003
|
-
} else {
|
|
1004
|
-
return true;
|
|
1005
756
|
}
|
|
1006
|
-
} else if (annotation.collection) {
|
|
1007
|
-
var collection = parseCollection(annotation.collection, annotation.fullyQualifiedName, parserOutput, currentTarget, objectMap, toResolve, annotationSource, unresolvedAnnotations, "", annotation.term);
|
|
1008
|
-
collection.fullyQualifiedName = annotation.fullyQualifiedName;
|
|
1009
|
-
return collection;
|
|
1010
|
-
} else {
|
|
1011
|
-
throw new Error("Unsupported case");
|
|
1012
|
-
}
|
|
1013
|
-
}
|
|
1014
757
|
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
758
|
+
function resolveV4NavigationProperty(navProp, objectMap, outNavProp) {
|
|
759
|
+
outNavProp.targetType = objectMap[navProp.targetTypeName];
|
|
760
|
+
outNavProp.partner = navProp.partner;
|
|
761
|
+
outNavProp.isCollection = navProp.isCollection;
|
|
762
|
+
outNavProp.containsTarget = navProp.containsTarget;
|
|
763
|
+
outNavProp.referentialConstraint = navProp.referentialConstraint;
|
|
764
|
+
}
|
|
1022
765
|
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
var outNavProp = {
|
|
1027
|
-
_type: "NavigationProperty",
|
|
1028
|
-
name: navProp.name,
|
|
1029
|
-
fullyQualifiedName: navProp.fullyQualifiedName,
|
|
1030
|
-
partner: navProp.hasOwnProperty("partner") ? navProp.partner : undefined,
|
|
1031
|
-
// targetTypeName: FullyQualifiedName;
|
|
1032
|
-
// targetType: EntityType;
|
|
1033
|
-
isCollection: navProp.hasOwnProperty("isCollection") ? navProp.isCollection : false,
|
|
1034
|
-
containsTarget: navProp.hasOwnProperty("containsTarget") ? navProp.containsTarget : false,
|
|
1035
|
-
referentialConstraint: navProp.referentialConstraint ? navProp.referentialConstraint : [],
|
|
1036
|
-
annotations: {}
|
|
1037
|
-
};
|
|
766
|
+
function isV4NavigationProperty(navProp) {
|
|
767
|
+
return !!navProp.targetTypeName;
|
|
768
|
+
}
|
|
1038
769
|
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
770
|
+
function prepareNavigationProperties(navigationProperties, associations, objectMap) {
|
|
771
|
+
return navigationProperties.map(function (navProp) {
|
|
772
|
+
var outNavProp = {
|
|
773
|
+
_type: 'NavigationProperty',
|
|
774
|
+
name: navProp.name,
|
|
775
|
+
fullyQualifiedName: navProp.fullyQualifiedName,
|
|
776
|
+
isCollection: false,
|
|
777
|
+
containsTarget: false,
|
|
778
|
+
referentialConstraint: [],
|
|
779
|
+
annotations: {},
|
|
780
|
+
partner: '',
|
|
781
|
+
targetType: undefined,
|
|
782
|
+
targetTypeName: ''
|
|
783
|
+
};
|
|
1045
784
|
|
|
1046
|
-
if (
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
785
|
+
if (isV4NavigationProperty(navProp)) {
|
|
786
|
+
resolveV4NavigationProperty(navProp, objectMap, outNavProp);
|
|
787
|
+
} else {
|
|
788
|
+
resolveV2NavigationProperty(navProp, associations, objectMap, outNavProp);
|
|
789
|
+
}
|
|
1050
790
|
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
outNavProp.isCollection = associationEnd.multiplicity === "*";
|
|
1054
|
-
}
|
|
791
|
+
if (outNavProp.targetType) {
|
|
792
|
+
outNavProp.targetTypeName = outNavProp.targetType.fullyQualifiedName;
|
|
1055
793
|
}
|
|
1056
|
-
}
|
|
1057
794
|
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
}
|
|
795
|
+
objectMap[outNavProp.fullyQualifiedName] = outNavProp;
|
|
796
|
+
return outNavProp;
|
|
797
|
+
});
|
|
798
|
+
}
|
|
799
|
+
/**
|
|
800
|
+
* @param entityTypes
|
|
801
|
+
* @param associations
|
|
802
|
+
* @param objectMap
|
|
803
|
+
*/
|
|
1061
804
|
|
|
1062
|
-
var outNavPropReq = outNavProp;
|
|
1063
|
-
objectMap[outNavPropReq.fullyQualifiedName] = outNavPropReq;
|
|
1064
|
-
return outNavPropReq;
|
|
1065
|
-
});
|
|
1066
|
-
entityType.resolvePath = createResolvePathFn(entityType, objectMap);
|
|
1067
|
-
});
|
|
1068
|
-
}
|
|
1069
805
|
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
806
|
+
function resolveNavigationProperties(entityTypes, associations, objectMap) {
|
|
807
|
+
entityTypes.forEach(function (entityType) {
|
|
808
|
+
entityType.navigationProperties = prepareNavigationProperties(entityType.navigationProperties, associations, objectMap);
|
|
809
|
+
entityType.resolvePath = createResolvePathFn(entityType, objectMap);
|
|
810
|
+
});
|
|
1074
811
|
}
|
|
812
|
+
/**
|
|
813
|
+
* @param namespace
|
|
814
|
+
* @param actions
|
|
815
|
+
* @param objectMap
|
|
816
|
+
*/
|
|
1075
817
|
|
|
1076
|
-
if (action.isBound) {
|
|
1077
|
-
var sourceEntityType = objectMap[action.sourceType];
|
|
1078
|
-
action.sourceEntityType = sourceEntityType;
|
|
1079
818
|
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
819
|
+
function linkActionsToEntityType(namespace, actions, objectMap) {
|
|
820
|
+
actions.forEach(function (action) {
|
|
821
|
+
if (!action.annotations) {
|
|
822
|
+
action.annotations = {};
|
|
1083
823
|
}
|
|
1084
824
|
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
825
|
+
if (action.isBound) {
|
|
826
|
+
var sourceEntityType = objectMap[action.sourceType];
|
|
827
|
+
action.sourceEntityType = sourceEntityType;
|
|
1088
828
|
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
829
|
+
if (sourceEntityType) {
|
|
830
|
+
if (!sourceEntityType.actions) {
|
|
831
|
+
sourceEntityType.actions = {};
|
|
832
|
+
}
|
|
1093
833
|
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
834
|
+
sourceEntityType.actions[action.name] = action;
|
|
835
|
+
sourceEntityType.actions["".concat(namespace, ".").concat(action.name)] = action;
|
|
836
|
+
}
|
|
1097
837
|
|
|
1098
|
-
|
|
1099
|
-
|
|
838
|
+
action.returnEntityType = objectMap[action.returnType];
|
|
839
|
+
}
|
|
840
|
+
});
|
|
1100
841
|
}
|
|
842
|
+
/**
|
|
843
|
+
* @param entitySets
|
|
844
|
+
* @param objectMap
|
|
845
|
+
* @param references
|
|
846
|
+
*/
|
|
1101
847
|
|
|
1102
|
-
if (!entitySet.annotations) {
|
|
1103
|
-
entitySet.annotations = {};
|
|
1104
|
-
}
|
|
1105
848
|
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
849
|
+
function linkEntityTypeToEntitySet(entitySets, objectMap, references) {
|
|
850
|
+
entitySets.forEach(function (entitySet) {
|
|
851
|
+
entitySet.entityType = objectMap[entitySet.entityTypeName];
|
|
1109
852
|
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
});
|
|
1114
|
-
}
|
|
853
|
+
if (!entitySet.entityType) {
|
|
854
|
+
entitySet.entityType = objectMap[(0, utils_1.unalias)(references, entitySet.entityTypeName)];
|
|
855
|
+
}
|
|
1115
856
|
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
var references = arguments.length > 2 ? arguments[2] : undefined;
|
|
1120
|
-
singletons.forEach(function (singleton) {
|
|
1121
|
-
singleton.type = objectMap[singleton.typeName];
|
|
857
|
+
if (!entitySet.annotations) {
|
|
858
|
+
entitySet.annotations = {};
|
|
859
|
+
}
|
|
1122
860
|
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
861
|
+
if (!entitySet.entityType.annotations) {
|
|
862
|
+
entitySet.entityType.annotations = {};
|
|
863
|
+
}
|
|
1126
864
|
|
|
1127
|
-
|
|
1128
|
-
|
|
865
|
+
entitySet.entityType.keys.forEach(function (keyProp) {
|
|
866
|
+
keyProp.isKey = true;
|
|
867
|
+
});
|
|
868
|
+
});
|
|
1129
869
|
}
|
|
870
|
+
/**
|
|
871
|
+
* @param singletons
|
|
872
|
+
* @param objectMap
|
|
873
|
+
* @param references
|
|
874
|
+
*/
|
|
1130
875
|
|
|
1131
|
-
if (!singleton.type.annotations) {
|
|
1132
|
-
singleton.type.annotations = {};
|
|
1133
|
-
}
|
|
1134
876
|
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
singleton.entityType = singleton.type;
|
|
1139
|
-
});
|
|
1140
|
-
}
|
|
877
|
+
function linkEntityTypeToSingleton(singletons, objectMap, references) {
|
|
878
|
+
singletons.forEach(function (singleton) {
|
|
879
|
+
singleton.entityType = objectMap[singleton.entityTypeName];
|
|
1141
880
|
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
property.annotations = {};
|
|
1146
|
-
}
|
|
881
|
+
if (!singleton.entityType) {
|
|
882
|
+
singleton.entityType = objectMap[(0, utils_1.unalias)(references, singleton.entityTypeName)];
|
|
883
|
+
}
|
|
1147
884
|
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
885
|
+
if (!singleton.annotations) {
|
|
886
|
+
singleton.annotations = {};
|
|
887
|
+
}
|
|
1151
888
|
|
|
1152
|
-
if (
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
889
|
+
if (!singleton.entityType.annotations) {
|
|
890
|
+
singleton.entityType.annotations = {};
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
singleton.entityType.keys.forEach(function (keyProp) {
|
|
894
|
+
keyProp.isKey = true;
|
|
895
|
+
});
|
|
896
|
+
});
|
|
897
|
+
}
|
|
898
|
+
/**
|
|
899
|
+
* @param entityTypes
|
|
900
|
+
* @param objectMap
|
|
901
|
+
*/
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
function linkPropertiesToComplexTypes(entityTypes, objectMap) {
|
|
905
|
+
/**
|
|
906
|
+
* @param property
|
|
907
|
+
*/
|
|
908
|
+
function link(property) {
|
|
909
|
+
if (!property.annotations) {
|
|
910
|
+
property.annotations = {};
|
|
1157
911
|
}
|
|
1158
912
|
|
|
1159
|
-
|
|
1160
|
-
property.
|
|
913
|
+
try {
|
|
914
|
+
if (property.type.indexOf('Edm') !== 0) {
|
|
915
|
+
var complexType;
|
|
1161
916
|
|
|
1162
|
-
|
|
1163
|
-
|
|
917
|
+
if (property.type.startsWith('Collection')) {
|
|
918
|
+
var complexTypeName = property.type.substring(11, property.type.length - 1);
|
|
919
|
+
complexType = objectMap[complexTypeName];
|
|
920
|
+
} else {
|
|
921
|
+
complexType = objectMap[property.type];
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
if (complexType) {
|
|
925
|
+
property.targetType = complexType;
|
|
926
|
+
|
|
927
|
+
if (complexType.properties) {
|
|
928
|
+
complexType.properties.forEach(link);
|
|
929
|
+
}
|
|
930
|
+
}
|
|
1164
931
|
}
|
|
932
|
+
} catch (sError) {
|
|
933
|
+
throw new Error('Property Type is not defined');
|
|
1165
934
|
}
|
|
1166
935
|
}
|
|
1167
|
-
|
|
1168
|
-
|
|
936
|
+
|
|
937
|
+
entityTypes.forEach(function (entityType) {
|
|
938
|
+
entityType.entityProperties.forEach(link);
|
|
939
|
+
});
|
|
1169
940
|
}
|
|
1170
|
-
|
|
941
|
+
/**
|
|
942
|
+
* @param complexTypes
|
|
943
|
+
* @param associations
|
|
944
|
+
* @param objectMap
|
|
945
|
+
*/
|
|
946
|
+
|
|
947
|
+
|
|
948
|
+
function prepareComplexTypes(complexTypes, associations, objectMap) {
|
|
949
|
+
complexTypes.forEach(function (complexType) {
|
|
950
|
+
complexType.annotations = {};
|
|
951
|
+
complexType.properties.forEach(function (property) {
|
|
952
|
+
if (!property.annotations) {
|
|
953
|
+
property.annotations = {};
|
|
954
|
+
}
|
|
955
|
+
});
|
|
956
|
+
complexType.navigationProperties = prepareNavigationProperties(complexType.navigationProperties, associations, objectMap);
|
|
957
|
+
});
|
|
958
|
+
}
|
|
959
|
+
/**
|
|
960
|
+
* Split the alias from the term value.
|
|
961
|
+
*
|
|
962
|
+
* @param references the current set of references
|
|
963
|
+
* @param termValue the value of the term
|
|
964
|
+
* @returns the term alias and the actual term value
|
|
965
|
+
*/
|
|
966
|
+
|
|
967
|
+
|
|
968
|
+
function splitTerm(references, termValue) {
|
|
969
|
+
var aliasedTerm = (0, utils_1.alias)(references, termValue);
|
|
970
|
+
var lastDot = aliasedTerm.lastIndexOf('.');
|
|
971
|
+
var termAlias = aliasedTerm.substring(0, lastDot);
|
|
972
|
+
var term = aliasedTerm.substring(lastDot + 1);
|
|
973
|
+
return [termAlias, term];
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* Creates the function that will resolve a specific path.
|
|
977
|
+
*
|
|
978
|
+
* @param convertedOutput
|
|
979
|
+
* @param objectMap
|
|
980
|
+
* @returns the function that will allow to resolve element globally.
|
|
981
|
+
*/
|
|
1171
982
|
|
|
1172
|
-
entityTypes.forEach(function (entityType) {
|
|
1173
|
-
entityType.entityProperties.forEach(link);
|
|
1174
|
-
});
|
|
1175
|
-
}
|
|
1176
983
|
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
complexType.properties.forEach(function (property) {
|
|
1181
|
-
if (!property.annotations) {
|
|
1182
|
-
property.annotations = {};
|
|
1183
|
-
}
|
|
1184
|
-
});
|
|
1185
|
-
complexType.navigationProperties = complexType.navigationProperties.map(function (navProp) {
|
|
1186
|
-
if (!navProp.annotations) {
|
|
1187
|
-
navProp.annotations = {};
|
|
1188
|
-
}
|
|
984
|
+
function createGlobalResolve(convertedOutput, objectMap) {
|
|
985
|
+
return function resolvePath(sPath) {
|
|
986
|
+
var aPathSplit = sPath.split('/');
|
|
1189
987
|
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
fullyQualifiedName: navProp.fullyQualifiedName,
|
|
1194
|
-
partner: navProp.hasOwnProperty("partner") ? navProp.partner : undefined,
|
|
1195
|
-
// targetTypeName: FullyQualifiedName;
|
|
1196
|
-
// targetType: EntityType;
|
|
1197
|
-
isCollection: navProp.hasOwnProperty("isCollection") ? navProp.isCollection : false,
|
|
1198
|
-
containsTarget: navProp.hasOwnProperty("containsTarget") ? navProp.containsTarget : false,
|
|
1199
|
-
referentialConstraint: navProp.referentialConstraint ? navProp.referentialConstraint : []
|
|
1200
|
-
};
|
|
988
|
+
if (aPathSplit.shift() !== '') {
|
|
989
|
+
throw new Error('Cannot deal with relative path');
|
|
990
|
+
}
|
|
1201
991
|
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
var targetAssociation = associations.find(function (association) {
|
|
1206
|
-
return association.fullyQualifiedName === navProp.relationship;
|
|
992
|
+
var entitySetName = aPathSplit.shift();
|
|
993
|
+
var entitySet = convertedOutput.entitySets.find(function (et) {
|
|
994
|
+
return et.name === entitySetName;
|
|
1207
995
|
});
|
|
1208
996
|
|
|
1209
|
-
if (
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
997
|
+
if (!entitySet) {
|
|
998
|
+
return {
|
|
999
|
+
target: convertedOutput.entityContainer,
|
|
1000
|
+
objectPath: [convertedOutput.entityContainer]
|
|
1001
|
+
};
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
if (aPathSplit.length === 0) {
|
|
1005
|
+
return {
|
|
1006
|
+
target: entitySet,
|
|
1007
|
+
objectPath: [convertedOutput.entityContainer, entitySet]
|
|
1008
|
+
};
|
|
1009
|
+
} else {
|
|
1010
|
+
var targetResolution = _resolveTarget(objectMap, entitySet, '/' + aPathSplit.join('/'), false, true);
|
|
1213
1011
|
|
|
1214
|
-
if (
|
|
1215
|
-
|
|
1216
|
-
outNavProp.isCollection = associationEnd.multiplicity === "*";
|
|
1012
|
+
if (targetResolution.target) {
|
|
1013
|
+
targetResolution.visitedObjects.push(targetResolution.target);
|
|
1217
1014
|
}
|
|
1015
|
+
|
|
1016
|
+
return {
|
|
1017
|
+
target: targetResolution.target,
|
|
1018
|
+
objectPath: targetResolution.visitedObjects
|
|
1019
|
+
};
|
|
1218
1020
|
}
|
|
1021
|
+
};
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
function ensureAnnotations(currentTarget, vocAlias) {
|
|
1025
|
+
if (!currentTarget.annotations) {
|
|
1026
|
+
currentTarget.annotations = {};
|
|
1219
1027
|
}
|
|
1220
1028
|
|
|
1221
|
-
if (
|
|
1222
|
-
|
|
1029
|
+
if (!currentTarget.annotations[vocAlias]) {
|
|
1030
|
+
currentTarget.annotations[vocAlias] = {};
|
|
1223
1031
|
}
|
|
1224
1032
|
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
}
|
|
1229
|
-
});
|
|
1230
|
-
}
|
|
1033
|
+
if (!currentTarget.annotations._annotations) {
|
|
1034
|
+
currentTarget.annotations._annotations = {};
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1231
1037
|
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
return [termAlias, term];
|
|
1238
|
-
}
|
|
1239
|
-
/**
|
|
1240
|
-
* Resolve a specific path
|
|
1241
|
-
* @param sPath
|
|
1242
|
-
*/
|
|
1038
|
+
function processAnnotations(currentContext, annotationList, objectMap, bOverrideExisting) {
|
|
1039
|
+
var currentTarget = currentContext.currentTarget;
|
|
1040
|
+
var currentTargetName = currentTarget.fullyQualifiedName;
|
|
1041
|
+
annotationList.annotations.forEach(function (annotation) {
|
|
1042
|
+
var _a, _b;
|
|
1243
1043
|
|
|
1044
|
+
currentContext.currentSource = annotation.__source || annotationList.__source;
|
|
1244
1045
|
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1046
|
+
var _splitTerm = splitTerm(utils_1.defaultReferences, annotation.term),
|
|
1047
|
+
_splitTerm2 = _slicedToArray(_splitTerm, 2),
|
|
1048
|
+
vocAlias = _splitTerm2[0],
|
|
1049
|
+
vocTerm = _splitTerm2[1];
|
|
1248
1050
|
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
}
|
|
1051
|
+
ensureAnnotations(currentTarget, vocAlias);
|
|
1052
|
+
var vocTermWithQualifier = "".concat(vocTerm).concat(annotation.qualifier ? '#' + annotation.qualifier : '');
|
|
1252
1053
|
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
});
|
|
1054
|
+
if (!bOverrideExisting && ((_b = (_a = currentTarget.annotations) === null || _a === void 0 ? void 0 : _a[vocAlias]) === null || _b === void 0 ? void 0 : _b[vocTermWithQualifier]) !== undefined) {
|
|
1055
|
+
return;
|
|
1056
|
+
}
|
|
1257
1057
|
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
target: convertedOutput.entityContainer,
|
|
1261
|
-
objectPath: [convertedOutput.entityContainer]
|
|
1262
|
-
};
|
|
1263
|
-
}
|
|
1058
|
+
currentContext.currentTerm = annotation.term;
|
|
1059
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier] = convertAnnotation(annotation, objectMap, currentContext);
|
|
1264
1060
|
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
} else {
|
|
1271
|
-
var targetResolution = resolveTarget(objectMap, entitySet, "/" + aPathSplit.join("/"), false, true);
|
|
1061
|
+
switch (typeof currentTarget.annotations[vocAlias][vocTermWithQualifier]) {
|
|
1062
|
+
case 'string':
|
|
1063
|
+
// eslint-disable-next-line no-new-wrappers
|
|
1064
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier] = new String(currentTarget.annotations[vocAlias][vocTermWithQualifier]);
|
|
1065
|
+
break;
|
|
1272
1066
|
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1067
|
+
case 'boolean':
|
|
1068
|
+
// eslint-disable-next-line no-new-wrappers
|
|
1069
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier] = new Boolean(currentTarget.annotations[vocAlias][vocTermWithQualifier]);
|
|
1070
|
+
break;
|
|
1276
1071
|
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
}
|
|
1282
|
-
};
|
|
1283
|
-
}
|
|
1072
|
+
default:
|
|
1073
|
+
// do nothing
|
|
1074
|
+
break;
|
|
1075
|
+
}
|
|
1284
1076
|
|
|
1285
|
-
|
|
1286
|
-
|
|
1077
|
+
if (currentTarget.annotations[vocAlias][vocTermWithQualifier] !== null && typeof currentTarget.annotations[vocAlias][vocTermWithQualifier] === 'object') {
|
|
1078
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier].term = (0, utils_1.unalias)(utils_1.defaultReferences, "".concat(vocAlias, ".").concat(vocTerm));
|
|
1079
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier].qualifier = annotation.qualifier;
|
|
1080
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier].__source = currentContext.currentSource;
|
|
1081
|
+
}
|
|
1287
1082
|
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1083
|
+
var annotationTarget = "".concat(currentTargetName, "@").concat((0, utils_1.unalias)(utils_1.defaultReferences, vocAlias + '.' + vocTermWithQualifier));
|
|
1084
|
+
|
|
1085
|
+
if (Array.isArray(annotation.annotations)) {
|
|
1086
|
+
var subAnnotationList = {
|
|
1087
|
+
target: annotationTarget,
|
|
1088
|
+
annotations: annotation.annotations,
|
|
1089
|
+
__source: currentContext.currentSource
|
|
1090
|
+
};
|
|
1091
|
+
currentContext.additionalAnnotations.push(subAnnotationList);
|
|
1092
|
+
} else if (annotation.annotations && !currentTarget.annotations[vocAlias][vocTermWithQualifier].annotations) {
|
|
1093
|
+
currentTarget.annotations[vocAlias][vocTermWithQualifier].annotations = annotation.annotations;
|
|
1094
|
+
}
|
|
1292
1095
|
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1096
|
+
currentTarget.annotations._annotations["".concat(vocAlias, ".").concat(vocTermWithQualifier)] = currentTarget.annotations[vocAlias][vocTermWithQualifier];
|
|
1097
|
+
objectMap[annotationTarget] = currentTarget.annotations[vocAlias][vocTermWithQualifier];
|
|
1098
|
+
});
|
|
1099
|
+
}
|
|
1100
|
+
/**
|
|
1101
|
+
* Process all the unresolved targets so far to try and see if they are resolveable in the end.
|
|
1102
|
+
*
|
|
1103
|
+
* @param unresolvedTargets
|
|
1104
|
+
* @param objectMap
|
|
1105
|
+
*/
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
function processUnresolvedTargets(unresolvedTargets, objectMap) {
|
|
1109
|
+
unresolvedTargets.forEach(function (resolvable) {
|
|
1110
|
+
var targetToResolve = resolvable.toResolve;
|
|
1111
|
+
var targetStr = targetToResolve.$target;
|
|
1112
|
+
var resolvedTarget = objectMap[targetStr];
|
|
1113
|
+
var annotationsTerm = targetToResolve.annotationsTerm,
|
|
1114
|
+
annotationType = targetToResolve.annotationType;
|
|
1115
|
+
delete targetToResolve.annotationType;
|
|
1116
|
+
delete targetToResolve.annotationsTerm;
|
|
1117
|
+
|
|
1118
|
+
if (resolvable.inline && !(resolvedTarget instanceof String)) {
|
|
1119
|
+
// inline the resolved target
|
|
1120
|
+
var keys;
|
|
1121
|
+
|
|
1122
|
+
for (keys in targetToResolve) {
|
|
1123
|
+
delete targetToResolve[keys];
|
|
1124
|
+
}
|
|
1296
1125
|
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
prepareComplexTypes(parserOutput.schema.complexTypes, parserOutput.schema.associations, objectMap);
|
|
1302
|
-
var toResolve = [];
|
|
1303
|
-
var unresolvedAnnotations = [];
|
|
1304
|
-
Object.keys(parserOutput.schema.annotations).forEach(function (annotationSource) {
|
|
1305
|
-
parserOutput.schema.annotations[annotationSource].forEach(function (annotationList) {
|
|
1306
|
-
var currentTargetName = unalias(parserOutput.references, annotationList.target);
|
|
1307
|
-
var objectMapElement = objectMap[currentTargetName];
|
|
1308
|
-
|
|
1309
|
-
if (!objectMapElement) {
|
|
1310
|
-
if (currentTargetName && currentTargetName.indexOf("@") !== -1) {
|
|
1311
|
-
annotationList.__source = annotationSource;
|
|
1312
|
-
unresolvedAnnotations.push(annotationList);
|
|
1126
|
+
Object.assign(targetToResolve, resolvedTarget);
|
|
1127
|
+
} else {
|
|
1128
|
+
// assign the resolved target
|
|
1129
|
+
targetToResolve.$target = resolvedTarget;
|
|
1313
1130
|
}
|
|
1314
|
-
} else if (typeof objectMapElement === "object") {
|
|
1315
|
-
var allTargets = [objectMapElement];
|
|
1316
|
-
var bOverrideExisting = true;
|
|
1317
1131
|
|
|
1318
|
-
if (
|
|
1319
|
-
|
|
1320
|
-
|
|
1132
|
+
if (!resolvedTarget) {
|
|
1133
|
+
targetToResolve.targetString = targetStr;
|
|
1134
|
+
|
|
1135
|
+
if (annotationsTerm && annotationType) {
|
|
1136
|
+
var oErrorMsg = {
|
|
1137
|
+
message: 'Unable to resolve the path expression: ' + targetStr + '\n' + '\n' + 'Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n' + '<Annotation Term = ' + annotationsTerm + '>' + '\n' + '<Record Type = ' + annotationType + '>' + '\n' + '<AnnotationPath = ' + targetStr + '>'
|
|
1138
|
+
};
|
|
1139
|
+
addAnnotationErrorMessage(targetStr, oErrorMsg);
|
|
1140
|
+
} else {
|
|
1141
|
+
var property = targetToResolve.term;
|
|
1142
|
+
var path = targetToResolve.path;
|
|
1143
|
+
var termInfo = targetStr ? targetStr.split('/')[0] : targetStr;
|
|
1144
|
+
var _oErrorMsg = {
|
|
1145
|
+
message: 'Unable to resolve the path expression: ' + targetStr + '\n' + '\n' + 'Hint: Check and correct the path values under the following structure in the metadata (annotation.xml file or CDS annotations for the application): \n\n' + '<Annotation Term = ' + termInfo + '>' + '\n' + '<PropertyValue Property = ' + property + ' Path= ' + path + '>'
|
|
1146
|
+
};
|
|
1147
|
+
addAnnotationErrorMessage(targetStr, _oErrorMsg);
|
|
1148
|
+
}
|
|
1321
1149
|
}
|
|
1150
|
+
});
|
|
1151
|
+
}
|
|
1152
|
+
/**
|
|
1153
|
+
* Merge annotation from different source together by overwriting at the term level.
|
|
1154
|
+
*
|
|
1155
|
+
* @param rawMetadata
|
|
1156
|
+
* @returns the resulting merged annotations
|
|
1157
|
+
*/
|
|
1158
|
+
|
|
1159
|
+
|
|
1160
|
+
function mergeAnnotations(rawMetadata) {
|
|
1161
|
+
var annotationListPerTarget = {};
|
|
1162
|
+
Object.keys(rawMetadata.schema.annotations).forEach(function (annotationSource) {
|
|
1163
|
+
rawMetadata.schema.annotations[annotationSource].forEach(function (annotationList) {
|
|
1164
|
+
var currentTargetName = (0, utils_1.unalias)(rawMetadata.references, annotationList.target);
|
|
1165
|
+
annotationList.__source = annotationSource;
|
|
1322
1166
|
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1167
|
+
if (!annotationListPerTarget[currentTargetName]) {
|
|
1168
|
+
annotationListPerTarget[currentTargetName] = {
|
|
1169
|
+
annotations: annotationList.annotations.concat(),
|
|
1170
|
+
target: currentTargetName
|
|
1171
|
+
};
|
|
1172
|
+
annotationListPerTarget[currentTargetName].__source = annotationSource;
|
|
1173
|
+
} else {
|
|
1174
|
+
annotationList.annotations.forEach(function (annotation) {
|
|
1175
|
+
var findIndex = annotationListPerTarget[currentTargetName].annotations.findIndex(function (referenceAnnotation) {
|
|
1176
|
+
return referenceAnnotation.term === annotation.term && referenceAnnotation.qualifier === annotation.qualifier;
|
|
1177
|
+
});
|
|
1178
|
+
annotation.__source = annotationSource;
|
|
1179
|
+
|
|
1180
|
+
if (findIndex !== -1) {
|
|
1181
|
+
annotationListPerTarget[currentTargetName].annotations.splice(findIndex, 1, annotation);
|
|
1182
|
+
} else {
|
|
1183
|
+
annotationListPerTarget[currentTargetName].annotations.push(annotation);
|
|
1184
|
+
}
|
|
1185
|
+
});
|
|
1326
1186
|
}
|
|
1187
|
+
});
|
|
1188
|
+
});
|
|
1189
|
+
return annotationListPerTarget;
|
|
1190
|
+
}
|
|
1191
|
+
/**
|
|
1192
|
+
* Convert a RawMetadata into an object representation to be used to easily navigate a metadata object and its annotation.
|
|
1193
|
+
*
|
|
1194
|
+
* @param rawMetadata
|
|
1195
|
+
* @returns the converted representation of the metadata.
|
|
1196
|
+
*/
|
|
1197
|
+
|
|
1198
|
+
|
|
1199
|
+
function convert(rawMetadata) {
|
|
1200
|
+
ANNOTATION_ERRORS = [];
|
|
1201
|
+
var objectMap = buildObjectMap(rawMetadata);
|
|
1202
|
+
resolveNavigationProperties(rawMetadata.schema.entityTypes, rawMetadata.schema.associations, objectMap);
|
|
1203
|
+
rawMetadata.schema.entityContainer.annotations = {};
|
|
1204
|
+
linkActionsToEntityType(rawMetadata.schema.namespace, rawMetadata.schema.actions, objectMap);
|
|
1205
|
+
linkEntityTypeToEntitySet(rawMetadata.schema.entitySets, objectMap, rawMetadata.references);
|
|
1206
|
+
linkEntityTypeToSingleton(rawMetadata.schema.singletons, objectMap, rawMetadata.references);
|
|
1207
|
+
linkPropertiesToComplexTypes(rawMetadata.schema.entityTypes, objectMap);
|
|
1208
|
+
prepareComplexTypes(rawMetadata.schema.complexTypes, rawMetadata.schema.associations, objectMap);
|
|
1209
|
+
var unresolvedTargets = [];
|
|
1210
|
+
var unresolvedAnnotations = [];
|
|
1211
|
+
var annotationListPerTarget = mergeAnnotations(rawMetadata);
|
|
1212
|
+
Object.keys(annotationListPerTarget).forEach(function (currentTargetName) {
|
|
1213
|
+
var annotationList = annotationListPerTarget[currentTargetName];
|
|
1214
|
+
var objectMapElement = objectMap[currentTargetName];
|
|
1215
|
+
|
|
1216
|
+
if (!objectMapElement && (currentTargetName === null || currentTargetName === void 0 ? void 0 : currentTargetName.indexOf('@')) > 0) {
|
|
1217
|
+
unresolvedAnnotations.push(annotationList);
|
|
1218
|
+
} else if (objectMapElement) {
|
|
1219
|
+
var allTargets = [objectMapElement];
|
|
1220
|
+
var bOverrideExisting = true;
|
|
1327
1221
|
|
|
1328
|
-
if (
|
|
1329
|
-
|
|
1222
|
+
if (objectMapElement._type === 'UnboundGenericAction') {
|
|
1223
|
+
allTargets = objectMapElement.actions;
|
|
1224
|
+
bOverrideExisting = false;
|
|
1330
1225
|
}
|
|
1331
1226
|
|
|
1332
|
-
|
|
1333
|
-
var
|
|
1227
|
+
allTargets.forEach(function (currentTarget) {
|
|
1228
|
+
var currentContext = {
|
|
1229
|
+
additionalAnnotations: unresolvedAnnotations,
|
|
1230
|
+
currentSource: annotationList.__source,
|
|
1231
|
+
currentTarget: currentTarget,
|
|
1232
|
+
currentTerm: '',
|
|
1233
|
+
rawMetadata: rawMetadata,
|
|
1234
|
+
unresolvedAnnotations: unresolvedTargets
|
|
1235
|
+
};
|
|
1236
|
+
processAnnotations(currentContext, annotationList, objectMap, bOverrideExisting);
|
|
1237
|
+
});
|
|
1238
|
+
}
|
|
1239
|
+
});
|
|
1240
|
+
var extraUnresolvedAnnotations = [];
|
|
1241
|
+
unresolvedAnnotations.forEach(function (annotationList) {
|
|
1242
|
+
var currentTargetName = (0, utils_1.unalias)(rawMetadata.references, annotationList.target);
|
|
1243
|
+
|
|
1244
|
+
var _currentTargetName$sp = currentTargetName.split('@'),
|
|
1245
|
+
_currentTargetName$sp2 = _slicedToArray(_currentTargetName$sp, 2),
|
|
1246
|
+
baseObj = _currentTargetName$sp2[0],
|
|
1247
|
+
annotationPart = _currentTargetName$sp2[1];
|
|
1248
|
+
|
|
1249
|
+
var targetSplit = annotationPart.split('/');
|
|
1250
|
+
baseObj = baseObj + '@' + targetSplit[0];
|
|
1251
|
+
var currentTarget = targetSplit.slice(1).reduce(function (currentObj, path) {
|
|
1252
|
+
return currentObj === null || currentObj === void 0 ? void 0 : currentObj[path];
|
|
1253
|
+
}, objectMap[baseObj]);
|
|
1254
|
+
|
|
1255
|
+
if (!currentTarget || typeof currentTarget !== 'object') {
|
|
1256
|
+
ANNOTATION_ERRORS.push({
|
|
1257
|
+
message: 'The following annotation target was not found on the service ' + currentTargetName
|
|
1258
|
+
});
|
|
1259
|
+
} else {
|
|
1260
|
+
var currentContext = {
|
|
1261
|
+
additionalAnnotations: extraUnresolvedAnnotations,
|
|
1262
|
+
currentSource: annotationList.__source,
|
|
1263
|
+
currentTarget: currentTarget,
|
|
1264
|
+
currentTerm: '',
|
|
1265
|
+
rawMetadata: rawMetadata,
|
|
1266
|
+
unresolvedAnnotations: unresolvedTargets
|
|
1267
|
+
};
|
|
1268
|
+
processAnnotations(currentContext, annotationList, objectMap, false);
|
|
1269
|
+
}
|
|
1270
|
+
});
|
|
1271
|
+
processUnresolvedTargets(unresolvedTargets, objectMap);
|
|
1334
1272
|
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
vocTerm = _splitTerm2[1];
|
|
1273
|
+
for (var property in ALL_ANNOTATION_ERRORS) {
|
|
1274
|
+
ANNOTATION_ERRORS.push(ALL_ANNOTATION_ERRORS[property][0]);
|
|
1275
|
+
}
|
|
1339
1276
|
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1277
|
+
rawMetadata.entitySets = rawMetadata.schema.entitySets;
|
|
1278
|
+
var extraReferences = rawMetadata.references.filter(function (reference) {
|
|
1279
|
+
return utils_1.defaultReferences.find(function (defaultRef) {
|
|
1280
|
+
return defaultRef.namespace === reference.namespace;
|
|
1281
|
+
}) === undefined;
|
|
1282
|
+
});
|
|
1283
|
+
var convertedOutput = {
|
|
1284
|
+
version: rawMetadata.version,
|
|
1285
|
+
annotations: rawMetadata.schema.annotations,
|
|
1286
|
+
namespace: rawMetadata.schema.namespace,
|
|
1287
|
+
entityContainer: rawMetadata.schema.entityContainer,
|
|
1288
|
+
actions: rawMetadata.schema.actions,
|
|
1289
|
+
entitySets: rawMetadata.schema.entitySets,
|
|
1290
|
+
singletons: rawMetadata.schema.singletons,
|
|
1291
|
+
entityTypes: rawMetadata.schema.entityTypes,
|
|
1292
|
+
complexTypes: rawMetadata.schema.complexTypes,
|
|
1293
|
+
typeDefinitions: rawMetadata.schema.typeDefinitions,
|
|
1294
|
+
references: utils_1.defaultReferences.concat(extraReferences),
|
|
1295
|
+
diagnostics: ANNOTATION_ERRORS.concat()
|
|
1296
|
+
};
|
|
1297
|
+
convertedOutput.resolvePath = createGlobalResolve(convertedOutput, objectMap);
|
|
1298
|
+
return convertedOutput;
|
|
1299
|
+
}
|
|
1343
1300
|
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1301
|
+
exports.convert = convert;
|
|
1302
|
+
/***/
|
|
1303
|
+
},
|
|
1304
|
+
|
|
1305
|
+
/***/
|
|
1306
|
+
759:
|
|
1307
|
+
/***/
|
|
1308
|
+
function (__unused_webpack_module, exports, __webpack_require__) {
|
|
1309
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {
|
|
1310
|
+
if (k2 === undefined) k2 = k;
|
|
1311
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
1312
|
+
|
|
1313
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
1314
|
+
desc = {
|
|
1315
|
+
enumerable: true,
|
|
1316
|
+
get: function () {
|
|
1317
|
+
return m[k];
|
|
1318
|
+
}
|
|
1319
|
+
};
|
|
1320
|
+
}
|
|
1347
1321
|
|
|
1348
|
-
|
|
1322
|
+
Object.defineProperty(o, k2, desc);
|
|
1323
|
+
} : function (o, m, k, k2) {
|
|
1324
|
+
if (k2 === undefined) k2 = k;
|
|
1325
|
+
o[k2] = m[k];
|
|
1326
|
+
});
|
|
1349
1327
|
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1328
|
+
var __exportStar = this && this.__exportStar || function (m, exports) {
|
|
1329
|
+
for (var p in m) {
|
|
1330
|
+
if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
1331
|
+
}
|
|
1332
|
+
};
|
|
1353
1333
|
|
|
1354
|
-
|
|
1334
|
+
Object.defineProperty(exports, "__esModule", {
|
|
1335
|
+
value: true
|
|
1336
|
+
});
|
|
1355
1337
|
|
|
1356
|
-
|
|
1357
|
-
case "string":
|
|
1358
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier] = new String(currentTarget.annotations[vocAlias][vocTermWithQualifier]);
|
|
1359
|
-
break;
|
|
1338
|
+
__exportStar(__webpack_require__(875), exports);
|
|
1360
1339
|
|
|
1361
|
-
|
|
1362
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier] = new Boolean(currentTarget.annotations[vocAlias][vocTermWithQualifier]);
|
|
1363
|
-
break;
|
|
1364
|
-
}
|
|
1340
|
+
__exportStar(__webpack_require__(426), exports);
|
|
1365
1341
|
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier].qualifier = annotation.qualifier;
|
|
1369
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier].__source = annotationSource;
|
|
1370
|
-
}
|
|
1342
|
+
__exportStar(__webpack_require__(69), exports);
|
|
1343
|
+
/***/
|
|
1371
1344
|
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
if (annotation.annotations && Array.isArray(annotation.annotations)) {
|
|
1375
|
-
var subAnnotationList = {
|
|
1376
|
-
target: annotationTarget,
|
|
1377
|
-
annotations: annotation.annotations,
|
|
1378
|
-
__source: annotationSource
|
|
1379
|
-
};
|
|
1380
|
-
unresolvedAnnotations.push(subAnnotationList);
|
|
1381
|
-
} else if (annotation.annotations && !currentTarget.annotations[vocAlias][vocTermWithQualifier].annotations) {
|
|
1382
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier].annotations = annotation.annotations;
|
|
1383
|
-
}
|
|
1345
|
+
},
|
|
1384
1346
|
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1347
|
+
/***/
|
|
1348
|
+
69:
|
|
1349
|
+
/***/
|
|
1350
|
+
function (__unused_webpack_module, exports) {
|
|
1351
|
+
Object.defineProperty(exports, "__esModule", {
|
|
1352
|
+
value: true
|
|
1390
1353
|
});
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1354
|
+
exports.Decimal = exports.isComplexTypeDefinition = exports.TermToTypes = exports.unalias = exports.alias = exports.defaultReferences = void 0;
|
|
1355
|
+
exports.defaultReferences = [{
|
|
1356
|
+
alias: 'Capabilities',
|
|
1357
|
+
namespace: 'Org.OData.Capabilities.V1',
|
|
1358
|
+
uri: ''
|
|
1359
|
+
}, {
|
|
1360
|
+
alias: 'Aggregation',
|
|
1361
|
+
namespace: 'Org.OData.Aggregation.V1',
|
|
1362
|
+
uri: ''
|
|
1363
|
+
}, {
|
|
1364
|
+
alias: 'Validation',
|
|
1365
|
+
namespace: 'Org.OData.Validation.V1',
|
|
1366
|
+
uri: ''
|
|
1367
|
+
}, {
|
|
1368
|
+
namespace: 'Org.OData.Core.V1',
|
|
1369
|
+
alias: 'Core',
|
|
1370
|
+
uri: ''
|
|
1371
|
+
}, {
|
|
1372
|
+
namespace: 'Org.OData.Measures.V1',
|
|
1373
|
+
alias: 'Measures',
|
|
1374
|
+
uri: ''
|
|
1375
|
+
}, {
|
|
1376
|
+
namespace: 'com.sap.vocabularies.Common.v1',
|
|
1377
|
+
alias: 'Common',
|
|
1378
|
+
uri: ''
|
|
1379
|
+
}, {
|
|
1380
|
+
namespace: 'com.sap.vocabularies.UI.v1',
|
|
1381
|
+
alias: 'UI',
|
|
1382
|
+
uri: ''
|
|
1383
|
+
}, {
|
|
1384
|
+
namespace: 'com.sap.vocabularies.Session.v1',
|
|
1385
|
+
alias: 'Session',
|
|
1386
|
+
uri: ''
|
|
1387
|
+
}, {
|
|
1388
|
+
namespace: 'com.sap.vocabularies.Analytics.v1',
|
|
1389
|
+
alias: 'Analytics',
|
|
1390
|
+
uri: ''
|
|
1391
|
+
}, {
|
|
1392
|
+
namespace: 'com.sap.vocabularies.CodeList.v1',
|
|
1393
|
+
alias: 'CodeList',
|
|
1394
|
+
uri: ''
|
|
1395
|
+
}, {
|
|
1396
|
+
namespace: 'com.sap.vocabularies.PersonalData.v1',
|
|
1397
|
+
alias: 'PersonalData',
|
|
1398
|
+
uri: ''
|
|
1399
|
+
}, {
|
|
1400
|
+
namespace: 'com.sap.vocabularies.Communication.v1',
|
|
1401
|
+
alias: 'Communication',
|
|
1402
|
+
uri: ''
|
|
1403
|
+
}, {
|
|
1404
|
+
namespace: 'com.sap.vocabularies.HTML5.v1',
|
|
1405
|
+
alias: 'HTML5',
|
|
1406
|
+
uri: ''
|
|
1407
|
+
}];
|
|
1408
|
+
/**
|
|
1409
|
+
* Transform an unaliased string representation annotation to the aliased version.
|
|
1410
|
+
*
|
|
1411
|
+
* @param references currentReferences for the project
|
|
1412
|
+
* @param unaliasedValue the unaliased value
|
|
1413
|
+
* @returns the aliased string representing the same
|
|
1414
|
+
*/
|
|
1415
|
+
|
|
1416
|
+
function alias(references, unaliasedValue) {
|
|
1417
|
+
if (!references.reverseReferenceMap) {
|
|
1418
|
+
references.reverseReferenceMap = references.reduce(function (map, ref) {
|
|
1419
|
+
map[ref.namespace] = ref;
|
|
1420
|
+
return map;
|
|
1421
|
+
}, {});
|
|
1406
1422
|
}
|
|
1407
1423
|
|
|
1408
|
-
|
|
1409
|
-
|
|
1424
|
+
if (!unaliasedValue) {
|
|
1425
|
+
return unaliasedValue;
|
|
1426
|
+
}
|
|
1410
1427
|
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
if (
|
|
1417
|
-
|
|
1428
|
+
var lastDotIndex = unaliasedValue.lastIndexOf('.');
|
|
1429
|
+
var namespace = unaliasedValue.substring(0, lastDotIndex);
|
|
1430
|
+
var value = unaliasedValue.substring(lastDotIndex + 1);
|
|
1431
|
+
var reference = references.reverseReferenceMap[namespace];
|
|
1432
|
+
|
|
1433
|
+
if (reference) {
|
|
1434
|
+
return "".concat(reference.alias, ".").concat(value);
|
|
1435
|
+
} else if (unaliasedValue.indexOf('@') !== -1) {
|
|
1436
|
+
// Try to see if it's an annotation Path like to_SalesOrder/@UI.LineItem
|
|
1437
|
+
var _unaliasedValue$split = unaliasedValue.split('@'),
|
|
1438
|
+
_unaliasedValue$split2 = _toArray(_unaliasedValue$split),
|
|
1439
|
+
preAlias = _unaliasedValue$split2[0],
|
|
1440
|
+
postAlias = _unaliasedValue$split2.slice(1);
|
|
1441
|
+
|
|
1442
|
+
return "".concat(preAlias, "@").concat(alias(references, postAlias.join('@')));
|
|
1443
|
+
} else {
|
|
1444
|
+
return unaliasedValue;
|
|
1418
1445
|
}
|
|
1446
|
+
}
|
|
1419
1447
|
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1448
|
+
exports.alias = alias;
|
|
1449
|
+
/**
|
|
1450
|
+
* Transform an aliased string representation annotation to the unaliased version.
|
|
1451
|
+
*
|
|
1452
|
+
* @param references currentReferences for the project
|
|
1453
|
+
* @param aliasedValue the aliased value
|
|
1454
|
+
* @returns the unaliased string representing the same
|
|
1455
|
+
*/
|
|
1456
|
+
|
|
1457
|
+
function unalias(references, aliasedValue) {
|
|
1458
|
+
if (!references.referenceMap) {
|
|
1459
|
+
references.referenceMap = references.reduce(function (map, ref) {
|
|
1460
|
+
map[ref.alias] = ref;
|
|
1461
|
+
return map;
|
|
1462
|
+
}, {});
|
|
1463
|
+
}
|
|
1425
1464
|
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1465
|
+
if (!aliasedValue) {
|
|
1466
|
+
return aliasedValue;
|
|
1467
|
+
}
|
|
1429
1468
|
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1469
|
+
var _aliasedValue$split = aliasedValue.split('.'),
|
|
1470
|
+
_aliasedValue$split2 = _toArray(_aliasedValue$split),
|
|
1471
|
+
vocAlias = _aliasedValue$split2[0],
|
|
1472
|
+
value = _aliasedValue$split2.slice(1);
|
|
1433
1473
|
|
|
1434
|
-
|
|
1435
|
-
currentTarget.annotations[vocAlias][vocTermWithQualifier] = convertAnnotation(annotation, parserOutput, currentTarget, objectMap, toResolve, annotationList.__source, extraUnresolvedAnnotations);
|
|
1474
|
+
var reference = references.referenceMap[vocAlias];
|
|
1436
1475
|
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1476
|
+
if (reference) {
|
|
1477
|
+
return "".concat(reference.namespace, ".").concat(value.join('.'));
|
|
1478
|
+
} else if (aliasedValue.indexOf('@') !== -1) {
|
|
1479
|
+
// Try to see if it's an annotation Path like to_SalesOrder/@UI.LineItem
|
|
1480
|
+
var _aliasedValue$split3 = aliasedValue.split('@'),
|
|
1481
|
+
_aliasedValue$split4 = _toArray(_aliasedValue$split3),
|
|
1482
|
+
preAlias = _aliasedValue$split4[0],
|
|
1483
|
+
postAlias = _aliasedValue$split4.slice(1);
|
|
1442
1484
|
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
}
|
|
1447
|
-
});
|
|
1448
|
-
toResolve.forEach(function (resolveable) {
|
|
1449
|
-
var toResolve = resolveable.toResolve;
|
|
1450
|
-
var targetStr = toResolve.$target;
|
|
1451
|
-
var resolvedTarget = objectMap[targetStr];
|
|
1452
|
-
var annotationsTerm = toResolve.annotationsTerm,
|
|
1453
|
-
annotationType = toResolve.annotationType;
|
|
1454
|
-
delete toResolve.annotationType;
|
|
1455
|
-
delete toResolve.annotationsTerm;
|
|
1456
|
-
|
|
1457
|
-
if (resolveable.inline && !(resolvedTarget instanceof String)) {
|
|
1458
|
-
// inline the resolved target
|
|
1459
|
-
var keys;
|
|
1460
|
-
|
|
1461
|
-
for (keys in toResolve) {
|
|
1462
|
-
delete toResolve[keys];
|
|
1485
|
+
return "".concat(preAlias, "@").concat(unalias(references, postAlias.join('@')));
|
|
1486
|
+
} else {
|
|
1487
|
+
return aliasedValue;
|
|
1463
1488
|
}
|
|
1489
|
+
}
|
|
1464
1490
|
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1491
|
+
exports.unalias = unalias;
|
|
1492
|
+
var TermToTypes;
|
|
1493
|
+
|
|
1494
|
+
(function (TermToTypes) {
|
|
1495
|
+
TermToTypes["Org.OData.Authorization.V1.SecuritySchemes"] = "Org.OData.Authorization.V1.SecurityScheme";
|
|
1496
|
+
TermToTypes["Org.OData.Authorization.V1.Authorizations"] = "Org.OData.Authorization.V1.Authorization";
|
|
1497
|
+
TermToTypes["Org.OData.Core.V1.Revisions"] = "Org.OData.Core.V1.RevisionType";
|
|
1498
|
+
TermToTypes["Org.OData.Core.V1.Links"] = "Org.OData.Core.V1.Link";
|
|
1499
|
+
TermToTypes["Org.OData.Core.V1.Example"] = "Org.OData.Core.V1.ExampleValue";
|
|
1500
|
+
TermToTypes["Org.OData.Core.V1.Messages"] = "Org.OData.Core.V1.MessageType";
|
|
1501
|
+
TermToTypes["Org.OData.Core.V1.ValueException"] = "Org.OData.Core.V1.ValueExceptionType";
|
|
1502
|
+
TermToTypes["Org.OData.Core.V1.ResourceException"] = "Org.OData.Core.V1.ResourceExceptionType";
|
|
1503
|
+
TermToTypes["Org.OData.Core.V1.DataModificationException"] = "Org.OData.Core.V1.DataModificationExceptionType";
|
|
1504
|
+
TermToTypes["Org.OData.Core.V1.IsLanguageDependent"] = "Org.OData.Core.V1.Tag";
|
|
1505
|
+
TermToTypes["Org.OData.Core.V1.DereferenceableIDs"] = "Org.OData.Core.V1.Tag";
|
|
1506
|
+
TermToTypes["Org.OData.Core.V1.ConventionalIDs"] = "Org.OData.Core.V1.Tag";
|
|
1507
|
+
TermToTypes["Org.OData.Core.V1.Permissions"] = "Org.OData.Core.V1.Permission";
|
|
1508
|
+
TermToTypes["Org.OData.Core.V1.DefaultNamespace"] = "Org.OData.Core.V1.Tag";
|
|
1509
|
+
TermToTypes["Org.OData.Core.V1.Immutable"] = "Org.OData.Core.V1.Tag";
|
|
1510
|
+
TermToTypes["Org.OData.Core.V1.Computed"] = "Org.OData.Core.V1.Tag";
|
|
1511
|
+
TermToTypes["Org.OData.Core.V1.ComputedDefaultValue"] = "Org.OData.Core.V1.Tag";
|
|
1512
|
+
TermToTypes["Org.OData.Core.V1.IsURL"] = "Org.OData.Core.V1.Tag";
|
|
1513
|
+
TermToTypes["Org.OData.Core.V1.IsMediaType"] = "Org.OData.Core.V1.Tag";
|
|
1514
|
+
TermToTypes["Org.OData.Core.V1.ContentDisposition"] = "Org.OData.Core.V1.ContentDispositionType";
|
|
1515
|
+
TermToTypes["Org.OData.Core.V1.OptimisticConcurrency"] = "Edm.PropertyPath";
|
|
1516
|
+
TermToTypes["Org.OData.Core.V1.AdditionalProperties"] = "Org.OData.Core.V1.Tag";
|
|
1517
|
+
TermToTypes["Org.OData.Core.V1.AutoExpand"] = "Org.OData.Core.V1.Tag";
|
|
1518
|
+
TermToTypes["Org.OData.Core.V1.AutoExpandReferences"] = "Org.OData.Core.V1.Tag";
|
|
1519
|
+
TermToTypes["Org.OData.Core.V1.MayImplement"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
1520
|
+
TermToTypes["Org.OData.Core.V1.Ordered"] = "Org.OData.Core.V1.Tag";
|
|
1521
|
+
TermToTypes["Org.OData.Core.V1.PositionalInsert"] = "Org.OData.Core.V1.Tag";
|
|
1522
|
+
TermToTypes["Org.OData.Core.V1.AlternateKeys"] = "Org.OData.Core.V1.AlternateKey";
|
|
1523
|
+
TermToTypes["Org.OData.Core.V1.OptionalParameter"] = "Org.OData.Core.V1.OptionalParameterType";
|
|
1524
|
+
TermToTypes["Org.OData.Core.V1.OperationAvailable"] = "Edm.Boolean";
|
|
1525
|
+
TermToTypes["Org.OData.Core.V1.SymbolicName"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
1526
|
+
TermToTypes["Org.OData.Capabilities.V1.ConformanceLevel"] = "Org.OData.Capabilities.V1.ConformanceLevelType";
|
|
1527
|
+
TermToTypes["Org.OData.Capabilities.V1.AsynchronousRequestsSupported"] = "Org.OData.Core.V1.Tag";
|
|
1528
|
+
TermToTypes["Org.OData.Capabilities.V1.BatchContinueOnErrorSupported"] = "Org.OData.Core.V1.Tag";
|
|
1529
|
+
TermToTypes["Org.OData.Capabilities.V1.IsolationSupported"] = "Org.OData.Capabilities.V1.IsolationLevel";
|
|
1530
|
+
TermToTypes["Org.OData.Capabilities.V1.CrossJoinSupported"] = "Org.OData.Core.V1.Tag";
|
|
1531
|
+
TermToTypes["Org.OData.Capabilities.V1.CallbackSupported"] = "Org.OData.Capabilities.V1.CallbackType";
|
|
1532
|
+
TermToTypes["Org.OData.Capabilities.V1.ChangeTracking"] = "Org.OData.Capabilities.V1.ChangeTrackingType";
|
|
1533
|
+
TermToTypes["Org.OData.Capabilities.V1.CountRestrictions"] = "Org.OData.Capabilities.V1.CountRestrictionsType";
|
|
1534
|
+
TermToTypes["Org.OData.Capabilities.V1.NavigationRestrictions"] = "Org.OData.Capabilities.V1.NavigationRestrictionsType";
|
|
1535
|
+
TermToTypes["Org.OData.Capabilities.V1.IndexableByKey"] = "Org.OData.Core.V1.Tag";
|
|
1536
|
+
TermToTypes["Org.OData.Capabilities.V1.TopSupported"] = "Org.OData.Core.V1.Tag";
|
|
1537
|
+
TermToTypes["Org.OData.Capabilities.V1.SkipSupported"] = "Org.OData.Core.V1.Tag";
|
|
1538
|
+
TermToTypes["Org.OData.Capabilities.V1.ComputeSupported"] = "Org.OData.Core.V1.Tag";
|
|
1539
|
+
TermToTypes["Org.OData.Capabilities.V1.SelectSupport"] = "Org.OData.Capabilities.V1.SelectSupportType";
|
|
1540
|
+
TermToTypes["Org.OData.Capabilities.V1.BatchSupported"] = "Org.OData.Core.V1.Tag";
|
|
1541
|
+
TermToTypes["Org.OData.Capabilities.V1.BatchSupport"] = "Org.OData.Capabilities.V1.BatchSupportType";
|
|
1542
|
+
TermToTypes["Org.OData.Capabilities.V1.FilterRestrictions"] = "Org.OData.Capabilities.V1.FilterRestrictionsType";
|
|
1543
|
+
TermToTypes["Org.OData.Capabilities.V1.SortRestrictions"] = "Org.OData.Capabilities.V1.SortRestrictionsType";
|
|
1544
|
+
TermToTypes["Org.OData.Capabilities.V1.ExpandRestrictions"] = "Org.OData.Capabilities.V1.ExpandRestrictionsType";
|
|
1545
|
+
TermToTypes["Org.OData.Capabilities.V1.SearchRestrictions"] = "Org.OData.Capabilities.V1.SearchRestrictionsType";
|
|
1546
|
+
TermToTypes["Org.OData.Capabilities.V1.KeyAsSegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
1547
|
+
TermToTypes["Org.OData.Capabilities.V1.QuerySegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
1548
|
+
TermToTypes["Org.OData.Capabilities.V1.InsertRestrictions"] = "Org.OData.Capabilities.V1.InsertRestrictionsType";
|
|
1549
|
+
TermToTypes["Org.OData.Capabilities.V1.DeepInsertSupport"] = "Org.OData.Capabilities.V1.DeepInsertSupportType";
|
|
1550
|
+
TermToTypes["Org.OData.Capabilities.V1.UpdateRestrictions"] = "Org.OData.Capabilities.V1.UpdateRestrictionsType";
|
|
1551
|
+
TermToTypes["Org.OData.Capabilities.V1.DeepUpdateSupport"] = "Org.OData.Capabilities.V1.DeepUpdateSupportType";
|
|
1552
|
+
TermToTypes["Org.OData.Capabilities.V1.DeleteRestrictions"] = "Org.OData.Capabilities.V1.DeleteRestrictionsType";
|
|
1553
|
+
TermToTypes["Org.OData.Capabilities.V1.CollectionPropertyRestrictions"] = "Org.OData.Capabilities.V1.CollectionPropertyRestrictionsType";
|
|
1554
|
+
TermToTypes["Org.OData.Capabilities.V1.OperationRestrictions"] = "Org.OData.Capabilities.V1.OperationRestrictionsType";
|
|
1555
|
+
TermToTypes["Org.OData.Capabilities.V1.AnnotationValuesInQuerySupported"] = "Org.OData.Core.V1.Tag";
|
|
1556
|
+
TermToTypes["Org.OData.Capabilities.V1.ModificationQueryOptions"] = "Org.OData.Capabilities.V1.ModificationQueryOptionsType";
|
|
1557
|
+
TermToTypes["Org.OData.Capabilities.V1.ReadRestrictions"] = "Org.OData.Capabilities.V1.ReadRestrictionsType";
|
|
1558
|
+
TermToTypes["Org.OData.Capabilities.V1.CustomHeaders"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1559
|
+
TermToTypes["Org.OData.Capabilities.V1.CustomQueryOptions"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1560
|
+
TermToTypes["Org.OData.Capabilities.V1.MediaLocationUpdateSupported"] = "Org.OData.Core.V1.Tag";
|
|
1561
|
+
TermToTypes["Org.OData.Aggregation.V1.ApplySupported"] = "Org.OData.Aggregation.V1.ApplySupportedType";
|
|
1562
|
+
TermToTypes["Org.OData.Aggregation.V1.Groupable"] = "Org.OData.Core.V1.Tag";
|
|
1563
|
+
TermToTypes["Org.OData.Aggregation.V1.Aggregatable"] = "Org.OData.Core.V1.Tag";
|
|
1564
|
+
TermToTypes["Org.OData.Aggregation.V1.ContextDefiningProperties"] = "Edm.PropertyPath";
|
|
1565
|
+
TermToTypes["Org.OData.Aggregation.V1.LeveledHierarchy"] = "Edm.PropertyPath";
|
|
1566
|
+
TermToTypes["Org.OData.Aggregation.V1.RecursiveHierarchy"] = "Org.OData.Aggregation.V1.RecursiveHierarchyType";
|
|
1567
|
+
TermToTypes["Org.OData.Aggregation.V1.AvailableOnAggregates"] = "Org.OData.Aggregation.V1.AvailableOnAggregatesType";
|
|
1568
|
+
TermToTypes["Org.OData.Validation.V1.Minimum"] = "Edm.PrimitiveType";
|
|
1569
|
+
TermToTypes["Org.OData.Validation.V1.Maximum"] = "Edm.PrimitiveType";
|
|
1570
|
+
TermToTypes["Org.OData.Validation.V1.Exclusive"] = "Org.OData.Core.V1.Tag";
|
|
1571
|
+
TermToTypes["Org.OData.Validation.V1.AllowedValues"] = "Org.OData.Validation.V1.AllowedValue";
|
|
1572
|
+
TermToTypes["Org.OData.Validation.V1.MultipleOf"] = "Edm.Decimal";
|
|
1573
|
+
TermToTypes["Org.OData.Validation.V1.Constraint"] = "Org.OData.Validation.V1.ConstraintType";
|
|
1574
|
+
TermToTypes["Org.OData.Validation.V1.ItemsOf"] = "Org.OData.Validation.V1.ItemsOfType";
|
|
1575
|
+
TermToTypes["Org.OData.Validation.V1.OpenPropertyTypeConstraint"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
1576
|
+
TermToTypes["Org.OData.Validation.V1.DerivedTypeConstraint"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
1577
|
+
TermToTypes["Org.OData.Validation.V1.AllowedTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
1578
|
+
TermToTypes["Org.OData.Validation.V1.ApplicableTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
1579
|
+
TermToTypes["Org.OData.Validation.V1.MaxItems"] = "Edm.Int64";
|
|
1580
|
+
TermToTypes["Org.OData.Validation.V1.MinItems"] = "Edm.Int64";
|
|
1581
|
+
TermToTypes["Org.OData.Measures.V1.Scale"] = "Edm.Byte";
|
|
1582
|
+
TermToTypes["Org.OData.Measures.V1.DurationGranularity"] = "Org.OData.Measures.V1.DurationGranularityType";
|
|
1583
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.Dimension"] = "Org.OData.Core.V1.Tag";
|
|
1584
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.Measure"] = "Org.OData.Core.V1.Tag";
|
|
1585
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.AccumulativeMeasure"] = "Org.OData.Core.V1.Tag";
|
|
1586
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.RolledUpPropertyCount"] = "Edm.Int16";
|
|
1587
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.PlanningAction"] = "Org.OData.Core.V1.Tag";
|
|
1588
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.AggregatedProperties"] = "com.sap.vocabularies.Analytics.v1.AggregatedPropertyType";
|
|
1589
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ServiceVersion"] = "Edm.Int32";
|
|
1590
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ServiceSchemaVersion"] = "Edm.Int32";
|
|
1591
|
+
TermToTypes["com.sap.vocabularies.Common.v1.TextFor"] = "Edm.PropertyPath";
|
|
1592
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsLanguageIdentifier"] = "Org.OData.Core.V1.Tag";
|
|
1593
|
+
TermToTypes["com.sap.vocabularies.Common.v1.TextFormat"] = "com.sap.vocabularies.Common.v1.TextFormatType";
|
|
1594
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDigitSequence"] = "Org.OData.Core.V1.Tag";
|
|
1595
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsUpperCase"] = "Org.OData.Core.V1.Tag";
|
|
1596
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCurrency"] = "Org.OData.Core.V1.Tag";
|
|
1597
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsUnit"] = "Org.OData.Core.V1.Tag";
|
|
1598
|
+
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificScale"] = "Edm.PrimitiveType";
|
|
1599
|
+
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificPrecision"] = "Edm.PrimitiveType";
|
|
1600
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SecondaryKey"] = "Edm.PropertyPath";
|
|
1601
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MinOccurs"] = "Edm.Int64";
|
|
1602
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MaxOccurs"] = "Edm.Int64";
|
|
1603
|
+
TermToTypes["com.sap.vocabularies.Common.v1.AssociationEntity"] = "Edm.NavigationPropertyPath";
|
|
1604
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DerivedNavigation"] = "Edm.NavigationPropertyPath";
|
|
1605
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Masked"] = "Org.OData.Core.V1.Tag";
|
|
1606
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MaskedAlways"] = "Org.OData.Core.V1.Tag";
|
|
1607
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SemanticObjectMapping"] = "com.sap.vocabularies.Common.v1.SemanticObjectMappingType";
|
|
1608
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsInstanceAnnotation"] = "Org.OData.Core.V1.Tag";
|
|
1609
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FilterExpressionRestrictions"] = "com.sap.vocabularies.Common.v1.FilterExpressionRestrictionType";
|
|
1610
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FieldControl"] = "com.sap.vocabularies.Common.v1.FieldControlType";
|
|
1611
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Application"] = "com.sap.vocabularies.Common.v1.ApplicationType";
|
|
1612
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Timestamp"] = "Edm.DateTimeOffset";
|
|
1613
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ErrorResolution"] = "com.sap.vocabularies.Common.v1.ErrorResolutionType";
|
|
1614
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Messages"] = "Edm.ComplexType";
|
|
1615
|
+
TermToTypes["com.sap.vocabularies.Common.v1.numericSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
1616
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MaximumNumericMessageSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
1617
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsActionCritical"] = "Edm.Boolean";
|
|
1618
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Attributes"] = "Edm.PropertyPath";
|
|
1619
|
+
TermToTypes["com.sap.vocabularies.Common.v1.RelatedRecursiveHierarchy"] = "Edm.AnnotationPath";
|
|
1620
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Interval"] = "com.sap.vocabularies.Common.v1.IntervalType";
|
|
1621
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ResultContext"] = "Org.OData.Core.V1.Tag";
|
|
1622
|
+
TermToTypes["com.sap.vocabularies.Common.v1.WeakReferentialConstraint"] = "com.sap.vocabularies.Common.v1.WeakReferentialConstraintType";
|
|
1623
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsNaturalPerson"] = "Org.OData.Core.V1.Tag";
|
|
1624
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueList"] = "com.sap.vocabularies.Common.v1.ValueListType";
|
|
1625
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueListRelevantQualifiers"] = "com.sap.vocabularies.Common.v1.SimpleIdentifier";
|
|
1626
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueListWithFixedValues"] = "Org.OData.Core.V1.Tag";
|
|
1627
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueListMapping"] = "com.sap.vocabularies.Common.v1.ValueListMappingType";
|
|
1628
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
1629
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
1630
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1631
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
1632
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarWeek"] = "Org.OData.Core.V1.Tag";
|
|
1633
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
1634
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
1635
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
1636
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1637
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearMonth"] = "Org.OData.Core.V1.Tag";
|
|
1638
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
1639
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarDate"] = "Org.OData.Core.V1.Tag";
|
|
1640
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
1641
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalPeriod"] = "Org.OData.Core.V1.Tag";
|
|
1642
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearPeriod"] = "Org.OData.Core.V1.Tag";
|
|
1643
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1644
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1645
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalWeek"] = "Org.OData.Core.V1.Tag";
|
|
1646
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
1647
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
1648
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearVariant"] = "Org.OData.Core.V1.Tag";
|
|
1649
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MutuallyExclusiveTerm"] = "Org.OData.Core.V1.Tag";
|
|
1650
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DraftRoot"] = "com.sap.vocabularies.Common.v1.DraftRootType";
|
|
1651
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DraftNode"] = "com.sap.vocabularies.Common.v1.DraftNodeType";
|
|
1652
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DraftActivationVia"] = "com.sap.vocabularies.Common.v1.SimpleIdentifier";
|
|
1653
|
+
TermToTypes["com.sap.vocabularies.Common.v1.EditableFieldFor"] = "Edm.PropertyPath";
|
|
1654
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SemanticKey"] = "Edm.PropertyPath";
|
|
1655
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SideEffects"] = "com.sap.vocabularies.Common.v1.SideEffectsType";
|
|
1656
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DefaultValuesFunction"] = "com.sap.vocabularies.Common.v1.QualifiedName";
|
|
1657
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValue"] = "Edm.PrimitiveType";
|
|
1658
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValueHigh"] = "Edm.PrimitiveType";
|
|
1659
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SortOrder"] = "com.sap.vocabularies.Common.v1.SortOrderType";
|
|
1660
|
+
TermToTypes["com.sap.vocabularies.Common.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Common.v1.RecursiveHierarchyType";
|
|
1661
|
+
TermToTypes["com.sap.vocabularies.Common.v1.CreatedAt"] = "Edm.DateTimeOffset";
|
|
1662
|
+
TermToTypes["com.sap.vocabularies.Common.v1.CreatedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
1663
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ChangedAt"] = "Edm.DateTimeOffset";
|
|
1664
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ChangedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
1665
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ApplyMultiUnitBehaviorForSortingAndFiltering"] = "Org.OData.Core.V1.Tag";
|
|
1666
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.CurrencyCodes"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
1667
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.UnitsOfMeasure"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
1668
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.StandardCode"] = "Edm.PropertyPath";
|
|
1669
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.ExternalCode"] = "Edm.PropertyPath";
|
|
1670
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.IsConfigurationDeprecationCode"] = "Edm.Boolean";
|
|
1671
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Contact"] = "com.sap.vocabularies.Communication.v1.ContactType";
|
|
1672
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Address"] = "com.sap.vocabularies.Communication.v1.AddressType";
|
|
1673
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.IsEmailAddress"] = "Org.OData.Core.V1.Tag";
|
|
1674
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.IsPhoneNumber"] = "Org.OData.Core.V1.Tag";
|
|
1675
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Event"] = "com.sap.vocabularies.Communication.v1.EventData";
|
|
1676
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Task"] = "com.sap.vocabularies.Communication.v1.TaskData";
|
|
1677
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Message"] = "com.sap.vocabularies.Communication.v1.MessageData";
|
|
1678
|
+
TermToTypes["com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchyType";
|
|
1679
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.EntitySemantics"] = "com.sap.vocabularies.PersonalData.v1.EntitySemanticsType";
|
|
1680
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.FieldSemantics"] = "com.sap.vocabularies.PersonalData.v1.FieldSemanticsType";
|
|
1681
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallyPersonal"] = "Org.OData.Core.V1.Tag";
|
|
1682
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] = "Org.OData.Core.V1.Tag";
|
|
1683
|
+
TermToTypes["com.sap.vocabularies.Session.v1.StickySessionSupported"] = "com.sap.vocabularies.Session.v1.StickySessionSupportedType";
|
|
1684
|
+
TermToTypes["com.sap.vocabularies.UI.v1.HeaderInfo"] = "com.sap.vocabularies.UI.v1.HeaderInfoType";
|
|
1685
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Identification"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1686
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Badge"] = "com.sap.vocabularies.UI.v1.BadgeType";
|
|
1687
|
+
TermToTypes["com.sap.vocabularies.UI.v1.LineItem"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1688
|
+
TermToTypes["com.sap.vocabularies.UI.v1.StatusInfo"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1689
|
+
TermToTypes["com.sap.vocabularies.UI.v1.FieldGroup"] = "com.sap.vocabularies.UI.v1.FieldGroupType";
|
|
1690
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ConnectedFields"] = "com.sap.vocabularies.UI.v1.ConnectedFieldsType";
|
|
1691
|
+
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocations"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
1692
|
+
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocation"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
1693
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Contacts"] = "Edm.AnnotationPath";
|
|
1694
|
+
TermToTypes["com.sap.vocabularies.UI.v1.MediaResource"] = "com.sap.vocabularies.UI.v1.MediaResourceType";
|
|
1695
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DataPoint"] = "com.sap.vocabularies.UI.v1.DataPointType";
|
|
1696
|
+
TermToTypes["com.sap.vocabularies.UI.v1.KPI"] = "com.sap.vocabularies.UI.v1.KPIType";
|
|
1697
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Chart"] = "com.sap.vocabularies.UI.v1.ChartDefinitionType";
|
|
1698
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ValueCriticality"] = "com.sap.vocabularies.UI.v1.ValueCriticalityType";
|
|
1699
|
+
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityLabels"] = "com.sap.vocabularies.UI.v1.CriticalityLabelType";
|
|
1700
|
+
TermToTypes["com.sap.vocabularies.UI.v1.SelectionFields"] = "Edm.PropertyPath";
|
|
1701
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Facets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1702
|
+
TermToTypes["com.sap.vocabularies.UI.v1.HeaderFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1703
|
+
TermToTypes["com.sap.vocabularies.UI.v1.QuickViewFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1704
|
+
TermToTypes["com.sap.vocabularies.UI.v1.QuickCreateFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1705
|
+
TermToTypes["com.sap.vocabularies.UI.v1.FilterFacets"] = "com.sap.vocabularies.UI.v1.ReferenceFacet";
|
|
1706
|
+
TermToTypes["com.sap.vocabularies.UI.v1.SelectionPresentationVariant"] = "com.sap.vocabularies.UI.v1.SelectionPresentationVariantType";
|
|
1707
|
+
TermToTypes["com.sap.vocabularies.UI.v1.PresentationVariant"] = "com.sap.vocabularies.UI.v1.PresentationVariantType";
|
|
1708
|
+
TermToTypes["com.sap.vocabularies.UI.v1.SelectionVariant"] = "com.sap.vocabularies.UI.v1.SelectionVariantType";
|
|
1709
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ThingPerspective"] = "Org.OData.Core.V1.Tag";
|
|
1710
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsSummary"] = "Org.OData.Core.V1.Tag";
|
|
1711
|
+
TermToTypes["com.sap.vocabularies.UI.v1.PartOfPreview"] = "Org.OData.Core.V1.Tag";
|
|
1712
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Map"] = "Org.OData.Core.V1.Tag";
|
|
1713
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Gallery"] = "Org.OData.Core.V1.Tag";
|
|
1714
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsImageURL"] = "Org.OData.Core.V1.Tag";
|
|
1715
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsImage"] = "Org.OData.Core.V1.Tag";
|
|
1716
|
+
TermToTypes["com.sap.vocabularies.UI.v1.MultiLineText"] = "Org.OData.Core.V1.Tag";
|
|
1717
|
+
TermToTypes["com.sap.vocabularies.UI.v1.TextArrangement"] = "com.sap.vocabularies.UI.v1.TextArrangementType";
|
|
1718
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Importance"] = "com.sap.vocabularies.UI.v1.ImportanceType";
|
|
1719
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Hidden"] = "Org.OData.Core.V1.Tag";
|
|
1720
|
+
TermToTypes["com.sap.vocabularies.UI.v1.CreateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1721
|
+
TermToTypes["com.sap.vocabularies.UI.v1.UpdateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1722
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DeleteHidden"] = "Org.OData.Core.V1.Tag";
|
|
1723
|
+
TermToTypes["com.sap.vocabularies.UI.v1.HiddenFilter"] = "Org.OData.Core.V1.Tag";
|
|
1724
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DataFieldDefault"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1725
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Criticality"] = "com.sap.vocabularies.UI.v1.CriticalityType";
|
|
1726
|
+
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityCalculation"] = "com.sap.vocabularies.UI.v1.CriticalityCalculationType";
|
|
1727
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Emphasized"] = "Org.OData.Core.V1.Tag";
|
|
1728
|
+
TermToTypes["com.sap.vocabularies.UI.v1.OrderBy"] = "Edm.PropertyPath";
|
|
1729
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ParameterDefaultValue"] = "Edm.PrimitiveType";
|
|
1730
|
+
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationState"] = "com.sap.vocabularies.UI.v1.RecommendationStateType";
|
|
1731
|
+
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationList"] = "com.sap.vocabularies.UI.v1.RecommendationListType";
|
|
1732
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] = "Org.OData.Core.V1.Tag";
|
|
1733
|
+
TermToTypes["com.sap.vocabularies.HTML5.v1.CssDefaults"] = "com.sap.vocabularies.HTML5.v1.CssDefaultsType";
|
|
1734
|
+
})(TermToTypes = exports.TermToTypes || (exports.TermToTypes = {}));
|
|
1735
|
+
/**
|
|
1736
|
+
* Differentiate between a ComplexType and a TypeDefinition.
|
|
1737
|
+
* @param complexTypeDefinition
|
|
1738
|
+
* @returns true if the value is a complex type
|
|
1739
|
+
*/
|
|
1740
|
+
|
|
1741
|
+
|
|
1742
|
+
function isComplexTypeDefinition(complexTypeDefinition) {
|
|
1743
|
+
return !!complexTypeDefinition && complexTypeDefinition._type === 'ComplexType' && !!complexTypeDefinition.properties;
|
|
1469
1744
|
}
|
|
1470
1745
|
|
|
1471
|
-
|
|
1472
|
-
toResolve.targetString = targetStr;
|
|
1746
|
+
exports.isComplexTypeDefinition = isComplexTypeDefinition;
|
|
1473
1747
|
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
addAnnotationErrorMessage(targetStr, _oErrorMsg);
|
|
1487
|
-
}
|
|
1748
|
+
function Decimal(value) {
|
|
1749
|
+
return {
|
|
1750
|
+
isDecimal: function () {
|
|
1751
|
+
return true;
|
|
1752
|
+
},
|
|
1753
|
+
valueOf: function () {
|
|
1754
|
+
return value;
|
|
1755
|
+
},
|
|
1756
|
+
toString: function () {
|
|
1757
|
+
return value.toString();
|
|
1758
|
+
}
|
|
1759
|
+
};
|
|
1488
1760
|
}
|
|
1489
|
-
});
|
|
1490
1761
|
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
}
|
|
1762
|
+
exports.Decimal = Decimal;
|
|
1763
|
+
/***/
|
|
1764
|
+
},
|
|
1494
1765
|
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
annotations: parserOutput.schema.annotations,
|
|
1504
|
-
namespace: parserOutput.schema.namespace,
|
|
1505
|
-
entityContainer: parserOutput.schema.entityContainer,
|
|
1506
|
-
actions: parserOutput.schema.actions,
|
|
1507
|
-
entitySets: parserOutput.schema.entitySets,
|
|
1508
|
-
singletons: parserOutput.schema.singletons,
|
|
1509
|
-
entityTypes: parserOutput.schema.entityTypes,
|
|
1510
|
-
complexTypes: parserOutput.schema.complexTypes,
|
|
1511
|
-
typeDefinitions: parserOutput.schema.typeDefinitions,
|
|
1512
|
-
references: defaultReferences.concat(extraReferences),
|
|
1513
|
-
diagnostics: ANNOTATION_ERRORS.concat()
|
|
1514
|
-
};
|
|
1515
|
-
convertedOutput.resolvePath = createGlobalResolve(convertedOutput, objectMap);
|
|
1516
|
-
return convertedOutput;
|
|
1517
|
-
}
|
|
1766
|
+
/***/
|
|
1767
|
+
426:
|
|
1768
|
+
/***/
|
|
1769
|
+
function (__unused_webpack_module, exports, __webpack_require__) {
|
|
1770
|
+
Object.defineProperty(exports, "__esModule", {
|
|
1771
|
+
value: true
|
|
1772
|
+
});
|
|
1773
|
+
exports.revertTermToGenericType = void 0;
|
|
1518
1774
|
|
|
1519
|
-
|
|
1775
|
+
var utils_1 = __webpack_require__(69);
|
|
1776
|
+
/**
|
|
1777
|
+
* Revert an object to its raw type equivalent.
|
|
1778
|
+
*
|
|
1779
|
+
* @param references the current reference
|
|
1780
|
+
* @param value the value to revert
|
|
1781
|
+
* @returns the raw value
|
|
1782
|
+
*/
|
|
1520
1783
|
|
|
1521
|
-
function revertValueToGenericType(references, value) {
|
|
1522
|
-
var result;
|
|
1523
1784
|
|
|
1524
|
-
|
|
1525
|
-
|
|
1785
|
+
function revertObjectToRawType(references, value) {
|
|
1786
|
+
var _a, _b;
|
|
1526
1787
|
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
}
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
}
|
|
1788
|
+
var result;
|
|
1789
|
+
|
|
1790
|
+
if (Array.isArray(value)) {
|
|
1791
|
+
result = {
|
|
1792
|
+
type: 'Collection',
|
|
1793
|
+
Collection: value.map(function (anno) {
|
|
1794
|
+
return revertCollectionItemToRawType(references, anno);
|
|
1795
|
+
})
|
|
1796
|
+
};
|
|
1797
|
+
} else if ((_a = value.isDecimal) === null || _a === void 0 ? void 0 : _a.call(value)) {
|
|
1798
|
+
result = {
|
|
1799
|
+
type: 'Decimal',
|
|
1800
|
+
Decimal: value.valueOf()
|
|
1801
|
+
};
|
|
1802
|
+
} else if ((_b = value.isString) === null || _b === void 0 ? void 0 : _b.call(value)) {
|
|
1803
|
+
var valueMatches = value.split('.');
|
|
1804
|
+
|
|
1805
|
+
if (valueMatches.length > 1 && references.find(function (ref) {
|
|
1806
|
+
return ref.alias === valueMatches[0];
|
|
1807
|
+
})) {
|
|
1808
|
+
result = {
|
|
1809
|
+
type: 'EnumMember',
|
|
1810
|
+
EnumMember: value.valueOf()
|
|
1811
|
+
};
|
|
1812
|
+
} else {
|
|
1813
|
+
result = {
|
|
1814
|
+
type: 'String',
|
|
1815
|
+
String: value.valueOf()
|
|
1816
|
+
};
|
|
1817
|
+
}
|
|
1818
|
+
} else if (value.type === 'Path') {
|
|
1819
|
+
result = {
|
|
1820
|
+
type: 'Path',
|
|
1821
|
+
Path: value.path
|
|
1822
|
+
};
|
|
1823
|
+
} else if (value.type === 'AnnotationPath') {
|
|
1824
|
+
result = {
|
|
1825
|
+
type: 'AnnotationPath',
|
|
1826
|
+
AnnotationPath: value.value
|
|
1827
|
+
};
|
|
1828
|
+
} else if (value.type === 'Apply') {
|
|
1829
|
+
result = {
|
|
1830
|
+
type: 'Apply',
|
|
1831
|
+
Apply: value.Apply
|
|
1832
|
+
};
|
|
1833
|
+
} else if (value.type === 'Null') {
|
|
1834
|
+
result = {
|
|
1835
|
+
type: 'Null'
|
|
1836
|
+
};
|
|
1837
|
+
} else if (value.type === 'PropertyPath') {
|
|
1838
|
+
result = {
|
|
1839
|
+
type: 'PropertyPath',
|
|
1840
|
+
PropertyPath: value.value
|
|
1841
|
+
};
|
|
1842
|
+
} else if (value.type === 'NavigationPropertyPath') {
|
|
1843
|
+
result = {
|
|
1844
|
+
type: 'NavigationPropertyPath',
|
|
1845
|
+
NavigationPropertyPath: value.value
|
|
1846
|
+
};
|
|
1847
|
+
} else if (Object.prototype.hasOwnProperty.call(value, '$Type')) {
|
|
1848
|
+
result = {
|
|
1849
|
+
type: 'Record',
|
|
1850
|
+
Record: revertCollectionItemToRawType(references, value)
|
|
1851
|
+
};
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1854
|
+
return result;
|
|
1563
1855
|
}
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
type: "NavigationPropertyPath",
|
|
1596
|
-
NavigationPropertyPath: value.value
|
|
1597
|
-
};
|
|
1598
|
-
} else if (Object.prototype.hasOwnProperty.call(value, "$Type")) {
|
|
1599
|
-
result = {
|
|
1600
|
-
type: "Record",
|
|
1601
|
-
Record: revertCollectionItemToGenericType(references, value)
|
|
1602
|
-
};
|
|
1603
|
-
}
|
|
1856
|
+
/**
|
|
1857
|
+
* Revert a value to its raw value depending on its type.
|
|
1858
|
+
*
|
|
1859
|
+
* @param references the current set of reference
|
|
1860
|
+
* @param value the value to revert
|
|
1861
|
+
* @returns the raw expression
|
|
1862
|
+
*/
|
|
1863
|
+
|
|
1864
|
+
|
|
1865
|
+
function revertValueToRawType(references, value) {
|
|
1866
|
+
var result;
|
|
1867
|
+
var valueConstructor = value === null || value === void 0 ? void 0 : value.constructor.name;
|
|
1868
|
+
|
|
1869
|
+
switch (valueConstructor) {
|
|
1870
|
+
case 'String':
|
|
1871
|
+
case 'string':
|
|
1872
|
+
var valueMatches = value.toString().split('.');
|
|
1873
|
+
|
|
1874
|
+
if (valueMatches.length > 1 && references.find(function (ref) {
|
|
1875
|
+
return ref.alias === valueMatches[0];
|
|
1876
|
+
})) {
|
|
1877
|
+
result = {
|
|
1878
|
+
type: 'EnumMember',
|
|
1879
|
+
EnumMember: value.toString()
|
|
1880
|
+
};
|
|
1881
|
+
} else {
|
|
1882
|
+
result = {
|
|
1883
|
+
type: 'String',
|
|
1884
|
+
String: value.toString()
|
|
1885
|
+
};
|
|
1886
|
+
}
|
|
1604
1887
|
|
|
1605
|
-
|
|
1606
|
-
|
|
1888
|
+
break;
|
|
1889
|
+
|
|
1890
|
+
case 'Boolean':
|
|
1891
|
+
case 'boolean':
|
|
1892
|
+
result = {
|
|
1893
|
+
type: 'Bool',
|
|
1894
|
+
Bool: value.valueOf()
|
|
1895
|
+
};
|
|
1896
|
+
break;
|
|
1897
|
+
|
|
1898
|
+
case 'Number':
|
|
1899
|
+
case 'number':
|
|
1900
|
+
if (value.toString() === value.toFixed()) {
|
|
1901
|
+
result = {
|
|
1902
|
+
type: 'Int',
|
|
1903
|
+
Int: value.valueOf()
|
|
1904
|
+
};
|
|
1905
|
+
} else {
|
|
1906
|
+
result = {
|
|
1907
|
+
type: 'Decimal',
|
|
1908
|
+
Decimal: value.valueOf()
|
|
1909
|
+
};
|
|
1910
|
+
}
|
|
1607
1911
|
|
|
1608
|
-
|
|
1609
|
-
if (typeof collectionItem === "string") {
|
|
1610
|
-
return collectionItem;
|
|
1611
|
-
} else if (typeof collectionItem === "object") {
|
|
1612
|
-
if (collectionItem.hasOwnProperty("$Type")) {
|
|
1613
|
-
// Annotation Record
|
|
1614
|
-
var outItem = {
|
|
1615
|
-
type: collectionItem.$Type,
|
|
1616
|
-
propertyValues: []
|
|
1617
|
-
}; // Could validate keys and type based on $Type
|
|
1618
|
-
|
|
1619
|
-
Object.keys(collectionItem).forEach(function (collectionKey) {
|
|
1620
|
-
if (collectionKey !== "$Type" && collectionKey !== "term" && collectionKey !== "__source" && collectionKey !== "qualifier" && collectionKey !== "ActionTarget" && collectionKey !== "fullyQualifiedName" && collectionKey !== "annotations") {
|
|
1621
|
-
var value = collectionItem[collectionKey];
|
|
1622
|
-
outItem.propertyValues.push({
|
|
1623
|
-
name: collectionKey,
|
|
1624
|
-
value: revertValueToGenericType(references, value)
|
|
1625
|
-
});
|
|
1626
|
-
} else if (collectionKey === "annotations") {
|
|
1627
|
-
var annotations = collectionItem[collectionKey];
|
|
1628
|
-
outItem.annotations = [];
|
|
1629
|
-
Object.keys(annotations).filter(function (key) {
|
|
1630
|
-
return key !== "_annotations";
|
|
1631
|
-
}).forEach(function (key) {
|
|
1632
|
-
Object.keys(annotations[key]).forEach(function (term) {
|
|
1633
|
-
var _outItem$annotations;
|
|
1634
|
-
|
|
1635
|
-
var parsedAnnotation = revertTermToGenericType(references, annotations[key][term]);
|
|
1636
|
-
|
|
1637
|
-
if (!parsedAnnotation.term) {
|
|
1638
|
-
var unaliasedTerm = unalias(references, "".concat(key, ".").concat(term));
|
|
1639
|
-
|
|
1640
|
-
if (unaliasedTerm) {
|
|
1641
|
-
var qualifiedSplit = unaliasedTerm.split("#");
|
|
1642
|
-
parsedAnnotation.term = qualifiedSplit[0];
|
|
1643
|
-
|
|
1644
|
-
if (qualifiedSplit.length > 1) {
|
|
1645
|
-
parsedAnnotation.qualifier = qualifiedSplit[1];
|
|
1646
|
-
}
|
|
1647
|
-
}
|
|
1648
|
-
}
|
|
1912
|
+
break;
|
|
1649
1913
|
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
}
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
return {
|
|
1658
|
-
type: "PropertyPath",
|
|
1659
|
-
PropertyPath: collectionItem.value
|
|
1660
|
-
};
|
|
1661
|
-
} else if (collectionItem.type === "AnnotationPath") {
|
|
1662
|
-
return {
|
|
1663
|
-
type: "AnnotationPath",
|
|
1664
|
-
AnnotationPath: collectionItem.value
|
|
1665
|
-
};
|
|
1666
|
-
} else if (collectionItem.type === "NavigationPropertyPath") {
|
|
1667
|
-
return {
|
|
1668
|
-
type: "NavigationPropertyPath",
|
|
1669
|
-
NavigationPropertyPath: collectionItem.value
|
|
1670
|
-
};
|
|
1914
|
+
case 'object':
|
|
1915
|
+
default:
|
|
1916
|
+
result = revertObjectToRawType(references, value);
|
|
1917
|
+
break;
|
|
1918
|
+
}
|
|
1919
|
+
|
|
1920
|
+
return result;
|
|
1671
1921
|
}
|
|
1672
|
-
}
|
|
1673
|
-
}
|
|
1674
1922
|
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1923
|
+
var restrictedKeys = ['$Type', 'term', '__source', 'qualifier', 'ActionTarget', 'fullyQualifiedName', 'annotations'];
|
|
1924
|
+
/**
|
|
1925
|
+
* Revert the current embedded annotations to their raw type.
|
|
1926
|
+
*
|
|
1927
|
+
* @param references the current set of reference
|
|
1928
|
+
* @param currentAnnotations the collection item to evaluate
|
|
1929
|
+
* @param targetAnnotations the place where we need to add the annotation
|
|
1930
|
+
*/
|
|
1680
1931
|
|
|
1681
|
-
|
|
1682
|
-
// Collection
|
|
1683
|
-
if (annotation.hasOwnProperty("annotations")) {
|
|
1684
|
-
baseAnnotation.annotations = [];
|
|
1685
|
-
var currentAnnotations = annotation.annotations;
|
|
1932
|
+
function revertAnnotationsToRawType(references, currentAnnotations, targetAnnotations) {
|
|
1686
1933
|
Object.keys(currentAnnotations).filter(function (key) {
|
|
1687
|
-
return key !==
|
|
1934
|
+
return key !== '_annotations';
|
|
1688
1935
|
}).forEach(function (key) {
|
|
1689
1936
|
Object.keys(currentAnnotations[key]).forEach(function (term) {
|
|
1690
|
-
var _baseAnnotation$annot;
|
|
1691
|
-
|
|
1692
1937
|
var parsedAnnotation = revertTermToGenericType(references, currentAnnotations[key][term]);
|
|
1693
1938
|
|
|
1694
1939
|
if (!parsedAnnotation.term) {
|
|
1695
|
-
var unaliasedTerm = unalias(references, "".concat(key, ".").concat(term));
|
|
1940
|
+
var unaliasedTerm = (0, utils_1.unalias)(references, "".concat(key, ".").concat(term));
|
|
1696
1941
|
|
|
1697
1942
|
if (unaliasedTerm) {
|
|
1698
|
-
var qualifiedSplit = unaliasedTerm.split(
|
|
1943
|
+
var qualifiedSplit = unaliasedTerm.split('#');
|
|
1699
1944
|
parsedAnnotation.term = qualifiedSplit[0];
|
|
1700
1945
|
|
|
1701
1946
|
if (qualifiedSplit.length > 1) {
|
|
1947
|
+
// Sub Annotation with a qualifier, not sure when that can happen in real scenarios
|
|
1702
1948
|
parsedAnnotation.qualifier = qualifiedSplit[1];
|
|
1703
1949
|
}
|
|
1704
1950
|
}
|
|
1705
1951
|
}
|
|
1706
1952
|
|
|
1707
|
-
|
|
1953
|
+
targetAnnotations.push(parsedAnnotation);
|
|
1708
1954
|
});
|
|
1709
1955
|
});
|
|
1710
1956
|
}
|
|
1957
|
+
/**
|
|
1958
|
+
* Revert the current collection item to the corresponding raw annotation.
|
|
1959
|
+
*
|
|
1960
|
+
* @param references the current set of reference
|
|
1961
|
+
* @param collectionItem the collection item to evaluate
|
|
1962
|
+
* @returns the raw type equivalent
|
|
1963
|
+
*/
|
|
1964
|
+
|
|
1965
|
+
|
|
1966
|
+
function revertCollectionItemToRawType(references, collectionItem) {
|
|
1967
|
+
if (typeof collectionItem === 'string') {
|
|
1968
|
+
return collectionItem;
|
|
1969
|
+
} else if (typeof collectionItem === 'object') {
|
|
1970
|
+
if (collectionItem.hasOwnProperty('$Type')) {
|
|
1971
|
+
// Annotation Record
|
|
1972
|
+
var outItem = {
|
|
1973
|
+
type: collectionItem.$Type,
|
|
1974
|
+
propertyValues: []
|
|
1975
|
+
}; // Could validate keys and type based on $Type
|
|
1976
|
+
|
|
1977
|
+
Object.keys(collectionItem).forEach(function (collectionKey) {
|
|
1978
|
+
if (restrictedKeys.indexOf(collectionKey) === -1) {
|
|
1979
|
+
var value = collectionItem[collectionKey];
|
|
1980
|
+
outItem.propertyValues.push({
|
|
1981
|
+
name: collectionKey,
|
|
1982
|
+
value: revertValueToRawType(references, value)
|
|
1983
|
+
});
|
|
1984
|
+
} else if (collectionKey === 'annotations') {
|
|
1985
|
+
outItem.annotations = [];
|
|
1986
|
+
revertAnnotationsToRawType(references, collectionItem[collectionKey], outItem.annotations);
|
|
1987
|
+
}
|
|
1988
|
+
});
|
|
1989
|
+
return outItem;
|
|
1990
|
+
} else if (collectionItem.type === 'PropertyPath') {
|
|
1991
|
+
return {
|
|
1992
|
+
type: 'PropertyPath',
|
|
1993
|
+
PropertyPath: collectionItem.value
|
|
1994
|
+
};
|
|
1995
|
+
} else if (collectionItem.type === 'AnnotationPath') {
|
|
1996
|
+
return {
|
|
1997
|
+
type: 'AnnotationPath',
|
|
1998
|
+
AnnotationPath: collectionItem.value
|
|
1999
|
+
};
|
|
2000
|
+
} else if (collectionItem.type === 'NavigationPropertyPath') {
|
|
2001
|
+
return {
|
|
2002
|
+
type: 'NavigationPropertyPath',
|
|
2003
|
+
NavigationPropertyPath: collectionItem.value
|
|
2004
|
+
};
|
|
2005
|
+
}
|
|
2006
|
+
}
|
|
2007
|
+
}
|
|
2008
|
+
/**
|
|
2009
|
+
* Revert an annotation term to it's generic or raw equivalent.
|
|
2010
|
+
*
|
|
2011
|
+
* @param references the reference of the current context
|
|
2012
|
+
* @param annotation the annotation term to revert
|
|
2013
|
+
* @returns the raw annotation
|
|
2014
|
+
*/
|
|
2015
|
+
|
|
2016
|
+
|
|
2017
|
+
function revertTermToGenericType(references, annotation) {
|
|
2018
|
+
var baseAnnotation = {
|
|
2019
|
+
term: annotation.term,
|
|
2020
|
+
qualifier: annotation.qualifier
|
|
2021
|
+
};
|
|
1711
2022
|
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
2023
|
+
if (Array.isArray(annotation)) {
|
|
2024
|
+
// Collection
|
|
2025
|
+
if (annotation.hasOwnProperty('annotations')) {
|
|
2026
|
+
// Annotation on a collection itself, not sure when that happens if at all
|
|
2027
|
+
baseAnnotation.annotations = [];
|
|
2028
|
+
revertAnnotationsToRawType(references, annotation.annotations, baseAnnotation.annotations);
|
|
2029
|
+
}
|
|
2030
|
+
|
|
2031
|
+
return Object.assign(Object.assign({}, baseAnnotation), {
|
|
2032
|
+
collection: annotation.map(function (anno) {
|
|
2033
|
+
return revertCollectionItemToRawType(references, anno);
|
|
2034
|
+
})
|
|
2035
|
+
});
|
|
2036
|
+
} else if (annotation.hasOwnProperty('$Type')) {
|
|
2037
|
+
return Object.assign(Object.assign({}, baseAnnotation), {
|
|
2038
|
+
record: revertCollectionItemToRawType(references, annotation)
|
|
2039
|
+
});
|
|
2040
|
+
} else {
|
|
2041
|
+
return Object.assign(Object.assign({}, baseAnnotation), {
|
|
2042
|
+
value: revertValueToRawType(references, annotation)
|
|
2043
|
+
});
|
|
2044
|
+
}
|
|
2045
|
+
}
|
|
2046
|
+
|
|
2047
|
+
exports.revertTermToGenericType = revertTermToGenericType;
|
|
2048
|
+
/***/
|
|
1725
2049
|
}
|
|
2050
|
+
/******/
|
|
2051
|
+
|
|
2052
|
+
};
|
|
2053
|
+
/************************************************************************/
|
|
2054
|
+
|
|
2055
|
+
/******/
|
|
2056
|
+
// The module cache
|
|
2057
|
+
|
|
2058
|
+
/******/
|
|
2059
|
+
|
|
2060
|
+
var __webpack_module_cache__ = {};
|
|
2061
|
+
/******/
|
|
2062
|
+
|
|
2063
|
+
/******/
|
|
2064
|
+
// The require function
|
|
2065
|
+
|
|
2066
|
+
/******/
|
|
2067
|
+
|
|
2068
|
+
function __webpack_require__(moduleId) {
|
|
2069
|
+
/******/
|
|
2070
|
+
// Check if module is in cache
|
|
2071
|
+
|
|
2072
|
+
/******/
|
|
2073
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
2074
|
+
/******/
|
|
2075
|
+
|
|
2076
|
+
if (cachedModule !== undefined) {
|
|
2077
|
+
/******/
|
|
2078
|
+
return cachedModule.exports;
|
|
2079
|
+
/******/
|
|
2080
|
+
}
|
|
2081
|
+
/******/
|
|
2082
|
+
// Create a new module (and put it into the cache)
|
|
2083
|
+
|
|
2084
|
+
/******/
|
|
2085
|
+
|
|
2086
|
+
|
|
2087
|
+
var module = __webpack_module_cache__[moduleId] = {
|
|
2088
|
+
/******/
|
|
2089
|
+
// no module.id needed
|
|
2090
|
+
|
|
2091
|
+
/******/
|
|
2092
|
+
// no module.loaded needed
|
|
2093
|
+
|
|
2094
|
+
/******/
|
|
2095
|
+
exports: {}
|
|
2096
|
+
/******/
|
|
2097
|
+
|
|
2098
|
+
};
|
|
2099
|
+
/******/
|
|
2100
|
+
|
|
2101
|
+
/******/
|
|
2102
|
+
// Execute the module function
|
|
2103
|
+
|
|
2104
|
+
/******/
|
|
2105
|
+
|
|
2106
|
+
__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
2107
|
+
/******/
|
|
2108
|
+
|
|
2109
|
+
/******/
|
|
2110
|
+
// Return the exports of the module
|
|
2111
|
+
|
|
2112
|
+
/******/
|
|
2113
|
+
|
|
2114
|
+
|
|
2115
|
+
return module.exports;
|
|
2116
|
+
/******/
|
|
1726
2117
|
}
|
|
2118
|
+
/******/
|
|
2119
|
+
|
|
2120
|
+
/************************************************************************/
|
|
2121
|
+
|
|
2122
|
+
/******/
|
|
2123
|
+
|
|
2124
|
+
/******/
|
|
2125
|
+
// startup
|
|
2126
|
+
|
|
2127
|
+
/******/
|
|
2128
|
+
// Load entry module and return exports
|
|
2129
|
+
|
|
2130
|
+
/******/
|
|
2131
|
+
// This entry module is referenced by other modules so it can't be inlined
|
|
2132
|
+
|
|
2133
|
+
/******/
|
|
2134
|
+
|
|
2135
|
+
|
|
2136
|
+
var __webpack_exports__ = __webpack_require__(759);
|
|
2137
|
+
/******/
|
|
2138
|
+
|
|
2139
|
+
|
|
2140
|
+
AnnotationConverter = __webpack_exports__;
|
|
2141
|
+
/******/
|
|
1727
2142
|
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
});
|
|
1731
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbW1vbi9Bbm5vdGF0aW9uQ29udmVydGVyLnRzIl0sIm5hbWVzIjpbIlBhdGgiLCJwYXRoRXhwcmVzc2lvbiIsInRhcmdldE5hbWUiLCJhbm5vdGF0aW9uc1Rlcm0iLCJhbm5vdGF0aW9uVHlwZSIsInRlcm0iLCJwYXRoIiwidHlwZSIsIiR0YXJnZXQiLCJUZXJtVG9UeXBlcyIsImRlZmF1bHRSZWZlcmVuY2VzIiwiYWxpYXMiLCJuYW1lc3BhY2UiLCJ1cmkiLCJyZWZlcmVuY2VzIiwidW5hbGlhc2VkVmFsdWUiLCJyZXZlcnNlUmVmZXJlbmNlTWFwIiwicmVkdWNlIiwibWFwIiwicmVmZXJlbmNlIiwibGFzdERvdEluZGV4IiwibGFzdEluZGV4T2YiLCJzdWJzdHIiLCJ2YWx1ZSIsImluZGV4T2YiLCJzcGxpdCIsInByZUFsaWFzIiwicG9zdEFsaWFzIiwiam9pbiIsInVuYWxpYXMiLCJhbGlhc2VkVmFsdWUiLCJyZWZlcmVuY2VNYXAiLCJidWlsZE9iamVjdE1hcCIsInBhcnNlck91dHB1dCIsIm9iamVjdE1hcCIsInNjaGVtYSIsImVudGl0eUNvbnRhaW5lciIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVNldHMiLCJmb3JFYWNoIiwiZW50aXR5U2V0IiwiYWN0aW9ucyIsImFjdGlvbiIsImlzQm91bmQiLCJ1bkJvdW5kQWN0aW9uTmFtZSIsIl90eXBlIiwicHVzaCIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJjb21wbGV4VHlwZXMiLCJjb21wbGV4VHlwZSIsInByb3BlcnRpZXMiLCJwcm9wZXJ0eSIsInR5cGVEZWZpbml0aW9ucyIsInR5cGVEZWZpbml0aW9uIiwiZW50aXR5VHlwZXMiLCJlbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImNvbXBsZXhUeXBlRGVmaW5pdGlvbiIsImNvbXBsZXhUeXBlUHJvcCIsImNvbXBsZXhUeXBlUHJvcFRhcmdldCIsIk9iamVjdCIsImFzc2lnbiIsIm5hbWUiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3BlcnR5Iiwia2V5cyIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvblNvdXJjZSIsImFubm90YXRpb25MaXN0IiwiY3VycmVudFRhcmdldE5hbWUiLCJ0YXJnZXQiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbkZRTiIsInF1YWxpZmllciIsImNvbWJpbmVQYXRoIiwiY3VycmVudFRhcmdldCIsInN0YXJ0c1dpdGgiLCJhZGRBbm5vdGF0aW9uRXJyb3JNZXNzYWdlIiwib0Vycm9yTXNnIiwiQUxMX0FOTk9UQVRJT05fRVJST1JTIiwicmVzb2x2ZVRhcmdldCIsInBhdGhPbmx5IiwiaW5jbHVkZVZpc2l0ZWRPYmplY3RzIiwidW5kZWZpbmVkIiwiYVZpc2l0ZWRPYmplY3RzIiwicGF0aFNwbGl0IiwidGFyZ2V0UGF0aFNwbGl0IiwicGF0aFBhcnQiLCJhbm5vdGF0aW9uUGF0aCIsImN1cnJlbnRQYXRoIiwiY3VycmVudENvbnRleHQiLCJjdXJyZW50VmFsdWUiLCJsZW5ndGgiLCJ0YXJnZXRUeXBlIiwiZW50aXR5VHlwZU5hbWUiLCJ0YXJnZXRUeXBlTmFtZSIsInNvdXJjZVR5cGUiLCJpc0VudGl0eVNldCIsImxhc3RJZHgiLCJzdWJUYXJnZXQiLCJ2aXNpdGVkT2JqZWN0cyIsInZpc2l0ZWRTdWJPYmplY3QiLCJjb25jYXQiLCJyZXZlcnNlIiwiZmluZCIsIm9iaiIsImludGVybWVkaWF0ZVRhcmdldCIsImhhc093blByb3BlcnR5IiwibWVzc2FnZSIsImlzQW5ub3RhdGlvblBhdGgiLCJwYXRoU3RyIiwicGFyc2VWYWx1ZSIsInByb3BlcnR5VmFsdWUiLCJ2YWx1ZUZRTiIsInRvUmVzb2x2ZSIsInVucmVzb2x2ZWRBbm5vdGF0aW9ucyIsIlN0cmluZyIsIkludCIsIkJvb2wiLCJEZWNpbWFsIiwiRGF0ZSIsIkVudW1NZW1iZXIiLCJQcm9wZXJ0eVBhdGgiLCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiYW5ub3RhdGlvblRhcmdldCIsIkFubm90YXRpb25QYXRoIiwiaW5saW5lIiwicGFyc2VSZWNvcmQiLCJSZWNvcmQiLCJwYXJzZUNvbGxlY3Rpb24iLCJDb2xsZWN0aW9uIiwiaW5mZXJUeXBlRnJvbVRlcm0iLCJpc0Vycm9yIiwicmVjb3JkRGVmaW5pdGlvbiIsImN1cnJlbnRGUU4iLCJhbm5vdGF0aW9uVGVybSIsIiRUeXBlIiwiYW5ub3RhdGlvbkNvbnRlbnQiLCJBcnJheSIsImlzQXJyYXkiLCJzdWJBbm5vdGF0aW9uTGlzdCIsIl9fc291cmNlIiwicHJvcGVydHlWYWx1ZXMiLCJBY3Rpb25UYXJnZXQiLCJBY3Rpb24iLCJBTk5PVEFUSU9OX0VSUk9SUyIsImdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZSIsImNvbGxlY3Rpb25EZWZpbml0aW9uIiwiZmlyc3RDb2xJdGVtIiwicGFyZW50RlFOIiwiY29sbGVjdGlvbkRlZmluaXRpb25UeXBlIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlJZHgiLCJwYXRoVmFsdWUiLCJhbm5vdGF0aW9uSWR4IiwiYW5ub3RhdGlvbkNvbGxlY3Rpb25FbGVtZW50IiwibmF2UHJvcGVydHlQYXRoIiwibmF2UHJvcElkeCIsInJlY29yZElkeCIsImlmVmFsdWUiLCJzdHJpbmdWYWx1ZSIsIkVycm9yIiwiY29udmVydEFubm90YXRpb24iLCJyZWNvcmQiLCJjb2xsZWN0aW9uIiwiY3JlYXRlUmVzb2x2ZVBhdGhGbiIsInJlbGF0aXZlUGF0aCIsInJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydGllcyIsImFzc29jaWF0aW9ucyIsIm5hdlByb3AiLCJvdXROYXZQcm9wIiwicGFydG5lciIsImlzQ29sbGVjdGlvbiIsImNvbnRhaW5zVGFyZ2V0IiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwicmVsYXRpb25zaGlwIiwidGFyZ2V0QXNzb2NpYXRpb24iLCJhc3NvY2lhdGlvbiIsImFzc29jaWF0aW9uRW5kIiwiZW5kIiwicm9sZSIsInRvUm9sZSIsIm11bHRpcGxpY2l0eSIsIm91dE5hdlByb3BSZXEiLCJyZXNvbHZlUGF0aCIsImxpbmtBY3Rpb25zVG9FbnRpdHlUeXBlIiwic291cmNlRW50aXR5VHlwZSIsInJldHVybkVudGl0eVR5cGUiLCJyZXR1cm5UeXBlIiwibGlua0VudGl0eVR5cGVUb0VudGl0eVNldCIsImtleVByb3AiLCJpc0tleSIsImxpbmtFbnRpdHlUeXBlVG9TaW5nbGV0b24iLCJzaW5nbGV0b25zIiwic2luZ2xldG9uIiwidHlwZU5hbWUiLCJsaW5rUHJvcGVydGllc1RvQ29tcGxleFR5cGVzIiwibGluayIsImNvbXBsZXhUeXBlTmFtZSIsInNFcnJvciIsInByZXBhcmVDb21wbGV4VHlwZXMiLCJzcGxpdFRlcm0iLCJ0ZXJtVmFsdWUiLCJhbGlhc2VkVGVybSIsImxhc3REb3QiLCJ0ZXJtQWxpYXMiLCJjcmVhdGVHbG9iYWxSZXNvbHZlIiwiY29udmVydGVkT3V0cHV0Iiwic1BhdGgiLCJhUGF0aFNwbGl0Iiwic2hpZnQiLCJlbnRpdHlTZXROYW1lIiwiZXQiLCJvYmplY3RQYXRoIiwidGFyZ2V0UmVzb2x1dGlvbiIsImNvbnZlcnRUeXBlcyIsIm9iamVjdE1hcEVsZW1lbnQiLCJhbGxUYXJnZXRzIiwiYk92ZXJyaWRlRXhpc3RpbmciLCJ2b2NBbGlhcyIsInZvY1Rlcm0iLCJfYW5ub3RhdGlvbnMiLCJ2b2NUZXJtV2l0aFF1YWxpZmllciIsIkJvb2xlYW4iLCJleHRyYVVucmVzb2x2ZWRBbm5vdGF0aW9ucyIsImJhc2VPYmoiLCJhbm5vdGF0aW9uUGFydCIsInRhcmdldFNwbGl0Iiwic2xpY2UiLCJjdXJyZW50T2JqIiwicmVzb2x2ZWFibGUiLCJ0YXJnZXRTdHIiLCJyZXNvbHZlZFRhcmdldCIsInRhcmdldFN0cmluZyIsInRlcm1JbmZvIiwiZXh0cmFSZWZlcmVuY2VzIiwiZmlsdGVyIiwiZGVmYXVsdFJlZiIsInZlcnNpb24iLCJkaWFnbm9zdGljcyIsInJldmVydFZhbHVlVG9HZW5lcmljVHlwZSIsInJlc3VsdCIsInZhbHVlTWF0Y2hlcyIsIm1hdGNoIiwicmVmIiwiYW5ubyIsInJldmVydENvbGxlY3Rpb25JdGVtVG9HZW5lcmljVHlwZSIsInRvU3RyaW5nIiwidG9GaXhlZCIsImlzRGVjaW1hbCIsInZhbHVlT2YiLCJBcHBseSIsInByb3RvdHlwZSIsImNhbGwiLCJjb2xsZWN0aW9uSXRlbSIsIm91dEl0ZW0iLCJjb2xsZWN0aW9uS2V5Iiwia2V5IiwicGFyc2VkQW5ub3RhdGlvbiIsInJldmVydFRlcm1Ub0dlbmVyaWNUeXBlIiwidW5hbGlhc2VkVGVybSIsInF1YWxpZmllZFNwbGl0IiwiYmFzZUFubm90YXRpb24iLCJjdXJyZW50QW5ub3RhdGlvbnMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF3Q01BLEksNkJBUUwsY0FDQ0MsY0FERCxFQUVDQyxVQUZELEVBR0NDLGVBSEQsRUFJQ0MsY0FKRCxFQUtDQyxJQUxELEVBTUU7QUFBQTs7QUFDRCxTQUFLQyxJQUFMLEdBQVlMLGNBQWMsQ0FBQ0QsSUFBM0I7QUFDQSxTQUFLTyxJQUFMLEdBQVksTUFBWjtBQUNBLFNBQUtDLE9BQUwsR0FBZU4sVUFBZjtBQUNDLFNBQUtHLElBQUwsR0FBWUEsSUFBYixFQUFxQixLQUFLRCxjQUFMLEdBQXNCQSxjQUEzQyxFQUE2RCxLQUFLRCxlQUFMLEdBQXVCQSxlQUFwRjtBQUNBLEc7O01BR0dNLFc7O2FBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztBQUFBQSxJQUFB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LEtBRk0sTUFFQTtBQUNOLDZDQUFZK0wsY0FBWjtBQUE0QmhQLFFBQUFBLEtBQUssRUFBRTBOLHdCQUF3QixDQUFDbk8sVUFBRCxFQUFhMEQsVUFBYjtBQUEzRDtBQUNBO0FBQ0QiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFubm90YXRpb24gYXMgRWRtQW5ub3RhdGlvbixcblx0QW5ub3RhdGlvbkxpc3QsXG5cdEFubm90YXRpb25SZWNvcmQsXG5cdEFubm90YXRpb25UZXJtLFxuXHRDb252ZXJ0ZXJPdXRwdXQsXG5cdEV4cHJlc3Npb24sXG5cdFBhcnNlck91dHB1dCxcblx0UGF0aEV4cHJlc3Npb24sXG5cdFByb3BlcnR5UGF0aCxcblx0UHJvcGVydHlWYWx1ZSxcblx0QW5ub3RhdGlvblBhdGhFeHByZXNzaW9uLFxuXHROYXZpZ2F0aW9uUHJvcGVydHlQYXRoRXhwcmVzc2lvbixcblx0UHJvcGVydHlQYXRoRXhwcmVzc2lvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7XG5cdEFzc29jaWF0aW9uLFxuXHRHZW5lcmljTmF2aWdhdGlvblByb3BlcnR5LFxuXHRSZWZlcmVuY2UsXG5cdFByb3BlcnR5IGFzIFBhcnNlclByb3BlcnR5LFxuXHRFbnRpdHlUeXBlIGFzIFBhcnNlckVudGl0eVR5cGUsXG5cdENvbXBsZXhUeXBlIGFzIFBhcnNlckNvbXBsZXhUeXBlLFxuXHRUeXBlRGVmaW5pdGlvbiBhcyBQYXJzZXJUeXBlRGVmaW5pdGlvbixcblx0VjJOYXZpZ2F0aW9uUHJvcGVydHksXG5cdFY0TmF2aWdhdGlvblByb3BlcnR5XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L1BhcnNlclwiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvbixcblx0RW50aXR5VHlwZSxcblx0Q29tcGxleFR5cGUsXG5cdEFjdGlvbixcblx0RW50aXR5U2V0LFxuXHRTaW5nbGV0b24sXG5cdFByb3BlcnR5LFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdEVudGl0eUNvbnRhaW5lcixcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb24sXG5cdFJlc29sdXRpb25UYXJnZXQsXG5cdFR5cGVEZWZpbml0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L0NvbnZlcnRlclwiO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwidHMtbm9kZVwiO1xuXG5jbGFzcyBQYXRoIHtcblx0cGF0aDogc3RyaW5nO1xuXHQkdGFyZ2V0OiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0YW5ub3RhdGlvbnNUZXJtOiBzdHJpbmc7XG5cdGFubm90YXRpb25UeXBlOiBzdHJpbmc7XG5cdHRlcm06IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwYXRoRXhwcmVzc2lvbjogUGF0aEV4cHJlc3Npb24sXG5cdFx0dGFyZ2V0TmFtZTogc3RyaW5nLFxuXHRcdGFubm90YXRpb25zVGVybTogc3RyaW5nLFxuXHRcdGFubm90YXRpb25UeXBlOiBzdHJpbmcsXG5cdFx0dGVybTogc3RyaW5nXG5cdCkge1xuXHRcdHRoaXMucGF0aCA9IHBhdGhFeHByZXNzaW9uLlBhdGg7XG5cdFx0dGhpcy50eXBlID0gXCJQYXRoXCI7XG5cdFx0dGhpcy4kdGFyZ2V0ID0gdGFyZ2V0TmFtZTtcblx0XHQodGhpcy50ZXJtID0gdGVybSksICh0aGlzLmFubm90YXRpb25UeXBlID0gYW5ub3RhdGlvblR5cGUpLCAodGhpcy5hbm5vdGF0aW9uc1Rlcm0gPSBhbm5vdGF0aW9uc1Rlcm0pO1xuXHR9XG59XG5cbmVudW0gVGVybVRvVHlwZXMge1xuXHRcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lc1wiID0gXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5TZWN1cml0eVNjaGVtZVwiLFxuXHRcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLkF1dGhvcml6YXRpb25zXCIgPSBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLkF1dGhvcml6YXRpb25cIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5SZXZpc2lvbnNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUmV2aXNpb25UeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuTGlua3NcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuTGlua1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuRXhhbXBsZVZhbHVlXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZXNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZVR5cGVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvblR5cGVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5SZXNvdXJjZUV4Y2VwdGlvblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXNvdXJjZUV4Y2VwdGlvblR5cGVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkRhdGFNb2RpZmljYXRpb25FeGNlcHRpb25UeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuSXNMYW5ndWFnZURlcGVuZGVudFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5EZXJlZmVyZW5jZWFibGVJRHNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuQ29udmVudGlvbmFsSURzXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25zXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25cIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5EZWZhdWx0TmFtZXNwYWNlXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZERlZmF1bHRWYWx1ZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Jc1VSTFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Jc01lZGlhVHlwZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5Db250ZW50RGlzcG9zaXRpb25cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGltaXN0aWNDb25jdXJyZW5jeVwiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuQWRkaXRpb25hbFByb3BlcnRpZXNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuQXV0b0V4cGFuZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5BdXRvRXhwYW5kUmVmZXJlbmNlc1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5NYXlJbXBsZW1lbnRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVHlwZU5hbWVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5PcmRlcmVkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxLlBvc2l0aW9uYWxJbnNlcnRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjEuQWx0ZXJuYXRlS2V5c1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpb25hbFBhcmFtZXRlclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpb25hbFBhcmFtZXRlclR5cGVcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVcIiA9IFwiRWRtLkJvb2xlYW5cIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMS5TeW1ib2xpY05hbWVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuU2ltcGxlSWRlbnRpZmllclwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFwiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWxUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Bc3luY2hyb25vdXNSZXF1ZXN0c1N1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoQ29udGludWVPbkVycm9yU3VwcG9ydGVkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSXNvbGF0aW9uU3VwcG9ydGVkXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSXNvbGF0aW9uTGV2ZWxcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNyb3NzSm9pblN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNhbGxiYWNrU3VwcG9ydGVkXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2FsbGJhY2tUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DaGFuZ2VUcmFja2luZ1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNoYW5nZVRyYWNraW5nVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ291bnRSZXN0cmljdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db3VudFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5kZXhhYmxlQnlLZXlcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Ub3BTdXBwb3J0ZWRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Ta2lwU3VwcG9ydGVkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29tcHV0ZVN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0VHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0ZWRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaFN1cHBvcnRcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaFN1cHBvcnRUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkV4cGFuZFJlc3RyaWN0aW9uc1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkV4cGFuZFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLktleUFzU2VnbWVudFN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlF1ZXJ5U2VnbWVudFN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBJbnNlcnRTdXBwb3J0XCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcEluc2VydFN1cHBvcnRUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5VcGRhdGVSZXN0cmljdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5VcGRhdGVSZXN0cmljdGlvbnNUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwVXBkYXRlU3VwcG9ydFwiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBVcGRhdGVTdXBwb3J0VHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVsZXRlUmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVsZXRlUmVzdHJpY3Rpb25zVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29sbGVjdGlvblByb3BlcnR5UmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29sbGVjdGlvblByb3BlcnR5UmVzdHJpY3Rpb25zVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuT3BlcmF0aW9uUmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuT3BlcmF0aW9uUmVzdHJpY3Rpb25zVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQW5ub3RhdGlvblZhbHVlc0luUXVlcnlTdXBwb3J0ZWRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Nb2RpZmljYXRpb25RdWVyeU9wdGlvbnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Nb2RpZmljYXRpb25RdWVyeU9wdGlvbnNUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zXCIgPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1R5cGVcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbUhlYWRlcnNcIiA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21QYXJhbWV0ZXJcIixcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVF1ZXJ5T3B0aW9uc1wiID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVBhcmFtZXRlclwiLFxuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTWVkaWFMb2NhdGlvblVwZGF0ZVN1cHBvcnRlZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRcIiA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Hcm91cGFibGVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFnZ3JlZ2F0YWJsZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ29udGV4dERlZmluaW5nUHJvcGVydGllc1wiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkxldmVsZWRIaWVyYXJjaHlcIiA9IFwiRWRtLlByb3BlcnR5UGF0aFwiLFxuXHRcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5SZWN1cnNpdmVIaWVyYXJjaHlcIiA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIixcblx0XCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXZhaWxhYmxlT25BZ2dyZWdhdGVzXCIgPSBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXNUeXBlXCIsXG5cdFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bVwiID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW1cIiA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIixcblx0XCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQWxsb3dlZFZhbHVlc1wiID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVmFsdWVcIixcblx0XCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NdWx0aXBsZU9mXCIgPSBcIkVkbS5EZWNpbWFsXCIsXG5cdFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQ29uc3RyYWludFwiID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50VHlwZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkl0ZW1zT2ZcIiA9IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuSXRlbXNPZlR5cGVcIixcblx0XCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5PcGVuUHJvcGVydHlUeXBlQ29uc3RyYWludFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUeXBlTmFtZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkRlcml2ZWRUeXBlQ29uc3RyYWludFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUeXBlTmFtZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRUZXJtc1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFwcGxpY2FibGVUZXJtc1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heEl0ZW1zXCIgPSBcIkVkbS5JbnQ2NFwiLFxuXHRcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbkl0ZW1zXCIgPSBcIkVkbS5JbnQ2NFwiLFxuXHRcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5TY2FsZVwiID0gXCJFZG0uQnl0ZVwiLFxuXHRcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5XCIgPSBcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5EaW1lbnNpb25cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFjY3VtdWxhdGl2ZU1lYXN1cmVcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlJvbGxlZFVwUHJvcGVydHlDb3VudFwiID0gXCJFZG0uSW50MTZcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuUGxhbm5pbmdBY3Rpb25cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydHlUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlcnZpY2VWZXJzaW9uXCIgPSBcIkVkbS5JbnQzMlwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZXJ2aWNlU2NoZW1hVmVyc2lvblwiID0gXCJFZG0uSW50MzJcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvclwiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzTGFuZ3VhZ2VJZGVudGlmaWVyXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVXBwZXJDYXNlXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0N1cnJlbmN5XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1VuaXRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1NjYWxlXCIgPSBcIkVkbS5QcmltaXRpdmVUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1ByZWNpc2lvblwiID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZWNvbmRhcnlLZXlcIiA9IFwiRWRtLlByb3BlcnR5UGF0aFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NaW5PY2N1cnNcIiA9IFwiRWRtLkludDY0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1heE9jY3Vyc1wiID0gXCJFZG0uSW50NjRcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXNzb2NpYXRpb25FbnRpdHlcIiA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVyaXZlZE5hdmlnYXRpb25cIiA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWFza2VkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXNrZWRBbHdheXNcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0luc3RhbmNlQW5ub3RhdGlvblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uc1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25cIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGxpY2F0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UaW1lc3RhbXBcIiA9IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVycm9yUmVzb2x1dGlvblwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRXJyb3JSZXNvbHV0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlc1wiID0gXCJFZG0uQ29tcGxleFR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEubnVtZXJpY1NldmVyaXR5XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5OdW1lcmljTWVzc2FnZVNldmVyaXR5VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXhpbXVtTnVtZXJpY01lc3NhZ2VTZXZlcml0eVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTnVtZXJpY01lc3NhZ2VTZXZlcml0eVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbFwiID0gXCJFZG0uQm9vbGVhblwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BdHRyaWJ1dGVzXCIgPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVsYXRlZFJlY3Vyc2l2ZUhpZXJhcmNoeVwiID0gXCJFZG0uQW5ub3RhdGlvblBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkludGVydmFsVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5XZWFrUmVmZXJlbnRpYWxDb25zdHJhaW50XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5XZWFrUmVmZXJlbnRpYWxDb25zdHJhaW50VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc05hdHVyYWxQZXJzb25cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpbXBsZUlkZW50aWZpZXJcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhckhhbGZ5ZWFyXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyUXVhcnRlclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhck1vbnRoXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyV2Vla1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkNhbGVuZGFyTW9udGhcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZDYWxlbmRhclllYXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFySGFsZnllYXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyUXVhcnRlclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJNb250aFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJXZWVrXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyRGF0ZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFBlcmlvZFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyUGVyaW9kXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFF1YXJ0ZXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclF1YXJ0ZXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsV2Vla1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyV2Vla1wiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkZpc2NhbFllYXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclZhcmlhbnRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk11dHVhbGx5RXhjbHVzaXZlVGVybVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdEFjdGl2YXRpb25WaWFcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpbXBsZUlkZW50aWZpZXJcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRWRpdGFibGVGaWVsZEZvclwiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIgPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZWZhdWx0VmFsdWVzRnVuY3Rpb25cIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlF1YWxpZmllZE5hbWVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRGVmYXVsdFZhbHVlXCIgPSBcIkVkbS5QcmltaXRpdmVUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZUhpZ2hcIiA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU29ydE9yZGVyXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Tb3J0T3JkZXJUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQXRcIiA9IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNyZWF0ZWRCeVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVXNlcklEXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNoYW5nZWRBdFwiID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ2hhbmdlZEJ5XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vc2VySURcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbHlNdWx0aVVuaXRCZWhhdmlvckZvclNvcnRpbmdBbmRGaWx0ZXJpbmdcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ3VycmVuY3lDb2Rlc1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Db2RlTGlzdFNvdXJjZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlVuaXRzT2ZNZWFzdXJlXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkNvZGVMaXN0U291cmNlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuU3RhbmRhcmRDb2RlXCIgPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5FeHRlcm5hbENvZGVcIiA9IFwiRWRtLlByb3BlcnR5UGF0aFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLklzQ29uZmlndXJhdGlvbkRlcHJlY2F0aW9uQ29kZVwiID0gXCJFZG0uQm9vbGVhblwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1R5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzRW1haWxBZGRyZXNzXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuSXNQaG9uZU51bWJlclwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkV2ZW50XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuRXZlbnREYXRhXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5UYXNrXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuVGFza0RhdGFcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLk1lc3NhZ2VcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5NZXNzYWdlRGF0YVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuRW50aXR5U2VtYW50aWNzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5FbnRpdHlTZW1hbnRpY3NUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkZpZWxkU2VtYW50aWNzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1R5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVBlcnNvbmFsXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mb1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklkZW50aWZpY2F0aW9uXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQmFkZ2VcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQmFkZ2VUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TdGF0dXNJbmZvXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbm5lY3RlZEZpZWxkc1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25zXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbnRhY3RzXCIgPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk1lZGlhUmVzb3VyY2VcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWVkaWFSZXNvdXJjZVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLktQSVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnREZWZpbml0aW9uVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlZhbHVlQ3JpdGljYWxpdHlcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmFsdWVDcml0aWNhbGl0eVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUxhYmVsc1wiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUxhYmVsVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiID0gXCJFZG0uUHJvcGVydHlQYXRoXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVyRmFjZXRzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUXVpY2tWaWV3RmFjZXRzXCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUXVpY2tDcmVhdGVGYWNldHNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWx0ZXJGYWNldHNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVmZXJlbmNlRmFjZXRcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblZhcmlhbnRcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudFR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UaGluZ1BlcnNwZWN0aXZlXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzU3VtbWFyeVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QYXJ0T2ZQcmV2aWV3XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk1hcFwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HYWxsZXJ5XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzSW1hZ2VVUkxcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NdWx0aUxpbmVUZXh0XCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DcmVhdGVIaWRkZW5cIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVXBkYXRlSGlkZGVuXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRlbGV0ZUhpZGRlblwiID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5XCIgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25cIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FbXBoYXNpemVkXCIgPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9yZGVyQnlcIiA9IFwiRWRtLlByb3BlcnR5UGF0aFwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25TdGF0ZVR5cGVcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvbkxpc3RcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25MaXN0VHlwZVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIiA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHNcIiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHNUeXBlXCJcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZWZlcmVuY2VzOiBSZWZlcmVuY2VzV2l0aE1hcCA9IFtcblx0eyBhbGlhczogXCJDYXBhYmlsaXRpZXNcIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjFcIiwgdXJpOiBcIlwiIH0sXG5cdHsgYWxpYXM6IFwiQWdncmVnYXRpb25cIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMVwiLCB1cmk6IFwiXCIgfSxcblx0eyBhbGlhczogXCJWYWxpZGF0aW9uXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMVwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLkNvcmUuVjFcIiwgYWxpYXM6IFwiQ29yZVwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxXCIsIGFsaWFzOiBcIk1lYXN1cmVzXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjFcIiwgYWxpYXM6IFwiQ29tbW9uXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MVwiLCBhbGlhczogXCJVSVwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MVwiLCBhbGlhczogXCJTZXNzaW9uXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjFcIiwgYWxpYXM6IFwiQW5hbHl0aWNzXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MVwiLCBhbGlhczogXCJDb2RlTGlzdFwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxXCIsIGFsaWFzOiBcIlBlcnNvbmFsRGF0YVwiLCB1cmk6IFwiXCIgfSxcblx0eyBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MVwiLCBhbGlhczogXCJDb21tdW5pY2F0aW9uXCIsIHVyaTogXCJcIiB9LFxuXHR7IG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MVwiLCBhbGlhczogXCJIVE1MNVwiLCB1cmk6IFwiXCIgfVxuXTtcblxudHlwZSBSZWZlcmVuY2VzV2l0aE1hcCA9IFJlZmVyZW5jZVtdICYge1xuXHRyZWZlcmVuY2VNYXA/OiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+O1xuXHRyZXZlcnNlUmVmZXJlbmNlTWFwPzogUmVjb3JkPHN0cmluZywgUmVmZXJlbmNlPjtcbn07XG5cbmZ1bmN0aW9uIGFsaWFzKHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwLCB1bmFsaWFzZWRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKCFyZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXApIHtcblx0XHRyZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+LCByZWZlcmVuY2UpID0+IHtcblx0XHRcdG1hcFtyZWZlcmVuY2UubmFtZXNwYWNlXSA9IHJlZmVyZW5jZTtcblx0XHRcdHJldHVybiBtYXA7XG5cdFx0fSwge30pO1xuXHR9XG5cdGlmICghdW5hbGlhc2VkVmFsdWUpIHtcblx0XHRyZXR1cm4gdW5hbGlhc2VkVmFsdWU7XG5cdH1cblx0Y29uc3QgbGFzdERvdEluZGV4ID0gdW5hbGlhc2VkVmFsdWUubGFzdEluZGV4T2YoXCIuXCIpO1xuXHRjb25zdCBuYW1lc3BhY2UgPSB1bmFsaWFzZWRWYWx1ZS5zdWJzdHIoMCwgbGFzdERvdEluZGV4KTtcblx0Y29uc3QgdmFsdWUgPSB1bmFsaWFzZWRWYWx1ZS5zdWJzdHIobGFzdERvdEluZGV4ICsgMSk7XG5cdGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcFtuYW1lc3BhY2VdO1xuXHRpZiAocmVmZXJlbmNlKSB7XG5cdFx0cmV0dXJuIGAke3JlZmVyZW5jZS5hbGlhc30uJHt2YWx1ZX1gO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFRyeSB0byBzZWUgaWYgaXQncyBhbiBhbm5vdGF0aW9uIFBhdGggbGlrZSB0b19TYWxlc09yZGVyL0BVSS5MaW5lSXRlbVxuXHRcdGlmICh1bmFsaWFzZWRWYWx1ZS5pbmRleE9mKFwiQFwiKSAhPT0gLTEpIHtcblx0XHRcdGNvbnN0IFtwcmVBbGlhcywgLi4ucG9zdEFsaWFzXSA9IHVuYWxpYXNlZFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0XHRcdHJldHVybiBgJHtwcmVBbGlhc31AJHthbGlhcyhyZWZlcmVuY2VzLCBwb3N0QWxpYXMuam9pbihcIkBcIikpfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmFsaWFzZWRWYWx1ZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdW5hbGlhcyhyZWZlcmVuY2VzOiBSZWZlcmVuY2VzV2l0aE1hcCwgYWxpYXNlZFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXJlZmVyZW5jZXMucmVmZXJlbmNlTWFwKSB7XG5cdFx0cmVmZXJlbmNlcy5yZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+LCByZWZlcmVuY2UpID0+IHtcblx0XHRcdG1hcFtyZWZlcmVuY2UuYWxpYXNdID0gcmVmZXJlbmNlO1xuXHRcdFx0cmV0dXJuIG1hcDtcblx0XHR9LCB7fSk7XG5cdH1cblx0aWYgKCFhbGlhc2VkVmFsdWUpIHtcblx0XHRyZXR1cm4gYWxpYXNlZFZhbHVlO1xuXHR9XG5cdGNvbnN0IFthbGlhcywgLi4udmFsdWVdID0gYWxpYXNlZFZhbHVlLnNwbGl0KFwiLlwiKTtcblx0Y29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXBbYWxpYXNdO1xuXHRpZiAocmVmZXJlbmNlKSB7XG5cdFx0cmV0dXJuIGAke3JlZmVyZW5jZS5uYW1lc3BhY2V9LiR7dmFsdWUuam9pbihcIi5cIil9YDtcblx0fSBlbHNlIHtcblx0XHQvLyBUcnkgdG8gc2VlIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiBQYXRoIGxpa2UgdG9fU2FsZXNPcmRlci9AVUkuTGluZUl0ZW1cblx0XHRpZiAoYWxpYXNlZFZhbHVlLmluZGV4T2YoXCJAXCIpICE9PSAtMSkge1xuXHRcdFx0Y29uc3QgW3ByZUFsaWFzLCAuLi5wb3N0QWxpYXNdID0gYWxpYXNlZFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0XHRcdHJldHVybiBgJHtwcmVBbGlhc31AJHt1bmFsaWFzKHJlZmVyZW5jZXMsIHBvc3RBbGlhcy5qb2luKFwiQFwiKSl9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGFsaWFzZWRWYWx1ZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGRPYmplY3RNYXAocGFyc2VyT3V0cHV0OiBQYXJzZXJPdXRwdXQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcblx0Y29uc3Qgb2JqZWN0TWFwOiBhbnkgPSB7fTtcblx0aWYgKHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5Q29udGFpbmVyICYmIHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5Q29udGFpbmVyLmZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuXHRcdG9iamVjdE1hcFtwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eUNvbnRhaW5lci5mdWxseVF1YWxpZmllZE5hbWVdID0gcGFyc2VyT3V0cHV0LnNjaGVtYS5lbnRpdHlDb250YWluZXI7XG5cdH1cblx0cGFyc2VyT3V0cHV0LnNjaGVtYS5lbnRpdHlTZXRzLmZvckVhY2goZW50aXR5U2V0ID0+IHtcblx0XHRvYmplY3RNYXBbZW50aXR5U2V0LmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBlbnRpdHlTZXQ7XG5cdH0pO1xuXHRwYXJzZXJPdXRwdXQuc2NoZW1hLmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuXHRcdG9iamVjdE1hcFthY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lXSA9IGFjdGlvbjtcblx0XHRpZiAoYWN0aW9uLmlzQm91bmQpIHtcblx0XHRcdGNvbnN0IHVuQm91bmRBY3Rpb25OYW1lID0gYWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIihcIilbMF07XG5cdFx0XHRpZiAoIW9iamVjdE1hcFt1bkJvdW5kQWN0aW9uTmFtZV0pIHtcblx0XHRcdFx0b2JqZWN0TWFwW3VuQm91bmRBY3Rpb25OYW1lXSA9IHtcblx0XHRcdFx0XHRfdHlwZTogXCJVbmJvdW5kR2VuZXJpY0FjdGlvblwiLFxuXHRcdFx0XHRcdGFjdGlvbnM6IFtdXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRvYmplY3RNYXBbdW5Cb3VuZEFjdGlvbk5hbWVdLmFjdGlvbnMucHVzaChhY3Rpb24pO1xuXHRcdH1cblxuXHRcdGFjdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2gocGFyYW1ldGVyID0+IHtcblx0XHRcdG9iamVjdE1hcFtwYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHBhcmFtZXRlcjtcblx0XHR9KTtcblx0fSk7XG5cdHBhcnNlck91dHB1dC5zY2hlbWEuY29tcGxleFR5cGVzLmZvckVhY2goY29tcGxleFR5cGUgPT4ge1xuXHRcdG9iamVjdE1hcFtjb21wbGV4VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdID0gY29tcGxleFR5cGU7XG5cdFx0Y29tcGxleFR5cGUucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcblx0XHRcdG9iamVjdE1hcFtwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0gcHJvcGVydHk7XG5cdFx0fSk7XG5cdH0pO1xuXHRwYXJzZXJPdXRwdXQuc2NoZW1hLnR5cGVEZWZpbml0aW9ucy5mb3JFYWNoKHR5cGVEZWZpbml0aW9uID0+IHtcblx0XHRvYmplY3RNYXBbdHlwZURlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lXSA9IHR5cGVEZWZpbml0aW9uO1xuXHR9KTtcblx0cGFyc2VyT3V0cHV0LnNjaGVtYS5lbnRpdHlUeXBlcy5mb3JFYWNoKGVudGl0eVR5cGUgPT4ge1xuXHRcdG9iamVjdE1hcFtlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBlbnRpdHlUeXBlO1xuXHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcblx0XHRcdG9iamVjdE1hcFtwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0gcHJvcGVydHk7XG5cdFx0XHRpZiAocHJvcGVydHkudHlwZS5pbmRleE9mKFwiRWRtXCIpICE9PSAwKSB7XG5cdFx0XHRcdC8vIEhhbmRsZSBjb21wbGV4IHR5cGVzXG5cdFx0XHRcdGNvbnN0IGNvbXBsZXhUeXBlRGVmaW5pdGlvbiA9IG9iamVjdE1hcFtwcm9wZXJ0eS50eXBlXSBhcyBDb21wbGV4VHlwZSB8IFR5cGVEZWZpbml0aW9uO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y29tcGxleFR5cGVEZWZpbml0aW9uICYmXG5cdFx0XHRcdFx0Y29tcGxleFR5cGVEZWZpbml0aW9uLl90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIgJiZcblx0XHRcdFx0XHRjb21wbGV4VHlwZURlZmluaXRpb24ucHJvcGVydGllc1xuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb21wbGV4VHlwZURlZmluaXRpb24ucHJvcGVydGllcy5mb3JFYWNoKGNvbXBsZXhUeXBlUHJvcCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb21wbGV4VHlwZVByb3BUYXJnZXQ6IFBhcnNlclByb3BlcnR5ID0gT2JqZWN0LmFzc2lnbihjb21wbGV4VHlwZVByb3AsIHtcblx0XHRcdFx0XHRcdFx0X3R5cGU6IFwiUHJvcGVydHlcIixcblx0XHRcdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIiArIGNvbXBsZXhUeXBlUHJvcC5uYW1lXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG9iamVjdE1hcFtjb21wbGV4VHlwZVByb3BUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lXSA9IGNvbXBsZXhUeXBlUHJvcFRhcmdldDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaChuYXZQcm9wZXJ0eSA9PiB7XG5cdFx0XHRvYmplY3RNYXBbbmF2UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSA9IG5hdlByb3BlcnR5O1xuXHRcdH0pO1xuXHR9KTtcblxuXHRPYmplY3Qua2V5cyhwYXJzZXJPdXRwdXQuc2NoZW1hLmFubm90YXRpb25zKS5mb3JFYWNoKGFubm90YXRpb25Tb3VyY2UgPT4ge1xuXHRcdHBhcnNlck91dHB1dC5zY2hlbWEuYW5ub3RhdGlvbnNbYW5ub3RhdGlvblNvdXJjZV0uZm9yRWFjaChhbm5vdGF0aW9uTGlzdCA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50VGFyZ2V0TmFtZSA9IHVuYWxpYXMocGFyc2VyT3V0cHV0LnJlZmVyZW5jZXMsIGFubm90YXRpb25MaXN0LnRhcmdldCk7XG5cdFx0XHRhbm5vdGF0aW9uTGlzdC5hbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb24gPT4ge1xuXHRcdFx0XHRsZXQgYW5ub3RhdGlvbkZRTiA9IGAke2N1cnJlbnRUYXJnZXROYW1lfUAke3VuYWxpYXMocGFyc2VyT3V0cHV0LnJlZmVyZW5jZXMsIGFubm90YXRpb24udGVybSl9YDtcblx0XHRcdFx0aWYgKGFubm90YXRpb24ucXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbkZRTiArPSBgIyR7YW5ub3RhdGlvbi5xdWFsaWZpZXJ9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZW9mIGFubm90YXRpb24gIT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRkZWJ1Z2dlcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRvYmplY3RNYXBbYW5ub3RhdGlvbkZRTl0gPSBhbm5vdGF0aW9uO1xuXHRcdFx0XHQoYW5ub3RhdGlvbiBhcyBBbm5vdGF0aW9uKS5mdWxseVF1YWxpZmllZE5hbWUgPSBhbm5vdGF0aW9uRlFOO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gb2JqZWN0TWFwO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lUGF0aChjdXJyZW50VGFyZ2V0OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmIChwYXRoLnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG5cdFx0cmV0dXJuIGN1cnJlbnRUYXJnZXQgKyB1bmFsaWFzKGRlZmF1bHRSZWZlcmVuY2VzLCBwYXRoKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY3VycmVudFRhcmdldCArIFwiL1wiICsgcGF0aDtcblx0fVxufVxuXG5mdW5jdGlvbiBhZGRBbm5vdGF0aW9uRXJyb3JNZXNzYWdlKHBhdGg6IHN0cmluZywgb0Vycm9yTXNnOiBhbnkpIHtcblx0aWYgKCFBTExfQU5OT1RBVElPTl9FUlJPUlNbcGF0aF0pIHtcblx0XHRBTExfQU5OT1RBVElPTl9FUlJPUlNbcGF0aF0gPSBbb0Vycm9yTXNnXTtcblx0fSBlbHNlIHtcblx0XHRBTExfQU5OT1RBVElPTl9FUlJPUlNbcGF0aF0ucHVzaChvRXJyb3JNc2cpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUYXJnZXQoXG5cdG9iamVjdE1hcDogYW55LFxuXHRjdXJyZW50VGFyZ2V0OiBhbnksXG5cdHBhdGg6IHN0cmluZyxcblx0cGF0aE9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcblx0aW5jbHVkZVZpc2l0ZWRPYmplY3RzOiBib29sZWFuID0gZmFsc2UsXG5cdGFubm90YXRpb25UeXBlPzogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc1Rlcm0/OiBzdHJpbmdcbikge1xuXHRpZiAoIXBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdC8vY29uc3QgcHJvcGVydHlQYXRoID0gcGF0aDtcblx0bGV0IGFWaXNpdGVkT2JqZWN0czogYW55W10gPSBbXTtcblx0aWYgKGN1cnJlbnRUYXJnZXQgJiYgY3VycmVudFRhcmdldC5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0Y3VycmVudFRhcmdldCA9IG9iamVjdE1hcFtjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIi9cIilbMF1dO1xuXHR9XG5cdHBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSwgcGF0aCk7XG5cblx0Y29uc3QgcGF0aFNwbGl0ID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdGNvbnN0IHRhcmdldFBhdGhTcGxpdDogc3RyaW5nW10gPSBbXTtcblx0cGF0aFNwbGl0LmZvckVhY2gocGF0aFBhcnQgPT4ge1xuXHRcdC8vIFNlcGFyYXRlIG91dCB0aGUgYW5ub3RhdGlvblxuXHRcdGlmIChwYXRoUGFydC5pbmRleE9mKFwiQFwiKSAhPT0gLTEpIHtcblx0XHRcdGNvbnN0IFtwYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSBwYXRoUGFydC5zcGxpdChcIkBcIik7XG5cdFx0XHR0YXJnZXRQYXRoU3BsaXQucHVzaChwYXRoKTtcblx0XHRcdHRhcmdldFBhdGhTcGxpdC5wdXNoKGBAJHthbm5vdGF0aW9uUGF0aH1gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0UGF0aFNwbGl0LnB1c2gocGF0aFBhcnQpO1xuXHRcdH1cblx0fSk7XG5cdGxldCBjdXJyZW50UGF0aCA9IHBhdGg7XG5cdGxldCBjdXJyZW50Q29udGV4dCA9IGN1cnJlbnRUYXJnZXQ7XG5cdGNvbnN0IHRhcmdldCA9IHRhcmdldFBhdGhTcGxpdC5yZWR1Y2UoKGN1cnJlbnRWYWx1ZTogYW55LCBwYXRoUGFydCkgPT4ge1xuXHRcdGlmIChwYXRoUGFydCA9PT0gXCIkVHlwZVwiICYmIGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gXCJFbnRpdHlUeXBlXCIpIHtcblx0XHRcdHJldHVybiBjdXJyZW50VmFsdWU7XG5cdFx0fVxuXHRcdGlmIChwYXRoUGFydC5sZW5ndGggPT09IDApIHtcblx0XHRcdC8vIEVtcHR5IFBhdGggYWZ0ZXIgYW4gZW50aXR5U2V0IG1lYW5zIGVudGl0eVR5cGVcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLl90eXBlID09PSBcIkVudGl0eVNldFwiICYmIGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlKSB7XG5cdFx0XHRcdGlmIChpbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdFx0XHRhVmlzaXRlZE9iamVjdHMucHVzaChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgY3VycmVudFZhbHVlLnRhcmdldFR5cGUpIHtcblx0XHRcdFx0aWYgKGluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuXHRcdFx0XHRcdGFWaXNpdGVkT2JqZWN0cy5wdXNoKGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlLnRhcmdldFR5cGU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdH1cblx0XHRpZiAoaW5jbHVkZVZpc2l0ZWRPYmplY3RzICYmIGN1cnJlbnRWYWx1ZSAhPT0gbnVsbCAmJiBjdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YVZpc2l0ZWRPYmplY3RzLnB1c2goY3VycmVudFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKCFjdXJyZW50VmFsdWUpIHtcblx0XHRcdGN1cnJlbnRQYXRoID0gcGF0aFBhcnQ7XG5cdFx0fSBlbHNlIGlmIChjdXJyZW50VmFsdWUuX3R5cGUgPT09IFwiRW50aXR5U2V0XCIgJiYgcGF0aFBhcnQgPT09IFwiJFR5cGVcIikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlLnRhcmdldFR5cGU7XG5cdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSBcIkVudGl0eVNldFwiICYmIGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlKSB7XG5cdFx0XHRjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlTmFtZSwgcGF0aFBhcnQpO1xuXHRcdH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmIGN1cnJlbnRWYWx1ZS50YXJnZXRUeXBlTmFtZSkge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUudGFyZ2V0VHlwZU5hbWUsIHBhdGhQYXJ0KTtcblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBjdXJyZW50VmFsdWUudGFyZ2V0VHlwZSkge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUudGFyZ2V0VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0KTtcblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0XHQvLyBDb21wbGV4VHlwZSBvciBQcm9wZXJ0eVxuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZS50YXJnZXRUeXBlKSB7XG5cdFx0XHRcdGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoY3VycmVudFZhbHVlLnRhcmdldFR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gXCJBY3Rpb25cIiAmJiBjdXJyZW50VmFsdWUuaXNCb3VuZCkge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG5cdFx0XHRpZiAoIW9iamVjdE1hcFtjdXJyZW50UGF0aF0pIHtcblx0XHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuc291cmNlVHlwZSwgcGF0aFBhcnQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSBcIkFjdGlvblBhcmFtZXRlclwiICYmIGN1cnJlbnRWYWx1ZS5pc0VudGl0eVNldCkge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUudHlwZSwgcGF0aFBhcnQpO1xuXHRcdH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSBcIkFjdGlvblBhcmFtZXRlclwiICYmICFjdXJyZW50VmFsdWUuaXNFbnRpdHlTZXQpIHtcblx0XHRcdGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoXG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLnN1YnN0cigwLCBjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5sYXN0SW5kZXhPZihcIi9cIikpLFxuXHRcdFx0XHRwYXRoUGFydFxuXHRcdFx0KTtcblx0XHRcdGlmICghb2JqZWN0TWFwW2N1cnJlbnRQYXRoXSkge1xuXHRcdFx0XHRsZXQgbGFzdElkeCA9IGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLmxhc3RJbmRleE9mKFwiL1wiKTtcblx0XHRcdFx0aWYgKGxhc3RJZHggPT09IC0xKSB7XG5cdFx0XHRcdFx0bGFzdElkeCA9IGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLmxlbmd0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKFxuXHRcdFx0XHRcdChvYmplY3RNYXBbY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUuc3Vic3RyKDAsIGxhc3RJZHgpXSBhcyBBY3Rpb24pLnNvdXJjZVR5cGUsXG5cdFx0XHRcdFx0cGF0aFBhcnRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG5cdFx0XHRpZiAocGF0aFBhcnQgIT09IFwibmFtZVwiICYmIGN1cnJlbnRWYWx1ZVtwYXRoUGFydF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlW3BhdGhQYXJ0XTtcblx0XHRcdH0gZWxzZSBpZiAocGF0aFBhcnQgPT09IFwiJEFubm90YXRpb25QYXRoXCIgJiYgY3VycmVudFZhbHVlLiR0YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudENvbnRleHQgPSBvYmplY3RNYXBbY3VycmVudFZhbHVlLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMF1dO1xuXHRcdFx0XHRjb25zdCBzdWJUYXJnZXQ6IGFueSA9IHJlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjdXJyZW50Q29udGV4dCwgY3VycmVudFZhbHVlLnZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdHN1YlRhcmdldC52aXNpdGVkT2JqZWN0cy5mb3JFYWNoKCh2aXNpdGVkU3ViT2JqZWN0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAoYVZpc2l0ZWRPYmplY3RzLmluZGV4T2YodmlzaXRlZFN1Yk9iamVjdCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRhVmlzaXRlZE9iamVjdHMucHVzaCh2aXNpdGVkU3ViT2JqZWN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gc3ViVGFyZ2V0LnRhcmdldDtcblx0XHRcdH0gZWxzZSBpZiAocGF0aFBhcnQgPT09IFwiJFBhdGhcIiAmJiBjdXJyZW50VmFsdWUuJHRhcmdldCkge1xuXHRcdFx0XHRjdXJyZW50Q29udGV4dCA9IGFWaXNpdGVkT2JqZWN0c1xuXHRcdFx0XHRcdC5jb25jYXQoKVxuXHRcdFx0XHRcdC5yZXZlcnNlKClcblx0XHRcdFx0XHQuZmluZChcblx0XHRcdFx0XHRcdG9iaiA9PlxuXHRcdFx0XHRcdFx0XHRvYmouX3R5cGUgPT09IFwiRW50aXR5VHlwZVwiIHx8XG5cdFx0XHRcdFx0XHRcdG9iai5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIiB8fFxuXHRcdFx0XHRcdFx0XHRvYmouX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJUYXJnZXQ6IGFueSA9IHJlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjdXJyZW50Q29udGV4dCwgY3VycmVudFZhbHVlLnBhdGgsIGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRzdWJUYXJnZXQudmlzaXRlZE9iamVjdHMuZm9yRWFjaCgodmlzaXRlZFN1Yk9iamVjdDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoYVZpc2l0ZWRPYmplY3RzLmluZGV4T2YodmlzaXRlZFN1Yk9iamVjdCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGFWaXNpdGVkT2JqZWN0cy5wdXNoKHZpc2l0ZWRTdWJPYmplY3QpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBzdWJUYXJnZXQudGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjdXJyZW50VmFsdWUuJHRhcmdldDtcblx0XHRcdH0gZWxzZSBpZiAocGF0aFBhcnQuc3RhcnRzV2l0aChcIiRQYXRoXCIpICYmIGN1cnJlbnRWYWx1ZS4kdGFyZ2V0KSB7XG5cdFx0XHRcdGNvbnN0IGludGVybWVkaWF0ZVRhcmdldCA9IGN1cnJlbnRWYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGludGVybWVkaWF0ZVRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0LnN1YnN0cig1KSk7XG5cdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpICYmICFvYmplY3RNYXBbY3VycmVudFBhdGhdKSB7XG5cdFx0XHRcdC8vIFRoaXMgaXMgbm93IGFuIGFubm90YXRpb24gdmFsdWVcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IG9iamVjdE1hcFtjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiQFwiKVswXV07XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0Y3VycmVudFBhdGggPSBjb21iaW5lUGF0aChlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgcGF0aFBhcnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvYmplY3RNYXBbY3VycmVudFBhdGhdO1xuXHR9LCBudWxsKTtcblx0aWYgKCF0YXJnZXQpIHtcblx0XHRpZiAoYW5ub3RhdGlvbnNUZXJtICYmIGFubm90YXRpb25UeXBlKSB7XG5cdFx0XHR2YXIgb0Vycm9yTXNnID0ge1xuXHRcdFx0XHRtZXNzYWdlOlxuXHRcdFx0XHRcdFwiVW5hYmxlIHRvIHJlc29sdmUgdGhlIHBhdGggZXhwcmVzc2lvbjogXCIgK1xuXHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdHBhdGggK1xuXHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFwiSGludDogQ2hlY2sgYW5kIGNvcnJlY3QgdGhlIHBhdGggdmFsdWVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBtZXRhZGF0YSAoYW5ub3RhdGlvbi54bWwgZmlsZSBvciBDRFMgYW5ub3RhdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbik6IFxcblxcblwiICtcblx0XHRcdFx0XHRcIjxBbm5vdGF0aW9uIFRlcm0gPSBcIiArXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtICtcblx0XHRcdFx0XHRcIj5cIiArXG5cdFx0XHRcdFx0XCJcXG5cIiArXG5cdFx0XHRcdFx0XCI8UmVjb3JkIFR5cGUgPSBcIiArXG5cdFx0XHRcdFx0YW5ub3RhdGlvblR5cGUgK1xuXHRcdFx0XHRcdFwiPlwiICtcblx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcIjxBbm5vdGF0aW9uUGF0aCA9IFwiICtcblx0XHRcdFx0XHRwYXRoICtcblx0XHRcdFx0XHRcIj5cIlxuXHRcdFx0fTtcblx0XHRcdGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UocGF0aCwgb0Vycm9yTXNnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIG9FcnJvck1zZyA9IHtcblx0XHRcdFx0bWVzc2FnZTpcblx0XHRcdFx0XHRcIlVuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246IFwiICtcblx0XHRcdFx0XHRwYXRoICtcblx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcIkhpbnQ6IENoZWNrIGFuZCBjb3JyZWN0IHRoZSBwYXRoIHZhbHVlcyB1bmRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgbWV0YWRhdGEgKGFubm90YXRpb24ueG1sIGZpbGUgb3IgQ0RTIGFubm90YXRpb25zIGZvciB0aGUgYXBwbGljYXRpb24pOiBcXG5cXG5cIiArXG5cdFx0XHRcdFx0XCI8QW5ub3RhdGlvbiBUZXJtID0gXCIgK1xuXHRcdFx0XHRcdHBhdGhTcGxpdFswXSArXG5cdFx0XHRcdFx0XCI+XCIgK1xuXHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFwiPFByb3BlcnR5VmFsdWUgIFBhdGg9IFwiICtcblx0XHRcdFx0XHRwYXRoU3BsaXRbMV0gK1xuXHRcdFx0XHRcdFwiPlwiXG5cdFx0XHR9O1xuXHRcdFx0YWRkQW5ub3RhdGlvbkVycm9yTWVzc2FnZShwYXRoLCBvRXJyb3JNc2cpO1xuXHRcdH1cblx0XHQvLyBjb25zb2xlLmxvZyhcIk1pc3NpbmcgdGFyZ2V0IFwiICsgcGF0aCk7XG5cdH1cblx0aWYgKHBhdGhPbmx5KSB7XG5cdFx0cmV0dXJuIGN1cnJlbnRQYXRoO1xuXHR9XG5cdGlmIChpbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dmlzaXRlZE9iamVjdHM6IGFWaXNpdGVkT2JqZWN0cyxcblx0XHRcdHRhcmdldDogdGFyZ2V0XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBpc0Fubm90YXRpb25QYXRoKHBhdGhTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcGF0aFN0ci5pbmRleE9mKFwiQFwiKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWUoXG5cdHByb3BlcnR5VmFsdWU6IEV4cHJlc3Npb24sXG5cdHZhbHVlRlFOOiBzdHJpbmcsXG5cdHBhcnNlck91dHB1dDogUGFyc2VyT3V0cHV0LFxuXHRjdXJyZW50VGFyZ2V0OiBhbnksXG5cdG9iamVjdE1hcDogYW55LFxuXHR0b1Jlc29sdmU6IFJlc29sdmVhYmxlW10sXG5cdGFubm90YXRpb25Tb3VyY2U6IHN0cmluZyxcblx0dW5yZXNvbHZlZEFubm90YXRpb25zOiBBbm5vdGF0aW9uTGlzdFtdLFxuXHRhbm5vdGF0aW9uVHlwZTogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc1Rlcm06IHN0cmluZ1xuKSB7XG5cdGlmIChwcm9wZXJ0eVZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAocHJvcGVydHlWYWx1ZS50eXBlKSB7XG5cdFx0Y2FzZSBcIlN0cmluZ1wiOlxuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWUuU3RyaW5nO1xuXHRcdGNhc2UgXCJJbnRcIjpcblx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlLkludDtcblx0XHRjYXNlIFwiQm9vbFwiOlxuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWUuQm9vbDtcblx0XHRjYXNlIFwiRGVjaW1hbFwiOlxuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWUuRGVjaW1hbDtcblx0XHRjYXNlIFwiRGF0ZVwiOlxuXHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWUuRGF0ZTtcblx0XHRjYXNlIFwiRW51bU1lbWJlclwiOlxuXHRcdFx0cmV0dXJuIGFsaWFzKHBhcnNlck91dHB1dC5yZWZlcmVuY2VzLCBwcm9wZXJ0eVZhbHVlLkVudW1NZW1iZXIpO1xuXHRcdGNhc2UgXCJQcm9wZXJ0eVBhdGhcIjpcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCxcblx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiB2YWx1ZUZRTixcblx0XHRcdFx0JHRhcmdldDogcmVzb2x2ZVRhcmdldChcblx0XHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uc1Rlcm1cblx0XHRcdFx0KVxuXHRcdFx0fTtcblx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiOlxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdmFsdWVGUU4sXG5cdFx0XHRcdCR0YXJnZXQ6IHJlc29sdmVUYXJnZXQoXG5cdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGFubm90YXRpb25UeXBlLFxuXHRcdFx0XHRcdGFubm90YXRpb25zVGVybVxuXHRcdFx0XHQpXG5cdFx0XHR9O1xuXHRcdGNhc2UgXCJBbm5vdGF0aW9uUGF0aFwiOlxuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblRhcmdldCA9IHJlc29sdmVUYXJnZXQoXG5cdFx0XHRcdG9iamVjdE1hcCxcblx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0dW5hbGlhcyhwYXJzZXJPdXRwdXQucmVmZXJlbmNlcywgcHJvcGVydHlWYWx1ZS5Bbm5vdGF0aW9uUGF0aCkgYXMgc3RyaW5nLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdGFubm90YXRpb25zVGVybVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0ge1xuXHRcdFx0XHR0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLkFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IHZhbHVlRlFOLFxuXHRcdFx0XHQkdGFyZ2V0OiBhbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRhbm5vdGF0aW9uVHlwZTogYW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdGFubm90YXRpb25zVGVybTogYW5ub3RhdGlvbnNUZXJtLFxuXHRcdFx0XHR0ZXJtOiBcIlwiLFxuXHRcdFx0XHRwYXRoOiBcIlwiXG5cdFx0XHR9O1xuXHRcdFx0dG9SZXNvbHZlLnB1c2goeyBpbmxpbmU6IGZhbHNlLCB0b1Jlc29sdmU6IGFubm90YXRpb25QYXRoIH0pO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25QYXRoO1xuXHRcdGNhc2UgXCJQYXRoXCI6XG5cdFx0XHRjb25zdCAkdGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChcblx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlLlBhdGgsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcGF0aCA9IG5ldyBQYXRoKHByb3BlcnR5VmFsdWUsICR0YXJnZXQsIGFubm90YXRpb25zVGVybSwgYW5ub3RhdGlvblR5cGUsIFwiXCIpO1xuXHRcdFx0dG9SZXNvbHZlLnB1c2goe1xuXHRcdFx0XHRpbmxpbmU6IGlzQW5ub3RhdGlvblBhdGgocHJvcGVydHlWYWx1ZS5QYXRoKSxcblx0XHRcdFx0dG9SZXNvbHZlOiBwYXRoXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBwYXRoO1xuXG5cdFx0Y2FzZSBcIlJlY29yZFwiOlxuXHRcdFx0cmV0dXJuIHBhcnNlUmVjb3JkKFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlLlJlY29yZCxcblx0XHRcdFx0dmFsdWVGUU4sXG5cdFx0XHRcdHBhcnNlck91dHB1dCxcblx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHR0b1Jlc29sdmUsXG5cdFx0XHRcdGFubm90YXRpb25Tb3VyY2UsXG5cdFx0XHRcdHVucmVzb2x2ZWRBbm5vdGF0aW9ucyxcblx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdGFubm90YXRpb25zVGVybVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiQ29sbGVjdGlvblwiOlxuXHRcdFx0cmV0dXJuIHBhcnNlQ29sbGVjdGlvbihcblx0XHRcdFx0cHJvcGVydHlWYWx1ZS5Db2xsZWN0aW9uLFxuXHRcdFx0XHR2YWx1ZUZRTixcblx0XHRcdFx0cGFyc2VyT3V0cHV0LFxuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdHRvUmVzb2x2ZSxcblx0XHRcdFx0YW5ub3RhdGlvblNvdXJjZSxcblx0XHRcdFx0dW5yZXNvbHZlZEFubm90YXRpb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJBcHBseVwiOlxuXHRcdGNhc2UgXCJOdWxsXCI6XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdGNhc2UgXCJFcVwiOlxuXHRcdGNhc2UgXCJOZVwiOlxuXHRcdGNhc2UgXCJHdFwiOlxuXHRcdGNhc2UgXCJHZVwiOlxuXHRcdGNhc2UgXCJMdFwiOlxuXHRcdGNhc2UgXCJMZVwiOlxuXHRcdGNhc2UgXCJJZlwiOlxuXHRcdGNhc2UgXCJBbmRcIjpcblx0XHRjYXNlIFwiT3JcIjpcblx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGluZmVyVHlwZUZyb21UZXJtKGFubm90YXRpb25zVGVybTogc3RyaW5nLCBwYXJzZXJPdXRwdXQ6IFBhcnNlck91dHB1dCwgYW5ub3RhdGlvblRhcmdldDogc3RyaW5nKSB7XG5cdGNvbnN0IHRhcmdldFR5cGUgPSAoVGVybVRvVHlwZXMgYXMgYW55KVthbm5vdGF0aW9uc1Rlcm1dO1xuXHR2YXIgb0Vycm9yTXNnID0ge1xuXHRcdGlzRXJyb3I6IGZhbHNlLFxuXHRcdG1lc3NhZ2U6IGBUaGUgdHlwZSBvZiB0aGUgcmVjb3JkIHVzZWQgd2l0aGluIHRoZSB0ZXJtICR7YW5ub3RhdGlvbnNUZXJtfSB3YXMgbm90IGRlZmluZWQgYW5kIHdhcyBpbmZlcnJlZCBhcyAke3RhcmdldFR5cGV9LlxuSGludDogSWYgcG9zc2libGUsIHRyeSB0byBtYWludGFpbiB0aGUgVHlwZSBwcm9wZXJ0eSBmb3IgZWFjaCBSZWNvcmQuXG48QW5ub3RhdGlvbnMgVGFyZ2V0PVwiJHthbm5vdGF0aW9uVGFyZ2V0fVwiPlxuXHQ8QW5ub3RhdGlvbiBUZXJtPVwiJHthbm5vdGF0aW9uc1Rlcm19XCI+XG5cdFx0PFJlY29yZD4uLi48L1JlY29yZD5cblx0PC9Bbm5vdGF0aW9uPlxuPC9Bbm5vdGF0aW9ucz5gXG5cdH07XG5cdGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UoYW5ub3RhdGlvblRhcmdldCArIFwiL1wiICsgYW5ub3RhdGlvbnNUZXJtLCBvRXJyb3JNc2cpO1xuXHRyZXR1cm4gdGFyZ2V0VHlwZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWNvcmQoXG5cdHJlY29yZERlZmluaXRpb246IEFubm90YXRpb25SZWNvcmQsXG5cdGN1cnJlbnRGUU46IHN0cmluZyxcblx0cGFyc2VyT3V0cHV0OiBQYXJzZXJPdXRwdXQsXG5cdGN1cnJlbnRUYXJnZXQ6IGFueSxcblx0b2JqZWN0TWFwOiBhbnksXG5cdHRvUmVzb2x2ZTogUmVzb2x2ZWFibGVbXSxcblx0YW5ub3RhdGlvblNvdXJjZTogc3RyaW5nLFxuXHR1bnJlc29sdmVkQW5ub3RhdGlvbnM6IEFubm90YXRpb25MaXN0W10sXG5cdGFubm90YXRpb25UeXBlOiBzdHJpbmcsXG5cdGFubm90YXRpb25zVGVybTogc3RyaW5nXG4pIHtcblx0bGV0IHRhcmdldFR5cGU7XG5cdGlmICghcmVjb3JkRGVmaW5pdGlvbi50eXBlICYmIGFubm90YXRpb25zVGVybSkge1xuXHRcdHRhcmdldFR5cGUgPSBpbmZlclR5cGVGcm9tVGVybShhbm5vdGF0aW9uc1Rlcm0sIHBhcnNlck91dHB1dCwgY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHR9IGVsc2Uge1xuXHRcdHRhcmdldFR5cGUgPSB1bmFsaWFzKHBhcnNlck91dHB1dC5yZWZlcmVuY2VzLCByZWNvcmREZWZpbml0aW9uLnR5cGUpO1xuXHR9XG5cdGNvbnN0IGFubm90YXRpb25UZXJtOiBhbnkgPSB7XG5cdFx0JFR5cGU6IHRhcmdldFR5cGUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBjdXJyZW50RlFOXG5cdH07XG5cdGNvbnN0IGFubm90YXRpb25Db250ZW50OiBhbnkgPSB7fTtcblx0aWYgKHJlY29yZERlZmluaXRpb24uYW5ub3RhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShyZWNvcmREZWZpbml0aW9uLmFubm90YXRpb25zKSkge1xuXHRcdGNvbnN0IHN1YkFubm90YXRpb25MaXN0ID0ge1xuXHRcdFx0dGFyZ2V0OiBjdXJyZW50RlFOLFxuXHRcdFx0YW5ub3RhdGlvbnM6IHJlY29yZERlZmluaXRpb24uYW5ub3RhdGlvbnMsXG5cdFx0XHRfX3NvdXJjZTogYW5ub3RhdGlvblNvdXJjZVxuXHRcdH07XG5cdFx0dW5yZXNvbHZlZEFubm90YXRpb25zLnB1c2goc3ViQW5ub3RhdGlvbkxpc3QpO1xuXHR9XG5cdGlmIChyZWNvcmREZWZpbml0aW9uLnByb3BlcnR5VmFsdWVzKSB7XG5cdFx0cmVjb3JkRGVmaW5pdGlvbi5wcm9wZXJ0eVZhbHVlcy5mb3JFYWNoKChwcm9wZXJ0eVZhbHVlOiBQcm9wZXJ0eVZhbHVlKSA9PiB7XG5cdFx0XHRhbm5vdGF0aW9uQ29udGVudFtwcm9wZXJ0eVZhbHVlLm5hbWVdID0gcGFyc2VWYWx1ZShcblx0XHRcdFx0cHJvcGVydHlWYWx1ZS52YWx1ZSxcblx0XHRcdFx0YCR7Y3VycmVudEZRTn0vJHtwcm9wZXJ0eVZhbHVlLm5hbWV9YCxcblx0XHRcdFx0cGFyc2VyT3V0cHV0LFxuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdHRvUmVzb2x2ZSxcblx0XHRcdFx0YW5ub3RhdGlvblNvdXJjZSxcblx0XHRcdFx0dW5yZXNvbHZlZEFubm90YXRpb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtXG5cdFx0XHQpO1xuXHRcdFx0aWYgKHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zKSkge1xuXHRcdFx0XHRjb25zdCBzdWJBbm5vdGF0aW9uTGlzdCA9IHtcblx0XHRcdFx0XHR0YXJnZXQ6IGAke2N1cnJlbnRGUU59LyR7cHJvcGVydHlWYWx1ZS5uYW1lfWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnM6IHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0X19zb3VyY2U6IGFubm90YXRpb25Tb3VyY2Vcblx0XHRcdFx0fTtcblx0XHRcdFx0dW5yZXNvbHZlZEFubm90YXRpb25zLnB1c2goc3ViQW5ub3RhdGlvbkxpc3QpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRhbm5vdGF0aW9uQ29udGVudC5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKSAmJlxuXHRcdFx0XHQoYW5ub3RhdGlvblRlcm0uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCIgfHxcblx0XHRcdFx0XHRhbm5vdGF0aW9uVGVybS4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uVGFyZ2V0ID1cblx0XHRcdFx0XHQoY3VycmVudFRhcmdldC5hY3Rpb25zICYmIGN1cnJlbnRUYXJnZXQuYWN0aW9uc1thbm5vdGF0aW9uQ29udGVudC5BY3Rpb25dKSB8fFxuXHRcdFx0XHRcdG9iamVjdE1hcFthbm5vdGF0aW9uQ29udGVudC5BY3Rpb25dO1xuXHRcdFx0XHRpZiAoIWFubm90YXRpb25Db250ZW50LkFjdGlvblRhcmdldCkge1xuXHRcdFx0XHRcdC8vIEFkZCB0byBkaWFnbm9zdGljcyBkZWJ1Z2dlcjtcblx0XHRcdFx0XHRBTk5PVEFUSU9OX0VSUk9SUy5wdXNoKHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6XG5cdFx0XHRcdFx0XHRcdFwiVW5hYmxlIHRvIHJlc29sdmUgdGhlIGFjdGlvbiBcIiArXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25Db250ZW50LkFjdGlvbiArXG5cdFx0XHRcdFx0XHRcdFwiIGRlZmluZWQgZm9yIFwiICtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblRlcm0uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihhbm5vdGF0aW9uVGVybSwgYW5ub3RhdGlvbkNvbnRlbnQpO1xufVxuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uVHlwZSA9XG5cdHwgXCJQcm9wZXJ0eVBhdGhcIlxuXHR8IFwiUGF0aFwiXG5cdHwgXCJJZlwiXG5cdHwgXCJBcHBseVwiXG5cdHwgXCJOdWxsXCJcblx0fCBcIkFuZFwiXG5cdHwgXCJFcVwiXG5cdHwgXCJOZVwiXG5cdHwgXCJOb3RcIlxuXHR8IFwiR3RcIlxuXHR8IFwiR2VcIlxuXHR8IFwiTHRcIlxuXHR8IFwiTGVcIlxuXHR8IFwiT3JcIlxuXHR8IFwiQW5ub3RhdGlvblBhdGhcIlxuXHR8IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiXG5cdHwgXCJSZWNvcmRcIlxuXHR8IFwiU3RyaW5nXCJcblx0fCBcIkVtcHR5Q29sbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBnZXRPckluZmVyQ29sbGVjdGlvblR5cGUoY29sbGVjdGlvbkRlZmluaXRpb246IGFueVtdKTogQ29sbGVjdGlvblR5cGUge1xuXHRsZXQgdHlwZTogQ29sbGVjdGlvblR5cGUgPSAoY29sbGVjdGlvbkRlZmluaXRpb24gYXMgYW55KS50eXBlO1xuXHRpZiAodHlwZSA9PT0gdW5kZWZpbmVkICYmIGNvbGxlY3Rpb25EZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBmaXJzdENvbEl0ZW0gPSBjb2xsZWN0aW9uRGVmaW5pdGlvblswXTtcblx0XHRpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KFwiUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHR0eXBlID0gXCJQcm9wZXJ0eVBhdGhcIjtcblx0XHR9IGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eShcIlBhdGhcIikpIHtcblx0XHRcdHR5cGUgPSBcIlBhdGhcIjtcblx0XHR9IGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eShcIkFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHR0eXBlID0gXCJBbm5vdGF0aW9uUGF0aFwiO1xuXHRcdH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0dHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHR0eXBlb2YgZmlyc3RDb2xJdGVtID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHQoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KFwidHlwZVwiKSB8fCBmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoXCJwcm9wZXJ0eVZhbHVlc1wiKSlcblx0XHQpIHtcblx0XHRcdHR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0Q29sSXRlbSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHR5cGUgPSBcIkVtcHR5Q29sbGVjdGlvblwiO1xuXHR9XG5cdHJldHVybiB0eXBlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbGxlY3Rpb24oXG5cdGNvbGxlY3Rpb25EZWZpbml0aW9uOiBhbnlbXSxcblx0cGFyZW50RlFOOiBzdHJpbmcsXG5cdHBhcnNlck91dHB1dDogUGFyc2VyT3V0cHV0LFxuXHRjdXJyZW50VGFyZ2V0OiBhbnksXG5cdG9iamVjdE1hcDogYW55LFxuXHR0b1Jlc29sdmU6IFJlc29sdmVhYmxlW10sXG5cdGFubm90YXRpb25Tb3VyY2U6IHN0cmluZyxcblx0dW5yZXNvbHZlZEFubm90YXRpb25zOiBBbm5vdGF0aW9uTGlzdFtdLFxuXHRhbm5vdGF0aW9uVHlwZTogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc1Rlcm06IHN0cmluZ1xuKSB7XG5cdGNvbnN0IGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSA9IGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbik7XG5cdHN3aXRjaCAoY29sbGVjdGlvbkRlZmluaXRpb25UeXBlKSB7XG5cdFx0Y2FzZSBcIlByb3BlcnR5UGF0aFwiOlxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocHJvcGVydHlQYXRoLCBwcm9wZXJ0eUlkeCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdFx0dmFsdWU6IHByb3BlcnR5UGF0aC5Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7cHJvcGVydHlJZHh9YCxcblx0XHRcdFx0XHQkdGFyZ2V0OiByZXNvbHZlVGFyZ2V0KFxuXHRcdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aC5Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uc1Rlcm1cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRjYXNlIFwiUGF0aFwiOlxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcChwYXRoVmFsdWUgPT4ge1xuXHRcdFx0XHRjb25zdCAkdGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChcblx0XHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0XHRwYXRoVmFsdWUuUGF0aCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGFubm90YXRpb25UeXBlLFxuXHRcdFx0XHRcdGFubm90YXRpb25zVGVybVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBwYXRoID0gbmV3IFBhdGgocGF0aFZhbHVlLCAkdGFyZ2V0LCBhbm5vdGF0aW9uc1Rlcm0sIGFubm90YXRpb25UeXBlLCBcIlwiKTtcblx0XHRcdFx0dG9SZXNvbHZlLnB1c2goe1xuXHRcdFx0XHRcdGlubGluZTogaXNBbm5vdGF0aW9uUGF0aChwYXRoVmFsdWUuUGF0aCksXG5cdFx0XHRcdFx0dG9SZXNvbHZlOiBwYXRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gcGF0aDtcblx0XHRcdH0pO1xuXHRcdGNhc2UgXCJBbm5vdGF0aW9uUGF0aFwiOlxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoYW5ub3RhdGlvblBhdGgsIGFubm90YXRpb25JZHgpID0+IHtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblRhcmdldCA9IHJlc29sdmVUYXJnZXQoXG5cdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGguQW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uc1Rlcm1cblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbGxlY3Rpb25FbGVtZW50ID0ge1xuXHRcdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0XHR2YWx1ZTogYW5ub3RhdGlvblBhdGguQW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7YW5ub3RhdGlvbklkeH1gLFxuXHRcdFx0XHRcdCR0YXJnZXQ6IGFubm90YXRpb25UYXJnZXQsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblR5cGU6IGFubm90YXRpb25UeXBlLFxuXHRcdFx0XHRcdGFubm90YXRpb25zVGVybTogYW5ub3RhdGlvbnNUZXJtLFxuXHRcdFx0XHRcdHRlcm06IFwiXCIsXG5cdFx0XHRcdFx0cGF0aDogXCJcIlxuXHRcdFx0XHR9O1xuXHRcdFx0XHR0b1Jlc29sdmUucHVzaCh7XG5cdFx0XHRcdFx0aW5saW5lOiBmYWxzZSxcblx0XHRcdFx0XHR0b1Jlc29sdmU6IGFubm90YXRpb25Db2xsZWN0aW9uRWxlbWVudFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2xsZWN0aW9uRWxlbWVudDtcblx0XHRcdH0pO1xuXHRcdGNhc2UgXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI6XG5cdFx0XHRyZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChuYXZQcm9wZXJ0eVBhdGgsIG5hdlByb3BJZHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIixcblx0XHRcdFx0XHR2YWx1ZTogbmF2UHJvcGVydHlQYXRoLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7bmF2UHJvcElkeH1gLFxuXHRcdFx0XHRcdCR0YXJnZXQ6IHJlc29sdmVUYXJnZXQoXG5cdFx0XHRcdFx0XHRvYmplY3RNYXAsXG5cdFx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRcdFx0bmF2UHJvcGVydHlQYXRoLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uc1Rlcm1cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRjYXNlIFwiUmVjb3JkXCI6XG5cdFx0XHRyZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChyZWNvcmREZWZpbml0aW9uLCByZWNvcmRJZHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlUmVjb3JkKFxuXHRcdFx0XHRcdHJlY29yZERlZmluaXRpb24sXG5cdFx0XHRcdFx0YCR7cGFyZW50RlFOfS8ke3JlY29yZElkeH1gLFxuXHRcdFx0XHRcdHBhcnNlck91dHB1dCxcblx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LFxuXHRcdFx0XHRcdG9iamVjdE1hcCxcblx0XHRcdFx0XHR0b1Jlc29sdmUsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblNvdXJjZSxcblx0XHRcdFx0XHR1bnJlc29sdmVkQW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHRjYXNlIFwiQXBwbHlcIjpcblx0XHRjYXNlIFwiTnVsbFwiOlxuXHRcdGNhc2UgXCJJZlwiOlxuXHRcdGNhc2UgXCJFcVwiOlxuXHRcdGNhc2UgXCJOZVwiOlxuXHRcdGNhc2UgXCJMdFwiOlxuXHRcdGNhc2UgXCJHdFwiOlxuXHRcdGNhc2UgXCJMZVwiOlxuXHRcdGNhc2UgXCJHZVwiOlxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRjYXNlIFwiQW5kXCI6XG5cdFx0Y2FzZSBcIk9yXCI6XG5cdFx0XHRyZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKGlmVmFsdWUgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaWZWYWx1ZTtcblx0XHRcdH0pO1xuXHRcdGNhc2UgXCJTdHJpbmdcIjpcblx0XHRcdHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoc3RyaW5nVmFsdWUgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHN0cmluZ1ZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0cmluZ1ZhbHVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHN0cmluZ1ZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RyaW5nVmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0cmluZ1ZhbHVlLlN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmIChjb2xsZWN0aW9uRGVmaW5pdGlvbi5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgY2FzZVwiKTtcblx0fVxufVxuXG50eXBlIFJlc29sdmVhYmxlID0ge1xuXHRpbmxpbmU6IGJvb2xlYW47XG5cdHRvUmVzb2x2ZToge1xuXHRcdCR0YXJnZXQ6IHN0cmluZztcblx0XHR0YXJnZXRTdHJpbmc/OiBzdHJpbmc7XG5cdFx0YW5ub3RhdGlvbnNUZXJtOiBzdHJpbmc7XG5cdFx0YW5ub3RhdGlvblR5cGU6IHN0cmluZztcblx0XHR0ZXJtOiBzdHJpbmc7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHR9O1xufTtcblxuZnVuY3Rpb24gY29udmVydEFubm90YXRpb24oXG5cdGFubm90YXRpb246IEFubm90YXRpb24sXG5cdHBhcnNlck91dHB1dDogUGFyc2VyT3V0cHV0LFxuXHRjdXJyZW50VGFyZ2V0OiBhbnksXG5cdG9iamVjdE1hcDogYW55LFxuXHR0b1Jlc29sdmU6IFJlc29sdmVhYmxlW10sXG5cdGFubm90YXRpb25Tb3VyY2U6IHN0cmluZyxcblx0dW5yZXNvbHZlZEFubm90YXRpb25zOiBBbm5vdGF0aW9uTGlzdFtdXG4pOiBhbnkge1xuXHRpZiAoYW5ub3RhdGlvbi5yZWNvcmQpIHtcblx0XHRjb25zdCBhbm5vdGF0aW9uVHlwZSA9IGFubm90YXRpb24ucmVjb3JkLnR5cGVcblx0XHRcdD8gdW5hbGlhcyhwYXJzZXJPdXRwdXQucmVmZXJlbmNlcywgYW5ub3RhdGlvbi5yZWNvcmQudHlwZSlcblx0XHRcdDogaW5mZXJUeXBlRnJvbVRlcm0oYW5ub3RhdGlvbi50ZXJtLCBwYXJzZXJPdXRwdXQsIGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRjb25zdCBhbm5vdGF0aW9uVGVybTogYW55ID0ge1xuXHRcdFx0JFR5cGU6IGFubm90YXRpb25UeXBlLFxuXHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdHF1YWxpZmllcjogYW5ub3RhdGlvbi5xdWFsaWZpZXJcblx0XHR9O1xuXHRcdGNvbnN0IGFubm90YXRpb25Db250ZW50OiBhbnkgPSB7fTtcblx0XHRhbm5vdGF0aW9uLnJlY29yZC5wcm9wZXJ0eVZhbHVlcy5mb3JFYWNoKChwcm9wZXJ0eVZhbHVlOiBQcm9wZXJ0eVZhbHVlKSA9PiB7XG5cdFx0XHRhbm5vdGF0aW9uQ29udGVudFtwcm9wZXJ0eVZhbHVlLm5hbWVdID0gcGFyc2VWYWx1ZShcblx0XHRcdFx0cHJvcGVydHlWYWx1ZS52YWx1ZSxcblx0XHRcdFx0YCR7YW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWV9LyR7cHJvcGVydHlWYWx1ZS5uYW1lfWAsXG5cdFx0XHRcdHBhcnNlck91dHB1dCxcblx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHR0b1Jlc29sdmUsXG5cdFx0XHRcdGFubm90YXRpb25Tb3VyY2UsXG5cdFx0XHRcdHVucmVzb2x2ZWRBbm5vdGF0aW9ucyxcblx0XHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRcdGFubm90YXRpb24udGVybVxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0YW5ub3RhdGlvbkNvbnRlbnQuaGFzT3duUHJvcGVydHkoXCJBY3Rpb25cIikgJiZcblx0XHRcdFx0KCFhbm5vdGF0aW9uLnJlY29yZCB8fFxuXHRcdFx0XHRcdGFubm90YXRpb25UZXJtLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRcdFx0YW5ub3RhdGlvblRlcm0uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFubm90YXRpb25Db250ZW50LkFjdGlvblRhcmdldCA9XG5cdFx0XHRcdFx0KGN1cnJlbnRUYXJnZXQuYWN0aW9ucyAmJiBjdXJyZW50VGFyZ2V0LmFjdGlvbnNbYW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uXSkgfHxcblx0XHRcdFx0XHRvYmplY3RNYXBbYW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uXTtcblx0XHRcdFx0aWYgKCFhbm5vdGF0aW9uQ29udGVudC5BY3Rpb25UYXJnZXQpIHtcblx0XHRcdFx0XHRBTk5PVEFUSU9OX0VSUk9SUy5wdXNoKHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6XG5cdFx0XHRcdFx0XHRcdFwiVW5hYmxlIHRvIHJlc29sdmUgdGhlIGFjdGlvbiBcIiArXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25Db250ZW50LkFjdGlvbiArXG5cdFx0XHRcdFx0XHRcdFwiIGRlZmluZWQgZm9yIFwiICtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvLyBBZGQgdG8gZGlhZ25vc3RpY3Ncblx0XHRcdFx0XHQvLyBkZWJ1Z2dlcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKGFubm90YXRpb25UZXJtLCBhbm5vdGF0aW9uQ29udGVudCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5jb2xsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoYW5ub3RhdGlvbi52YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHBhcnNlVmFsdWUoXG5cdFx0XHRcdGFubm90YXRpb24udmFsdWUsXG5cdFx0XHRcdGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRwYXJzZXJPdXRwdXQsXG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdG9iamVjdE1hcCxcblx0XHRcdFx0dG9SZXNvbHZlLFxuXHRcdFx0XHRhbm5vdGF0aW9uU291cmNlLFxuXHRcdFx0XHR1bnJlc29sdmVkQW5ub3RhdGlvbnMsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRcdGFubm90YXRpb24udGVybVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGFubm90YXRpb24uY29sbGVjdGlvbikge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb246IGFueSA9IHBhcnNlQ29sbGVjdGlvbihcblx0XHRcdGFubm90YXRpb24uY29sbGVjdGlvbixcblx0XHRcdGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0cGFyc2VyT3V0cHV0LFxuXHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdG9iamVjdE1hcCxcblx0XHRcdHRvUmVzb2x2ZSxcblx0XHRcdGFubm90YXRpb25Tb3VyY2UsXG5cdFx0XHR1bnJlc29sdmVkQW5ub3RhdGlvbnMsXG5cdFx0XHRcIlwiLFxuXHRcdFx0YW5ub3RhdGlvbi50ZXJtXG5cdFx0KTtcblx0XHRjb2xsZWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdHJldHVybiBjb2xsZWN0aW9uO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGNhc2VcIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZVBhdGhGbihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBpbmNsdWRlVmlzaXRlZE9iamVjdHM6IGJvb2xlYW4pOiBhbnkge1xuXHRcdGNvbnN0IGFubm90YXRpb25UZXJtOiBzdHJpbmcgPSBcIlwiO1xuXHRcdGNvbnN0IGFubm90YXRpb25UeXBlOiBzdHJpbmcgPSBcIlwiO1xuXHRcdHJldHVybiByZXNvbHZlVGFyZ2V0KFxuXHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdHJlbGF0aXZlUGF0aCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0aW5jbHVkZVZpc2l0ZWRPYmplY3RzLFxuXHRcdFx0YW5ub3RhdGlvblR5cGUsXG5cdFx0XHRhbm5vdGF0aW9uVGVybVxuXHRcdCk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydGllcyhcblx0ZW50aXR5VHlwZXM6IFBhcnNlckVudGl0eVR5cGVbXSxcblx0YXNzb2NpYXRpb25zOiBBc3NvY2lhdGlvbltdLFxuXHRvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT5cbik6IHZvaWQge1xuXHRlbnRpdHlUeXBlcy5mb3JFYWNoKGVudGl0eVR5cGUgPT4ge1xuXHRcdGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcChuYXZQcm9wID0+IHtcblx0XHRcdGNvbnN0IG91dE5hdlByb3A6IFBhcnRpYWw8TmF2aWdhdGlvblByb3BlcnR5PiA9IHtcblx0XHRcdFx0X3R5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5XCIsXG5cdFx0XHRcdG5hbWU6IG5hdlByb3AubmFtZSxcblx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBuYXZQcm9wLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0cGFydG5lcjogKG5hdlByb3AgYXMgYW55KS5oYXNPd25Qcm9wZXJ0eShcInBhcnRuZXJcIikgPyAobmF2UHJvcCBhcyBhbnkpLnBhcnRuZXIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdC8vIHRhcmdldFR5cGVOYW1lOiBGdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0XHRcdC8vIHRhcmdldFR5cGU6IEVudGl0eVR5cGU7XG5cdFx0XHRcdGlzQ29sbGVjdGlvbjogKG5hdlByb3AgYXMgYW55KS5oYXNPd25Qcm9wZXJ0eShcImlzQ29sbGVjdGlvblwiKSA/IChuYXZQcm9wIGFzIGFueSkuaXNDb2xsZWN0aW9uIDogZmFsc2UsXG5cdFx0XHRcdGNvbnRhaW5zVGFyZ2V0OiAobmF2UHJvcCBhcyBhbnkpLmhhc093blByb3BlcnR5KFwiY29udGFpbnNUYXJnZXRcIilcblx0XHRcdFx0XHQ/IChuYXZQcm9wIGFzIGFueSkuY29udGFpbnNUYXJnZXRcblx0XHRcdFx0XHQ6IGZhbHNlLFxuXHRcdFx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnQ6IChuYXZQcm9wIGFzIGFueSkucmVmZXJlbnRpYWxDb25zdHJhaW50XG5cdFx0XHRcdFx0PyAobmF2UHJvcCBhcyBhbnkpLnJlZmVyZW50aWFsQ29uc3RyYWludFxuXHRcdFx0XHRcdDogW10sXG5cdFx0XHRcdGFubm90YXRpb25zOiB7fVxuXHRcdFx0fTtcblx0XHRcdGlmICgobmF2UHJvcCBhcyBHZW5lcmljTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlTmFtZSkge1xuXHRcdFx0XHRvdXROYXZQcm9wLnRhcmdldFR5cGUgPSBvYmplY3RNYXBbKG5hdlByb3AgYXMgVjROYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGVOYW1lXTtcblx0XHRcdH0gZWxzZSBpZiAoKG5hdlByb3AgYXMgVjJOYXZpZ2F0aW9uUHJvcGVydHkpLnJlbGF0aW9uc2hpcCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRBc3NvY2lhdGlvbiA9IGFzc29jaWF0aW9ucy5maW5kKFxuXHRcdFx0XHRcdGFzc29jaWF0aW9uID0+IGFzc29jaWF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gKG5hdlByb3AgYXMgVjJOYXZpZ2F0aW9uUHJvcGVydHkpLnJlbGF0aW9uc2hpcFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodGFyZ2V0QXNzb2NpYXRpb24pIHtcblx0XHRcdFx0XHRjb25zdCBhc3NvY2lhdGlvbkVuZCA9IHRhcmdldEFzc29jaWF0aW9uLmFzc29jaWF0aW9uRW5kLmZpbmQoXG5cdFx0XHRcdFx0XHRlbmQgPT4gZW5kLnJvbGUgPT09IChuYXZQcm9wIGFzIFYyTmF2aWdhdGlvblByb3BlcnR5KS50b1JvbGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChhc3NvY2lhdGlvbkVuZCkge1xuXHRcdFx0XHRcdFx0b3V0TmF2UHJvcC50YXJnZXRUeXBlID0gb2JqZWN0TWFwW2Fzc29jaWF0aW9uRW5kLnR5cGVdO1xuXHRcdFx0XHRcdFx0b3V0TmF2UHJvcC5pc0NvbGxlY3Rpb24gPSBhc3NvY2lhdGlvbkVuZC5tdWx0aXBsaWNpdHkgPT09IFwiKlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dE5hdlByb3AudGFyZ2V0VHlwZSkge1xuXHRcdFx0XHRvdXROYXZQcm9wLnRhcmdldFR5cGVOYW1lID0gb3V0TmF2UHJvcC50YXJnZXRUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG91dE5hdlByb3BSZXEgPSBvdXROYXZQcm9wIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0XHRcdG9iamVjdE1hcFtvdXROYXZQcm9wUmVxLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBvdXROYXZQcm9wUmVxO1xuXHRcdFx0cmV0dXJuIG91dE5hdlByb3BSZXE7XG5cdFx0fSk7XG5cdFx0KGVudGl0eVR5cGUgYXMgRW50aXR5VHlwZSkucmVzb2x2ZVBhdGggPSBjcmVhdGVSZXNvbHZlUGF0aEZuKGVudGl0eVR5cGUgYXMgRW50aXR5VHlwZSwgb2JqZWN0TWFwKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGxpbmtBY3Rpb25zVG9FbnRpdHlUeXBlKG5hbWVzcGFjZTogc3RyaW5nLCBhY3Rpb25zOiBBY3Rpb25bXSwgb2JqZWN0TWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG5cdGFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuXHRcdGlmICghYWN0aW9uLmFubm90YXRpb25zKSB7XG5cdFx0XHRhY3Rpb24uYW5ub3RhdGlvbnMgPSB7fTtcblx0XHR9XG5cdFx0aWYgKGFjdGlvbi5pc0JvdW5kKSB7XG5cdFx0XHRjb25zdCBzb3VyY2VFbnRpdHlUeXBlID0gb2JqZWN0TWFwW2FjdGlvbi5zb3VyY2VUeXBlXTtcblx0XHRcdGFjdGlvbi5zb3VyY2VFbnRpdHlUeXBlID0gc291cmNlRW50aXR5VHlwZTtcblx0XHRcdGlmIChzb3VyY2VFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdGlmICghc291cmNlRW50aXR5VHlwZS5hY3Rpb25zKSB7XG5cdFx0XHRcdFx0c291cmNlRW50aXR5VHlwZS5hY3Rpb25zID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0c291cmNlRW50aXR5VHlwZS5hY3Rpb25zW2FjdGlvbi5uYW1lXSA9IGFjdGlvbjtcblx0XHRcdFx0c291cmNlRW50aXR5VHlwZS5hY3Rpb25zW2Ake25hbWVzcGFjZX0uJHthY3Rpb24ubmFtZX1gXSA9IGFjdGlvbjtcblx0XHRcdH1cblx0XHRcdGFjdGlvbi5yZXR1cm5FbnRpdHlUeXBlID0gb2JqZWN0TWFwW2FjdGlvbi5yZXR1cm5UeXBlXTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBsaW5rRW50aXR5VHlwZVRvRW50aXR5U2V0KFxuXHRlbnRpdHlTZXRzOiBFbnRpdHlTZXRbXSxcblx0b2JqZWN0TWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuXHRyZWZlcmVuY2VzOiBSZWZlcmVuY2VzV2l0aE1hcFxuKTogdm9pZCB7XG5cdGVudGl0eVNldHMuZm9yRWFjaChlbnRpdHlTZXQgPT4ge1xuXHRcdGVudGl0eVNldC5lbnRpdHlUeXBlID0gb2JqZWN0TWFwW2VudGl0eVNldC5lbnRpdHlUeXBlTmFtZV07XG5cdFx0aWYgKCFlbnRpdHlTZXQuZW50aXR5VHlwZSkge1xuXHRcdFx0ZW50aXR5U2V0LmVudGl0eVR5cGUgPSBvYmplY3RNYXBbdW5hbGlhcyhyZWZlcmVuY2VzLCBlbnRpdHlTZXQuZW50aXR5VHlwZU5hbWUpIGFzIHN0cmluZ107XG5cdFx0fVxuXHRcdGlmICghZW50aXR5U2V0LmFubm90YXRpb25zKSB7XG5cdFx0XHRlbnRpdHlTZXQuYW5ub3RhdGlvbnMgPSB7fTtcblx0XHR9XG5cdFx0aWYgKCFlbnRpdHlTZXQuZW50aXR5VHlwZS5hbm5vdGF0aW9ucykge1xuXHRcdFx0ZW50aXR5U2V0LmVudGl0eVR5cGUuYW5ub3RhdGlvbnMgPSB7fTtcblx0XHR9XG5cdFx0ZW50aXR5U2V0LmVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXlQcm9wOiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0a2V5UHJvcC5pc0tleSA9IHRydWU7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBsaW5rRW50aXR5VHlwZVRvU2luZ2xldG9uKFxuXHRzaW5nbGV0b25zOiBTaW5nbGV0b25bXSA9IFtdLFxuXHRvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG5cdHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwXG4pOiB2b2lkIHtcblx0c2luZ2xldG9ucy5mb3JFYWNoKHNpbmdsZXRvbiA9PiB7XG5cdFx0c2luZ2xldG9uLnR5cGUgPSBvYmplY3RNYXBbc2luZ2xldG9uLnR5cGVOYW1lXTtcblx0XHRpZiAoIXNpbmdsZXRvbi50eXBlKSB7XG5cdFx0XHRzaW5nbGV0b24udHlwZSA9IG9iamVjdE1hcFt1bmFsaWFzKHJlZmVyZW5jZXMsIHNpbmdsZXRvbi50eXBlTmFtZSkgYXMgc3RyaW5nXTtcblx0XHR9XG5cdFx0aWYgKCFzaW5nbGV0b24uYW5ub3RhdGlvbnMpIHtcblx0XHRcdHNpbmdsZXRvbi5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXNpbmdsZXRvbi50eXBlLmFubm90YXRpb25zKSB7XG5cdFx0XHRzaW5nbGV0b24udHlwZS5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdH1cblx0XHRzaW5nbGV0b24udHlwZS5rZXlzLmZvckVhY2goKGtleVByb3A6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRrZXlQcm9wLmlzS2V5ID0gdHJ1ZTtcblx0XHR9KTtcblx0XHRzaW5nbGV0b24uZW50aXR5VHlwZSA9IHNpbmdsZXRvbi50eXBlO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gbGlua1Byb3BlcnRpZXNUb0NvbXBsZXhUeXBlcyhlbnRpdHlUeXBlczogRW50aXR5VHlwZVtdLCBvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcblx0ZnVuY3Rpb24gbGluayhwcm9wZXJ0eTogUHJvcGVydHkpIHtcblx0XHRpZiAoIXByb3BlcnR5LmFubm90YXRpb25zKSB7XG5cdFx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdH1cblxuXHRcdHRyeSB7XG4gICAgICBpZiAocHJvcGVydHkudHlwZS5pbmRleE9mKFwiRWRtXCIpICE9PSAwKSB7XG4gICAgICAgIGxldCBjb21wbGV4VHlwZTogQ29tcGxleFR5cGUgfCBUeXBlRGVmaW5pdGlvbjtcbiAgICAgICAgaWYgKHByb3BlcnR5LnR5cGUuc3RhcnRzV2l0aChcIkNvbGxlY3Rpb25cIikpIHtcbiAgICAgICAgICBjb25zdCBjb21wbGV4VHlwZU5hbWUgPSBwcm9wZXJ0eS50eXBlLnN1YnN0cigxMSwgcHJvcGVydHkudHlwZS5sZW5ndGggLSAxMik7XG4gICAgICAgICAgY29tcGxleFR5cGUgPSBvYmplY3RNYXBbY29tcGxleFR5cGVOYW1lXSBhcyBDb21wbGV4VHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wbGV4VHlwZSA9IG9iamVjdE1hcFtwcm9wZXJ0eS50eXBlXSBhcyBDb21wbGV4VHlwZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGxleFR5cGUpIHtcbiAgICAgICAgICBwcm9wZXJ0eS50YXJnZXRUeXBlID0gY29tcGxleFR5cGU7XG4gICAgICAgICAgaWYgKGNvbXBsZXhUeXBlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbXBsZXhUeXBlLnByb3BlcnRpZXMuZm9yRWFjaChsaW5rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblx0XHR9IGNhdGNoIChzRXJyb3Ipe1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJvcGVydHkgVHlwZSBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHR9XG5cdFx0XG5cdH1cblxuXHRlbnRpdHlUeXBlcy5mb3JFYWNoKGVudGl0eVR5cGUgPT4ge1xuXHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKGxpbmspO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUNvbXBsZXhUeXBlcyhcblx0Y29tcGxleFR5cGVzOiBQYXJzZXJDb21wbGV4VHlwZVtdLFxuXHRhc3NvY2lhdGlvbnM6IEFzc29jaWF0aW9uW10sXG5cdG9iamVjdE1hcDogUmVjb3JkPHN0cmluZywgYW55PlxuKSB7XG5cdGNvbXBsZXhUeXBlcy5mb3JFYWNoKGNvbXBsZXhUeXBlID0+IHtcblx0XHQoY29tcGxleFR5cGUgYXMgQ29tcGxleFR5cGUpLmFubm90YXRpb25zID0ge307XG5cdFx0Y29tcGxleFR5cGUucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcblx0XHRcdGlmICghKHByb3BlcnR5IGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucykge1xuXHRcdFx0XHQocHJvcGVydHkgYXMgUHJvcGVydHkpLmFubm90YXRpb25zID0ge307XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29tcGxleFR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb21wbGV4VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAobmF2UHJvcCA9PiB7XG5cdFx0XHRpZiAoIShuYXZQcm9wIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkuYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0KG5hdlByb3AgYXMgTmF2aWdhdGlvblByb3BlcnR5KS5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb3V0TmF2UHJvcDogUGFydGlhbDxOYXZpZ2F0aW9uUHJvcGVydHk+ID0ge1xuXHRcdFx0XHRfdHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlcIixcblx0XHRcdFx0bmFtZTogbmF2UHJvcC5uYW1lLFxuXHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IG5hdlByb3AuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRwYXJ0bmVyOiAobmF2UHJvcCBhcyBhbnkpLmhhc093blByb3BlcnR5KFwicGFydG5lclwiKSA/IChuYXZQcm9wIGFzIGFueSkucGFydG5lciA6IHVuZGVmaW5lZCxcblx0XHRcdFx0Ly8gdGFyZ2V0VHlwZU5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdFx0Ly8gdGFyZ2V0VHlwZTogRW50aXR5VHlwZTtcblx0XHRcdFx0aXNDb2xsZWN0aW9uOiAobmF2UHJvcCBhcyBhbnkpLmhhc093blByb3BlcnR5KFwiaXNDb2xsZWN0aW9uXCIpID8gKG5hdlByb3AgYXMgYW55KS5pc0NvbGxlY3Rpb24gOiBmYWxzZSxcblx0XHRcdFx0Y29udGFpbnNUYXJnZXQ6IChuYXZQcm9wIGFzIGFueSkuaGFzT3duUHJvcGVydHkoXCJjb250YWluc1RhcmdldFwiKVxuXHRcdFx0XHRcdD8gKG5hdlByb3AgYXMgYW55KS5jb250YWluc1RhcmdldFxuXHRcdFx0XHRcdDogZmFsc2UsXG5cdFx0XHRcdHJlZmVyZW50aWFsQ29uc3RyYWludDogKG5hdlByb3AgYXMgYW55KS5yZWZlcmVudGlhbENvbnN0cmFpbnRcblx0XHRcdFx0XHQ/IChuYXZQcm9wIGFzIGFueSkucmVmZXJlbnRpYWxDb25zdHJhaW50XG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0fTtcblx0XHRcdGlmICgobmF2UHJvcCBhcyBHZW5lcmljTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlTmFtZSkge1xuXHRcdFx0XHRvdXROYXZQcm9wLnRhcmdldFR5cGUgPSBvYmplY3RNYXBbKG5hdlByb3AgYXMgVjROYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGVOYW1lXTtcblx0XHRcdH0gZWxzZSBpZiAoKG5hdlByb3AgYXMgVjJOYXZpZ2F0aW9uUHJvcGVydHkpLnJlbGF0aW9uc2hpcCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRBc3NvY2lhdGlvbiA9IGFzc29jaWF0aW9ucy5maW5kKFxuXHRcdFx0XHRcdGFzc29jaWF0aW9uID0+IGFzc29jaWF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gKG5hdlByb3AgYXMgVjJOYXZpZ2F0aW9uUHJvcGVydHkpLnJlbGF0aW9uc2hpcFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodGFyZ2V0QXNzb2NpYXRpb24pIHtcblx0XHRcdFx0XHRjb25zdCBhc3NvY2lhdGlvbkVuZCA9IHRhcmdldEFzc29jaWF0aW9uLmFzc29jaWF0aW9uRW5kLmZpbmQoXG5cdFx0XHRcdFx0XHRlbmQgPT4gZW5kLnJvbGUgPT09IChuYXZQcm9wIGFzIFYyTmF2aWdhdGlvblByb3BlcnR5KS50b1JvbGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChhc3NvY2lhdGlvbkVuZCkge1xuXHRcdFx0XHRcdFx0b3V0TmF2UHJvcC50YXJnZXRUeXBlID0gb2JqZWN0TWFwW2Fzc29jaWF0aW9uRW5kLnR5cGVdO1xuXHRcdFx0XHRcdFx0b3V0TmF2UHJvcC5pc0NvbGxlY3Rpb24gPSBhc3NvY2lhdGlvbkVuZC5tdWx0aXBsaWNpdHkgPT09IFwiKlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dE5hdlByb3AudGFyZ2V0VHlwZSkge1xuXHRcdFx0XHRvdXROYXZQcm9wLnRhcmdldFR5cGVOYW1lID0gb3V0TmF2UHJvcC50YXJnZXRUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG91dE5hdlByb3BSZXEgPSBvdXROYXZQcm9wIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0XHRcdG9iamVjdE1hcFtvdXROYXZQcm9wUmVxLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBvdXROYXZQcm9wUmVxO1xuXHRcdFx0cmV0dXJuIG91dE5hdlByb3BSZXE7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBzcGxpdFRlcm0ocmVmZXJlbmNlczogUmVmZXJlbmNlc1dpdGhNYXAsIHRlcm1WYWx1ZTogc3RyaW5nKSB7XG5cdGNvbnN0IGFsaWFzZWRUZXJtID0gYWxpYXMocmVmZXJlbmNlcywgdGVybVZhbHVlKTtcblx0Y29uc3QgbGFzdERvdCA9IGFsaWFzZWRUZXJtLmxhc3RJbmRleE9mKFwiLlwiKTtcblx0bGV0IHRlcm1BbGlhcyA9IGFsaWFzZWRUZXJtLnN1YnN0cigwLCBsYXN0RG90KTtcblx0bGV0IHRlcm0gPSBhbGlhc2VkVGVybS5zdWJzdHIobGFzdERvdCArIDEpO1xuXHRyZXR1cm4gW3Rlcm1BbGlhcywgdGVybV07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHNwZWNpZmljIHBhdGhcbiAqIEBwYXJhbSBzUGF0aFxuICovXG5mdW5jdGlvbiBjcmVhdGVHbG9iYWxSZXNvbHZlKGNvbnZlcnRlZE91dHB1dDogQ29udmVydGVyT3V0cHV0LCBvYmplY3RNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIHJlc29sdmVQYXRoPFQgZXh0ZW5kcyBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbj4oc1BhdGg6IHN0cmluZyk6IFJlc29sdXRpb25UYXJnZXQ8VD4ge1xuXHRcdGNvbnN0IGFQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0aWYgKGFQYXRoU3BsaXQuc2hpZnQoKSAhPT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGRlYWwgd2l0aCByZWxhdGl2ZSBwYXRoXCIpO1xuXHRcdH1cblx0XHRjb25zdCBlbnRpdHlTZXROYW1lID0gYVBhdGhTcGxpdC5zaGlmdCgpO1xuXHRcdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlZE91dHB1dC5lbnRpdHlTZXRzLmZpbmQoZXQgPT4gZXQubmFtZSA9PT0gZW50aXR5U2V0TmFtZSk7XG5cdFx0aWYgKCFlbnRpdHlTZXQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRhcmdldDogY29udmVydGVkT3V0cHV0LmVudGl0eUNvbnRhaW5lcixcblx0XHRcdFx0b2JqZWN0UGF0aDogW2NvbnZlcnRlZE91dHB1dC5lbnRpdHlDb250YWluZXJdXG5cdFx0XHR9IGFzIFJlc29sdXRpb25UYXJnZXQ8VD47XG5cdFx0fVxuXHRcdGlmIChhUGF0aFNwbGl0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGFyZ2V0OiBlbnRpdHlTZXQsXG5cdFx0XHRcdG9iamVjdFBhdGg6IFtjb252ZXJ0ZWRPdXRwdXQuZW50aXR5Q29udGFpbmVyLCBlbnRpdHlTZXRdXG5cdFx0XHR9IGFzIFJlc29sdXRpb25UYXJnZXQ8VD47XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHRhcmdldFJlc29sdXRpb246IGFueSA9IHJlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBlbnRpdHlTZXQsIFwiL1wiICsgYVBhdGhTcGxpdC5qb2luKFwiL1wiKSwgZmFsc2UsIHRydWUpO1xuXHRcdFx0aWYgKHRhcmdldFJlc29sdXRpb24udGFyZ2V0KSB7XG5cdFx0XHRcdHRhcmdldFJlc29sdXRpb24udmlzaXRlZE9iamVjdHMucHVzaCh0YXJnZXRSZXNvbHV0aW9uLnRhcmdldCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0YXJnZXQ6IHRhcmdldFJlc29sdXRpb24udGFyZ2V0LFxuXHRcdFx0XHRvYmplY3RQYXRoOiB0YXJnZXRSZXNvbHV0aW9uLnZpc2l0ZWRPYmplY3RzXG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxubGV0IEFOTk9UQVRJT05fRVJST1JTOiB7IG1lc3NhZ2U6IHN0cmluZyB9W10gPSBbXTtcbmxldCBBTExfQU5OT1RBVElPTl9FUlJPUlM6IGFueSA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGVzKHBhcnNlck91dHB1dDogUGFyc2VyT3V0cHV0KTogQ29udmVydGVyT3V0cHV0IHtcblx0QU5OT1RBVElPTl9FUlJPUlMgPSBbXTtcblx0Y29uc3Qgb2JqZWN0TWFwID0gYnVpbGRPYmplY3RNYXAocGFyc2VyT3V0cHV0KTtcblx0cmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKFxuXHRcdHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5VHlwZXMgYXMgRW50aXR5VHlwZVtdLFxuXHRcdHBhcnNlck91dHB1dC5zY2hlbWEuYXNzb2NpYXRpb25zLFxuXHRcdG9iamVjdE1hcFxuXHQpO1xuXHRpZiAoIShwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eUNvbnRhaW5lciBhcyBFbnRpdHlDb250YWluZXIpLmFubm90YXRpb25zKSB7XG5cdFx0KHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5Q29udGFpbmVyIGFzIEVudGl0eUNvbnRhaW5lcikuYW5ub3RhdGlvbnMgPSB7fTtcblx0fVxuXHRsaW5rQWN0aW9uc1RvRW50aXR5VHlwZShwYXJzZXJPdXRwdXQuc2NoZW1hLm5hbWVzcGFjZSwgcGFyc2VyT3V0cHV0LnNjaGVtYS5hY3Rpb25zIGFzIEFjdGlvbltdLCBvYmplY3RNYXApO1xuXHRsaW5rRW50aXR5VHlwZVRvRW50aXR5U2V0KHBhcnNlck91dHB1dC5zY2hlbWEuZW50aXR5U2V0cyBhcyBFbnRpdHlTZXRbXSwgb2JqZWN0TWFwLCBwYXJzZXJPdXRwdXQucmVmZXJlbmNlcyk7XG5cdGxpbmtFbnRpdHlUeXBlVG9TaW5nbGV0b24ocGFyc2VyT3V0cHV0LnNjaGVtYS5zaW5nbGV0b25zIGFzIFNpbmdsZXRvbltdLCBvYmplY3RNYXAsIHBhcnNlck91dHB1dC5yZWZlcmVuY2VzKTtcblx0bGlua1Byb3BlcnRpZXNUb0NvbXBsZXhUeXBlcyhwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eVR5cGVzIGFzIEVudGl0eVR5cGVbXSwgb2JqZWN0TWFwKTtcblx0cHJlcGFyZUNvbXBsZXhUeXBlcyhwYXJzZXJPdXRwdXQuc2NoZW1hLmNvbXBsZXhUeXBlcyBhcyBDb21wbGV4VHlwZVtdLCBwYXJzZXJPdXRwdXQuc2NoZW1hLmFzc29jaWF0aW9ucywgb2JqZWN0TWFwKTtcblx0Y29uc3QgdG9SZXNvbHZlOiBSZXNvbHZlYWJsZVtdID0gW107XG5cdGNvbnN0IHVucmVzb2x2ZWRBbm5vdGF0aW9uczogQW5ub3RhdGlvbkxpc3RbXSA9IFtdO1xuXG5cdE9iamVjdC5rZXlzKHBhcnNlck91dHB1dC5zY2hlbWEuYW5ub3RhdGlvbnMpLmZvckVhY2goYW5ub3RhdGlvblNvdXJjZSA9PiB7XG5cdFx0cGFyc2VyT3V0cHV0LnNjaGVtYS5hbm5vdGF0aW9uc1thbm5vdGF0aW9uU291cmNlXS5mb3JFYWNoKGFubm90YXRpb25MaXN0ID0+IHtcblx0XHRcdGxldCBjdXJyZW50VGFyZ2V0TmFtZSA9IHVuYWxpYXMocGFyc2VyT3V0cHV0LnJlZmVyZW5jZXMsIGFubm90YXRpb25MaXN0LnRhcmdldCkgYXMgc3RyaW5nO1xuXHRcdFx0Y29uc3Qgb2JqZWN0TWFwRWxlbWVudCA9IG9iamVjdE1hcFtjdXJyZW50VGFyZ2V0TmFtZV07XG5cdFx0XHRpZiAoIW9iamVjdE1hcEVsZW1lbnQpIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRUYXJnZXROYW1lICYmIGN1cnJlbnRUYXJnZXROYW1lLmluZGV4T2YoXCJAXCIpICE9PSAtMSkge1xuXHRcdFx0XHRcdChhbm5vdGF0aW9uTGlzdCBhcyBhbnkpLl9fc291cmNlID0gYW5ub3RhdGlvblNvdXJjZTtcblx0XHRcdFx0XHR1bnJlc29sdmVkQW5ub3RhdGlvbnMucHVzaChhbm5vdGF0aW9uTGlzdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdE1hcEVsZW1lbnQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0bGV0IGFsbFRhcmdldHMgPSBbb2JqZWN0TWFwRWxlbWVudF07XG5cdFx0XHRcdGxldCBiT3ZlcnJpZGVFeGlzdGluZyA9IHRydWU7XG5cdFx0XHRcdGlmIChvYmplY3RNYXBFbGVtZW50Ll90eXBlID09PSBcIlVuYm91bmRHZW5lcmljQWN0aW9uXCIpIHtcblx0XHRcdFx0XHRhbGxUYXJnZXRzID0gb2JqZWN0TWFwRWxlbWVudC5hY3Rpb25zO1xuXHRcdFx0XHRcdGJPdmVycmlkZUV4aXN0aW5nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0YWxsVGFyZ2V0cy5mb3JFYWNoKGN1cnJlbnRUYXJnZXQgPT4ge1xuXHRcdFx0XHRcdGlmIChjdXJyZW50VGFyZ2V0TmFtZSAhPT0gY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXROYW1lID0gY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICghY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucykge1xuXHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdC5hbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb24gPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IHNwbGl0VGVybShkZWZhdWx0UmVmZXJlbmNlcywgYW5ub3RhdGlvbi50ZXJtKTtcblx0XHRcdFx0XHRcdGlmICghY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc10pIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc10gPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucy5fYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9ucy5fYW5ub3RhdGlvbnMgPSB7fTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3Qgdm9jVGVybVdpdGhRdWFsaWZpZXIgPSBgJHt2b2NUZXJtfSR7XG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24ucXVhbGlmaWVyID8gYCMke2Fubm90YXRpb24ucXVhbGlmaWVyfWAgOiBcIlwiXG5cdFx0XHRcdFx0XHR9YDtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0IWJPdmVycmlkZUV4aXN0aW5nICYmXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnM/Llt2b2NBbGlhc10/Llt2b2NUZXJtV2l0aFF1YWxpZmllcl0gIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSA9IGNvbnZlcnRBbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uIGFzIEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdHBhcnNlck91dHB1dCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldCxcblx0XHRcdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdFx0XHR0b1Jlc29sdmUsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25Tb3VyY2UsXG5cdFx0XHRcdFx0XHRcdHVucmVzb2x2ZWRBbm5vdGF0aW9uc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZW9mIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdID0gbmV3IFN0cmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdID0gbmV3IEJvb2xlYW4oXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl1cblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0gIT09IG51bGwgJiZcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSA9PT0gXCJvYmplY3RcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXS50ZXJtID0gdW5hbGlhcyhcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0UmVmZXJlbmNlcyxcblx0XHRcdFx0XHRcdFx0XHRgJHt2b2NBbGlhc30uJHt2b2NUZXJtfWBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdLnF1YWxpZmllciA9IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0uX19zb3VyY2UgPSBhbm5vdGF0aW9uU291cmNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblRhcmdldCA9IGAke2N1cnJlbnRUYXJnZXROYW1lfUAke3VuYWxpYXMoXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRSZWZlcmVuY2VzLFxuXHRcdFx0XHRcdFx0XHR2b2NBbGlhcyArIFwiLlwiICsgdm9jVGVybVdpdGhRdWFsaWZpZXJcblx0XHRcdFx0XHRcdCl9YDtcblx0XHRcdFx0XHRcdGlmIChhbm5vdGF0aW9uLmFubm90YXRpb25zICYmIEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbi5hbm5vdGF0aW9ucykpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3ViQW5ub3RhdGlvbkxpc3QgPSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0OiBhbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25zOiBhbm5vdGF0aW9uLmFubm90YXRpb25zLFxuXHRcdFx0XHRcdFx0XHRcdF9fc291cmNlOiBhbm5vdGF0aW9uU291cmNlXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdHVucmVzb2x2ZWRBbm5vdGF0aW9ucy5wdXNoKHN1YkFubm90YXRpb25MaXN0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24uYW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0XHRcdFx0IWN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXS5hbm5vdGF0aW9uc1xuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXS5hbm5vdGF0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbi5hbm5vdGF0aW9ucztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnMuX2Fubm90YXRpb25zW2Ake3ZvY0FsaWFzfS4ke3ZvY1Rlcm1XaXRoUXVhbGlmaWVyfWBdID1cblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdO1xuXHRcdFx0XHRcdFx0b2JqZWN0TWFwW2Fubm90YXRpb25UYXJnZXRdID0gY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cdGNvbnN0IGV4dHJhVW5yZXNvbHZlZEFubm90YXRpb25zOiBBbm5vdGF0aW9uTGlzdFtdID0gW107XG5cdHVucmVzb2x2ZWRBbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb25MaXN0ID0+IHtcblx0XHRjb25zdCBjdXJyZW50VGFyZ2V0TmFtZSA9IHVuYWxpYXMocGFyc2VyT3V0cHV0LnJlZmVyZW5jZXMsIGFubm90YXRpb25MaXN0LnRhcmdldCkgYXMgc3RyaW5nO1xuXHRcdGxldCBbYmFzZU9iaiwgYW5ub3RhdGlvblBhcnRdID0gY3VycmVudFRhcmdldE5hbWUuc3BsaXQoXCJAXCIpO1xuXHRcdGNvbnN0IHRhcmdldFNwbGl0ID0gYW5ub3RhdGlvblBhcnQuc3BsaXQoXCIvXCIpO1xuXHRcdGJhc2VPYmogPSBiYXNlT2JqICsgXCJAXCIgKyB0YXJnZXRTcGxpdFswXTtcblx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0U3BsaXQuc2xpY2UoMSkucmVkdWNlKChjdXJyZW50T2JqLCBwYXRoKSA9PiB7XG5cdFx0XHRpZiAoIWN1cnJlbnRPYmopIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY3VycmVudE9ialtwYXRoXTtcblx0XHR9LCBvYmplY3RNYXBbYmFzZU9ial0pO1xuXHRcdGlmICghY3VycmVudFRhcmdldCkge1xuXHRcdFx0QU5OT1RBVElPTl9FUlJPUlMucHVzaCh7XG5cdFx0XHRcdG1lc3NhZ2U6IFwiVGhlIGZvbGxvd2luZyBhbm5vdGF0aW9uIHRhcmdldCB3YXMgbm90IGZvdW5kIG9uIHRoZSBzZXJ2aWNlIFwiICsgY3VycmVudFRhcmdldE5hbWVcblx0XHRcdH0pO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJNaXNzaW5nIHRhcmdldCBhZ2FpbiBcIiArIGN1cnJlbnRUYXJnZXROYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50VGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9ucyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0YW5ub3RhdGlvbkxpc3QuYW5ub3RhdGlvbnMuZm9yRWFjaChhbm5vdGF0aW9uID0+IHtcblx0XHRcdFx0Y29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IHNwbGl0VGVybShkZWZhdWx0UmVmZXJlbmNlcywgYW5ub3RhdGlvbi50ZXJtKTtcblx0XHRcdFx0aWYgKCFjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXSkge1xuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zLl9hbm5vdGF0aW9ucykge1xuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnMuX2Fubm90YXRpb25zID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB2b2NUZXJtV2l0aFF1YWxpZmllciA9IGAke3ZvY1Rlcm19JHthbm5vdGF0aW9uLnF1YWxpZmllciA/IGAjJHthbm5vdGF0aW9uLnF1YWxpZmllcn1gIDogXCJcIn1gO1xuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0gPSBjb252ZXJ0QW5ub3RhdGlvbihcblx0XHRcdFx0XHRhbm5vdGF0aW9uIGFzIEFubm90YXRpb24sXG5cdFx0XHRcdFx0cGFyc2VyT3V0cHV0LFxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdFx0b2JqZWN0TWFwLFxuXHRcdFx0XHRcdHRvUmVzb2x2ZSxcblx0XHRcdFx0XHQoYW5ub3RhdGlvbkxpc3QgYXMgYW55KS5fX3NvdXJjZSxcblx0XHRcdFx0XHRleHRyYVVucmVzb2x2ZWRBbm5vdGF0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdICE9PSBudWxsICYmXG5cdFx0XHRcdFx0dHlwZW9mIGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSA9PT0gXCJvYmplY3RcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0udGVybSA9IHVuYWxpYXMoXG5cdFx0XHRcdFx0XHRkZWZhdWx0UmVmZXJlbmNlcyxcblx0XHRcdFx0XHRcdGAke3ZvY0FsaWFzfS4ke3ZvY1Rlcm19YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdLnF1YWxpZmllciA9IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW1xuXHRcdFx0XHRcdFx0dm9jVGVybVdpdGhRdWFsaWZpZXJcblx0XHRcdFx0XHRdLl9fc291cmNlID0gKGFubm90YXRpb25MaXN0IGFzIGFueSkuX19zb3VyY2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VycmVudFRhcmdldC5hbm5vdGF0aW9ucy5fYW5ub3RhdGlvbnNbYCR7dm9jQWxpYXN9LiR7dm9jVGVybVdpdGhRdWFsaWZpZXJ9YF0gPVxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXTtcblx0XHRcdFx0b2JqZWN0TWFwW2Ake2N1cnJlbnRUYXJnZXROYW1lfUAke3VuYWxpYXMoZGVmYXVsdFJlZmVyZW5jZXMsIHZvY0FsaWFzICsgXCIuXCIgKyB2b2NUZXJtV2l0aFF1YWxpZmllcil9YF0gPVxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHRvUmVzb2x2ZS5mb3JFYWNoKHJlc29sdmVhYmxlID0+IHtcblx0XHRjb25zdCB0b1Jlc29sdmUgPSByZXNvbHZlYWJsZS50b1Jlc29sdmU7XG5cdFx0Y29uc3QgdGFyZ2V0U3RyID0gdG9SZXNvbHZlLiR0YXJnZXQ7XG5cdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBvYmplY3RNYXBbdGFyZ2V0U3RyXTtcblx0XHRjb25zdCB7IGFubm90YXRpb25zVGVybSwgYW5ub3RhdGlvblR5cGUgfSA9IHRvUmVzb2x2ZTtcblx0XHRkZWxldGUgdG9SZXNvbHZlLmFubm90YXRpb25UeXBlO1xuXHRcdGRlbGV0ZSB0b1Jlc29sdmUuYW5ub3RhdGlvbnNUZXJtO1xuXG5cdFx0aWYgKHJlc29sdmVhYmxlLmlubGluZSAmJiAhKHJlc29sdmVkVGFyZ2V0IGluc3RhbmNlb2YgU3RyaW5nKSkge1xuXHRcdFx0Ly8gaW5saW5lIHRoZSByZXNvbHZlZCB0YXJnZXRcblx0XHRcdGxldCBrZXlzOiBrZXlvZiB0eXBlb2YgdG9SZXNvbHZlO1xuXHRcdFx0Zm9yIChrZXlzIGluIHRvUmVzb2x2ZSkgZGVsZXRlIHRvUmVzb2x2ZVtrZXlzXTtcblxuXHRcdFx0T2JqZWN0LmFzc2lnbih0b1Jlc29sdmUsIHJlc29sdmVkVGFyZ2V0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYXNzaWduIHRoZSByZXNvbHZlZCB0YXJnZXRcblx0XHRcdHRvUmVzb2x2ZS4kdGFyZ2V0ID0gcmVzb2x2ZWRUYXJnZXQ7XG5cdFx0fVxuXG5cdFx0aWYgKCFyZXNvbHZlZFRhcmdldCkge1xuXHRcdFx0dG9SZXNvbHZlLnRhcmdldFN0cmluZyA9IHRhcmdldFN0cjtcblx0XHRcdGlmIChhbm5vdGF0aW9uc1Rlcm0gJiYgYW5ub3RhdGlvblR5cGUpIHtcblx0XHRcdFx0Y29uc3Qgb0Vycm9yTXNnID0ge1xuXHRcdFx0XHRcdG1lc3NhZ2U6XG5cdFx0XHRcdFx0XHRcIlVuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246IFwiICtcblx0XHRcdFx0XHRcdHRhcmdldFN0ciArXG5cdFx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFx0XCJIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuXCIgK1xuXHRcdFx0XHRcdFx0XCI8QW5ub3RhdGlvbiBUZXJtID0gXCIgK1xuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbnNUZXJtICtcblx0XHRcdFx0XHRcdFwiPlwiICtcblx0XHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFx0XCI8UmVjb3JkIFR5cGUgPSBcIiArXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uVHlwZSArXG5cdFx0XHRcdFx0XHRcIj5cIiArXG5cdFx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcdFwiPEFubm90YXRpb25QYXRoID0gXCIgK1xuXHRcdFx0XHRcdFx0dGFyZ2V0U3RyICtcblx0XHRcdFx0XHRcdFwiPlwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UodGFyZ2V0U3RyLCBvRXJyb3JNc2cpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSB0b1Jlc29sdmUudGVybTtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IHRvUmVzb2x2ZS5wYXRoO1xuXHRcdFx0XHRjb25zdCB0ZXJtSW5mbyA9IHRhcmdldFN0ciA/IHRhcmdldFN0ci5zcGxpdChcIi9cIilbMF0gOiB0YXJnZXRTdHI7XG5cdFx0XHRcdGNvbnN0IG9FcnJvck1zZyA9IHtcblx0XHRcdFx0XHRtZXNzYWdlOlxuXHRcdFx0XHRcdFx0XCJVbmFibGUgdG8gcmVzb2x2ZSB0aGUgcGF0aCBleHByZXNzaW9uOiBcIiArXG5cdFx0XHRcdFx0XHR0YXJnZXRTdHIgK1xuXHRcdFx0XHRcdFx0XCJcXG5cIiArXG5cdFx0XHRcdFx0XHRcIlxcblwiICtcblx0XHRcdFx0XHRcdFwiSGludDogQ2hlY2sgYW5kIGNvcnJlY3QgdGhlIHBhdGggdmFsdWVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBtZXRhZGF0YSAoYW5ub3RhdGlvbi54bWwgZmlsZSBvciBDRFMgYW5ub3RhdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbik6IFxcblxcblwiICtcblx0XHRcdFx0XHRcdFwiPEFubm90YXRpb24gVGVybSA9IFwiICtcblx0XHRcdFx0XHRcdHRlcm1JbmZvICtcblx0XHRcdFx0XHRcdFwiPlwiICtcblx0XHRcdFx0XHRcdFwiXFxuXCIgK1xuXHRcdFx0XHRcdFx0XCI8UHJvcGVydHlWYWx1ZSBQcm9wZXJ0eSA9IFwiICtcblx0XHRcdFx0XHRcdHByb3BlcnR5ICtcblx0XHRcdFx0XHRcdFwiICAgICAgICBQYXRoPSBcIiArXG5cdFx0XHRcdFx0XHRwYXRoICtcblx0XHRcdFx0XHRcdFwiPlwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UodGFyZ2V0U3RyLCBvRXJyb3JNc2cpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGZvciAodmFyIHByb3BlcnR5IGluIEFMTF9BTk5PVEFUSU9OX0VSUk9SUykge1xuXHRcdEFOTk9UQVRJT05fRVJST1JTLnB1c2goQUxMX0FOTk9UQVRJT05fRVJST1JTW3Byb3BlcnR5XVswXSk7XG5cdH1cblx0KHBhcnNlck91dHB1dCBhcyBhbnkpLmVudGl0eVNldHMgPSBwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eVNldHM7XG5cdGNvbnN0IGV4dHJhUmVmZXJlbmNlcyA9IHBhcnNlck91dHB1dC5yZWZlcmVuY2VzLmZpbHRlcihyZWZlcmVuY2UgPT4ge1xuXHRcdHJldHVybiBkZWZhdWx0UmVmZXJlbmNlcy5maW5kKGRlZmF1bHRSZWYgPT4gZGVmYXVsdFJlZi5uYW1lc3BhY2UgPT09IHJlZmVyZW5jZS5uYW1lc3BhY2UpID09PSB1bmRlZmluZWQ7XG5cdH0pO1xuXHRjb25zdCBjb252ZXJ0ZWRPdXRwdXQ6IFBhcnRpYWw8Q29udmVydGVyT3V0cHV0PiA9IHtcblx0XHR2ZXJzaW9uOiBwYXJzZXJPdXRwdXQudmVyc2lvbixcblx0XHRhbm5vdGF0aW9uczogcGFyc2VyT3V0cHV0LnNjaGVtYS5hbm5vdGF0aW9ucyxcblx0XHRuYW1lc3BhY2U6IHBhcnNlck91dHB1dC5zY2hlbWEubmFtZXNwYWNlLFxuXHRcdGVudGl0eUNvbnRhaW5lcjogcGFyc2VyT3V0cHV0LnNjaGVtYS5lbnRpdHlDb250YWluZXIgYXMgRW50aXR5Q29udGFpbmVyLFxuXHRcdGFjdGlvbnM6IHBhcnNlck91dHB1dC5zY2hlbWEuYWN0aW9ucyBhcyBBY3Rpb25bXSxcblx0XHRlbnRpdHlTZXRzOiBwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eVNldHMgYXMgRW50aXR5U2V0W10sXG5cdFx0c2luZ2xldG9uczogcGFyc2VyT3V0cHV0LnNjaGVtYS5zaW5nbGV0b25zIGFzIFNpbmdsZXRvbltdLFxuXHRcdGVudGl0eVR5cGVzOiBwYXJzZXJPdXRwdXQuc2NoZW1hLmVudGl0eVR5cGVzIGFzIEVudGl0eVR5cGVbXSxcblx0XHRjb21wbGV4VHlwZXM6IHBhcnNlck91dHB1dC5zY2hlbWEuY29tcGxleFR5cGVzIGFzIENvbXBsZXhUeXBlW10sXG5cdFx0dHlwZURlZmluaXRpb25zOiBwYXJzZXJPdXRwdXQuc2NoZW1hLnR5cGVEZWZpbml0aW9ucyBhcyBUeXBlRGVmaW5pdGlvbltdLFxuXHRcdHJlZmVyZW5jZXM6IGRlZmF1bHRSZWZlcmVuY2VzLmNvbmNhdChleHRyYVJlZmVyZW5jZXMpLFxuXHRcdGRpYWdub3N0aWNzOiBBTk5PVEFUSU9OX0VSUk9SUy5jb25jYXQoKVxuXHR9O1xuXHRjb252ZXJ0ZWRPdXRwdXQucmVzb2x2ZVBhdGggPSBjcmVhdGVHbG9iYWxSZXNvbHZlKGNvbnZlcnRlZE91dHB1dCBhcyBDb252ZXJ0ZXJPdXRwdXQsIG9iamVjdE1hcCk7XG5cdHJldHVybiBjb252ZXJ0ZWRPdXRwdXQgYXMgQ29udmVydGVyT3V0cHV0O1xufVxuXG5mdW5jdGlvbiByZXZlcnRWYWx1ZVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIHZhbHVlOiBhbnkpOiBFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0bGV0IHJlc3VsdDogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZDtcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGNvbnN0IHZhbHVlTWF0Y2hlcyA9IHZhbHVlLm1hdGNoKC8oXFx3KylcXC5cXHcrXFwvLiovKTtcblx0XHRpZiAodmFsdWVNYXRjaGVzICYmIHJlZmVyZW5jZXMuZmluZChyZWYgPT4gcmVmLmFsaWFzID09PSB2YWx1ZU1hdGNoZXNbMV0pKSB7XG5cdFx0XHRyZXN1bHQgPSB7XG5cdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRFbnVtTWVtYmVyOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0ge1xuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRTdHJpbmc6IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdHJlc3VsdCA9IHtcblx0XHRcdHR5cGU6IFwiQ29sbGVjdGlvblwiLFxuXHRcdFx0Q29sbGVjdGlvbjogdmFsdWUubWFwKGFubm8gPT4gcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXMsIGFubm8pKSBhcyBhbnlbXVxuXHRcdH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdHJlc3VsdCA9IHtcblx0XHRcdHR5cGU6IFwiQm9vbFwiLFxuXHRcdFx0Qm9vbDogdmFsdWVcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdGlmICh2YWx1ZS50b1N0cmluZygpID09PSB2YWx1ZS50b0ZpeGVkKCkpIHtcblx0XHRcdHJlc3VsdCA9IHtcblx0XHRcdFx0dHlwZTogXCJJbnRcIixcblx0XHRcdFx0SW50OiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0ge1xuXHRcdFx0XHR0eXBlOiBcIkRlY2ltYWxcIixcblx0XHRcdFx0RGVjaW1hbDogdmFsdWVcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZS5pc0RlY2ltYWwgJiYgdmFsdWUuaXNEZWNpbWFsKCkpIHtcblx0XHRyZXN1bHQgPSB7XG5cdFx0XHR0eXBlOiBcIkRlY2ltYWxcIixcblx0XHRcdERlY2ltYWw6IHZhbHVlLnZhbHVlT2YoKVxuXHRcdH07XG5cdH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gXCJQYXRoXCIpIHtcblx0XHRyZXN1bHQgPSB7XG5cdFx0XHR0eXBlOiBcIlBhdGhcIixcblx0XHRcdFBhdGg6IHZhbHVlLnBhdGhcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09IFwiQW5ub3RhdGlvblBhdGhcIikge1xuXHRcdHJlc3VsdCA9IHtcblx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdEFubm90YXRpb25QYXRoOiB2YWx1ZS52YWx1ZVxuXHRcdH07XG5cdH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gXCJBcHBseVwiKSB7XG5cdFx0cmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0QXBwbHk6IHZhbHVlLkFwcGx5XG5cdFx0fTtcblx0fSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSBcIk51bGxcIikge1xuXHRcdHJlc3VsdCA9IHtcblx0XHRcdHR5cGU6IFwiTnVsbFwiXG5cdFx0fTtcblx0fSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSBcIlByb3BlcnR5UGF0aFwiKSB7XG5cdFx0cmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJQcm9wZXJ0eVBhdGhcIixcblx0XHRcdFByb3BlcnR5UGF0aDogdmFsdWUudmFsdWVcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSB7XG5cdFx0cmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiB2YWx1ZS52YWx1ZVxuXHRcdH07XG5cdH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBcIiRUeXBlXCIpKSB7XG5cdFx0cmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJSZWNvcmRcIixcblx0XHRcdFJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKSBhcyBBbm5vdGF0aW9uUmVjb3JkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvR2VuZXJpY1R5cGUoXG5cdHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLFxuXHRjb2xsZWN0aW9uSXRlbTogYW55XG4pOlxuXHR8IEFubm90YXRpb25SZWNvcmRcblx0fCBzdHJpbmdcblx0fCBQcm9wZXJ0eVBhdGhFeHByZXNzaW9uXG5cdHwgUGF0aEV4cHJlc3Npb25cblx0fCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoRXhwcmVzc2lvblxuXHR8IEFubm90YXRpb25QYXRoRXhwcmVzc2lvblxuXHR8IHVuZGVmaW5lZCB7XG5cdGlmICh0eXBlb2YgY29sbGVjdGlvbkl0ZW0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbkl0ZW07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGNvbGxlY3Rpb25JdGVtID09PSBcIm9iamVjdFwiKSB7XG5cdFx0aWYgKGNvbGxlY3Rpb25JdGVtLmhhc093blByb3BlcnR5KFwiJFR5cGVcIikpIHtcblx0XHRcdC8vIEFubm90YXRpb24gUmVjb3JkXG5cdFx0XHRjb25zdCBvdXRJdGVtOiBBbm5vdGF0aW9uUmVjb3JkID0ge1xuXHRcdFx0XHR0eXBlOiBjb2xsZWN0aW9uSXRlbS4kVHlwZSxcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXM6IFtdIGFzIGFueVtdXG5cdFx0XHR9O1xuXHRcdFx0Ly8gQ291bGQgdmFsaWRhdGUga2V5cyBhbmQgdHlwZSBiYXNlZCBvbiAkVHlwZVxuXHRcdFx0T2JqZWN0LmtleXMoY29sbGVjdGlvbkl0ZW0pLmZvckVhY2goY29sbGVjdGlvbktleSA9PiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRjb2xsZWN0aW9uS2V5ICE9PSBcIiRUeXBlXCIgJiZcblx0XHRcdFx0XHRjb2xsZWN0aW9uS2V5ICE9PSBcInRlcm1cIiAmJlxuXHRcdFx0XHRcdGNvbGxlY3Rpb25LZXkgIT09IFwiX19zb3VyY2VcIiAmJlxuXHRcdFx0XHRcdGNvbGxlY3Rpb25LZXkgIT09IFwicXVhbGlmaWVyXCIgJiZcblx0XHRcdFx0XHRjb2xsZWN0aW9uS2V5ICE9PSBcIkFjdGlvblRhcmdldFwiICYmXG5cdFx0XHRcdFx0Y29sbGVjdGlvbktleSAhPT0gXCJmdWxseVF1YWxpZmllZE5hbWVcIiAmJlxuXHRcdFx0XHRcdGNvbGxlY3Rpb25LZXkgIT09IFwiYW5ub3RhdGlvbnNcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGNvbGxlY3Rpb25JdGVtW2NvbGxlY3Rpb25LZXldO1xuXHRcdFx0XHRcdG91dEl0ZW0ucHJvcGVydHlWYWx1ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBjb2xsZWN0aW9uS2V5LFxuXHRcdFx0XHRcdFx0dmFsdWU6IHJldmVydFZhbHVlVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCB2YWx1ZSkgYXMgRXhwcmVzc2lvblxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbGxlY3Rpb25LZXkgPT09IFwiYW5ub3RhdGlvbnNcIikge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25zID0gY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV07XG5cdFx0XHRcdFx0b3V0SXRlbS5hbm5vdGF0aW9ucyA9IFtdO1xuXHRcdFx0XHRcdE9iamVjdC5rZXlzKGFubm90YXRpb25zKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihrZXkgPT4ga2V5ICE9PSBcIl9hbm5vdGF0aW9uc1wiKVxuXHRcdFx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHtcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMoYW5ub3RhdGlvbnNba2V5XSkuZm9yRWFjaCh0ZXJtID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJzZWRBbm5vdGF0aW9uID0gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbnNba2V5XVt0ZXJtXSk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFwYXJzZWRBbm5vdGF0aW9uLnRlcm0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHVuYWxpYXNlZFRlcm0gPSB1bmFsaWFzKHJlZmVyZW5jZXMsIGAke2tleX0uJHt0ZXJtfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHVuYWxpYXNlZFRlcm0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcXVhbGlmaWVkU3BsaXQgPSB1bmFsaWFzZWRUZXJtLnNwbGl0KFwiI1wiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbi50ZXJtID0gcXVhbGlmaWVkU3BsaXRbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChxdWFsaWZpZWRTcGxpdC5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbi5xdWFsaWZpZXIgPSBxdWFsaWZpZWRTcGxpdFsxXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRvdXRJdGVtLmFubm90YXRpb25zPy5wdXNoKHBhcnNlZEFubm90YXRpb24pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBvdXRJdGVtO1xuXHRcdH0gZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gXCJQcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogXCJQcm9wZXJ0eVBhdGhcIixcblx0XHRcdFx0UHJvcGVydHlQYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09IFwiQW5ub3RhdGlvblBhdGhcIikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLFxuXHRcdFx0XHRBbm5vdGF0aW9uUGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIGFubm90YXRpb246IEFubm90YXRpb25UZXJtPGFueT4pOiBFZG1Bbm5vdGF0aW9uIHtcblx0Y29uc3QgYmFzZUFubm90YXRpb246IEVkbUFubm90YXRpb24gPSB7XG5cdFx0dGVybTogYW5ub3RhdGlvbi50ZXJtLFxuXHRcdHF1YWxpZmllcjogYW5ub3RhdGlvbi5xdWFsaWZpZXJcblx0fTtcblx0aWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbikpIHtcblx0XHQvLyBDb2xsZWN0aW9uXG5cdFx0aWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoXCJhbm5vdGF0aW9uc1wiKSkge1xuXHRcdFx0YmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnMgPSBbXTtcblx0XHRcdGNvbnN0IGN1cnJlbnRBbm5vdGF0aW9ucyA9IChhbm5vdGF0aW9uIGFzIGFueSkuYW5ub3RhdGlvbnM7XG5cdFx0XHRPYmplY3Qua2V5cyhjdXJyZW50QW5ub3RhdGlvbnMpXG5cdFx0XHRcdC5maWx0ZXIoa2V5ID0+IGtleSAhPT0gXCJfYW5ub3RhdGlvbnNcIilcblx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHtcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhjdXJyZW50QW5ub3RhdGlvbnNba2V5XSkuZm9yRWFjaCh0ZXJtID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb24gPSByZXZlcnRUZXJtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBjdXJyZW50QW5ub3RhdGlvbnNba2V5XVt0ZXJtXSk7XG5cdFx0XHRcdFx0XHRpZiAoIXBhcnNlZEFubm90YXRpb24udGVybSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB1bmFsaWFzZWRUZXJtID0gdW5hbGlhcyhyZWZlcmVuY2VzLCBgJHtrZXl9LiR7dGVybX1gKTtcblx0XHRcdFx0XHRcdFx0aWYgKHVuYWxpYXNlZFRlcm0pIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWFsaWZpZWRTcGxpdCA9IHVuYWxpYXNlZFRlcm0uc3BsaXQoXCIjXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb24udGVybSA9IHF1YWxpZmllZFNwbGl0WzBdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChxdWFsaWZpZWRTcGxpdC5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uLnF1YWxpZmllciA9IHF1YWxpZmllZFNwbGl0WzFdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnM/LnB1c2gocGFyc2VkQW5ub3RhdGlvbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uYmFzZUFubm90YXRpb24sXG5cdFx0XHRjb2xsZWN0aW9uOiBhbm5vdGF0aW9uLm1hcChhbm5vID0+IHJldmVydENvbGxlY3Rpb25JdGVtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBhbm5vKSkgYXMgYW55W11cblx0XHR9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdHJldHVybiB7IC4uLmJhc2VBbm5vdGF0aW9uLCByZWNvcmQ6IHJldmVydENvbGxlY3Rpb25JdGVtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSBhcyBhbnkgfTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geyAuLi5iYXNlQW5ub3RhdGlvbiwgdmFsdWU6IHJldmVydFZhbHVlVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSB9O1xuXHR9XG59XG4iXX0=
|
|
2143
|
+
/******/
|
|
2144
|
+
})();
|
|
2145
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2Rpc3QvQW5ub3RhdGlvbkNvbnZlcnRlci5qcyJdLCJuYW1lcyI6WyJBbm5vdGF0aW9uQ29udmVydGVyIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIl9fdW51c2VkX3dlYnBhY2tfbW9kdWxlIiwiZXhwb3J0cyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiY29udmVydCIsInV0aWxzXzEiLCJQYXRoIiwicGF0aEV4cHJlc3Npb24iLCJ0YXJnZXROYW1lIiwiYW5ub3RhdGlvbnNUZXJtIiwidGVybSIsInBhdGgiLCJ0eXBlIiwiJHRhcmdldCIsImJ1aWxkT2JqZWN0TWFwIiwicmF3TWV0YWRhdGEiLCJfYSIsIm9iamVjdE1hcCIsInNjaGVtYSIsImVudGl0eUNvbnRhaW5lciIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVNldHMiLCJmb3JFYWNoIiwiZW50aXR5U2V0IiwiYWN0aW9ucyIsImFjdGlvbiIsImlzQm91bmQiLCJ1bkJvdW5kQWN0aW9uTmFtZSIsInNwbGl0IiwiX3R5cGUiLCJwdXNoIiwiYWN0aW9uU3BsaXQiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwiY29tcGxleFR5cGVzIiwiY29tcGxleFR5cGUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJ0eXBlRGVmaW5pdGlvbnMiLCJ0eXBlRGVmaW5pdGlvbiIsImVudGl0eVR5cGVzIiwiZW50aXR5VHlwZSIsImFubm90YXRpb25zIiwiZW50aXR5UHJvcGVydGllcyIsImNvbXBsZXhUeXBlRGVmaW5pdGlvbiIsImlzQ29tcGxleFR5cGVEZWZpbml0aW9uIiwiY29tcGxleFR5cGVQcm9wIiwiY29tcGxleFR5cGVQcm9wVGFyZ2V0IiwiYXNzaWduIiwibmFtZSIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydHkiLCJrZXlzIiwiYW5ub3RhdGlvblNvdXJjZSIsImFubm90YXRpb25MaXN0IiwiY3VycmVudFRhcmdldE5hbWUiLCJ1bmFsaWFzIiwicmVmZXJlbmNlcyIsInRhcmdldCIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uRlFOIiwicXVhbGlmaWVyIiwiY29tYmluZVBhdGgiLCJjdXJyZW50VGFyZ2V0Iiwic3RhcnRzV2l0aCIsImRlZmF1bHRSZWZlcmVuY2VzIiwiQUxMX0FOTk9UQVRJT05fRVJST1JTIiwiQU5OT1RBVElPTl9FUlJPUlMiLCJhZGRBbm5vdGF0aW9uRXJyb3JNZXNzYWdlIiwib0Vycm9yTXNnIiwiX3Jlc29sdmVUYXJnZXQiLCJwYXRoT25seSIsImluY2x1ZGVWaXNpdGVkT2JqZWN0cyIsInVuZGVmaW5lZCIsImFWaXNpdGVkT2JqZWN0cyIsInBhdGhTcGxpdCIsInRhcmdldFBhdGhTcGxpdCIsInBhdGhQYXJ0IiwiaW5kZXhPZiIsInNwbGl0dGVkUGF0aCIsImFubm90YXRpb25QYXRoIiwiY3VycmVudFBhdGgiLCJjdXJyZW50Q29udGV4dCIsInJlZHVjZSIsImN1cnJlbnRWYWx1ZSIsImxlbmd0aCIsInRhcmdldFR5cGUiLCJlbnRpdHlUeXBlTmFtZSIsInRhcmdldFR5cGVOYW1lIiwic291cmNlVHlwZSIsImlzRW50aXR5U2V0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJsYXN0SWR4IiwiY29udGV4dFRvUmVzb2x2ZSIsInN1YlRhcmdldCIsInZpc2l0ZWRPYmplY3RzIiwidmlzaXRlZFN1Yk9iamVjdCIsImNvbmNhdCIsInJldmVyc2UiLCJmaW5kIiwib2JqIiwiaW50ZXJtZWRpYXRlVGFyZ2V0IiwiaGFzT3duUHJvcGVydHkiLCJhbm5vdGF0aW9uVHlwZSIsImluZmVyVHlwZUZyb21UZXJtIiwibWVzc2FnZSIsImlzQW5ub3RhdGlvblBhdGgiLCJwYXRoU3RyIiwicGFyc2VWYWx1ZSIsInByb3BlcnR5VmFsdWUiLCJ2YWx1ZUZRTiIsImNvbnRleHQiLCJTdHJpbmciLCJJbnQiLCJCb29sIiwiRGVjaW1hbCIsIkRhdGUiLCJhbGlhcyIsIkVudW1NZW1iZXIiLCJQcm9wZXJ0eVBhdGgiLCJjdXJyZW50VGVybSIsIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJhbm5vdGF0aW9uVGFyZ2V0IiwiQW5ub3RhdGlvblBhdGgiLCJ1bnJlc29sdmVkQW5ub3RhdGlvbnMiLCJpbmxpbmUiLCJ0b1Jlc29sdmUiLCJwYXJzZVJlY29yZCIsIlJlY29yZCIsInBhcnNlQ29sbGVjdGlvbiIsIkNvbGxlY3Rpb24iLCJUZXJtVG9UeXBlcyIsImlzRXJyb3IiLCJpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24iLCJhbm5vdGF0aW9uQ29udGVudCIsImFubm90YXRpb25UZXJtIiwiJFR5cGUiLCJwYXJzZVJlY29yZFR5cGUiLCJyZWNvcmREZWZpbml0aW9uIiwiY3VycmVudEZRTiIsIkFycmF5IiwiaXNBcnJheSIsInN1YkFubm90YXRpb25MaXN0IiwiX19zb3VyY2UiLCJjdXJyZW50U291cmNlIiwiYWRkaXRpb25hbEFubm90YXRpb25zIiwicHJvcGVydHlWYWx1ZXMiLCJBY3Rpb25UYXJnZXQiLCJBY3Rpb24iLCJnZXRPckluZmVyQ29sbGVjdGlvblR5cGUiLCJjb2xsZWN0aW9uRGVmaW5pdGlvbiIsImZpcnN0Q29sSXRlbSIsInBhcmVudEZRTiIsImNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSIsIm1hcCIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5SWR4IiwicGF0aFZhbHVlIiwiYW5ub3RhdGlvbklkeCIsImFubm90YXRpb25Db2xsZWN0aW9uRWxlbWVudCIsIm5hdlByb3BlcnR5UGF0aCIsIm5hdlByb3BJZHgiLCJyZWNvcmRJZHgiLCJpZlZhbHVlIiwic3RyaW5nVmFsdWUiLCJFcnJvciIsImNvbnZlcnRBbm5vdGF0aW9uIiwicmVjb3JkIiwiY29sbGVjdGlvbiIsImNyZWF0ZVJlc29sdmVQYXRoRm4iLCJyZWxhdGl2ZVBhdGgiLCJyZXNvbHZlVjJOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZQcm9wIiwiYXNzb2NpYXRpb25zIiwib3V0TmF2UHJvcCIsInRhcmdldEFzc29jaWF0aW9uIiwiYXNzb2NpYXRpb24iLCJyZWxhdGlvbnNoaXAiLCJhc3NvY2lhdGlvbkVuZCIsImVuZCIsInJvbGUiLCJ0b1JvbGUiLCJpc0NvbGxlY3Rpb24iLCJtdWx0aXBsaWNpdHkiLCJyZXNvbHZlVjROYXZpZ2F0aW9uUHJvcGVydHkiLCJwYXJ0bmVyIiwiY29udGFpbnNUYXJnZXQiLCJyZWZlcmVudGlhbENvbnN0cmFpbnQiLCJpc1Y0TmF2aWdhdGlvblByb3BlcnR5IiwicHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwicmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwicmVzb2x2ZVBhdGgiLCJsaW5rQWN0aW9uc1RvRW50aXR5VHlwZSIsIm5hbWVzcGFjZSIsInNvdXJjZUVudGl0eVR5cGUiLCJyZXR1cm5FbnRpdHlUeXBlIiwicmV0dXJuVHlwZSIsImxpbmtFbnRpdHlUeXBlVG9FbnRpdHlTZXQiLCJrZXlQcm9wIiwiaXNLZXkiLCJsaW5rRW50aXR5VHlwZVRvU2luZ2xldG9uIiwic2luZ2xldG9ucyIsInNpbmdsZXRvbiIsImxpbmtQcm9wZXJ0aWVzVG9Db21wbGV4VHlwZXMiLCJsaW5rIiwiY29tcGxleFR5cGVOYW1lIiwic0Vycm9yIiwicHJlcGFyZUNvbXBsZXhUeXBlcyIsInNwbGl0VGVybSIsInRlcm1WYWx1ZSIsImFsaWFzZWRUZXJtIiwibGFzdERvdCIsInRlcm1BbGlhcyIsImNyZWF0ZUdsb2JhbFJlc29sdmUiLCJjb252ZXJ0ZWRPdXRwdXQiLCJzUGF0aCIsImFQYXRoU3BsaXQiLCJzaGlmdCIsImVudGl0eVNldE5hbWUiLCJldCIsIm9iamVjdFBhdGgiLCJ0YXJnZXRSZXNvbHV0aW9uIiwiam9pbiIsImVuc3VyZUFubm90YXRpb25zIiwidm9jQWxpYXMiLCJfYW5ub3RhdGlvbnMiLCJwcm9jZXNzQW5ub3RhdGlvbnMiLCJiT3ZlcnJpZGVFeGlzdGluZyIsIl9iIiwidm9jVGVybSIsInZvY1Rlcm1XaXRoUXVhbGlmaWVyIiwiQm9vbGVhbiIsInByb2Nlc3NVbnJlc29sdmVkVGFyZ2V0cyIsInVucmVzb2x2ZWRUYXJnZXRzIiwicmVzb2x2YWJsZSIsInRhcmdldFRvUmVzb2x2ZSIsInRhcmdldFN0ciIsInJlc29sdmVkVGFyZ2V0IiwidGFyZ2V0U3RyaW5nIiwidGVybUluZm8iLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXQiLCJmaW5kSW5kZXgiLCJyZWZlcmVuY2VBbm5vdGF0aW9uIiwic3BsaWNlIiwib2JqZWN0TWFwRWxlbWVudCIsImFsbFRhcmdldHMiLCJleHRyYVVucmVzb2x2ZWRBbm5vdGF0aW9ucyIsImJhc2VPYmoiLCJhbm5vdGF0aW9uUGFydCIsInRhcmdldFNwbGl0Iiwic2xpY2UiLCJjdXJyZW50T2JqIiwiZXh0cmFSZWZlcmVuY2VzIiwiZmlsdGVyIiwicmVmZXJlbmNlIiwiZGVmYXVsdFJlZiIsInZlcnNpb24iLCJkaWFnbm9zdGljcyIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsIm8iLCJtIiwiayIsImsyIiwiZGVzYyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9fZXNNb2R1bGUiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJnZXQiLCJfX2V4cG9ydFN0YXIiLCJwIiwicHJvdG90eXBlIiwiY2FsbCIsInVyaSIsInVuYWxpYXNlZFZhbHVlIiwicmV2ZXJzZVJlZmVyZW5jZU1hcCIsInJlZiIsImxhc3REb3RJbmRleCIsInByZUFsaWFzIiwicG9zdEFsaWFzIiwiYWxpYXNlZFZhbHVlIiwicmVmZXJlbmNlTWFwIiwiaXNEZWNpbWFsIiwidmFsdWVPZiIsInRvU3RyaW5nIiwicmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUiLCJyZXZlcnRPYmplY3RUb1Jhd1R5cGUiLCJyZXN1bHQiLCJhbm5vIiwicmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUiLCJpc1N0cmluZyIsInZhbHVlTWF0Y2hlcyIsIkFwcGx5IiwicmV2ZXJ0VmFsdWVUb1Jhd1R5cGUiLCJ2YWx1ZUNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJ0b0ZpeGVkIiwicmVzdHJpY3RlZEtleXMiLCJyZXZlcnRBbm5vdGF0aW9uc1RvUmF3VHlwZSIsImN1cnJlbnRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zIiwia2V5IiwicGFyc2VkQW5ub3RhdGlvbiIsInVuYWxpYXNlZFRlcm0iLCJxdWFsaWZpZWRTcGxpdCIsImNvbGxlY3Rpb25JdGVtIiwib3V0SXRlbSIsImNvbGxlY3Rpb25LZXkiLCJiYXNlQW5ub3RhdGlvbiIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwibW9kdWxlIiwiX193ZWJwYWNrX2V4cG9ydHNfXyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZBLElBQUlBLG1CQUFKO0FBQ0E7O0FBQVMsQ0FBQyxZQUFXO0FBQUU7O0FBQ3ZCO0FBQVU7QUFDVjs7QUFBVSxNQUFJQyxtQkFBbUIsR0FBSTtBQUVyQztBQUFNO0FBQ047QUFBTyxjQUFTQyx1QkFBVCxFQUFrQ0MsT0FBbEMsRUFBMkNDLG1CQUEzQyxFQUFnRTtBQUd2RUMsTUFBQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCSCxPQUF0QixFQUErQixZQUEvQixFQUE4QztBQUFFSSxRQUFBQSxLQUFLLEVBQUU7QUFBVCxPQUE5QztBQUNBSixNQUFBQSxPQUFPLENBQUNLLE9BQVIsR0FBa0IsS0FBSyxDQUF2Qjs7QUFDQSxVQUFNQyxPQUFPLEdBQUdMLG1CQUFtQixDQUFDLEVBQUQsQ0FBbkM7QUFDQTtBQUNBO0FBQ0E7OztBQVJ1RSxVQVNqRU0sSUFUaUU7QUFVbkU7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0ksb0JBQVlDLGNBQVosRUFBNEJDLFVBQTVCLEVBQXdDQyxlQUF4QyxFQUF5REMsSUFBekQsRUFBK0Q7QUFDM0QsYUFBS0MsSUFBTCxHQUFZSixjQUFjLENBQUNELElBQTNCO0FBQ0EsYUFBS00sSUFBTCxHQUFZLE1BQVo7QUFDQSxhQUFLQyxPQUFMLEdBQWVM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QVUsTUFBSXdCLHdCQUF3QixHQUFHLEVBQS9CO0FBQ1Y7O0FBQ0E7QUFBVTs7QUFDVjs7QUFBVSxXQUFTelQsbUJBQVQsQ0FBNkIwVCxRQUE3QixFQUF1QztBQUNqRDtBQUFXOztBQUNYO0FBQVcsUUFBSUMsWUFBWSxHQUFHRix3QkFBd0IsQ0FBQ0MsUUFBRCxDQUEzQztBQUNYOztBQUFXLFFBQUlDLFlBQVksS0FBS2xQLFNBQXJCLEVBQWdDO0FBQzNDO0FBQVksYUFBT2tQLFlBQVksQ0FBQzVULE9BQXBCO0FBQ1o7QUFBWTtBQUNaO0FBQVc7O0FBQ1g7OztBQUFXLFFBQUk2VCxNQUFNLEdBQUdILHdCQUF3QixDQUFDQyxRQUFELENBQXhCLEdBQXFDO0FBQzdEO0FBQVk7O0FBQ1o7QUFBWTs7QUFDWjtBQUFZM1QsTUFBQUEsT0FBTyxFQUFFO0FBQ3JCOztBQUo2RCxLQUFsRDtBQUtYOztBQUNBO0FBQVc7O0FBQ1g7O0FBQVdGLElBQUFBLG1CQUFtQixDQUFDNlQsUUFBRCxDQUFuQixDQUE4QnRDLElBQTlCLENBQW1Dd0MsTUFBTSxDQUFDN1QsT0FBMUMsRUFBbUQ2VCxNQUFuRCxFQUEyREEsTUFBTSxDQUFDN1QsT0FBbEUsRUFBMkVDLG1CQUEzRTtBQUNYOztBQUNBO0FBQVc7O0FBQ1g7OztBQUFXLFdBQU80VCxNQUFNLENBQUM3VCxPQUFkO0FBQ1g7QUFBVztBQUNYOztBQUNBOztBQUNBOztBQUNBO0FBQVU7O0FBQ1Y7QUFBVTs7QUFDVjtBQUFVOztBQUNWOzs7QUFBVSxNQUFJOFQsbUJBQW1CLEdBQUc3VCxtQkFBbUIsQ0FBQyxHQUFELENBQTdDO0FBQ1Y7OztBQUFVSixFQUFBQSxtQkFBbUIsR0FBR2lVLG1CQUF0QjtBQUNWOztBQUNBO0FBQVUsQ0F0ekREIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgQW5ub3RhdGlvbkNvbnZlcnRlcjtcbi8qKioqKiovIChmdW5jdGlvbigpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHRcInVzZSBzdHJpY3RcIjtcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xuXG4vKioqLyA4NzU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7IHZhbHVlOiB0cnVlIH0pKTtcbmV4cG9ydHMuY29udmVydCA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcbi8qKlxuICpcbiAqL1xuY2xhc3MgUGF0aCB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBhdGhFeHByZXNzaW9uXG4gICAgICogQHBhcmFtIHRhcmdldE5hbWVcbiAgICAgKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtXG4gICAgICogQHBhcmFtIHRlcm1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXRoRXhwcmVzc2lvbiwgdGFyZ2V0TmFtZSwgYW5ub3RhdGlvbnNUZXJtLCB0ZXJtKSB7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGhFeHByZXNzaW9uLlBhdGg7XG4gICAgICAgIHRoaXMudHlwZSA9ICdQYXRoJztcbiAgICAgICAgdGhpcy4kdGFyZ2V0ID0gdGFyZ2V0TmFtZTtcbiAgICAgICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uc1Rlcm0gPSBhbm5vdGF0aW9uc1Rlcm07XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgTWFwIGJhc2VkIG9uIHRoZSBmdWxseVF1YWxpZmllZE5hbWUgb2YgZWFjaCBvYmplY3QgcGFydCBvZiB0aGUgbWV0YWRhdGEuXG4gKlxuICogQHBhcmFtIHJhd01ldGFkYXRhIHRoZSByYXdNZXRhZGF0YSB3ZSdyZSB3b3JraW5nIGFnYWluc3RcbiAqIEByZXR1cm5zIHRoZSBvYmplY3RtYXAgZm9yIGVhc3kgYWNjZXNzIHRvIHRoZSBkaWZmZXJlbnQgb2JqZWN0IG9mIHRoZSBtZXRhZGF0YVxuICovXG5mdW5jdGlvbiBidWlsZE9iamVjdE1hcChyYXdNZXRhZGF0YSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvYmplY3RNYXAgPSB7fTtcbiAgICBpZiAoKF9hID0gcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eUNvbnRhaW5lcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICBvYmplY3RNYXBbcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eUNvbnRhaW5lci5mdWxseVF1YWxpZmllZE5hbWVdID0gcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eUNvbnRhaW5lcjtcbiAgICB9XG4gICAgcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eVNldHMuZm9yRWFjaCgoZW50aXR5U2V0KSA9PiB7XG4gICAgICAgIG9iamVjdE1hcFtlbnRpdHlTZXQuZnVsbHlRdWFsaWZpZWROYW1lXSA9IGVudGl0eVNldDtcbiAgICB9KTtcbiAgICByYXdNZXRhZGF0YS5zY2hlbWEuYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgb2JqZWN0TWFwW2FjdGlvbi5mdWxseVF1YWxpZmllZE5hbWVdID0gYWN0aW9uO1xuICAgICAgICBpZiAoYWN0aW9uLmlzQm91bmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuQm91bmRBY3Rpb25OYW1lID0gYWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdCgnKCcpWzBdO1xuICAgICAgICAgICAgaWYgKCFvYmplY3RNYXBbdW5Cb3VuZEFjdGlvbk5hbWVdKSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0TWFwW3VuQm91bmRBY3Rpb25OYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgX3R5cGU6ICdVbmJvdW5kR2VuZXJpY0FjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9iamVjdE1hcFt1bkJvdW5kQWN0aW9uTmFtZV0uYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25TcGxpdCA9IGFjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoJygnKTtcbiAgICAgICAgICAgIG9iamVjdE1hcFtgJHthY3Rpb25TcGxpdFsxXS5zcGxpdCgnKScpWzBdfS8ke2FjdGlvblNwbGl0WzBdfWBdID0gYWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGFjdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlcikgPT4ge1xuICAgICAgICAgICAgb2JqZWN0TWFwW3BhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWVdID0gcGFyYW1ldGVyO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByYXdNZXRhZGF0YS5zY2hlbWEuY29tcGxleFR5cGVzLmZvckVhY2goKGNvbXBsZXhUeXBlKSA9PiB7XG4gICAgICAgIG9iamVjdE1hcFtjb21wbGV4VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdID0gY29tcGxleFR5cGU7XG4gICAgICAgIGNvbXBsZXhUeXBlLnByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgIG9iamVjdE1hcFtwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0gcHJvcGVydHk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJhd01ldGFkYXRhLnNjaGVtYS50eXBlRGVmaW5pdGlvbnMuZm9yRWFjaCgodHlwZURlZmluaXRpb24pID0+IHtcbiAgICAgICAgb2JqZWN0TWFwW3R5cGVEZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSB0eXBlRGVmaW5pdGlvbjtcbiAgICB9KTtcbiAgICByYXdNZXRhZGF0YS5zY2hlbWEuZW50aXR5VHlwZXMuZm9yRWFjaCgoZW50aXR5VHlwZSkgPT4ge1xuICAgICAgICBlbnRpdHlUeXBlLmFubm90YXRpb25zID0ge307IC8vICdhbm5vdGF0aW9ucycgcHJvcGVydHkgaXMgbWFuZGF0b3J5XG4gICAgICAgIG9iamVjdE1hcFtlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBlbnRpdHlUeXBlO1xuICAgICAgICBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgIG9iamVjdE1hcFtwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0gcHJvcGVydHk7XG4gICAgICAgICAgICAvLyBIYW5kbGUgY29tcGxleCB0eXBlc1xuICAgICAgICAgICAgY29uc3QgY29tcGxleFR5cGVEZWZpbml0aW9uID0gb2JqZWN0TWFwW3Byb3BlcnR5LnR5cGVdO1xuICAgICAgICAgICAgaWYgKCgwLCB1dGlsc18xLmlzQ29tcGxleFR5cGVEZWZpbml0aW9uKShjb21wbGV4VHlwZURlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29tcGxleFR5cGVEZWZpbml0aW9uLnByb3BlcnRpZXMuZm9yRWFjaCgoY29tcGxleFR5cGVQcm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhUeXBlUHJvcFRhcmdldCA9IE9iamVjdC5hc3NpZ24oY29tcGxleFR5cGVQcm9wLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdHlwZTogJ1Byb3BlcnR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogcHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lICsgJy8nICsgY29tcGxleFR5cGVQcm9wLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdE1hcFtjb21wbGV4VHlwZVByb3BUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lXSA9IGNvbXBsZXhUeXBlUHJvcFRhcmdldDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaCgobmF2UHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgIG9iamVjdE1hcFtuYXZQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0gbmF2UHJvcGVydHk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIE9iamVjdC5rZXlzKHJhd01ldGFkYXRhLnNjaGVtYS5hbm5vdGF0aW9ucykuZm9yRWFjaCgoYW5ub3RhdGlvblNvdXJjZSkgPT4ge1xuICAgICAgICByYXdNZXRhZGF0YS5zY2hlbWEuYW5ub3RhdGlvbnNbYW5ub3RhdGlvblNvdXJjZV0uZm9yRWFjaCgoYW5ub3RhdGlvbkxpc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXROYW1lID0gKDAsIHV0aWxzXzEudW5hbGlhcykocmF3TWV0YWRhdGEucmVmZXJlbmNlcywgYW5ub3RhdGlvbkxpc3QudGFyZ2V0KTtcbiAgICAgICAgICAgIGFubm90YXRpb25MaXN0LmFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYW5ub3RhdGlvbkZRTiA9IGAke2N1cnJlbnRUYXJnZXROYW1lfUAkeygwLCB1dGlsc18xLnVuYWxpYXMpKHJhd01ldGFkYXRhLnJlZmVyZW5jZXMsIGFubm90YXRpb24udGVybSl9YDtcbiAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbi5xdWFsaWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbkZRTiArPSBgIyR7YW5ub3RhdGlvbi5xdWFsaWZpZXJ9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqZWN0TWFwW2Fubm90YXRpb25GUU5dID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IGFubm90YXRpb25GUU47XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iamVjdE1hcDtcbn1cbi8qKlxuICogQ29tYmluZSB0d28gc3RyaW5ncyByZXByZXNlbnRpbmcgcGF0aCBpbiB0aGUgbWV0YW1vZGVsIHdoaWxlIGVuc3VyaW5nIHRoZWlyIHNwZWNpZmljaXRpZXMgKGFubm90YXRpb24uLi4pIGFyZSByZXNwZWN0ZWQuXG4gKlxuICogQHBhcmFtIGN1cnJlbnRUYXJnZXQgdGhlIGN1cnJlbnQgcGF0aFxuICogQHBhcmFtIHBhdGggdGhlIHBhcnQgd2Ugd2FudCB0byBhcHBlbmRcbiAqIEByZXR1cm5zIHRoZSBjb21wbGV0ZSBwYXRoIGluY2x1ZGluZyB0aGUgZXh0ZW5zaW9uLlxuICovXG5mdW5jdGlvbiBjb21iaW5lUGF0aChjdXJyZW50VGFyZ2V0LCBwYXRoKSB7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50VGFyZ2V0ICsgKDAsIHV0aWxzXzEudW5hbGlhcykodXRpbHNfMS5kZWZhdWx0UmVmZXJlbmNlcywgcGF0aCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gY3VycmVudFRhcmdldCArICcvJyArIHBhdGg7XG4gICAgfVxufVxuY29uc3QgQUxMX0FOTk9UQVRJT05fRVJST1JTID0ge307XG5sZXQgQU5OT1RBVElPTl9FUlJPUlMgPSBbXTtcbi8qKlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBvRXJyb3JNc2dcbiAqL1xuZnVuY3Rpb24gYWRkQW5ub3RhdGlvbkVycm9yTWVzc2FnZShwYXRoLCBvRXJyb3JNc2cpIHtcbiAgICBpZiAoIUFMTF9BTk5PVEFUSU9OX0VSUk9SU1twYXRoXSkge1xuICAgICAgICBBTExfQU5OT1RBVElPTl9FUlJPUlNbcGF0aF0gPSBbb0Vycm9yTXNnXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIEFMTF9BTk5PVEFUSU9OX0VSUk9SU1twYXRoXS5wdXNoKG9FcnJvck1zZyk7XG4gICAgfVxufVxuLyoqXG4gKiBSZXNvbHZlcyBhIHNwZWNpZmljIHBhdGggYmFzZWQgb24gdGhlIG9iamVjdE1hcC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0TWFwXG4gKiBAcGFyYW0gY3VycmVudFRhcmdldFxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBwYXRoT25seVxuICogQHBhcmFtIGluY2x1ZGVWaXNpdGVkT2JqZWN0c1xuICogQHBhcmFtIGFubm90YXRpb25zVGVybVxuICogQHJldHVybnMgdGhlIHJlc29sdmVkIG9iamVjdFxuICovXG5mdW5jdGlvbiBfcmVzb2x2ZVRhcmdldChvYmplY3RNYXAsIGN1cnJlbnRUYXJnZXQsIHBhdGgsIHBhdGhPbmx5ID0gZmFsc2UsIGluY2x1ZGVWaXNpdGVkT2JqZWN0cyA9IGZhbHNlLCBhbm5vdGF0aW9uc1Rlcm0pIHtcbiAgICBsZXQgb0Vycm9yTXNnO1xuICAgIGlmICghcGF0aCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBhVmlzaXRlZE9iamVjdHMgPSBbXTtcbiAgICBpZiAoY3VycmVudFRhcmdldCAmJiBjdXJyZW50VGFyZ2V0Ll90eXBlID09PSAnUHJvcGVydHknKSB7XG4gICAgICAgIGN1cnJlbnRUYXJnZXQgPSBvYmplY3RNYXBbY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoJy8nKVswXV07XG4gICAgfVxuICAgIHBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSwgcGF0aCk7XG4gICAgY29uc3QgcGF0aFNwbGl0ID0gcGF0aC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHRhcmdldFBhdGhTcGxpdCA9IFtdO1xuICAgIHBhdGhTcGxpdC5mb3JFYWNoKChwYXRoUGFydCkgPT4ge1xuICAgICAgICAvLyBTZXBhcmF0ZSBvdXQgdGhlIGFubm90YXRpb25cbiAgICAgICAgaWYgKHBhdGhQYXJ0LmluZGV4T2YoJ0AnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IFtzcGxpdHRlZFBhdGgsIGFubm90YXRpb25QYXRoXSA9IHBhdGhQYXJ0LnNwbGl0KCdAJyk7XG4gICAgICAgICAgICB0YXJnZXRQYXRoU3BsaXQucHVzaChzcGxpdHRlZFBhdGgpO1xuICAgICAgICAgICAgdGFyZ2V0UGF0aFNwbGl0LnB1c2goYEAke2Fubm90YXRpb25QYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aFNwbGl0LnB1c2gocGF0aFBhcnQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGN1cnJlbnRQYXRoID0gcGF0aDtcbiAgICBsZXQgY3VycmVudENvbnRleHQgPSBjdXJyZW50VGFyZ2V0O1xuICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldFBhdGhTcGxpdC5yZWR1Y2UoKGN1cnJlbnRWYWx1ZSwgcGF0aFBhcnQpID0+IHtcbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSAnJFR5cGUnICYmIGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gJ0VudGl0eVR5cGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgocGF0aFBhcnQgPT09ICdAJHVpNS5vdmVybG9hZCcgfHwgcGF0aFBhcnQgPT09ICcwJykgJiYgY3VycmVudFZhbHVlLl90eXBlID09PSAnQWN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBFbXB0eSBQYXRoIGFmdGVyIGFuIGVudGl0eVNldCBtZWFucyBlbnRpdHlUeXBlXG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gJ0VudGl0eVNldCcgJiYgY3VycmVudFZhbHVlLmVudGl0eVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFWaXNpdGVkT2JqZWN0cy5wdXNoKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5lbnRpdHlUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuX3R5cGUgPT09ICdOYXZpZ2F0aW9uUHJvcGVydHknICYmIGN1cnJlbnRWYWx1ZS50YXJnZXRUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuICAgICAgICAgICAgICAgICAgICBhVmlzaXRlZE9iamVjdHMucHVzaChjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUudGFyZ2V0VHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluY2x1ZGVWaXNpdGVkT2JqZWN0cyAmJiBjdXJyZW50VmFsdWUgIT09IG51bGwgJiYgY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFWaXNpdGVkT2JqZWN0cy5wdXNoKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoID0gcGF0aFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSAnRW50aXR5U2V0JyAmJiBwYXRoUGFydCA9PT0gJyRUeXBlJykge1xuICAgICAgICAgICAgY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlLnRhcmdldFR5cGU7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gJ0VudGl0eVNldCcgJiYgY3VycmVudFZhbHVlLmVudGl0eVR5cGUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoY3VycmVudFZhbHVlLmVudGl0eVR5cGVOYW1lLCBwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSAnTmF2aWdhdGlvblByb3BlcnR5Jykge1xuICAgICAgICAgICAgY3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG4gICAgICAgICAgICBpZiAoIW9iamVjdE1hcFtjdXJyZW50UGF0aF0pIHtcbiAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayBsb2cgZXJyb3JcbiAgICAgICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS50YXJnZXRUeXBlTmFtZSwgcGF0aFBhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gJ1Byb3BlcnR5Jykge1xuICAgICAgICAgICAgLy8gQ29tcGxleFR5cGUgb3IgUHJvcGVydHlcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUudGFyZ2V0VHlwZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoY3VycmVudFZhbHVlLnRhcmdldFR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLCBwYXRoUGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJyZW50VmFsdWUuX3R5cGUgPT09ICdBY3Rpb24nICYmIGN1cnJlbnRWYWx1ZS5pc0JvdW5kKSB7XG4gICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIGlmIChwYXRoUGFydCA9PT0gJyRQYXJhbWV0ZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZS5wYXJhbWV0ZXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvYmplY3RNYXBbY3VycmVudFBhdGhdKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhdGggPSBjb21iaW5lUGF0aChjdXJyZW50VmFsdWUuc291cmNlVHlwZSwgcGF0aFBhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS5fdHlwZSA9PT0gJ0FjdGlvblBhcmFtZXRlcicgJiYgY3VycmVudFZhbHVlLmlzRW50aXR5U2V0KSB7XG4gICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRWYWx1ZS50eXBlLCBwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VycmVudFZhbHVlLl90eXBlID09PSAnQWN0aW9uUGFyYW1ldGVyJyAmJiAhY3VycmVudFZhbHVlLmlzRW50aXR5U2V0KSB7XG4gICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLnN1YnN0cmluZygwLCBjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5sYXN0SW5kZXhPZignLycpKSwgcGF0aFBhcnQpO1xuICAgICAgICAgICAgaWYgKCFvYmplY3RNYXBbY3VycmVudFBhdGhdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RJZHggPSBjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5sYXN0SW5kZXhPZignLycpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0SWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0SWR4ID0gY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKG9iamVjdE1hcFtjdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZS5zdWJzdHJpbmcoMCwgbGFzdElkeCldLnNvdXJjZVR5cGUsIHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoY3VycmVudFZhbHVlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgcGF0aFBhcnQpO1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ICE9PSAnbmFtZScgJiYgY3VycmVudFZhbHVlW3BhdGhQYXJ0XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZVtwYXRoUGFydF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoUGFydCA9PT0gJyRBbm5vdGF0aW9uUGF0aCcgJiYgY3VycmVudFZhbHVlLiR0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0VG9SZXNvbHZlID0gb2JqZWN0TWFwW2N1cnJlbnRWYWx1ZS5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoJ0AnKVswXV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViVGFyZ2V0ID0gX3Jlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjb250ZXh0VG9SZXNvbHZlLCBjdXJyZW50VmFsdWUudmFsdWUsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzdWJUYXJnZXQudmlzaXRlZE9iamVjdHMuZm9yRWFjaCgodmlzaXRlZFN1Yk9iamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYVZpc2l0ZWRPYmplY3RzLmluZGV4T2YodmlzaXRlZFN1Yk9iamVjdCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhVmlzaXRlZE9iamVjdHMucHVzaCh2aXNpdGVkU3ViT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdWJUYXJnZXQudGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocGF0aFBhcnQgPT09ICckUGF0aCcgJiYgY3VycmVudFZhbHVlLiR0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dCA9IGFWaXNpdGVkT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KClcbiAgICAgICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAuZmluZCgob2JqKSA9PiBvYmouX3R5cGUgPT09ICdFbnRpdHlUeXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICBvYmouX3R5cGUgPT09ICdFbnRpdHlTZXQnIHx8XG4gICAgICAgICAgICAgICAgICAgIG9iai5fdHlwZSA9PT0gJ05hdmlnYXRpb25Qcm9wZXJ0eScpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJUYXJnZXQgPSBfcmVzb2x2ZVRhcmdldChvYmplY3RNYXAsIGN1cnJlbnRDb250ZXh0LCBjdXJyZW50VmFsdWUucGF0aCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzdWJUYXJnZXQudmlzaXRlZE9iamVjdHMuZm9yRWFjaCgodmlzaXRlZFN1Yk9iamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFWaXNpdGVkT2JqZWN0cy5pbmRleE9mKHZpc2l0ZWRTdWJPYmplY3QpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWaXNpdGVkT2JqZWN0cy5wdXNoKHZpc2l0ZWRTdWJPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YlRhcmdldC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWUuJHRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhdGhQYXJ0LnN0YXJ0c1dpdGgoJyRQYXRoJykgJiYgY3VycmVudFZhbHVlLiR0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm1lZGlhdGVUYXJnZXQgPSBjdXJyZW50VmFsdWUuJHRhcmdldDtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGF0aCA9IGNvbWJpbmVQYXRoKGludGVybWVkaWF0ZVRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0LnN1YnN0cmluZyg1KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50VmFsdWUuaGFzT3duUHJvcGVydHkoJyRUeXBlJykgJiYgIW9iamVjdE1hcFtjdXJyZW50UGF0aF0pIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdyBhbiBhbm5vdGF0aW9uIHZhbHVlXG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5VHlwZSA9IG9iamVjdE1hcFtjdXJyZW50VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KCdAJylbMF1dO1xuICAgICAgICAgICAgICAgIGlmIChlbnRpdHlUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXRoID0gY29tYmluZVBhdGgoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIHBhdGhQYXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdE1hcFtjdXJyZW50UGF0aF07XG4gICAgfSwgbnVsbCk7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgaWYgKGFubm90YXRpb25zVGVybSkge1xuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvblR5cGUgPSBpbmZlclR5cGVGcm9tVGVybShhbm5vdGF0aW9uc1Rlcm0sIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgb0Vycm9yTXNnID0ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVbmFibGUgdG8gcmVzb2x2ZSB0aGUgcGF0aCBleHByZXNzaW9uOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvbiBUZXJtID0gJyArXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zVGVybSArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxSZWNvcmQgVHlwZSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZSArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxBbm5vdGF0aW9uUGF0aCA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJz4nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWRkQW5ub3RhdGlvbkVycm9yTWVzc2FnZShwYXRoLCBvRXJyb3JNc2cpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb0Vycm9yTXNnID0ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVbmFibGUgdG8gcmVzb2x2ZSB0aGUgcGF0aCBleHByZXNzaW9uOiAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnSGludDogQ2hlY2sgYW5kIGNvcnJlY3QgdGhlIHBhdGggdmFsdWVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBtZXRhZGF0YSAoYW5ub3RhdGlvbi54bWwgZmlsZSBvciBDRFMgYW5ub3RhdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbik6IFxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb24gVGVybSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoU3BsaXRbMF0gK1xuICAgICAgICAgICAgICAgICAgICAnPicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8UHJvcGVydHlWYWx1ZSAgUGF0aD0gJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGhTcGxpdFsxXSArXG4gICAgICAgICAgICAgICAgICAgICc+J1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFkZEFubm90YXRpb25FcnJvck1lc3NhZ2UocGF0aCwgb0Vycm9yTXNnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGF0aE9ubHkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXRoO1xuICAgIH1cbiAgICBpZiAoaW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2aXNpdGVkT2JqZWN0czogYVZpc2l0ZWRPYmplY3RzLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbi8qKlxuICogVHlwZWd1YXJkIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGNvbnRhaW5zIGFuIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHBhdGhTdHIgdGhlIHBhdGggdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gYW5ub3RhdGlvbiBpbiB0aGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gaXNBbm5vdGF0aW9uUGF0aChwYXRoU3RyKSB7XG4gICAgcmV0dXJuIHBhdGhTdHIuaW5kZXhPZignQCcpICE9PSAtMTtcbn1cbmZ1bmN0aW9uIHBhcnNlVmFsdWUocHJvcGVydHlWYWx1ZSwgdmFsdWVGUU4sIG9iamVjdE1hcCwgY29udGV4dCkge1xuICAgIGlmIChwcm9wZXJ0eVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3dpdGNoIChwcm9wZXJ0eVZhbHVlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLlN0cmluZztcbiAgICAgICAgY2FzZSAnSW50JzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLkludDtcbiAgICAgICAgY2FzZSAnQm9vbCc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5Cb29sO1xuICAgICAgICBjYXNlICdEZWNpbWFsJzpcbiAgICAgICAgICAgIHJldHVybiAoMCwgdXRpbHNfMS5EZWNpbWFsKShwcm9wZXJ0eVZhbHVlLkRlY2ltYWwpO1xuICAgICAgICBjYXNlICdEYXRlJzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLkRhdGU7XG4gICAgICAgIGNhc2UgJ0VudW1NZW1iZXInOlxuICAgICAgICAgICAgcmV0dXJuICgwLCB1dGlsc18xLmFsaWFzKShjb250ZXh0LnJhd01ldGFkYXRhLnJlZmVyZW5jZXMsIHByb3BlcnR5VmFsdWUuRW51bU1lbWJlcik7XG4gICAgICAgIGNhc2UgJ1Byb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IHZhbHVlRlFOLFxuICAgICAgICAgICAgICAgICR0YXJnZXQ6IF9yZXNvbHZlVGFyZ2V0KG9iamVjdE1hcCwgY29udGV4dC5jdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCwgZmFsc2UsIGZhbHNlLCBjb250ZXh0LmN1cnJlbnRUZXJtKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcGVydHlWYWx1ZS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuICAgICAgICAgICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogdmFsdWVGUU4sXG4gICAgICAgICAgICAgICAgJHRhcmdldDogX3Jlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjb250ZXh0LmN1cnJlbnRUYXJnZXQsIHByb3BlcnR5VmFsdWUuTmF2aWdhdGlvblByb3BlcnR5UGF0aCwgZmFsc2UsIGZhbHNlLCBjb250ZXh0LmN1cnJlbnRUZXJtKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnQW5ub3RhdGlvblBhdGgnOlxuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvblRhcmdldCA9IF9yZXNvbHZlVGFyZ2V0KG9iamVjdE1hcCwgY29udGV4dC5jdXJyZW50VGFyZ2V0LCAoMCwgdXRpbHNfMS51bmFsaWFzKShjb250ZXh0LnJhd01ldGFkYXRhLnJlZmVyZW5jZXMsIHByb3BlcnR5VmFsdWUuQW5ub3RhdGlvblBhdGgpLCB0cnVlLCBmYWxzZSwgY29udGV4dC5jdXJyZW50VGVybSk7XG4gICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uUGF0aCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnQW5ub3RhdGlvblBhdGgnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwcm9wZXJ0eVZhbHVlLkFubm90YXRpb25QYXRoLFxuICAgICAgICAgICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogdmFsdWVGUU4sXG4gICAgICAgICAgICAgICAgJHRhcmdldDogYW5ub3RhdGlvblRhcmdldCxcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uc1Rlcm06IGNvbnRleHQuY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgdGVybTogJycsXG4gICAgICAgICAgICAgICAgcGF0aDogJydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb250ZXh0LnVucmVzb2x2ZWRBbm5vdGF0aW9ucy5wdXNoKHsgaW5saW5lOiBmYWxzZSwgdG9SZXNvbHZlOiBhbm5vdGF0aW9uUGF0aCB9KTtcbiAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uUGF0aDtcbiAgICAgICAgY2FzZSAnUGF0aCc6XG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0ID0gX3Jlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjb250ZXh0LmN1cnJlbnRUYXJnZXQsIHByb3BlcnR5VmFsdWUuUGF0aCwgdHJ1ZSwgZmFsc2UsIGNvbnRleHQuY3VycmVudFRlcm0pO1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IG5ldyBQYXRoKHByb3BlcnR5VmFsdWUsICR0YXJnZXQsIGNvbnRleHQuY3VycmVudFRlcm0sICcnKTtcbiAgICAgICAgICAgIGNvbnRleHQudW5yZXNvbHZlZEFubm90YXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlubGluZTogaXNBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eVZhbHVlLlBhdGgpLFxuICAgICAgICAgICAgICAgIHRvUmVzb2x2ZTogcGF0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgY2FzZSAnUmVjb3JkJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVJlY29yZChwcm9wZXJ0eVZhbHVlLlJlY29yZCwgdmFsdWVGUU4sIG9iamVjdE1hcCwgY29udGV4dCk7XG4gICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29sbGVjdGlvbihwcm9wZXJ0eVZhbHVlLkNvbGxlY3Rpb24sIHZhbHVlRlFOLCBvYmplY3RNYXAsIGNvbnRleHQpO1xuICAgICAgICBjYXNlICdBcHBseSc6XG4gICAgICAgIGNhc2UgJ051bGwnOlxuICAgICAgICBjYXNlICdOb3QnOlxuICAgICAgICBjYXNlICdFcSc6XG4gICAgICAgIGNhc2UgJ05lJzpcbiAgICAgICAgY2FzZSAnR3QnOlxuICAgICAgICBjYXNlICdHZSc6XG4gICAgICAgIGNhc2UgJ0x0JzpcbiAgICAgICAgY2FzZSAnTGUnOlxuICAgICAgICBjYXNlICdJZic6XG4gICAgICAgIGNhc2UgJ0FuZCc6XG4gICAgICAgIGNhc2UgJ09yJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xuICAgIH1cbn1cbi8qKlxuICogSW5mZXIgdGhlIHR5cGUgb2YgYSB0ZXJtIGJhc2VkIG9uIGl0cyB0eXBlLlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uc1Rlcm0gVGhlIGFubm90YXRpb24gdGVybVxuICogQHBhcmFtIGFubm90YXRpb25UYXJnZXQgdGhlIGFubm90YXRpb24gdGFyZ2V0XG4gKiBAcmV0dXJucyB0aGUgaW5mZXJyZWQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaW5mZXJUeXBlRnJvbVRlcm0oYW5ub3RhdGlvbnNUZXJtLCBhbm5vdGF0aW9uVGFyZ2V0KSB7XG4gICAgY29uc3QgdGFyZ2V0VHlwZSA9IHV0aWxzXzEuVGVybVRvVHlwZXNbYW5ub3RhdGlvbnNUZXJtXTtcbiAgICBjb25zdCBvRXJyb3JNc2cgPSB7XG4gICAgICAgIGlzRXJyb3I6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgVGhlIHR5cGUgb2YgdGhlIHJlY29yZCB1c2VkIHdpdGhpbiB0aGUgdGVybSAke2Fubm90YXRpb25zVGVybX0gd2FzIG5vdCBkZWZpbmVkIGFuZCB3YXMgaW5mZXJyZWQgYXMgJHt0YXJnZXRUeXBlfS5cbkhpbnQ6IElmIHBvc3NpYmxlLCB0cnkgdG8gbWFpbnRhaW4gdGhlIFR5cGUgcHJvcGVydHkgZm9yIGVhY2ggUmVjb3JkLlxuPEFubm90YXRpb25zIFRhcmdldD1cIiR7YW5ub3RhdGlvblRhcmdldH1cIj5cblx0PEFubm90YXRpb24gVGVybT1cIiR7YW5ub3RhdGlvbnNUZXJtfVwiPlxuXHRcdDxSZWNvcmQ+Li4uPC9SZWNvcmQ+XG5cdDwvQW5ub3RhdGlvbj5cbjwvQW5ub3RhdGlvbnM+YFxuICAgIH07XG4gICAgYWRkQW5ub3RhdGlvbkVycm9yTWVzc2FnZShhbm5vdGF0aW9uVGFyZ2V0ICsgJy8nICsgYW5ub3RhdGlvbnNUZXJtLCBvRXJyb3JNc2cpO1xuICAgIHJldHVybiB0YXJnZXRUeXBlO1xufVxuZnVuY3Rpb24gaXNEYXRhRmllbGRXaXRoRm9yQWN0aW9uKGFubm90YXRpb25Db250ZW50LCBhbm5vdGF0aW9uVGVybSkge1xuICAgIHJldHVybiAoYW5ub3RhdGlvbkNvbnRlbnQuaGFzT3duUHJvcGVydHkoJ0FjdGlvbicpICYmXG4gICAgICAgIChhbm5vdGF0aW9uVGVybS4kVHlwZSA9PT0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvbicgfHxcbiAgICAgICAgICAgIGFubm90YXRpb25UZXJtLiRUeXBlID09PSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvbicpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZShyZWNvcmREZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IHRhcmdldFR5cGU7XG4gICAgaWYgKCFyZWNvcmREZWZpbml0aW9uLnR5cGUgJiYgY29udGV4dC5jdXJyZW50VGVybSkge1xuICAgICAgICB0YXJnZXRUeXBlID0gaW5mZXJUeXBlRnJvbVRlcm0oY29udGV4dC5jdXJyZW50VGVybSwgY29udGV4dC5jdXJyZW50VGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YXJnZXRUeXBlID0gKDAsIHV0aWxzXzEudW5hbGlhcykoY29udGV4dC5yYXdNZXRhZGF0YS5yZWZlcmVuY2VzLCByZWNvcmREZWZpbml0aW9uLnR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0VHlwZTtcbn1cbmZ1bmN0aW9uIHBhcnNlUmVjb3JkKHJlY29yZERlZmluaXRpb24sIGN1cnJlbnRGUU4sIG9iamVjdE1hcCwgY29udGV4dCkge1xuICAgIGNvbnN0IHRhcmdldFR5cGUgPSBwYXJzZVJlY29yZFR5cGUocmVjb3JkRGVmaW5pdGlvbiwgY29udGV4dCk7XG4gICAgY29uc3QgYW5ub3RhdGlvblRlcm0gPSB7XG4gICAgICAgICRUeXBlOiB0YXJnZXRUeXBlLFxuICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGN1cnJlbnRGUU5cbiAgICB9O1xuICAgIGNvbnN0IGFubm90YXRpb25Db250ZW50ID0ge307XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjb3JkRGVmaW5pdGlvbi5hbm5vdGF0aW9ucykpIHtcbiAgICAgICAgY29uc3Qgc3ViQW5ub3RhdGlvbkxpc3QgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IGN1cnJlbnRGUU4sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogcmVjb3JkRGVmaW5pdGlvbi5hbm5vdGF0aW9ucyxcbiAgICAgICAgICAgIF9fc291cmNlOiBjb250ZXh0LmN1cnJlbnRTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgICAgY29udGV4dC5hZGRpdGlvbmFsQW5ub3RhdGlvbnMucHVzaChzdWJBbm5vdGF0aW9uTGlzdCk7XG4gICAgfVxuICAgIGlmIChyZWNvcmREZWZpbml0aW9uLnByb3BlcnR5VmFsdWVzKSB7XG4gICAgICAgIHJlY29yZERlZmluaXRpb24ucHJvcGVydHlWYWx1ZXMuZm9yRWFjaCgocHJvcGVydHlWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgYW5ub3RhdGlvbkNvbnRlbnRbcHJvcGVydHlWYWx1ZS5uYW1lXSA9IHBhcnNlVmFsdWUocHJvcGVydHlWYWx1ZS52YWx1ZSwgYCR7Y3VycmVudEZRTn0vJHtwcm9wZXJ0eVZhbHVlLm5hbWV9YCwgb2JqZWN0TWFwLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQW5ub3RhdGlvbkxpc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogYCR7Y3VycmVudEZRTn0vJHtwcm9wZXJ0eVZhbHVlLm5hbWV9YCxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIF9fc291cmNlOiBjb250ZXh0LmN1cnJlbnRTb3VyY2VcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkaXRpb25hbEFubm90YXRpb25zLnB1c2goc3ViQW5ub3RhdGlvbkxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRGF0YUZpZWxkV2l0aEZvckFjdGlvbihhbm5vdGF0aW9uQ29udGVudCwgYW5ub3RhdGlvblRlcm0pKSB7XG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uVGFyZ2V0ID1cbiAgICAgICAgICAgICAgICAgICAgKGNvbnRleHQuY3VycmVudFRhcmdldC5hY3Rpb25zICYmIGNvbnRleHQuY3VycmVudFRhcmdldC5hY3Rpb25zW2Fubm90YXRpb25Db250ZW50LkFjdGlvbl0pIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RNYXBbYW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uXTtcbiAgICAgICAgICAgICAgICBpZiAoIWFubm90YXRpb25Db250ZW50LkFjdGlvblRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gZGlhZ25vc3RpY3MgZGVidWdnZXI7XG4gICAgICAgICAgICAgICAgICAgIEFOTk9UQVRJT05fRVJST1JTLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byByZXNvbHZlIHRoZSBhY3Rpb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGRlZmluZWQgZm9yICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25UZXJtLmZ1bGx5UXVhbGlmaWVkTmFtZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhbm5vdGF0aW9uVGVybSwgYW5ub3RhdGlvbkNvbnRlbnQpO1xufVxuLyoqXG4gKiBSZXRyaWV2ZSBvciBpbmZlciB0aGUgY29sbGVjdGlvbiB0eXBlIGJhc2VkIG9uIGl0cyBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBjb2xsZWN0aW9uRGVmaW5pdGlvblxuICogQHJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGNvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3JJbmZlckNvbGxlY3Rpb25UeXBlKGNvbGxlY3Rpb25EZWZpbml0aW9uKSB7XG4gICAgbGV0IHR5cGUgPSBjb2xsZWN0aW9uRGVmaW5pdGlvbi50eXBlO1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgJiYgY29sbGVjdGlvbkRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdENvbEl0ZW0gPSBjb2xsZWN0aW9uRGVmaW5pdGlvblswXTtcbiAgICAgICAgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgnUHJvcGVydHlQYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUHJvcGVydHlQYXRoJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ1BhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdQYXRoJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ0Fubm90YXRpb25QYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnQW5ub3RhdGlvblBhdGgnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmaXJzdENvbEl0ZW0gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCd0eXBlJykgfHwgZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdwcm9wZXJ0eVZhbHVlcycpKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdSZWNvcmQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmaXJzdENvbEl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1N0cmluZyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHR5cGUgPSAnRW1wdHlDb2xsZWN0aW9uJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG59XG5mdW5jdGlvbiBwYXJzZUNvbGxlY3Rpb24oY29sbGVjdGlvbkRlZmluaXRpb24sIHBhcmVudEZRTiwgb2JqZWN0TWFwLCBjb250ZXh0KSB7XG4gICAgY29uc3QgY29sbGVjdGlvbkRlZmluaXRpb25UeXBlID0gZ2V0T3JJbmZlckNvbGxlY3Rpb25UeXBlKGNvbGxlY3Rpb25EZWZpbml0aW9uKTtcbiAgICBzd2l0Y2ggKGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSkge1xuICAgICAgICBjYXNlICdQcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocHJvcGVydHlQYXRoLCBwcm9wZXJ0eUlkeCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcGVydHlQYXRoLlByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7cHJvcGVydHlJZHh9YCxcbiAgICAgICAgICAgICAgICAgICAgJHRhcmdldDogX3Jlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjb250ZXh0LmN1cnJlbnRUYXJnZXQsIHByb3BlcnR5UGF0aC5Qcm9wZXJ0eVBhdGgsIGZhbHNlLCBmYWxzZSwgY29udGV4dC5jdXJyZW50VGVybSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJ1BhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocGF0aFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgJHRhcmdldCA9IF9yZXNvbHZlVGFyZ2V0KG9iamVjdE1hcCwgY29udGV4dC5jdXJyZW50VGFyZ2V0LCBwYXRoVmFsdWUuUGF0aCwgdHJ1ZSwgZmFsc2UsIGNvbnRleHQuY3VycmVudFRlcm0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBuZXcgUGF0aChwYXRoVmFsdWUsICR0YXJnZXQsIGNvbnRleHQuY3VycmVudFRlcm0sICcnKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnVucmVzb2x2ZWRBbm5vdGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lOiBpc0Fubm90YXRpb25QYXRoKHBhdGhWYWx1ZS5QYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgdG9SZXNvbHZlOiBwYXRoXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSAnQW5ub3RhdGlvblBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoYW5ub3RhdGlvblBhdGgsIGFubm90YXRpb25JZHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uVGFyZ2V0ID0gX3Jlc29sdmVUYXJnZXQob2JqZWN0TWFwLCBjb250ZXh0LmN1cnJlbnRUYXJnZXQsIGFubm90YXRpb25QYXRoLkFubm90YXRpb25QYXRoLCB0cnVlLCBmYWxzZSwgY29udGV4dC5jdXJyZW50VGVybSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvbkNvbGxlY3Rpb25FbGVtZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQW5ub3RhdGlvblBhdGgnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYW5ub3RhdGlvblBhdGguQW5ub3RhdGlvblBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7cGFyZW50RlFOfS8ke2Fubm90YXRpb25JZHh9YCxcbiAgICAgICAgICAgICAgICAgICAgJHRhcmdldDogYW5ub3RhdGlvblRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNUZXJtOiBjb250ZXh0LmN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgICAgICB0ZXJtOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogJydcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnRleHQudW5yZXNvbHZlZEFubm90YXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0b1Jlc29sdmU6IGFubm90YXRpb25Db2xsZWN0aW9uRWxlbWVudFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uQ29sbGVjdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChuYXZQcm9wZXJ0eVBhdGgsIG5hdlByb3BJZHgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYXZQcm9wZXJ0eVBhdGguTmF2aWdhdGlvblByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7bmF2UHJvcElkeH1gLFxuICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0OiBfcmVzb2x2ZVRhcmdldChvYmplY3RNYXAsIGNvbnRleHQuY3VycmVudFRhcmdldCwgbmF2UHJvcGVydHlQYXRoLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGZhbHNlLCBmYWxzZSwgY29udGV4dC5jdXJyZW50VGVybSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJ1JlY29yZCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChyZWNvcmREZWZpbml0aW9uLCByZWNvcmRJZHgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmQocmVjb3JkRGVmaW5pdGlvbiwgYCR7cGFyZW50RlFOfS8ke3JlY29yZElkeH1gLCBvYmplY3RNYXAsIGNvbnRleHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJ0FwcGx5JzpcbiAgICAgICAgY2FzZSAnTnVsbCc6XG4gICAgICAgIGNhc2UgJ0lmJzpcbiAgICAgICAgY2FzZSAnRXEnOlxuICAgICAgICBjYXNlICdOZSc6XG4gICAgICAgIGNhc2UgJ0x0JzpcbiAgICAgICAgY2FzZSAnR3QnOlxuICAgICAgICBjYXNlICdMZSc6XG4gICAgICAgIGNhc2UgJ0dlJzpcbiAgICAgICAgY2FzZSAnTm90JzpcbiAgICAgICAgY2FzZSAnQW5kJzpcbiAgICAgICAgY2FzZSAnT3InOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoaWZWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpZlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChzdHJpbmdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUuU3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25EZWZpbml0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY2FzZScpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbnZlcnRBbm5vdGF0aW9uKGFubm90YXRpb24sIG9iamVjdE1hcCwgY29udGV4dCkge1xuICAgIGlmIChhbm5vdGF0aW9uLnJlY29yZCkge1xuICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmQoYW5ub3RhdGlvbi5yZWNvcmQsIGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBvYmplY3RNYXAsIGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhbm5vdGF0aW9uLmNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYW5ub3RhdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUoYW5ub3RhdGlvbi52YWx1ZSwgYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIG9iamVjdE1hcCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChhbm5vdGF0aW9uLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHBhcnNlQ29sbGVjdGlvbihhbm5vdGF0aW9uLmNvbGxlY3Rpb24sIGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBvYmplY3RNYXAsIGNvbnRleHQpO1xuICAgICAgICBjb2xsZWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY2FzZScpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIHJlc29sdmVQYXRoIGZ1bmN0aW9uIGZvciBhIGdpdmVuIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eVR5cGUgZm9yIHdoaWNoIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgY3JlYXRlZFxuICogQHBhcmFtIG9iamVjdE1hcCBUaGUgY3VycmVudCBvYmplY3RNYXBcbiAqIEByZXR1cm5zIHRoZSByZXNvbHZlUGF0aCBmdW5jdGlvbiB0aGF0IHN0YXJ0cyBhdCB0aGUgZW50aXR5VHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXNvbHZlUGF0aEZuKGVudGl0eVR5cGUsIG9iamVjdE1hcCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVsYXRpdmVQYXRoLCBpbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvblRlcm0gPSAnJztcbiAgICAgICAgcmV0dXJuIF9yZXNvbHZlVGFyZ2V0KG9iamVjdE1hcCwgZW50aXR5VHlwZSwgcmVsYXRpdmVQYXRoLCBmYWxzZSwgaW5jbHVkZVZpc2l0ZWRPYmplY3RzLCBhbm5vdGF0aW9uVGVybSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVWMk5hdmlnYXRpb25Qcm9wZXJ0eShuYXZQcm9wLCBhc3NvY2lhdGlvbnMsIG9iamVjdE1hcCwgb3V0TmF2UHJvcCkge1xuICAgIGNvbnN0IHRhcmdldEFzc29jaWF0aW9uID0gYXNzb2NpYXRpb25zLmZpbmQoKGFzc29jaWF0aW9uKSA9PiBhc3NvY2lhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgPT09IG5hdlByb3AucmVsYXRpb25zaGlwKTtcbiAgICBpZiAodGFyZ2V0QXNzb2NpYXRpb24pIHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb25FbmQgPSB0YXJnZXRBc3NvY2lhdGlvbi5hc3NvY2lhdGlvbkVuZC5maW5kKChlbmQpID0+IGVuZC5yb2xlID09PSBuYXZQcm9wLnRvUm9sZSk7XG4gICAgICAgIGlmIChhc3NvY2lhdGlvbkVuZCkge1xuICAgICAgICAgICAgb3V0TmF2UHJvcC50YXJnZXRUeXBlID0gb2JqZWN0TWFwW2Fzc29jaWF0aW9uRW5kLnR5cGVdO1xuICAgICAgICAgICAgb3V0TmF2UHJvcC5pc0NvbGxlY3Rpb24gPSBhc3NvY2lhdGlvbkVuZC5tdWx0aXBsaWNpdHkgPT09ICcqJztcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVWNE5hdmlnYXRpb25Qcm9wZXJ0eShuYXZQcm9wLCBvYmplY3RNYXAsIG91dE5hdlByb3ApIHtcbiAgICBvdXROYXZQcm9wLnRhcmdldFR5cGUgPSBvYmplY3RNYXBbbmF2UHJvcC50YXJnZXRUeXBlTmFtZV07XG4gICAgb3V0TmF2UHJvcC5wYXJ0bmVyID0gbmF2UHJvcC5wYXJ0bmVyO1xuICAgIG91dE5hdlByb3AuaXNDb2xsZWN0aW9uID0gbmF2UHJvcC5pc0NvbGxlY3Rpb247XG4gICAgb3V0TmF2UHJvcC5jb250YWluc1RhcmdldCA9IG5hdlByb3AuY29udGFpbnNUYXJnZXQ7XG4gICAgb3V0TmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQgPSBuYXZQcm9wLnJlZmVyZW50aWFsQ29uc3RyYWludDtcbn1cbmZ1bmN0aW9uIGlzVjROYXZpZ2F0aW9uUHJvcGVydHkobmF2UHJvcCkge1xuICAgIHJldHVybiAhIW5hdlByb3AudGFyZ2V0VHlwZU5hbWU7XG59XG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnRpZXMobmF2aWdhdGlvblByb3BlcnRpZXMsIGFzc29jaWF0aW9ucywgb2JqZWN0TWFwKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcCkgPT4ge1xuICAgICAgICBjb25zdCBvdXROYXZQcm9wID0ge1xuICAgICAgICAgICAgX3R5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHknLFxuICAgICAgICAgICAgbmFtZTogbmF2UHJvcC5uYW1lLFxuICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBuYXZQcm9wLmZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgIGlzQ29sbGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBjb250YWluc1RhcmdldDogZmFsc2UsXG4gICAgICAgICAgICByZWZlcmVudGlhbENvbnN0cmFpbnQ6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHt9LFxuICAgICAgICAgICAgcGFydG5lcjogJycsXG4gICAgICAgICAgICB0YXJnZXRUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0YXJnZXRUeXBlTmFtZTogJydcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGlzVjROYXZpZ2F0aW9uUHJvcGVydHkobmF2UHJvcCkpIHtcbiAgICAgICAgICAgIHJlc29sdmVWNE5hdmlnYXRpb25Qcm9wZXJ0eShuYXZQcm9wLCBvYmplY3RNYXAsIG91dE5hdlByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZVYyTmF2aWdhdGlvblByb3BlcnR5KG5hdlByb3AsIGFzc29jaWF0aW9ucywgb2JqZWN0TWFwLCBvdXROYXZQcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0TmF2UHJvcC50YXJnZXRUeXBlKSB7XG4gICAgICAgICAgICBvdXROYXZQcm9wLnRhcmdldFR5cGVOYW1lID0gb3V0TmF2UHJvcC50YXJnZXRUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3RNYXBbb3V0TmF2UHJvcC5mdWxseVF1YWxpZmllZE5hbWVdID0gb3V0TmF2UHJvcDtcbiAgICAgICAgcmV0dXJuIG91dE5hdlByb3A7XG4gICAgfSk7XG59XG4vKipcbiAqIEBwYXJhbSBlbnRpdHlUeXBlc1xuICogQHBhcmFtIGFzc29jaWF0aW9uc1xuICogQHBhcmFtIG9iamVjdE1hcFxuICovXG5mdW5jdGlvbiByZXNvbHZlTmF2aWdhdGlvblByb3BlcnRpZXMoZW50aXR5VHlwZXMsIGFzc29jaWF0aW9ucywgb2JqZWN0TWFwKSB7XG4gICAgZW50aXR5VHlwZXMuZm9yRWFjaCgoZW50aXR5VHlwZSkgPT4ge1xuICAgICAgICBlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMsIGFzc29jaWF0aW9ucywgb2JqZWN0TWFwKTtcbiAgICAgICAgZW50aXR5VHlwZS5yZXNvbHZlUGF0aCA9IGNyZWF0ZVJlc29sdmVQYXRoRm4oZW50aXR5VHlwZSwgb2JqZWN0TWFwKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQHBhcmFtIG5hbWVzcGFjZVxuICogQHBhcmFtIGFjdGlvbnNcbiAqIEBwYXJhbSBvYmplY3RNYXBcbiAqL1xuZnVuY3Rpb24gbGlua0FjdGlvbnNUb0VudGl0eVR5cGUobmFtZXNwYWNlLCBhY3Rpb25zLCBvYmplY3RNYXApIHtcbiAgICBhY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICBpZiAoIWFjdGlvbi5hbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgYWN0aW9uLmFubm90YXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvbi5pc0JvdW5kKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VFbnRpdHlUeXBlID0gb2JqZWN0TWFwW2FjdGlvbi5zb3VyY2VUeXBlXTtcbiAgICAgICAgICAgIGFjdGlvbi5zb3VyY2VFbnRpdHlUeXBlID0gc291cmNlRW50aXR5VHlwZTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VFbnRpdHlUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VFbnRpdHlUeXBlLmFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlRW50aXR5VHlwZS5hY3Rpb25zID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNvdXJjZUVudGl0eVR5cGUuYWN0aW9uc1thY3Rpb24ubmFtZV0gPSBhY3Rpb247XG4gICAgICAgICAgICAgICAgc291cmNlRW50aXR5VHlwZS5hY3Rpb25zW2Ake25hbWVzcGFjZX0uJHthY3Rpb24ubmFtZX1gXSA9IGFjdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvbi5yZXR1cm5FbnRpdHlUeXBlID0gb2JqZWN0TWFwW2FjdGlvbi5yZXR1cm5UeXBlXTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBAcGFyYW0gZW50aXR5U2V0c1xuICogQHBhcmFtIG9iamVjdE1hcFxuICogQHBhcmFtIHJlZmVyZW5jZXNcbiAqL1xuZnVuY3Rpb24gbGlua0VudGl0eVR5cGVUb0VudGl0eVNldChlbnRpdHlTZXRzLCBvYmplY3RNYXAsIHJlZmVyZW5jZXMpIHtcbiAgICBlbnRpdHlTZXRzLmZvckVhY2goKGVudGl0eVNldCkgPT4ge1xuICAgICAgICBlbnRpdHlTZXQuZW50aXR5VHlwZSA9IG9iamVjdE1hcFtlbnRpdHlTZXQuZW50aXR5VHlwZU5hbWVdO1xuICAgICAgICBpZiAoIWVudGl0eVNldC5lbnRpdHlUeXBlKSB7XG4gICAgICAgICAgICBlbnRpdHlTZXQuZW50aXR5VHlwZSA9IG9iamVjdE1hcFsoMCwgdXRpbHNfMS51bmFsaWFzKShyZWZlcmVuY2VzLCBlbnRpdHlTZXQuZW50aXR5VHlwZU5hbWUpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVudGl0eVNldC5hbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgZW50aXR5U2V0LmFubm90YXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbnRpdHlTZXQuZW50aXR5VHlwZS5hbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgZW50aXR5U2V0LmVudGl0eVR5cGUuYW5ub3RhdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbnRpdHlTZXQuZW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleVByb3ApID0+IHtcbiAgICAgICAgICAgIGtleVByb3AuaXNLZXkgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKlxuICogQHBhcmFtIHNpbmdsZXRvbnNcbiAqIEBwYXJhbSBvYmplY3RNYXBcbiAqIEBwYXJhbSByZWZlcmVuY2VzXG4gKi9cbmZ1bmN0aW9uIGxpbmtFbnRpdHlUeXBlVG9TaW5nbGV0b24oc2luZ2xldG9ucywgb2JqZWN0TWFwLCByZWZlcmVuY2VzKSB7XG4gICAgc2luZ2xldG9ucy5mb3JFYWNoKChzaW5nbGV0b24pID0+IHtcbiAgICAgICAgc2luZ2xldG9uLmVudGl0eVR5cGUgPSBvYmplY3RNYXBbc2luZ2xldG9uLmVudGl0eVR5cGVOYW1lXTtcbiAgICAgICAgaWYgKCFzaW5nbGV0b24uZW50aXR5VHlwZSkge1xuICAgICAgICAgICAgc2luZ2xldG9uLmVudGl0eVR5cGUgPSBvYmplY3RNYXBbKDAsIHV0aWxzXzEudW5hbGlhcykocmVmZXJlbmNlcywgc2luZ2xldG9uLmVudGl0eVR5cGVOYW1lKV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaW5nbGV0b24uYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIHNpbmdsZXRvbi5hbm5vdGF0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2luZ2xldG9uLmVudGl0eVR5cGUuYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIHNpbmdsZXRvbi5lbnRpdHlUeXBlLmFubm90YXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgc2luZ2xldG9uLmVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXlQcm9wKSA9PiB7XG4gICAgICAgICAgICBrZXlQcm9wLmlzS2V5ID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vKipcbiAqIEBwYXJhbSBlbnRpdHlUeXBlc1xuICogQHBhcmFtIG9iamVjdE1hcFxuICovXG5mdW5jdGlvbiBsaW5rUHJvcGVydGllc1RvQ29tcGxleFR5cGVzKGVudGl0eVR5cGVzLCBvYmplY3RNYXApIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaW5rKHByb3BlcnR5KSB7XG4gICAgICAgIGlmICghcHJvcGVydHkuYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIHByb3BlcnR5LmFubm90YXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS50eXBlLmluZGV4T2YoJ0VkbScpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbXBsZXhUeXBlO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS50eXBlLnN0YXJ0c1dpdGgoJ0NvbGxlY3Rpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4VHlwZU5hbWUgPSBwcm9wZXJ0eS50eXBlLnN1YnN0cmluZygxMSwgcHJvcGVydHkudHlwZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxleFR5cGUgPSBvYmplY3RNYXBbY29tcGxleFR5cGVOYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXhUeXBlID0gb2JqZWN0TWFwW3Byb3BlcnR5LnR5cGVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29tcGxleFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkudGFyZ2V0VHlwZSA9IGNvbXBsZXhUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxleFR5cGUucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxleFR5cGUucHJvcGVydGllcy5mb3JFYWNoKGxpbmspO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChzRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydHkgVHlwZSBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVudGl0eVR5cGVzLmZvckVhY2goKGVudGl0eVR5cGUpID0+IHtcbiAgICAgICAgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2gobGluayk7XG4gICAgfSk7XG59XG4vKipcbiAqIEBwYXJhbSBjb21wbGV4VHlwZXNcbiAqIEBwYXJhbSBhc3NvY2lhdGlvbnNcbiAqIEBwYXJhbSBvYmplY3RNYXBcbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUNvbXBsZXhUeXBlcyhjb21wbGV4VHlwZXMsIGFzc29jaWF0aW9ucywgb2JqZWN0TWFwKSB7XG4gICAgY29tcGxleFR5cGVzLmZvckVhY2goKGNvbXBsZXhUeXBlKSA9PiB7XG4gICAgICAgIGNvbXBsZXhUeXBlLmFubm90YXRpb25zID0ge307XG4gICAgICAgIGNvbXBsZXhUeXBlLnByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkuYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eS5hbm5vdGF0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29tcGxleFR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMgPSBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnRpZXMoY29tcGxleFR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMsIGFzc29jaWF0aW9ucywgb2JqZWN0TWFwKTtcbiAgICB9KTtcbn1cbi8qKlxuICogU3BsaXQgdGhlIGFsaWFzIGZyb20gdGhlIHRlcm0gdmFsdWUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZXNcbiAqIEBwYXJhbSB0ZXJtVmFsdWUgdGhlIHZhbHVlIG9mIHRoZSB0ZXJtXG4gKiBAcmV0dXJucyB0aGUgdGVybSBhbGlhcyBhbmQgdGhlIGFjdHVhbCB0ZXJtIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHNwbGl0VGVybShyZWZlcmVuY2VzLCB0ZXJtVmFsdWUpIHtcbiAgICBjb25zdCBhbGlhc2VkVGVybSA9ICgwLCB1dGlsc18xLmFsaWFzKShyZWZlcmVuY2VzLCB0ZXJtVmFsdWUpO1xuICAgIGNvbnN0IGxhc3REb3QgPSBhbGlhc2VkVGVybS5sYXN0SW5kZXhPZignLicpO1xuICAgIGNvbnN0IHRlcm1BbGlhcyA9IGFsaWFzZWRUZXJtLnN1YnN0cmluZygwLCBsYXN0RG90KTtcbiAgICBjb25zdCB0ZXJtID0gYWxpYXNlZFRlcm0uc3Vic3RyaW5nKGxhc3REb3QgKyAxKTtcbiAgICByZXR1cm4gW3Rlcm1BbGlhcywgdGVybV07XG59XG4vKipcbiAqIENyZWF0ZXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXNvbHZlIGEgc3BlY2lmaWMgcGF0aC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVkT3V0cHV0XG4gKiBAcGFyYW0gb2JqZWN0TWFwXG4gKiBAcmV0dXJucyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGFsbG93IHRvIHJlc29sdmUgZWxlbWVudCBnbG9iYWxseS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlR2xvYmFsUmVzb2x2ZShjb252ZXJ0ZWRPdXRwdXQsIG9iamVjdE1hcCkge1xuICAgIHJldHVybiBmdW5jdGlvbiByZXNvbHZlUGF0aChzUGF0aCkge1xuICAgICAgICBjb25zdCBhUGF0aFNwbGl0ID0gc1BhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgaWYgKGFQYXRoU3BsaXQuc2hpZnQoKSAhPT0gJycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRlYWwgd2l0aCByZWxhdGl2ZSBwYXRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50aXR5U2V0TmFtZSA9IGFQYXRoU3BsaXQuc2hpZnQoKTtcbiAgICAgICAgY29uc3QgZW50aXR5U2V0ID0gY29udmVydGVkT3V0cHV0LmVudGl0eVNldHMuZmluZCgoZXQpID0+IGV0Lm5hbWUgPT09IGVudGl0eVNldE5hbWUpO1xuICAgICAgICBpZiAoIWVudGl0eVNldCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGNvbnZlcnRlZE91dHB1dC5lbnRpdHlDb250YWluZXIsXG4gICAgICAgICAgICAgICAgb2JqZWN0UGF0aDogW2NvbnZlcnRlZE91dHB1dC5lbnRpdHlDb250YWluZXJdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChhUGF0aFNwbGl0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGVudGl0eVNldCxcbiAgICAgICAgICAgICAgICBvYmplY3RQYXRoOiBbY29udmVydGVkT3V0cHV0LmVudGl0eUNvbnRhaW5lciwgZW50aXR5U2V0XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFJlc29sdXRpb24gPSBfcmVzb2x2ZVRhcmdldChvYmplY3RNYXAsIGVudGl0eVNldCwgJy8nICsgYVBhdGhTcGxpdC5qb2luKCcvJyksIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRSZXNvbHV0aW9uLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldFJlc29sdXRpb24udmlzaXRlZE9iamVjdHMucHVzaCh0YXJnZXRSZXNvbHV0aW9uLnRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQsXG4gICAgICAgICAgICAgICAgb2JqZWN0UGF0aDogdGFyZ2V0UmVzb2x1dGlvbi52aXNpdGVkT2JqZWN0c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBlbnN1cmVBbm5vdGF0aW9ucyhjdXJyZW50VGFyZ2V0LCB2b2NBbGlhcykge1xuICAgIGlmICghY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucykge1xuICAgICAgICBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zID0ge307XG4gICAgfVxuICAgIGlmICghY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc10pIHtcbiAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc10gPSB7fTtcbiAgICB9XG4gICAgaWYgKCFjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zLl9hbm5vdGF0aW9ucykge1xuICAgICAgICBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zLl9hbm5vdGF0aW9ucyA9IHt9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NBbm5vdGF0aW9ucyhjdXJyZW50Q29udGV4dCwgYW5ub3RhdGlvbkxpc3QsIG9iamVjdE1hcCwgYk92ZXJyaWRlRXhpc3RpbmcpIHtcbiAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gY3VycmVudENvbnRleHQuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBjdXJyZW50VGFyZ2V0TmFtZSA9IGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lO1xuICAgIGFubm90YXRpb25MaXN0LmFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY3VycmVudENvbnRleHQuY3VycmVudFNvdXJjZSA9IGFubm90YXRpb24uX19zb3VyY2UgfHwgYW5ub3RhdGlvbkxpc3QuX19zb3VyY2U7XG4gICAgICAgIGNvbnN0IFt2b2NBbGlhcywgdm9jVGVybV0gPSBzcGxpdFRlcm0odXRpbHNfMS5kZWZhdWx0UmVmZXJlbmNlcywgYW5ub3RhdGlvbi50ZXJtKTtcbiAgICAgICAgZW5zdXJlQW5ub3RhdGlvbnMoY3VycmVudFRhcmdldCwgdm9jQWxpYXMpO1xuICAgICAgICBjb25zdCB2b2NUZXJtV2l0aFF1YWxpZmllciA9IGAke3ZvY1Rlcm19JHthbm5vdGF0aW9uLnF1YWxpZmllciA/ICcjJyArIGFubm90YXRpb24ucXVhbGlmaWVyIDogJyd9YDtcbiAgICAgICAgaWYgKCFiT3ZlcnJpZGVFeGlzdGluZyAmJiAoKF9iID0gKF9hID0gY3VycmVudFRhcmdldC5hbm5vdGF0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3ZvY0FsaWFzXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRDb250ZXh0LmN1cnJlbnRUZXJtID0gYW5ub3RhdGlvbi50ZXJtO1xuICAgICAgICBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0gPSBjb252ZXJ0QW5ub3RhdGlvbihhbm5vdGF0aW9uLCBvYmplY3RNYXAsIGN1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdKSB7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctd3JhcHBlcnNcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0gPSBuZXcgU3RyaW5nKGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LXdyYXBwZXJzXG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdID0gbmV3IEJvb2xlYW4oY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0gIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0udGVybSA9ICgwLCB1dGlsc18xLnVuYWxpYXMpKHV0aWxzXzEuZGVmYXVsdFJlZmVyZW5jZXMsIGAke3ZvY0FsaWFzfS4ke3ZvY1Rlcm19YCk7XG4gICAgICAgICAgICBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0ucXVhbGlmaWVyID0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG4gICAgICAgICAgICBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl0uX19zb3VyY2UgPSBjdXJyZW50Q29udGV4dC5jdXJyZW50U291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFubm90YXRpb25UYXJnZXQgPSBgJHtjdXJyZW50VGFyZ2V0TmFtZX1AJHsoMCwgdXRpbHNfMS51bmFsaWFzKSh1dGlsc18xLmRlZmF1bHRSZWZlcmVuY2VzLCB2b2NBbGlhcyArICcuJyArIHZvY1Rlcm1XaXRoUXVhbGlmaWVyKX1gO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uLmFubm90YXRpb25zKSkge1xuICAgICAgICAgICAgY29uc3Qgc3ViQW5ub3RhdGlvbkxpc3QgPSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBhbm5vdGF0aW9uVGFyZ2V0LFxuICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiBhbm5vdGF0aW9uLmFubm90YXRpb25zLFxuICAgICAgICAgICAgICAgIF9fc291cmNlOiBjdXJyZW50Q29udGV4dC5jdXJyZW50U291cmNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuYWRkaXRpb25hbEFubm90YXRpb25zLnB1c2goc3ViQW5ub3RhdGlvbkxpc3QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFubm90YXRpb24uYW5ub3RhdGlvbnMgJiYgIWN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXS5hbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgY3VycmVudFRhcmdldC5hbm5vdGF0aW9uc1t2b2NBbGlhc11bdm9jVGVybVdpdGhRdWFsaWZpZXJdLmFubm90YXRpb25zID0gYW5ub3RhdGlvbi5hbm5vdGF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zLl9hbm5vdGF0aW9uc1tgJHt2b2NBbGlhc30uJHt2b2NUZXJtV2l0aFF1YWxpZmllcn1gXSA9XG4gICAgICAgICAgICBjdXJyZW50VGFyZ2V0LmFubm90YXRpb25zW3ZvY0FsaWFzXVt2b2NUZXJtV2l0aFF1YWxpZmllcl07XG4gICAgICAgIG9iamVjdE1hcFthbm5vdGF0aW9uVGFyZ2V0XSA9IGN1cnJlbnRUYXJnZXQuYW5ub3RhdGlvbnNbdm9jQWxpYXNdW3ZvY1Rlcm1XaXRoUXVhbGlmaWVyXTtcbiAgICB9KTtcbn1cbi8qKlxuICogUHJvY2VzcyBhbGwgdGhlIHVucmVzb2x2ZWQgdGFyZ2V0cyBzbyBmYXIgdG8gdHJ5IGFuZCBzZWUgaWYgdGhleSBhcmUgcmVzb2x2ZWFibGUgaW4gdGhlIGVuZC5cbiAqXG4gKiBAcGFyYW0gdW5yZXNvbHZlZFRhcmdldHNcbiAqIEBwYXJhbSBvYmplY3RNYXBcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1VucmVzb2x2ZWRUYXJnZXRzKHVucmVzb2x2ZWRUYXJnZXRzLCBvYmplY3RNYXApIHtcbiAgICB1bnJlc29sdmVkVGFyZ2V0cy5mb3JFYWNoKChyZXNvbHZhYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRvUmVzb2x2ZSA9IHJlc29sdmFibGUudG9SZXNvbHZlO1xuICAgICAgICBjb25zdCB0YXJnZXRTdHIgPSB0YXJnZXRUb1Jlc29sdmUuJHRhcmdldDtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBvYmplY3RNYXBbdGFyZ2V0U3RyXTtcbiAgICAgICAgY29uc3QgeyBhbm5vdGF0aW9uc1Rlcm0sIGFubm90YXRpb25UeXBlIH0gPSB0YXJnZXRUb1Jlc29sdmU7XG4gICAgICAgIGRlbGV0ZSB0YXJnZXRUb1Jlc29sdmUuYW5ub3RhdGlvblR5cGU7XG4gICAgICAgIGRlbGV0ZSB0YXJnZXRUb1Jlc29sdmUuYW5ub3RhdGlvbnNUZXJtO1xuICAgICAgICBpZiAocmVzb2x2YWJsZS5pbmxpbmUgJiYgIShyZXNvbHZlZFRhcmdldCBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgICAgIC8vIGlubGluZSB0aGUgcmVzb2x2ZWQgdGFyZ2V0XG4gICAgICAgICAgICBsZXQga2V5cztcbiAgICAgICAgICAgIGZvciAoa2V5cyBpbiB0YXJnZXRUb1Jlc29sdmUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGFyZ2V0VG9SZXNvbHZlW2tleXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXRUb1Jlc29sdmUsIHJlc29sdmVkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGFzc2lnbiB0aGUgcmVzb2x2ZWQgdGFyZ2V0XG4gICAgICAgICAgICB0YXJnZXRUb1Jlc29sdmUuJHRhcmdldCA9IHJlc29sdmVkVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzb2x2ZWRUYXJnZXQpIHtcbiAgICAgICAgICAgIHRhcmdldFRvUmVzb2x2ZS50YXJnZXRTdHJpbmcgPSB0YXJnZXRTdHI7XG4gICAgICAgICAgICBpZiAoYW5ub3RhdGlvbnNUZXJtICYmIGFubm90YXRpb25UeXBlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb0Vycm9yTXNnID0ge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIHJlc29sdmUgdGhlIHBhdGggZXhwcmVzc2lvbjogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdHIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0hpbnQ6IENoZWNrIGFuZCBjb3JyZWN0IHRoZSBwYXRoIHZhbHVlcyB1bmRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgbWV0YWRhdGEgKGFubm90YXRpb24ueG1sIGZpbGUgb3IgQ0RTIGFubm90YXRpb25zIGZvciB0aGUgYXBwbGljYXRpb24pOiBcXG5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvbiBUZXJtID0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uc1Rlcm0gK1xuICAgICAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8UmVjb3JkIFR5cGUgPSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25UeXBlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb25QYXRoID0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdHIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJz4nXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRBbm5vdGF0aW9uRXJyb3JNZXNzYWdlKHRhcmdldFN0ciwgb0Vycm9yTXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGFyZ2V0VG9SZXNvbHZlLnRlcm07XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHRhcmdldFRvUmVzb2x2ZS5wYXRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1JbmZvID0gdGFyZ2V0U3RyID8gdGFyZ2V0U3RyLnNwbGl0KCcvJylbMF0gOiB0YXJnZXRTdHI7XG4gICAgICAgICAgICAgICAgY29uc3Qgb0Vycm9yTXNnID0ge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIHJlc29sdmUgdGhlIHBhdGggZXhwcmVzc2lvbjogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdHIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0hpbnQ6IENoZWNrIGFuZCBjb3JyZWN0IHRoZSBwYXRoIHZhbHVlcyB1bmRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgbWV0YWRhdGEgKGFubm90YXRpb24ueG1sIGZpbGUgb3IgQ0RTIGFubm90YXRpb25zIGZvciB0aGUgYXBwbGljYXRpb24pOiBcXG5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvbiBUZXJtID0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtSW5mbyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxQcm9wZXJ0eVZhbHVlIFByb3BlcnR5ID0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBQYXRoPSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgJz4nXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRBbm5vdGF0aW9uRXJyb3JNZXNzYWdlKHRhcmdldFN0ciwgb0Vycm9yTXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9uIGZyb20gZGlmZmVyZW50IHNvdXJjZSB0b2dldGhlciBieSBvdmVyd3JpdGluZyBhdCB0aGUgdGVybSBsZXZlbC5cbiAqXG4gKiBAcGFyYW0gcmF3TWV0YWRhdGFcbiAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgbWVyZ2VkIGFubm90YXRpb25zXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQW5ub3RhdGlvbnMocmF3TWV0YWRhdGEpIHtcbiAgICBjb25zdCBhbm5vdGF0aW9uTGlzdFBlclRhcmdldCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHJhd01ldGFkYXRhLnNjaGVtYS5hbm5vdGF0aW9ucykuZm9yRWFjaCgoYW5ub3RhdGlvblNvdXJjZSkgPT4ge1xuICAgICAgICByYXdNZXRhZGF0YS5zY2hlbWEuYW5ub3RhdGlvbnNbYW5ub3RhdGlvblNvdXJjZV0uZm9yRWFjaCgoYW5ub3RhdGlvbkxpc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXROYW1lID0gKDAsIHV0aWxzXzEudW5hbGlhcykocmF3TWV0YWRhdGEucmVmZXJlbmNlcywgYW5ub3RhdGlvbkxpc3QudGFyZ2V0KTtcbiAgICAgICAgICAgIGFubm90YXRpb25MaXN0Ll9fc291cmNlID0gYW5ub3RhdGlvblNvdXJjZTtcbiAgICAgICAgICAgIGlmICghYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXRbY3VycmVudFRhcmdldE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXRbY3VycmVudFRhcmdldE5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogYW5ub3RhdGlvbkxpc3QuYW5ub3RhdGlvbnMuY29uY2F0KCksXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogY3VycmVudFRhcmdldE5hbWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXS5fX3NvdXJjZSA9IGFubm90YXRpb25Tb3VyY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uTGlzdC5hbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IGFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoKHJlZmVyZW5jZUFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmVmZXJlbmNlQW5ub3RhdGlvbi50ZXJtID09PSBhbm5vdGF0aW9uLnRlcm0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VBbm5vdGF0aW9uLnF1YWxpZmllciA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5fX3NvdXJjZSA9IGFubm90YXRpb25Tb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uTGlzdFBlclRhcmdldFtjdXJyZW50VGFyZ2V0TmFtZV0uYW5ub3RhdGlvbnMuc3BsaWNlKGZpbmRJbmRleCwgMSwgYW5ub3RhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uTGlzdFBlclRhcmdldFtjdXJyZW50VGFyZ2V0TmFtZV0uYW5ub3RhdGlvbnMucHVzaChhbm5vdGF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXQ7XG59XG4vKipcbiAqIENvbnZlcnQgYSBSYXdNZXRhZGF0YSBpbnRvIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiB0byBiZSB1c2VkIHRvIGVhc2lseSBuYXZpZ2F0ZSBhIG1ldGFkYXRhIG9iamVjdCBhbmQgaXRzIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHJhd01ldGFkYXRhXG4gKiBAcmV0dXJucyB0aGUgY29udmVydGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXRhZGF0YS5cbiAqL1xuZnVuY3Rpb24gY29udmVydChyYXdNZXRhZGF0YSkge1xuICAgIEFOTk9UQVRJT05fRVJST1JTID0gW107XG4gICAgY29uc3Qgb2JqZWN0TWFwID0gYnVpbGRPYmplY3RNYXAocmF3TWV0YWRhdGEpO1xuICAgIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydGllcyhyYXdNZXRhZGF0YS5zY2hlbWEuZW50aXR5VHlwZXMsIHJhd01ldGFkYXRhLnNjaGVtYS5hc3NvY2lhdGlvbnMsIG9iamVjdE1hcCk7XG4gICAgcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eUNvbnRhaW5lci5hbm5vdGF0aW9ucyA9IHt9O1xuICAgIGxpbmtBY3Rpb25zVG9FbnRpdHlUeXBlKHJhd01ldGFkYXRhLnNjaGVtYS5uYW1lc3BhY2UsIHJhd01ldGFkYXRhLnNjaGVtYS5hY3Rpb25zLCBvYmplY3RNYXApO1xuICAgIGxpbmtFbnRpdHlUeXBlVG9FbnRpdHlTZXQocmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eVNldHMsIG9iamVjdE1hcCwgcmF3TWV0YWRhdGEucmVmZXJlbmNlcyk7XG4gICAgbGlua0VudGl0eVR5cGVUb1NpbmdsZXRvbihyYXdNZXRhZGF0YS5zY2hlbWEuc2luZ2xldG9ucywgb2JqZWN0TWFwLCByYXdNZXRhZGF0YS5yZWZlcmVuY2VzKTtcbiAgICBsaW5rUHJvcGVydGllc1RvQ29tcGxleFR5cGVzKHJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlUeXBlcywgb2JqZWN0TWFwKTtcbiAgICBwcmVwYXJlQ29tcGxleFR5cGVzKHJhd01ldGFkYXRhLnNjaGVtYS5jb21wbGV4VHlwZXMsIHJhd01ldGFkYXRhLnNjaGVtYS5hc3NvY2lhdGlvbnMsIG9iamVjdE1hcCk7XG4gICAgY29uc3QgdW5yZXNvbHZlZFRhcmdldHMgPSBbXTtcbiAgICBjb25zdCB1bnJlc29sdmVkQW5ub3RhdGlvbnMgPSBbXTtcbiAgICBjb25zdCBhbm5vdGF0aW9uTGlzdFBlclRhcmdldCA9IG1lcmdlQW5ub3RhdGlvbnMocmF3TWV0YWRhdGEpO1xuICAgIE9iamVjdC5rZXlzKGFubm90YXRpb25MaXN0UGVyVGFyZ2V0KS5mb3JFYWNoKChjdXJyZW50VGFyZ2V0TmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBhbm5vdGF0aW9uTGlzdCA9IGFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXTtcbiAgICAgICAgY29uc3Qgb2JqZWN0TWFwRWxlbWVudCA9IG9iamVjdE1hcFtjdXJyZW50VGFyZ2V0TmFtZV07XG4gICAgICAgIGlmICghb2JqZWN0TWFwRWxlbWVudCAmJiAoY3VycmVudFRhcmdldE5hbWUgPT09IG51bGwgfHwgY3VycmVudFRhcmdldE5hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRUYXJnZXROYW1lLmluZGV4T2YoJ0AnKSkgPiAwKSB7XG4gICAgICAgICAgICB1bnJlc29sdmVkQW5ub3RhdGlvbnMucHVzaChhbm5vdGF0aW9uTGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob2JqZWN0TWFwRWxlbWVudCkge1xuICAgICAgICAgICAgbGV0IGFsbFRhcmdldHMgPSBbb2JqZWN0TWFwRWxlbWVudF07XG4gICAgICAgICAgICBsZXQgYk92ZXJyaWRlRXhpc3RpbmcgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG9iamVjdE1hcEVsZW1lbnQuX3R5cGUgPT09ICdVbmJvdW5kR2VuZXJpY0FjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhbGxUYXJnZXRzID0gb2JqZWN0TWFwRWxlbWVudC5hY3Rpb25zO1xuICAgICAgICAgICAgICAgIGJPdmVycmlkZUV4aXN0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGxUYXJnZXRzLmZvckVhY2goKGN1cnJlbnRUYXJnZXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEFubm90YXRpb25zOiB1bnJlc29sdmVkQW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2U6IGFubm90YXRpb25MaXN0Ll9fc291cmNlLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVybTogJycsXG4gICAgICAgICAgICAgICAgICAgIHJhd01ldGFkYXRhOiByYXdNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdW5yZXNvbHZlZEFubm90YXRpb25zOiB1bnJlc29sdmVkVGFyZ2V0c1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Fubm90YXRpb25zKGN1cnJlbnRDb250ZXh0LCBhbm5vdGF0aW9uTGlzdCwgb2JqZWN0TWFwLCBiT3ZlcnJpZGVFeGlzdGluZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGV4dHJhVW5yZXNvbHZlZEFubm90YXRpb25zID0gW107XG4gICAgdW5yZXNvbHZlZEFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb25MaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXROYW1lID0gKDAsIHV0aWxzXzEudW5hbGlhcykocmF3TWV0YWRhdGEucmVmZXJlbmNlcywgYW5ub3RhdGlvbkxpc3QudGFyZ2V0KTtcbiAgICAgICAgbGV0IFtiYXNlT2JqLCBhbm5vdGF0aW9uUGFydF0gPSBjdXJyZW50VGFyZ2V0TmFtZS5zcGxpdCgnQCcpO1xuICAgICAgICBjb25zdCB0YXJnZXRTcGxpdCA9IGFubm90YXRpb25QYXJ0LnNwbGl0KCcvJyk7XG4gICAgICAgIGJhc2VPYmogPSBiYXNlT2JqICsgJ0AnICsgdGFyZ2V0U3BsaXRbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXRTcGxpdC5zbGljZSgxKS5yZWR1Y2UoKGN1cnJlbnRPYmosIHBhdGgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50T2JqID09PSBudWxsIHx8IGN1cnJlbnRPYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRPYmpbcGF0aF07XG4gICAgICAgIH0sIG9iamVjdE1hcFtiYXNlT2JqXSk7XG4gICAgICAgIGlmICghY3VycmVudFRhcmdldCB8fCB0eXBlb2YgY3VycmVudFRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIEFOTk9UQVRJT05fRVJST1JTLnB1c2goe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGUgZm9sbG93aW5nIGFubm90YXRpb24gdGFyZ2V0IHdhcyBub3QgZm91bmQgb24gdGhlIHNlcnZpY2UgJyArIGN1cnJlbnRUYXJnZXROYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxBbm5vdGF0aW9uczogZXh0cmFVbnJlc29sdmVkQW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZTogYW5ub3RhdGlvbkxpc3QuX19zb3VyY2UsXG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGVybTogJycsXG4gICAgICAgICAgICAgICAgcmF3TWV0YWRhdGE6IHJhd01ldGFkYXRhLFxuICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRBbm5vdGF0aW9uczogdW5yZXNvbHZlZFRhcmdldHNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcm9jZXNzQW5ub3RhdGlvbnMoY3VycmVudENvbnRleHQsIGFubm90YXRpb25MaXN0LCBvYmplY3RNYXAsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHByb2Nlc3NVbnJlc29sdmVkVGFyZ2V0cyh1bnJlc29sdmVkVGFyZ2V0cywgb2JqZWN0TWFwKTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIEFMTF9BTk5PVEFUSU9OX0VSUk9SUykge1xuICAgICAgICBBTk5PVEFUSU9OX0VSUk9SUy5wdXNoKEFMTF9BTk5PVEFUSU9OX0VSUk9SU1twcm9wZXJ0eV1bMF0pO1xuICAgIH1cbiAgICByYXdNZXRhZGF0YS5lbnRpdHlTZXRzID0gcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eVNldHM7XG4gICAgY29uc3QgZXh0cmFSZWZlcmVuY2VzID0gcmF3TWV0YWRhdGEucmVmZXJlbmNlcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICByZXR1cm4gdXRpbHNfMS5kZWZhdWx0UmVmZXJlbmNlcy5maW5kKChkZWZhdWx0UmVmKSA9PiBkZWZhdWx0UmVmLm5hbWVzcGFjZSA9PT0gcmVmZXJlbmNlLm5hbWVzcGFjZSkgPT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBjb25zdCBjb252ZXJ0ZWRPdXRwdXQgPSB7XG4gICAgICAgIHZlcnNpb246IHJhd01ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgIGFubm90YXRpb25zOiByYXdNZXRhZGF0YS5zY2hlbWEuYW5ub3RhdGlvbnMsXG4gICAgICAgIG5hbWVzcGFjZTogcmF3TWV0YWRhdGEuc2NoZW1hLm5hbWVzcGFjZSxcbiAgICAgICAgZW50aXR5Q29udGFpbmVyOiByYXdNZXRhZGF0YS5zY2hlbWEuZW50aXR5Q29udGFpbmVyLFxuICAgICAgICBhY3Rpb25zOiByYXdNZXRhZGF0YS5zY2hlbWEuYWN0aW9ucyxcbiAgICAgICAgZW50aXR5U2V0czogcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eVNldHMsXG4gICAgICAgIHNpbmdsZXRvbnM6IHJhd01ldGFkYXRhLnNjaGVtYS5zaW5nbGV0b25zLFxuICAgICAgICBlbnRpdHlUeXBlczogcmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eVR5cGVzLFxuICAgICAgICBjb21wbGV4VHlwZXM6IHJhd01ldGFkYXRhLnNjaGVtYS5jb21wbGV4VHlwZXMsXG4gICAgICAgIHR5cGVEZWZpbml0aW9uczogcmF3TWV0YWRhdGEuc2NoZW1hLnR5cGVEZWZpbml0aW9ucyxcbiAgICAgICAgcmVmZXJlbmNlczogdXRpbHNfMS5kZWZhdWx0UmVmZXJlbmNlcy5jb25jYXQoZXh0cmFSZWZlcmVuY2VzKSxcbiAgICAgICAgZGlhZ25vc3RpY3M6IEFOTk9UQVRJT05fRVJST1JTLmNvbmNhdCgpXG4gICAgfTtcbiAgICBjb252ZXJ0ZWRPdXRwdXQucmVzb2x2ZVBhdGggPSBjcmVhdGVHbG9iYWxSZXNvbHZlKGNvbnZlcnRlZE91dHB1dCwgb2JqZWN0TWFwKTtcbiAgICByZXR1cm4gY29udmVydGVkT3V0cHV0O1xufVxuZXhwb3J0cy5jb252ZXJ0ID0gY29udmVydDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnZlcnRlci5qcy5tYXBcblxuLyoqKi8gfSksXG5cbi8qKiovIDc1OTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoeyB2YWx1ZTogdHJ1ZSB9KSk7XG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXyg4NzUpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKDQyNiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oNjkpLCBleHBvcnRzKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjk6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7IHZhbHVlOiB0cnVlIH0pKTtcbmV4cG9ydHMuRGVjaW1hbCA9IGV4cG9ydHMuaXNDb21wbGV4VHlwZURlZmluaXRpb24gPSBleHBvcnRzLlRlcm1Ub1R5cGVzID0gZXhwb3J0cy51bmFsaWFzID0gZXhwb3J0cy5hbGlhcyA9IGV4cG9ydHMuZGVmYXVsdFJlZmVyZW5jZXMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHRSZWZlcmVuY2VzID0gW1xuICAgIHsgYWxpYXM6ICdDYXBhYmlsaXRpZXMnLCBuYW1lc3BhY2U6ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxJywgdXJpOiAnJyB9LFxuICAgIHsgYWxpYXM6ICdBZ2dyZWdhdGlvbicsIG5hbWVzcGFjZTogJ09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMScsIHVyaTogJycgfSxcbiAgICB7IGFsaWFzOiAnVmFsaWRhdGlvbicsIG5hbWVzcGFjZTogJ09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxJywgdXJpOiAnJyB9LFxuICAgIHsgbmFtZXNwYWNlOiAnT3JnLk9EYXRhLkNvcmUuVjEnLCBhbGlhczogJ0NvcmUnLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdPcmcuT0RhdGEuTWVhc3VyZXMuVjEnLCBhbGlhczogJ01lYXN1cmVzJywgdXJpOiAnJyB9LFxuICAgIHsgbmFtZXNwYWNlOiAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxJywgYWxpYXM6ICdDb21tb24nLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MScsIGFsaWFzOiAnVUknLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxJywgYWxpYXM6ICdTZXNzaW9uJywgdXJpOiAnJyB9LFxuICAgIHsgbmFtZXNwYWNlOiAnY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxJywgYWxpYXM6ICdBbmFseXRpY3MnLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MScsIGFsaWFzOiAnQ29kZUxpc3QnLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEnLCBhbGlhczogJ1BlcnNvbmFsRGF0YScsIHVyaTogJycgfSxcbiAgICB7IG5hbWVzcGFjZTogJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEnLCBhbGlhczogJ0NvbW11bmljYXRpb24nLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MScsIGFsaWFzOiAnSFRNTDUnLCB1cmk6ICcnIH1cbl07XG4vKipcbiAqIFRyYW5zZm9ybSBhbiB1bmFsaWFzZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFubm90YXRpb24gdG8gdGhlIGFsaWFzZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyBjdXJyZW50UmVmZXJlbmNlcyBmb3IgdGhlIHByb2plY3RcbiAqIEBwYXJhbSB1bmFsaWFzZWRWYWx1ZSB0aGUgdW5hbGlhc2VkIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgYWxpYXNlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzYW1lXG4gKi9cbmZ1bmN0aW9uIGFsaWFzKHJlZmVyZW5jZXMsIHVuYWxpYXNlZFZhbHVlKSB7XG4gICAgaWYgKCFyZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXApIHtcbiAgICAgICAgcmVmZXJlbmNlcy5yZXZlcnNlUmVmZXJlbmNlTWFwID0gcmVmZXJlbmNlcy5yZWR1Y2UoKG1hcCwgcmVmKSA9PiB7XG4gICAgICAgICAgICBtYXBbcmVmLm5hbWVzcGFjZV0gPSByZWY7XG4gICAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIGlmICghdW5hbGlhc2VkVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHVuYWxpYXNlZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBsYXN0RG90SW5kZXggPSB1bmFsaWFzZWRWYWx1ZS5sYXN0SW5kZXhPZignLicpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHVuYWxpYXNlZFZhbHVlLnN1YnN0cmluZygwLCBsYXN0RG90SW5kZXgpO1xuICAgIGNvbnN0IHZhbHVlID0gdW5hbGlhc2VkVmFsdWUuc3Vic3RyaW5nKGxhc3REb3RJbmRleCArIDEpO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcFtuYW1lc3BhY2VdO1xuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIGAke3JlZmVyZW5jZS5hbGlhc30uJHt2YWx1ZX1gO1xuICAgIH1cbiAgICBlbHNlIGlmICh1bmFsaWFzZWRWYWx1ZS5pbmRleE9mKCdAJykgIT09IC0xKSB7XG4gICAgICAgIC8vIFRyeSB0byBzZWUgaWYgaXQncyBhbiBhbm5vdGF0aW9uIFBhdGggbGlrZSB0b19TYWxlc09yZGVyL0BVSS5MaW5lSXRlbVxuICAgICAgICBjb25zdCBbcHJlQWxpYXMsIC4uLnBvc3RBbGlhc10gPSB1bmFsaWFzZWRWYWx1ZS5zcGxpdCgnQCcpO1xuICAgICAgICByZXR1cm4gYCR7cHJlQWxpYXN9QCR7YWxpYXMocmVmZXJlbmNlcywgcG9zdEFsaWFzLmpvaW4oJ0AnKSl9YDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmFsaWFzZWRWYWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLmFsaWFzID0gYWxpYXM7XG4vKipcbiAqIFRyYW5zZm9ybSBhbiBhbGlhc2VkIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbm5vdGF0aW9uIHRvIHRoZSB1bmFsaWFzZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyBjdXJyZW50UmVmZXJlbmNlcyBmb3IgdGhlIHByb2plY3RcbiAqIEBwYXJhbSBhbGlhc2VkVmFsdWUgdGhlIGFsaWFzZWQgdmFsdWVcbiAqIEByZXR1cm5zIHRoZSB1bmFsaWFzZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2FtZVxuICovXG5mdW5jdGlvbiB1bmFsaWFzKHJlZmVyZW5jZXMsIGFsaWFzZWRWYWx1ZSkge1xuICAgIGlmICghcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXApIHtcbiAgICAgICAgcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwLCByZWYpID0+IHtcbiAgICAgICAgICAgIG1hcFtyZWYuYWxpYXNdID0gcmVmO1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICBpZiAoIWFsaWFzZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYWxpYXNlZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBbdm9jQWxpYXMsIC4uLnZhbHVlXSA9IGFsaWFzZWRWYWx1ZS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmVmZXJlbmNlTWFwW3ZvY0FsaWFzXTtcbiAgICBpZiAocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBgJHtyZWZlcmVuY2UubmFtZXNwYWNlfS4ke3ZhbHVlLmpvaW4oJy4nKX1gO1xuICAgIH1cbiAgICBlbHNlIGlmIChhbGlhc2VkVmFsdWUuaW5kZXhPZignQCcpICE9PSAtMSkge1xuICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiBQYXRoIGxpa2UgdG9fU2FsZXNPcmRlci9AVUkuTGluZUl0ZW1cbiAgICAgICAgY29uc3QgW3ByZUFsaWFzLCAuLi5wb3N0QWxpYXNdID0gYWxpYXNlZFZhbHVlLnNwbGl0KCdAJyk7XG4gICAgICAgIHJldHVybiBgJHtwcmVBbGlhc31AJHt1bmFsaWFzKHJlZmVyZW5jZXMsIHBvc3RBbGlhcy5qb2luKCdAJykpfWA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gYWxpYXNlZFZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMudW5hbGlhcyA9IHVuYWxpYXM7XG52YXIgVGVybVRvVHlwZXM7XG4oZnVuY3Rpb24gKFRlcm1Ub1R5cGVzKSB7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5TZWN1cml0eVNjaGVtZXNcIl0gPSBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5BdXRob3JpemF0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuQXV0aG9yaXphdGlvblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUmV2aXNpb25zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXZpc2lvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkxpbmtzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5MaW5rXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5FeGFtcGxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5FeGFtcGxlVmFsdWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk1lc3NhZ2VzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5NZXNzYWdlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuVmFsdWVFeGNlcHRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlZhbHVlRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUmVzb3VyY2VFeGNlcHRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlJlc291cmNlRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRGF0YU1vZGlmaWNhdGlvbkV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuRGF0YU1vZGlmaWNhdGlvbkV4Y2VwdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzTGFuZ3VhZ2VEZXBlbmRlbnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRGVyZWZlcmVuY2VhYmxlSURzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbnZlbnRpb25hbElEc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5QZXJtaXNzaW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUGVybWlzc2lvblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRGVmYXVsdE5hbWVzcGFjZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWREZWZhdWx0VmFsdWVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNVUkxcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNNZWRpYVR5cGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5Db250ZW50RGlzcG9zaXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpbWlzdGljQ29uY3VycmVuY3lcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFkZGl0aW9uYWxQcm9wZXJ0aWVzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkF1dG9FeHBhbmRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQXV0b0V4cGFuZFJlZmVyZW5jZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTWF5SW1wbGVtZW50XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUeXBlTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3JkZXJlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Qb3NpdGlvbmFsSW5zZXJ0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFsdGVybmF0ZUtleXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkFsdGVybmF0ZUtleVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW9uYWxQYXJhbWV0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGlvbmFsUGFyYW1ldGVyVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlXCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuU3ltYm9saWNOYW1lXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWxcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQXN5bmNocm9ub3VzUmVxdWVzdHNTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaENvbnRpbnVlT25FcnJvclN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLklzb2xhdGlvblN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Jc29sYXRpb25MZXZlbFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Dcm9zc0pvaW5TdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1N1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluZGV4YWJsZUJ5S2V5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVG9wU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2tpcFN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbXB1dGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5FeHBhbmRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRXhwYW5kUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5LZXlBc1NlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5RdWVyeVNlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbGxlY3Rpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db2xsZWN0aW9uUHJvcGVydHlSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk9wZXJhdGlvblJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5PcGVyYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkFubm90YXRpb25WYWx1ZXNJblF1ZXJ5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTW9kaWZpY2F0aW9uUXVlcnlPcHRpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1vZGlmaWNhdGlvblF1ZXJ5T3B0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21IZWFkZXJzXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVBhcmFtZXRlclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21RdWVyeU9wdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1lZGlhTG9jYXRpb25VcGRhdGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuR3JvdXBhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BZ2dyZWdhdGFibGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5MZXZlbGVkSGllcmFyY2h5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5XCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1wiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1cIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZXNcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTXVsdGlwbGVPZlwiXSA9IFwiRWRtLkRlY2ltYWxcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mXCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuT3BlblByb3BlcnR5VHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFR5cGVOYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5EZXJpdmVkVHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFR5cGVOYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVGVybXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFRlcm1OYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BcHBsaWNhYmxlVGVybXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFRlcm1OYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhJdGVtc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5JdGVtc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuTWVhc3VyZXMuVjEuU2NhbGVcIl0gPSBcIkVkbS5CeXRlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuTWVhc3VyZXMuVjEuRHVyYXRpb25HcmFudWxhcml0eVwiXSA9IFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxLkR1cmF0aW9uR3JhbnVsYXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuRGltZW5zaW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5NZWFzdXJlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BY2N1bXVsYXRpdmVNZWFzdXJlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5Sb2xsZWRVcFByb3BlcnR5Q291bnRcIl0gPSBcIkVkbS5JbnQxNlwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlBsYW5uaW5nQWN0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydGllc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZXJ2aWNlVmVyc2lvblwiXSA9IFwiRWRtLkludDMyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VydmljZVNjaGVtYVZlcnNpb25cIl0gPSBcIkVkbS5JbnQzMlwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRGb3JcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0xhbmd1YWdlSWRlbnRpZmllclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvcm1hdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRGb3JtYXRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1VwcGVyQ2FzZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDdXJyZW5jeVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNVbml0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vbml0U3BlY2lmaWNTY2FsZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vbml0U3BlY2lmaWNQcmVjaXNpb25cIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2Vjb25kYXJ5S2V5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWluT2NjdXJzXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXhPY2N1cnNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFzc29jaWF0aW9uRW50aXR5XCJdID0gXCJFZG0uTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRlcml2ZWROYXZpZ2F0aW9uXCJdID0gXCJFZG0uTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1hc2tlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWFza2VkQWx3YXlzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNJbnN0YW5jZUFubm90YXRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGxpY2F0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGltZXN0YW1wXCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXNcIl0gPSBcIkVkbS5Db21wbGV4VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLm51bWVyaWNTZXZlcml0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk51bWVyaWNNZXNzYWdlU2V2ZXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWF4aW11bU51bWVyaWNNZXNzYWdlU2V2ZXJpdHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5OdW1lcmljTWVzc2FnZVNldmVyaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQWN0aW9uQ3JpdGljYWxcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXR0cmlidXRlc1wiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlbGF0ZWRSZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkludGVydmFsXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuV2Vha1JlZmVyZW50aWFsQ29uc3RyYWludFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLldlYWtSZWZlcmVudGlhbENvbnN0cmFpbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNOYXR1cmFsUGVyc29uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2ltcGxlSWRlbnRpZmllclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdE1hcHBpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJIYWxmeWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJNb250aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZDYWxlbmRhck1vbnRoXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mQ2FsZW5kYXJZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhckhhbGZ5ZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhclF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyTW9udGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyV2Vla1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhckRhdGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxQZXJpb2RcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclBlcmlvZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFdlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZGaXNjYWxZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJWYXJpYW50XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NdXR1YWxseUV4Y2x1c2l2ZVRlcm1cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRBY3RpdmF0aW9uVmlhXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2ltcGxlSWRlbnRpZmllclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVkaXRhYmxlRmllbGRGb3JcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUXVhbGlmaWVkTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVIaWdoXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ3JlYXRlZEF0XCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQnlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vc2VySURcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DaGFuZ2VkQXRcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNoYW5nZWRCeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVzZXJJRFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGx5TXVsdGlVbml0QmVoYXZpb3JGb3JTb3J0aW5nQW5kRmlsdGVyaW5nXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkN1cnJlbmN5Q29kZXNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkNvZGVMaXN0U291cmNlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Vbml0c09mTWVhc3VyZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ29kZUxpc3RTb3VyY2VcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlN0YW5kYXJkQ29kZVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuRXh0ZXJuYWxDb2RlXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Jc0NvbmZpZ3VyYXRpb25EZXByZWNhdGlvbkNvZGVcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Jc0VtYWlsQWRkcmVzc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzUGhvbmVOdW1iZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5FdmVudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5FdmVudERhdGFcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuVGFza1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5UYXNrRGF0YVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5NZXNzYWdlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLk1lc3NhZ2VEYXRhXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkZpZWxkU2VtYW50aWNzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlQZXJzb25hbFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkJhZGdlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5CYWRnZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU3RhdHVzSW5mb1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbm5lY3RlZEZpZWxkc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db250YWN0c1wiXSA9IFwiRWRtLkFubm90YXRpb25QYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLktQSVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydERlZmluaXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlMYWJlbHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5TGFiZWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrVmlld0ZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrQ3JlYXRlRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmlsdGVyRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWZlcmVuY2VGYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGhpbmdQZXJzcGVjdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc1N1bW1hcnlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFydE9mUHJldmlld1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NYXBcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2FsbGVyeVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0ltYWdlVVJMXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzSW1hZ2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTXVsdGlMaW5lVGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JlYXRlSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlVwZGF0ZUhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EZWxldGVIaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRW1waGFzaXplZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5PcmRlckJ5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvblN0YXRlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvblN0YXRlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25MaXN0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvbkxpc3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxLkNzc0RlZmF1bHRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MS5Dc3NEZWZhdWx0c1R5cGVcIjtcbn0pKFRlcm1Ub1R5cGVzID0gZXhwb3J0cy5UZXJtVG9UeXBlcyB8fCAoZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHt9KSk7XG4vKipcbiAqIERpZmZlcmVudGlhdGUgYmV0d2VlbiBhIENvbXBsZXhUeXBlIGFuZCBhIFR5cGVEZWZpbml0aW9uLlxuICogQHBhcmFtIGNvbXBsZXhUeXBlRGVmaW5pdGlvblxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBjb21wbGV4IHR5cGVcbiAqL1xuZnVuY3Rpb24gaXNDb21wbGV4VHlwZURlZmluaXRpb24oY29tcGxleFR5cGVEZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuICghIWNvbXBsZXhUeXBlRGVmaW5pdGlvbiAmJiBjb21wbGV4VHlwZURlZmluaXRpb24uX3R5cGUgPT09ICdDb21wbGV4VHlwZScgJiYgISFjb21wbGV4VHlwZURlZmluaXRpb24ucHJvcGVydGllcyk7XG59XG5leHBvcnRzLmlzQ29tcGxleFR5cGVEZWZpbml0aW9uID0gaXNDb21wbGV4VHlwZURlZmluaXRpb247XG5mdW5jdGlvbiBEZWNpbWFsKHZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXNEZWNpbWFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlT2YoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5EZWNpbWFsID0gRGVjaW1hbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcFxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDI2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoeyB2YWx1ZTogdHJ1ZSB9KSk7XG5leHBvcnRzLnJldmVydFRlcm1Ub0dlbmVyaWNUeXBlID0gdm9pZCAwO1xuY29uc3QgdXRpbHNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuLyoqXG4gKiBSZXZlcnQgYW4gb2JqZWN0IHRvIGl0cyByYXcgdHlwZSBlcXVpdmFsZW50LlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHJlZmVyZW5jZVxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZXZlcnRcbiAqIEByZXR1cm5zIHRoZSByYXcgdmFsdWVcbiAqL1xuZnVuY3Rpb24gcmV2ZXJ0T2JqZWN0VG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBDb2xsZWN0aW9uOiB2YWx1ZS5tYXAoKGFubm8pID0+IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGFubm8pKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICgoX2EgPSB2YWx1ZS5pc0RlY2ltYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnRGVjaW1hbCcsXG4gICAgICAgICAgICBEZWNpbWFsOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKF9iID0gdmFsdWUuaXNTdHJpbmcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKHZhbHVlKSkge1xuICAgICAgICBjb25zdCB2YWx1ZU1hdGNoZXMgPSB2YWx1ZS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAodmFsdWVNYXRjaGVzLmxlbmd0aCA+IDEgJiYgcmVmZXJlbmNlcy5maW5kKChyZWYpID0+IHJlZi5hbGlhcyA9PT0gdmFsdWVNYXRjaGVzWzBdKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdFbnVtTWVtYmVyJyxcbiAgICAgICAgICAgICAgICBFbnVtTWVtYmVyOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgICAgU3RyaW5nOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ1BhdGgnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcbiAgICAgICAgICAgIFBhdGg6IHZhbHVlLnBhdGhcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ0Fubm90YXRpb25QYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnQW5ub3RhdGlvblBhdGgnLFxuICAgICAgICAgICAgQW5ub3RhdGlvblBhdGg6IHZhbHVlLnZhbHVlXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdBcHBseScpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0FwcGx5JyxcbiAgICAgICAgICAgIEFwcGx5OiB2YWx1ZS5BcHBseVxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnTnVsbCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdQcm9wZXJ0eVBhdGgnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgUHJvcGVydHlQYXRoOiB2YWx1ZS52YWx1ZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aDogdmFsdWUudmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnJFR5cGUnKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUmVjb3JkJyxcbiAgICAgICAgICAgIFJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldmVydCBhIHZhbHVlIHRvIGl0cyByYXcgdmFsdWUgZGVwZW5kaW5nIG9uIGl0cyB0eXBlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHNldCBvZiByZWZlcmVuY2VcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmV2ZXJ0XG4gKiBAcmV0dXJucyB0aGUgcmF3IGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gcmV2ZXJ0VmFsdWVUb1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IHZhbHVlQ29uc3RydWN0b3IgPSB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgICBzd2l0Y2ggKHZhbHVlQ29uc3RydWN0b3IpIHtcbiAgICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlTWF0Y2hlcyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZU1hdGNoZXMubGVuZ3RoID4gMSAmJiByZWZlcmVuY2VzLmZpbmQoKHJlZikgPT4gcmVmLmFsaWFzID09PSB2YWx1ZU1hdGNoZXNbMF0pKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRW51bU1lbWJlcicsXG4gICAgICAgICAgICAgICAgICAgIEVudW1NZW1iZXI6IHZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nOiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCb29sZWFuJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jvb2wnLFxuICAgICAgICAgICAgICAgIEJvb2w6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdOdW1iZXInOlxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkgPT09IHZhbHVlLnRvRml4ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgICAgICAgICAgIEludDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0RlY2ltYWwnLFxuICAgICAgICAgICAgICAgICAgICBEZWNpbWFsOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXN1bHQgPSByZXZlcnRPYmplY3RUb1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5jb25zdCByZXN0cmljdGVkS2V5cyA9IFsnJFR5cGUnLCAndGVybScsICdfX3NvdXJjZScsICdxdWFsaWZpZXInLCAnQWN0aW9uVGFyZ2V0JywgJ2Z1bGx5UXVhbGlmaWVkTmFtZScsICdhbm5vdGF0aW9ucyddO1xuLyoqXG4gKiBSZXZlcnQgdGhlIGN1cnJlbnQgZW1iZWRkZWQgYW5ub3RhdGlvbnMgdG8gdGhlaXIgcmF3IHR5cGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZVxuICogQHBhcmFtIGN1cnJlbnRBbm5vdGF0aW9ucyB0aGUgY29sbGVjdGlvbiBpdGVtIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gdGFyZ2V0QW5ub3RhdGlvbnMgdGhlIHBsYWNlIHdoZXJlIHdlIG5lZWQgdG8gYWRkIHRoZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHJldmVydEFubm90YXRpb25zVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGN1cnJlbnRBbm5vdGF0aW9ucywgdGFyZ2V0QW5ub3RhdGlvbnMpIHtcbiAgICBPYmplY3Qua2V5cyhjdXJyZW50QW5ub3RhdGlvbnMpXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSAnX2Fubm90YXRpb25zJylcbiAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50QW5ub3RhdGlvbnNba2V5XSkuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQW5ub3RhdGlvbiA9IHJldmVydFRlcm1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXMsIGN1cnJlbnRBbm5vdGF0aW9uc1trZXldW3Rlcm1dKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkQW5ub3RhdGlvbi50ZXJtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5hbGlhc2VkVGVybSA9ICgwLCB1dGlsc18xLnVuYWxpYXMpKHJlZmVyZW5jZXMsIGAke2tleX0uJHt0ZXJtfWApO1xuICAgICAgICAgICAgICAgIGlmICh1bmFsaWFzZWRUZXJtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1YWxpZmllZFNwbGl0ID0gdW5hbGlhc2VkVGVybS5zcGxpdCgnIycpO1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWRBbm5vdGF0aW9uLnRlcm0gPSBxdWFsaWZpZWRTcGxpdFswXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWxpZmllZFNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1YiBBbm5vdGF0aW9uIHdpdGggYSBxdWFsaWZpZXIsIG5vdCBzdXJlIHdoZW4gdGhhdCBjYW4gaGFwcGVuIGluIHJlYWwgc2NlbmFyaW9zXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRBbm5vdGF0aW9uLnF1YWxpZmllciA9IHF1YWxpZmllZFNwbGl0WzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0QW5ub3RhdGlvbnMucHVzaChwYXJzZWRBbm5vdGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vKipcbiAqIFJldmVydCB0aGUgY3VycmVudCBjb2xsZWN0aW9uIGl0ZW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmF3IGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZVxuICogQHBhcmFtIGNvbGxlY3Rpb25JdGVtIHRoZSBjb2xsZWN0aW9uIGl0ZW0gdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHRoZSByYXcgdHlwZSBlcXVpdmFsZW50XG4gKi9cbmZ1bmN0aW9uIHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGNvbGxlY3Rpb25JdGVtKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xsZWN0aW9uSXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25JdGVtO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29sbGVjdGlvbkl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uSXRlbS5oYXNPd25Qcm9wZXJ0eSgnJFR5cGUnKSkge1xuICAgICAgICAgICAgLy8gQW5ub3RhdGlvbiBSZWNvcmRcbiAgICAgICAgICAgIGNvbnN0IG91dEl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbkl0ZW0uJFR5cGUsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZXM6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gQ291bGQgdmFsaWRhdGUga2V5cyBhbmQgdHlwZSBiYXNlZCBvbiAkVHlwZVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29sbGVjdGlvbkl0ZW0pLmZvckVhY2goKGNvbGxlY3Rpb25LZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdHJpY3RlZEtleXMuaW5kZXhPZihjb2xsZWN0aW9uS2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2xsZWN0aW9uSXRlbVtjb2xsZWN0aW9uS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgb3V0SXRlbS5wcm9wZXJ0eVZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbGxlY3Rpb25LZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmV2ZXJ0VmFsdWVUb1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2xsZWN0aW9uS2V5ID09PSAnYW5ub3RhdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dEl0ZW0uYW5ub3RhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUocmVmZXJlbmNlcywgY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV0sIG91dEl0ZW0uYW5ub3RhdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG91dEl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gJ1Byb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1Byb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgUHJvcGVydHlQYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSAnQW5ub3RhdGlvblBhdGgnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgICAgICAgICAgQW5ub3RhdGlvblBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFJldmVydCBhbiBhbm5vdGF0aW9uIHRlcm0gdG8gaXQncyBnZW5lcmljIG9yIHJhdyBlcXVpdmFsZW50LlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGN1cnJlbnQgY29udGV4dFxuICogQHBhcmFtIGFubm90YXRpb24gdGhlIGFubm90YXRpb24gdGVybSB0byByZXZlcnRcbiAqIEByZXR1cm5zIHRoZSByYXcgYW5ub3RhdGlvblxuICovXG5mdW5jdGlvbiByZXZlcnRUZXJtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSB7XG4gICAgY29uc3QgYmFzZUFubm90YXRpb24gPSB7XG4gICAgICAgIHRlcm06IGFubm90YXRpb24udGVybSxcbiAgICAgICAgcXVhbGlmaWVyOiBhbm5vdGF0aW9uLnF1YWxpZmllclxuICAgIH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbikpIHtcbiAgICAgICAgLy8gQ29sbGVjdGlvblxuICAgICAgICBpZiAoYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYW5ub3RhdGlvbnMnKSkge1xuICAgICAgICAgICAgLy8gQW5ub3RhdGlvbiBvbiBhIGNvbGxlY3Rpb24gaXRzZWxmLCBub3Qgc3VyZSB3aGVuIHRoYXQgaGFwcGVucyBpZiBhdCBhbGxcbiAgICAgICAgICAgIGJhc2VBbm5vdGF0aW9uLmFubm90YXRpb25zID0gW107XG4gICAgICAgICAgICByZXZlcnRBbm5vdGF0aW9uc1RvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uLmFubm90YXRpb25zLCBiYXNlQW5ub3RhdGlvbi5hbm5vdGF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUFubm90YXRpb24pLCB7IGNvbGxlY3Rpb246IGFubm90YXRpb24ubWFwKChhbm5vKSA9PiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vKSkgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoJyRUeXBlJykpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUFubm90YXRpb24pLCB7IHJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbikgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQW5ub3RhdGlvbiksIHsgdmFsdWU6IHJldmVydFZhbHVlVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGFubm90YXRpb24pIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMucmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUgPSByZXZlcnRUZXJtVG9HZW5lcmljVHlwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyaXRlYmFjay5qcy5tYXBcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gXHR9KTtcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIHN0YXJ0dXBcbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdC8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NTkpO1xuLyoqKioqKi8gXHRBbm5vdGF0aW9uQ29udmVydGVyID0gX193ZWJwYWNrX2V4cG9ydHNfXztcbi8qKioqKiovIFx0XG4vKioqKioqLyB9KSgpXG47Il19
|
|
2146
|
+
return AnnotationConverter;
|
|
2147
|
+
},true);
|