@sapui5/sap.fe.core 1.102.2 → 1.104.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +73 -30
- package/src/sap/fe/core/AppComponent.ts +65 -43
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +227 -126
- package/src/sap/fe/core/CommonUtils.ts +240 -163
- 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/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
- 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 +101 -74
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
- 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 +9 -9
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -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 +170 -139
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- 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 +200 -131
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- 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 +190 -141
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
- 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 +71 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
- 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 +7 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +15 -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 +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
- package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +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 +26 -33
- 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 +30 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
- package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
- package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
- package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
- 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 +65 -59
- 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 +77 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
- 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 +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/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 +1832 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/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 +39 -63
- package/src/sap/fe/core/messagebundle_ar.properties +25 -39
- package/src/sap/fe/core/messagebundle_bg.properties +25 -39
- package/src/sap/fe/core/messagebundle_ca.properties +25 -39
- package/src/sap/fe/core/messagebundle_cs.properties +25 -39
- package/src/sap/fe/core/messagebundle_cy.properties +25 -39
- package/src/sap/fe/core/messagebundle_da.properties +25 -39
- package/src/sap/fe/core/messagebundle_de.properties +25 -39
- package/src/sap/fe/core/messagebundle_el.properties +26 -40
- package/src/sap/fe/core/messagebundle_en.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
- package/src/sap/fe/core/messagebundle_es.properties +27 -41
- package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
- package/src/sap/fe/core/messagebundle_et.properties +25 -39
- package/src/sap/fe/core/messagebundle_fi.properties +25 -39
- package/src/sap/fe/core/messagebundle_fr.properties +26 -40
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
- package/src/sap/fe/core/messagebundle_hi.properties +25 -39
- package/src/sap/fe/core/messagebundle_hr.properties +25 -39
- package/src/sap/fe/core/messagebundle_hu.properties +25 -39
- package/src/sap/fe/core/messagebundle_id.properties +25 -39
- package/src/sap/fe/core/messagebundle_it.properties +41 -55
- package/src/sap/fe/core/messagebundle_iw.properties +25 -39
- package/src/sap/fe/core/messagebundle_ja.properties +25 -39
- package/src/sap/fe/core/messagebundle_kk.properties +25 -39
- package/src/sap/fe/core/messagebundle_ko.properties +30 -44
- package/src/sap/fe/core/messagebundle_lt.properties +25 -39
- package/src/sap/fe/core/messagebundle_lv.properties +25 -39
- package/src/sap/fe/core/messagebundle_ms.properties +25 -39
- package/src/sap/fe/core/messagebundle_nl.properties +27 -41
- package/src/sap/fe/core/messagebundle_no.properties +25 -39
- package/src/sap/fe/core/messagebundle_pl.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
- package/src/sap/fe/core/messagebundle_ro.properties +25 -39
- package/src/sap/fe/core/messagebundle_ru.properties +25 -39
- package/src/sap/fe/core/messagebundle_sh.properties +25 -39
- package/src/sap/fe/core/messagebundle_sk.properties +25 -39
- package/src/sap/fe/core/messagebundle_sl.properties +25 -39
- package/src/sap/fe/core/messagebundle_sv.properties +25 -39
- package/src/sap/fe/core/messagebundle_th.properties +25 -39
- package/src/sap/fe/core/messagebundle_tr.properties +25 -39
- package/src/sap/fe/core/messagebundle_uk.properties +25 -39
- package/src/sap/fe/core/messagebundle_vi.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
- 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 +97 -69
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
- 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 +61 -49
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- 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 +92 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -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 +224 -198
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
- 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 +16 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- package/src/sap/fe/core/type/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,18 +2,17 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/SemanticDateOperators", "sap/fe/core/helpers/SemanticKeyHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/MessageBox", "sap/m/Title", "sap/ui/core/Component", "sap/ui/core/Core", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/mdc/condition/FilterOperatorUtil", "sap/ui/mdc/odata/v4/TypeUtil", "sap/ui/model/json/JSONModel", "./controllerextensions/messageHandler/messageHandling", "./templating/FilterHelper"], function (Log, mergeObjects, IssueManager, BindingToolkit, ModelHelper, SemanticDateOperators, SemanticKeyHelper, StableIdHelper, Bar, Button, Dialog, MessageBox, Title, Component, Core, Fragment, XMLPreprocessor, XMLTemplateProcessor, FilterOperatorUtil, TypeUtil, JSONModel, messageHandling, FilterHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var getConditions = FilterHelper.getConditions;
|
|
9
|
-
var system = Device.system;
|
|
10
9
|
var generate = StableIdHelper.generate;
|
|
11
|
-
var transformRecursively =
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
10
|
+
var transformRecursively = BindingToolkit.transformRecursively;
|
|
11
|
+
var pathInModel = BindingToolkit.pathInModel;
|
|
12
|
+
var or = BindingToolkit.or;
|
|
13
|
+
var not = BindingToolkit.not;
|
|
14
|
+
var constant = BindingToolkit.constant;
|
|
15
|
+
var compileExpression = BindingToolkit.compileExpression;
|
|
17
16
|
var IssueSeverity = IssueManager.IssueSeverity;
|
|
18
17
|
var IssueCategoryType = IssueManager.IssueCategoryType;
|
|
19
18
|
var IssueCategory = IssueManager.IssueCategory;
|
|
@@ -27,7 +26,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
27
26
|
|
|
28
27
|
return sSearchTerm.replace(/"/g, " ").split(/\s+/).reduce(function (sNormalized, sCurrentWord) {
|
|
29
28
|
if (sCurrentWord !== "") {
|
|
30
|
-
sNormalized = (sNormalized ? sNormalized
|
|
29
|
+
sNormalized = "".concat(sNormalized ? "".concat(sNormalized, " ") : "", "\"").concat(sCurrentWord, "\"");
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
return sNormalized;
|
|
@@ -101,14 +100,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
101
100
|
return oNavigationRestrictions["SearchRestrictions"];
|
|
102
101
|
}
|
|
103
102
|
|
|
104
|
-
sPath = sPath
|
|
103
|
+
sPath = "".concat(sPath, "/$NavigationPropertyBinding/").concat(aNavigationParts[i]);
|
|
105
104
|
}
|
|
106
105
|
|
|
107
|
-
return oMetaModel.getObject(sFullPath
|
|
106
|
+
return oMetaModel.getObject("".concat(sFullPath, "@Org.OData.Capabilities.V1.SearchRestrictions"));
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
function getNavigationRestrictions(oModel, sEntitySetPath, sNavigationPath) {
|
|
111
|
-
var oNavigationRestrictions = oModel.getObject(sEntitySetPath
|
|
110
|
+
var oNavigationRestrictions = oModel.getObject("".concat(sEntitySetPath, "@Org.OData.Capabilities.V1.NavigationRestrictions"));
|
|
112
111
|
var aRestrictedProperties = oNavigationRestrictions && oNavigationRestrictions.RestrictedProperties;
|
|
113
112
|
return aRestrictedProperties && aRestrictedProperties.find(function (oRestrictedProperty) {
|
|
114
113
|
return oRestrictedProperty && oRestrictedProperty.NavigationProperty && oRestrictedProperty.NavigationProperty.$NavigationPropertyPath === sNavigationPath;
|
|
@@ -117,7 +116,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
117
116
|
|
|
118
117
|
function _isInNonFilterableProperties(oModel, sEntitySetPath, sContextPath) {
|
|
119
118
|
var bIsNotFilterable = false;
|
|
120
|
-
var oAnnotation = oModel.getObject(sEntitySetPath
|
|
119
|
+
var oAnnotation = oModel.getObject("".concat(sEntitySetPath, "@Org.OData.Capabilities.V1.FilterRestrictions"));
|
|
121
120
|
|
|
122
121
|
if (oAnnotation && oAnnotation.NonFilterableProperties) {
|
|
123
122
|
bIsNotFilterable = oAnnotation.NonFilterableProperties.some(function (property) {
|
|
@@ -130,7 +129,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
130
129
|
|
|
131
130
|
|
|
132
131
|
function _isContextPathFilterable(oModel, sEntitySetPath, sContexPath) {
|
|
133
|
-
var sFullPath = sEntitySetPath
|
|
132
|
+
var sFullPath = "".concat(sEntitySetPath, "/").concat(sContexPath),
|
|
134
133
|
aESParts = sFullPath.split("/").splice(0, 2),
|
|
135
134
|
aContext = sFullPath.split("/").splice(2);
|
|
136
135
|
var bIsNotFilterable = false,
|
|
@@ -138,7 +137,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
138
137
|
sEntitySetPath = aESParts.join("/");
|
|
139
138
|
bIsNotFilterable = aContext.some(function (item, index, array) {
|
|
140
139
|
if (sContext.length > 0) {
|
|
141
|
-
sContext += "/"
|
|
140
|
+
sContext += "/".concat(item);
|
|
142
141
|
} else {
|
|
143
142
|
sContext = item;
|
|
144
143
|
}
|
|
@@ -160,12 +159,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
160
159
|
if (index === array.length - 1) {
|
|
161
160
|
//last path segment
|
|
162
161
|
bIsNotFilterable = _isInNonFilterableProperties(oModel, sEntitySetPath, sContext);
|
|
163
|
-
} else if (oModel.getObject(sEntitySetPath
|
|
162
|
+
} else if (oModel.getObject("".concat(sEntitySetPath, "/$NavigationPropertyBinding/").concat(item))) {
|
|
164
163
|
//check existing context path and initialize it
|
|
165
164
|
bIsNotFilterable = _isInNonFilterableProperties(oModel, sEntitySetPath, sContext);
|
|
166
165
|
sContext = ""; //set the new EntitySet
|
|
167
166
|
|
|
168
|
-
sEntitySetPath = "/"
|
|
167
|
+
sEntitySetPath = "/".concat(oModel.getObject("".concat(sEntitySetPath, "/$NavigationPropertyBinding/").concat(item)));
|
|
169
168
|
}
|
|
170
169
|
|
|
171
170
|
return bIsNotFilterable === true;
|
|
@@ -181,11 +180,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
181
180
|
|
|
182
181
|
var bIsFilterable; // Parameters should be rendered as filterfields
|
|
183
182
|
|
|
184
|
-
if (oModel.getObject(sEntitySetPath
|
|
183
|
+
if (oModel.getObject("".concat(sEntitySetPath, "/@com.sap.vocabularies.Common.v1.ResultContext")) === true) {
|
|
185
184
|
return true;
|
|
186
185
|
}
|
|
187
186
|
|
|
188
|
-
var oNavigationContext = oModel.createBindingContext(sEntitySetPath
|
|
187
|
+
var oNavigationContext = oModel.createBindingContext("".concat(sEntitySetPath, "/").concat(sProperty));
|
|
189
188
|
|
|
190
189
|
if (!bSkipHiddenFilter) {
|
|
191
190
|
if (oNavigationContext.getProperty("@com.sap.vocabularies.UI.v1.Hidden") === true || oNavigationContext.getProperty("@com.sap.vocabularies.UI.v1.HiddenFilter") === true) {
|
|
@@ -196,11 +195,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
196
195
|
var sHiddenFilterPath = oNavigationContext.getProperty("@com.sap.vocabularies.UI.v1.HiddenFilter/$Path");
|
|
197
196
|
|
|
198
197
|
if (sHiddenPath && sHiddenFilterPath) {
|
|
199
|
-
return
|
|
198
|
+
return compileExpression(not(or(pathInModel(sHiddenPath), pathInModel(sHiddenFilterPath))));
|
|
200
199
|
} else if (sHiddenPath) {
|
|
201
|
-
return
|
|
200
|
+
return compileExpression(not(pathInModel(sHiddenPath)));
|
|
202
201
|
} else if (sHiddenFilterPath) {
|
|
203
|
-
return
|
|
202
|
+
return compileExpression(not(pathInModel(sHiddenFilterPath)));
|
|
204
203
|
}
|
|
205
204
|
}
|
|
206
205
|
|
|
@@ -327,7 +326,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
327
326
|
}
|
|
328
327
|
} else {
|
|
329
328
|
// fallback to Technical Keys if no Semantic Key is present
|
|
330
|
-
var aTechnicalKeys = oMetaModel.getObject(oMetaPath
|
|
329
|
+
var aTechnicalKeys = oMetaModel.getObject("".concat(oMetaPath, "/$Type/$Key"));
|
|
331
330
|
|
|
332
331
|
for (var key in aTechnicalKeys) {
|
|
333
332
|
var sObjKey = aTechnicalKeys[key];
|
|
@@ -367,8 +366,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
367
366
|
if (aLinks && aLinks.length > 0) {
|
|
368
367
|
var oTargetParams = {};
|
|
369
368
|
var aAnnotationsSOItems = [];
|
|
370
|
-
var sEntitySetPath = oMetaPath
|
|
371
|
-
var sEntityTypePath = oMetaPath
|
|
369
|
+
var sEntitySetPath = "".concat(oMetaPath, "@");
|
|
370
|
+
var sEntityTypePath = "".concat(oMetaPath, "/@");
|
|
372
371
|
var oEntitySetAnnotations = oMetaModel.getObject(sEntitySetPath);
|
|
373
372
|
oSemanticObjectAnnotations = _getSemanticObjectAnnotations(oEntitySetAnnotations, sCurrentSemObj);
|
|
374
373
|
|
|
@@ -415,8 +414,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
415
414
|
|
|
416
415
|
if (key.indexOf("#") > -1) {
|
|
417
416
|
sQualifier = key.split("#")[1];
|
|
418
|
-
sAnnotationMappingTerm = sAnnotationMappingTerm
|
|
419
|
-
sAnnotationActionTerm = sAnnotationActionTerm
|
|
417
|
+
sAnnotationMappingTerm = "".concat(sAnnotationMappingTerm, "#").concat(sQualifier);
|
|
418
|
+
sAnnotationActionTerm = "".concat(sAnnotationActionTerm, "#").concat(sQualifier);
|
|
420
419
|
}
|
|
421
420
|
|
|
422
421
|
oSemanticObjectAnnotations.aMappings = oSemanticObjectAnnotations.aMappings.concat(oEntityAnnotations[sAnnotationMappingTerm]);
|
|
@@ -434,15 +433,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
434
433
|
var oPath = oBindingContext && oBindingContext.getPath();
|
|
435
434
|
var oMetaPath = oMetaModel.getMetaPath(oPath); // Semantic Key Vocabulary
|
|
436
435
|
|
|
437
|
-
var sSemanticKeyVocabulary = oMetaPath
|
|
436
|
+
var sSemanticKeyVocabulary = "".concat(oMetaPath, "/") + "@com.sap.vocabularies.Common.v1.SemanticKey"; //Semantic Keys
|
|
438
437
|
|
|
439
438
|
var aSemKeys = oMetaModel.getObject(sSemanticKeyVocabulary); // Unavailable Actions
|
|
440
439
|
|
|
441
440
|
var oEntry = oBindingContext.getObject();
|
|
442
441
|
|
|
443
442
|
if (!oEntry) {
|
|
444
|
-
oBindingContext.requestObject().then(function (
|
|
445
|
-
return updateRelateAppsModel(oBindingContext,
|
|
443
|
+
oBindingContext.requestObject().then(function (requestedObject) {
|
|
444
|
+
return updateRelateAppsModel(oBindingContext, requestedObject, oObjectPageLayout, aSemKeys, oMetaModel, oMetaPath);
|
|
446
445
|
}).catch(function (oError) {
|
|
447
446
|
Log.error("Cannot update the related app details", oError);
|
|
448
447
|
});
|
|
@@ -491,7 +490,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
491
490
|
oControl = oControl && oControl.getRootControl();
|
|
492
491
|
}
|
|
493
492
|
|
|
494
|
-
while (oControl && !(
|
|
493
|
+
while (oControl && !oControl.isA("sap.ui.core.mvc.View")) {
|
|
495
494
|
oControl = oControl.getParent();
|
|
496
495
|
}
|
|
497
496
|
|
|
@@ -526,7 +525,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
526
525
|
|
|
527
526
|
for (var j = 0; j < aProperties.length; j++) {
|
|
528
527
|
var sProp = aProperties[j],
|
|
529
|
-
aPropertyAnnotations = oMetaModel.getObject("/"
|
|
528
|
+
aPropertyAnnotations = oMetaModel.getObject("/".concat(sEntitySet, "/").concat(sProp, "@"));
|
|
530
529
|
|
|
531
530
|
if (aPropertyAnnotations) {
|
|
532
531
|
if (aPropertyAnnotations["@com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] || aPropertyAnnotations["@com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] || aPropertyAnnotations["@com.sap.vocabularies.Analytics.v1.Measure"]) {
|
|
@@ -560,7 +559,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
560
559
|
}
|
|
561
560
|
|
|
562
561
|
function fnGetContextPathProperties(oMetaModel, sContextPath, oFilter) {
|
|
563
|
-
var oEntityType = oMetaModel.getObject(sContextPath
|
|
562
|
+
var oEntityType = oMetaModel.getObject("".concat(sContextPath, "/")) || {},
|
|
564
563
|
oProperties = {};
|
|
565
564
|
|
|
566
565
|
for (var sKey in oEntityType) {
|
|
@@ -578,7 +577,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
578
577
|
var aMandatoryFilterFields;
|
|
579
578
|
|
|
580
579
|
if (oMetaModel && sContextPath) {
|
|
581
|
-
aMandatoryFilterFields = oMetaModel.getObject(sContextPath
|
|
580
|
+
aMandatoryFilterFields = oMetaModel.getObject("".concat(sContextPath, "@Org.OData.Capabilities.V1.FilterRestrictions/RequiredProperties"));
|
|
582
581
|
}
|
|
583
582
|
|
|
584
583
|
return aMandatoryFilterFields;
|
|
@@ -662,11 +661,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
662
661
|
// hence check if text exists (using "hasText") in the resource bundle before calling "getText"
|
|
663
662
|
// "hasText" only checks for the key in the immediate resource bundle and not it's custom bundles
|
|
664
663
|
// hence we need to do this recurrsively to check if the key exists in any of the bundles the forms the FE resource bundle
|
|
665
|
-
var bResourceKeyExists = _checkIfResourceKeyExists(oResourceBundle.aCustomBundles, sFrameworkKey
|
|
664
|
+
var bResourceKeyExists = _checkIfResourceKeyExists(oResourceBundle.aCustomBundles, "".concat(sFrameworkKey, "|").concat(sEntitySetName)); // if resource key with entity set name for instance specific text overriding is provided by the application
|
|
666
665
|
// then use the same key otherwise use the Framework key
|
|
667
666
|
|
|
668
667
|
|
|
669
|
-
sResourceKey = bResourceKeyExists ? sFrameworkKey
|
|
668
|
+
sResourceKey = bResourceKeyExists ? "".concat(sFrameworkKey, "|").concat(sEntitySetName) : sFrameworkKey;
|
|
670
669
|
}
|
|
671
670
|
|
|
672
671
|
return oResourceBundle.getText(sResourceKey, oParams);
|
|
@@ -700,20 +699,20 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
700
699
|
var sEntityName = getEntitySetName(oAction.getModel(), sEntityTypeName);
|
|
701
700
|
|
|
702
701
|
if (sEntityName) {
|
|
703
|
-
sContextPath = "/"
|
|
702
|
+
sContextPath = "/".concat(sEntityName);
|
|
704
703
|
}
|
|
705
704
|
|
|
706
705
|
if (bCheckStaticValue) {
|
|
707
|
-
return oAction.getObject(sContextPath
|
|
706
|
+
return oAction.getObject("".concat(sContextPath, "/").concat(sActionName, "@Org.OData.Core.V1.OperationAvailable"));
|
|
708
707
|
}
|
|
709
708
|
|
|
710
709
|
if (bReturnOnlyPath) {
|
|
711
|
-
return sContextPath
|
|
710
|
+
return "".concat(sContextPath, "/").concat(sActionName);
|
|
712
711
|
} else {
|
|
713
712
|
return {
|
|
714
713
|
sContextPath: sContextPath,
|
|
715
|
-
sProperty: oAction.getObject(sContextPath
|
|
716
|
-
sBindingParameter: oAction.getObject(sContextPath
|
|
714
|
+
sProperty: oAction.getObject("".concat(sContextPath, "/").concat(sActionName, "@Org.OData.Core.V1.OperationAvailable/$Path")),
|
|
715
|
+
sBindingParameter: oAction.getObject("".concat(sContextPath, "/").concat(sActionName, "/@$ui5.overload/0/$Parameter/0/$Name"))
|
|
717
716
|
};
|
|
718
717
|
}
|
|
719
718
|
}
|
|
@@ -750,7 +749,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
750
749
|
|
|
751
750
|
function _getEntityType(oContext) {
|
|
752
751
|
var oMetaModel = oContext.getModel().getMetaModel();
|
|
753
|
-
return oMetaModel.getObject(oMetaModel.getMetaPath(oContext.getPath())
|
|
752
|
+
return oMetaModel.getObject("".concat(oMetaModel.getMetaPath(oContext.getPath()), "/$Type"));
|
|
754
753
|
}
|
|
755
754
|
|
|
756
755
|
function _requestObject(sAction, oSelectedContext, sProperty) {
|
|
@@ -821,10 +820,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
821
820
|
|
|
822
821
|
|
|
823
822
|
function _setDynamicActionContexts(oInternalModelContext, sAction, aApplicable, aNotApplicable) {
|
|
824
|
-
var sDynamicActionPathPrefix = oInternalModelContext.getPath()
|
|
823
|
+
var sDynamicActionPathPrefix = "".concat(oInternalModelContext.getPath(), "/dynamicActions/").concat(sAction),
|
|
825
824
|
oInternalModel = oInternalModelContext.getModel();
|
|
826
|
-
oInternalModel.setProperty(sDynamicActionPathPrefix
|
|
827
|
-
oInternalModel.setProperty(sDynamicActionPathPrefix
|
|
825
|
+
oInternalModel.setProperty("".concat(sDynamicActionPathPrefix, "/aApplicable"), aApplicable);
|
|
826
|
+
oInternalModel.setProperty("".concat(sDynamicActionPathPrefix, "/aNotApplicable"), aNotApplicable);
|
|
828
827
|
}
|
|
829
828
|
|
|
830
829
|
function setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts) {
|
|
@@ -832,7 +831,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
832
831
|
|
|
833
832
|
for (var sAction in oActionOperationAvailableMap) {
|
|
834
833
|
// Reset all properties before computation
|
|
835
|
-
oInternalModelContext.setProperty("dynamicActions/"
|
|
834
|
+
oInternalModelContext.setProperty("dynamicActions/".concat(sAction), {
|
|
836
835
|
bEnabled: false,
|
|
837
836
|
aApplicable: [],
|
|
838
837
|
aNotApplicable: []
|
|
@@ -843,7 +842,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
843
842
|
var aApplicable = [],
|
|
844
843
|
aNotApplicable = [],
|
|
845
844
|
sProperty = oActionOperationAvailableMap[sAction],
|
|
846
|
-
sDynamicActionEnabledPath = oInternalModelContext.getPath()
|
|
845
|
+
sDynamicActionEnabledPath = "".concat(oInternalModelContext.getPath(), "/dynamicActions/").concat(sAction, "/bEnabled");
|
|
847
846
|
|
|
848
847
|
if (typeof sProperty === "object" && sProperty !== null && sProperty !== undefined) {
|
|
849
848
|
for (var i = 0; i < aSelectedContexts.length; i++) {
|
|
@@ -852,11 +851,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
852
851
|
if (oSelectedContext) {
|
|
853
852
|
(function () {
|
|
854
853
|
var oContextData = oSelectedContext.getObject();
|
|
855
|
-
var oTransformedBinding = transformRecursively(sProperty, "
|
|
854
|
+
var oTransformedBinding = transformRecursively(sProperty, "PathInModel", // eslint-disable-next-line no-loop-func
|
|
856
855
|
function (oBindingExpression) {
|
|
857
856
|
return constant(oContextData[oBindingExpression.path]);
|
|
858
857
|
}, true);
|
|
859
|
-
var sResult =
|
|
858
|
+
var sResult = compileExpression(oTransformedBinding);
|
|
860
859
|
|
|
861
860
|
if (sResult === "true") {
|
|
862
861
|
oInternalModelContext.getModel().setProperty(sDynamicActionEnabledPath, true);
|
|
@@ -878,7 +877,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
878
877
|
if (_oSelectedContext) {
|
|
879
878
|
var oContextData = _oSelectedContext.getObject();
|
|
880
879
|
|
|
881
|
-
if (sProperty === null && !!oContextData["#"
|
|
880
|
+
if (sProperty === null && !!oContextData["#".concat(sAction)]) {
|
|
882
881
|
//look for action advertisement if present and its value is not null
|
|
883
882
|
oInternalModelContext.getModel().setProperty(sDynamicActionEnabledPath, true);
|
|
884
883
|
break;
|
|
@@ -957,7 +956,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
957
956
|
var aSemanticDateOps = [];
|
|
958
957
|
var oSettings = typeof sSettings === "string" ? JSON.parse(sSettings).customData : sSettings;
|
|
959
958
|
|
|
960
|
-
if (oContext.getObject(sEntitySetPath
|
|
959
|
+
if (oContext.getObject("".concat(sEntitySetPath, "/@com.sap.vocabularies.Common.v1.ResultContext")) === true) {
|
|
961
960
|
return aEqualsOps.toString();
|
|
962
961
|
}
|
|
963
962
|
|
|
@@ -996,7 +995,21 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
996
995
|
break;
|
|
997
996
|
|
|
998
997
|
case "SingleRange":
|
|
999
|
-
var aExpressionOps
|
|
998
|
+
var aExpressionOps;
|
|
999
|
+
|
|
1000
|
+
if (bSemanticDateRange) {
|
|
1001
|
+
if (sType === "Edm.Date") {
|
|
1002
|
+
aExpressionOps = aSemanticDateOps;
|
|
1003
|
+
} else if (sType === "Edm.DateTimeOffset") {
|
|
1004
|
+
aExpressionOps = aSingleRangeDateTimeOps.concat(aBasicDateTimeOps);
|
|
1005
|
+
} else {
|
|
1006
|
+
aExpressionOps = aSingleRangeOps;
|
|
1007
|
+
}
|
|
1008
|
+
} else if (sType === "Edm.DateTimeOffset") {
|
|
1009
|
+
aExpressionOps = aSingleRangeDTBasicOps;
|
|
1010
|
+
} else {
|
|
1011
|
+
aExpressionOps = aSingleRangeOps;
|
|
1012
|
+
}
|
|
1000
1013
|
|
|
1001
1014
|
var sOperators = _getRestrictions(aDefaultOperators, aExpressionOps);
|
|
1002
1015
|
|
|
@@ -1035,7 +1048,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1035
1048
|
|
|
1036
1049
|
function getParameterInfo(oMetaModel, sContextPath) {
|
|
1037
1050
|
var sParameterContextPath = sContextPath.substring(0, sContextPath.lastIndexOf("/"));
|
|
1038
|
-
var bResultContext = oMetaModel.getObject(sParameterContextPath
|
|
1051
|
+
var bResultContext = oMetaModel.getObject("".concat(sParameterContextPath, "/@com.sap.vocabularies.Common.v1.ResultContext"));
|
|
1039
1052
|
var oParameterInfo = {};
|
|
1040
1053
|
|
|
1041
1054
|
if (bResultContext && sParameterContextPath !== sContextPath) {
|
|
@@ -1106,18 +1119,18 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1106
1119
|
aMetadataParameters.forEach(function (sMetadataParameter) {
|
|
1107
1120
|
var sSelectOptionName;
|
|
1108
1121
|
|
|
1109
|
-
if (aSelectOptionsPropertyNames.includes("$Parameter."
|
|
1110
|
-
sSelectOptionName = "$Parameter."
|
|
1122
|
+
if (aSelectOptionsPropertyNames.includes("$Parameter.".concat(sMetadataParameter))) {
|
|
1123
|
+
sSelectOptionName = "$Parameter.".concat(sMetadataParameter);
|
|
1111
1124
|
} else if (aSelectOptionsPropertyNames.includes(sMetadataParameter)) {
|
|
1112
1125
|
sSelectOptionName = sMetadataParameter;
|
|
1113
|
-
} else if (sMetadataParameter.startsWith("P_") && aSelectOptionsPropertyNames.includes("$Parameter."
|
|
1114
|
-
sSelectOptionName = "$Parameter."
|
|
1126
|
+
} else if (sMetadataParameter.startsWith("P_") && aSelectOptionsPropertyNames.includes("$Parameter.".concat(sMetadataParameter.slice(2, sMetadataParameter.length)))) {
|
|
1127
|
+
sSelectOptionName = "$Parameter.".concat(sMetadataParameter.slice(2, sMetadataParameter.length));
|
|
1115
1128
|
} else if (sMetadataParameter.startsWith("P_") && aSelectOptionsPropertyNames.includes(sMetadataParameter.slice(2, sMetadataParameter.length))) {
|
|
1116
1129
|
sSelectOptionName = sMetadataParameter.slice(2, sMetadataParameter.length);
|
|
1117
|
-
} else if (aSelectOptionsPropertyNames.includes("$Parameter.P_"
|
|
1118
|
-
sSelectOptionName = "$Parameter.P_"
|
|
1119
|
-
} else if (aSelectOptionsPropertyNames.includes("P_"
|
|
1120
|
-
sSelectOptionName = "P_"
|
|
1130
|
+
} else if (aSelectOptionsPropertyNames.includes("$Parameter.P_".concat(sMetadataParameter))) {
|
|
1131
|
+
sSelectOptionName = "$Parameter.P_".concat(sMetadataParameter);
|
|
1132
|
+
} else if (aSelectOptionsPropertyNames.includes("P_".concat(sMetadataParameter))) {
|
|
1133
|
+
sSelectOptionName = "P_".concat(sMetadataParameter);
|
|
1121
1134
|
}
|
|
1122
1135
|
|
|
1123
1136
|
if (sSelectOptionName) {
|
|
@@ -1133,8 +1146,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1133
1146
|
sSelectOptionName = sMetadataProperty;
|
|
1134
1147
|
} else if (sMetadataProperty.startsWith("P_") && aSelectOptionsPropertyNames.includes(sMetadataProperty.slice(2, sMetadataProperty.length))) {
|
|
1135
1148
|
sSelectOptionName = sMetadataProperty.slice(2, sMetadataProperty.length);
|
|
1136
|
-
} else if (aSelectOptionsPropertyNames.includes("P_"
|
|
1137
|
-
sSelectOptionName = "P_"
|
|
1149
|
+
} else if (aSelectOptionsPropertyNames.includes("P_".concat(sMetadataProperty))) {
|
|
1150
|
+
sSelectOptionName = "P_".concat(sMetadataProperty);
|
|
1138
1151
|
}
|
|
1139
1152
|
|
|
1140
1153
|
if (sSelectOptionName) {
|
|
@@ -1143,7 +1156,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1143
1156
|
});
|
|
1144
1157
|
aSelectOptionsPropertyNames.forEach(function (sSelectOption) {
|
|
1145
1158
|
if (sSelectOption.indexOf(".") > 0 && !sSelectOption.includes("$Parameter")) {
|
|
1146
|
-
var sFullContextPath =
|
|
1159
|
+
var sFullContextPath = "/".concat(sSelectOption.replaceAll(".", "/")).startsWith(sContextPath) ? "/".concat(sSelectOption.replaceAll(".", "/")) : "".concat(sContextPath, "/").concat(sSelectOption.replaceAll(".", "/")); // check if the full path, eg SalesOrderManage._Item.Material exists in the metamodel
|
|
1147
1160
|
|
|
1148
1161
|
if (oMetaModel.getObject(sFullContextPath.replace("P_", ""))) {
|
|
1149
1162
|
_createConditionsForNavProperties(sFullContextPath, sContextPath, oSelectionVariant, sSelectOption, oMetaModel, oConditions);
|
|
@@ -1165,9 +1178,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1165
1178
|
function _createConditionsForNavProperties(sFullContextPath, sMainEntitySetPath, oSelectionVariant, sSelectOption, oMetaModel, oConditions) {
|
|
1166
1179
|
var aNavObjectNames = sSelectOption.split("."); // Eg: "SalesOrderManage._Item._Material.Material" or "_Item.Material"
|
|
1167
1180
|
|
|
1168
|
-
if (
|
|
1169
|
-
var sFullPath =
|
|
1170
|
-
sNavPath = sFullPath.replace(sMainEntitySetPath
|
|
1181
|
+
if ("/".concat(sSelectOption.replaceAll(".", "/")).startsWith(sMainEntitySetPath)) {
|
|
1182
|
+
var sFullPath = "/".concat(sSelectOption).replaceAll(".", "/"),
|
|
1183
|
+
sNavPath = sFullPath.replace("".concat(sMainEntitySetPath, "/"), "");
|
|
1171
1184
|
aNavObjectNames = sNavPath.split("/");
|
|
1172
1185
|
}
|
|
1173
1186
|
|
|
@@ -1175,13 +1188,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1175
1188
|
var sPropertyName = aNavObjectNames[aNavObjectNames.length - 1]; // Material from SalesOrderManage._Item.Material
|
|
1176
1189
|
|
|
1177
1190
|
for (var i = 0; i < aNavObjectNames.length - 1; i++) {
|
|
1178
|
-
if (oMetaModel.getObject(sMainEntitySetPath
|
|
1179
|
-
sConditionPath = sConditionPath + aNavObjectNames[i]
|
|
1191
|
+
if (oMetaModel.getObject("".concat(sMainEntitySetPath, "/").concat(aNavObjectNames[i].replace("P_", ""))).$isCollection) {
|
|
1192
|
+
sConditionPath = "".concat(sConditionPath + aNavObjectNames[i], "*/"); // _Item*/ in case of 1:n cardinality
|
|
1180
1193
|
} else {
|
|
1181
|
-
sConditionPath = sConditionPath + aNavObjectNames[i]
|
|
1194
|
+
sConditionPath = "".concat(sConditionPath + aNavObjectNames[i], "/"); // _Item/ in case of 1:1 cardinality
|
|
1182
1195
|
}
|
|
1183
1196
|
|
|
1184
|
-
sMainEntitySetPath = sMainEntitySetPath
|
|
1197
|
+
sMainEntitySetPath = "".concat(sMainEntitySetPath, "/").concat(aNavObjectNames[i]);
|
|
1185
1198
|
}
|
|
1186
1199
|
|
|
1187
1200
|
var sNavPropertyPath = sFullContextPath.slice(0, sFullContextPath.lastIndexOf("/")),
|
|
@@ -1193,13 +1206,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1193
1206
|
sSelectOptionName = sPropertyName;
|
|
1194
1207
|
} else if (sPropertyName.startsWith("P_") && oValidProperties[sPropertyName.replace("P_", "")]) {
|
|
1195
1208
|
sSelectOptionName = sPropertyName.replace("P_", "");
|
|
1196
|
-
} else if (oValidProperties["P_"
|
|
1197
|
-
sSelectOptionName = "P_"
|
|
1209
|
+
} else if (oValidProperties["P_".concat(sPropertyName)] && aSelectOptionsPropertyNames.includes("P_".concat(sPropertyName))) {
|
|
1210
|
+
sSelectOptionName = "P_".concat(sPropertyName);
|
|
1198
1211
|
}
|
|
1199
1212
|
|
|
1200
|
-
if (sPropertyName.startsWith("P_") && oConditions[sConditionPath + sSelectOptionName]) {
|
|
1201
|
-
// if there is no SalesOrderManage._Item.Material yet in the oConditions
|
|
1202
|
-
return;
|
|
1213
|
+
if (sPropertyName.startsWith("P_") && oConditions[sConditionPath + sSelectOptionName]) {// if there is no SalesOrderManage._Item.Material yet in the oConditions
|
|
1203
1214
|
} else if (!sPropertyName.startsWith("P_") && oConditions[sConditionPath + sSelectOptionName]) {
|
|
1204
1215
|
delete oConditions[sConditionPath + sSelectOptionName];
|
|
1205
1216
|
addSelectOptionsToConditions(sNavPropertyPath, oSelectionVariant, sSelectOption, oConditions, sConditionPath, sSelectOptionName, oValidProperties, oMetaModel, false);
|
|
@@ -1239,7 +1250,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1239
1250
|
|
|
1240
1251
|
case "EndsWith":
|
|
1241
1252
|
oSelectOptionState.option = "CP";
|
|
1242
|
-
oSelectOptionState.low = "*"
|
|
1253
|
+
oSelectOptionState.low = "*".concat(oSelectOptionState.low);
|
|
1243
1254
|
break;
|
|
1244
1255
|
|
|
1245
1256
|
case "BT":
|
|
@@ -1283,7 +1294,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1283
1294
|
|
|
1284
1295
|
case "NotEndsWith":
|
|
1285
1296
|
oSelectOptionState.option = "CP";
|
|
1286
|
-
oSelectOptionState.low = "*"
|
|
1297
|
+
oSelectOptionState.low = "*".concat(oSelectOptionState.low);
|
|
1287
1298
|
oSelectOptionState.sign = "E";
|
|
1288
1299
|
break;
|
|
1289
1300
|
|
|
@@ -1313,7 +1324,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1313
1324
|
break;
|
|
1314
1325
|
|
|
1315
1326
|
default:
|
|
1316
|
-
Log.warning(sOperator
|
|
1327
|
+
Log.warning("".concat(sOperator, " is not supported. ").concat(sFilter, " could not be added to the navigation context"));
|
|
1317
1328
|
}
|
|
1318
1329
|
|
|
1319
1330
|
return oSelectOptionState;
|
|
@@ -1323,7 +1334,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1323
1334
|
var oFiltersWithoutConflict = mFilters.filterConditionsWithoutConflict ? mFilters.filterConditionsWithoutConflict : {};
|
|
1324
1335
|
var oTablePropertiesWithoutConflict = oTargetInfo.propertiesWithoutConflict ? oTargetInfo.propertiesWithoutConflict : {};
|
|
1325
1336
|
|
|
1326
|
-
var addFiltersToSelectionVariant = function (
|
|
1337
|
+
var addFiltersToSelectionVariant = function (selectionVariant, sFilterName, sPath) {
|
|
1327
1338
|
var aFilters = oFilterConditions[sFilterName];
|
|
1328
1339
|
|
|
1329
1340
|
for (var item in aFilters) {
|
|
@@ -1332,17 +1343,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1332
1343
|
sHigh = oFilter.values[1] && oFilter.values[1].toString() || null;
|
|
1333
1344
|
|
|
1334
1345
|
if (oFilter.operator === "TODAY" || oFilter.operator === "DATE") {
|
|
1335
|
-
var aFilter = oFilterInfo[0].aFilters.filter(function (
|
|
1336
|
-
return
|
|
1346
|
+
var aFilter = oFilterInfo[0].aFilters && oFilterInfo[0].aFilters.filter(function (filter) {
|
|
1347
|
+
return filter.sPath === sFilterName;
|
|
1337
1348
|
});
|
|
1338
|
-
sLow = aFilter[0].oValue1 || "";
|
|
1349
|
+
sLow = aFilter && aFilter[0].oValue1 || oFilterInfo[0].oValue1 || "";
|
|
1339
1350
|
sHigh = null;
|
|
1340
1351
|
}
|
|
1341
1352
|
|
|
1342
1353
|
var oSelectOptionValues = fnGetSignAndOption(oFilter.operator, sLow, sHigh);
|
|
1343
1354
|
|
|
1344
1355
|
if (oSelectOptionValues.option) {
|
|
1345
|
-
|
|
1356
|
+
selectionVariant.addSelectOption(sPath ? sPath : sFilterName, oSelectOptionValues.sign, oSelectOptionValues.option, oSelectOptionValues.low, oSelectOptionValues.high);
|
|
1346
1357
|
}
|
|
1347
1358
|
}
|
|
1348
1359
|
};
|
|
@@ -1402,13 +1413,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1402
1413
|
}
|
|
1403
1414
|
|
|
1404
1415
|
function getNonComputedVisibleFields(oMetaModel, sPath, oView) {
|
|
1405
|
-
var aTechnicalKeys = oMetaModel.getObject(sPath
|
|
1416
|
+
var aTechnicalKeys = oMetaModel.getObject("".concat(sPath, "/")).$Key;
|
|
1406
1417
|
var aNonComputedVisibleFields = [];
|
|
1407
|
-
var
|
|
1418
|
+
var aImmutableVisibleFields = [];
|
|
1419
|
+
var oEntityType = oMetaModel.getObject("".concat(sPath, "/"));
|
|
1408
1420
|
|
|
1409
1421
|
for (var item in oEntityType) {
|
|
1410
1422
|
if (oEntityType[item].$kind && oEntityType[item].$kind === "Property") {
|
|
1411
|
-
var oAnnotations = oMetaModel.getObject(sPath
|
|
1423
|
+
var oAnnotations = oMetaModel.getObject("".concat(sPath, "/").concat(item, "@")) || {},
|
|
1412
1424
|
bIsKey = aTechnicalKeys.indexOf(item) > -1,
|
|
1413
1425
|
bIsImmutable = oAnnotations["@Org.OData.Core.V1.Immutable"],
|
|
1414
1426
|
bIsNonComputed = !oAnnotations["@Org.OData.Core.V1.Computed"],
|
|
@@ -1416,8 +1428,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1416
1428
|
bIsComputedDefaultValue = oAnnotations["@Org.OData.Core.V1.ComputedDefaultValue"],
|
|
1417
1429
|
bIsKeyComputedDefaultValueWithText = bIsKey && oEntityType[item].$Type === "Edm.Guid" ? bIsComputedDefaultValue && oAnnotations["@com.sap.vocabularies.Common.v1.Text"] : false;
|
|
1418
1430
|
|
|
1419
|
-
if ((
|
|
1431
|
+
if ((bIsKeyComputedDefaultValueWithText || bIsKey && oEntityType[item].$Type !== "Edm.Guid") && bIsNonComputed && bIsVisible) {
|
|
1420
1432
|
aNonComputedVisibleFields.push(item);
|
|
1433
|
+
} else if (bIsImmutable && bIsNonComputed && bIsVisible) {
|
|
1434
|
+
aImmutableVisibleFields.push(item);
|
|
1421
1435
|
}
|
|
1422
1436
|
|
|
1423
1437
|
if (!bIsNonComputed && bIsComputedDefaultValue && oView) {
|
|
@@ -1430,7 +1444,88 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1430
1444
|
}
|
|
1431
1445
|
}
|
|
1432
1446
|
|
|
1433
|
-
|
|
1447
|
+
var aRequiredProperties = CommonUtils.getRequiredPropertiesFromInsertRestrictions(sPath, oMetaModel);
|
|
1448
|
+
|
|
1449
|
+
if (aRequiredProperties.length) {
|
|
1450
|
+
aRequiredProperties.forEach(function (sProperty) {
|
|
1451
|
+
var oAnnotations = oMetaModel.getObject("".concat(sPath, "/").concat(sProperty, "@")),
|
|
1452
|
+
bIsVisible = !oAnnotations || !oAnnotations["@com.sap.vocabularies.UI.v1.Hidden"];
|
|
1453
|
+
|
|
1454
|
+
if (bIsVisible && aNonComputedVisibleFields.indexOf(sProperty) === -1 && aImmutableVisibleFields.indexOf(sProperty) === -1) {
|
|
1455
|
+
aNonComputedVisibleFields.push(sProperty);
|
|
1456
|
+
}
|
|
1457
|
+
});
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1460
|
+
return aNonComputedVisibleFields.concat(aImmutableVisibleFields);
|
|
1461
|
+
}
|
|
1462
|
+
|
|
1463
|
+
function getRequiredProperties(sPath, oMetaModel) {
|
|
1464
|
+
var bCheckUpdateRestrictions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
1465
|
+
var aPathParts = sPath.split("/");
|
|
1466
|
+
var aRequiredProperties = [];
|
|
1467
|
+
var aRequiredPropertiesWithPaths = [];
|
|
1468
|
+
var oEntitySetAnnotations = oMetaModel.getObject("".concat(sPath, "@"));
|
|
1469
|
+
|
|
1470
|
+
if (aPathParts.length > 2) {
|
|
1471
|
+
var sNavigationPath = aPathParts[aPathParts.length - 1];
|
|
1472
|
+
aPathParts.splice(-1, 1); // removing NavigationProperty from the end.
|
|
1473
|
+
|
|
1474
|
+
var sParentEntitySetPath = aPathParts.join("/");
|
|
1475
|
+
var oNavigationRestrictions = CommonUtils.getNavigationRestrictions(oMetaModel, sParentEntitySetPath, sNavigationPath);
|
|
1476
|
+
oEntitySetAnnotations = oMetaModel.getObject("".concat(sParentEntitySetPath, "/$NavigationPropertyBinding/").concat(sNavigationPath, "@"));
|
|
1477
|
+
|
|
1478
|
+
if (CommonUtils.hasRestrictedPropertiesInAnnotations(oNavigationRestrictions, true, bCheckUpdateRestrictions)) {
|
|
1479
|
+
aRequiredPropertiesWithPaths = bCheckUpdateRestrictions ? oNavigationRestrictions["UpdateRestrictions"].RequiredProperties : oNavigationRestrictions["InsertRestrictions"].RequiredProperties;
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
if ((!aRequiredPropertiesWithPaths || !aRequiredPropertiesWithPaths.length) && CommonUtils.hasRestrictedPropertiesInAnnotations(oEntitySetAnnotations, false, bCheckUpdateRestrictions)) {
|
|
1483
|
+
aRequiredPropertiesWithPaths = CommonUtils.getRequiredPropertiesFromAnnotations(oEntitySetAnnotations, bCheckUpdateRestrictions);
|
|
1484
|
+
}
|
|
1485
|
+
} else if (CommonUtils.hasRestrictedPropertiesInAnnotations(oEntitySetAnnotations, false, bCheckUpdateRestrictions)) {
|
|
1486
|
+
aRequiredPropertiesWithPaths = CommonUtils.getRequiredPropertiesFromAnnotations(oEntitySetAnnotations, bCheckUpdateRestrictions);
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
aRequiredPropertiesWithPaths.forEach(function (oRequiredProperty) {
|
|
1490
|
+
var sProperty = oRequiredProperty["$PropertyPath"];
|
|
1491
|
+
aRequiredProperties.push(sProperty);
|
|
1492
|
+
});
|
|
1493
|
+
return aRequiredProperties;
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
function getRequiredPropertiesFromInsertRestrictions(sPath, oMetaModel) {
|
|
1497
|
+
return CommonUtils.getRequiredProperties(sPath, oMetaModel);
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1500
|
+
function getRequiredPropertiesFromUpdateRestrictions(sPath, oMetaModel) {
|
|
1501
|
+
return CommonUtils.getRequiredProperties(sPath, oMetaModel, true);
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
function getRequiredPropertiesFromAnnotations(oAnnotations) {
|
|
1505
|
+
var bCheckUpdateRestrictions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1506
|
+
|
|
1507
|
+
if (bCheckUpdateRestrictions) {
|
|
1508
|
+
return oAnnotations["@Org.OData.Capabilities.V1.UpdateRestrictions"].RequiredProperties;
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1511
|
+
return oAnnotations["@Org.OData.Capabilities.V1.InsertRestrictions"].RequiredProperties;
|
|
1512
|
+
}
|
|
1513
|
+
|
|
1514
|
+
function hasRestrictedPropertiesInAnnotations(oAnnotations) {
|
|
1515
|
+
var bIsNavigationRestrictions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1516
|
+
var bCheckUpdateRestrictions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
1517
|
+
|
|
1518
|
+
if (bIsNavigationRestrictions) {
|
|
1519
|
+
if (bCheckUpdateRestrictions) {
|
|
1520
|
+
return oAnnotations && oAnnotations["UpdateRestrictions"] && oAnnotations["UpdateRestrictions"].RequiredProperties ? true : false;
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
return oAnnotations && oAnnotations["InsertRestrictions"] && oAnnotations["InsertRestrictions"].RequiredProperties ? true : false;
|
|
1524
|
+
} else if (bCheckUpdateRestrictions) {
|
|
1525
|
+
return oAnnotations && oAnnotations["@Org.OData.Capabilities.V1.UpdateRestrictions"] && oAnnotations["@Org.OData.Capabilities.V1.UpdateRestrictions"].RequiredProperties ? true : false;
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
return oAnnotations && oAnnotations["@Org.OData.Capabilities.V1.InsertRestrictions"] && oAnnotations["@Org.OData.Capabilities.V1.InsertRestrictions"].RequiredProperties ? true : false;
|
|
1434
1529
|
}
|
|
1435
1530
|
|
|
1436
1531
|
function setUserDefaults(oAppComponent, aParameters, oModel, bIsAction, bIsCreate, oActionDefaultValues) {
|
|
@@ -1441,7 +1536,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1441
1536
|
|
|
1442
1537
|
if (!oShellServices.hasUShell()) {
|
|
1443
1538
|
aParameters.forEach(function (oParameter) {
|
|
1444
|
-
var sPropertyName = bIsAction ? "/"
|
|
1539
|
+
var sPropertyName = bIsAction ? "/".concat(oParameter.$Name) : oParameter.getPath().slice(oParameter.getPath().lastIndexOf("/") + 1);
|
|
1445
1540
|
var sParameterName = bIsAction ? sPropertyName.slice(1) : sPropertyName;
|
|
1446
1541
|
|
|
1447
1542
|
if (oActionDefaultValues && bIsCreate) {
|
|
@@ -1459,7 +1554,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1459
1554
|
var oData = oStartupAppState.getData() || {},
|
|
1460
1555
|
aExtendedParameters = oData.selectionVariant && oData.selectionVariant.SelectOptions || [];
|
|
1461
1556
|
aParameters.forEach(function (oParameter) {
|
|
1462
|
-
var sPropertyName = bIsAction ? "/"
|
|
1557
|
+
var sPropertyName = bIsAction ? "/".concat(oParameter.$Name) : oParameter.getPath().slice(oParameter.getPath().lastIndexOf("/") + 1);
|
|
1463
1558
|
var sParameterName = bIsAction ? sPropertyName.slice(1) : sPropertyName;
|
|
1464
1559
|
|
|
1465
1560
|
if (oActionDefaultValues && bIsCreate) {
|
|
@@ -1569,7 +1664,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1569
1664
|
semanticObjectMapping: aSemanticObjectMapping
|
|
1570
1665
|
};
|
|
1571
1666
|
} else {
|
|
1572
|
-
Log.error("Cross navigation outbound is configured without semantic object and action for "
|
|
1667
|
+
Log.error("Cross navigation outbound is configured without semantic object and action for ".concat(sOutbound));
|
|
1573
1668
|
}
|
|
1574
1669
|
}
|
|
1575
1670
|
}
|
|
@@ -1598,8 +1693,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1598
1693
|
|
|
1599
1694
|
function fnGetSemanticObjectsFromPath(oMetaModel, sPath) {
|
|
1600
1695
|
return new Promise(function (resolve) {
|
|
1601
|
-
var sSemanticObject = oMetaModel.getObject(sPath
|
|
1602
|
-
var aSemanticObjectUnavailableActions = oMetaModel.getObject(sPath
|
|
1696
|
+
var sSemanticObject = oMetaModel.getObject("".concat(sPath, "@com.sap.vocabularies.Common.v1.SemanticObject"));
|
|
1697
|
+
var aSemanticObjectUnavailableActions = oMetaModel.getObject("".concat(sPath, "@com.sap.vocabularies.Common.v1.SemanticObjectUnavailableActions"));
|
|
1603
1698
|
var aSemanticObjectForGetLinks = [{
|
|
1604
1699
|
semanticObject: sSemanticObject
|
|
1605
1700
|
}];
|
|
@@ -1792,7 +1887,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1792
1887
|
var sSemObjExpression;
|
|
1793
1888
|
var aSemanticObjectsResolved = aValues.filter(function (element) {
|
|
1794
1889
|
if (element.semanticObject !== undefined && element.semanticObject.semanticObject && typeof element.semanticObject.semanticObject === "object") {
|
|
1795
|
-
sSemObjExpression =
|
|
1890
|
+
sSemObjExpression = compileExpression(pathInModel(element.semanticObject.semanticObject.$Path));
|
|
1796
1891
|
element.semanticObject.semanticObject = sSemObjExpression;
|
|
1797
1892
|
element.semanticObjectForGetLinks[0].semanticObject = sSemObjExpression;
|
|
1798
1893
|
return true;
|
|
@@ -1864,7 +1959,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1864
1959
|
function getFilterRestrictionsByPath(sEntitySetPath, oMetaModel) {
|
|
1865
1960
|
var oRet = {},
|
|
1866
1961
|
FilterRestrictions = CommonUtils.FilterRestrictions,
|
|
1867
|
-
oFilterRestrictions = sEntitySetPath ? oMetaModel.getObject(sEntitySetPath
|
|
1962
|
+
oFilterRestrictions = sEntitySetPath ? oMetaModel.getObject("".concat(sEntitySetPath, "@Org.OData.Capabilities.V1.FilterRestrictions")) : {};
|
|
1868
1963
|
oRet[FilterRestrictions.REQUIRED_PROPERTIES] = getFilterRestrictions(oFilterRestrictions, FilterRestrictions.REQUIRED_PROPERTIES) || [];
|
|
1869
1964
|
oRet[FilterRestrictions.NON_FILTERABLE_PROPERTIES] = getFilterRestrictions(oFilterRestrictions, FilterRestrictions.NON_FILTERABLE_PROPERTIES) || []; //SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
1870
1965
|
|
|
@@ -1922,11 +2017,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1922
2017
|
var parts = path.split("/").filter(Boolean),
|
|
1923
2018
|
propertyName = parts.pop(),
|
|
1924
2019
|
navigationPath = parts.join("/"),
|
|
1925
|
-
entitySet = navigationPath && metaModel.getObject("/"
|
|
2020
|
+
entitySet = navigationPath && metaModel.getObject("/".concat(navigationPath));
|
|
1926
2021
|
|
|
1927
2022
|
if ((entitySet === null || entitySet === void 0 ? void 0 : entitySet.$kind) === "Singleton") {
|
|
1928
2023
|
var singletonName = parts[parts.length - 1];
|
|
1929
|
-
return "/"
|
|
2024
|
+
return "/".concat(singletonName, "/").concat(propertyName);
|
|
1930
2025
|
}
|
|
1931
2026
|
|
|
1932
2027
|
return undefined;
|
|
@@ -2001,11 +2096,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2001
2096
|
function fnOnStrictHandlingFailed(sGroupId, actionName, oModel, aMessages) {
|
|
2002
2097
|
var localI18nRef = Core.getLibraryResourceBundle("sap.fe.core"),
|
|
2003
2098
|
sActionName = actionName,
|
|
2004
|
-
sCancelButtonTxt = localI18nRef.getText("
|
|
2099
|
+
sCancelButtonTxt = localI18nRef.getText("C_COMMON_DIALOG_CANCEL");
|
|
2100
|
+
aMessages = aMessages.filter(function (oMessage) {
|
|
2101
|
+
return oMessage.getTechnicalDetails() && oMessage.getTechnicalDetails().httpStatus === 412;
|
|
2102
|
+
});
|
|
2005
2103
|
|
|
2006
2104
|
if (aMessages.length === 1) {
|
|
2007
|
-
var sMessage = aMessages[0].message
|
|
2008
|
-
|
|
2105
|
+
var sMessage = "".concat(aMessages[0].message, "\n").concat(localI18nRef.getText("PROCEED"));
|
|
2106
|
+
return new Promise(function (resolve) {
|
|
2009
2107
|
MessageBox.warning(sMessage, {
|
|
2010
2108
|
title: localI18nRef.getText("WARNING"),
|
|
2011
2109
|
actions: [sActionName, sCancelButtonTxt],
|
|
@@ -2020,7 +2118,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2020
2118
|
}
|
|
2021
2119
|
});
|
|
2022
2120
|
});
|
|
2023
|
-
return dialogPromise;
|
|
2024
2121
|
}
|
|
2025
2122
|
|
|
2026
2123
|
return new Promise(function (resolve) {
|
|
@@ -2046,6 +2143,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2046
2143
|
press: function () {
|
|
2047
2144
|
resolve(true);
|
|
2048
2145
|
oModel.submitBatch(sGroupId);
|
|
2146
|
+
oMessageDialogModel.setData({});
|
|
2049
2147
|
oDialog.close();
|
|
2050
2148
|
},
|
|
2051
2149
|
type: "Emphasized",
|
|
@@ -2054,6 +2152,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2054
2152
|
oDialog.setEndButton(new Button({
|
|
2055
2153
|
press: function () {
|
|
2056
2154
|
resolve(false);
|
|
2155
|
+
oMessageDialogModel.setData({});
|
|
2057
2156
|
oDialog.close();
|
|
2058
2157
|
},
|
|
2059
2158
|
text: sCancelButtonTxt
|
|
@@ -2070,7 +2169,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2070
2169
|
var headerInfoTitlePath = oControl.getParent().getTableDefinition().headerInfoTitle;
|
|
2071
2170
|
var oMetaModel = oControl && oControl.getModel().getMetaModel(),
|
|
2072
2171
|
sCurrentEntitySetName = oControl.data("metaPath");
|
|
2073
|
-
var aTechnicalKeys = oMetaModel.getObject(sCurrentEntitySetName
|
|
2172
|
+
var aTechnicalKeys = oMetaModel.getObject("".concat(sCurrentEntitySetName, "/$Type/$Key"));
|
|
2074
2173
|
var aFilteredTechnicalKeys = [];
|
|
2075
2174
|
aTechnicalKeys.forEach(function (technicalKey) {
|
|
2076
2175
|
if (technicalKey !== "IsActiveEntity") {
|
|
@@ -2098,31 +2197,28 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2098
2197
|
return subtitleColumn;
|
|
2099
2198
|
}
|
|
2100
2199
|
|
|
2101
|
-
function
|
|
2102
|
-
var
|
|
2200
|
+
function getKeys(oMetaModel, sPath, sEntitySetName) {
|
|
2201
|
+
var sMetaPath = oMetaModel.getMetaPath(sPath);
|
|
2202
|
+
var aTechnicalKeys = oMetaModel.getObject("".concat(sMetaPath, "/$Type/$Key"));
|
|
2203
|
+
var sKey = "";
|
|
2204
|
+
var semanticKey = SemanticKeyHelper.getSemanticKeys(oMetaModel, sEntitySetName);
|
|
2103
2205
|
|
|
2104
|
-
if (
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
var
|
|
2108
|
-
|
|
2206
|
+
if (semanticKey !== undefined && semanticKey.length === 1) {
|
|
2207
|
+
sKey = semanticKey[0].$PropertyPath;
|
|
2208
|
+
} else if (aTechnicalKeys) {
|
|
2209
|
+
var aFilteredTechnicalKeys = [];
|
|
2210
|
+
aTechnicalKeys.forEach(function (technicalKey) {
|
|
2211
|
+
if (technicalKey !== "IsActiveEntity") {
|
|
2212
|
+
aFilteredTechnicalKeys.push(technicalKey);
|
|
2213
|
+
}
|
|
2214
|
+
});
|
|
2109
2215
|
|
|
2110
|
-
if (
|
|
2111
|
-
|
|
2112
|
-
} else if (aIgnoredLabels.length === 1 && bIsDraftSupported) {
|
|
2113
|
-
sText = oResourceBundle.getText("C_MULTIVIZ_CHART_IGNORED_FILTER_DRAFT_DATA");
|
|
2114
|
-
} else {
|
|
2115
|
-
var sResource = "C_LR_MULTIVIZ_CHART_" + (aIgnoredLabels.length === 1 ? "SINGLE" : "MULTI") + "_IGNORED_FILTER_" + (system.desktop ? "LARGE" : "SMALL");
|
|
2116
|
-
sText = oResourceBundle.getText(sResource, [aIgnoredLabels.join(", ")]);
|
|
2216
|
+
if (aFilteredTechnicalKeys !== undefined && aFilteredTechnicalKeys.length === 1) {
|
|
2217
|
+
sKey = aFilteredTechnicalKeys[0];
|
|
2117
2218
|
}
|
|
2118
|
-
} else {
|
|
2119
|
-
var _sResource = "C_LR_MULTITABLES_" + (aIgnoredLabels.length === 1 ? "SINGLE" : "MULTI") + "_IGNORED_FILTER_" + (system.desktop ? "LARGE" : "SMALL"),
|
|
2120
|
-
sLocalizedTableTitle = fnGetLocalizedText(sTabTitle, oFilterBar);
|
|
2121
|
-
|
|
2122
|
-
sText = oResourceBundle.getText(_sResource, [aIgnoredLabels.join(", "), sLocalizedTableTitle]);
|
|
2123
2219
|
}
|
|
2124
2220
|
|
|
2125
|
-
return
|
|
2221
|
+
return sKey;
|
|
2126
2222
|
}
|
|
2127
2223
|
|
|
2128
2224
|
var CommonUtils = {
|
|
@@ -2181,9 +2277,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2181
2277
|
normalizeSearchTerm: normalizeSearchTerm,
|
|
2182
2278
|
fnOnStrictHandlingFailed: fnOnStrictHandlingFailed,
|
|
2183
2279
|
getSingletonPath: getSingletonPath,
|
|
2184
|
-
|
|
2185
|
-
|
|
2280
|
+
getMessageColumn: getMessageColumn,
|
|
2281
|
+
getRequiredPropertiesFromUpdateRestrictions: getRequiredPropertiesFromUpdateRestrictions,
|
|
2282
|
+
getRequiredPropertiesFromInsertRestrictions: getRequiredPropertiesFromInsertRestrictions,
|
|
2283
|
+
hasRestrictedPropertiesInAnnotations: hasRestrictedPropertiesInAnnotations,
|
|
2284
|
+
getRequiredPropertiesFromAnnotations: getRequiredPropertiesFromAnnotations,
|
|
2285
|
+
getRequiredProperties: getRequiredProperties,
|
|
2286
|
+
getKeys: getKeys
|
|
2186
2287
|
};
|
|
2187
2288
|
return CommonUtils;
|
|
2188
2289
|
}, false);
|
|
2189
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sIm5hbWVzIjpbImFWYWxpZFR5cGVzIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInNTZWFyY2hUZXJtIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInNwbGl0IiwicmVkdWNlIiwic05vcm1hbGl6ZWQiLCJzQ3VycmVudFdvcmQiLCJnZXRQcm9wZXJ0eURhdGFUeXBlIiwib05hdmlnYXRpb25Db250ZXh0Iiwic0RhdGFUeXBlIiwiZ2V0UHJvcGVydHkiLCJzQW5ub3RhdGlvblBhdGgiLCJpbmRleE9mIiwiZm5IYXNUcmFuc2llbnRDb250ZXh0cyIsIm9MaXN0QmluZGluZyIsImJIYXNUcmFuc2llbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZvckVhY2giLCJvQ29udGV4dCIsImlzVHJhbnNpZW50IiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwic0Z1bGxQYXRoIiwib01ldGFNb2RlbCIsImkiLCJhTmF2aWdhdGlvblBhcnRzIiwic1BhdGgiLCJsZW5ndGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJnZXRPYmplY3QiLCJvTW9kZWwiLCJzRW50aXR5U2V0UGF0aCIsInNOYXZpZ2F0aW9uUGF0aCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiZmluZCIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIl9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzQ29udGV4dFBhdGgiLCJiSXNOb3RGaWx0ZXJhYmxlIiwib0Fubm90YXRpb24iLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNvbWUiLCJwcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUiLCJzQ29udGV4UGF0aCIsImFFU1BhcnRzIiwic3BsaWNlIiwiYUNvbnRleHQiLCJzQ29udGV4dCIsImpvaW4iLCJpdGVtIiwiaW5kZXgiLCJhcnJheSIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzVGFyZ2V0UHJvcGVydHlQYXRoIiwib1Byb3BlcnR5UGF0aCIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwic1Byb3BlcnR5IiwiYlNraXBIaWRkZW5GaWx0ZXIiLCJFcnJvciIsImJJc0ZpbHRlcmFibGUiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNIaWRkZW5QYXRoIiwic0hpZGRlbkZpbHRlclBhdGgiLCJjb21waWxlQmluZGluZyIsIm5vdCIsIm9yIiwiYmluZGluZ0V4cHJlc3Npb24iLCJzUHJvcGVydHlEYXRhVHlwZSIsImdldFNoZWxsU2VydmljZXMiLCJvQ29udHJvbCIsImdldEFwcENvbXBvbmVudCIsImdldEhhc2giLCJzSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsIl9nZXRTT0ludGVudHMiLCJvT2JqZWN0UGFnZUxheW91dCIsIm9TZW1hbnRpY09iamVjdCIsIm9QYXJhbSIsIm9TaGVsbFNlcnZpY2VIZWxwZXIiLCJDb21tb25VdGlscyIsImdldExpbmtzIiwic2VtYW50aWNPYmplY3QiLCJwYXJhbXMiLCJfY3JlYXRlTWFwcGluZ3MiLCJvTWFwcGluZyIsImFTT01hcHBpbmdzIiwiYU1hcHBpbmdLZXlzIiwiT2JqZWN0Iiwia2V5cyIsIm9TZW1hbnRpY01hcHBpbmciLCJwdXNoIiwiX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiYUxpbmtzIiwiYUV4Y2x1ZGVkQWN0aW9ucyIsIm9UYXJnZXRQYXJhbXMiLCJhSXRlbXMiLCJvTGluayIsInNJbnRlbnQiLCJpbnRlbnQiLCJzQWN0aW9uIiwidGV4dCIsInRhcmdldFNlbU9iamVjdCIsInRhcmdldEFjdGlvbiIsInRhcmdldFBhcmFtcyIsIl9nZXRSZWxhdGVkSW50ZW50cyIsIm9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwib0JpbmRpbmdDb250ZXh0IiwiYU1hbmlmZXN0U09JdGVtcyIsInVuYXZhaWxhYmxlQWN0aW9ucyIsIm1hcHBpbmciLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJ1cGRhdGVSZWxhdGVBcHBzTW9kZWwiLCJvRW50cnkiLCJhU2VtS2V5cyIsIm9NZXRhUGF0aCIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImoiLCJzU2VtS2V5IiwidmFsdWUiLCJhVGVjaG5pY2FsS2V5cyIsImtleSIsInNPYmpLZXkiLCJvTWFuaWZlc3REYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwiYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyIsImFNYW5pZmVzdFNPS2V5cyIsInRoZW4iLCJiaW5kIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwiYWN0aW9uIiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlUeXBlUGF0aCIsIm9FbnRpdHlTZXRBbm5vdGF0aW9ucyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJjb25jYXQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5Iiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1BhdGgiLCJnZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImFBdXRob3JpemVkVHlwZXMiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsImZpcmVQcmVzcyIsImZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInNWYWx1ZSIsImlzQSIsIm9Pd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsIlZpZXciLCJnZXRQYXJlbnQiLCJpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUiLCJzRmllbGRDb250cm9sUGF0aCIsIm9BdHRyaWJ1dGUiLCJiSW5hcHBsaWNhYmxlIiwiYVBhcnRzIiwiaGFzT3duUHJvcGVydHkiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwiYUF0dHJpYnV0ZXMiLCJhT3V0QXR0cmlidXRlcyIsInNFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJjb250ZXh0RGF0YSIsImFQcm9wZXJ0aWVzIiwic1Byb3AiLCJhUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJfZm5DaGVja0lzTWF0Y2giLCJvT2JqZWN0Iiwib0tleXNUb0NoZWNrIiwic0tleSIsImZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJ0ZXN0IiwiJGtpbmQiLCJmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyIsImFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJmbkdldElCTkFjdGlvbnMiLCJhSUJOQWN0aW9ucyIsImFBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRBY3Rpb24iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImZuR2V0TGlua3MiLCJvRGF0YSIsImFLZXlzIiwib0lCTkFjdGlvbiIsInNTZW1hbnRpY09iamVjdCIsImFMaW5rIiwic2V0VmlzaWJsZSIsImdldFRyYW5zbGF0ZWRUZXh0Iiwic0ZyYW1ld29ya0tleSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNFbnRpdHlTZXROYW1lIiwic1Jlc291cmNlS2V5IiwiYlJlc291cmNlS2V5RXhpc3RzIiwiX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImFDdXN0b21CdW5kbGVzIiwiZ2V0VGV4dCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJoYXNUZXh0IiwiZ2V0QWN0aW9uUGF0aCIsImJSZXR1cm5Pbmx5UGF0aCIsInNBY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzRW50aXR5VHlwZU5hbWUiLCIkVHlwZSIsInNFbnRpdHlOYW1lIiwiZ2V0RW50aXR5U2V0TmFtZSIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwib1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCIkRW51bU1lbWJlciIsIl9nZXRFbnRpdHlUeXBlIiwiX3JlcXVlc3RPYmplY3QiLCJvU2VsZWN0ZWRDb250ZXh0IiwibkJyYWNrZXRJbmRleCIsInNUYXJnZXRUeXBlIiwic2xpY2UiLCJzQ3VycmVudFR5cGUiLCJnZXRCaW5kaW5nIiwiZ2V0Q29udGV4dCIsIndhcm5pbmciLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9yZXF1ZXN0UHJvcGVydHkiLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsIl9zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJhUmVxdWVzdFByb21pc2VzIiwiYWxsIiwiYVJlc3VsdHMiLCJhQXBwbGljYWJsZUNvbnRleHRzIiwiYU5vdEFwcGxpY2FibGVDb250ZXh0cyIsImFSZXN1bHQiLCJfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwidHJhY2UiLCJhQXBwbGljYWJsZSIsImFOb3RBcHBsaWNhYmxlIiwic0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4Iiwib0ludGVybmFsTW9kZWwiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwiYVByb21pc2VzIiwiYkVuYWJsZWQiLCJvQ29udGV4dERhdGEiLCJvVHJhbnNmb3JtZWRCaW5kaW5nIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJjb25zdGFudCIsInBhdGgiLCJzUmVzdWx0Iiwic2V0T2JqZWN0TWFwcGluZ3MiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIm9JdGVtIiwib01hcHBpbmdzIiwiaXRlbXMiLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiX2dldERlZmF1bHRPcGVyYXRvcnMiLCJzUHJvcGVydHlUeXBlIiwib0RhdGFDbGFzcyIsIlR5cGVVdGlsIiwiZ2V0RGF0YVR5cGVDbGFzc05hbWUiLCJvQmFzZVR5cGUiLCJnZXRCYXNlVHlwZSIsIkZpbHRlck9wZXJhdG9yVXRpbCIsImdldE9wZXJhdG9yc0ZvclR5cGUiLCJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImFPcGVyYXRvcnMiLCJmaWx0ZXIiLCJzRWxlbWVudCIsInRvU3RyaW5nIiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsIkFsbG93ZWRFeHByZXNzaW9uc1ByaW8iLCJzb3J0IiwiYSIsImIiLCJnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSIsInNUeXBlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwic1NldHRpbmdzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiYUVxdWFsc09wcyIsImFTaW5nbGVSYW5nZU9wcyIsImFTaW5nbGVSYW5nZURUQmFzaWNPcHMiLCJhU2luZ2xlVmFsdWVEYXRlT3BzIiwiYUJhc2ljRGF0ZVRpbWVPcHMiLCJhTXVsdGlSYW5nZU9wcyIsImFTZWFyY2hFeHByZXNzaW9uT3BzIiwiYVNlbWFudGljRGF0ZU9wc0V4dCIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFN1cHBvcnRlZE9wZXJhdGlvbnMiLCJiU2VtYW50aWNEYXRlUmFuZ2UiLCJhU2VtYW50aWNEYXRlT3BzIiwib1NldHRpbmdzIiwiSlNPTiIsInBhcnNlIiwiY3VzdG9tRGF0YSIsIm9wZXJhdG9yQ29uZmlndXJhdGlvbiIsImdldEZpbHRlck9wZXJhdGlvbnMiLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiYVNpbmdsZVJhbmdlRGF0ZVRpbWVPcHMiLCJzT3BlcmF0b3IiLCJhRGVmYXVsdE9wZXJhdG9ycyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsInNBbGxvd2VkRXhwcmVzc2lvbiIsInNSZXN0cmljdGlvbnMiLCJhU2luZ2xlVmFsdWVPcHMiLCJzT3BlcmF0b3JzIiwiZ2V0UGFyYW1ldGVySW5mbyIsInNQYXJhbWV0ZXJDb250ZXh0UGF0aCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiYlJlc3VsdENvbnRleHQiLCJvUGFyYW1ldGVySW5mbyIsImNvbnRleHRQYXRoIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsImFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucyIsIm9Qcm9wZXJ0eU1ldGFkYXRhIiwiYVZhbGlkT3BlcmF0b3JzIiwiYUN1bXVsYXRpdmVDb25kaXRpb25zIiwib1NlbGVjdE9wdGlvbiIsIm9Db25kaXRpb24iLCJnZXRDb25kaXRpb25zIiwib3BlcmF0b3IiLCJhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zIiwib1NlbGVjdGlvblZhcmlhbnQiLCJzU2VsZWN0T3B0aW9uUHJvcCIsIm9Db25kaXRpb25zIiwic0NvbmRpdGlvblBhdGgiLCJzQ29uZGl0aW9uUHJvcCIsIm9WYWxpZFByb3BlcnRpZXMiLCJpc1BhcmFtZXRlciIsImFDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJnZXRTZWxlY3RPcHRpb24iLCJhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJhTWV0YWRhdFByb3BlcnRpZXMiLCJvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYkhhc1BhcmFtZXRlcnMiLCJhTWV0YWRhdGFQYXJhbWV0ZXJzIiwic01ldGFkYXRhUGFyYW1ldGVyIiwic1NlbGVjdE9wdGlvbk5hbWUiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJzTWV0YWRhdGFQcm9wZXJ0eSIsInNTZWxlY3RPcHRpb24iLCJzRnVsbENvbnRleHRQYXRoIiwicmVwbGFjZUFsbCIsIl9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyIsInNNYWluRW50aXR5U2V0UGF0aCIsImFOYXZPYmplY3ROYW1lcyIsInNOYXZQYXRoIiwic1Byb3BlcnR5TmFtZSIsIiRpc0NvbGxlY3Rpb24iLCJzTmF2UHJvcGVydHlQYXRoIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJtUGFnZUNvbnRleHQiLCJvQXBwQ29tcG9uZW50Iiwib05hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJtaXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTlN0cmluZyIsImFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50IiwibUZpbHRlcnMiLCJvVGFyZ2V0SW5mbyIsIm9GaWx0ZXJJbmZvIiwic0ZpbHRlciIsInNMb3ciLCJzSGlnaCIsImZuR2V0U2lnbkFuZE9wdGlvbiIsInNMb3dWYWx1ZSIsInNIaWdoVmFsdWUiLCJvU2VsZWN0T3B0aW9uU3RhdGUiLCJvcHRpb24iLCJzaWduIiwibG93IiwiaGlnaCIsIm9GaWx0ZXJDb25kaXRpb25zIiwiZmlsdGVyQ29uZGl0aW9ucyIsIm9GaWx0ZXJzV2l0aG91dENvbmZsaWN0IiwiZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdCIsIm9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IiwiYWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCIsInNGaWx0ZXJOYW1lIiwiYUZpbHRlcnMiLCJ2YWx1ZXMiLCJhRmlsdGVyIiwib1ZhbHVlMSIsIm9TZWxlY3RPcHRpb25WYWx1ZXMiLCJhZGRTZWxlY3RPcHRpb24iLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiYlVJRWRpdGFibGUiLCJhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5Iiwib1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsImFTVk9wdGlvbiIsImFEZWZhdWx0U1ZPcHRpb24iLCJkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24iLCJzU2lnbiIsInNPcHRpb24iLCJnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMiLCIkS2V5IiwiYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsIm9Bbm5vdGF0aW9ucyIsImJJc0tleSIsImJJc0ltbXV0YWJsZSIsImJJc05vbkNvbXB1dGVkIiwiYklzVmlzaWJsZSIsImJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlIiwiYklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwic01lc3NhZ2UiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIk1lZGl1bSIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbnMiLCJJZ25vcmVkQW5ub3RhdGlvbiIsInNldFVzZXJEZWZhdWx0cyIsImFQYXJhbWV0ZXJzIiwiYklzQWN0aW9uIiwiYklzQ3JlYXRlIiwib0FjdGlvbkRlZmF1bHRWYWx1ZXMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIm9TaGVsbFNlcnZpY2VzIiwiaGFzVVNoZWxsIiwib1BhcmFtZXRlciIsIiROYW1lIiwic1BhcmFtZXRlck5hbWUiLCJnZXRTdGFydHVwQXBwU3RhdGUiLCJvU3RhcnR1cEFwcFN0YXRlIiwiZ2V0RGF0YSIsImFFeHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsInBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsInNPdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsInJlbW92ZVNlbGVjdE9wdGlvbiIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwiYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJzZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwiZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbCIsImFHZXRMaW5rc1Byb21pc2VzIiwiYVNlbWFudGljT2JqZWN0cyIsInNDdXJyZW50SGFzaCIsIl9vTGluayIsIl9zTGlua0ludGVudEFjdGlvbiIsImFGaW5hbExpbmtzIiwib0ZpbmFsU2VtYW50aWNPYmplY3RzIiwiYkludGVudEhhc0FjdGlvbnMiLCJrIiwib1RtcCIsInNBbHRlcm5hdGVQYXRoIiwiaGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiaGFzVGFyZ2V0cyIsImlMaW5rQ291bnQiLCJIYXNUYXJnZXRzIiwiSGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiYXNzaWduIiwic1NlbWFudGljT2JqZWN0TmFtZSIsIm1lcmdlT2JqZWN0cyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvQ29udHJvbGxlciIsInNQYWdlTW9kZWwiLCJfZm5maW5kVmFsdWVzSGVscGVyIiwib2JqIiwibGlzdCIsIkFycmF5IiwiY2hpbGRyZW4iLCJfZm5maW5kVmFsdWVzIiwiX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzIiwiYVNlbWFudGljT2JqZWN0UGF0aCIsImdldFZpZXciLCJhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMiLCJvQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnQiLCJvUGFnZU1vZGVsIiwic3RyaW5naWZ5IiwiX2dldE9iamVjdCIsImFTZW1hbnRpY09iamVjdHNGb3VuZCIsImFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcyIsIl9vU2VtYW50aWNPYmplY3QiLCJnZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJzU2VtT2JqRXhwcmVzc2lvbiIsImFTZW1hbnRpY09iamVjdHNSZXNvbHZlZCIsImVsZW1lbnQiLCIkUGF0aCIsImdldExpbmtzV2l0aENhY2hlIiwidXBkYXRlU2VtYW50aWNUYXJnZXRzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJSRVFVSVJFRF9QUk9QRVJUSUVTIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsImFQcm9wcyIsIm1hcCIsIm9Qcm9wZXJ0eSIsIkFMTE9XRURfRVhQUkVTU0lPTlMiLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiYVBhdGhQYXJ0cyIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJ0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCIsInNGcmFnbWVudE5hbWUiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJvT3B0aW9ucyIsIm9Nb2RpZmllciIsInZpZXciLCJvRnJhZ21lbnQiLCJ0YXJnZXRzIiwibG9hZE1hY3JvTGlicmFyeSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIm5hbWUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwiRnJhZ21lbnQiLCJsb2FkIiwiaWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsImdldFNpbmdsZXRvblBhdGgiLCJtZXRhTW9kZWwiLCJwYXJ0cyIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJuYXZpZ2F0aW9uUGF0aCIsInNpbmdsZXRvbk5hbWUiLCJtb2RlbCIsInJlc29sdmVkUGF0aCIsInByb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsInJlcXVlc3RWYWx1ZSIsImFkZEV2ZW50VG9CaW5kaW5nSW5mbyIsInNFdmVudE5hbWUiLCJmSGFuZGxlciIsIm9CaW5kaW5nSW5mbyIsInNldEJpbmRpbmdJbmZvIiwiZXZlbnRzIiwiZk9yaWdpbmFsSGFuZGxlciIsImFyZ3MiLCJhcHBseSIsImlubmVyQ2hhcnRCb3VuZCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImdldEJpbmRpbmdJbmZvIiwic0Vycm9yIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwic0dyb3VwSWQiLCJhY3Rpb25OYW1lIiwiYU1lc3NhZ2VzIiwibG9jYWxJMThuUmVmIiwic0NhbmNlbEJ1dHRvblR4dCIsIm1lc3NhZ2UiLCJkaWFsb2dQcm9taXNlIiwiTWVzc2FnZUJveCIsInRpdGxlIiwiYWN0aW9ucyIsImVtcGhhc2l6ZWRBY3Rpb24iLCJvbkNsb3NlIiwic3VibWl0QmF0Y2giLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJvTWVzc2FnZU9iamVjdCIsIm1lc3NhZ2VIYW5kbGluZyIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsIm9EaWFsb2ciLCJEaWFsb2ciLCJyZXNpemFibGUiLCJjb250ZW50Iiwib01lc3NhZ2VWaWV3Iiwic3RhdGUiLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TGVmdCIsIm9CYWNrQnV0dG9uIiwiY29udGVudE1pZGRsZSIsIlRpdGxlIiwiY29udGVudEhlaWdodCIsImNvbnRlbnRXaWR0aCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwic2V0QmVnaW5CdXR0b24iLCJCdXR0b24iLCJwcmVzcyIsImNsb3NlIiwidHlwZSIsInNldEVuZEJ1dHRvbiIsIm9wZW4iLCJnZXRNZXNzYWdlQ29sdW1uIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImhlYWRlckluZm9UaXRsZSIsInNDdXJyZW50RW50aXR5U2V0TmFtZSIsImFGaWx0ZXJlZFRlY2huaWNhbEtleXMiLCJ0ZWNobmljYWxLZXkiLCJzZW1hbnRpY0tleUNvbHVtbnMiLCJzZW1hbnRpY0tleXMiLCJhVmlzaWJsZUNvbHVtbnMiLCJhVGFibGVDb2x1bW5zIiwiZ2V0Q29sdW1ucyIsIm9Db2x1bW4iLCJjb2x1bW5QYXRoU3BsaXQiLCJnZXRJZCIsInN1YnRpdGxlQ29sdW1uIiwiZ2V0TWVzc2FnZVN0cmlwVGV4dCIsImFJZ25vcmVkTGFiZWxzIiwib0ZpbHRlckJhciIsImJJc0NoYXJ0IiwiYklzU2VhcmNoSWdub3JlZCIsInNUYWJUaXRsZSIsImZuR2V0TG9jYWxpemVkVGV4dCIsInNUZXh0Iiwib0NoYXJ0IiwiZ2V0Q29udHJvbGxlciIsImdldENoYXJ0Q29udHJvbCIsImJJc0RyYWZ0U3VwcG9ydGVkIiwib01hY3JvUmVzb3VyY2VCdW5kbGUiLCJzUmVzb3VyY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwic0xvY2FsaXplZFRhYmxlVGl0bGUiLCJmaXJlQnV0dG9uUHJlc3MiLCJoYXNUcmFuc2llbnRDb250ZXh0IiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsImdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiZ2V0SUJOQWN0aW9ucyIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdl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cUJBQXFCLEVBQUVBLHFCQXZDSjtBQXdDbkJtVSxJQUFBQSwyQkFBMkIsRUFBRUEsMkJBeENWO0FBeUNuQlgsSUFBQUEsNEJBQTRCLEVBQUVBLDRCQXpDWDtBQTBDbkJ5TCxJQUFBQSw0QkFBNEIsRUFBRUEsNEJBMUNYO0FBMkNuQjVPLElBQUFBLHdCQUF3QixFQUFFQSx3QkEzQ1A7QUE0Q25Cb1YsSUFBQUEsdUJBQXVCLEVBQUVBLHVCQTVDTjtBQTZDbkJrQyxJQUFBQSxxQkFBcUIsRUFBRUEscUJBN0NKO0FBOENuQjFWLElBQUFBLGlCQUFpQixFQUFFQSxpQkE5Q0E7QUErQ25CM1AsSUFBQUEsa0JBQWtCLEVBQUU7QUFDbkJzaUIsTUFBQUEsbUJBQW1CLEVBQUUsb0JBREY7QUFFbkJDLE1BQUFBLHlCQUF5QixFQUFFLHlCQUZSO0FBR25CSSxNQUFBQSxtQkFBbUIsRUFBRTtBQUhGLEtBL0NEO0FBb0RuQnRSLElBQUFBLHNCQUFzQixFQUFFLENBQUMsYUFBRCxFQUFnQixZQUFoQixFQUE4QixhQUE5QixFQUE2QyxZQUE3QyxFQUEyRCxrQkFBM0QsRUFBK0UsOEJBQS9FLENBcERMO0FBcURuQmhWLElBQUFBLG1CQUFtQixFQUFFQSxtQkFyREY7QUFzRG5CaXFCLElBQUFBLHdCQUF3QixFQUFFQSx3QkF0RFA7QUF1RG5COUIsSUFBQUEsZ0JBQWdCLEVBQUVBLGdCQXZEQztBQXdEbkJ5RixJQUFBQSxtQkFBbUIsRUFBRUEsbUJBeERGO0FBeURuQmhCLElBQUFBLGdCQUFnQixFQUFFQTtBQXpEQyxHQUFwQjtTQTREZW5uQixXIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZUNhdGVnb3J5VHlwZSwgSXNzdWVTZXZlcml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQge1xuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRjb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC9tL1RpdGxlXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvclV0aWwgZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0ZpbHRlck9wZXJhdG9yVXRpbFwiO1xuaW1wb3J0IFR5cGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVVdGlsXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB7IGdldENvbmRpdGlvbnMgfSBmcm9tIFwiLi90ZW1wbGF0aW5nL0ZpbHRlckhlbHBlclwiO1xuXG5jb25zdCBhVmFsaWRUeXBlcyA9IFtcblx0XCJFZG0uQm9vbGVhblwiLFxuXHRcIkVkbS5CeXRlXCIsXG5cdFwiRWRtLkRhdGVcIixcblx0XCJFZG0uRGF0ZVRpbWVcIixcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcIkVkbS5Eb3VibGVcIixcblx0XCJFZG0uRmxvYXRcIixcblx0XCJFZG0uR3VpZFwiLFxuXHRcIkVkbS5JbnQxNlwiLFxuXHRcIkVkbS5JbnQzMlwiLFxuXHRcIkVkbS5JbnQ2NFwiLFxuXHRcIkVkbS5TQnl0ZVwiLFxuXHRcIkVkbS5TaW5nbGVcIixcblx0XCJFZG0uU3RyaW5nXCIsXG5cdFwiRWRtLlRpbWVcIixcblx0XCJFZG0uVGltZU9mRGF5XCJcbl07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRlcm0oc1NlYXJjaFRlcm06IHN0cmluZykge1xuXHRpZiAoIXNTZWFyY2hUZXJtKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHVybiBzU2VhcmNoVGVybVxuXHRcdC5yZXBsYWNlKC9cIi9nLCBcIiBcIilcblx0XHQuc3BsaXQoL1xccysvKVxuXHRcdC5yZWR1Y2UoZnVuY3Rpb24gKHNOb3JtYWxpemVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNDdXJyZW50V29yZDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoc0N1cnJlbnRXb3JkICE9PSBcIlwiKSB7XG5cdFx0XHRcdHNOb3JtYWxpemVkID0gKHNOb3JtYWxpemVkID8gc05vcm1hbGl6ZWQgKyBcIiBcIiA6IFwiXCIpICsgJ1wiJyArIHNDdXJyZW50V29yZCArICdcIic7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc05vcm1hbGl6ZWQ7XG5cdFx0fSwgdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlEYXRhVHlwZShvTmF2aWdhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRsZXQgc0RhdGFUeXBlID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiJFR5cGVcIik7XG5cdC8vIGlmICRraW5kIGV4aXN0cywgaXQncyBub3QgYSBEYXRhRmllbGQgYW5kIHdlIGhhdmUgdGhlIGZpbmFsIHR5cGUgYWxyZWFkeVxuXHRpZiAoIW9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIiRraW5kXCIpKSB7XG5cdFx0c3dpdGNoIChzRGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiOlxuXHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoXCIpO1xuXHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNEYXRhVHlwZSA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvZm4vJFBhdGgvJFR5cGVcIik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufVxuZnVuY3Rpb24gZm5IYXNUcmFuc2llbnRDb250ZXh0cyhvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRsZXQgYkhhc1RyYW5zaWVudENvbnRleHRzID0gZmFsc2U7XG5cdGlmIChvTGlzdEJpbmRpbmcpIHtcblx0XHRvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdFx0Ykhhc1RyYW5zaWVudENvbnRleHRzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYkhhc1RyYW5zaWVudENvbnRleHRzO1xufVxuZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKHNGdWxsUGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0bGV0IGkgPSAwO1xuXHRjb25zdCBhTmF2aWdhdGlvblBhcnRzID0gc0Z1bGxQYXRoLnNwbGl0KFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKTtcblx0Zm9yIChsZXQgc1BhdGggPSBhTmF2aWdhdGlvblBhcnRzWzBdOyBpIDwgYU5hdmlnYXRpb25QYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01ldGFNb2RlbCwgc1BhdGgsIGFOYXZpZ2F0aW9uUGFydHNbaSArIDFdKTtcblx0XHRpZiAob05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnNbXCJTZWFyY2hSZXN0cmljdGlvbnNcIl0pIHtcblx0XHRcdHJldHVybiBvTmF2aWdhdGlvblJlc3RyaWN0aW9uc1tcIlNlYXJjaFJlc3RyaWN0aW9uc1wiXTtcblx0XHR9XG5cdFx0c1BhdGggPSBzUGF0aCArIFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiICsgYU5hdmlnYXRpb25QYXJ0c1tpXTtcblx0fVxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0Z1bGxQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIik7XG59XG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzTmF2aWdhdGlvblBhdGg6IGFueSkge1xuXHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNcIik7XG5cdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRyZXR1cm4gKFxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcyAmJlxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUmVzdHJpY3RlZFByb3BlcnR5OiBhbnkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufVxuZnVuY3Rpb24gX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhvTW9kZWw6IGFueSwgc0VudGl0eVNldFBhdGg6IGFueSwgc0NvbnRleHRQYXRoOiBhbnkpIHtcblx0bGV0IGJJc05vdEZpbHRlcmFibGUgPSBmYWxzZTtcblx0Y29uc3Qgb0Fubm90YXRpb24gPSBvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIik7XG5cdGlmIChvQW5ub3RhdGlvbiAmJiBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcykge1xuXHRcdGJJc05vdEZpbHRlcmFibGUgPSBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5zb21lKGZ1bmN0aW9uIChwcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNDb250ZXh0UGF0aCB8fCBwcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzQ29udGV4dFBhdGg7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGU7XG59XG4vLyBUT0RPIHJld29yayB0aGlzIVxuZnVuY3Rpb24gX2lzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzQ29udGV4UGF0aDogYW55KSB7XG5cdGNvbnN0IHNGdWxsUGF0aCA9IHNFbnRpdHlTZXRQYXRoICsgXCIvXCIgKyBzQ29udGV4UGF0aCxcblx0XHRhRVNQYXJ0cyA9IHNGdWxsUGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDAsIDIpLFxuXHRcdGFDb250ZXh0ID0gc0Z1bGxQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMik7XG5cdGxldCBiSXNOb3RGaWx0ZXJhYmxlID0gZmFsc2UsXG5cdFx0c0NvbnRleHQgPSBcIlwiO1xuXG5cdHNFbnRpdHlTZXRQYXRoID0gYUVTUGFydHMuam9pbihcIi9cIik7XG5cblx0YklzTm90RmlsdGVyYWJsZSA9IGFDb250ZXh0LnNvbWUoZnVuY3Rpb24gKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlciwgYXJyYXk6IHN0cmluZ1tdKSB7XG5cdFx0aWYgKHNDb250ZXh0Lmxlbmd0aCA+IDApIHtcblx0XHRcdHNDb250ZXh0ICs9IFwiL1wiICsgaXRlbTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbnRleHQgPSBpdGVtO1xuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDIpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgXCIvQ3VzdG9tZXIvU2V0L1Byb3BlcnR5XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIGl0ZW0pO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRcdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVBhdGggPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzICYmXG5cdFx0XHRcdGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUHJvcGVydHlQYXRoOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5UGF0aC4kUHJvcGVydHlQYXRoID09PSBzVGFyZ2V0UHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcblx0XHRcdC8vbGFzdCBwYXRoIHNlZ21lbnRcblx0XHRcdGJJc05vdEZpbHRlcmFibGUgPSBfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNDb250ZXh0KTtcblx0XHR9IGVsc2UgaWYgKG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiArIGl0ZW0pKSB7XG5cdFx0XHQvL2NoZWNrIGV4aXN0aW5nIGNvbnRleHQgcGF0aCBhbmQgaW5pdGlhbGl6ZSBpdFxuXHRcdFx0YklzTm90RmlsdGVyYWJsZSA9IF9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc0NvbnRleHQpO1xuXHRcdFx0c0NvbnRleHQgPSBcIlwiO1xuXHRcdFx0Ly9zZXQgdGhlIG5ldyBFbnRpdHlTZXRcblx0XHRcdHNFbnRpdHlTZXRQYXRoID0gXCIvXCIgKyBvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIgKyBpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGUgPT09IHRydWU7XG5cdH0pO1xuXHRyZXR1cm4gYklzTm90RmlsdGVyYWJsZTtcbn1cbi8vIFRPRE8gY2hlY2sgdXNlZCBwbGFjZXMgYW5kIHJld29yayB0aGlzXG5mdW5jdGlvbiBpc1Byb3BlcnR5RmlsdGVyYWJsZShcblx0b01vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c0VudGl0eVNldFBhdGg6IHN0cmluZyxcblx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdGJTa2lwSGlkZGVuRmlsdGVyPzogYm9vbGVhblxuKTogYm9vbGVhbiB8IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAodHlwZW9mIHNQcm9wZXJ0eSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInNQcm9wZXJ0eSBwYXJhbWV0ZXIgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0fVxuXHRsZXQgYklzRmlsdGVyYWJsZTtcblxuXHQvLyBQYXJhbWV0ZXJzIHNob3VsZCBiZSByZW5kZXJlZCBhcyBmaWx0ZXJmaWVsZHNcblx0aWYgKG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRcIikgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvbnN0IG9OYXZpZ2F0aW9uQ29udGV4dCA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCArIFwiL1wiICsgc1Byb3BlcnR5KSBhcyBDb250ZXh0O1xuXG5cdGlmICghYlNraXBIaWRkZW5GaWx0ZXIpIHtcblx0XHRpZiAoXG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCIpID09PSB0cnVlIHx8XG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCIpID09PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHNIaWRkZW5QYXRoID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbi8kUGF0aFwiKTtcblx0XHRjb25zdCBzSGlkZGVuRmlsdGVyUGF0aCA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXIvJFBhdGhcIik7XG5cblx0XHRpZiAoc0hpZGRlblBhdGggJiYgc0hpZGRlbkZpbHRlclBhdGgpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhub3Qob3IoYmluZGluZ0V4cHJlc3Npb24oc0hpZGRlblBhdGgpLCBiaW5kaW5nRXhwcmVzc2lvbihzSGlkZGVuRmlsdGVyUGF0aCkpKSk7XG5cdFx0fSBlbHNlIGlmIChzSGlkZGVuUGF0aCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKG5vdChiaW5kaW5nRXhwcmVzc2lvbihzSGlkZGVuUGF0aCkpKTtcblx0XHR9IGVsc2UgaWYgKHNIaWRkZW5GaWx0ZXJQYXRoKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcobm90KGJpbmRpbmdFeHByZXNzaW9uKHNIaWRkZW5GaWx0ZXJQYXRoKSkpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikubGVuZ3RoID09PSAyICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA8IDApIHtcblx0XHQvLyB0aGVyZSBpcyBubyBuYXZpZ2F0aW9uIGluIGVudGl0eVNldCBwYXRoIGFuZCBwcm9wZXJ0eSBwYXRoXG5cdFx0YklzRmlsdGVyYWJsZSA9ICFfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNQcm9wZXJ0eSk7XG5cdH0gZWxzZSB7XG5cdFx0YklzRmlsdGVyYWJsZSA9ICFfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc1Byb3BlcnR5KTtcblx0fVxuXHQvLyBjaGVjayBpZiB0eXBlIGNhbiBiZSB1c2VkIGZvciBmaWx0ZXJpbmdcblx0aWYgKGJJc0ZpbHRlcmFibGUgJiYgb05hdmlnYXRpb25Db250ZXh0KSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5RGF0YVR5cGUgPSBnZXRQcm9wZXJ0eURhdGFUeXBlKG9OYXZpZ2F0aW9uQ29udGV4dCk7XG5cdFx0aWYgKHNQcm9wZXJ0eURhdGFUeXBlKSB7XG5cdFx0XHRiSXNGaWx0ZXJhYmxlID0gYVZhbGlkVHlwZXMuaW5kZXhPZihzUHJvcGVydHlEYXRhVHlwZSkgIT09IC0xO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiSXNGaWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGJJc0ZpbHRlcmFibGU7XG59XG5mdW5jdGlvbiBnZXRTaGVsbFNlcnZpY2VzKG9Db250cm9sOiBhbnkpIHtcblx0cmV0dXJuIGdldEFwcENvbXBvbmVudChvQ29udHJvbCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xufVxuZnVuY3Rpb24gZ2V0SGFzaCgpIHtcblx0Y29uc3Qgc0hhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0cmV0dXJuIHNIYXNoLnNwbGl0KFwiJlwiKVswXTtcbn1cbmZ1bmN0aW9uIF9nZXRTT0ludGVudHMob09iamVjdFBhZ2VMYXlvdXQ6IGFueSwgb1NlbWFudGljT2JqZWN0OiBhbnksIG9QYXJhbTogYW55KSB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBDb21tb25VdGlscy5nZXRTaGVsbFNlcnZpY2VzKG9PYmplY3RQYWdlTGF5b3V0KTtcblx0cmV0dXJuIG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3Moe1xuXHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0cGFyYW1zOiBvUGFyYW1cblx0fSk7XG59XG4vLyBUTy1ETyBhZGQgdGhpcyBhcyBwYXJ0IG9mIGFwcGx5U2VtYW50aWNPYmplY3RtYXBwaW5ncyBsb2dpYyBpbiBJbnRlbnRCYXNlZG5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb25cbmZ1bmN0aW9uIF9jcmVhdGVNYXBwaW5ncyhvTWFwcGluZzogYW55KSB7XG5cdGNvbnN0IGFTT01hcHBpbmdzID0gW107XG5cdGNvbnN0IGFNYXBwaW5nS2V5cyA9IE9iamVjdC5rZXlzKG9NYXBwaW5nKTtcblx0bGV0IG9TZW1hbnRpY01hcHBpbmc7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hcHBpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdFwiTG9jYWxQcm9wZXJ0eVwiOiB7XG5cdFx0XHRcdFwiJFByb3BlcnR5UGF0aFwiOiBhTWFwcGluZ0tleXNbaV1cblx0XHRcdH0sXG5cdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogb01hcHBpbmdbYU1hcHBpbmdLZXlzW2ldXVxuXHRcdH07XG5cdFx0YVNPTWFwcGluZ3MucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0fVxuXG5cdHJldHVybiBhU09NYXBwaW5ncztcbn1cbi8qKlxuICogQHBhcmFtIGFMaW5rc1xuICogQHBhcmFtIGFFeGNsdWRlZEFjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0UGFyYW1zXG4gKiBAcGFyYW0gYUl0ZW1zXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3M6IGFueSwgYUV4Y2x1ZGVkQWN0aW9uczogYW55LCBvVGFyZ2V0UGFyYW1zOiBhbnksIGFJdGVtczogYW55KSB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgb0xpbmsgPSBhTGlua3NbaV07XG5cdFx0Y29uc3Qgc0ludGVudCA9IG9MaW5rLmludGVudDtcblx0XHRjb25zdCBzQWN0aW9uID0gc0ludGVudC5zcGxpdChcIi1cIilbMV0uc3BsaXQoXCI/XCIpWzBdO1xuXHRcdGlmIChhRXhjbHVkZWRBY3Rpb25zICYmIGFFeGNsdWRlZEFjdGlvbnMuaW5kZXhPZihzQWN0aW9uKSA9PT0gLTEpIHtcblx0XHRcdGFJdGVtcy5wdXNoKHtcblx0XHRcdFx0dGV4dDogb0xpbmsudGV4dCxcblx0XHRcdFx0dGFyZ2V0U2VtT2JqZWN0OiBzSW50ZW50LnNwbGl0KFwiI1wiKVsxXS5zcGxpdChcIi1cIilbMF0sXG5cdFx0XHRcdHRhcmdldEFjdGlvbjogc0FjdGlvbi5zcGxpdChcIn5cIilbMF0sXG5cdFx0XHRcdHRhcmdldFBhcmFtczogb1RhcmdldFBhcmFtc1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG4vKipcbiAqIEBwYXJhbSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1xuICogQHBhcmFtIG9CaW5kaW5nQ29udGV4dFxuICogQHBhcmFtIGFNYW5pZmVzdFNPSXRlbXNcbiAqIEBwYXJhbSBhTGlua3NcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzOiBhbnksIG9CaW5kaW5nQ29udGV4dDogYW55LCBhTWFuaWZlc3RTT0l0ZW1zOiBhbnksIGFMaW5rczogYW55KSB7XG5cdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhRXhjbHVkZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zID8gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zIDogW107XG5cdFx0Y29uc3QgYVNPTWFwcGluZ3MgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nID8gX2NyZWF0ZU1hcHBpbmdzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcpIDogW107XG5cdFx0Y29uc3Qgb1RhcmdldFBhcmFtcyA9IHsgbmF2aWdhdGlvbkNvbnRleHRzOiBvQmluZGluZ0NvbnRleHQsIHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNPTWFwcGluZ3MgfTtcblx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhTWFuaWZlc3RTT0l0ZW1zKTtcblx0fVxufVxuZnVuY3Rpb24gdXBkYXRlUmVsYXRlQXBwc01vZGVsKFxuXHR0aGlzOiBhbnksXG5cdG9CaW5kaW5nQ29udGV4dDogYW55LFxuXHRvRW50cnk6IGFueSxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IGFueSxcblx0YVNlbUtleXM6IGFueSxcblx0b01ldGFNb2RlbDogYW55LFxuXHRvTWV0YVBhdGg6IGFueVxuKSB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBnZXRTaGVsbFNlcnZpY2VzKG9PYmplY3RQYWdlTGF5b3V0KTtcblx0Y29uc3Qgb1BhcmFtOiBhbnkgPSB7fTtcblx0bGV0IHNDdXJyZW50U2VtT2JqID0gXCJcIixcblx0XHRzQ3VycmVudEFjdGlvbiA9IFwiXCI7XG5cdGxldCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcblx0bGV0IGFSZWxhdGVkQXBwc01lbnVJdGVtczogYW55W10gPSBbXTtcblx0bGV0IGFFeGNsdWRlZEFjdGlvbnM6IGFueVtdID0gW107XG5cblx0aWYgKG9FbnRyeSkge1xuXHRcdGlmIChhU2VtS2V5cyAmJiBhU2VtS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFTZW1LZXlzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGNvbnN0IHNTZW1LZXkgPSBhU2VtS2V5c1tqXS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpZiAoIW9QYXJhbVtzU2VtS2V5XSkge1xuXHRcdFx0XHRcdG9QYXJhbVtzU2VtS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzU2VtS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGZhbGxiYWNrIHRvIFRlY2huaWNhbCBLZXlzIGlmIG5vIFNlbWFudGljIEtleSBpcyBwcmVzZW50XG5cdFx0XHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KG9NZXRhUGF0aCArIFwiLyRUeXBlLyRLZXlcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBhVGVjaG5pY2FsS2V5cykge1xuXHRcdFx0XHRjb25zdCBzT2JqS2V5ID0gYVRlY2huaWNhbEtleXNba2V5XTtcblx0XHRcdFx0aWYgKCFvUGFyYW1bc09iaktleV0pIHtcblx0XHRcdFx0XHRvUGFyYW1bc09iaktleV0gPSB7IHZhbHVlOiBvRW50cnlbc09iaktleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyBMb2dpYyB0byByZWFkIGFkZGl0aW9uYWwgU08gZnJvbSBtYW5pZmVzdCBhbmQgdXBkYXRlZCByZWxhdGVkYXBwcyBtb2RlbFxuXG5cdGNvbnN0IG9NYW5pZmVzdERhdGEgPSBnZXRUYXJnZXRWaWV3KG9PYmplY3RQYWdlTGF5b3V0KS5nZXRWaWV3RGF0YSgpO1xuXHRjb25zdCBhTWFuaWZlc3RTT0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRpZiAob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0Y29uc3QgYU1hbmlmZXN0U09LZXlzID0gT2JqZWN0LmtleXMob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKTtcblx0XHRmb3IgKGxldCBrZXkgPSAwOyBrZXkgPCBhTWFuaWZlc3RTT0tleXMubGVuZ3RoOyBrZXkrKykge1xuXHRcdFx0X2dldFNPSW50ZW50cyhvT2JqZWN0UGFnZUxheW91dCwgYU1hbmlmZXN0U09LZXlzW2tleV0sIG9QYXJhbSlcblx0XHRcdFx0LnRoZW4oXG5cdFx0XHRcdFx0X2dldFJlbGF0ZWRJbnRlbnRzLmJpbmQoXG5cdFx0XHRcdFx0XHR0aGlzIGFzIGFueSxcblx0XHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1thTWFuaWZlc3RTT0tleXNba2V5XV0sXG5cdFx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIFNPIEludGVudHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCkge1xuXHRcdGNvbnN0IG9QYXJzZWRVcmwgPSBvU2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdHNDdXJyZW50U2VtT2JqID0gb1BhcnNlZFVybC5zZW1hbnRpY09iamVjdDsgLy8gQ3VycmVudCBTZW1hbnRpYyBPYmplY3Rcblx0XHRzQ3VycmVudEFjdGlvbiA9IG9QYXJzZWRVcmwuYWN0aW9uO1xuXHRcdHJldHVybiBfZ2V0U09JbnRlbnRzKG9PYmplY3RQYWdlTGF5b3V0LCBzQ3VycmVudFNlbU9iaiwgb1BhcmFtKTtcblx0fVxuXG5cdGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFMaW5rczogYW55KSB7XG5cdFx0XHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRQYXJhbXM6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBhQW5ub3RhdGlvbnNTT0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IG9NZXRhUGF0aCArIFwiQFwiO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZVBhdGggPSBvTWV0YVBhdGggKyBcIi9AXCI7XG5cdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoKTtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5U2V0QW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0aWYgKCFvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08pIHtcblx0XHRcdFx0XHRjb25zdCBvRW50aXR5VHlwZUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVR5cGVQYXRoKTtcblx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRcdFx0Ly9Ta2lwIHNhbWUgYXBwbGljYXRpb24gZnJvbSBSZWxhdGVkIEFwcHNcblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucy5wdXNoKHNDdXJyZW50QWN0aW9uKTtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBvQmluZGluZ0NvbnRleHQ7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhQW5ub3RhdGlvbnNTT0l0ZW1zKTtcblx0XHRcdFx0YVJlbGF0ZWRBcHBzTWVudUl0ZW1zID0gYUFubm90YXRpb25zU09JdGVtcy5jb25jYXQoYU1hbmlmZXN0U09JdGVtcyk7XG5cdFx0XHRcdC8vIElmIG5vIGFwcCBpbiBsaXN0LCByZWxhdGVkIGFwcHMgYnV0dG9uIHdpbGwgYmUgaGlkZGVuXG5cdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcy5sZW5ndGggPiAwKTtcblx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL2l0ZW1zXCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmVhZCBsaW5rc1wiLCBvRXJyb3IpO1xuXHRcdH0pO1xuXHRyZXR1cm4gYVJlbGF0ZWRBcHBzTWVudUl0ZW1zO1xufVxuZnVuY3Rpb24gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eUFubm90YXRpb25zOiBhbnksIHNDdXJyZW50U2VtT2JqOiBhbnkpIHtcblx0Y29uc3Qgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSB7XG5cdFx0Ykhhc0VudGl0eVNldFNPOiBmYWxzZSxcblx0XHRhVW5hdmFpbGFibGVBY3Rpb25zOiBbXSxcblx0XHRhTWFwcGluZ3M6IFtdXG5cdH07XG5cdGxldCBzQW5ub3RhdGlvbk1hcHBpbmdUZXJtLCBzQW5ub3RhdGlvbkFjdGlvblRlcm07XG5cdGxldCBzUXVhbGlmaWVyO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoa2V5LmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RcIikgPiAtMSAmJiBvRW50aXR5QW5ub3RhdGlvbnNba2V5XSA9PT0gc0N1cnJlbnRTZW1PYmopIHtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTyA9IHRydWU7XG5cdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1wiO1xuXHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXCI7XG5cblx0XHRcdGlmIChrZXkuaW5kZXhPZihcIiNcIikgPiAtMSkge1xuXHRcdFx0XHRzUXVhbGlmaWVyID0ga2V5LnNwbGl0KFwiI1wiKVsxXTtcblx0XHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gKyBcIiNcIiArIHNRdWFsaWZpZXI7XG5cdFx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IHNBbm5vdGF0aW9uQWN0aW9uVGVybSArIFwiI1wiICsgc1F1YWxpZmllcjtcblx0XHRcdH1cblxuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzLmNvbmNhdChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0pO1xuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMuY29uY2F0KFxuXHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXVxuXHRcdFx0KTtcblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcbn1cbmZ1bmN0aW9uIGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlTGF5b3V0OiBhbnkpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9QYXRoID0gb0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdGNvbnN0IG9NZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob1BhdGgpO1xuXHQvLyBTZW1hbnRpYyBLZXkgVm9jYWJ1bGFyeVxuXHRjb25zdCBzU2VtYW50aWNLZXlWb2NhYnVsYXJ5ID0gb01ldGFQYXRoICsgXCIvXCIgKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIjtcblx0Ly9TZW1hbnRpYyBLZXlzXG5cdGNvbnN0IGFTZW1LZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSk7XG5cdC8vIFVuYXZhaWxhYmxlIEFjdGlvbnNcblx0Y29uc3Qgb0VudHJ5ID0gb0JpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoIW9FbnRyeSkge1xuXHRcdG9CaW5kaW5nQ29udGV4dFxuXHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9FbnRyeTogYW55KSB7XG5cdFx0XHRcdHJldHVybiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwIGRldGFpbHNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoKTtcblx0fVxufVxuLyoqXG4gKiBAcGFyYW0gb0J1dHRvblxuICovXG5mdW5jdGlvbiBmbkZpcmVCdXR0b25QcmVzcyhvQnV0dG9uOiBhbnkpIHtcblx0Y29uc3QgYUF1dGhvcml6ZWRUeXBlcyA9IFtcInNhcC5tLkJ1dHRvblwiLCBcInNhcC5tLk92ZXJmbG93VG9vbGJhckJ1dHRvblwiXTtcblx0aWYgKG9CdXR0b24gJiYgYUF1dGhvcml6ZWRUeXBlcy5pbmRleE9mKG9CdXR0b24uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpICE9PSAtMSAmJiBvQnV0dG9uLmdldFZpc2libGUoKSAmJiBvQnV0dG9uLmdldEVuYWJsZWQoKSkge1xuXHRcdG9CdXR0b24uZmlyZVByZXNzKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbihzVmFsdWU6IGFueSkge1xuXHRpZiAoc1ZhbHVlID09PSBcInRydWVcIiB8fCBzVmFsdWUgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEFwcENvbXBvbmVudChvQ29udHJvbDogYW55KTogQXBwQ29tcG9uZW50IHtcblx0aWYgKG9Db250cm9sLmlzQShcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiKSkge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fVxuXHRjb25zdCBvT3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpO1xuXHRpZiAoIW9Pd25lcikge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Pd25lcik7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFRhcmdldFZpZXcob0NvbnRyb2w6IGFueSkge1xuXHRpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdG9Db250cm9sID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0Um9vdENvbnRyb2woKTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wgJiYgIShvQ29udHJvbCBpbnN0YW5jZW9mIFZpZXcpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gb0NvbnRyb2w7XG59XG5cbmZ1bmN0aW9uIGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShzRmllbGRDb250cm9sUGF0aDogc3RyaW5nLCBvQXR0cmlidXRlOiBhbnkpIHtcblx0bGV0IGJJbmFwcGxpY2FibGUgPSBmYWxzZTtcblx0Y29uc3QgYVBhcnRzID0gc0ZpZWxkQ29udHJvbFBhdGguc3BsaXQoXCIvXCIpO1xuXHQvLyBzZW5zaXRpdmUgZGF0YSBpcyByZW1vdmVkIG9ubHkgaWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZC5cblx0aWYgKGFQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0YkluYXBwbGljYWJsZSA9IG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSAmJiBvQXR0cmlidXRlW2FQYXJ0c1swXV0uaGFzT3duUHJvcGVydHkoYVBhcnRzWzFdKSAmJiBvQXR0cmlidXRlW2FQYXJ0c1swXV1bYVBhcnRzWzFdXSA9PT0gMDtcblx0fSBlbHNlIHtcblx0XHRiSW5hcHBsaWNhYmxlID0gb0F0dHJpYnV0ZVtzRmllbGRDb250cm9sUGF0aF0gPT09IDA7XG5cdH1cblx0cmV0dXJuIGJJbmFwcGxpY2FibGU7XG59XG5mdW5jdGlvbiByZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzOiBhbnlbXSwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0Y29uc3QgYU91dEF0dHJpYnV0ZXMgPSBbXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBhQXR0cmlidXRlc1tpXS5lbnRpdHlTZXQsXG5cdFx0XHRvQXR0cmlidXRlID0gYUF0dHJpYnV0ZXNbaV0uY29udGV4dERhdGE7XG5cblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5jb250ZXh0XCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiJTQwb2RhdGEuY29udGV4dFwiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCIlNDBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCJTQVBfX01lc3NhZ2VzXCJdO1xuXHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZSk7XG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhUHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuXHRcdFx0Y29uc3Qgc1Byb3AgPSBhUHJvcGVydGllc1tqXSxcblx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIiArIHNFbnRpdHlTZXQgKyBcIi9cIiArIHNQcm9wICsgXCJAXCIpO1xuXHRcdFx0aWYgKGFQcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSB8fFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIl0gfHxcblx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZVwiXVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZVtzUHJvcF07XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSkge1xuXHRcdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdO1xuXHRcdFx0XHRcdGlmIChvRmllbGRDb250cm9sW1wiJEVudW1NZW1iZXJcIl0gJiYgb0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdLnNwbGl0KFwiL1wiKVsxXSA9PT0gXCJJbmFwcGxpY2FibGVcIikge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbc1Byb3BdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAob0ZpZWxkQ29udHJvbFtcIiRQYXRoXCJdICYmIENvbW1vblV0aWxzLmlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShvRmllbGRDb250cm9sW1wiJFBhdGhcIl0sIG9BdHRyaWJ1dGUpKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZVtzUHJvcF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFPdXRBdHRyaWJ1dGVzLnB1c2gob0F0dHJpYnV0ZSk7XG5cdH1cblxuXHRyZXR1cm4gYU91dEF0dHJpYnV0ZXM7XG59XG5mdW5jdGlvbiBfZm5DaGVja0lzTWF0Y2gob09iamVjdDogYW55LCBvS2V5c1RvQ2hlY2s6IGFueSkge1xuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0tleXNUb0NoZWNrKSB7XG5cdFx0aWYgKG9LZXlzVG9DaGVja1tzS2V5XSAhPT0gb09iamVjdFtzS2V5XSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZywgb0ZpbHRlcj86IG9iamVjdCkge1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiL1wiKSB8fCB7fSxcblx0XHRvUHJvcGVydGllczogYW55ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0VudGl0eVR5cGUuaGFzT3duUHJvcGVydHkoc0tleSkgJiZcblx0XHRcdCEvXlxcJC9pLnRlc3Qoc0tleSkgJiZcblx0XHRcdG9FbnRpdHlUeXBlW3NLZXldLiRraW5kICYmXG5cdFx0XHRfZm5DaGVja0lzTWF0Y2gob0VudGl0eVR5cGVbc0tleV0sIG9GaWx0ZXIgfHwgeyAka2luZDogXCJQcm9wZXJ0eVwiIH0pXG5cdFx0KSB7XG5cdFx0XHRvUHJvcGVydGllc1tzS2V5XSA9IG9FbnRpdHlUeXBlW3NLZXldO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1Byb3BlcnRpZXM7XG59XG5mdW5jdGlvbiBmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcpIHtcblx0bGV0IGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM7XG5cdGlmIChvTWV0YU1vZGVsICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9ucy9SZXF1aXJlZFByb3BlcnRpZXNcIik7XG5cdH1cblx0cmV0dXJuIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM7XG59XG5mdW5jdGlvbiBmbkdldElCTkFjdGlvbnMob0NvbnRyb2w6IGFueSwgYUlCTkFjdGlvbnM6IGFueVtdKSB7XG5cdGNvbnN0IGFBY3Rpb25zID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0QWN0aW9ucygpO1xuXHRpZiAoYUFjdGlvbnMpIHtcblx0XHRhQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBhSUJOQWN0aW9uc1xuICogQHBhcmFtIG9WaWV3XG4gKi9cbmZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IGFueVtdLCBvVmlldzogVmlldykge1xuXHRjb25zdCBvUGFyYW1zOiBhbnkgPSB7fTtcblx0Y29uc3QgZm5HZXRMaW5rcyA9IGZ1bmN0aW9uIChvRGF0YT86IGFueSkge1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhvRGF0YSk7XG5cdFx0XHRhS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0geyB2YWx1ZTogb0RhdGFbc0tleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChhSUJOQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGFJQk5BY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9JQk5BY3Rpb246IGFueSkge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob1ZpZXcpXG5cdFx0XHRcdFx0LmdldExpbmtzKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluazogYW55KSB7XG5cdFx0XHRcdFx0XHRvSUJOQWN0aW9uLnNldFZpc2libGUob0lCTkFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgYUxpbmsgJiYgYUxpbmsubGVuZ3RoID09PSAxKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIGFueSlcblx0XHRcdD8ucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZuR2V0TGlua3MoKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHQoc0ZyYW1ld29ya0tleTogc3RyaW5nLCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBvUGFyYW1zPzogYW55LCBzRW50aXR5U2V0TmFtZT86IHN0cmluZykge1xuXHRsZXQgc1Jlc291cmNlS2V5ID0gc0ZyYW1ld29ya0tleTtcblx0aWYgKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdGlmIChzRW50aXR5U2V0TmFtZSkge1xuXHRcdFx0Ly8gVGhlcmUgYXJlIGNvbnNvbGUgZXJyb3JzIGxvZ2dlZCB3aGVuIG1ha2luZyBjYWxscyB0byBnZXRUZXh0IGZvciBrZXlzIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSByZXNvdXJjZSBidW5kbGVcblx0XHRcdC8vIGZvciBpbnN0YW5jZSBrZXlzIHdoaWNoIGFyZSBzdXBwb3NlZCB0byBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24sIGUuZywgPGtleT58PGVudGl0eVNldD4gdG8gb3ZlcnJpZGUgaW5zdGFuY2Ugc3BlY2lmaWMgdGV4dFxuXHRcdFx0Ly8gaGVuY2UgY2hlY2sgaWYgdGV4dCBleGlzdHMgKHVzaW5nIFwiaGFzVGV4dFwiKSBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIGJlZm9yZSBjYWxsaW5nIFwiZ2V0VGV4dFwiXG5cblx0XHRcdC8vIFwiaGFzVGV4dFwiIG9ubHkgY2hlY2tzIGZvciB0aGUga2V5IGluIHRoZSBpbW1lZGlhdGUgcmVzb3VyY2UgYnVuZGxlIGFuZCBub3QgaXQncyBjdXN0b20gYnVuZGxlc1xuXHRcdFx0Ly8gaGVuY2Ugd2UgbmVlZCB0byBkbyB0aGlzIHJlY3VycnNpdmVseSB0byBjaGVjayBpZiB0aGUga2V5IGV4aXN0cyBpbiBhbnkgb2YgdGhlIGJ1bmRsZXMgdGhlIGZvcm1zIHRoZSBGRSByZXNvdXJjZSBidW5kbGVcblx0XHRcdGNvbnN0IGJSZXNvdXJjZUtleUV4aXN0cyA9IF9jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoXG5cdFx0XHRcdChvUmVzb3VyY2VCdW5kbGUgYXMgYW55KS5hQ3VzdG9tQnVuZGxlcyxcblx0XHRcdFx0c0ZyYW1ld29ya0tleSArIFwifFwiICsgc0VudGl0eVNldE5hbWVcblx0XHRcdCk7XG5cblx0XHRcdC8vIGlmIHJlc291cmNlIGtleSB3aXRoIGVudGl0eSBzZXQgbmFtZSBmb3IgaW5zdGFuY2Ugc3BlY2lmaWMgdGV4dCBvdmVycmlkaW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHRcdFx0Ly8gdGhlbiB1c2UgdGhlIHNhbWUga2V5IG90aGVyd2lzZSB1c2UgdGhlIEZyYW1ld29yayBrZXlcblx0XHRcdHNSZXNvdXJjZUtleSA9IGJSZXNvdXJjZUtleUV4aXN0cyA/IHNGcmFtZXdvcmtLZXkgKyBcInxcIiArIHNFbnRpdHlTZXROYW1lIDogc0ZyYW1ld29ya0tleTtcblx0XHR9XG5cdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZUtleSwgb1BhcmFtcyk7XG5cdH1cblxuXHQvLyBkbyBub3QgYWxsb3cgb3ZlcnJpZGUgc28gZ2V0IHRleHQgZnJvbSB0aGUgaW50ZXJuYWwgYnVuZGxlIGRpcmVjdGx5XG5cdG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChzUmVzb3VyY2VLZXksIG9QYXJhbXMpO1xufVxuZnVuY3Rpb24gX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhhQ3VzdG9tQnVuZGxlczogYW55LCBzS2V5OiBhbnkpIHtcblx0aWYgKGFDdXN0b21CdW5kbGVzLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSBhQ3VzdG9tQnVuZGxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gYUN1c3RvbUJ1bmRsZXNbaV0uaGFzVGV4dChzS2V5KTtcblx0XHRcdC8vIHRleHQgZm91bmQgcmV0dXJuIHRydWVcblx0XHRcdGlmIChzVmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGFDdXN0b21CdW5kbGVzW2ldLmFDdXN0b21CdW5kbGVzLCBzS2V5KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uUGF0aChvQWN0aW9uOiBhbnksIGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbiwgc0FjdGlvbk5hbWU/OiBzdHJpbmcsIGJDaGVja1N0YXRpY1ZhbHVlPzogYm9vbGVhbikge1xuXHRzQWN0aW9uTmFtZSA9ICFzQWN0aW9uTmFtZSA/IG9BY3Rpb24uZ2V0T2JqZWN0KG9BY3Rpb24uZ2V0UGF0aCgpKSA6IHNBY3Rpb25OYW1lO1xuXHRsZXQgc0NvbnRleHRQYXRoID0gb0FjdGlvbi5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gXCIvXCIgKyBzRW50aXR5TmFtZTtcblx0fVxuXHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRyZXR1cm4gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzQWN0aW9uTmFtZSArIFwiQE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZVwiKTtcblx0fVxuXHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0cmV0dXJuIHNDb250ZXh0UGF0aCArIFwiL1wiICsgc0FjdGlvbk5hbWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0c1Byb3BlcnR5OiBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIi9cIiArIHNBY3Rpb25OYW1lICsgXCJAT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoXCIpLFxuXHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiL1wiICsgc0FjdGlvbk5hbWUgKyBcIi9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZVwiKVxuXHRcdH07XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEVudGl0eVNldE5hbWUob01ldGFNb2RlbDogYW55LCBzRW50aXR5VHlwZTogYW55KSB7XG5cdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gY29tcHV0ZURpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zOiBhbnksIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/OiBhbnkpIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0sXG5cdFx0b1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPVxuXHRcdFx0b1RleHRBbm5vdGF0aW9uICYmXG5cdFx0XHQoKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pKTtcblxuXHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59XG5mdW5jdGlvbiBfZ2V0RW50aXR5VHlwZShvQ29udGV4dDogYW55KSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qob01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpICsgXCIvJFR5cGVcIik7XG59XG5mdW5jdGlvbiBfcmVxdWVzdE9iamVjdChzQWN0aW9uOiBhbnksIG9TZWxlY3RlZENvbnRleHQ6IGFueSwgc1Byb3BlcnR5OiBhbnkpIHtcblx0bGV0IG9Db250ZXh0ID0gb1NlbGVjdGVkQ29udGV4dDtcblx0Y29uc3QgbkJyYWNrZXRJbmRleCA9IHNBY3Rpb24uaW5kZXhPZihcIihcIik7XG5cblx0aWYgKG5CcmFja2V0SW5kZXggPiAtMSkge1xuXHRcdGNvbnN0IHNUYXJnZXRUeXBlID0gc0FjdGlvbi5zbGljZShuQnJhY2tldEluZGV4ICsgMSwgLTEpO1xuXHRcdGxldCBzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cblx0XHR3aGlsZSAoc0N1cnJlbnRUeXBlICE9PSBzVGFyZ2V0VHlwZSkge1xuXHRcdFx0Ly8gRmluZCBwYXJlbnQgYmluZGluZyBjb250ZXh0IGFuZCByZXRyaWV2ZSBlbnRpdHkgdHlwZVxuXHRcdFx0b0NvbnRleHQgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGRldGVybWluZSB0YXJnZXQgdHlwZSB0byByZXF1ZXN0IHByb3BlcnR5IHZhbHVlIGZvciBib3VuZCBhY3Rpb24gaW52b2NhdGlvblwiKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvQ29udGV4dC5yZXF1ZXN0T2JqZWN0KHNQcm9wZXJ0eSk7XG59XG5mdW5jdGlvbiBfcmVxdWVzdFByb3BlcnR5KG9TZWxlY3RlZENvbnRleHQ6IGFueSwgc0FjdGlvbjogYW55LCBzUHJvcGVydHk6IGFueSwgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogYW55KSB7XG5cdGNvbnN0IG9Qcm9taXNlID1cblx0XHRzUHJvcGVydHkgJiYgc1Byb3BlcnR5LmluZGV4T2YoXCIvXCIpID09PSAwXG5cdFx0XHQ/IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShzUHJvcGVydHksIG9TZWxlY3RlZENvbnRleHQuZ2V0TW9kZWwoKSlcblx0XHRcdDogX3JlcXVlc3RPYmplY3Qoc0FjdGlvbiwgb1NlbGVjdGVkQ29udGV4dCwgc1Byb3BlcnR5KTtcblxuXHRyZXR1cm4gb1Byb21pc2UudGhlbihmdW5jdGlvbiAodlByb3BlcnR5VmFsdWU6IGFueSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuXHRcdFx0dlByb3BlcnR5VmFsdWU6IHZQcm9wZXJ0eVZhbHVlLFxuXHRcdFx0b1NlbGVjdGVkQ29udGV4dDogb1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdHNBY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoXG5cdFx0fSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgYVJlcXVlc3RQcm9taXNlczogYW55KSB7XG5cdHJldHVybiBQcm9taXNlLmFsbChhUmVxdWVzdFByb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhUmVzdWx0czogYW55W10pIHtcblx0XHRcdGlmIChhUmVzdWx0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgYUFwcGxpY2FibGVDb250ZXh0czogYW55W10gPSBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChhUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRpZiAoYVJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aWYgKGFSZXN1bHQudlByb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYVJlc3VsdC5zRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YUFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlc3VsdHNbMF0uc0FjdGlvbiwgYUFwcGxpY2FibGVDb250ZXh0cywgYU5vdEFwcGxpY2FibGVDb250ZXh0cyk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cudHJhY2UoXCJDYW5ub3QgcmV0cmlldmUgcHJvcGVydHkgdmFsdWUgZnJvbSBwYXRoXCIsIG9FcnJvcik7XG5cdFx0fSk7XG59XG4vKipcbiAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHRcbiAqIEBwYXJhbSBzQWN0aW9uXG4gKiBAcGFyYW0gYUFwcGxpY2FibGVcbiAqIEBwYXJhbSBhTm90QXBwbGljYWJsZVxuICovXG5mdW5jdGlvbiBfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBzQWN0aW9uOiBhbnksIGFBcHBsaWNhYmxlOiBhbnksIGFOb3RBcHBsaWNhYmxlOiBhbnkpIHtcblx0Y29uc3Qgc0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKSArIFwiL2R5bmFtaWNBY3Rpb25zL1wiICsgc0FjdGlvbixcblx0XHRvSW50ZXJuYWxNb2RlbCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvblBhdGhQcmVmaXggKyBcIi9hQXBwbGljYWJsZVwiLCBhQXBwbGljYWJsZSk7XG5cdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uUGF0aFByZWZpeCArIFwiL2FOb3RBcHBsaWNhYmxlXCIsIGFOb3RBcHBsaWNhYmxlKTtcbn1cbmZ1bmN0aW9uIHNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXA6IGFueSwgYVNlbGVjdGVkQ29udGV4dHM6IGFueSkge1xuXHRjb25zdCBhUHJvbWlzZXMgPSBbXTtcblx0Zm9yIChjb25zdCBzQWN0aW9uIGluIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHQvLyBSZXNldCBhbGwgcHJvcGVydGllcyBiZWZvcmUgY29tcHV0YXRpb25cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkeW5hbWljQWN0aW9ucy9cIiArIHNBY3Rpb24sIHtcblx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdH0pO1xuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0c1Byb3BlcnR5ID0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcFtzQWN0aW9uXSxcblx0XHRcdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGggPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpICsgXCIvZHluYW1pY0FjdGlvbnMvXCIgKyBzQWN0aW9uICsgXCIvYkVuYWJsZWRcIjtcblxuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gYVNlbGVjdGVkQ29udGV4dHNbaV07XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRjb25zdCBvVHJhbnNmb3JtZWRCaW5kaW5nID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcIkJpbmRpbmdcIixcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcblx0XHRcdFx0XHRcdGZ1bmN0aW9uIChvQmluZGluZ0V4cHJlc3Npb246IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQob0NvbnRleHREYXRhW29CaW5kaW5nRXhwcmVzc2lvbi5wYXRoXSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3Qgc1Jlc3VsdCA9IGNvbXBpbGVCaW5kaW5nKG9UcmFuc2Zvcm1lZEJpbmRpbmcpO1xuXHRcdFx0XHRcdGlmIChzUmVzdWx0ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRhQXBwbGljYWJsZS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0X3NldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNBY3Rpb24sIGFBcHBsaWNhYmxlLCBhTm90QXBwbGljYWJsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFSZXF1ZXN0UHJvbWlzZXMgPSBbXTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGFTZWxlY3RlZENvbnRleHRzW2ldO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtcIiNcIiArIHNBY3Rpb25dKSB7XG5cdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLnB1c2goX3JlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gV2hlbiBhbGwgcHJvcGVydHkgdmFsdWVzIGhhdmUgYmVlbiByZXRyaWV2ZWQsIHNldFxuXHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdC8vIFRoZSBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbiBpbiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuXHRcdFx0YVByb21pc2VzLnB1c2goX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFSZXF1ZXN0UHJvbWlzZXMpKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdE1hcHBpbmdzKHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBvUGFyYW1zOiBhbnksIGFTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnkpIHtcblx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdGlmIChzU2VtYW50aWNPYmplY3QgPT09IG9JdGVtLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRjb25zdCBvTWFwcGluZ3MgPSBvSXRlbS5pdGVtcztcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgb01hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID0gb01hcHBpbmdzW2ldLmtleTtcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPSBvTWFwcGluZ3NbaV0udmFsdWU7XG5cdFx0XHRcdGlmIChvUGFyYW1zW3NMb2NhbFByb3BlcnR5XSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc1NlbWFudGljT2JqZWN0UHJvcGVydHldID0gb1BhcmFtc1tzTG9jYWxQcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gb1BhcmFtcztcbn1cblxuZnVuY3Rpb24gX2dldERlZmF1bHRPcGVyYXRvcnMoc1Byb3BlcnR5VHlwZTogc3RyaW5nKSB7XG5cdC8vIG1kYyBkZWZpbmVzIHRoZSBmdWxsIHNldCBvZiBvcGVyYXRpb25zIHRoYXQgYXJlIG1lYW5pbmdmdWwgZm9yIGVhY2ggRWRtIFR5cGVcblx0Ly8gVE9ETyBSZXBsYWNlIHdpdGggbW9kZWwgLyBpbnRlcm5hbCB3YXkgb2YgcmV0cmlldmluZyB0aGUgYWN0dWFsIG1vZGVsIHR5cGUgdXNlZCBmb3IgdGhlIHByb3BlcnR5XG5cdGNvbnN0IG9EYXRhQ2xhc3MgPSBUeXBlVXRpbC5nZXREYXRhVHlwZUNsYXNzTmFtZShzUHJvcGVydHlUeXBlKTtcblx0Ly8gVE9ETyBuZWVkIHRvIHBhc3MgcHJvcGVyIGZvcm1hdE9wdGlvbnMsIGNvbnN0cmFpbnRzIGhlcmVcblx0Y29uc3Qgb0Jhc2VUeXBlID0gVHlwZVV0aWwuZ2V0QmFzZVR5cGUob0RhdGFDbGFzcywge30sIHt9KTtcblx0cmV0dXJuIEZpbHRlck9wZXJhdG9yVXRpbC5nZXRPcGVyYXRvcnNGb3JUeXBlKG9CYXNlVHlwZSk7XG59XG5mdW5jdGlvbiBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BzOiBhbnksIGFFeHByZXNzaW9uT3BzOiBhbnkpIHtcblx0Ly8gRnJvbSB0aGUgZGVmYXVsdCBzZXQgb2YgT3BlcmF0b3JzIGZvciB0aGUgQmFzZSBUeXBlLCBzZWxlY3QgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgQWxsb3dlZCBWYWx1ZS5cblx0Ly8gSW4gY2FzZSB0aGF0IG5vIG9wZXJhdG9ycyBhcmUgZm91bmQsIHJldHVybiB1bmRlZmluZWQgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXQgaXMgdXNlZC5cblx0Y29uc3QgYU9wZXJhdG9ycyA9IGFEZWZhdWx0T3BzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQ6IGFueSkge1xuXHRcdHJldHVybiBhRXhwcmVzc2lvbk9wcy5pbmRleE9mKHNFbGVtZW50KSA+IC0xO1xuXHR9KTtcblx0cmV0dXJuIGFPcGVyYXRvcnMudG9TdHJpbmcoKSB8fCB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKGFFeHByZXNzaW9uczogYW55KSB7XG5cdGNvbnN0IGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSA9IENvbW1vblV0aWxzLkFsbG93ZWRFeHByZXNzaW9uc1ByaW87XG5cblx0YUV4cHJlc3Npb25zLnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59XG5mdW5jdGlvbiBnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0c1Byb3BlcnR5OiBhbnksXG5cdHNFbnRpdHlTZXRQYXRoOiBhbnksXG5cdG9Db250ZXh0OiBhbnksXG5cdHNUeXBlPzogYW55LFxuXHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBhbnksXG5cdHNTZXR0aW5ncz86IGFueVxuKSB7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0VudGl0eVNldFBhdGgsIG9Db250ZXh0KTtcblx0Y29uc3QgYUVxdWFsc09wcyA9IFtcIkVRXCJdO1xuXHRjb25zdCBhU2luZ2xlUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0Y29uc3QgYVNpbmdsZVJhbmdlRFRCYXNpY09wcyA9IFtcIkVRXCIsIFwiQlRcIl07XG5cdGNvbnN0IGFTaW5nbGVWYWx1ZURhdGVPcHMgPSBbXG5cdFx0XCJUT0RBWVwiLFxuXHRcdFwiVE9NT1JST1dcIixcblx0XHRcIllFU1RFUkRBWVwiLFxuXHRcdFwiREFURVwiLFxuXHRcdFwiRklSU1REQVlXRUVLXCIsXG5cdFx0XCJMQVNUREFZV0VFS1wiLFxuXHRcdFwiRklSU1REQVlNT05USFwiLFxuXHRcdFwiTEFTVERBWU1PTlRIXCIsXG5cdFx0XCJGSVJTVERBWVFVQVJURVJcIixcblx0XHRcIkxBU1REQVlRVUFSVEVSXCIsXG5cdFx0XCJGSVJTVERBWVlFQVJcIixcblx0XHRcIkxBU1REQVlZRUFSXCJcblx0XTtcblx0Y29uc3QgYUJhc2ljRGF0ZVRpbWVPcHMgPSBbXCJFUVwiLCBcIkxFXCIsIFwiR0VcIiwgXCJCVFwiXTtcblx0Y29uc3QgYU11bHRpUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdGNvbnN0IGFTZWFyY2hFeHByZXNzaW9uT3BzID0gW1wiQ29udGFpbnNcIiwgXCJOb3RDb250YWluc1wiLCBcIlN0YXJ0c1dpdGhcIiwgXCJOb3RTdGFydHNXaXRoXCIsIFwiRW5kc1dpdGhcIiwgXCJOb3RFbmRzV2l0aFwiXTtcblx0Y29uc3QgYVNlbWFudGljRGF0ZU9wc0V4dCA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTdXBwb3J0ZWRPcGVyYXRpb25zKCk7XG5cdGNvbnN0IGJTZW1hbnRpY0RhdGVSYW5nZSA9IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gXCJ0cnVlXCIgfHwgYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSB0cnVlO1xuXHRsZXQgYVNlbWFudGljRGF0ZU9wczogYW55W10gPSBbXTtcblx0Y29uc3Qgb1NldHRpbmdzID0gdHlwZW9mIHNTZXR0aW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uoc1NldHRpbmdzKS5jdXN0b21EYXRhIDogc1NldHRpbmdzO1xuXG5cdGlmIChvQ29udGV4dC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRcIikgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gYUVxdWFsc09wcy50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKG9TZXR0aW5ncyAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24ubGVuZ3RoID4gMCkge1xuXHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0RmlsdGVyT3BlcmF0aW9ucyhvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoKTtcblx0fVxuXHRjb25zdCBhU2luZ2xlUmFuZ2VEYXRlVGltZU9wcyA9IGFTZW1hbnRpY0RhdGVPcHMuZmlsdGVyKGZ1bmN0aW9uIChzT3BlcmF0b3IpIHtcblx0XHRyZXR1cm4gc09wZXJhdG9yICE9PSBcIkRBVEVcIiAmJiBzT3BlcmF0b3IgIT09IFwiREFURVJBTkdFXCIgJiYgc09wZXJhdG9yICE9PSBcIkZST01cIiAmJiBzT3BlcmF0b3IgIT09IFwiVE9cIjtcblx0fSk7XG5cdC8vIEdldCB0aGUgZGVmYXVsdCBPcGVyYXRvcnMgZm9yIHRoaXMgUHJvcGVydHkgVHlwZVxuXHRsZXQgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzVHlwZSk7XG5cblx0Ly8gSXMgdGhlcmUgYSBGaWx0ZXIgUmVzdHJpY3Rpb24gZGVmaW5lZCBmb3IgdGhpcyBwcm9wZXJ0eT9cblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSkge1xuXHRcdC8vIEV4dGVuZGluZyB0aGUgZGVmYXVsdCBvcGVyYXRvcnMgbGlzdCB3aXRoIFNlbWFudGljIERhdGUgb3B0aW9ucyBEQVRFUkFOR0UsIERBVEUsIEZST00gYW5kIFRPXG5cdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdFx0YURlZmF1bHRPcGVyYXRvcnMgPSBhU2VtYW50aWNEYXRlT3BzRXh0LmNvbmNhdChhRGVmYXVsdE9wZXJhdG9ycyk7XG5cdFx0fVxuXHRcdGNvbnN0IHNBbGxvd2VkRXhwcmVzc2lvbiA9IENvbW1vblV0aWxzLmdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSk7XG5cdFx0bGV0IHNSZXN0cmljdGlvbnM7XG5cdFx0Ly8gSW4gY2FzZSBtb3JlIHRoYW4gb25lIEFsbG93ZWQgRXhwcmVzc2lvbnMgaGFzIGJlZW4gZGVmaW5lZCBmb3IgYSBwcm9wZXJ0eVxuXHRcdC8vIGNob29zZSB0aGUgbW9zdCByZXN0cmljdGl2ZSBBbGxvd2VkIEV4cHJlc3Npb25cblxuXHRcdC8vIE11bHRpVmFsdWUgaGFzIHNhbWUgT3BlcmF0b3IgYXMgU2luZ2xlVmFsdWUsIGJ1dCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSAobWF4Q29uZGl0aW9ucylcblx0XHRzd2l0Y2ggKHNBbGxvd2VkRXhwcmVzc2lvbikge1xuXHRcdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRcdGNvbnN0IGFTaW5nbGVWYWx1ZU9wcyA9IHNUeXBlID09PSBcIkVkbS5EYXRlXCIgJiYgYlNlbWFudGljRGF0ZVJhbmdlID8gYVNpbmdsZVZhbHVlRGF0ZU9wcyA6IGFFcXVhbHNPcHM7XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhU2luZ2xlVmFsdWVPcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVZhbHVlXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhRXF1YWxzT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRcdFx0Y29uc3QgYUV4cHJlc3Npb25PcHMgPSBiU2VtYW50aWNEYXRlUmFuZ2Vcblx0XHRcdFx0XHQ/IHNUeXBlID09PSBcIkVkbS5EYXRlXCJcblx0XHRcdFx0XHRcdD8gYVNlbWFudGljRGF0ZU9wc1xuXHRcdFx0XHRcdFx0OiBzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdFx0PyBhU2luZ2xlUmFuZ2VEYXRlVGltZU9wcy5jb25jYXQoYUJhc2ljRGF0ZVRpbWVPcHMpXG5cdFx0XHRcdFx0XHQ6IGFTaW5nbGVSYW5nZU9wc1xuXHRcdFx0XHRcdDogc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCJcblx0XHRcdFx0XHQ/IGFTaW5nbGVSYW5nZURUQmFzaWNPcHNcblx0XHRcdFx0XHQ6IGFTaW5nbGVSYW5nZU9wcztcblx0XHRcdFx0Y29uc3Qgc09wZXJhdG9ycyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IHNPcGVyYXRvcnMgPyBzT3BlcmF0b3JzIDogXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlSYW5nZVwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYU11bHRpUmFuZ2VPcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhU2VhcmNoRXhwcmVzc2lvbk9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzLmNvbmNhdChhTXVsdGlSYW5nZU9wcykpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdC8vIEluIGNhc2UgQWxsb3dlZEV4cHJlc3Npb25zIGlzIG5vdCByZWNvZ25pc2VkLCB1bmRlZmluZWQgaW4gcmV0dXJuIHJlc3VsdHMgaW4gdGhlIGRlZmF1bHQgc2V0IG9mXG5cdFx0Ly8gb3BlcmF0b3JzIGZvciB0aGUgdHlwZS5cblx0XHRyZXR1cm4gc1Jlc3RyaWN0aW9ucztcblx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiKSB7XG5cdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHByb3ZpZGVkIGZvciB0eXBlIEVkbS5EYXRlIHRoZW4gYWxsIHRoZSBkZWZhdWx0XG5cdFx0Ly8gb3BlcmF0b3JzIGZvciB0aGUgdHlwZSBzaG91bGQgYmUgcmV0dXJuZWQgZXhjbHVkaW5nIHNlbWFudGljIG9wZXJhdG9ycyBmcm9tIHRoZSBsaXN0LlxuXHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHRcdGNvbnN0IGFPcGVyYXRvcnMgPSBhRGVmYXVsdE9wZXJhdG9ycy5maWx0ZXIoZnVuY3Rpb24gKHNFbGVtZW50OiBhbnkpIHtcblx0XHRcdHJldHVybiBhU2VtYW50aWNEYXRlT3BzLmluZGV4T2Yoc0VsZW1lbnQpIDwgMDtcblx0XHR9KTtcblx0XHRyZXR1cm4gYU9wZXJhdG9ycy50b1N0cmluZygpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJJbmZvKG9NZXRhTW9kZWw6IGFueSwgc0NvbnRleHRQYXRoOiBhbnkpIHtcblx0Y29uc3Qgc1BhcmFtZXRlckNvbnRleHRQYXRoID0gc0NvbnRleHRQYXRoLnN1YnN0cmluZygwLCBzQ29udGV4dFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzUGFyYW1ldGVyQ29udGV4dFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRcIik7XG5cdGNvbnN0IG9QYXJhbWV0ZXJJbmZvOiBhbnkgPSB7fTtcblx0aWYgKGJSZXN1bHRDb250ZXh0ICYmIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCAhPT0gc0NvbnRleHRQYXRoKSB7XG5cdFx0b1BhcmFtZXRlckluZm8uY29udGV4dFBhdGggPSBzUGFyYW1ldGVyQ29udGV4dFBhdGg7XG5cdFx0b1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzUGFyYW1ldGVyQ29udGV4dFBhdGgpO1xuXHR9XG5cdHJldHVybiBvUGFyYW1ldGVySW5mbztcbn1cbmZ1bmN0aW9uIGFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucyhvUHJvcGVydHlNZXRhZGF0YTogYW55LCBhVmFsaWRPcGVyYXRvcnM6IGFueSwgYUN1bXVsYXRpdmVDb25kaXRpb25zOiBhbnksIG9TZWxlY3RPcHRpb246IGFueSkge1xuXHRjb25zdCBvQ29uZGl0aW9uID0gZ2V0Q29uZGl0aW9ucyhvU2VsZWN0T3B0aW9uLCBvUHJvcGVydHlNZXRhZGF0YSk7XG5cdGlmIChvQ29uZGl0aW9uKSB7XG5cdFx0aWYgKCFhVmFsaWRPcGVyYXRvcnMgfHwgYVZhbGlkT3BlcmF0b3JzLmluZGV4T2Yob0NvbmRpdGlvbi5vcGVyYXRvcikgPiAtMSkge1xuXHRcdFx0YUN1bXVsYXRpdmVDb25kaXRpb25zLnB1c2gob0NvbmRpdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhQ3VtdWxhdGl2ZUNvbmRpdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBzQ29udGV4dFBhdGhcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudFxuICogQHBhcmFtIHNTZWxlY3RPcHRpb25Qcm9wXG4gKiBAcGFyYW0gb0NvbmRpdGlvbnNcbiAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aFxuICogQHBhcmFtIHNDb25kaXRpb25Qcm9wXG4gKiBAcGFyYW0gb1ZhbGlkUHJvcGVydGllc1xuICogQHBhcmFtIG9NZXRhTW9kZWxcbiAqIEBwYXJhbSBpc1BhcmFtZXRlclxuICovXG5mdW5jdGlvbiBhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRzQ29udGV4dFBhdGg6IGFueSxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0c1NlbGVjdE9wdGlvblByb3A6IGFueSxcblx0b0NvbmRpdGlvbnM6IGFueSxcblx0c0NvbmRpdGlvblBhdGg6IGFueSxcblx0c0NvbmRpdGlvblByb3A6IGFueSxcblx0b1ZhbGlkUHJvcGVydGllczogYW55LFxuXHRvTWV0YU1vZGVsOiBhbnksXG5cdGlzUGFyYW1ldGVyOiBhbnlcbikge1xuXHRsZXQgYUNvbmRpdGlvbnM6IGFueVtdID0gW10sXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0YVZhbGlkT3BlcmF0b3JzO1xuXG5cdGlmIChpc1BhcmFtZXRlciB8fCBDb21tb25VdGlscy5pc1Byb3BlcnR5RmlsdGVyYWJsZShvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgsIHNDb25kaXRpb25Qcm9wLCB0cnVlKSkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNTZWxlY3RPcHRpb25Qcm9wKTtcblx0XHRhVmFsaWRPcGVyYXRvcnMgPSBpc1BhcmFtZXRlciA/IFtcIkVRXCJdIDogQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoc0NvbmRpdGlvblByb3AsIHNDb250ZXh0UGF0aCwgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5TWV0YWRhdGEgPSBvVmFsaWRQcm9wZXJ0aWVzW3NDb25kaXRpb25Qcm9wXTtcblx0XHQvLyBDcmVhdGUgY29uZGl0aW9ucyBmb3IgYWxsIHRoZSBzZWxlY3RPcHRpb25zIG9mIHRoZSBwcm9wZXJ0eVxuXHRcdGFDb25kaXRpb25zID0gaXNQYXJhbWV0ZXJcblx0XHRcdD8gYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zKG9Qcm9wZXJ0eU1ldGFkYXRhLCBhVmFsaWRPcGVyYXRvcnMsIGFDb25kaXRpb25zLCBhU2VsZWN0T3B0aW9uc1swXSlcblx0XHRcdDogYVNlbGVjdE9wdGlvbnMucmVkdWNlKGFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucy5iaW5kKG51bGwsIG9Qcm9wZXJ0eU1ldGFkYXRhLCBhVmFsaWRPcGVyYXRvcnMpLCBhQ29uZGl0aW9ucyk7XG5cdFx0aWYgKGFDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0aWYgKHNDb25kaXRpb25QYXRoKSB7XG5cdFx0XHRcdG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnMuaGFzT3duUHJvcGVydHkoc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcClcblx0XHRcdFx0XHQ/IG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucylcblx0XHRcdFx0XHQ6IGFDb25kaXRpb25zO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnMuaGFzT3duUHJvcGVydHkoc0NvbmRpdGlvblByb3ApXG5cdFx0XHRcdFx0PyBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUHJvcF0uY29uY2F0KGFDb25kaXRpb25zKVxuXHRcdFx0XHRcdDogYUNvbmRpdGlvbnM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgb0NvbmRpdGlvbnM6IG9iamVjdCwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCksXG5cdFx0b1ZhbGlkUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpLFxuXHRcdGFNZXRhZGF0UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9WYWxpZFByb3BlcnRpZXMpLFxuXHRcdG9QYXJhbWV0ZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVySW5mbyhvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpLFxuXHRcdHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoLFxuXHRcdG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMgPSBvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzLFxuXHRcdGJIYXNQYXJhbWV0ZXJzID0gISFvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCAmJiBvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMpLmxlbmd0aCA+IDA7XG5cblx0aWYgKGJIYXNQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgYU1ldGFkYXRhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMpO1xuXHRcdGFNZXRhZGF0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFkYXRhUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRcdGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCIkUGFyYW1ldGVyLlwiICsgc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiJFBhcmFtZXRlci5cIiArIHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQYXJhbWV0ZXI7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIiRQYXJhbWV0ZXIuXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIiRQYXJhbWV0ZXIuXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIiRQYXJhbWV0ZXIuUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIiRQYXJhbWV0ZXIuUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIlBfXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXI7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzU2VsZWN0T3B0aW9uTmFtZSkge1xuXHRcdFx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0XHRcdHNQYXJhbWV0ZXJDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c01ldGFkYXRhUGFyYW1ldGVyLFxuXHRcdFx0XHRcdG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMsXG5cdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0YU1ldGFkYXRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKHNNZXRhZGF0YVByb3BlcnR5OiBzdHJpbmcpIHtcblx0XHRsZXQgc1NlbGVjdE9wdGlvbk5hbWU7XG5cdFx0aWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQcm9wZXJ0eSkpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHNNZXRhZGF0YVByb3BlcnR5LnN0YXJ0c1dpdGgoXCJQX1wiKSAmJlxuXHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5LnNsaWNlKDIsIHNNZXRhZGF0YVByb3BlcnR5Lmxlbmd0aCkpXG5cdFx0KSB7XG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVByb3BlcnR5LnNsaWNlKDIsIHNNZXRhZGF0YVByb3BlcnR5Lmxlbmd0aCk7XG5cdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCJQX1wiICsgc01ldGFkYXRhUHJvcGVydHkpKSB7XG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiUF9cIiArIHNNZXRhZGF0YVByb3BlcnR5O1xuXHRcdH1cblx0XHRpZiAoc1NlbGVjdE9wdGlvbk5hbWUpIHtcblx0XHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRcdHNDb250ZXh0UGF0aCxcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRzTWV0YWRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0b1ZhbGlkUHJvcGVydGllcyxcblx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoc1NlbGVjdE9wdGlvbjogYW55KSB7XG5cdFx0aWYgKHNTZWxlY3RPcHRpb24uaW5kZXhPZihcIi5cIikgPiAwICYmICFzU2VsZWN0T3B0aW9uLmluY2x1ZGVzKFwiJFBhcmFtZXRlclwiKSkge1xuXHRcdFx0Y29uc3Qgc0Z1bGxDb250ZXh0UGF0aCA9IChcIi9cIiArIHNTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpKS5zdGFydHNXaXRoKHNDb250ZXh0UGF0aClcblx0XHRcdFx0PyBcIi9cIiArIHNTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpXG5cdFx0XHRcdDogc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKTsgLy8gY2hlY2sgaWYgdGhlIGZ1bGwgcGF0aCwgZWcgU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbCBleGlzdHMgaW4gdGhlIG1ldGFtb2RlbFxuXHRcdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNGdWxsQ29udGV4dFBhdGgucmVwbGFjZShcIlBfXCIsIFwiXCIpKSkge1xuXHRcdFx0XHRfY3JlYXRlQ29uZGl0aW9uc0Zvck5hdlByb3BlcnRpZXMoXG5cdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG9Db25kaXRpb25zXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG9Db25kaXRpb25zO1xufVxuLyoqXG4gKiBAcGFyYW0gc0Z1bGxDb250ZXh0UGF0aFxuICogQHBhcmFtIHNNYWluRW50aXR5U2V0UGF0aFxuICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50XG4gKiBAcGFyYW0gc1NlbGVjdE9wdGlvblxuICogQHBhcmFtIG9NZXRhTW9kZWxcbiAqIEBwYXJhbSBvQ29uZGl0aW9uc1xuICovXG5mdW5jdGlvbiBfY3JlYXRlQ29uZGl0aW9uc0Zvck5hdlByb3BlcnRpZXMoXG5cdHNGdWxsQ29udGV4dFBhdGg6IGFueSxcblx0c01haW5FbnRpdHlTZXRQYXRoOiBhbnksXG5cdG9TZWxlY3Rpb25WYXJpYW50OiBhbnksXG5cdHNTZWxlY3RPcHRpb246IGFueSxcblx0b01ldGFNb2RlbDogYW55LFxuXHRvQ29uZGl0aW9uczogYW55XG4pIHtcblx0bGV0IGFOYXZPYmplY3ROYW1lcyA9IHNTZWxlY3RPcHRpb24uc3BsaXQoXCIuXCIpO1xuXHQvLyBFZzogXCJTYWxlc09yZGVyTWFuYWdlLl9JdGVtLl9NYXRlcmlhbC5NYXRlcmlhbFwiIG9yIFwiX0l0ZW0uTWF0ZXJpYWxcIlxuXHRpZiAoKFwiL1wiICsgc1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIikpLnN0YXJ0c1dpdGgoc01haW5FbnRpdHlTZXRQYXRoKSkge1xuXHRcdGNvbnN0IHNGdWxsUGF0aCA9ICgoXCIvXCIgKyBzU2VsZWN0T3B0aW9uKSBhcyBhbnkpLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKSxcblx0XHRcdHNOYXZQYXRoID0gc0Z1bGxQYXRoLnJlcGxhY2Uoc01haW5FbnRpdHlTZXRQYXRoICsgXCIvXCIsIFwiXCIpO1xuXHRcdGFOYXZPYmplY3ROYW1lcyA9IHNOYXZQYXRoLnNwbGl0KFwiL1wiKTtcblx0fVxuXHRsZXQgc0NvbmRpdGlvblBhdGggPSBcIlwiO1xuXHRjb25zdCBzUHJvcGVydHlOYW1lID0gYU5hdk9iamVjdE5hbWVzW2FOYXZPYmplY3ROYW1lcy5sZW5ndGggLSAxXTsgLy8gTWF0ZXJpYWwgZnJvbSBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU5hdk9iamVjdE5hbWVzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdGlmIChvTWV0YU1vZGVsLmdldE9iamVjdChzTWFpbkVudGl0eVNldFBhdGggKyBcIi9cIiArIGFOYXZPYmplY3ROYW1lc1tpXS5yZXBsYWNlKFwiUF9cIiwgXCJcIikpLiRpc0NvbGxlY3Rpb24pIHtcblx0XHRcdHNDb25kaXRpb25QYXRoID0gc0NvbmRpdGlvblBhdGggKyBhTmF2T2JqZWN0TmFtZXNbaV0gKyBcIiovXCI7IC8vIF9JdGVtKi8gaW4gY2FzZSBvZiAxOm4gY2FyZGluYWxpdHlcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXSArIFwiL1wiOyAvLyBfSXRlbS8gaW4gY2FzZSBvZiAxOjEgY2FyZGluYWxpdHlcblx0XHR9XG5cdFx0c01haW5FbnRpdHlTZXRQYXRoID0gc01haW5FbnRpdHlTZXRQYXRoICsgXCIvXCIgKyBhTmF2T2JqZWN0TmFtZXNbaV07XG5cdH1cblx0Y29uc3Qgc05hdlByb3BlcnR5UGF0aCA9IHNGdWxsQ29udGV4dFBhdGguc2xpY2UoMCwgc0Z1bGxDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpLFxuXHRcdG9WYWxpZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc05hdlByb3BlcnR5UGF0aCksXG5cdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKTtcblx0bGV0IHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZTtcblx0aWYgKG9WYWxpZFByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWU7XG5cdH0gZWxzZSBpZiAoc1Byb3BlcnR5TmFtZS5zdGFydHNXaXRoKFwiUF9cIikgJiYgb1ZhbGlkUHJvcGVydGllc1tzUHJvcGVydHlOYW1lLnJlcGxhY2UoXCJQX1wiLCBcIlwiKV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWUucmVwbGFjZShcIlBfXCIsIFwiXCIpO1xuXHR9IGVsc2UgaWYgKG9WYWxpZFByb3BlcnRpZXNbXCJQX1wiICsgc1Byb3BlcnR5TmFtZV0gJiYgYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiUF9cIiArIHNQcm9wZXJ0eU5hbWUpKSB7XG5cdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIlBfXCIgKyBzUHJvcGVydHlOYW1lO1xuXHR9XG5cdGlmIChzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdC8vIGlmIHRoZXJlIGlzIG5vIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWwgeWV0IGluIHRoZSBvQ29uZGl0aW9uc1xuXHRcdHJldHVybjtcblx0fSBlbHNlIGlmICghc1Byb3BlcnR5TmFtZS5zdGFydHNXaXRoKFwiUF9cIikgJiYgb0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzU2VsZWN0T3B0aW9uTmFtZV0pIHtcblx0XHRkZWxldGUgb0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzU2VsZWN0T3B0aW9uTmFtZV07XG5cdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdHNOYXZQcm9wZXJ0eVBhdGgsXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHNTZWxlY3RPcHRpb24sXG5cdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdHNDb25kaXRpb25QYXRoLFxuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRvVmFsaWRQcm9wZXJ0aWVzLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHR9XG59XG5mdW5jdGlvbiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudDogYW55LCBtUGFnZUNvbnRleHQ6IGFueVtdLCBvVmlldzogYW55KSB7XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdHJldHVybiBvTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQobVBhZ2VDb250ZXh0LCBvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKSk7XG59XG5mdW5jdGlvbiBhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudDogYW55LCBtRmlsdGVyczogYW55LCBvVGFyZ2V0SW5mbzogYW55LCBvRmlsdGVySW5mbz86IGFueSkge1xuXHRsZXQgc0ZpbHRlcjogYW55LFxuXHRcdHNMb3cgPSBcIlwiLFxuXHRcdHNIaWdoID0gbnVsbDtcblx0Y29uc3QgZm5HZXRTaWduQW5kT3B0aW9uID0gZnVuY3Rpb24gKHNPcGVyYXRvcjogYW55LCBzTG93VmFsdWU6IGFueSwgc0hpZ2hWYWx1ZTogYW55KSB7XG5cdFx0Y29uc3Qgb1NlbGVjdE9wdGlvblN0YXRlID0ge1xuXHRcdFx0b3B0aW9uOiBcIlwiLFxuXHRcdFx0c2lnbjogXCJJXCIsXG5cdFx0XHRsb3c6IHNMb3dWYWx1ZSxcblx0XHRcdGhpZ2g6IHNIaWdoVmFsdWVcblx0XHR9O1xuXHRcdHN3aXRjaCAoc09wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiU3RhcnRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ICs9IFwiKlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbmRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCIqXCIgKyBvU2VsZWN0T3B0aW9uU3RhdGUubG93O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJCVFwiOlxuXHRcdFx0Y2FzZSBcIkxFXCI6XG5cdFx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdGNhc2UgXCJHVFwiOlxuXHRcdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IHNPcGVyYXRvcjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVE9EQVlcIjpcblx0XHRcdGNhc2UgXCJEQVRFXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVFUVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJFUVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJFUVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTm90Q29udGFpbnNcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UQlRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQlRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTm90U3RhcnRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ICs9IFwiKlwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbmRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCIqXCIgKyBvU2VsZWN0T3B0aW9uU3RhdGUubG93O1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJORVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTEVcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR0VcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR0VcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTFRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTFRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR1RcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR1RcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cud2FybmluZyhzT3BlcmF0b3IgKyBcIiBpcyBub3Qgc3VwcG9ydGVkLiBcIiArIHNGaWx0ZXIgKyBcIiBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIG5hdmlnYXRpb24gY29udGV4dFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TZWxlY3RPcHRpb25TdGF0ZTtcblx0fTtcblx0Y29uc3Qgb0ZpbHRlckNvbmRpdGlvbnMgPSBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zO1xuXHRjb25zdCBvRmlsdGVyc1dpdGhvdXRDb25mbGljdCA9IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3QgPyBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0IDoge307XG5cdGNvbnN0IG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ID8gb1RhcmdldEluZm8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA6IHt9O1xuXHRjb25zdCBhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50ID0gZnVuY3Rpb24gKG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIHNGaWx0ZXJOYW1lOiBhbnksIHNQYXRoPzogYW55KSB7XG5cdFx0Y29uc3QgYUZpbHRlcnMgPSBvRmlsdGVyQ29uZGl0aW9uc1tzRmlsdGVyTmFtZV07XG5cdFx0Zm9yIChjb25zdCBpdGVtIGluIGFGaWx0ZXJzKSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyID0gYUZpbHRlcnNbaXRlbV07XG5cdFx0XHRzTG93ID0gKG9GaWx0ZXIudmFsdWVzWzBdICYmIG9GaWx0ZXIudmFsdWVzWzBdLnRvU3RyaW5nKCkpIHx8IFwiXCI7XG5cdFx0XHRzSGlnaCA9IChvRmlsdGVyLnZhbHVlc1sxXSAmJiBvRmlsdGVyLnZhbHVlc1sxXS50b1N0cmluZygpKSB8fCBudWxsO1xuXHRcdFx0aWYgKG9GaWx0ZXIub3BlcmF0b3IgPT09IFwiVE9EQVlcIiB8fCBvRmlsdGVyLm9wZXJhdG9yID09PSBcIkRBVEVcIikge1xuXHRcdFx0XHRjb25zdCBhRmlsdGVyID0gb0ZpbHRlckluZm9bMF0uYUZpbHRlcnMuZmlsdGVyKGZ1bmN0aW9uIChvRmlsdGVyOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0ZpbHRlci5zUGF0aCA9PT0gc0ZpbHRlck5hbWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzTG93ID0gYUZpbHRlclswXS5vVmFsdWUxIHx8IFwiXCI7XG5cdFx0XHRcdHNIaWdoID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9TZWxlY3RPcHRpb25WYWx1ZXMgPSBmbkdldFNpZ25BbmRPcHRpb24ob0ZpbHRlci5vcGVyYXRvciwgc0xvdywgc0hpZ2gpO1xuXHRcdFx0aWYgKG9TZWxlY3RPcHRpb25WYWx1ZXMub3B0aW9uKSB7XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihcblx0XHRcdFx0XHRzUGF0aCA/IHNQYXRoIDogc0ZpbHRlck5hbWUsXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5zaWduLFxuXHRcdFx0XHRcdG9TZWxlY3RPcHRpb25WYWx1ZXMub3B0aW9uLFxuXHRcdFx0XHRcdG9TZWxlY3RPcHRpb25WYWx1ZXMubG93LFxuXHRcdFx0XHRcdG9TZWxlY3RPcHRpb25WYWx1ZXMuaGlnaFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRmb3IgKHNGaWx0ZXIgaW4gb0ZpbHRlckNvbmRpdGlvbnMpIHtcblx0XHQvLyBvbmx5IGFkZCB0aGUgZmlsdGVyIHZhbHVlcyBpZiBpdCBpcyBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBTViBhbHJlYWR5XG5cdFx0aWYgKCFvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc0ZpbHRlcikpIHtcblx0XHRcdC8vIFRPRE8gOiBjdXN0b20gZmlsdGVycyBzaG91bGQgYmUgaWdub3JlZCBtb3JlIGdlbmVyaWNhbGx5XG5cdFx0XHRpZiAoc0ZpbHRlciA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LCBzRmlsdGVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgJiYgc0ZpbHRlciBpbiBvVGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0KSB7XG5cdFx0XHRcdGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXIsIG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc0ZpbHRlcl0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaWYgcHJvcGVydHkgd2FzIHdpdGhvdXQgY29uZmxpY3QgaW4gcGFnZSBjb250ZXh0IHRoZW4gYWRkIHBhdGggZnJvbSBwYWdlIGNvbnRleHQgdG8gU1Zcblx0XHRcdGlmIChzRmlsdGVyIGluIG9GaWx0ZXJzV2l0aG91dENvbmZsaWN0KSB7XG5cdFx0XHRcdGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXIsIG9GaWx0ZXJzV2l0aG91dENvbmZsaWN0W3NGaWx0ZXJdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xufVxuZnVuY3Rpb24gaXNTdGlja3lFZGl0TW9kZShvQ29udHJvbDogQ29udHJvbCkge1xuXHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQ29udHJvbC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0Y29uc3QgYlVJRWRpdGFibGUgPSBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdHJldHVybiBiSXNTdGlja3lNb2RlICYmIGJVSUVkaXRhYmxlO1xufVxuLyoqXG4gKiBAcGFyYW0gYU1hbmRhdG9yeUZpbHRlckZpZWxkc1xuICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50XG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0c1xuICovXG5mdW5jdGlvbiBhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5KGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM6IGFueVtdLCBvU2VsZWN0aW9uVmFyaWFudDogYW55LCBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzOiBhbnkpIHtcblx0aWYgKG9TZWxlY3Rpb25WYXJpYW50ICYmIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgJiYgYU1hbmRhdG9yeUZpbHRlckZpZWxkcy5sZW5ndGgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGFTVk9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiKSxcblx0XHRcdFx0YURlZmF1bHRTVk9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgJiYgb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIik7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHNbaV0uJFByb3BlcnR5UGF0aCA9PT0gXCJEaXNwbGF5Q3VycmVuY3lcIiAmJlxuXHRcdFx0XHQoIWFTVk9wdGlvbiB8fCAhYVNWT3B0aW9uLmxlbmd0aCkgJiZcblx0XHRcdFx0YURlZmF1bHRTVk9wdGlvbiAmJlxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uLmxlbmd0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGFEZWZhdWx0U1ZPcHRpb25bMF07XG5cdFx0XHRcdGNvbnN0IHNTaWduID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiU2lnblwiXTtcblx0XHRcdFx0Y29uc3Qgc09wdGlvbiA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIk9wdGlvblwiXTtcblx0XHRcdFx0Y29uc3Qgc0xvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXTtcblx0XHRcdFx0Y29uc3Qgc0hpZ2ggPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJIaWdoXCJdO1xuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5hZGRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIiwgc1NpZ24sIHNPcHRpb24sIHNMb3csIHNIaWdoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbmZ1bmN0aW9uIGdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc1BhdGg6IGFueSwgb1ZpZXc/OiBhbnkpIHtcblx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzUGF0aCArIFwiL1wiKS4kS2V5O1xuXHRjb25zdCBhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzID0gW107XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIi9cIik7XG5cdGZvciAoY29uc3QgaXRlbSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChvRW50aXR5VHlwZVtpdGVtXS4ka2luZCAmJiBvRW50aXR5VHlwZVtpdGVtXS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0XHRjb25zdCBvQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzUGF0aCArIFwiL1wiICsgaXRlbSArIFwiQFwiKSB8fCB7fSxcblx0XHRcdFx0YklzS2V5ID0gYVRlY2huaWNhbEtleXMuaW5kZXhPZihpdGVtKSA+IC0xLFxuXHRcdFx0XHRiSXNJbW11dGFibGUgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdLFxuXHRcdFx0XHRiSXNOb25Db21wdXRlZCA9ICFvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0sXG5cdFx0XHRcdGJJc1Zpc2libGUgPSAhb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSxcblx0XHRcdFx0YklzQ29tcHV0ZWREZWZhdWx0VmFsdWUgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWREZWZhdWx0VmFsdWVcIl0sXG5cdFx0XHRcdGJJc0tleUNvbXB1dGVkRGVmYXVsdFZhbHVlV2l0aFRleHQgPVxuXHRcdFx0XHRcdGJJc0tleSAmJiBvRW50aXR5VHlwZVtpdGVtXS4kVHlwZSA9PT0gXCJFZG0uR3VpZFwiXG5cdFx0XHRcdFx0XHQ/IGJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlICYmIG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXVxuXHRcdFx0XHRcdFx0OiBmYWxzZTtcblx0XHRcdGlmIChcblx0XHRcdFx0KGJJc0ltbXV0YWJsZSB8fCBiSXNLZXlDb21wdXRlZERlZmF1bHRWYWx1ZVdpdGhUZXh0IHx8IChiSXNLZXkgJiYgb0VudGl0eVR5cGVbaXRlbV0uJFR5cGUgIT09IFwiRWRtLkd1aWRcIikpICYmXG5cdFx0XHRcdGJJc05vbkNvbXB1dGVkICYmXG5cdFx0XHRcdGJJc1Zpc2libGVcblx0XHRcdCkge1xuXHRcdFx0XHRhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzLnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghYklzTm9uQ29tcHV0ZWQgJiYgYklzQ29tcHV0ZWREZWZhdWx0VmFsdWUgJiYgb1ZpZXcpIHtcblx0XHRcdFx0Y29uc3Qgb0RpYWdub3N0aWNzID0gZ2V0QXBwQ29tcG9uZW50KG9WaWV3KS5nZXREaWFnbm9zdGljcygpO1xuXHRcdFx0XHRjb25zdCBzTWVzc2FnZSA9IFwiQ29yZS5Db21wdXRlZERlZmF1bHRWYWx1ZSBpcyBpZ25vcmVkIGFzIENvcmUuQ29tcHV0ZWQgaXMgYWxyZWFkeSBzZXQgdG8gdHJ1ZVwiO1xuXHRcdFx0XHRvRGlhZ25vc3RpY3MuYWRkSXNzdWUoXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRcdElzc3VlU2V2ZXJpdHkuTWVkaXVtLFxuXHRcdFx0XHRcdHNNZXNzYWdlLFxuXHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlLFxuXHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlPy5Bbm5vdGF0aW9ucz8uSWdub3JlZEFubm90YXRpb25cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGFOb25Db21wdXRlZFZpc2libGVGaWVsZHM7XG59XG5mdW5jdGlvbiBzZXRVc2VyRGVmYXVsdHMoXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0YVBhcmFtZXRlcnM6IGFueVtdLFxuXHRvTW9kZWw6IEpTT05Nb2RlbCxcblx0YklzQWN0aW9uOiBib29sZWFuLFxuXHRiSXNDcmVhdGU/OiBib29sZWFuLFxuXHRvQWN0aW9uRGVmYXVsdFZhbHVlcz86IGFueVxuKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IG9BcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpLFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSxcblx0XHRcdG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0aWYgKCFvU2hlbGxTZXJ2aWNlcy5oYXNVU2hlbGwoKSkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogYW55KSB7XG5cdFx0XHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBiSXNBY3Rpb25cblx0XHRcdFx0XHQ/IFwiL1wiICsgb1BhcmFtZXRlci4kTmFtZVxuXHRcdFx0XHRcdDogb1BhcmFtZXRlci5nZXRQYXRoKCkuc2xpY2Uob1BhcmFtZXRlci5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gYklzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlcyAmJiBiSXNDcmVhdGUpIHtcblx0XHRcdFx0XHRpZiAob0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2VzLmdldFN0YXJ0dXBBcHBTdGF0ZShvQXBwQ29tcG9uZW50KS50aGVuKGZ1bmN0aW9uIChvU3RhcnR1cEFwcFN0YXRlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EYXRhID0gb1N0YXJ0dXBBcHBTdGF0ZS5nZXREYXRhKCkgfHwge30sXG5cdFx0XHRcdGFFeHRlbmRlZFBhcmFtZXRlcnMgPSAob0RhdGEuc2VsZWN0aW9uVmFyaWFudCAmJiBvRGF0YS5zZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMpIHx8IFtdO1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogYW55KSB7XG5cdFx0XHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBiSXNBY3Rpb25cblx0XHRcdFx0XHQ/IFwiL1wiICsgb1BhcmFtZXRlci4kTmFtZVxuXHRcdFx0XHRcdDogb1BhcmFtZXRlci5nZXRQYXRoKCkuc2xpY2Uob1BhcmFtZXRlci5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gYklzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlcyAmJiBiSXNDcmVhdGUpIHtcblx0XHRcdFx0XHRpZiAob0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhRXh0ZW5kZWRQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUV4dGVuZGVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0V4dGVuZGVkUGFyYW1ldGVyID0gYUV4dGVuZGVkUGFyYW1ldGVyc1tpXTtcblx0XHRcdFx0XHRcdGlmIChvRXh0ZW5kZWRQYXJhbWV0ZXIuUHJvcGVydHlOYW1lID09PSBzUGFyYW1ldGVyTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvUmFuZ2UgPSBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdD8gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlc1tvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aCAtIDFdXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdGlmIChvUmFuZ2UgJiYgb1JhbmdlLlNpZ24gPT09IFwiSVwiICYmIG9SYW5nZS5PcHRpb24gPT09IFwiRVFcIikge1xuXHRcdFx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvUmFuZ2UuTG93KTsgLy8gaGlnaCBpcyBpZ25vcmVkIHdoZW4gT3B0aW9uPUVRXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc29sdmUodHJ1ZSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSwgb0luYm91bmRQYXJhbWV0ZXJzOiBhbnkpIHtcblx0Y29uc3Qgb0luYm91bmRzID0gb0luYm91bmRQYXJhbWV0ZXJzLFxuXHRcdGFDcmVhdGVQYXJhbWV0ZXJzID0gb0luYm91bmRzXG5cdFx0XHQ/IE9iamVjdC5rZXlzKG9JbmJvdW5kcykuZmlsdGVyKGZ1bmN0aW9uIChzUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0luYm91bmRzW3NQYXJhbWV0ZXJdLnVzZUZvckNyZWF0ZTtcblx0XHRcdCAgfSlcblx0XHRcdDogW107XG5cdGxldCBvUmV0O1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFDcmVhdGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0NyZWF0ZVBhcmFtZXRlciA9IGFDcmVhdGVQYXJhbWV0ZXJzW2ldO1xuXHRcdGNvbnN0IGFWYWx1ZXMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzW3NDcmVhdGVQYXJhbWV0ZXJdO1xuXHRcdGlmIChhVmFsdWVzICYmIGFWYWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRvUmV0ID0gb1JldCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRcdFx0b1JldFtzQ3JlYXRlUGFyYW1ldGVyXSA9IGFWYWx1ZXNbMF07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUmV0O1xufVxuZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9PdXRib3VuZDogYW55KSB7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmc6IGFueVtdID0gW107XG5cdGlmIChvT3V0Ym91bmQucGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob091dGJvdW5kLnBhcmFtZXRlcnMpIHx8IFtdO1xuXHRcdGlmIChhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzUGFyYW06IHN0cmluZykge1xuXHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IG9PdXRib3VuZC5wYXJhbWV0ZXJzW3NQYXJhbV07XG5cdFx0XHRcdGlmIChvTWFwcGluZy52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS5mb3JtYXQgPT09IFwiYmluZGluZ1wiKSB7XG5cdFx0XHRcdFx0Ly8gdXNpbmcgdGhlIGZvcm1hdCBvZiBVSS5NYXBwaW5nXG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdFx0XHRcdFwiTG9jYWxQcm9wZXJ0eVwiOiB7XG5cdFx0XHRcdFx0XHRcdFwiJFByb3BlcnR5UGF0aFwiOiBvTWFwcGluZy52YWx1ZS52YWx1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiOiBzUGFyYW1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0aWYgKGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gVG8gY2hlY2sgaWYgdGhlIHNlbWFudGljT2JqZWN0IE1hcHBpbmcgaXMgZG9uZSBmb3IgdGhlIHNhbWUgbG9jYWwgcHJvcGVydHkgbW9yZSB0aGF0IG9uY2UgdGhlbiBmaXJzdCBvbmUgd2lsbCBiZSBjb25zaWRlcmVkXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmdbaV1bXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXSAhPT1cblx0XHRcdFx0XHRcdFx0XHRvU2VtYW50aWNNYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl1cblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVNlbWFudGljT2JqZWN0TWFwcGluZztcbn1cbmZ1bmN0aW9uIGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihvVmlld0RhdGE6IGFueSwgb0Nyb3NzTmF2OiBhbnkpIHtcblx0Y29uc3Qgb0hlYWRlckZhY2V0SXRlbXM6IGFueSA9IHt9O1xuXHRsZXQgc0lkO1xuXHRjb25zdCBvQ29udHJvbENvbmZpZyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbjtcblx0Zm9yIChjb25zdCBjb25maWcgaW4gb0NvbnRyb2xDb25maWcpIHtcblx0XHRpZiAoY29uZmlnLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID4gLTEgfHwgY29uZmlnLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikgPiAtMSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24gJiZcblx0XHRcdFx0b0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uLnRhcmdldE91dGJvdW5kICYmXG5cdFx0XHRcdG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbi50YXJnZXRPdXRib3VuZC5vdXRib3VuZFxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IHNPdXRib3VuZCA9IG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbi50YXJnZXRPdXRib3VuZC5vdXRib3VuZDtcblx0XHRcdFx0Y29uc3Qgb091dGJvdW5kID0gb0Nyb3NzTmF2W3NPdXRib3VuZF07XG5cdFx0XHRcdGlmIChvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QgJiYgb091dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChjb25maWcuaW5kZXhPZihcIkNoYXJ0XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNJZCA9IGdlbmVyYXRlKFtcImZlXCIsIFwiTWljcm9DaGFydExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNJZCA9IGdlbmVyYXRlKFtcImZlXCIsIFwiSGVhZGVyRFBMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9PdXRib3VuZCk7XG5cdFx0XHRcdFx0b0hlYWRlckZhY2V0SXRlbXNbc0lkXSA9IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IG9PdXRib3VuZC5hY3Rpb24sXG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmdcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNyb3NzIG5hdmlnYXRpb24gb3V0Ym91bmQgaXMgY29uZmlndXJlZCB3aXRob3V0IHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciBcIiArIHNPdXRib3VuZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9IZWFkZXJGYWNldEl0ZW1zO1xufVxuZnVuY3Rpb24gc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyhvU2VsZWN0aW9uVmFyaWFudDogYW55LCB2TWFwcGluZ3M6IG9iamVjdCkge1xuXHRjb25zdCBvTWFwcGluZ3MgPSB0eXBlb2Ygdk1hcHBpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2TWFwcGluZ3MpIDogdk1hcHBpbmdzO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IG9NYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID1cblx0XHRcdChvTWFwcGluZ3NbaV1bXCJMb2NhbFByb3BlcnR5XCJdICYmIG9NYXBwaW5nc1tpXVtcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdKSB8fFxuXHRcdFx0KG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJlxuXHRcdFx0XHRvTWFwcGluZ3NbaV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl1bXCIkUGF0aFwiXSk7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPVxuXHRcdFx0b01hcHBpbmdzW2ldW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSB8fCBvTWFwcGluZ3NbaV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0aWYgKG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSkpIHtcblx0XHRcdGNvbnN0IG9TZWxlY3RPcHRpb24gPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXG5cdFx0XHQvL0NyZWF0ZSBhIG5ldyBTZWxlY3RPcHRpb24gd2l0aCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSBhcyB0aGUgcHJvcGVydHkgTmFtZSBhbmQgcmVtb3ZlIHRoZSBvbGRlciBvbmVcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKHNTZW1hbnRpY09iamVjdFByb3BlcnR5LCBvU2VsZWN0T3B0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xufVxuZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBhbnkpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0XCIpO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0c1BhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcIlxuXHRcdCk7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MgPSBbeyBzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0IH1dO1xuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdCA9IHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3Rcblx0XHR9O1xuXHRcdHJlc29sdmUoe1xuXHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzUGF0aCxcblx0XHRcdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzLFxuXHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG5cdFx0fSk7XG5cdH0pLmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdExvZy5lcnJvcihcIkVycm9yIGluIGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGhcIiwgb0Vycm9yKTtcblx0fSk7XG59XG5mdW5jdGlvbiBmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsKGFHZXRMaW5rc1Byb21pc2VzOiBhbnksIGFTZW1hbnRpY09iamVjdHM6IGFueSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIHNDdXJyZW50SGFzaDogYW55KSB7XG5cdHJldHVybiBQcm9taXNlLmFsbChhR2V0TGlua3NQcm9taXNlcylcblx0XHQudGhlbihmdW5jdGlvbiAoYVZhbHVlczogYW55W10pIHtcblx0XHRcdGxldCBhTGlua3MsXG5cdFx0XHRcdF9vTGluayxcblx0XHRcdFx0X3NMaW5rSW50ZW50QWN0aW9uLFxuXHRcdFx0XHRhRmluYWxMaW5rczogYW55W10gPSBbXTtcblx0XHRcdGxldCBvRmluYWxTZW1hbnRpY09iamVjdHM6IGFueSA9IHt9O1xuXHRcdFx0Y29uc3QgYkludGVudEhhc0FjdGlvbnMgPSBmdW5jdGlvbiAoc0ludGVudDogYW55LCBhQWN0aW9uczogYW55KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaW50ZW50IGluIGFBY3Rpb25zKSB7XG5cdFx0XHRcdFx0aWYgKGludGVudCA9PT0gc0ludGVudCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgYVZhbHVlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRhTGlua3MgPSBhVmFsdWVzW2tdO1xuXHRcdFx0XHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwICYmIGFMaW5rc1swXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0OiBhbnkgPSB7fTtcblx0XHRcdFx0XHRsZXQgb1RtcCA9IHt9O1xuXHRcdFx0XHRcdGxldCBzQWx0ZXJuYXRlUGF0aDtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0YUZpbmFsTGlua3MucHVzaChbXSk7XG5cdFx0XHRcdFx0XHRsZXQgaGFzVGFyZ2V0c05vdEZpbHRlcmVkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRsZXQgaGFzVGFyZ2V0cyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaUxpbmtDb3VudCA9IDA7IGlMaW5rQ291bnQgPCBhTGlua3NbaV1bMF0ubGVuZ3RoOyBpTGlua0NvdW50KyspIHtcblx0XHRcdFx0XHRcdFx0X29MaW5rID0gYUxpbmtzW2ldWzBdW2lMaW5rQ291bnRdO1xuXHRcdFx0XHRcdFx0XHRfc0xpbmtJbnRlbnRBY3Rpb24gPSBfb0xpbmsgJiYgX29MaW5rLmludGVudC5zcGxpdChcIj9cIilbMF0uc3BsaXQoXCItXCIpWzFdO1xuXG5cdFx0XHRcdFx0XHRcdGlmICghKF9vTGluayAmJiBfb0xpbmsuaW50ZW50ICYmIF9vTGluay5pbnRlbnQuaW5kZXhPZihzQ3VycmVudEhhc2gpID09PSAwKSkge1xuXHRcdFx0XHRcdFx0XHRcdGhhc1RhcmdldHNOb3RGaWx0ZXJlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFiSW50ZW50SGFzQWN0aW9ucyhfc0xpbmtJbnRlbnRBY3Rpb24sIGFTZW1hbnRpY09iamVjdHNba10udW5hdmFpbGFibGVBY3Rpb25zKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0YUZpbmFsTGlua3NbaV0ucHVzaChfb0xpbmspO1xuXHRcdFx0XHRcdFx0XHRcdFx0aGFzVGFyZ2V0cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvVG1wID0ge1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0cGF0aDogYVNlbWFudGljT2JqZWN0c1trXS5wYXRoLFxuXHRcdFx0XHRcdFx0XHRIYXNUYXJnZXRzOiBoYXNUYXJnZXRzLFxuXHRcdFx0XHRcdFx0XHRIYXNUYXJnZXRzTm90RmlsdGVyZWQ6IGhhc1RhcmdldHNOb3RGaWx0ZXJlZFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF0gPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHNBbHRlcm5hdGVQYXRoID0gYVNlbWFudGljT2JqZWN0c1trXS5wYXRoLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XG5cdFx0XHRcdFx0XHRpZiAob1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdLFxuXHRcdFx0XHRcdFx0XHRvVG1wXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3ROYW1lID0gT2JqZWN0LmtleXMob1NlbWFudGljT2JqZWN0KVswXTtcblx0XHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob0ZpbmFsU2VtYW50aWNPYmplY3RzKS5pbmNsdWRlcyhzU2VtYW50aWNPYmplY3ROYW1lKSkge1xuXHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzW3NTZW1hbnRpY09iamVjdE5hbWVdID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzW3NTZW1hbnRpY09iamVjdE5hbWVdLFxuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3Rbc1NlbWFudGljT2JqZWN0TmFtZV1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9GaW5hbFNlbWFudGljT2JqZWN0cyA9IE9iamVjdC5hc3NpZ24ob0ZpbmFsU2VtYW50aWNPYmplY3RzLCBvU2VtYW50aWNPYmplY3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhRmluYWxMaW5rcyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMob0ZpbmFsU2VtYW50aWNPYmplY3RzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcInNlbWFudGljc1RhcmdldHNcIixcblx0XHRcdFx0XHRtZXJnZU9iamVjdHMob0ZpbmFsU2VtYW50aWNPYmplY3RzLCBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZW1hbnRpY3NUYXJnZXRzXCIpKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gb0ZpbmFsU2VtYW50aWNPYmplY3RzO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbDogQ2Fubm90IHJlYWQgbGlua3NcIiwgb0Vycm9yKTtcblx0XHR9KTtcbn1cbmZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlKG9BcHBDb21wb25lbnQ6IGFueSwgb1ZpZXc6IGFueSwgb01ldGFNb2RlbDogYW55LCBzUGF0aDogYW55KSB7XG5cdHJldHVybiBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChvTWV0YU1vZGVsLCBzUGF0aCk7XG59XG5mdW5jdGlvbiBmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwob0NvbnRyb2xsZXI6IGFueSwgc1BhZ2VNb2RlbDogc3RyaW5nKSB7XG5cdGNvbnN0IF9mbmZpbmRWYWx1ZXNIZWxwZXIgPSBmdW5jdGlvbiAob2JqOiBhbnksIGtleTogYW55LCBsaXN0OiBhbnkpIHtcblx0XHRpZiAoIW9iaikge1xuXHRcdFx0cmV0dXJuIGxpc3Q7XG5cdFx0fVxuXHRcdGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkge1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIG9iaikge1xuXHRcdFx0XHRsaXN0ID0gbGlzdC5jb25jYXQoX2ZuZmluZFZhbHVlc0hlbHBlcihvYmpbaV0sIGtleSwgW10pKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsaXN0O1xuXHRcdH1cblx0XHRpZiAob2JqW2tleV0pIHtcblx0XHRcdGxpc3QucHVzaChvYmpba2V5XSk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBvYmogPT0gXCJvYmplY3RcIiAmJiBvYmogIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LmtleXMob2JqKTtcblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRsaXN0ID0gbGlzdC5jb25jYXQoX2ZuZmluZFZhbHVlc0hlbHBlcihvYmpbY2hpbGRyZW5baV1dLCBrZXksIFtdKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH07XG5cdGNvbnN0IF9mbmZpbmRWYWx1ZXMgPSBmdW5jdGlvbiAob2JqOiBhbnksIGtleTogYW55KSB7XG5cdFx0cmV0dXJuIF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqLCBrZXksIFtdKTtcblx0fTtcblx0Y29uc3QgX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzID0gZnVuY3Rpb24gKGFTZW1hbnRpY09iamVjdFBhdGg6IGFueSkge1xuXHRcdHJldHVybiBhU2VtYW50aWNPYmplY3RQYXRoLmZpbHRlcihmdW5jdGlvbiAodmFsdWU6IGFueSwgaW5kZXg6IGFueSkge1xuXHRcdFx0cmV0dXJuIGFTZW1hbnRpY09iamVjdFBhdGguaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4O1xuXHRcdH0pO1xuXHR9O1xuXHRjb25zdCBvVmlldyA9IG9Db250cm9sbGVyLmdldFZpZXcoKTtcblx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblxuXHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0c1Byb21pc2VzID0gW107XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250cm9sbGVyLmdldE93bmVyQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29tcG9uZW50KSBhcyBBcHBDb21wb25lbnQ7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IG9QYWdlTW9kZWwgPSBvQ29tcG9uZW50LmdldE1vZGVsKHNQYWdlTW9kZWwpLmdldERhdGEoKTtcblx0XHRpZiAoSlNPTi5zdHJpbmdpZnkob1BhZ2VNb2RlbCkgPT09IFwie31cIikge1xuXHRcdFx0b1BhZ2VNb2RlbCA9IG9Db21wb25lbnQuZ2V0TW9kZWwoc1BhZ2VNb2RlbCkuX2dldE9iamVjdChcIi9cIiwgdW5kZWZpbmVkKTtcblx0XHR9XG5cdFx0bGV0IGFTZW1hbnRpY09iamVjdHNGb3VuZCA9IF9mbmZpbmRWYWx1ZXMob1BhZ2VNb2RlbCwgXCJzZW1hbnRpY09iamVjdFBhdGhcIik7XG5cdFx0YVNlbWFudGljT2JqZWN0c0ZvdW5kID0gX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzKGFTZW1hbnRpY09iamVjdHNGb3VuZCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZUhlbHBlciA9IENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob0FwcENvbXBvbmVudCk7XG5cdFx0bGV0IHNDdXJyZW50SGFzaCA9IENvbW1vblV0aWxzLmdldEhhc2goKTtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzRm9yR2V0TGlua3MgPSBbXTtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzOiBhbnlbXSA9IFtdO1xuXHRcdGxldCBzUGF0aDtcblx0XHRsZXQgX29TZW1hbnRpY09iamVjdDtcblxuXHRcdGlmIChzQ3VycmVudEhhc2ggJiYgc0N1cnJlbnRIYXNoLmluZGV4T2YoXCI/XCIpICE9PSAtMSkge1xuXHRcdFx0Ly8gc0N1cnJlbnRIYXNoIGNhbiBjb250YWluIHF1ZXJ5IHN0cmluZywgY3V0IGl0IG9mZiFcblx0XHRcdHNDdXJyZW50SGFzaCA9IHNDdXJyZW50SGFzaC5zcGxpdChcIj9cIilbMF07XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VtYW50aWNPYmplY3RzRm91bmQubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNQYXRoID0gYVNlbWFudGljT2JqZWN0c0ZvdW5kW2ldO1xuXHRcdFx0YVNlbWFudGljT2JqZWN0c1Byb21pc2VzLnB1c2goQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RQcm9taXNlKG9BcHBDb21wb25lbnQsIG9WaWV3LCBvTWV0YU1vZGVsLCBzUGF0aCkpO1xuXHRcdH1cblxuXHRcdGlmIChhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFByb21pc2UuYWxsKGFTZW1hbnRpY09iamVjdHNQcm9taXNlcylcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFWYWx1ZXM6IGFueVtdKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUdldExpbmtzUHJvbWlzZXMgPSBbXTtcblx0XHRcdFx0XHRsZXQgc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkID0gYVZhbHVlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbWVudC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCA9PT0gXCJvYmplY3RcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHNTZW1PYmpFeHByZXNzaW9uID0gY29tcGlsZUJpbmRpbmcoYmluZGluZ0V4cHJlc3Npb24oZWxlbWVudC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC4kUGF0aCkpO1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ID0gc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3RGb3JHZXRMaW5rc1swXS5zZW1hbnRpY09iamVjdCA9IHNTZW1PYmpFeHByZXNzaW9uO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudC5zZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRfb1NlbWFudGljT2JqZWN0ID0gYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkW2pdO1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRfb1NlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0IShfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LmluZGV4T2YoXCJ7XCIpID09PSAwKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcy5wdXNoKF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyk7XG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdHMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBfb1NlbWFudGljT2JqZWN0LnVuYXZhaWxhYmxlQWN0aW9ucyxcblx0XHRcdFx0XHRcdFx0XHRwYXRoOiBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRbal0uc2VtYW50aWNPYmplY3RQYXRoXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRhR2V0TGlua3NQcm9taXNlcy5wdXNoKG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3NXaXRoQ2FjaGUoW19vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3RGb3JHZXRMaW5rc10pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVNlbWFudGljVGFyZ2V0cyhhR2V0TGlua3NQcm9taXNlcywgYVNlbWFudGljT2JqZWN0cywgb0ludGVybmFsTW9kZWxDb250ZXh0LCBzQ3VycmVudEhhc2gpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tVGFibGU6IENhbm5vdCBnZXQgU2VtYW50aWMgT2JqZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IGFueSwgc1Jlc3RyaWN0aW9uOiBhbnkpIHtcblx0Y29uc3QgRmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRpZiAoc1Jlc3RyaWN0aW9uID09PSBGaWx0ZXJSZXN0cmljdGlvbnMuUkVRVUlSRURfUFJPUEVSVElFUyB8fCBzUmVzdHJpY3Rpb24gPT09IEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB7XG5cdFx0bGV0IGFQcm9wcyA9IFtdO1xuXHRcdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0XHRhUHJvcHMgPSBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dLm1hcChmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcHM7XG5cdH0gZWxzZSBpZiAoc1Jlc3RyaWN0aW9uID09PSBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykge1xuXHRcdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IGFueSA9IHt9O1xuXHRcdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdKSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSA9IFtvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xuXHR9XG5cdC8vIERlZmF1bHQgcmV0dXJuIHRoZSBGaWx0ZXJSZXN0cmljdGlvbnMgQW5ub3RhdGlvblxuXHRyZXR1cm4gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb247XG59XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0VudGl0eVNldFBhdGg6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdGNvbnN0IG9SZXQ6IGFueSA9IHt9LFxuXHRcdEZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLkZpbHRlclJlc3RyaWN0aW9ucyxcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zID0gc0VudGl0eVNldFBhdGggPyBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCIpIDoge307XG5cdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVNdID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5SRVFVSVJFRF9QUk9QRVJUSUVTKSB8fCBbXTtcblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFU10gPVxuXHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUykgfHwgW107XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OU10gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlMpIHx8IHt9O1xuXG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cblx0aWYgKGFQYXRoUGFydHMubGVuZ3RoID4gMikge1xuXHRcdC8vIEluIG5vcm1hbCBmaWx0ZXJiYXIgc2NlbmFyaW9zIHNFbnRpdHlTZXRQYXRoIGlzIG9mIHRoZSBmb3JtYXQgXCIvQ3VzdG9tZXJcIi5cblx0XHQvLyBCdXQsIEluIGNhc2Ugb2Ygc0VudGl0eVNldFBhdGggb2YgZm9ybWF0IFwiL0N1c3RvbWVyL1NldFwiIHRoaXMgaXMgdG8gY2hlY2sgbmF2aWdhdGlvbiByZXN0cmljdGlvbnMgb2YgXCJDdXN0b21lclwiIGZvciBub24tZmlsdGVyYWJsZSBwcm9wZXJ0aWVzIGluIFwiU2V0XCJcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpOyAvLyByZW1vdmluZyBOYXZpZ2F0aW9uUHJvcGVydHkgZnJvbSB0aGUgZW5kLlxuXHRcdGNvbnN0IHNQYXJlbnRFbnRpdHlTZXRQYXRoID0gYVBhdGhQYXJ0cy5qb2luKFwiL1wiKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01ldGFNb2RlbCwgc1BhcmVudEVudGl0eVNldFBhdGgsIHNOYXZpZ2F0aW9uUGF0aCk7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9uc1tcIkZpbHRlclJlc3RyaWN0aW9uc1wiXTtcblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5SRVFVSVJFRF9QUk9QRVJUSUVTXS5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5SRVFVSVJFRF9QUk9QRVJUSUVTKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFU10uY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUykgfHwgW11cblx0XHQpO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXSA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykgfHwge30sXG5cdFx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gb1JldDtcbn1cbmZ1bmN0aW9uIHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWU6IGFueSwgb1ByZXByb2Nlc3NvclNldHRpbmdzOiBhbnksIG9PcHRpb25zOiBhbnksIG9Nb2RpZmllcj86IGFueSkge1xuXHRvT3B0aW9ucyA9IG9PcHRpb25zIHx8IHt9O1xuXHRpZiAob01vZGlmaWVyKSB7XG5cdFx0cmV0dXJuIG9Nb2RpZmllci50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIG9PcHRpb25zLnZpZXcpLnRoZW4oZnVuY3Rpb24gKG9GcmFnbWVudDogYW55KSB7XG5cdFx0XHQvLyBUaGlzIGlzIHJlcXVpcmVkIGFzIEZsZXggcmV0dXJucyBhbiBIVE1MQ29sbGVjdGlvbiBhcyB0ZW1wbGF0aW5nIHJlc3VsdCBpbiBYTUwgdGltZS5cblx0XHRcdHJldHVybiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCIgJiYgb0ZyYWdtZW50Lmxlbmd0aCA+IDAgPyBvRnJhZ21lbnRbMF0gOiBvRnJhZ21lbnQ7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGxvYWRNYWNyb0xpYnJhcnkoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdFx0WE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIiksXG5cdFx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9GcmFnbWVudDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gb0ZyYWdtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHRpZiAoISFvT3B0aW9ucy5pc1hNTCAmJiBvQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBvQ29udHJvbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdFx0aWQ6IG9PcHRpb25zLmlkLFxuXHRcdFx0XHRcdGRlZmluaXRpb246IG9GcmFnbWVudCxcblx0XHRcdFx0XHRjb250cm9sbGVyOiBvT3B0aW9ucy5jb250cm9sbGVyXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFNpbmdsZXRvblBhdGgocGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCksXG5cdFx0bmF2aWdhdGlvblBhdGggPSBwYXJ0cy5qb2luKFwiL1wiKSxcblx0XHRlbnRpdHlTZXQgPSBuYXZpZ2F0aW9uUGF0aCAmJiBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiICsgbmF2aWdhdGlvblBhdGgpO1xuXHRpZiAoZW50aXR5U2V0Py4ka2luZCA9PT0gXCJTaW5nbGV0b25cIikge1xuXHRcdGNvbnN0IHNpbmdsZXRvbk5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRyZXR1cm4gXCIvXCIgKyBzaW5nbGV0b25OYW1lICsgXCIvXCIgKyBwcm9wZXJ0eU5hbWU7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShwYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsKSB7XG5cdGlmICghcGF0aCB8fCAhbW9kZWwpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHR9XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHQvLyBGaW5kIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzZXQgZnJvbSB0aGUgcHJvcGVydHkgcGF0aCBhbmQgY2hlY2sgd2hldGhlciBpdCBpcyBhIHNpbmdsZXRvbi5cblx0Y29uc3QgcmVzb2x2ZWRQYXRoID0gZ2V0U2luZ2xldG9uUGF0aChwYXRoLCBtZXRhTW9kZWwpO1xuXHRpZiAocmVzb2x2ZWRQYXRoKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHJlc29sdmVkUGF0aCk7XG5cdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZy5yZXF1ZXN0VmFsdWUoKTtcblx0fVxuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG59XG5mdW5jdGlvbiBhZGRFdmVudFRvQmluZGluZ0luZm8ob0NvbnRyb2w6IENvbnRyb2wsIHNFdmVudE5hbWU6IHN0cmluZywgZkhhbmRsZXI6IEZ1bmN0aW9uKSB7XG5cdGxldCBvQmluZGluZ0luZm86IGFueTtcblx0Y29uc3Qgc2V0QmluZGluZ0luZm8gPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKG9CaW5kaW5nSW5mbykge1xuXHRcdFx0aWYgKCFvQmluZGluZ0luZm8uZXZlbnRzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5ldmVudHMgPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghb0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSkge1xuXHRcdFx0XHRvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdID0gZkhhbmRsZXI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmT3JpZ2luYWxIYW5kbGVyID0gb0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXTtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0XHRcdGZIYW5kbGVyLmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHRcdGZPcmlnaW5hbEhhbmRsZXIuYXBwbHkodGhpcywgLi4uYXJncyk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdChvQ29udHJvbCBhcyBhbnkpXG5cdFx0XHQuaW5uZXJDaGFydEJvdW5kKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvID0gKG9Db250cm9sIGFzIGFueSkuZ2V0Q29udHJvbERlbGVnYXRlKCkuX2dldENoYXJ0KG9Db250cm9sKS5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIik7XG5cdFx0XHRcdHNldEJpbmRpbmdJbmZvKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9CaW5kaW5nSW5mbyA9IG9Db250cm9sLmRhdGEoXCJyb3dzQmluZGluZ0luZm9cIik7XG5cdFx0c2V0QmluZGluZ0luZm8oKTtcblx0fVxufVxuZnVuY3Rpb24gbG9hZE1hY3JvTGlicmFyeSgpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL2ZlL21hY3Jvcy9tYWNyb0xpYnJhcnlcIl0sIGZ1bmN0aW9uICgvKm1hY3JvTGlicmFyeSovKSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQoc0dyb3VwSWQ6IHN0cmluZywgYWN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwsIGFNZXNzYWdlczogYW55W10pIHtcblx0Y29uc3QgbG9jYWxJMThuUmVmID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSxcblx0XHRzQWN0aW9uTmFtZSA9IGFjdGlvbk5hbWUsXG5cdFx0c0NhbmNlbEJ1dHRvblR4dCA9IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ0FOQ0VMXCIpO1xuXHRpZiAoYU1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdGNvbnN0IHNNZXNzYWdlID0gYU1lc3NhZ2VzWzBdLm1lc3NhZ2UgKyBcIlxcblwiICsgbG9jYWxJMThuUmVmLmdldFRleHQoXCJQUk9DRUVEXCIpO1xuXHRcdGNvbnN0IGRpYWxvZ1Byb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNNZXNzYWdlLCB7XG5cdFx0XHRcdHRpdGxlOiBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIldBUk5JTkdcIiksXG5cdFx0XHRcdGFjdGlvbnM6IFtzQWN0aW9uTmFtZSwgc0NhbmNlbEJ1dHRvblR4dF0sXG5cdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoc0FjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKHNBY3Rpb24gPT09IHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gZGlhbG9nUHJvbWlzZTtcblx0fVxuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTWVzc2FnZXMpO1xuXHRcdGNvbnN0IGJTdHJpY3RIYW5kbGluZ0Zsb3cgPSB0cnVlO1xuXHRcdGNvbnN0IG9NZXNzYWdlT2JqZWN0ID0gbWVzc2FnZUhhbmRsaW5nLnByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHRjb250ZW50OiBvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcsXG5cdFx0XHRzdGF0ZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRjdXN0b21IZWFkZXI6IG5ldyBCYXIoe1xuXHRcdFx0XHRjb250ZW50TGVmdDogW29NZXNzYWdlT2JqZWN0Lm9CYWNrQnV0dG9uXSxcblx0XHRcdFx0Y29udGVudE1pZGRsZTogW25ldyBUaXRsZSh7IHRleHQ6IFwiV2FybmluZ1wiIH0pXVxuXHRcdFx0fSksXG5cdFx0XHRjb250ZW50SGVpZ2h0OiBcIjUwJVwiLFxuXHRcdFx0Y29udGVudFdpZHRoOiBcIjUwJVwiLFxuXHRcdFx0dmVydGljYWxTY3JvbGxpbmc6IGZhbHNlXG5cdFx0fSk7XG5cdFx0b0RpYWxvZy5zZXRCZWdpbkJ1dHRvbihcblx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHR0ZXh0OiBnZXRUcmFuc2xhdGVkVGV4dChcIklHTk9SRVwiLCBsb2NhbEkxOG5SZWYsIHNBY3Rpb25OYW1lKVxuXHRcdFx0fSlcblx0XHQpO1xuXHRcdG9EaWFsb2cuc2V0RW5kQnV0dG9uKFxuXHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZXh0OiBzQ2FuY2VsQnV0dG9uVHh0XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0b0RpYWxvZy5vcGVuKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlQ29sdW1uKG9Db250cm9sOiBhbnkpOiBzdHJpbmcge1xuXHRpZiAoIW9Db250cm9sIHx8IG9Db250cm9sLmlzQShcInNhcC51aS5jb3JlLm12Yy5YTUxWaWV3XCIpKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0Y29uc3QgaGVhZGVySW5mb1RpdGxlUGF0aCA9IG9Db250cm9sLmdldFBhcmVudCgpLmdldFRhYmxlRGVmaW5pdGlvbigpLmhlYWRlckluZm9UaXRsZTtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250cm9sICYmIChvQ29udHJvbC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIGFueSksXG5cdFx0c0N1cnJlbnRFbnRpdHlTZXROYW1lID0gb0NvbnRyb2wuZGF0YShcIm1ldGFQYXRoXCIpO1xuXHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNDdXJyZW50RW50aXR5U2V0TmFtZSArIFwiLyRUeXBlLyRLZXlcIik7XG5cdGNvbnN0IGFGaWx0ZXJlZFRlY2huaWNhbEtleXM6IHN0cmluZ1tdID0gW107XG5cblx0YVRlY2huaWNhbEtleXMuZm9yRWFjaChmdW5jdGlvbiAodGVjaG5pY2FsS2V5OiBzdHJpbmcpIHtcblx0XHRpZiAodGVjaG5pY2FsS2V5ICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMucHVzaCh0ZWNobmljYWxLZXkpO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1ucyA9IG9Db250cm9sLmdldFBhcmVudCgpLmdldFRhYmxlRGVmaW5pdGlvbigpLnNlbWFudGljS2V5cztcblxuXHRjb25zdCBhVmlzaWJsZUNvbHVtbnM6IGFueSA9IFtdO1xuXHRjb25zdCBhVGFibGVDb2x1bW5zID0gb0NvbnRyb2wuZ2V0Q29sdW1ucygpO1xuXHRhVGFibGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdGNvbnN0IGNvbHVtblBhdGhTcGxpdCA9IG9Db2x1bW4uZ2V0SWQoKS5zcGxpdChcIjo6XCIpO1xuXHRcdGFWaXNpYmxlQ29sdW1ucy5wdXNoKGNvbHVtblBhdGhTcGxpdFtjb2x1bW5QYXRoU3BsaXQubGVuZ3RoIC0gMV0pO1xuXHR9KTtcblx0bGV0IHN1YnRpdGxlQ29sdW1uOiBzdHJpbmcgPSBcIlwiOyAvL3NldCB0aGUgY29ycmVzc3BvbmRpbmcgc3VidGl0bGUgY29sdW1uXG5cdGlmIChoZWFkZXJJbmZvVGl0bGVQYXRoICE9PSB1bmRlZmluZWQgJiYgYVZpc2libGVDb2x1bW5zLmluZGV4T2YoaGVhZGVySW5mb1RpdGxlUGF0aCkgIT09IC0xKSB7XG5cdFx0c3VidGl0bGVDb2x1bW4gPSBoZWFkZXJJbmZvVGl0bGVQYXRoO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHNlbWFudGljS2V5Q29sdW1ucyAhPT0gdW5kZWZpbmVkICYmXG5cdFx0c2VtYW50aWNLZXlDb2x1bW5zLmxlbmd0aCA9PT0gMSAmJlxuXHRcdGFWaXNpYmxlQ29sdW1ucy5pbmRleE9mKHNlbWFudGljS2V5Q29sdW1uc1swXSkgIT09IC0xXG5cdCkge1xuXHRcdHN1YnRpdGxlQ29sdW1uID0gc2VtYW50aWNLZXlDb2x1bW5zWzBdO1xuXHR9XG5cdC8vIHNldCBjb3JyZWN0IGNvbnRleHQgdG8gY29ycmVjdCBtZXNzYWdlIGluIG1lc3NhZ2UgbW9kZWxcblx0ZWxzZSBpZiAoYUZpbHRlcmVkVGVjaG5pY2FsS2V5cyAhPT0gdW5kZWZpbmVkICYmIGFGaWx0ZXJlZFRlY2huaWNhbEtleXMubGVuZ3RoID09PSAxKSB7XG5cdFx0c3VidGl0bGVDb2x1bW4gPSBhRmlsdGVyZWRUZWNobmljYWxLZXlzWzBdO1xuXHR9XG5cdHJldHVybiBzdWJ0aXRsZUNvbHVtbjtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZVN0cmlwVGV4dChcblx0dmlldzogYW55LFxuXHRhSWdub3JlZExhYmVsczogYW55LFxuXHRvRmlsdGVyQmFyOiBhbnksXG5cdGJJc0NoYXJ0OiBhbnksXG5cdGJJc1NlYXJjaElnbm9yZWQ6IGFueSxcblx0c1RhYlRpdGxlOiBhbnksXG5cdG9SZXNvdXJjZUJ1bmRsZTogYW55LFxuXHRmbkdldExvY2FsaXplZFRleHQ6IGFueVxuKTogc3RyaW5nIHtcblx0bGV0IHNUZXh0ID0gXCJcIjtcblx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0Y29uc3Qgb0NoYXJ0ID0gdmlldy5nZXRDb250cm9sbGVyKCkuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBvQ2hhcnQuZGF0YShcImRyYWZ0U3VwcG9ydGVkXCIpID09PSBcInRydWVcIjtcblx0XHRjb25zdCBvTWFjcm9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLm1hY3Jvc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRiSXNTZWFyY2hJZ25vcmVkID0gYklzU2VhcmNoSWdub3JlZCAmJiBhSWdub3JlZExhYmVscy5pbmNsdWRlcyhvTWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9GSUxURVJCQVJfU0VBUkNIXCIpKTtcblx0XHRpZiAoYUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAyICYmIGJJc1NlYXJjaElnbm9yZWQgJiYgYklzRHJhZnRTdXBwb3J0ZWQpIHtcblx0XHRcdHNUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0xSX01VTFRJVklaX0NIQVJUX0lHTk9SRURfRklMVEVSX0RSQUZUX0RBVEFfQU5EX1NFQVJDSFwiKTtcblx0XHR9IGVsc2UgaWYgKGFJZ25vcmVkTGFiZWxzLmxlbmd0aCA9PT0gMSAmJiBiSXNEcmFmdFN1cHBvcnRlZCkge1xuXHRcdFx0c1RleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTVVMVElWSVpfQ0hBUlRfSUdOT1JFRF9GSUxURVJfRFJBRlRfREFUQVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgc1Jlc291cmNlID1cblx0XHRcdFx0XCJDX0xSX01VTFRJVklaX0NIQVJUX1wiICtcblx0XHRcdFx0KGFJZ25vcmVkTGFiZWxzLmxlbmd0aCA9PT0gMSA/IFwiU0lOR0xFXCIgOiBcIk1VTFRJXCIpICtcblx0XHRcdFx0XCJfSUdOT1JFRF9GSUxURVJfXCIgK1xuXHRcdFx0XHQoc3lzdGVtLmRlc2t0b3AgPyBcIkxBUkdFXCIgOiBcIlNNQUxMXCIpO1xuXHRcdFx0c1RleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChzUmVzb3VyY2UsIFthSWdub3JlZExhYmVscy5qb2luKFwiLCBcIildKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgc1Jlc291cmNlID1cblx0XHRcdFx0XCJDX0xSX01VTFRJVEFCTEVTX1wiICtcblx0XHRcdFx0KGFJZ25vcmVkTGFiZWxzLmxlbmd0aCA9PT0gMSA/IFwiU0lOR0xFXCIgOiBcIk1VTFRJXCIpICtcblx0XHRcdFx0XCJfSUdOT1JFRF9GSUxURVJfXCIgK1xuXHRcdFx0XHQoc3lzdGVtLmRlc2t0b3AgPyBcIkxBUkdFXCIgOiBcIlNNQUxMXCIpLFxuXHRcdFx0c0xvY2FsaXplZFRhYmxlVGl0bGUgPSBmbkdldExvY2FsaXplZFRleHQoc1RhYlRpdGxlLCBvRmlsdGVyQmFyKTtcblx0XHRzVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZSwgW2FJZ25vcmVkTGFiZWxzLmpvaW4oXCIsIFwiKSwgc0xvY2FsaXplZFRhYmxlVGl0bGVdKTtcblx0fVxuXHRyZXR1cm4gc1RleHQ7XG59XG5cbmNvbnN0IENvbW1vblV0aWxzID0ge1xuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogaXNQcm9wZXJ0eUZpbHRlcmFibGUsXG5cdGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZTogaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlLFxuXHRyZW1vdmVTZW5zaXRpdmVEYXRhOiByZW1vdmVTZW5zaXRpdmVEYXRhLFxuXHRmaXJlQnV0dG9uUHJlc3M6IGZuRmlyZUJ1dHRvblByZXNzLFxuXHRnZXRUYXJnZXRWaWV3OiBnZXRUYXJnZXRWaWV3LFxuXHRoYXNUcmFuc2llbnRDb250ZXh0OiBmbkhhc1RyYW5zaWVudENvbnRleHRzLFxuXHR1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHM6IGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzLFxuXHRyZXNvbHZlU3RyaW5ndG9Cb29sZWFuOiBmblJlc29sdmVTdHJpbmd0b0Jvb2xlYW4sXG5cdGdldEFwcENvbXBvbmVudDogZ2V0QXBwQ29tcG9uZW50LFxuXHRnZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHM6IGZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzLFxuXHRnZXRDb250ZXh0UGF0aFByb3BlcnRpZXM6IGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzLFxuXHRnZXRQYXJhbWV0ZXJJbmZvOiBnZXRQYXJhbWV0ZXJJbmZvLFxuXHR1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eTogZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSxcblx0Z2V0VHJhbnNsYXRlZFRleHQ6IGdldFRyYW5zbGF0ZWRUZXh0LFxuXHRnZXRFbnRpdHlTZXROYW1lOiBnZXRFbnRpdHlTZXROYW1lLFxuXHRnZXRBY3Rpb25QYXRoOiBnZXRBY3Rpb25QYXRoLFxuXHRjb21wdXRlRGlzcGxheU1vZGU6IGNvbXB1dGVEaXNwbGF5TW9kZSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudDogc2V0QWN0aW9uRW5hYmxlbWVudCxcblx0aXNTdGlja3lFZGl0TW9kZTogaXNTdGlja3lFZGl0TW9kZSxcblx0Z2V0T3BlcmF0b3JzRm9yUHJvcGVydHk6IGdldE9wZXJhdG9yc0ZvclByb3BlcnR5LFxuXHRhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zOiBhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zLFxuXHRhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudDogYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQsXG5cdGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50OiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCxcblx0YWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeTogYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeSxcblx0Z2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzOiBnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMsXG5cdHNldFVzZXJEZWZhdWx0czogc2V0VXNlckRlZmF1bHRzLFxuXHRnZXRTaGVsbFNlcnZpY2VzOiBnZXRTaGVsbFNlcnZpY2VzLFxuXHRnZXRIYXNoOiBnZXRIYXNoLFxuXHRnZXRJQk5BY3Rpb25zOiBmbkdldElCTkFjdGlvbnMsXG5cdGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbjogZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmc6IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0c2V0U2VtYW50aWNPYmplY3RNYXBwaW5nczogc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyxcblx0Z2V0U2VtYW50aWNPYmplY3RQcm9taXNlOiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSxcblx0Z2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbDogZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsLFxuXHRnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aDogZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCxcblx0dXBkYXRlU2VtYW50aWNUYXJnZXRzOiBmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsLFxuXHRnZXRQcm9wZXJ0eURhdGFUeXBlOiBnZXRQcm9wZXJ0eURhdGFUeXBlLFxuXHRnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zOiBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLFxuXHRnZXRTZWFyY2hSZXN0cmljdGlvbnM6IGdldFNlYXJjaFJlc3RyaWN0aW9ucyxcblx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoOiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgsXG5cdGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb246IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24sXG5cdGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGU6IGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUsXG5cdHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eTogcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5LFxuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudDogdGVtcGxhdGVDb250cm9sRnJhZ21lbnQsXG5cdGFkZEV2ZW50VG9CaW5kaW5nSW5mbzogYWRkRXZlbnRUb0JpbmRpbmdJbmZvLFxuXHRzZXRPYmplY3RNYXBwaW5nczogc2V0T2JqZWN0TWFwcGluZ3MsXG5cdEZpbHRlclJlc3RyaWN0aW9uczoge1xuXHRcdFJFUVVJUkVEX1BST1BFUlRJRVM6IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIsXG5cdFx0Tk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUzogXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiLFxuXHRcdEFMTE9XRURfRVhQUkVTU0lPTlM6IFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJcblx0fSxcblx0QWxsb3dlZEV4cHJlc3Npb25zUHJpbzogW1wiU2luZ2xlVmFsdWVcIiwgXCJNdWx0aVZhbHVlXCIsIFwiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCIsIFwiU2VhcmNoRXhwcmVzc2lvblwiLCBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIl0sXG5cdG5vcm1hbGl6ZVNlYXJjaFRlcm06IG5vcm1hbGl6ZVNlYXJjaFRlcm0sXG5cdGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZDogZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLFxuXHRnZXRTaW5nbGV0b25QYXRoOiBnZXRTaW5nbGV0b25QYXRoLFxuXHRnZXRNZXNzYWdlU3RyaXBUZXh0OiBnZXRNZXNzYWdlU3RyaXBUZXh0LFxuXHRnZXRNZXNzYWdlQ29sdW1uOiBnZXRNZXNzYWdlQ29sdW1uXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25VdGlscztcbiJdfQ==
|
|
2290
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sIm5hbWVzIjpbImFWYWxpZFR5cGVzIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInNTZWFyY2hUZXJtIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInNwbGl0IiwicmVkdWNlIiwic05vcm1hbGl6ZWQiLCJzQ3VycmVudFdvcmQiLCJnZXRQcm9wZXJ0eURhdGFUeXBlIiwib05hdmlnYXRpb25Db250ZXh0Iiwic0RhdGFUeXBlIiwiZ2V0UHJvcGVydHkiLCJzQW5ub3RhdGlvblBhdGgiLCJpbmRleE9mIiwiZm5IYXNUcmFuc2llbnRDb250ZXh0cyIsIm9MaXN0QmluZGluZyIsImJIYXNUcmFuc2llbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZvckVhY2giLCJvQ29udGV4dCIsImlzVHJhbnNpZW50IiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwic0Z1bGxQYXRoIiwib01ldGFNb2RlbCIsImkiLCJhTmF2aWdhdGlvblBhcnRzIiwic1BhdGgiLCJsZW5ndGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJnZXRPYmplY3QiLCJvTW9kZWwiLCJzRW50aXR5U2V0UGF0aCIsInNOYXZpZ2F0aW9uUGF0aCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiZmluZCIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIl9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzQ29udGV4dFBhdGgiLCJiSXNOb3RGaWx0ZXJhYmxlIiwib0Fubm90YXRpb24iLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNvbWUiLCJwcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUiLCJzQ29udGV4UGF0aCIsImFFU1BhcnRzIiwic3BsaWNlIiwiYUNvbnRleHQiLCJzQ29udGV4dCIsImpvaW4iLCJpdGVtIiwiaW5kZXgiLCJhcnJheSIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzVGFyZ2V0UHJvcGVydHlQYXRoIiwib1Byb3BlcnR5UGF0aCIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwic1Byb3BlcnR5IiwiYlNraXBIaWRkZW5GaWx0ZXIiLCJFcnJvciIsImJJc0ZpbHRlcmFibGUiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNIaWRkZW5QYXRoIiwic0hpZGRlbkZpbHRlclBhdGgiLCJjb21waWxlRXhwcmVzc2lvbiIsIm5vdCIsIm9yIiwicGF0aEluTW9kZWwiLCJzUHJvcGVydHlEYXRhVHlwZSIsImdldFNoZWxsU2VydmljZXMiLCJvQ29udHJvbCIsImdldEFwcENvbXBvbmVudCIsImdldEhhc2giLCJzSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsIl9nZXRTT0ludGVudHMiLCJvT2JqZWN0UGFnZUxheW91dCIsIm9TZW1hbnRpY09iamVjdCIsIm9QYXJhbSIsIm9TaGVsbFNlcnZpY2VIZWxwZXIiLCJDb21tb25VdGlscyIsImdldExpbmtzIiwic2VtYW50aWNPYmplY3QiLCJwYXJhbXMiLCJfY3JlYXRlTWFwcGluZ3MiLCJvTWFwcGluZyIsImFTT01hcHBpbmdzIiwiYU1hcHBpbmdLZXlzIiwiT2JqZWN0Iiwia2V5cyIsIm9TZW1hbnRpY01hcHBpbmciLCJwdXNoIiwiX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiYUxpbmtzIiwiYUV4Y2x1ZGVkQWN0aW9ucyIsIm9UYXJnZXRQYXJhbXMiLCJhSXRlbXMiLCJvTGluayIsInNJbnRlbnQiLCJpbnRlbnQiLCJzQWN0aW9uIiwidGV4dCIsInRhcmdldFNlbU9iamVjdCIsInRhcmdldEFjdGlvbiIsInRhcmdldFBhcmFtcyIsIl9nZXRSZWxhdGVkSW50ZW50cyIsIm9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwib0JpbmRpbmdDb250ZXh0IiwiYU1hbmlmZXN0U09JdGVtcyIsInVuYXZhaWxhYmxlQWN0aW9ucyIsIm1hcHBpbmciLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJ1cGRhdGVSZWxhdGVBcHBzTW9kZWwiLCJvRW50cnkiLCJhU2VtS2V5cyIsIm9NZXRhUGF0aCIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImoiLCJzU2VtS2V5IiwidmFsdWUiLCJhVGVjaG5pY2FsS2V5cyIsImtleSIsInNPYmpLZXkiLCJvTWFuaWZlc3REYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwiYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyIsImFNYW5pZmVzdFNPS2V5cyIsInRoZW4iLCJiaW5kIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwiYWN0aW9uIiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlUeXBlUGF0aCIsIm9FbnRpdHlTZXRBbm5vdGF0aW9ucyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJjb25jYXQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5Iiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1BhdGgiLCJnZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsInJlcXVlc3RlZE9iamVjdCIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImFBdXRob3JpemVkVHlwZXMiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsImZpcmVQcmVzcyIsImZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInNWYWx1ZSIsImlzQSIsIm9Pd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFBhcmVudCIsImlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZSIsInNGaWVsZENvbnRyb2xQYXRoIiwib0F0dHJpYnV0ZSIsImJJbmFwcGxpY2FibGUiLCJhUGFydHMiLCJoYXNPd25Qcm9wZXJ0eSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJhQXR0cmlidXRlcyIsImFPdXRBdHRyaWJ1dGVzIiwic0VudGl0eVNldCIsImVudGl0eVNldCIsImNvbnRleHREYXRhIiwiYVByb3BlcnRpZXMiLCJzUHJvcCIsImFQcm9wZXJ0eUFubm90YXRpb25zIiwib0ZpZWxkQ29udHJvbCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJvRmlsdGVyIiwib0VudGl0eVR5cGUiLCJvUHJvcGVydGllcyIsInRlc3QiLCIka2luZCIsImZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzIiwiYU1hbmRhdG9yeUZpbHRlckZpZWxkcyIsImZuR2V0SUJOQWN0aW9ucyIsImFJQk5BY3Rpb25zIiwiYUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEFjdGlvbiIsImRhdGEiLCJmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib1ZpZXciLCJvUGFyYW1zIiwiZm5HZXRMaW5rcyIsIm9EYXRhIiwiYUtleXMiLCJvSUJOQWN0aW9uIiwic1NlbWFudGljT2JqZWN0IiwiYUxpbmsiLCJzZXRWaXNpYmxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJzRnJhbWV3b3JrS2V5Iiwib1Jlc291cmNlQnVuZGxlIiwic0VudGl0eVNldE5hbWUiLCJzUmVzb3VyY2VLZXkiLCJiUmVzb3VyY2VLZXlFeGlzdHMiLCJfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzIiwiYUN1c3RvbUJ1bmRsZXMiLCJnZXRUZXh0IiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImhhc1RleHQiLCJnZXRBY3Rpb25QYXRoIiwiYlJldHVybk9ubHlQYXRoIiwic0FjdGlvbk5hbWUiLCJiQ2hlY2tTdGF0aWNWYWx1ZSIsInNFbnRpdHlUeXBlTmFtZSIsIiRUeXBlIiwic0VudGl0eU5hbWUiLCJnZXRFbnRpdHlTZXROYW1lIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRFbnVtTWVtYmVyIiwiX2dldEVudGl0eVR5cGUiLCJfcmVxdWVzdE9iamVjdCIsIm9TZWxlY3RlZENvbnRleHQiLCJuQnJhY2tldEluZGV4Iiwic1RhcmdldFR5cGUiLCJzbGljZSIsInNDdXJyZW50VHlwZSIsImdldEJpbmRpbmciLCJnZXRDb250ZXh0Iiwid2FybmluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwiX3JlcXVlc3RQcm9wZXJ0eSIsInNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgiLCJvUHJvbWlzZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInZQcm9wZXJ0eVZhbHVlIiwiX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImFSZXF1ZXN0UHJvbWlzZXMiLCJhbGwiLCJhUmVzdWx0cyIsImFBcHBsaWNhYmxlQ29udGV4dHMiLCJhTm90QXBwbGljYWJsZUNvbnRleHRzIiwiYVJlc3VsdCIsIl9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJ0cmFjZSIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJzRHluYW1pY0FjdGlvblBhdGhQcmVmaXgiLCJvSW50ZXJuYWxNb2RlbCIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJhUHJvbWlzZXMiLCJiRW5hYmxlZCIsIm9Db250ZXh0RGF0YSIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJzZXRPYmplY3RNYXBwaW5ncyIsImFTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwib0l0ZW0iLCJvTWFwcGluZ3MiLCJpdGVtcyIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJfZ2V0RGVmYXVsdE9wZXJhdG9ycyIsInNQcm9wZXJ0eVR5cGUiLCJvRGF0YUNsYXNzIiwiVHlwZVV0aWwiLCJnZXREYXRhVHlwZUNsYXNzTmFtZSIsIm9CYXNlVHlwZSIsImdldEJhc2VUeXBlIiwiRmlsdGVyT3BlcmF0b3JVdGlsIiwiZ2V0T3BlcmF0b3JzRm9yVHlwZSIsIl9nZXRSZXN0cmljdGlvbnMiLCJhRGVmYXVsdE9wcyIsImFFeHByZXNzaW9uT3BzIiwiYU9wZXJhdG9ycyIsImZpbHRlciIsInNFbGVtZW50IiwidG9TdHJpbmciLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5IiwiQWxsb3dlZEV4cHJlc3Npb25zUHJpbyIsInNvcnQiLCJhIiwiYiIsImdldE9wZXJhdG9yc0ZvclByb3BlcnR5Iiwic1R5cGUiLCJiVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzU2V0dGluZ3MiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJhRXF1YWxzT3BzIiwiYVNpbmdsZVJhbmdlT3BzIiwiYVNpbmdsZVJhbmdlRFRCYXNpY09wcyIsImFTaW5nbGVWYWx1ZURhdGVPcHMiLCJhQmFzaWNEYXRlVGltZU9wcyIsImFNdWx0aVJhbmdlT3BzIiwiYVNlYXJjaEV4cHJlc3Npb25PcHMiLCJhU2VtYW50aWNEYXRlT3BzRXh0IiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U3VwcG9ydGVkT3BlcmF0aW9ucyIsImJTZW1hbnRpY0RhdGVSYW5nZSIsImFTZW1hbnRpY0RhdGVPcHMiLCJvU2V0dGluZ3MiLCJKU09OIiwicGFyc2UiLCJjdXN0b21EYXRhIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZ2V0RmlsdGVyT3BlcmF0aW9ucyIsImdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJhU2luZ2xlUmFuZ2VEYXRlVGltZU9wcyIsInNPcGVyYXRvciIsImFEZWZhdWx0T3BlcmF0b3JzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwic0FsbG93ZWRFeHByZXNzaW9uIiwic1Jlc3RyaWN0aW9ucyIsImFTaW5nbGVWYWx1ZU9wcyIsInNPcGVyYXRvcnMiLCJnZXRQYXJhbWV0ZXJJbmZvIiwic1BhcmFtZXRlckNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJiUmVzdWx0Q29udGV4dCIsIm9QYXJhbWV0ZXJJbmZvIiwiY29udGV4dFBhdGgiLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zIiwib1Byb3BlcnR5TWV0YWRhdGEiLCJhVmFsaWRPcGVyYXRvcnMiLCJhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwib0NvbmRpdGlvbiIsImdldENvbmRpdGlvbnMiLCJvcGVyYXRvciIsImFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMiLCJvU2VsZWN0aW9uVmFyaWFudCIsInNTZWxlY3RPcHRpb25Qcm9wIiwib0NvbmRpdGlvbnMiLCJzQ29uZGl0aW9uUGF0aCIsInNDb25kaXRpb25Qcm9wIiwib1ZhbGlkUHJvcGVydGllcyIsImlzUGFyYW1ldGVyIiwiYUNvbmRpdGlvbnMiLCJhU2VsZWN0T3B0aW9ucyIsImdldFNlbGVjdE9wdGlvbiIsImFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMiLCJhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsImFNZXRhZGF0UHJvcGVydGllcyIsIm9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMiLCJiSGFzUGFyYW1ldGVycyIsImFNZXRhZGF0YVBhcmFtZXRlcnMiLCJzTWV0YWRhdGFQYXJhbWV0ZXIiLCJzU2VsZWN0T3B0aW9uTmFtZSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCIsInNNZXRhZGF0YVByb3BlcnR5Iiwic1NlbGVjdE9wdGlvbiIsInNGdWxsQ29udGV4dFBhdGgiLCJyZXBsYWNlQWxsIiwiX2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzIiwic01haW5FbnRpdHlTZXRQYXRoIiwiYU5hdk9iamVjdE5hbWVzIiwic05hdlBhdGgiLCJzUHJvcGVydHlOYW1lIiwiJGlzQ29sbGVjdGlvbiIsInNOYXZQcm9wZXJ0eVBhdGgiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9BcHBDb21wb25lbnQiLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwiYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQiLCJtRmlsdGVycyIsIm9UYXJnZXRJbmZvIiwib0ZpbHRlckluZm8iLCJzRmlsdGVyIiwic0xvdyIsInNIaWdoIiwiZm5HZXRTaWduQW5kT3B0aW9uIiwic0xvd1ZhbHVlIiwic0hpZ2hWYWx1ZSIsIm9TZWxlY3RPcHRpb25TdGF0ZSIsIm9wdGlvbiIsInNpZ24iLCJsb3ciLCJoaWdoIiwib0ZpbHRlckNvbmRpdGlvbnMiLCJmaWx0ZXJDb25kaXRpb25zIiwib0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QiLCJmaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0Iiwib1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsInNGaWx0ZXJOYW1lIiwiYUZpbHRlcnMiLCJ2YWx1ZXMiLCJhRmlsdGVyIiwib1ZhbHVlMSIsIm9TZWxlY3RPcHRpb25WYWx1ZXMiLCJhZGRTZWxlY3RPcHRpb24iLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiYlVJRWRpdGFibGUiLCJhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5Iiwib1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsImFTVk9wdGlvbiIsImFEZWZhdWx0U1ZPcHRpb24iLCJkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24iLCJzU2lnbiIsInNPcHRpb24iLCJnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMiLCIkS2V5IiwiYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsImFJbW11dGFibGVWaXNpYmxlRmllbGRzIiwib0Fubm90YXRpb25zIiwiYklzS2V5IiwiYklzSW1tdXRhYmxlIiwiYklzTm9uQ29tcHV0ZWQiLCJiSXNWaXNpYmxlIiwiYklzQ29tcHV0ZWREZWZhdWx0VmFsdWUiLCJiSXNLZXlDb21wdXRlZERlZmF1bHRWYWx1ZVdpdGhUZXh0Iiwib0RpYWdub3N0aWNzIiwiZ2V0RGlhZ25vc3RpY3MiLCJzTWVzc2FnZSIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVDYXRlZ29yeVR5cGUiLCJBbm5vdGF0aW9ucyIsIklnbm9yZWRBbm5vdGF0aW9uIiwiYVJlcXVpcmVkUHJvcGVydGllcyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXMiLCJiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnMiLCJhUGF0aFBhcnRzIiwiYVJlcXVpcmVkUHJvcGVydGllc1dpdGhQYXRocyIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwiaGFzUmVzdHJpY3RlZFByb3BlcnRpZXNJbkFubm90YXRpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUFubm90YXRpb25zIiwib1JlcXVpcmVkUHJvcGVydHkiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwiYklzTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsInNldFVzZXJEZWZhdWx0cyIsImFQYXJhbWV0ZXJzIiwiYklzQWN0aW9uIiwiYklzQ3JlYXRlIiwib0FjdGlvbkRlZmF1bHRWYWx1ZXMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIm9TaGVsbFNlcnZpY2VzIiwiaGFzVVNoZWxsIiwib1BhcmFtZXRlciIsIiROYW1lIiwic1BhcmFtZXRlck5hbWUiLCJnZXRTdGFydHVwQXBwU3RhdGUiLCJvU3RhcnR1cEFwcFN0YXRlIiwiZ2V0RGF0YSIsImFFeHRlbmRlZFBhcmFtZXRlcnMiLCJTZWxlY3RPcHRpb25zIiwib0V4dGVuZGVkUGFyYW1ldGVyIiwiUHJvcGVydHlOYW1lIiwib1JhbmdlIiwiUmFuZ2VzIiwiU2lnbiIsIk9wdGlvbiIsIkxvdyIsImdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUiLCJvSW5ib3VuZFBhcmFtZXRlcnMiLCJvSW5ib3VuZHMiLCJhQ3JlYXRlUGFyYW1ldGVycyIsInNQYXJhbWV0ZXIiLCJ1c2VGb3JDcmVhdGUiLCJvUmV0Iiwic0NyZWF0ZVBhcmFtZXRlciIsImFWYWx1ZXMiLCJjcmVhdGUiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvT3V0Ym91bmQiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwicGFyYW1ldGVycyIsInNQYXJhbSIsImZvcm1hdCIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsIm9WaWV3RGF0YSIsIm9Dcm9zc05hdiIsIm9IZWFkZXJGYWNldEl0ZW1zIiwic0lkIiwib0NvbnRyb2xDb25maWciLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsIm5hdmlnYXRpb24iLCJ0YXJnZXRPdXRib3VuZCIsIm91dGJvdW5kIiwic091dGJvdW5kIiwiZ2VuZXJhdGUiLCJzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwidk1hcHBpbmdzIiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsInNlbWFudGljT2JqZWN0UGF0aCIsInNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsIiwiYUdldExpbmtzUHJvbWlzZXMiLCJhU2VtYW50aWNPYmplY3RzIiwic0N1cnJlbnRIYXNoIiwiX29MaW5rIiwiX3NMaW5rSW50ZW50QWN0aW9uIiwiYUZpbmFsTGlua3MiLCJvRmluYWxTZW1hbnRpY09iamVjdHMiLCJiSW50ZW50SGFzQWN0aW9ucyIsImsiLCJvVG1wIiwic0FsdGVybmF0ZVBhdGgiLCJoYXNUYXJnZXRzTm90RmlsdGVyZWQiLCJoYXNUYXJnZXRzIiwiaUxpbmtDb3VudCIsIkhhc1RhcmdldHMiLCJIYXNUYXJnZXRzTm90RmlsdGVyZWQiLCJhc3NpZ24iLCJzU2VtYW50aWNPYmplY3ROYW1lIiwibWVyZ2VPYmplY3RzIiwiZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCIsImZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9Db250cm9sbGVyIiwic1BhZ2VNb2RlbCIsIl9mbmZpbmRWYWx1ZXNIZWxwZXIiLCJvYmoiLCJsaXN0IiwiQXJyYXkiLCJjaGlsZHJlbiIsIl9mbmZpbmRWYWx1ZXMiLCJfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMiLCJhU2VtYW50aWNPYmplY3RQYXRoIiwiZ2V0VmlldyIsImFTZW1hbnRpY09iamVjdHNQcm9taXNlcyIsIm9Db21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudCIsIm9QYWdlTW9kZWwiLCJzdHJpbmdpZnkiLCJfZ2V0T2JqZWN0IiwiYVNlbWFudGljT2JqZWN0c0ZvdW5kIiwiYVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzIiwiX29TZW1hbnRpY09iamVjdCIsImdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsInNTZW1PYmpFeHByZXNzaW9uIiwiYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkIiwiZWxlbWVudCIsIiRQYXRoIiwiZ2V0TGlua3NXaXRoQ2FjaGUiLCJ1cGRhdGVTZW1hbnRpY1RhcmdldHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInNSZXN0cmljdGlvbiIsIlJFUVVJUkVEX1BST1BFUlRJRVMiLCJOT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTIiwiYVByb3BzIiwibWFwIiwib1Byb3BlcnR5IiwiQUxMT1dFRF9FWFBSRVNTSU9OUyIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiUHJvcGVydHkiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50Iiwic0ZyYWdtZW50TmFtZSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm9PcHRpb25zIiwib01vZGlmaWVyIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJsb2FkTWFjcm9MaWJyYXJ5IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwibmFtZSIsImZpcnN0RWxlbWVudENoaWxkIiwiaXNYTUwiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwiZ2V0U2luZ2xldG9uUGF0aCIsIm1ldGFNb2RlbCIsInBhcnRzIiwiQm9vbGVhbiIsInByb3BlcnR5TmFtZSIsInBvcCIsIm5hdmlnYXRpb25QYXRoIiwic2luZ2xldG9uTmFtZSIsIm1vZGVsIiwicmVzb2x2ZWRQYXRoIiwicHJvcGVydHlCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwicmVxdWVzdFZhbHVlIiwiYWRkRXZlbnRUb0JpbmRpbmdJbmZvIiwic0V2ZW50TmFtZSIsImZIYW5kbGVyIiwib0JpbmRpbmdJbmZvIiwic2V0QmluZGluZ0luZm8iLCJldmVudHMiLCJmT3JpZ2luYWxIYW5kbGVyIiwiYXJncyIsImFwcGx5IiwiaW5uZXJDaGFydEJvdW5kIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiZ2V0QmluZGluZ0luZm8iLCJzRXJyb3IiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQiLCJzR3JvdXBJZCIsImFjdGlvbk5hbWUiLCJhTWVzc2FnZXMiLCJsb2NhbEkxOG5SZWYiLCJzQ2FuY2VsQnV0dG9uVHh0Iiwib01lc3NhZ2UiLCJnZXRUZWNobmljYWxEZXRhaWxzIiwiaHR0cFN0YXR1cyIsIm1lc3NhZ2UiLCJNZXNzYWdlQm94IiwidGl0bGUiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJzdWJtaXRCYXRjaCIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJzZXREYXRhIiwiYlN0cmljdEhhbmRsaW5nRmxvdyIsIm9NZXNzYWdlT2JqZWN0IiwibWVzc2FnZUhhbmRsaW5nIiwicHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nIiwib0RpYWxvZyIsIkRpYWxvZyIsInJlc2l6YWJsZSIsImNvbnRlbnQiLCJvTWVzc2FnZVZpZXciLCJzdGF0ZSIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRMZWZ0Iiwib0JhY2tCdXR0b24iLCJjb250ZW50TWlkZGxlIiwiVGl0bGUiLCJjb250ZW50SGVpZ2h0IiwiY29udGVudFdpZHRoIiwidmVydGljYWxTY3JvbGxpbmciLCJzZXRCZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwiY2xvc2UiLCJ0eXBlIiwic2V0RW5kQnV0dG9uIiwib3BlbiIsImdldE1lc3NhZ2VDb2x1bW4iLCJoZWFkZXJJbmZvVGl0bGVQYXRoIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiaGVhZGVySW5mb1RpdGxlIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiYUZpbHRlcmVkVGVjaG5pY2FsS2V5cyIsInRlY2huaWNhbEtleSIsInNlbWFudGljS2V5Q29sdW1ucyIsInNlbWFudGljS2V5cyIsImFWaXNpYmxlQ29sdW1ucyIsImFUYWJsZUNvbHVtbnMiLCJnZXRDb2x1bW5zIiwib0NvbHVtbiIsImNvbHVtblBhdGhTcGxpdCIsImdldElkIiwic3VidGl0bGVDb2x1bW4iLCJnZXRLZXlzIiwic01ldGFQYXRoIiwic2VtYW50aWNLZXkiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljS2V5cyIsImZpcmVCdXR0b25QcmVzcyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJ1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJyZXNvbHZlU3RyaW5ndG9Cb29sZWFuIiwiZ2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJnZXRJQk5BY3Rpb25zIiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQStCQSxNQUFNQSxXQUFXLEdBQUcsQ0FDbkIsYUFEbUIsRUFFbkIsVUFGbUIsRUFHbkIsVUFIbUIsRUFJbkIsY0FKbUIsRUFLbkIsb0JBTG1CLEVBTW5CLGFBTm1CLEVBT25CLFlBUG1CLEVBUW5CLFdBUm1CLEVBU25CLFVBVG1CLEVBVW5CLFdBVm1CLEVBV25CLFdBWG1CLEVBWW5CLFdBWm1CLEVBYW5CLFdBYm1CLEVBY25CLFlBZG1CLEVBZW5CLFlBZm1CLEVBZ0JuQixVQWhCbUIsRUFpQm5CLGVBakJtQixDQUFwQjs7QUFvQkEsV0FBU0MsbUJBQVQsQ0FBNkJDLFdBQTdCLEVBQWtEO0FBQ2pELFFBQUksQ0FBQ0EsV0FBTCxFQUFrQjtBQUNqQixhQUFPQyxTQUFQO0FBQ0E7O0FBRUQsV0FBT0QsV0FBVyxDQUNoQkUsT0FESyxDQUNHLElBREgsRUFDUyxHQURULEVBRUxDLEtBRkssQ0FFQyxLQUZELEVBR0xDLE1BSEssQ0FHRSxVQUFVQyxXQUFWLEVBQTJDQyxZQUEzQyxFQUFpRTtBQUN4RSxVQUFJQSxZQUFZLEtBQUssRUFBckIsRUFBeUI7QUFDeEJELFFBQUFBLFdBQVcsYUFBTUEsV0FBVyxhQUFNQSxXQUFOLFNBQXVCLEVBQXhDLGVBQThDQyxZQUE5QyxPQUFYO0FBQ0E7O0FBQ0QsYUFBT0QsV0FBUDtBQUNBLEtBUkssRUFRSEosU0FSRyxDQUFQO0FBU0E7O0FBRUQsV0FBU00sbUJBQVQsQ0FBNkJDLGtCQUE3QixF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QUEsT0FBTyxFQUFFQTtBQTlEVSxHQUFwQjtTQWlFZWpwQixXIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIG5vdCwgb3IsIHBhdGhJbk1vZGVsLCB0cmFuc2Zvcm1SZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNLZXlIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC9tL1RpdGxlXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3JVdGlsIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9GaWx0ZXJPcGVyYXRvclV0aWxcIjtcbmltcG9ydCBUeXBlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlVXRpbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB7IGdldENvbmRpdGlvbnMgfSBmcm9tIFwiLi90ZW1wbGF0aW5nL0ZpbHRlckhlbHBlclwiO1xuXG5jb25zdCBhVmFsaWRUeXBlcyA9IFtcblx0XCJFZG0uQm9vbGVhblwiLFxuXHRcIkVkbS5CeXRlXCIsXG5cdFwiRWRtLkRhdGVcIixcblx0XCJFZG0uRGF0ZVRpbWVcIixcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcIkVkbS5Eb3VibGVcIixcblx0XCJFZG0uRmxvYXRcIixcblx0XCJFZG0uR3VpZFwiLFxuXHRcIkVkbS5JbnQxNlwiLFxuXHRcIkVkbS5JbnQzMlwiLFxuXHRcIkVkbS5JbnQ2NFwiLFxuXHRcIkVkbS5TQnl0ZVwiLFxuXHRcIkVkbS5TaW5nbGVcIixcblx0XCJFZG0uU3RyaW5nXCIsXG5cdFwiRWRtLlRpbWVcIixcblx0XCJFZG0uVGltZU9mRGF5XCJcbl07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRlcm0oc1NlYXJjaFRlcm06IHN0cmluZykge1xuXHRpZiAoIXNTZWFyY2hUZXJtKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHVybiBzU2VhcmNoVGVybVxuXHRcdC5yZXBsYWNlKC9cIi9nLCBcIiBcIilcblx0XHQuc3BsaXQoL1xccysvKVxuXHRcdC5yZWR1Y2UoZnVuY3Rpb24gKHNOb3JtYWxpemVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNDdXJyZW50V29yZDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoc0N1cnJlbnRXb3JkICE9PSBcIlwiKSB7XG5cdFx0XHRcdHNOb3JtYWxpemVkID0gYCR7c05vcm1hbGl6ZWQgPyBgJHtzTm9ybWFsaXplZH0gYCA6IFwiXCJ9XCIke3NDdXJyZW50V29yZH1cImA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc05vcm1hbGl6ZWQ7XG5cdFx0fSwgdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlEYXRhVHlwZShvTmF2aWdhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRsZXQgc0RhdGFUeXBlID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiJFR5cGVcIik7XG5cdC8vIGlmICRraW5kIGV4aXN0cywgaXQncyBub3QgYSBEYXRhRmllbGQgYW5kIHdlIGhhdmUgdGhlIGZpbmFsIHR5cGUgYWxyZWFkeVxuXHRpZiAoIW9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIiRraW5kXCIpKSB7XG5cdFx0c3dpdGNoIChzRGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiOlxuXHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoXCIpO1xuXHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNEYXRhVHlwZSA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvZm4vJFBhdGgvJFR5cGVcIik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufVxuZnVuY3Rpb24gZm5IYXNUcmFuc2llbnRDb250ZXh0cyhvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRsZXQgYkhhc1RyYW5zaWVudENvbnRleHRzID0gZmFsc2U7XG5cdGlmIChvTGlzdEJpbmRpbmcpIHtcblx0XHRvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdFx0Ykhhc1RyYW5zaWVudENvbnRleHRzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYkhhc1RyYW5zaWVudENvbnRleHRzO1xufVxuZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKHNGdWxsUGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0bGV0IGkgPSAwO1xuXHRjb25zdCBhTmF2aWdhdGlvblBhcnRzID0gc0Z1bGxQYXRoLnNwbGl0KFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKTtcblx0Zm9yIChsZXQgc1BhdGggPSBhTmF2aWdhdGlvblBhcnRzWzBdOyBpIDwgYU5hdmlnYXRpb25QYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01ldGFNb2RlbCwgc1BhdGgsIGFOYXZpZ2F0aW9uUGFydHNbaSArIDFdKTtcblx0XHRpZiAob05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnNbXCJTZWFyY2hSZXN0cmljdGlvbnNcIl0pIHtcblx0XHRcdHJldHVybiBvTmF2aWdhdGlvblJlc3RyaWN0aW9uc1tcIlNlYXJjaFJlc3RyaWN0aW9uc1wiXTtcblx0XHR9XG5cdFx0c1BhdGggPSBgJHtzUGF0aH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHthTmF2aWdhdGlvblBhcnRzW2ldfWA7XG5cdH1cblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NGdWxsUGF0aH1AT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNgKTtcbn1cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01vZGVsOiBhbnksIHNFbnRpdHlTZXRQYXRoOiBhbnksIHNOYXZpZ2F0aW9uUGF0aDogYW55KSB7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH1AT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zYCk7XG5cdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRyZXR1cm4gKFxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcyAmJlxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUmVzdHJpY3RlZFByb3BlcnR5OiBhbnkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufVxuZnVuY3Rpb24gX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhvTW9kZWw6IGFueSwgc0VudGl0eVNldFBhdGg6IGFueSwgc0NvbnRleHRQYXRoOiBhbnkpIHtcblx0bGV0IGJJc05vdEZpbHRlcmFibGUgPSBmYWxzZTtcblx0Y29uc3Qgb0Fubm90YXRpb24gPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofUBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc2ApO1xuXHRpZiAob0Fubm90YXRpb24gJiYgb0Fubm90YXRpb24uTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMpIHtcblx0XHRiSXNOb3RGaWx0ZXJhYmxlID0gb0Fubm90YXRpb24uTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuc29tZShmdW5jdGlvbiAocHJvcGVydHk6IGFueSkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID09PSBzQ29udGV4dFBhdGggfHwgcHJvcGVydHkuJFByb3BlcnR5UGF0aCA9PT0gc0NvbnRleHRQYXRoO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBiSXNOb3RGaWx0ZXJhYmxlO1xufVxuLy8gVE9ETyByZXdvcmsgdGhpcyFcbmZ1bmN0aW9uIF9pc0NvbnRleHRQYXRoRmlsdGVyYWJsZShvTW9kZWw6IGFueSwgc0VudGl0eVNldFBhdGg6IGFueSwgc0NvbnRleFBhdGg6IGFueSkge1xuXHRjb25zdCBzRnVsbFBhdGggPSBgJHtzRW50aXR5U2V0UGF0aH0vJHtzQ29udGV4UGF0aH1gLFxuXHRcdGFFU1BhcnRzID0gc0Z1bGxQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMCwgMiksXG5cdFx0YUNvbnRleHQgPSBzRnVsbFBhdGguc3BsaXQoXCIvXCIpLnNwbGljZSgyKTtcblx0bGV0IGJJc05vdEZpbHRlcmFibGUgPSBmYWxzZSxcblx0XHRzQ29udGV4dCA9IFwiXCI7XG5cblx0c0VudGl0eVNldFBhdGggPSBhRVNQYXJ0cy5qb2luKFwiL1wiKTtcblxuXHRiSXNOb3RGaWx0ZXJhYmxlID0gYUNvbnRleHQuc29tZShmdW5jdGlvbiAoaXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBhcnJheTogc3RyaW5nW10pIHtcblx0XHRpZiAoc0NvbnRleHQubGVuZ3RoID4gMCkge1xuXHRcdFx0c0NvbnRleHQgKz0gYC8ke2l0ZW19YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbnRleHQgPSBpdGVtO1xuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDIpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgXCIvQ3VzdG9tZXIvU2V0L1Byb3BlcnR5XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIGl0ZW0pO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRcdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVBhdGggPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzICYmXG5cdFx0XHRcdGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUHJvcGVydHlQYXRoOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5UGF0aC4kUHJvcGVydHlQYXRoID09PSBzVGFyZ2V0UHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcblx0XHRcdC8vbGFzdCBwYXRoIHNlZ21lbnRcblx0XHRcdGJJc05vdEZpbHRlcmFibGUgPSBfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNDb250ZXh0KTtcblx0XHR9IGVsc2UgaWYgKG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9LyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLyR7aXRlbX1gKSkge1xuXHRcdFx0Ly9jaGVjayBleGlzdGluZyBjb250ZXh0IHBhdGggYW5kIGluaXRpYWxpemUgaXRcblx0XHRcdGJJc05vdEZpbHRlcmFibGUgPSBfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNDb250ZXh0KTtcblx0XHRcdHNDb250ZXh0ID0gXCJcIjtcblx0XHRcdC8vc2V0IHRoZSBuZXcgRW50aXR5U2V0XG5cdFx0XHRzRW50aXR5U2V0UGF0aCA9IGAvJHtvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke2l0ZW19YCl9YDtcblx0XHR9XG5cdFx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGUgPT09IHRydWU7XG5cdH0pO1xuXHRyZXR1cm4gYklzTm90RmlsdGVyYWJsZTtcbn1cbi8vIFRPRE8gY2hlY2sgdXNlZCBwbGFjZXMgYW5kIHJld29yayB0aGlzXG5mdW5jdGlvbiBpc1Byb3BlcnR5RmlsdGVyYWJsZShcblx0b01vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c0VudGl0eVNldFBhdGg6IHN0cmluZyxcblx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdGJTa2lwSGlkZGVuRmlsdGVyPzogYm9vbGVhblxuKTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKHR5cGVvZiBzUHJvcGVydHkgIT09IFwic3RyaW5nXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzUHJvcGVydHkgcGFyYW1ldGVyIG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdH1cblx0bGV0IGJJc0ZpbHRlcmFibGU7XG5cblx0Ly8gUGFyYW1ldGVycyBzaG91bGQgYmUgcmVuZGVyZWQgYXMgZmlsdGVyZmllbGRzXG5cdGlmIChvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3Qgb05hdmlnYXRpb25Db250ZXh0ID0gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NFbnRpdHlTZXRQYXRofS8ke3NQcm9wZXJ0eX1gKSBhcyBDb250ZXh0O1xuXG5cdGlmICghYlNraXBIaWRkZW5GaWx0ZXIpIHtcblx0XHRpZiAoXG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCIpID09PSB0cnVlIHx8XG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCIpID09PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHNIaWRkZW5QYXRoID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbi8kUGF0aFwiKTtcblx0XHRjb25zdCBzSGlkZGVuRmlsdGVyUGF0aCA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXIvJFBhdGhcIik7XG5cblx0XHRpZiAoc0hpZGRlblBhdGggJiYgc0hpZGRlbkZpbHRlclBhdGgpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihub3Qob3IocGF0aEluTW9kZWwoc0hpZGRlblBhdGgpLCBwYXRoSW5Nb2RlbChzSGlkZGVuRmlsdGVyUGF0aCkpKSk7XG5cdFx0fSBlbHNlIGlmIChzSGlkZGVuUGF0aCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChwYXRoSW5Nb2RlbChzSGlkZGVuUGF0aCkpKTtcblx0XHR9IGVsc2UgaWYgKHNIaWRkZW5GaWx0ZXJQYXRoKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24obm90KHBhdGhJbk1vZGVsKHNIaWRkZW5GaWx0ZXJQYXRoKSkpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikubGVuZ3RoID09PSAyICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA8IDApIHtcblx0XHQvLyB0aGVyZSBpcyBubyBuYXZpZ2F0aW9uIGluIGVudGl0eVNldCBwYXRoIGFuZCBwcm9wZXJ0eSBwYXRoXG5cdFx0YklzRmlsdGVyYWJsZSA9ICFfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNQcm9wZXJ0eSk7XG5cdH0gZWxzZSB7XG5cdFx0YklzRmlsdGVyYWJsZSA9ICFfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc1Byb3BlcnR5KTtcblx0fVxuXHQvLyBjaGVjayBpZiB0eXBlIGNhbiBiZSB1c2VkIGZvciBmaWx0ZXJpbmdcblx0aWYgKGJJc0ZpbHRlcmFibGUgJiYgb05hdmlnYXRpb25Db250ZXh0KSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5RGF0YVR5cGUgPSBnZXRQcm9wZXJ0eURhdGFUeXBlKG9OYXZpZ2F0aW9uQ29udGV4dCk7XG5cdFx0aWYgKHNQcm9wZXJ0eURhdGFUeXBlKSB7XG5cdFx0XHRiSXNGaWx0ZXJhYmxlID0gYVZhbGlkVHlwZXMuaW5kZXhPZihzUHJvcGVydHlEYXRhVHlwZSkgIT09IC0xO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiSXNGaWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGJJc0ZpbHRlcmFibGU7XG59XG5mdW5jdGlvbiBnZXRTaGVsbFNlcnZpY2VzKG9Db250cm9sOiBhbnkpIHtcblx0cmV0dXJuIGdldEFwcENvbXBvbmVudChvQ29udHJvbCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xufVxuZnVuY3Rpb24gZ2V0SGFzaCgpIHtcblx0Y29uc3Qgc0hhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0cmV0dXJuIHNIYXNoLnNwbGl0KFwiJlwiKVswXTtcbn1cbmZ1bmN0aW9uIF9nZXRTT0ludGVudHMob09iamVjdFBhZ2VMYXlvdXQ6IGFueSwgb1NlbWFudGljT2JqZWN0OiBhbnksIG9QYXJhbTogYW55KSB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBDb21tb25VdGlscy5nZXRTaGVsbFNlcnZpY2VzKG9PYmplY3RQYWdlTGF5b3V0KTtcblx0cmV0dXJuIG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3Moe1xuXHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0cGFyYW1zOiBvUGFyYW1cblx0fSk7XG59XG4vLyBUTy1ETyBhZGQgdGhpcyBhcyBwYXJ0IG9mIGFwcGx5U2VtYW50aWNPYmplY3RtYXBwaW5ncyBsb2dpYyBpbiBJbnRlbnRCYXNlZG5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb25cbmZ1bmN0aW9uIF9jcmVhdGVNYXBwaW5ncyhvTWFwcGluZzogYW55KSB7XG5cdGNvbnN0IGFTT01hcHBpbmdzID0gW107XG5cdGNvbnN0IGFNYXBwaW5nS2V5cyA9IE9iamVjdC5rZXlzKG9NYXBwaW5nKTtcblx0bGV0IG9TZW1hbnRpY01hcHBpbmc7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hcHBpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdFwiTG9jYWxQcm9wZXJ0eVwiOiB7XG5cdFx0XHRcdFwiJFByb3BlcnR5UGF0aFwiOiBhTWFwcGluZ0tleXNbaV1cblx0XHRcdH0sXG5cdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogb01hcHBpbmdbYU1hcHBpbmdLZXlzW2ldXVxuXHRcdH07XG5cdFx0YVNPTWFwcGluZ3MucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0fVxuXG5cdHJldHVybiBhU09NYXBwaW5ncztcbn1cbi8qKlxuICogQHBhcmFtIGFMaW5rc1xuICogQHBhcmFtIGFFeGNsdWRlZEFjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0UGFyYW1zXG4gKiBAcGFyYW0gYUl0ZW1zXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3M6IGFueSwgYUV4Y2x1ZGVkQWN0aW9uczogYW55LCBvVGFyZ2V0UGFyYW1zOiBhbnksIGFJdGVtczogYW55KSB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgb0xpbmsgPSBhTGlua3NbaV07XG5cdFx0Y29uc3Qgc0ludGVudCA9IG9MaW5rLmludGVudDtcblx0XHRjb25zdCBzQWN0aW9uID0gc0ludGVudC5zcGxpdChcIi1cIilbMV0uc3BsaXQoXCI/XCIpWzBdO1xuXHRcdGlmIChhRXhjbHVkZWRBY3Rpb25zICYmIGFFeGNsdWRlZEFjdGlvbnMuaW5kZXhPZihzQWN0aW9uKSA9PT0gLTEpIHtcblx0XHRcdGFJdGVtcy5wdXNoKHtcblx0XHRcdFx0dGV4dDogb0xpbmsudGV4dCxcblx0XHRcdFx0dGFyZ2V0U2VtT2JqZWN0OiBzSW50ZW50LnNwbGl0KFwiI1wiKVsxXS5zcGxpdChcIi1cIilbMF0sXG5cdFx0XHRcdHRhcmdldEFjdGlvbjogc0FjdGlvbi5zcGxpdChcIn5cIilbMF0sXG5cdFx0XHRcdHRhcmdldFBhcmFtczogb1RhcmdldFBhcmFtc1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG4vKipcbiAqIEBwYXJhbSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1xuICogQHBhcmFtIG9CaW5kaW5nQ29udGV4dFxuICogQHBhcmFtIGFNYW5pZmVzdFNPSXRlbXNcbiAqIEBwYXJhbSBhTGlua3NcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzOiBhbnksIG9CaW5kaW5nQ29udGV4dDogYW55LCBhTWFuaWZlc3RTT0l0ZW1zOiBhbnksIGFMaW5rczogYW55KSB7XG5cdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhRXhjbHVkZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zID8gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zIDogW107XG5cdFx0Y29uc3QgYVNPTWFwcGluZ3MgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nID8gX2NyZWF0ZU1hcHBpbmdzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcpIDogW107XG5cdFx0Y29uc3Qgb1RhcmdldFBhcmFtcyA9IHsgbmF2aWdhdGlvbkNvbnRleHRzOiBvQmluZGluZ0NvbnRleHQsIHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNPTWFwcGluZ3MgfTtcblx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhTWFuaWZlc3RTT0l0ZW1zKTtcblx0fVxufVxuZnVuY3Rpb24gdXBkYXRlUmVsYXRlQXBwc01vZGVsKFxuXHR0aGlzOiBhbnksXG5cdG9CaW5kaW5nQ29udGV4dDogYW55LFxuXHRvRW50cnk6IGFueSxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IGFueSxcblx0YVNlbUtleXM6IGFueSxcblx0b01ldGFNb2RlbDogYW55LFxuXHRvTWV0YVBhdGg6IGFueVxuKSB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBnZXRTaGVsbFNlcnZpY2VzKG9PYmplY3RQYWdlTGF5b3V0KTtcblx0Y29uc3Qgb1BhcmFtOiBhbnkgPSB7fTtcblx0bGV0IHNDdXJyZW50U2VtT2JqID0gXCJcIixcblx0XHRzQ3VycmVudEFjdGlvbiA9IFwiXCI7XG5cdGxldCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcblx0bGV0IGFSZWxhdGVkQXBwc01lbnVJdGVtczogYW55W10gPSBbXTtcblx0bGV0IGFFeGNsdWRlZEFjdGlvbnM6IGFueVtdID0gW107XG5cblx0aWYgKG9FbnRyeSkge1xuXHRcdGlmIChhU2VtS2V5cyAmJiBhU2VtS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFTZW1LZXlzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGNvbnN0IHNTZW1LZXkgPSBhU2VtS2V5c1tqXS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpZiAoIW9QYXJhbVtzU2VtS2V5XSkge1xuXHRcdFx0XHRcdG9QYXJhbVtzU2VtS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzU2VtS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGZhbGxiYWNrIHRvIFRlY2huaWNhbCBLZXlzIGlmIG5vIFNlbWFudGljIEtleSBpcyBwcmVzZW50XG5cdFx0XHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29NZXRhUGF0aH0vJFR5cGUvJEtleWApO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0Y29uc3Qgc09iaktleSA9IGFUZWNobmljYWxLZXlzW2tleV07XG5cdFx0XHRcdGlmICghb1BhcmFtW3NPYmpLZXldKSB7XG5cdFx0XHRcdFx0b1BhcmFtW3NPYmpLZXldID0geyB2YWx1ZTogb0VudHJ5W3NPYmpLZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gTG9naWMgdG8gcmVhZCBhZGRpdGlvbmFsIFNPIGZyb20gbWFuaWZlc3QgYW5kIHVwZGF0ZWQgcmVsYXRlZGFwcHMgbW9kZWxcblxuXHRjb25zdCBvTWFuaWZlc3REYXRhID0gZ2V0VGFyZ2V0VmlldyhvT2JqZWN0UGFnZUxheW91dCkuZ2V0Vmlld0RhdGEoKTtcblx0Y29uc3QgYU1hbmlmZXN0U09JdGVtczogYW55W10gPSBbXTtcblx0aWYgKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cykge1xuXHRcdGNvbnN0IGFNYW5pZmVzdFNPS2V5cyA9IE9iamVjdC5rZXlzKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyk7XG5cdFx0Zm9yIChsZXQga2V5ID0gMDsga2V5IDwgYU1hbmlmZXN0U09LZXlzLmxlbmd0aDsga2V5KyspIHtcblx0XHRcdF9nZXRTT0ludGVudHMob09iamVjdFBhZ2VMYXlvdXQsIGFNYW5pZmVzdFNPS2V5c1trZXldLCBvUGFyYW0pXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdF9nZXRSZWxhdGVkSW50ZW50cy5iaW5kKFxuXHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1thTWFuaWZlc3RTT0tleXNba2V5XV0sXG5cdFx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIFNPIEludGVudHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCkge1xuXHRcdGNvbnN0IG9QYXJzZWRVcmwgPSBvU2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdHNDdXJyZW50U2VtT2JqID0gb1BhcnNlZFVybC5zZW1hbnRpY09iamVjdDsgLy8gQ3VycmVudCBTZW1hbnRpYyBPYmplY3Rcblx0XHRzQ3VycmVudEFjdGlvbiA9IG9QYXJzZWRVcmwuYWN0aW9uO1xuXHRcdHJldHVybiBfZ2V0U09JbnRlbnRzKG9PYmplY3RQYWdlTGF5b3V0LCBzQ3VycmVudFNlbU9iaiwgb1BhcmFtKTtcblx0fVxuXG5cdGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFMaW5rczogYW55KSB7XG5cdFx0XHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRQYXJhbXM6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBhQW5ub3RhdGlvbnNTT0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGAke29NZXRhUGF0aH1AYDtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gYCR7b01ldGFQYXRofS9AYDtcblx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpO1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHRpZiAoIW9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTykge1xuXHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVR5cGVBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zO1xuXHRcdFx0XHQvL1NraXAgc2FtZSBhcHBsaWNhdGlvbiBmcm9tIFJlbGF0ZWQgQXBwc1xuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zLnB1c2goc0N1cnJlbnRBY3Rpb24pO1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLm5hdmlnYXRpb25Db250ZXh0cyA9IG9CaW5kaW5nQ29udGV4dDtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3M7XG5cdFx0XHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFBbm5vdGF0aW9uc1NPSXRlbXMpO1xuXHRcdFx0XHRhUmVsYXRlZEFwcHNNZW51SXRlbXMgPSBhQW5ub3RhdGlvbnNTT0l0ZW1zLmNvbmNhdChhTWFuaWZlc3RTT0l0ZW1zKTtcblx0XHRcdFx0Ly8gSWYgbm8gYXBwIGluIGxpc3QsIHJlbGF0ZWQgYXBwcyBidXR0b24gd2lsbCBiZSBoaWRkZW5cblx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zLmxlbmd0aCA+IDApO1xuXHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvaXRlbXNcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZWFkIGxpbmtzXCIsIG9FcnJvcik7XG5cdFx0fSk7XG5cdHJldHVybiBhUmVsYXRlZEFwcHNNZW51SXRlbXM7XG59XG5mdW5jdGlvbiBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5QW5ub3RhdGlvbnM6IGFueSwgc0N1cnJlbnRTZW1PYmo6IGFueSkge1xuXHRjb25zdCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IHtcblx0XHRiSGFzRW50aXR5U2V0U086IGZhbHNlLFxuXHRcdGFVbmF2YWlsYWJsZUFjdGlvbnM6IFtdLFxuXHRcdGFNYXBwaW5nczogW11cblx0fTtcblx0bGV0IHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0sIHNBbm5vdGF0aW9uQWN0aW9uVGVybTtcblx0bGV0IHNRdWFsaWZpZXI7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlBbm5vdGF0aW9ucykge1xuXHRcdGlmIChrZXkuaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFwiKSA+IC0xICYmIG9FbnRpdHlBbm5vdGF0aW9uc1trZXldID09PSBzQ3VycmVudFNlbU9iaikge1xuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPID0gdHJ1ZTtcblx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RNYXBwaW5nXCI7XG5cdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcIjtcblxuXHRcdFx0aWYgKGtleS5pbmRleE9mKFwiI1wiKSA+IC0xKSB7XG5cdFx0XHRcdHNRdWFsaWZpZXIgPSBrZXkuc3BsaXQoXCIjXCIpWzFdO1xuXHRcdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gYCR7c0Fubm90YXRpb25NYXBwaW5nVGVybX0jJHtzUXVhbGlmaWVyfWA7XG5cdFx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IGAke3NBbm5vdGF0aW9uQWN0aW9uVGVybX0jJHtzUXVhbGlmaWVyfWA7XG5cdFx0XHR9XG5cblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncy5jb25jYXQob0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm1dKTtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zLmNvbmNhdChcblx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV1cblx0XHRcdCk7XG5cblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG59XG5mdW5jdGlvbiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZUxheW91dDogYW55KSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBvUGF0aCA9IG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRjb25zdCBvTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9QYXRoKTtcblx0Ly8gU2VtYW50aWMgS2V5IFZvY2FidWxhcnlcblx0Y29uc3Qgc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSA9IGAke29NZXRhUGF0aH0vYCArIGBAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5YDtcblx0Ly9TZW1hbnRpYyBLZXlzXG5cdGNvbnN0IGFTZW1LZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSk7XG5cdC8vIFVuYXZhaWxhYmxlIEFjdGlvbnNcblx0Y29uc3Qgb0VudHJ5ID0gb0JpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoIW9FbnRyeSkge1xuXHRcdG9CaW5kaW5nQ29udGV4dFxuXHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKHJlcXVlc3RlZE9iamVjdDogYW55KSB7XG5cdFx0XHRcdHJldHVybiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCByZXF1ZXN0ZWRPYmplY3QsIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwIGRldGFpbHNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoKTtcblx0fVxufVxuLyoqXG4gKiBAcGFyYW0gb0J1dHRvblxuICovXG5mdW5jdGlvbiBmbkZpcmVCdXR0b25QcmVzcyhvQnV0dG9uOiBhbnkpIHtcblx0Y29uc3QgYUF1dGhvcml6ZWRUeXBlcyA9IFtcInNhcC5tLkJ1dHRvblwiLCBcInNhcC5tLk92ZXJmbG93VG9vbGJhckJ1dHRvblwiXTtcblx0aWYgKG9CdXR0b24gJiYgYUF1dGhvcml6ZWRUeXBlcy5pbmRleE9mKG9CdXR0b24uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpICE9PSAtMSAmJiBvQnV0dG9uLmdldFZpc2libGUoKSAmJiBvQnV0dG9uLmdldEVuYWJsZWQoKSkge1xuXHRcdG9CdXR0b24uZmlyZVByZXNzKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbihzVmFsdWU6IGFueSkge1xuXHRpZiAoc1ZhbHVlID09PSBcInRydWVcIiB8fCBzVmFsdWUgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEFwcENvbXBvbmVudChvQ29udHJvbDogYW55KTogQXBwQ29tcG9uZW50IHtcblx0aWYgKG9Db250cm9sLmlzQShcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiKSkge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fVxuXHRjb25zdCBvT3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpO1xuXHRpZiAoIW9Pd25lcikge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Pd25lcik7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFRhcmdldFZpZXcob0NvbnRyb2w6IGFueSkge1xuXHRpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdG9Db250cm9sID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0Um9vdENvbnRyb2woKTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQShcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gb0NvbnRyb2w7XG59XG5cbmZ1bmN0aW9uIGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShzRmllbGRDb250cm9sUGF0aDogc3RyaW5nLCBvQXR0cmlidXRlOiBhbnkpIHtcblx0bGV0IGJJbmFwcGxpY2FibGUgPSBmYWxzZTtcblx0Y29uc3QgYVBhcnRzID0gc0ZpZWxkQ29udHJvbFBhdGguc3BsaXQoXCIvXCIpO1xuXHQvLyBzZW5zaXRpdmUgZGF0YSBpcyByZW1vdmVkIG9ubHkgaWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZC5cblx0aWYgKGFQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0YkluYXBwbGljYWJsZSA9IG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSAmJiBvQXR0cmlidXRlW2FQYXJ0c1swXV0uaGFzT3duUHJvcGVydHkoYVBhcnRzWzFdKSAmJiBvQXR0cmlidXRlW2FQYXJ0c1swXV1bYVBhcnRzWzFdXSA9PT0gMDtcblx0fSBlbHNlIHtcblx0XHRiSW5hcHBsaWNhYmxlID0gb0F0dHJpYnV0ZVtzRmllbGRDb250cm9sUGF0aF0gPT09IDA7XG5cdH1cblx0cmV0dXJuIGJJbmFwcGxpY2FibGU7XG59XG5mdW5jdGlvbiByZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzOiBhbnlbXSwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0Y29uc3QgYU91dEF0dHJpYnV0ZXMgPSBbXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBhQXR0cmlidXRlc1tpXS5lbnRpdHlTZXQsXG5cdFx0XHRvQXR0cmlidXRlID0gYUF0dHJpYnV0ZXNbaV0uY29udGV4dERhdGE7XG5cblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5jb250ZXh0XCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiJTQwb2RhdGEuY29udGV4dFwiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCIlNDBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCJTQVBfX01lc3NhZ2VzXCJdO1xuXHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZSk7XG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhUHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuXHRcdFx0Y29uc3Qgc1Byb3AgPSBhUHJvcGVydGllc1tqXSxcblx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7c0VudGl0eVNldH0vJHtzUHJvcH1AYCk7XG5cdFx0XHRpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCJdIHx8XG5cdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dFwiXSB8fFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5NZWFzdXJlXCJdXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlW3NQcm9wXTtcblx0XHRcdFx0fSBlbHNlIGlmIChhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0ZpZWxkQ29udHJvbCA9IGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXSAmJiBvRmllbGRDb250cm9sW1wiJEVudW1NZW1iZXJcIl0uc3BsaXQoXCIvXCIpWzFdID09PSBcIkluYXBwbGljYWJsZVwiKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZVtzUHJvcF07XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChvRmllbGRDb250cm9sW1wiJFBhdGhcIl0gJiYgQ29tbW9uVXRpbHMuaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlKG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSwgb0F0dHJpYnV0ZSkpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlW3NQcm9wXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0YU91dEF0dHJpYnV0ZXMucHVzaChvQXR0cmlidXRlKTtcblx0fVxuXG5cdHJldHVybiBhT3V0QXR0cmlidXRlcztcbn1cbmZ1bmN0aW9uIF9mbkNoZWNrSXNNYXRjaChvT2JqZWN0OiBhbnksIG9LZXlzVG9DaGVjazogYW55KSB7XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvS2V5c1RvQ2hlY2spIHtcblx0XHRpZiAob0tleXNUb0NoZWNrW3NLZXldICE9PSBvT2JqZWN0W3NLZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nLCBvRmlsdGVyPzogb2JqZWN0KSB7XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9gKSB8fCB7fSxcblx0XHRvUHJvcGVydGllczogYW55ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0VudGl0eVR5cGUuaGFzT3duUHJvcGVydHkoc0tleSkgJiZcblx0XHRcdCEvXlxcJC9pLnRlc3Qoc0tleSkgJiZcblx0XHRcdG9FbnRpdHlUeXBlW3NLZXldLiRraW5kICYmXG5cdFx0XHRfZm5DaGVja0lzTWF0Y2gob0VudGl0eVR5cGVbc0tleV0sIG9GaWx0ZXIgfHwgeyAka2luZDogXCJQcm9wZXJ0eVwiIH0pXG5cdFx0KSB7XG5cdFx0XHRvUHJvcGVydGllc1tzS2V5XSA9IG9FbnRpdHlUeXBlW3NLZXldO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1Byb3BlcnRpZXM7XG59XG5mdW5jdGlvbiBmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcpIHtcblx0bGV0IGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM7XG5cdGlmIChvTWV0YU1vZGVsICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9QE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zL1JlcXVpcmVkUHJvcGVydGllc2ApO1xuXHR9XG5cdHJldHVybiBhTWFuZGF0b3J5RmlsdGVyRmllbGRzO1xufVxuZnVuY3Rpb24gZm5HZXRJQk5BY3Rpb25zKG9Db250cm9sOiBhbnksIGFJQk5BY3Rpb25zOiBhbnlbXSkge1xuXHRjb25zdCBhQWN0aW9ucyA9IG9Db250cm9sICYmIG9Db250cm9sLmdldEFjdGlvbnMoKTtcblx0aWYgKGFBY3Rpb25zKSB7XG5cdFx0YUFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0FjdGlvbjogYW55KSB7XG5cdFx0XHRpZiAob0FjdGlvbi5pc0EoXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXIuQWN0aW9uVG9vbGJhckFjdGlvblwiKSkge1xuXHRcdFx0XHRvQWN0aW9uID0gb0FjdGlvbi5nZXRBY3Rpb24oKTtcblx0XHRcdH1cblx0XHRcdGlmIChvQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zLnB1c2gob0FjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFJQk5BY3Rpb25zO1xufVxuLyoqXG4gKiBAcGFyYW0gYUlCTkFjdGlvbnNcbiAqIEBwYXJhbSBvVmlld1xuICovXG5mdW5jdGlvbiBmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zOiBhbnlbXSwgb1ZpZXc6IFZpZXcpIHtcblx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdGNvbnN0IGZuR2V0TGlua3MgPSBmdW5jdGlvbiAob0RhdGE/OiBhbnkpIHtcblx0XHRpZiAob0RhdGEpIHtcblx0XHRcdGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMob0RhdGEpO1xuXHRcdFx0YUtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmIHNLZXkuaW5kZXhPZihcIm9kYXRhLmNvbnRleHRcIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IHsgdmFsdWU6IG9EYXRhW3NLZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoYUlCTkFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRhSUJOQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvSUJOQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5zZW1hbnRpY09iamVjdDtcblx0XHRcdFx0Y29uc3Qgc0FjdGlvbiA9IG9JQk5BY3Rpb24uZGF0YShcIklCTkRhdGFcIikuYWN0aW9uO1xuXHRcdFx0XHRDb21tb25VdGlscy5nZXRTaGVsbFNlcnZpY2VzKG9WaWV3KVxuXHRcdFx0XHRcdC5nZXRMaW5rcyh7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAoYUxpbms6IGFueSkge1xuXHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5zZXRWaXNpYmxlKG9JQk5BY3Rpb24uZ2V0VmlzaWJsZSgpICYmIGFMaW5rICYmIGFMaW5rLmxlbmd0aCA9PT0gMSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0aWYgKG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHQob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBhbnkpXG5cdFx0XHQ/LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIGZuR2V0TGlua3Mob0RhdGEpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRmbkdldExpbmtzKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0KHNGcmFtZXdvcmtLZXk6IHN0cmluZywgb1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgb1BhcmFtcz86IGFueSwgc0VudGl0eVNldE5hbWU/OiBzdHJpbmcpIHtcblx0bGV0IHNSZXNvdXJjZUtleSA9IHNGcmFtZXdvcmtLZXk7XG5cdGlmIChvUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRpZiAoc0VudGl0eVNldE5hbWUpIHtcblx0XHRcdC8vIFRoZXJlIGFyZSBjb25zb2xlIGVycm9ycyBsb2dnZWQgd2hlbiBtYWtpbmcgY2FsbHMgdG8gZ2V0VGV4dCBmb3Iga2V5cyB0aGF0IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlXG5cdFx0XHQvLyBmb3IgaW5zdGFuY2Uga2V5cyB3aGljaCBhcmUgc3VwcG9zZWQgdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBlLmcsIDxrZXk+fDxlbnRpdHlTZXQ+IHRvIG92ZXJyaWRlIGluc3RhbmNlIHNwZWNpZmljIHRleHRcblx0XHRcdC8vIGhlbmNlIGNoZWNrIGlmIHRleHQgZXhpc3RzICh1c2luZyBcImhhc1RleHRcIikgaW4gdGhlIHJlc291cmNlIGJ1bmRsZSBiZWZvcmUgY2FsbGluZyBcImdldFRleHRcIlxuXG5cdFx0XHQvLyBcImhhc1RleHRcIiBvbmx5IGNoZWNrcyBmb3IgdGhlIGtleSBpbiB0aGUgaW1tZWRpYXRlIHJlc291cmNlIGJ1bmRsZSBhbmQgbm90IGl0J3MgY3VzdG9tIGJ1bmRsZXNcblx0XHRcdC8vIGhlbmNlIHdlIG5lZWQgdG8gZG8gdGhpcyByZWN1cnJzaXZlbHkgdG8gY2hlY2sgaWYgdGhlIGtleSBleGlzdHMgaW4gYW55IG9mIHRoZSBidW5kbGVzIHRoZSBmb3JtcyB0aGUgRkUgcmVzb3VyY2UgYnVuZGxlXG5cdFx0XHRjb25zdCBiUmVzb3VyY2VLZXlFeGlzdHMgPSBfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKFxuXHRcdFx0XHQob1Jlc291cmNlQnVuZGxlIGFzIGFueSkuYUN1c3RvbUJ1bmRsZXMsXG5cdFx0XHRcdGAke3NGcmFtZXdvcmtLZXl9fCR7c0VudGl0eVNldE5hbWV9YFxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gaWYgcmVzb3VyY2Uga2V5IHdpdGggZW50aXR5IHNldCBuYW1lIGZvciBpbnN0YW5jZSBzcGVjaWZpYyB0ZXh0IG92ZXJyaWRpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG5cdFx0XHQvLyB0aGVuIHVzZSB0aGUgc2FtZSBrZXkgb3RoZXJ3aXNlIHVzZSB0aGUgRnJhbWV3b3JrIGtleVxuXHRcdFx0c1Jlc291cmNlS2V5ID0gYlJlc291cmNlS2V5RXhpc3RzID8gYCR7c0ZyYW1ld29ya0tleX18JHtzRW50aXR5U2V0TmFtZX1gIDogc0ZyYW1ld29ya0tleTtcblx0XHR9XG5cdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZUtleSwgb1BhcmFtcyk7XG5cdH1cblxuXHQvLyBkbyBub3QgYWxsb3cgb3ZlcnJpZGUgc28gZ2V0IHRleHQgZnJvbSB0aGUgaW50ZXJuYWwgYnVuZGxlIGRpcmVjdGx5XG5cdG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChzUmVzb3VyY2VLZXksIG9QYXJhbXMpO1xufVxuZnVuY3Rpb24gX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhhQ3VzdG9tQnVuZGxlczogYW55LCBzS2V5OiBhbnkpIHtcblx0aWYgKGFDdXN0b21CdW5kbGVzLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSBhQ3VzdG9tQnVuZGxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gYUN1c3RvbUJ1bmRsZXNbaV0uaGFzVGV4dChzS2V5KTtcblx0XHRcdC8vIHRleHQgZm91bmQgcmV0dXJuIHRydWVcblx0XHRcdGlmIChzVmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGFDdXN0b21CdW5kbGVzW2ldLmFDdXN0b21CdW5kbGVzLCBzS2V5KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uUGF0aChvQWN0aW9uOiBhbnksIGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbiwgc0FjdGlvbk5hbWU/OiBzdHJpbmcsIGJDaGVja1N0YXRpY1ZhbHVlPzogYm9vbGVhbikge1xuXHRzQWN0aW9uTmFtZSA9ICFzQWN0aW9uTmFtZSA/IG9BY3Rpb24uZ2V0T2JqZWN0KG9BY3Rpb24uZ2V0UGF0aCgpKSA6IHNBY3Rpb25OYW1lO1xuXHRsZXQgc0NvbnRleHRQYXRoID0gb0FjdGlvbi5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdH1cblx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0cmV0dXJuIG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYCk7XG5cdH1cblx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdHJldHVybiBgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0fTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0RW50aXR5U2V0TmFtZShvTWV0YU1vZGVsOiBhbnksIHNFbnRpdHlUeXBlOiBhbnkpIHtcblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG59XG5mdW5jdGlvbiBjb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5QW5ub3RhdGlvbnM6IGFueSwgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz86IGFueSkge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSxcblx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJiBvQ29sbGVjdGlvbkFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dFNlcGFyYXRlXCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0fVxuXHRcdC8vRGVmYXVsdCBzaG91bGQgYmUgVGV4dEZpcnN0IGlmIHRoZXJlIGlzIGEgVGV4dCBhbm5vdGF0aW9uIGFuZCBuZWl0aGVyIFRleHRPbmx5IG5vciBUZXh0TGFzdCBhcmUgc2V0XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiO1xuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn1cbmZ1bmN0aW9uIF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0OiBhbnkpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSl9LyRUeXBlYCk7XG59XG5mdW5jdGlvbiBfcmVxdWVzdE9iamVjdChzQWN0aW9uOiBhbnksIG9TZWxlY3RlZENvbnRleHQ6IGFueSwgc1Byb3BlcnR5OiBhbnkpIHtcblx0bGV0IG9Db250ZXh0ID0gb1NlbGVjdGVkQ29udGV4dDtcblx0Y29uc3QgbkJyYWNrZXRJbmRleCA9IHNBY3Rpb24uaW5kZXhPZihcIihcIik7XG5cblx0aWYgKG5CcmFja2V0SW5kZXggPiAtMSkge1xuXHRcdGNvbnN0IHNUYXJnZXRUeXBlID0gc0FjdGlvbi5zbGljZShuQnJhY2tldEluZGV4ICsgMSwgLTEpO1xuXHRcdGxldCBzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cblx0XHR3aGlsZSAoc0N1cnJlbnRUeXBlICE9PSBzVGFyZ2V0VHlwZSkge1xuXHRcdFx0Ly8gRmluZCBwYXJlbnQgYmluZGluZyBjb250ZXh0IGFuZCByZXRyaWV2ZSBlbnRpdHkgdHlwZVxuXHRcdFx0b0NvbnRleHQgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGRldGVybWluZSB0YXJnZXQgdHlwZSB0byByZXF1ZXN0IHByb3BlcnR5IHZhbHVlIGZvciBib3VuZCBhY3Rpb24gaW52b2NhdGlvblwiKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvQ29udGV4dC5yZXF1ZXN0T2JqZWN0KHNQcm9wZXJ0eSk7XG59XG5mdW5jdGlvbiBfcmVxdWVzdFByb3BlcnR5KG9TZWxlY3RlZENvbnRleHQ6IGFueSwgc0FjdGlvbjogYW55LCBzUHJvcGVydHk6IGFueSwgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogYW55KSB7XG5cdGNvbnN0IG9Qcm9taXNlID1cblx0XHRzUHJvcGVydHkgJiYgc1Byb3BlcnR5LmluZGV4T2YoXCIvXCIpID09PSAwXG5cdFx0XHQ/IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShzUHJvcGVydHksIG9TZWxlY3RlZENvbnRleHQuZ2V0TW9kZWwoKSlcblx0XHRcdDogX3JlcXVlc3RPYmplY3Qoc0FjdGlvbiwgb1NlbGVjdGVkQ29udGV4dCwgc1Byb3BlcnR5KTtcblxuXHRyZXR1cm4gb1Byb21pc2UudGhlbihmdW5jdGlvbiAodlByb3BlcnR5VmFsdWU6IGFueSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuXHRcdFx0dlByb3BlcnR5VmFsdWU6IHZQcm9wZXJ0eVZhbHVlLFxuXHRcdFx0b1NlbGVjdGVkQ29udGV4dDogb1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdHNBY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoXG5cdFx0fSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgYVJlcXVlc3RQcm9taXNlczogYW55KSB7XG5cdHJldHVybiBQcm9taXNlLmFsbChhUmVxdWVzdFByb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhUmVzdWx0czogYW55W10pIHtcblx0XHRcdGlmIChhUmVzdWx0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgYUFwcGxpY2FibGVDb250ZXh0czogYW55W10gPSBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChhUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRpZiAoYVJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aWYgKGFSZXN1bHQudlByb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYVJlc3VsdC5zRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YUFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlc3VsdHNbMF0uc0FjdGlvbiwgYUFwcGxpY2FibGVDb250ZXh0cywgYU5vdEFwcGxpY2FibGVDb250ZXh0cyk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cudHJhY2UoXCJDYW5ub3QgcmV0cmlldmUgcHJvcGVydHkgdmFsdWUgZnJvbSBwYXRoXCIsIG9FcnJvcik7XG5cdFx0fSk7XG59XG4vKipcbiAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHRcbiAqIEBwYXJhbSBzQWN0aW9uXG4gKiBAcGFyYW0gYUFwcGxpY2FibGVcbiAqIEBwYXJhbSBhTm90QXBwbGljYWJsZVxuICovXG5mdW5jdGlvbiBfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBzQWN0aW9uOiBhbnksIGFBcHBsaWNhYmxlOiBhbnksIGFOb3RBcHBsaWNhYmxlOiBhbnkpIHtcblx0Y29uc3Qgc0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4ID0gYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsXG5cdFx0b0ludGVybmFsTW9kZWwgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKTtcblx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7c0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS9hQXBwbGljYWJsZWAsIGFBcHBsaWNhYmxlKTtcblx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7c0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS9hTm90QXBwbGljYWJsZWAsIGFOb3RBcHBsaWNhYmxlKTtcbn1cbmZ1bmN0aW9uIHNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXA6IGFueSwgYVNlbGVjdGVkQ29udGV4dHM6IGFueSkge1xuXHRjb25zdCBhUHJvbWlzZXMgPSBbXTtcblx0Zm9yIChjb25zdCBzQWN0aW9uIGluIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHQvLyBSZXNldCBhbGwgcHJvcGVydGllcyBiZWZvcmUgY29tcHV0YXRpb25cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHR9KTtcblx0XHQvLyBOb3RlIHRoYXQgbm9uIGR5bmFtaWMgYWN0aW9ucyBhcmUgbm90IHByb2Nlc3NlZCBoZXJlLiBUaGV5IGFyZSBlbmFibGVkIGJlY2F1c2Vcblx0XHQvLyBvbmUgb3IgbW9yZSBhcmUgc2VsZWN0ZWQgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgY29uZGl0aW9uIGluIHRoZSB0ZW1wbGF0aW5nXG5cdFx0Ly8gaXMgdGhlbiB1bmRlZmluZWQgYW5kIHRodXMgdGhlIGJ1dHRvbiB0YWtlcyB0aGUgZGVmYXVsdCBlbmFibGluZywgd2hpY2ggaXMgdHJ1ZSFcblx0XHRjb25zdCBhQXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0YU5vdEFwcGxpY2FibGUgPSBbXSxcblx0XHRcdHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl0sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoID0gYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9iRW5hYmxlZGA7XG5cblx0XHRpZiAodHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJvYmplY3RcIiAmJiBzUHJvcGVydHkgIT09IG51bGwgJiYgc1Byb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGFTZWxlY3RlZENvbnRleHRzW2ldO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0Y29uc3Qgb1RyYW5zZm9ybWVkQmluZGluZyA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuXHRcdFx0XHRcdFx0ZnVuY3Rpb24gKG9CaW5kaW5nRXhwcmVzc2lvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb25zdGFudChvQ29udGV4dERhdGFbb0JpbmRpbmdFeHByZXNzaW9uLnBhdGhdKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCBzUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24ob1RyYW5zZm9ybWVkQmluZGluZyk7XG5cdFx0XHRcdFx0aWYgKHNSZXN1bHQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0FjdGlvbiwgYUFwcGxpY2FibGUsIGFOb3RBcHBsaWNhYmxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgYVJlcXVlc3RQcm9taXNlcyA9IFtdO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gYVNlbGVjdGVkQ29udGV4dHNbaV07XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBudWxsICYmICEhb0NvbnRleHREYXRhW2AjJHtzQWN0aW9ufWBdKSB7XG5cdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLnB1c2goX3JlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gV2hlbiBhbGwgcHJvcGVydHkgdmFsdWVzIGhhdmUgYmVlbiByZXRyaWV2ZWQsIHNldFxuXHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdC8vIFRoZSBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbiBpbiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuXHRcdFx0YVByb21pc2VzLnB1c2goX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFSZXF1ZXN0UHJvbWlzZXMpKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdE1hcHBpbmdzKHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBvUGFyYW1zOiBhbnksIGFTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnkpIHtcblx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdGlmIChzU2VtYW50aWNPYmplY3QgPT09IG9JdGVtLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRjb25zdCBvTWFwcGluZ3MgPSBvSXRlbS5pdGVtcztcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgb01hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID0gb01hcHBpbmdzW2ldLmtleTtcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPSBvTWFwcGluZ3NbaV0udmFsdWU7XG5cdFx0XHRcdGlmIChvUGFyYW1zW3NMb2NhbFByb3BlcnR5XSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc1NlbWFudGljT2JqZWN0UHJvcGVydHldID0gb1BhcmFtc1tzTG9jYWxQcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gb1BhcmFtcztcbn1cblxuZnVuY3Rpb24gX2dldERlZmF1bHRPcGVyYXRvcnMoc1Byb3BlcnR5VHlwZTogc3RyaW5nKSB7XG5cdC8vIG1kYyBkZWZpbmVzIHRoZSBmdWxsIHNldCBvZiBvcGVyYXRpb25zIHRoYXQgYXJlIG1lYW5pbmdmdWwgZm9yIGVhY2ggRWRtIFR5cGVcblx0Ly8gVE9ETyBSZXBsYWNlIHdpdGggbW9kZWwgLyBpbnRlcm5hbCB3YXkgb2YgcmV0cmlldmluZyB0aGUgYWN0dWFsIG1vZGVsIHR5cGUgdXNlZCBmb3IgdGhlIHByb3BlcnR5XG5cdGNvbnN0IG9EYXRhQ2xhc3MgPSBUeXBlVXRpbC5nZXREYXRhVHlwZUNsYXNzTmFtZShzUHJvcGVydHlUeXBlKTtcblx0Ly8gVE9ETyBuZWVkIHRvIHBhc3MgcHJvcGVyIGZvcm1hdE9wdGlvbnMsIGNvbnN0cmFpbnRzIGhlcmVcblx0Y29uc3Qgb0Jhc2VUeXBlID0gVHlwZVV0aWwuZ2V0QmFzZVR5cGUob0RhdGFDbGFzcywge30sIHt9KTtcblx0cmV0dXJuIEZpbHRlck9wZXJhdG9yVXRpbC5nZXRPcGVyYXRvcnNGb3JUeXBlKG9CYXNlVHlwZSk7XG59XG5mdW5jdGlvbiBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BzOiBhbnksIGFFeHByZXNzaW9uT3BzOiBhbnkpIHtcblx0Ly8gRnJvbSB0aGUgZGVmYXVsdCBzZXQgb2YgT3BlcmF0b3JzIGZvciB0aGUgQmFzZSBUeXBlLCBzZWxlY3QgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgQWxsb3dlZCBWYWx1ZS5cblx0Ly8gSW4gY2FzZSB0aGF0IG5vIG9wZXJhdG9ycyBhcmUgZm91bmQsIHJldHVybiB1bmRlZmluZWQgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXQgaXMgdXNlZC5cblx0Y29uc3QgYU9wZXJhdG9ycyA9IGFEZWZhdWx0T3BzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQ6IGFueSkge1xuXHRcdHJldHVybiBhRXhwcmVzc2lvbk9wcy5pbmRleE9mKHNFbGVtZW50KSA+IC0xO1xuXHR9KTtcblx0cmV0dXJuIGFPcGVyYXRvcnMudG9TdHJpbmcoKSB8fCB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKGFFeHByZXNzaW9uczogYW55KSB7XG5cdGNvbnN0IGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSA9IENvbW1vblV0aWxzLkFsbG93ZWRFeHByZXNzaW9uc1ByaW87XG5cblx0YUV4cHJlc3Npb25zLnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59XG5mdW5jdGlvbiBnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0c1Byb3BlcnR5OiBhbnksXG5cdHNFbnRpdHlTZXRQYXRoOiBhbnksXG5cdG9Db250ZXh0OiBhbnksXG5cdHNUeXBlPzogYW55LFxuXHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBhbnksXG5cdHNTZXR0aW5ncz86IGFueVxuKSB7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0VudGl0eVNldFBhdGgsIG9Db250ZXh0KTtcblx0Y29uc3QgYUVxdWFsc09wcyA9IFtcIkVRXCJdO1xuXHRjb25zdCBhU2luZ2xlUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0Y29uc3QgYVNpbmdsZVJhbmdlRFRCYXNpY09wcyA9IFtcIkVRXCIsIFwiQlRcIl07XG5cdGNvbnN0IGFTaW5nbGVWYWx1ZURhdGVPcHMgPSBbXG5cdFx0XCJUT0RBWVwiLFxuXHRcdFwiVE9NT1JST1dcIixcblx0XHRcIllFU1RFUkRBWVwiLFxuXHRcdFwiREFURVwiLFxuXHRcdFwiRklSU1REQVlXRUVLXCIsXG5cdFx0XCJMQVNUREFZV0VFS1wiLFxuXHRcdFwiRklSU1REQVlNT05USFwiLFxuXHRcdFwiTEFTVERBWU1PTlRIXCIsXG5cdFx0XCJGSVJTVERBWVFVQVJURVJcIixcblx0XHRcIkxBU1REQVlRVUFSVEVSXCIsXG5cdFx0XCJGSVJTVERBWVlFQVJcIixcblx0XHRcIkxBU1REQVlZRUFSXCJcblx0XTtcblx0Y29uc3QgYUJhc2ljRGF0ZVRpbWVPcHMgPSBbXCJFUVwiLCBcIkxFXCIsIFwiR0VcIiwgXCJCVFwiXTtcblx0Y29uc3QgYU11bHRpUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdGNvbnN0IGFTZWFyY2hFeHByZXNzaW9uT3BzID0gW1wiQ29udGFpbnNcIiwgXCJOb3RDb250YWluc1wiLCBcIlN0YXJ0c1dpdGhcIiwgXCJOb3RTdGFydHNXaXRoXCIsIFwiRW5kc1dpdGhcIiwgXCJOb3RFbmRzV2l0aFwiXTtcblx0Y29uc3QgYVNlbWFudGljRGF0ZU9wc0V4dCA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTdXBwb3J0ZWRPcGVyYXRpb25zKCk7XG5cdGNvbnN0IGJTZW1hbnRpY0RhdGVSYW5nZSA9IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gXCJ0cnVlXCIgfHwgYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSB0cnVlO1xuXHRsZXQgYVNlbWFudGljRGF0ZU9wczogYW55W10gPSBbXTtcblx0Y29uc3Qgb1NldHRpbmdzID0gdHlwZW9mIHNTZXR0aW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uoc1NldHRpbmdzKS5jdXN0b21EYXRhIDogc1NldHRpbmdzO1xuXG5cdGlmIChvQ29udGV4dC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIGFFcXVhbHNPcHMudG9TdHJpbmcoKTtcblx0fVxuXG5cdGlmIChvU2V0dGluZ3MgJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEZpbHRlck9wZXJhdGlvbnMob1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdH1cblx0Y29uc3QgYVNpbmdsZVJhbmdlRGF0ZVRpbWVPcHMgPSBhU2VtYW50aWNEYXRlT3BzLmZpbHRlcihmdW5jdGlvbiAoc09wZXJhdG9yKSB7XG5cdFx0cmV0dXJuIHNPcGVyYXRvciAhPT0gXCJEQVRFXCIgJiYgc09wZXJhdG9yICE9PSBcIkRBVEVSQU5HRVwiICYmIHNPcGVyYXRvciAhPT0gXCJGUk9NXCIgJiYgc09wZXJhdG9yICE9PSBcIlRPXCI7XG5cdH0pO1xuXHQvLyBHZXQgdGhlIGRlZmF1bHQgT3BlcmF0b3JzIGZvciB0aGlzIFByb3BlcnR5IFR5cGVcblx0bGV0IGFEZWZhdWx0T3BlcmF0b3JzID0gX2dldERlZmF1bHRPcGVyYXRvcnMoc1R5cGUpO1xuXG5cdC8vIElzIHRoZXJlIGEgRmlsdGVyIFJlc3RyaWN0aW9uIGRlZmluZWQgZm9yIHRoaXMgcHJvcGVydHk/XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zICYmIG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zICYmIG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0pIHtcblx0XHQvLyBFeHRlbmRpbmcgdGhlIGRlZmF1bHQgb3BlcmF0b3JzIGxpc3Qgd2l0aCBTZW1hbnRpYyBEYXRlIG9wdGlvbnMgREFURVJBTkdFLCBEQVRFLCBGUk9NIGFuZCBUT1xuXHRcdGlmIChiU2VtYW50aWNEYXRlUmFuZ2UpIHtcblx0XHRcdGFEZWZhdWx0T3BlcmF0b3JzID0gYVNlbWFudGljRGF0ZU9wc0V4dC5jb25jYXQoYURlZmF1bHRPcGVyYXRvcnMpO1xuXHRcdH1cblx0XHRjb25zdCBzQWxsb3dlZEV4cHJlc3Npb24gPSBDb21tb25VdGlscy5nZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0pO1xuXHRcdGxldCBzUmVzdHJpY3Rpb25zO1xuXHRcdC8vIEluIGNhc2UgbW9yZSB0aGFuIG9uZSBBbGxvd2VkIEV4cHJlc3Npb25zIGhhcyBiZWVuIGRlZmluZWQgZm9yIGEgcHJvcGVydHlcblx0XHQvLyBjaG9vc2UgdGhlIG1vc3QgcmVzdHJpY3RpdmUgQWxsb3dlZCBFeHByZXNzaW9uXG5cblx0XHQvLyBNdWx0aVZhbHVlIGhhcyBzYW1lIE9wZXJhdG9yIGFzIFNpbmdsZVZhbHVlLCBidXQgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgKG1heENvbmRpdGlvbnMpXG5cdFx0c3dpdGNoIChzQWxsb3dlZEV4cHJlc3Npb24pIHtcblx0XHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0XHRjb25zdCBhU2luZ2xlVmFsdWVPcHMgPSBzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiICYmIGJTZW1hbnRpY0RhdGVSYW5nZSA/IGFTaW5nbGVWYWx1ZURhdGVPcHMgOiBhRXF1YWxzT3BzO1xuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNpbmdsZVZhbHVlT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlWYWx1ZVwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYUVxdWFsc09wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0XHRcdGxldCBhRXhwcmVzc2lvbk9wcztcblx0XHRcdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdFx0XHRcdGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiKSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTZW1hbnRpY0RhdGVPcHM7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2luZ2xlUmFuZ2VEYXRlVGltZU9wcy5jb25jYXQoYUJhc2ljRGF0ZVRpbWVPcHMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZU9wcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZURUQmFzaWNPcHM7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2luZ2xlUmFuZ2VPcHM7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc09wZXJhdG9ycyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IHNPcGVyYXRvcnMgPyBzT3BlcmF0b3JzIDogXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlSYW5nZVwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYU11bHRpUmFuZ2VPcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhU2VhcmNoRXhwcmVzc2lvbk9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzLmNvbmNhdChhTXVsdGlSYW5nZU9wcykpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdC8vIEluIGNhc2UgQWxsb3dlZEV4cHJlc3Npb25zIGlzIG5vdCByZWNvZ25pc2VkLCB1bmRlZmluZWQgaW4gcmV0dXJuIHJlc3VsdHMgaW4gdGhlIGRlZmF1bHQgc2V0IG9mXG5cdFx0Ly8gb3BlcmF0b3JzIGZvciB0aGUgdHlwZS5cblx0XHRyZXR1cm4gc1Jlc3RyaWN0aW9ucztcblx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiKSB7XG5cdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHByb3ZpZGVkIGZvciB0eXBlIEVkbS5EYXRlIHRoZW4gYWxsIHRoZSBkZWZhdWx0XG5cdFx0Ly8gb3BlcmF0b3JzIGZvciB0aGUgdHlwZSBzaG91bGQgYmUgcmV0dXJuZWQgZXhjbHVkaW5nIHNlbWFudGljIG9wZXJhdG9ycyBmcm9tIHRoZSBsaXN0LlxuXHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHRcdGNvbnN0IGFPcGVyYXRvcnMgPSBhRGVmYXVsdE9wZXJhdG9ycy5maWx0ZXIoZnVuY3Rpb24gKHNFbGVtZW50OiBhbnkpIHtcblx0XHRcdHJldHVybiBhU2VtYW50aWNEYXRlT3BzLmluZGV4T2Yoc0VsZW1lbnQpIDwgMDtcblx0XHR9KTtcblx0XHRyZXR1cm4gYU9wZXJhdG9ycy50b1N0cmluZygpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJJbmZvKG9NZXRhTW9kZWw6IGFueSwgc0NvbnRleHRQYXRoOiBhbnkpIHtcblx0Y29uc3Qgc1BhcmFtZXRlckNvbnRleHRQYXRoID0gc0NvbnRleHRQYXRoLnN1YnN0cmluZygwLCBzQ29udGV4dFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyQ29udGV4dFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRjb25zdCBvUGFyYW1ldGVySW5mbzogYW55ID0ge307XG5cdGlmIChiUmVzdWx0Q29udGV4dCAmJiBzUGFyYW1ldGVyQ29udGV4dFBhdGggIT09IHNDb250ZXh0UGF0aCkge1xuXHRcdG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoID0gc1BhcmFtZXRlckNvbnRleHRQYXRoO1xuXHRcdG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc1BhcmFtZXRlckNvbnRleHRQYXRoKTtcblx0fVxuXHRyZXR1cm4gb1BhcmFtZXRlckluZm87XG59XG5mdW5jdGlvbiBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMob1Byb3BlcnR5TWV0YWRhdGE6IGFueSwgYVZhbGlkT3BlcmF0b3JzOiBhbnksIGFDdW11bGF0aXZlQ29uZGl0aW9uczogYW55LCBvU2VsZWN0T3B0aW9uOiBhbnkpIHtcblx0Y29uc3Qgb0NvbmRpdGlvbiA9IGdldENvbmRpdGlvbnMob1NlbGVjdE9wdGlvbiwgb1Byb3BlcnR5TWV0YWRhdGEpO1xuXHRpZiAob0NvbmRpdGlvbikge1xuXHRcdGlmICghYVZhbGlkT3BlcmF0b3JzIHx8IGFWYWxpZE9wZXJhdG9ycy5pbmRleE9mKG9Db25kaXRpb24ub3BlcmF0b3IpID4gLTEpIHtcblx0XHRcdGFDdW11bGF0aXZlQ29uZGl0aW9ucy5wdXNoKG9Db25kaXRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYUN1bXVsYXRpdmVDb25kaXRpb25zO1xufVxuLyoqXG4gKiBAcGFyYW0gc0NvbnRleHRQYXRoXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBzU2VsZWN0T3B0aW9uUHJvcFxuICogQHBhcmFtIG9Db25kaXRpb25zXG4gKiBAcGFyYW0gc0NvbmRpdGlvblBhdGhcbiAqIEBwYXJhbSBzQ29uZGl0aW9uUHJvcFxuICogQHBhcmFtIG9WYWxpZFByb3BlcnRpZXNcbiAqIEBwYXJhbSBvTWV0YU1vZGVsXG4gKiBAcGFyYW0gaXNQYXJhbWV0ZXJcbiAqL1xuZnVuY3Rpb24gYWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0c0NvbnRleHRQYXRoOiBhbnksXG5cdG9TZWxlY3Rpb25WYXJpYW50OiBhbnksXG5cdHNTZWxlY3RPcHRpb25Qcm9wOiBhbnksXG5cdG9Db25kaXRpb25zOiBhbnksXG5cdHNDb25kaXRpb25QYXRoOiBhbnksXG5cdHNDb25kaXRpb25Qcm9wOiBhbnksXG5cdG9WYWxpZFByb3BlcnRpZXM6IGFueSxcblx0b01ldGFNb2RlbDogYW55LFxuXHRpc1BhcmFtZXRlcjogYW55XG4pIHtcblx0bGV0IGFDb25kaXRpb25zOiBhbnlbXSA9IFtdLFxuXHRcdGFTZWxlY3RPcHRpb25zLFxuXHRcdGFWYWxpZE9wZXJhdG9ycztcblxuXHRpZiAoaXNQYXJhbWV0ZXIgfHwgQ29tbW9uVXRpbHMuaXNQcm9wZXJ0eUZpbHRlcmFibGUob01ldGFNb2RlbCwgc0NvbnRleHRQYXRoLCBzQ29uZGl0aW9uUHJvcCwgdHJ1ZSkpIHtcblx0XHRhU2VsZWN0T3B0aW9ucyA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzU2VsZWN0T3B0aW9uUHJvcCk7XG5cdFx0YVZhbGlkT3BlcmF0b3JzID0gaXNQYXJhbWV0ZXIgPyBbXCJFUVwiXSA6IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KHNDb25kaXRpb25Qcm9wLCBzQ29udGV4dFBhdGgsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eU1ldGFkYXRhID0gb1ZhbGlkUHJvcGVydGllc1tzQ29uZGl0aW9uUHJvcF07XG5cdFx0Ly8gQ3JlYXRlIGNvbmRpdGlvbnMgZm9yIGFsbCB0aGUgc2VsZWN0T3B0aW9ucyBvZiB0aGUgcHJvcGVydHlcblx0XHRhQ29uZGl0aW9ucyA9IGlzUGFyYW1ldGVyXG5cdFx0XHQ/IGFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucyhvUHJvcGVydHlNZXRhZGF0YSwgYVZhbGlkT3BlcmF0b3JzLCBhQ29uZGl0aW9ucywgYVNlbGVjdE9wdGlvbnNbMF0pXG5cdFx0XHQ6IGFTZWxlY3RPcHRpb25zLnJlZHVjZShhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMuYmluZChudWxsLCBvUHJvcGVydHlNZXRhZGF0YSwgYVZhbGlkT3BlcmF0b3JzKSwgYUNvbmRpdGlvbnMpO1xuXHRcdGlmIChhQ29uZGl0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGlmIChzQ29uZGl0aW9uUGF0aCkge1xuXHRcdFx0XHRvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNDb25kaXRpb25Qcm9wXSA9IG9Db25kaXRpb25zLmhhc093blByb3BlcnR5KHNDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3ApXG5cdFx0XHRcdFx0PyBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNDb25kaXRpb25Qcm9wXS5jb25jYXQoYUNvbmRpdGlvbnMpXG5cdFx0XHRcdFx0OiBhQ29uZGl0aW9ucztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Db25kaXRpb25zW3NDb25kaXRpb25Qcm9wXSA9IG9Db25kaXRpb25zLmhhc093blByb3BlcnR5KHNDb25kaXRpb25Qcm9wKVxuXHRcdFx0XHRcdD8gb0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucylcblx0XHRcdFx0XHQ6IGFDb25kaXRpb25zO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zKG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG9Db25kaXRpb25zOiBvYmplY3QsIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZykge1xuXHRjb25zdCBhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLFxuXHRcdG9WYWxpZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc0NvbnRleHRQYXRoKSxcblx0XHRhTWV0YWRhdFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvVmFsaWRQcm9wZXJ0aWVzKSxcblx0XHRvUGFyYW1ldGVySW5mbyA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlckluZm8ob01ldGFNb2RlbCwgc0NvbnRleHRQYXRoKSxcblx0XHRzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCxcblx0XHRvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzID0gb1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyxcblx0XHRiSGFzUGFyYW1ldGVycyA9ICEhb1BhcmFtZXRlckluZm8uY29udGV4dFBhdGggJiYgb1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyhvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzKS5sZW5ndGggPiAwO1xuXG5cdGlmIChiSGFzUGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGFNZXRhZGF0YVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzKTtcblx0XHRhTWV0YWRhdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNNZXRhZGF0YVBhcmFtZXRlcjogc3RyaW5nKSB7XG5cdFx0XHRsZXQgc1NlbGVjdE9wdGlvbk5hbWU7XG5cdFx0XHRpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKGAkUGFyYW1ldGVyLiR7c01ldGFkYXRhUGFyYW1ldGVyfWApKSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gYCRQYXJhbWV0ZXIuJHtzTWV0YWRhdGFQYXJhbWV0ZXJ9YDtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQYXJhbWV0ZXI7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgJFBhcmFtZXRlci4ke3NNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKX1gKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gYCRQYXJhbWV0ZXIuJHtzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCl9YDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlci5zdGFydHNXaXRoKFwiUF9cIikgJiZcblx0XHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKGAkUGFyYW1ldGVyLlBfJHtzTWV0YWRhdGFQYXJhbWV0ZXJ9YCkpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBgJFBhcmFtZXRlci5QXyR7c01ldGFkYXRhUGFyYW1ldGVyfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgUF8ke3NNZXRhZGF0YVBhcmFtZXRlcn1gKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGBQXyR7c01ldGFkYXRhUGFyYW1ldGVyfWA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzU2VsZWN0T3B0aW9uTmFtZSkge1xuXHRcdFx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0XHRcdHNQYXJhbWV0ZXJDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c01ldGFkYXRhUGFyYW1ldGVyLFxuXHRcdFx0XHRcdG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMsXG5cdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0YU1ldGFkYXRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKHNNZXRhZGF0YVByb3BlcnR5OiBzdHJpbmcpIHtcblx0XHRsZXQgc1NlbGVjdE9wdGlvbk5hbWU7XG5cdFx0aWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQcm9wZXJ0eSkpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHNNZXRhZGF0YVByb3BlcnR5LnN0YXJ0c1dpdGgoXCJQX1wiKSAmJlxuXHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5LnNsaWNlKDIsIHNNZXRhZGF0YVByb3BlcnR5Lmxlbmd0aCkpXG5cdFx0KSB7XG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVByb3BlcnR5LnNsaWNlKDIsIHNNZXRhZGF0YVByb3BlcnR5Lmxlbmd0aCk7XG5cdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoYFBfJHtzTWV0YWRhdGFQcm9wZXJ0eX1gKSkge1xuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBgUF8ke3NNZXRhZGF0YVByb3BlcnR5fWA7XG5cdFx0fVxuXHRcdGlmIChzU2VsZWN0T3B0aW9uTmFtZSkge1xuXHRcdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdFx0c0NvbnRleHRQYXRoLFxuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHNNZXRhZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRvVmFsaWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChzU2VsZWN0T3B0aW9uOiBhbnkpIHtcblx0XHRpZiAoc1NlbGVjdE9wdGlvbi5pbmRleE9mKFwiLlwiKSA+IDAgJiYgIXNTZWxlY3RPcHRpb24uaW5jbHVkZXMoXCIkUGFyYW1ldGVyXCIpKSB7XG5cdFx0XHRjb25zdCBzRnVsbENvbnRleHRQYXRoID0gYC8ke3NTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpfWAuc3RhcnRzV2l0aChzQ29udGV4dFBhdGgpXG5cdFx0XHRcdD8gYC8ke3NTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpfWBcblx0XHRcdFx0OiBgJHtzQ29udGV4dFBhdGh9LyR7c1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIil9YDsgLy8gY2hlY2sgaWYgdGhlIGZ1bGwgcGF0aCwgZWcgU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbCBleGlzdHMgaW4gdGhlIG1ldGFtb2RlbFxuXHRcdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNGdWxsQ29udGV4dFBhdGgucmVwbGFjZShcIlBfXCIsIFwiXCIpKSkge1xuXHRcdFx0XHRfY3JlYXRlQ29uZGl0aW9uc0Zvck5hdlByb3BlcnRpZXMoXG5cdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG9Db25kaXRpb25zXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG9Db25kaXRpb25zO1xufVxuLyoqXG4gKiBAcGFyYW0gc0Z1bGxDb250ZXh0UGF0aFxuICogQHBhcmFtIHNNYWluRW50aXR5U2V0UGF0aFxuICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50XG4gKiBAcGFyYW0gc1NlbGVjdE9wdGlvblxuICogQHBhcmFtIG9NZXRhTW9kZWxcbiAqIEBwYXJhbSBvQ29uZGl0aW9uc1xuICovXG5mdW5jdGlvbiBfY3JlYXRlQ29uZGl0aW9uc0Zvck5hdlByb3BlcnRpZXMoXG5cdHNGdWxsQ29udGV4dFBhdGg6IGFueSxcblx0c01haW5FbnRpdHlTZXRQYXRoOiBhbnksXG5cdG9TZWxlY3Rpb25WYXJpYW50OiBhbnksXG5cdHNTZWxlY3RPcHRpb246IGFueSxcblx0b01ldGFNb2RlbDogYW55LFxuXHRvQ29uZGl0aW9uczogYW55XG4pIHtcblx0bGV0IGFOYXZPYmplY3ROYW1lcyA9IHNTZWxlY3RPcHRpb24uc3BsaXQoXCIuXCIpO1xuXHQvLyBFZzogXCJTYWxlc09yZGVyTWFuYWdlLl9JdGVtLl9NYXRlcmlhbC5NYXRlcmlhbFwiIG9yIFwiX0l0ZW0uTWF0ZXJpYWxcIlxuXHRpZiAoYC8ke3NTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpfWAuc3RhcnRzV2l0aChzTWFpbkVudGl0eVNldFBhdGgpKSB7XG5cdFx0Y29uc3Qgc0Z1bGxQYXRoID0gKGAvJHtzU2VsZWN0T3B0aW9ufWAgYXMgYW55KS5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIiksXG5cdFx0XHRzTmF2UGF0aCA9IHNGdWxsUGF0aC5yZXBsYWNlKGAke3NNYWluRW50aXR5U2V0UGF0aH0vYCwgXCJcIik7XG5cdFx0YU5hdk9iamVjdE5hbWVzID0gc05hdlBhdGguc3BsaXQoXCIvXCIpO1xuXHR9XG5cdGxldCBzQ29uZGl0aW9uUGF0aCA9IFwiXCI7XG5cdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBhTmF2T2JqZWN0TmFtZXNbYU5hdk9iamVjdE5hbWVzLmxlbmd0aCAtIDFdOyAvLyBNYXRlcmlhbCBmcm9tIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWxcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTmF2T2JqZWN0TmFtZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNYWluRW50aXR5U2V0UGF0aH0vJHthTmF2T2JqZWN0TmFtZXNbaV0ucmVwbGFjZShcIlBfXCIsIFwiXCIpfWApLiRpc0NvbGxlY3Rpb24pIHtcblx0XHRcdHNDb25kaXRpb25QYXRoID0gYCR7c0NvbmRpdGlvblBhdGggKyBhTmF2T2JqZWN0TmFtZXNbaV19Ki9gOyAvLyBfSXRlbSovIGluIGNhc2Ugb2YgMTpuIGNhcmRpbmFsaXR5XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNDb25kaXRpb25QYXRoID0gYCR7c0NvbmRpdGlvblBhdGggKyBhTmF2T2JqZWN0TmFtZXNbaV19L2A7IC8vIF9JdGVtLyBpbiBjYXNlIG9mIDE6MSBjYXJkaW5hbGl0eVxuXHRcdH1cblx0XHRzTWFpbkVudGl0eVNldFBhdGggPSBgJHtzTWFpbkVudGl0eVNldFBhdGh9LyR7YU5hdk9iamVjdE5hbWVzW2ldfWA7XG5cdH1cblx0Y29uc3Qgc05hdlByb3BlcnR5UGF0aCA9IHNGdWxsQ29udGV4dFBhdGguc2xpY2UoMCwgc0Z1bGxDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpLFxuXHRcdG9WYWxpZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc05hdlByb3BlcnR5UGF0aCksXG5cdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKTtcblx0bGV0IHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZTtcblx0aWYgKG9WYWxpZFByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWU7XG5cdH0gZWxzZSBpZiAoc1Byb3BlcnR5TmFtZS5zdGFydHNXaXRoKFwiUF9cIikgJiYgb1ZhbGlkUHJvcGVydGllc1tzUHJvcGVydHlOYW1lLnJlcGxhY2UoXCJQX1wiLCBcIlwiKV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWUucmVwbGFjZShcIlBfXCIsIFwiXCIpO1xuXHR9IGVsc2UgaWYgKG9WYWxpZFByb3BlcnRpZXNbYFBfJHtzUHJvcGVydHlOYW1lfWBdICYmIGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgUF8ke3NQcm9wZXJ0eU5hbWV9YCkpIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGBQXyR7c1Byb3BlcnR5TmFtZX1gO1xuXHR9XG5cdGlmIChzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdC8vIGlmIHRoZXJlIGlzIG5vIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWwgeWV0IGluIHRoZSBvQ29uZGl0aW9uc1xuXHR9IGVsc2UgaWYgKCFzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdGRlbGV0ZSBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXTtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRzTmF2UHJvcGVydHlQYXRoLFxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRzQ29uZGl0aW9uUGF0aCxcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0b1ZhbGlkUHJvcGVydGllcyxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG1QYWdlQ29udGV4dDogYW55W10sIG9WaWV3OiBhbnkpIHtcblx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0cmV0dXJuIG9OYXZpZ2F0aW9uU2VydmljZS5taXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudChtUGFnZUNvbnRleHQsIG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpKTtcbn1cbmZ1bmN0aW9uIGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG1GaWx0ZXJzOiBhbnksIG9UYXJnZXRJbmZvOiBhbnksIG9GaWx0ZXJJbmZvPzogYW55KSB7XG5cdGxldCBzRmlsdGVyOiBhbnksXG5cdFx0c0xvdyA9IFwiXCIsXG5cdFx0c0hpZ2ggPSBudWxsO1xuXHRjb25zdCBmbkdldFNpZ25BbmRPcHRpb24gPSBmdW5jdGlvbiAoc09wZXJhdG9yOiBhbnksIHNMb3dWYWx1ZTogYW55LCBzSGlnaFZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBvU2VsZWN0T3B0aW9uU3RhdGUgPSB7XG5cdFx0XHRvcHRpb246IFwiXCIsXG5cdFx0XHRzaWduOiBcIklcIixcblx0XHRcdGxvdzogc0xvd1ZhbHVlLFxuXHRcdFx0aGlnaDogc0hpZ2hWYWx1ZVxuXHRcdH07XG5cdFx0c3dpdGNoIChzT3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCJDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBgKiR7b1NlbGVjdE9wdGlvblN0YXRlLmxvd31gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJCVFwiOlxuXHRcdFx0Y2FzZSBcIkxFXCI6XG5cdFx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdGNhc2UgXCJHVFwiOlxuXHRcdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IHNPcGVyYXRvcjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVE9EQVlcIjpcblx0XHRcdGNhc2UgXCJEQVRFXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVFUVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJFUVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJFUVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTm90Q29udGFpbnNcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UQlRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQlRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTm90U3RhcnRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ICs9IFwiKlwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbmRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gYCoke29TZWxlY3RPcHRpb25TdGF0ZS5sb3d9YDtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTm90RW1wdHlcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTkVcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLmxvdyA9IFwiXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5PVExFXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkxFXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5PVEdFXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkdFXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5PVExUXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkxUXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5PVEdUXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkdUXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0TG9nLndhcm5pbmcoYCR7c09wZXJhdG9yfSBpcyBub3Qgc3VwcG9ydGVkLiAke3NGaWx0ZXJ9IGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgbmF2aWdhdGlvbiBjb250ZXh0YCk7XG5cdFx0fVxuXHRcdHJldHVybiBvU2VsZWN0T3B0aW9uU3RhdGU7XG5cdH07XG5cdGNvbnN0IG9GaWx0ZXJDb25kaXRpb25zID0gbUZpbHRlcnMuZmlsdGVyQ29uZGl0aW9ucztcblx0Y29uc3Qgb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QgPSBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0ID8gbUZpbHRlcnMuZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdCA6IHt9O1xuXHRjb25zdCBvVGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ID0gb1RhcmdldEluZm8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA/IG9UYXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgOiB7fTtcblx0Y29uc3QgYWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCA9IGZ1bmN0aW9uIChzZWxlY3Rpb25WYXJpYW50OiBhbnksIHNGaWx0ZXJOYW1lOiBhbnksIHNQYXRoPzogYW55KSB7XG5cdFx0Y29uc3QgYUZpbHRlcnMgPSBvRmlsdGVyQ29uZGl0aW9uc1tzRmlsdGVyTmFtZV07XG5cdFx0Zm9yIChjb25zdCBpdGVtIGluIGFGaWx0ZXJzKSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyID0gYUZpbHRlcnNbaXRlbV07XG5cdFx0XHRzTG93ID0gKG9GaWx0ZXIudmFsdWVzWzBdICYmIG9GaWx0ZXIudmFsdWVzWzBdLnRvU3RyaW5nKCkpIHx8IFwiXCI7XG5cdFx0XHRzSGlnaCA9IChvRmlsdGVyLnZhbHVlc1sxXSAmJiBvRmlsdGVyLnZhbHVlc1sxXS50b1N0cmluZygpKSB8fCBudWxsO1xuXHRcdFx0aWYgKG9GaWx0ZXIub3BlcmF0b3IgPT09IFwiVE9EQVlcIiB8fCBvRmlsdGVyLm9wZXJhdG9yID09PSBcIkRBVEVcIikge1xuXHRcdFx0XHRjb25zdCBhRmlsdGVyID1cblx0XHRcdFx0XHRvRmlsdGVySW5mb1swXS5hRmlsdGVycyAmJlxuXHRcdFx0XHRcdG9GaWx0ZXJJbmZvWzBdLmFGaWx0ZXJzLmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmaWx0ZXIuc1BhdGggPT09IHNGaWx0ZXJOYW1lO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRzTG93ID0gKGFGaWx0ZXIgJiYgYUZpbHRlclswXS5vVmFsdWUxKSB8fCBvRmlsdGVySW5mb1swXS5vVmFsdWUxIHx8IFwiXCI7XG5cdFx0XHRcdHNIaWdoID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9TZWxlY3RPcHRpb25WYWx1ZXMgPSBmbkdldFNpZ25BbmRPcHRpb24ob0ZpbHRlci5vcGVyYXRvciwgc0xvdywgc0hpZ2gpO1xuXHRcdFx0aWYgKG9TZWxlY3RPcHRpb25WYWx1ZXMub3B0aW9uKSB7XG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdHNQYXRoID8gc1BhdGggOiBzRmlsdGVyTmFtZSxcblx0XHRcdFx0XHRvU2VsZWN0T3B0aW9uVmFsdWVzLnNpZ24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5vcHRpb24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5sb3csXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5oaWdoXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZvciAoc0ZpbHRlciBpbiBvRmlsdGVyQ29uZGl0aW9ucykge1xuXHRcdC8vIG9ubHkgYWRkIHRoZSBmaWx0ZXIgdmFsdWVzIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFNWIGFscmVhZHlcblx0XHRpZiAoIW9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzRmlsdGVyKSkge1xuXHRcdFx0Ly8gVE9ETyA6IGN1c3RvbSBmaWx0ZXJzIHNob3VsZCBiZSBpZ25vcmVkIG1vcmUgZ2VuZXJpY2FsbHlcblx0XHRcdGlmIChzRmlsdGVyID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAob1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCAmJiBzRmlsdGVyIGluIG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFtzRmlsdGVyXSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBpZiBwcm9wZXJ0eSB3YXMgd2l0aG91dCBjb25mbGljdCBpbiBwYWdlIGNvbnRleHQgdGhlbiBhZGQgcGF0aCBmcm9tIHBhZ2UgY29udGV4dCB0byBTVlxuXHRcdFx0aWYgKHNGaWx0ZXIgaW4gb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3Rbc0ZpbHRlcl0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKSB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0cmV0dXJuIGJJc1N0aWNreU1vZGUgJiYgYlVJRWRpdGFibGU7XG59XG4vKipcbiAqIEBwYXJhbSBhTWFuZGF0b3J5RmlsdGVyRmllbGRzXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXG4gKi9cbmZ1bmN0aW9uIGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koYU1hbmRhdG9yeUZpbHRlckZpZWxkczogYW55W10sIG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IGFueSkge1xuXHRpZiAob1NlbGVjdGlvblZhcmlhbnQgJiYgYU1hbmRhdG9yeUZpbHRlckZpZWxkcyAmJiBhTWFuZGF0b3J5RmlsdGVyRmllbGRzLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hbmRhdG9yeUZpbHRlckZpZWxkcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYVNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKFwiRGlzcGxheUN1cnJlbmN5XCIpLFxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyAmJiBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzLmdldFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiKTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU1hbmRhdG9yeUZpbHRlckZpZWxkc1tpXS4kUHJvcGVydHlQYXRoID09PSBcIkRpc3BsYXlDdXJyZW5jeVwiICYmXG5cdFx0XHRcdCghYVNWT3B0aW9uIHx8ICFhU1ZPcHRpb24ubGVuZ3RoKSAmJlxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uICYmXG5cdFx0XHRcdGFEZWZhdWx0U1ZPcHRpb24ubGVuZ3RoXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uID0gYURlZmF1bHRTVk9wdGlvblswXTtcblx0XHRcdFx0Y29uc3Qgc1NpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdO1xuXHRcdFx0XHRjb25zdCBzT3B0aW9uID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiT3B0aW9uXCJdO1xuXHRcdFx0XHRjb25zdCBzTG93ID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiTG93XCJdO1xuXHRcdFx0XHRjb25zdCBzSGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiLCBzU2lnbiwgc09wdGlvbiwgc0xvdywgc0hpZ2gpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogYW55LCBvVmlldz86IGFueSkge1xuXHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofS9gKS4kS2V5O1xuXHRjb25zdCBhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzOiBhbnkgPSBbXTtcblx0Y29uc3QgYUltbXV0YWJsZVZpc2libGVGaWVsZHM6IGFueSA9IFtdO1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofS9gKTtcblx0Zm9yIChjb25zdCBpdGVtIGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IG9Bbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofS8ke2l0ZW19QGApIHx8IHt9LFxuXHRcdFx0XHRiSXNLZXkgPSBhVGVjaG5pY2FsS2V5cy5pbmRleE9mKGl0ZW0pID4gLTEsXG5cdFx0XHRcdGJJc0ltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRcdGJJc05vbkNvbXB1dGVkID0gIW9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSxcblx0XHRcdFx0YklzVmlzaWJsZSA9ICFvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdLFxuXHRcdFx0XHRiSXNDb21wdXRlZERlZmF1bHRWYWx1ZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZERlZmF1bHRWYWx1ZVwiXSxcblx0XHRcdFx0YklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCA9XG5cdFx0XHRcdFx0YklzS2V5ICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRUeXBlID09PSBcIkVkbS5HdWlkXCJcblx0XHRcdFx0XHRcdD8gYklzQ29tcHV0ZWREZWZhdWx0VmFsdWUgJiYgb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoYklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCB8fCAoYklzS2V5ICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRUeXBlICE9PSBcIkVkbS5HdWlkXCIpKSAmJlxuXHRcdFx0XHRiSXNOb25Db21wdXRlZCAmJlxuXHRcdFx0XHRiSXNWaXNpYmxlXG5cdFx0XHQpIHtcblx0XHRcdFx0YU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcy5wdXNoKGl0ZW0pO1xuXHRcdFx0fSBlbHNlIGlmIChiSXNJbW11dGFibGUgJiYgYklzTm9uQ29tcHV0ZWQgJiYgYklzVmlzaWJsZSkge1xuXHRcdFx0XHRhSW1tdXRhYmxlVmlzaWJsZUZpZWxkcy5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJJc05vbkNvbXB1dGVkICYmIGJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlICYmIG9WaWV3KSB7XG5cdFx0XHRcdGNvbnN0IG9EaWFnbm9zdGljcyA9IGdldEFwcENvbXBvbmVudChvVmlldykuZ2V0RGlhZ25vc3RpY3MoKTtcblx0XHRcdFx0Y29uc3Qgc01lc3NhZ2UgPSBcIkNvcmUuQ29tcHV0ZWREZWZhdWx0VmFsdWUgaXMgaWdub3JlZCBhcyBDb3JlLkNvbXB1dGVkIGlzIGFscmVhZHkgc2V0IHRvIHRydWVcIjtcblx0XHRcdFx0b0RpYWdub3N0aWNzLmFkZElzc3VlKFxuXHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdFx0XHRJc3N1ZVNldmVyaXR5Lk1lZGl1bSxcblx0XHRcdFx0XHRzTWVzc2FnZSxcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZSxcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uQW5ub3RhdGlvbnM/Lklnbm9yZWRBbm5vdGF0aW9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zKHNQYXRoLCBvTWV0YU1vZGVsKTtcblx0aWYgKGFSZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0YVJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHk6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0Fubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9LyR7c1Byb3BlcnR5fUBgKSxcblx0XHRcdFx0YklzVmlzaWJsZSA9ICFvQW5ub3RhdGlvbnMgfHwgIW9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRpZiAoYklzVmlzaWJsZSAmJiBhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzLmluZGV4T2Yoc1Byb3BlcnR5KSA9PT0gLTEgJiYgYUltbXV0YWJsZVZpc2libGVGaWVsZHMuaW5kZXhPZihzUHJvcGVydHkpID09PSAtMSkge1xuXHRcdFx0XHRhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzLnB1c2goc1Byb3BlcnR5KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcy5jb25jYXQoYUltbXV0YWJsZVZpc2libGVGaWVsZHMpO1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1aXJlZFByb3BlcnRpZXMoc1BhdGg6IGFueSwgb01ldGFNb2RlbDogYW55LCBiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRjb25zdCBhUGF0aFBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzOiBhbnkgPSBbXTtcblx0bGV0IGFSZXF1aXJlZFByb3BlcnRpZXNXaXRoUGF0aHM6IGFueSA9IFtdO1xuXHRsZXQgb0VudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QGApO1xuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVBhdGhQYXJ0c1thUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTsgLy8gcmVtb3ZpbmcgTmF2aWdhdGlvblByb3BlcnR5IGZyb20gdGhlIGVuZC5cblx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IGFQYXRoUGFydHMuam9pbihcIi9cIik7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5nZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9NZXRhTW9kZWwsIHNQYXJlbnRFbnRpdHlTZXRQYXRoLCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke3NOYXZpZ2F0aW9uUGF0aH1AYCk7XG5cdFx0aWYgKENvbW1vblV0aWxzLmhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyhvTmF2aWdhdGlvblJlc3RyaWN0aW9ucywgdHJ1ZSwgYkNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zKSkge1xuXHRcdFx0YVJlcXVpcmVkUHJvcGVydGllc1dpdGhQYXRocyA9IGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9uc1xuXHRcdFx0XHQ/IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiVXBkYXRlUmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllc1xuXHRcdFx0XHQ6IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiSW5zZXJ0UmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllcztcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0KCFhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzIHx8ICFhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzLmxlbmd0aCkgJiZcblx0XHRcdENvbW1vblV0aWxzLmhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyhvRW50aXR5U2V0QW5ub3RhdGlvbnMsIGZhbHNlLCBiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpXG5cdFx0KSB7XG5cdFx0XHRhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzID0gQ29tbW9uVXRpbHMuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUFubm90YXRpb25zKFxuXHRcdFx0XHRvRW50aXR5U2V0QW5ub3RhdGlvbnMsXG5cdFx0XHRcdGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoQ29tbW9uVXRpbHMuaGFzUmVzdHJpY3RlZFByb3BlcnRpZXNJbkFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgZmFsc2UsIGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9ucykpIHtcblx0XHRhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzID0gQ29tbW9uVXRpbHMuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgYkNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zKTtcblx0fVxuXHRhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzLmZvckVhY2goZnVuY3Rpb24gKG9SZXF1aXJlZFByb3BlcnR5OiBhbnkpIHtcblx0XHRjb25zdCBzUHJvcGVydHkgPSBvUmVxdWlyZWRQcm9wZXJ0eVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0YVJlcXVpcmVkUHJvcGVydGllcy5wdXNoKHNQcm9wZXJ0eSk7XG5cdH0pO1xuXHRyZXR1cm4gYVJlcXVpcmVkUHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyhzUGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFJlcXVpcmVkUHJvcGVydGllcyhzUGF0aCwgb01ldGFNb2RlbCk7XG59XG5cbmZ1bmN0aW9uIGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMoc1BhdGg6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdHJldHVybiBDb21tb25VdGlscy5nZXRSZXF1aXJlZFByb3BlcnRpZXMoc1BhdGgsIG9NZXRhTW9kZWwsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tQW5ub3RhdGlvbnMob0Fubm90YXRpb25zOiBhbnksIGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9uczogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdGlmIChiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpIHtcblx0XHRyZXR1cm4gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllcztcblx0fVxuXHRyZXR1cm4gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gaGFzUmVzdHJpY3RlZFByb3BlcnRpZXNJbkFubm90YXRpb25zKFxuXHRvQW5ub3RhdGlvbnM6IGFueSxcblx0YklzTmF2aWdhdGlvblJlc3RyaWN0aW9uczogYm9vbGVhbiA9IGZhbHNlLFxuXHRiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnM6IGJvb2xlYW4gPSBmYWxzZVxuKSB7XG5cdGlmIChiSXNOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0aWYgKGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdFx0cmV0dXJuIG9Bbm5vdGF0aW9ucyAmJiBvQW5ub3RhdGlvbnNbXCJVcGRhdGVSZXN0cmljdGlvbnNcIl0gJiYgb0Fubm90YXRpb25zW1wiVXBkYXRlUmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllc1xuXHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0OiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Bbm5vdGF0aW9ucyAmJiBvQW5ub3RhdGlvbnNbXCJJbnNlcnRSZXN0cmljdGlvbnNcIl0gJiYgb0Fubm90YXRpb25zW1wiSW5zZXJ0UmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllcyA/IHRydWUgOiBmYWxzZTtcblx0fSBlbHNlIGlmIChiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpIHtcblx0XHRyZXR1cm4gb0Fubm90YXRpb25zICYmXG5cdFx0XHRvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5VcGRhdGVSZXN0cmljdGlvbnNcIl0gJiZcblx0XHRcdG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1wiXS5SZXF1aXJlZFByb3BlcnRpZXNcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gb0Fubm90YXRpb25zICYmXG5cdFx0b0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zXCJdICYmXG5cdFx0b0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllc1xuXHRcdD8gdHJ1ZVxuXHRcdDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldFVzZXJEZWZhdWx0cyhcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRhUGFyYW1ldGVyczogYW55W10sXG5cdG9Nb2RlbDogSlNPTk1vZGVsLFxuXHRiSXNBY3Rpb246IGJvb2xlYW4sXG5cdGJJc0NyZWF0ZT86IGJvb2xlYW4sXG5cdG9BY3Rpb25EZWZhdWx0VmFsdWVzPzogYW55XG4pIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9LFxuXHRcdFx0b1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRpZiAoIW9TaGVsbFNlcnZpY2VzLmhhc1VTaGVsbCgpKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gYC8ke29QYXJhbWV0ZXIuJE5hbWV9YFxuXHRcdFx0XHRcdDogb1BhcmFtZXRlci5nZXRQYXRoKCkuc2xpY2Uob1BhcmFtZXRlci5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gYklzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlcyAmJiBiSXNDcmVhdGUpIHtcblx0XHRcdFx0XHRpZiAob0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2VzLmdldFN0YXJ0dXBBcHBTdGF0ZShvQXBwQ29tcG9uZW50KS50aGVuKGZ1bmN0aW9uIChvU3RhcnR1cEFwcFN0YXRlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EYXRhID0gb1N0YXJ0dXBBcHBTdGF0ZS5nZXREYXRhKCkgfHwge30sXG5cdFx0XHRcdGFFeHRlbmRlZFBhcmFtZXRlcnMgPSAob0RhdGEuc2VsZWN0aW9uVmFyaWFudCAmJiBvRGF0YS5zZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMpIHx8IFtdO1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogYW55KSB7XG5cdFx0XHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBiSXNBY3Rpb25cblx0XHRcdFx0XHQ/IGAvJHtvUGFyYW1ldGVyLiROYW1lfWBcblx0XHRcdFx0XHQ6IG9QYXJhbWV0ZXIuZ2V0UGF0aCgpLnNsaWNlKG9QYXJhbWV0ZXIuZ2V0UGF0aCgpLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyTmFtZSA9IGJJc0FjdGlvbiA/IHNQcm9wZXJ0eU5hbWUuc2xpY2UoMSkgOiBzUHJvcGVydHlOYW1lO1xuXHRcdFx0XHRpZiAob0FjdGlvbkRlZmF1bHRWYWx1ZXMgJiYgYklzQ3JlYXRlKSB7XG5cdFx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9BY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb1N0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXVswXSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYUV4dGVuZGVkUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFFeHRlbmRlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9FeHRlbmRlZFBhcmFtZXRlciA9IGFFeHRlbmRlZFBhcmFtZXRlcnNbaV07XG5cdFx0XHRcdFx0XHRpZiAob0V4dGVuZGVkUGFyYW1ldGVyLlByb3BlcnR5TmFtZSA9PT0gc1BhcmFtZXRlck5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1JhbmdlID0gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHQ/IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXNbb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGggLSAxXVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRpZiAob1JhbmdlICYmIG9SYW5nZS5TaWduID09PSBcIklcIiAmJiBvUmFuZ2UuT3B0aW9uID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb1JhbmdlLkxvdyk7IC8vIGhpZ2ggaXMgaWdub3JlZCB3aGVuIE9wdGlvbj1FUVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXNvbHZlKHRydWUpO1xuXHRcdH0pO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUob1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnksIG9JbmJvdW5kUGFyYW1ldGVyczogYW55KSB7XG5cdGNvbnN0IG9JbmJvdW5kcyA9IG9JbmJvdW5kUGFyYW1ldGVycyxcblx0XHRhQ3JlYXRlUGFyYW1ldGVycyA9IG9JbmJvdW5kc1xuXHRcdFx0PyBPYmplY3Qua2V5cyhvSW5ib3VuZHMpLmZpbHRlcihmdW5jdGlvbiAoc1BhcmFtZXRlcjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9JbmJvdW5kc1tzUGFyYW1ldGVyXS51c2VGb3JDcmVhdGU7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdO1xuXHRsZXQgb1JldDtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhQ3JlYXRlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNDcmVhdGVQYXJhbWV0ZXIgPSBhQ3JlYXRlUGFyYW1ldGVyc1tpXTtcblx0XHRjb25zdCBhVmFsdWVzID0gb1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVyc1tzQ3JlYXRlUGFyYW1ldGVyXTtcblx0XHRpZiAoYVZhbHVlcyAmJiBhVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0b1JldCA9IG9SZXQgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0XHRcdG9SZXRbc0NyZWF0ZVBhcmFtZXRlcl0gPSBhVmFsdWVzWzBdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1JldDtcbn1cbmZ1bmN0aW9uIGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQ6IGFueSkge1xuXHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nOiBhbnlbXSA9IFtdO1xuXHRpZiAob091dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB8fCBbXTtcblx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc1BhcmFtOiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmQucGFyYW1ldGVyc1tzUGFyYW1dO1xuXHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcImJpbmRpbmdcIikge1xuXHRcdFx0XHRcdC8vIHVzaW5nIHRoZSBmb3JtYXQgb2YgVUkuTWFwcGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcdFx0XHRcIkxvY2FsUHJvcGVydHlcIjoge1xuXHRcdFx0XHRcdFx0XHRcIiRQcm9wZXJ0eVBhdGhcIjogb01hcHBpbmcudmFsdWUudmFsdWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogc1BhcmFtXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRvIGNoZWNrIGlmIHRoZSBzZW1hbnRpY09iamVjdCBNYXBwaW5nIGlzIGRvbmUgZm9yIHRoZSBzYW1lIGxvY2FsIHByb3BlcnR5IG1vcmUgdGhhdCBvbmNlIHRoZW4gZmlyc3Qgb25lIHdpbGwgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0gIT09XG5cdFx0XHRcdFx0XHRcdFx0b1NlbWFudGljTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFTZW1hbnRpY09iamVjdE1hcHBpbmc7XG59XG5mdW5jdGlvbiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24ob1ZpZXdEYXRhOiBhbnksIG9Dcm9zc05hdjogYW55KSB7XG5cdGNvbnN0IG9IZWFkZXJGYWNldEl0ZW1zOiBhbnkgPSB7fTtcblx0bGV0IHNJZDtcblx0Y29uc3Qgb0NvbnRyb2xDb25maWcgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb247XG5cdGZvciAoY29uc3QgY29uZmlnIGluIG9Db250cm9sQ29uZmlnKSB7XG5cdFx0aWYgKGNvbmZpZy5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xIHx8IGNvbmZpZy5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpID4gLTEpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0b0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uICYmXG5cdFx0XHRcdG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbi50YXJnZXRPdXRib3VuZCAmJlxuXHRcdFx0XHRvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24udGFyZ2V0T3V0Ym91bmQub3V0Ym91bmRcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBzT3V0Ym91bmQgPSBvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24udGFyZ2V0T3V0Ym91bmQub3V0Ym91bmQ7XG5cdFx0XHRcdGNvbnN0IG9PdXRib3VuZCA9IG9Dcm9zc05hdltzT3V0Ym91bmRdO1xuXHRcdFx0XHRpZiAob091dGJvdW5kLnNlbWFudGljT2JqZWN0ICYmIG9PdXRib3VuZC5hY3Rpb24pIHtcblx0XHRcdFx0XHRpZiAoY29uZmlnLmluZGV4T2YoXCJDaGFydFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIk1pY3JvQ2hhcnRMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIkhlYWRlckRQTGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQpO1xuXHRcdFx0XHRcdG9IZWFkZXJGYWNldEl0ZW1zW3NJZF0gPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvT3V0Ym91bmQuYWN0aW9uLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYENyb3NzIG5hdmlnYXRpb24gb3V0Ym91bmQgaXMgY29uZmlndXJlZCB3aXRob3V0IHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciAke3NPdXRib3VuZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0hlYWRlckZhY2V0SXRlbXM7XG59XG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIHZNYXBwaW5nczogb2JqZWN0KSB7XG5cdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb01hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0KG9NYXBwaW5nc1tpXVtcIkxvY2FsUHJvcGVydHlcIl0gJiYgb01hcHBpbmdzW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQob01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmXG5cdFx0XHRcdG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXVtcIiRQYXRoXCJdKTtcblx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9XG5cdFx0XHRvTWFwcGluZ3NbaV1bXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRpZiAob1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KSkge1xuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cblx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWw6IGFueSwgc1BhdGg6IGFueSkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdGApO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0YCR7c1BhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc2Bcblx0XHQpO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzID0gW3sgc2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCB9XTtcblx0XHRjb25zdCBvU2VtYW50aWNPYmplY3QgPSB7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0XG5cdFx0fTtcblx0XHRyZXNvbHZlKHtcblx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc1BhdGgsXG5cdFx0XHRzZW1hbnRpY09iamVjdEZvckdldExpbmtzOiBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyxcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1xuXHRcdH0pO1xuXHR9KS5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRMb2cuZXJyb3IoXCJFcnJvciBpbiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoXCIsIG9FcnJvcik7XG5cdH0pO1xufVxuZnVuY3Rpb24gZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbChhR2V0TGlua3NQcm9taXNlczogYW55LCBhU2VtYW50aWNPYmplY3RzOiBhbnksIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBzQ3VycmVudEhhc2g6IGFueSkge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYUdldExpbmtzUHJvbWlzZXMpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFWYWx1ZXM6IGFueVtdKSB7XG5cdFx0XHRsZXQgYUxpbmtzLFxuXHRcdFx0XHRfb0xpbmssXG5cdFx0XHRcdF9zTGlua0ludGVudEFjdGlvbixcblx0XHRcdFx0YUZpbmFsTGlua3M6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0ZpbmFsU2VtYW50aWNPYmplY3RzOiBhbnkgPSB7fTtcblx0XHRcdGNvbnN0IGJJbnRlbnRIYXNBY3Rpb25zID0gZnVuY3Rpb24gKHNJbnRlbnQ6IGFueSwgYUFjdGlvbnM6IGFueSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGludGVudCBpbiBhQWN0aW9ucykge1xuXHRcdFx0XHRcdGlmIChpbnRlbnQgPT09IHNJbnRlbnQpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRmb3IgKGxldCBrID0gMDsgayA8IGFWYWx1ZXMubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0YUxpbmtzID0gYVZhbHVlc1trXTtcblx0XHRcdFx0aWYgKGFMaW5rcyAmJiBhTGlua3MubGVuZ3RoID4gMCAmJiBhTGlua3NbMF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdDogYW55ID0ge307XG5cdFx0XHRcdFx0bGV0IG9UbXAgPSB7fTtcblx0XHRcdFx0XHRsZXQgc0FsdGVybmF0ZVBhdGg7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGFGaW5hbExpbmtzLnB1c2goW10pO1xuXHRcdFx0XHRcdFx0bGV0IGhhc1RhcmdldHNOb3RGaWx0ZXJlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0bGV0IGhhc1RhcmdldHMgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGZvciAobGV0IGlMaW5rQ291bnQgPSAwOyBpTGlua0NvdW50IDwgYUxpbmtzW2ldWzBdLmxlbmd0aDsgaUxpbmtDb3VudCsrKSB7XG5cdFx0XHRcdFx0XHRcdF9vTGluayA9IGFMaW5rc1tpXVswXVtpTGlua0NvdW50XTtcblx0XHRcdFx0XHRcdFx0X3NMaW5rSW50ZW50QWN0aW9uID0gX29MaW5rICYmIF9vTGluay5pbnRlbnQuc3BsaXQoXCI/XCIpWzBdLnNwbGl0KFwiLVwiKVsxXTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIShfb0xpbmsgJiYgX29MaW5rLmludGVudCAmJiBfb0xpbmsuaW50ZW50LmluZGV4T2Yoc0N1cnJlbnRIYXNoKSA9PT0gMCkpIHtcblx0XHRcdFx0XHRcdFx0XHRoYXNUYXJnZXRzTm90RmlsdGVyZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGlmICghYkludGVudEhhc0FjdGlvbnMoX3NMaW5rSW50ZW50QWN0aW9uLCBhU2VtYW50aWNPYmplY3RzW2tdLnVuYXZhaWxhYmxlQWN0aW9ucykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFGaW5hbExpbmtzW2ldLnB1c2goX29MaW5rKTtcblx0XHRcdFx0XHRcdFx0XHRcdGhhc1RhcmdldHMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b1RtcCA9IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IGFTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdHBhdGg6IGFTZW1hbnRpY09iamVjdHNba10ucGF0aCxcblx0XHRcdFx0XHRcdFx0SGFzVGFyZ2V0czogaGFzVGFyZ2V0cyxcblx0XHRcdFx0XHRcdFx0SGFzVGFyZ2V0c05vdEZpbHRlcmVkOiBoYXNUYXJnZXRzTm90RmlsdGVyZWRcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRpZiAob1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzQWx0ZXJuYXRlUGF0aCA9IGFTZW1hbnRpY09iamVjdHNba10ucGF0aC5yZXBsYWNlKC9cXC8vZywgXCJfXCIpO1xuXHRcdFx0XHRcdFx0aWYgKG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSxcblx0XHRcdFx0XHRcdFx0b1RtcFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0TmFtZSA9IE9iamVjdC5rZXlzKG9TZW1hbnRpY09iamVjdClbMF07XG5cdFx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9GaW5hbFNlbWFudGljT2JqZWN0cykuaW5jbHVkZXMoc1NlbWFudGljT2JqZWN0TmFtZSkpIHtcblx0XHRcdFx0XHRcdG9GaW5hbFNlbWFudGljT2JqZWN0c1tzU2VtYW50aWNPYmplY3ROYW1lXSA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdG9GaW5hbFNlbWFudGljT2JqZWN0c1tzU2VtYW50aWNPYmplY3ROYW1lXSxcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W3NTZW1hbnRpY09iamVjdE5hbWVdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHMgPSBPYmplY3QuYXNzaWduKG9GaW5hbFNlbWFudGljT2JqZWN0cywgb1NlbWFudGljT2JqZWN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YUZpbmFsTGlua3MgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKE9iamVjdC5rZXlzKG9GaW5hbFNlbWFudGljT2JqZWN0cykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XCJzZW1hbnRpY3NUYXJnZXRzXCIsXG5cdFx0XHRcdFx0bWVyZ2VPYmplY3RzKG9GaW5hbFNlbWFudGljT2JqZWN0cywgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VtYW50aWNzVGFyZ2V0c1wiKSlcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIG9GaW5hbFNlbWFudGljT2JqZWN0cztcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcImZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWw6IENhbm5vdCByZWFkIGxpbmtzXCIsIG9FcnJvcik7XG5cdFx0fSk7XG59XG5mdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZShvQXBwQ29tcG9uZW50OiBhbnksIG9WaWV3OiBhbnksIG9NZXRhTW9kZWw6IGFueSwgc1BhdGg6IGFueSkge1xuXHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgob01ldGFNb2RlbCwgc1BhdGgpO1xufVxuZnVuY3Rpb24gZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKG9Db250cm9sbGVyOiBhbnksIHNQYWdlTW9kZWw6IHN0cmluZykge1xuXHRjb25zdCBfZm5maW5kVmFsdWVzSGVscGVyID0gZnVuY3Rpb24gKG9iajogYW55LCBrZXk6IGFueSwgbGlzdDogYW55KSB7XG5cdFx0aWYgKCFvYmopIHtcblx0XHRcdHJldHVybiBsaXN0O1xuXHRcdH1cblx0XHRpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdGZvciAoY29uc3QgaSBpbiBvYmopIHtcblx0XHRcdFx0bGlzdCA9IGxpc3QuY29uY2F0KF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqW2ldLCBrZXksIFtdKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGlzdDtcblx0XHR9XG5cdFx0aWYgKG9ialtrZXldKSB7XG5cdFx0XHRsaXN0LnB1c2gob2JqW2tleV0pO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygb2JqID09IFwib2JqZWN0XCIgJiYgb2JqICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5rZXlzKG9iaik7XG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bGlzdCA9IGxpc3QuY29uY2F0KF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqW2NoaWxkcmVuW2ldXSwga2V5LCBbXSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBsaXN0O1xuXHR9O1xuXHRjb25zdCBfZm5maW5kVmFsdWVzID0gZnVuY3Rpb24gKG9iajogYW55LCBrZXk6IGFueSkge1xuXHRcdHJldHVybiBfZm5maW5kVmFsdWVzSGVscGVyKG9iaiwga2V5LCBbXSk7XG5cdH07XG5cdGNvbnN0IF9mbkRlbGV0ZUR1cGxpY2F0ZVNlbWFudGljT2JqZWN0cyA9IGZ1bmN0aW9uIChhU2VtYW50aWNPYmplY3RQYXRoOiBhbnkpIHtcblx0XHRyZXR1cm4gYVNlbWFudGljT2JqZWN0UGF0aC5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlOiBhbnksIGluZGV4OiBhbnkpIHtcblx0XHRcdHJldHVybiBhU2VtYW50aWNPYmplY3RQYXRoLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcblx0XHR9KTtcblx0fTtcblx0Y29uc3Qgb1ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cblx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNQcm9taXNlcyA9IFtdO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udHJvbGxlci5nZXRPd25lckNvbXBvbmVudCgpO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBvUGFnZU1vZGVsID0gb0NvbXBvbmVudC5nZXRNb2RlbChzUGFnZU1vZGVsKS5nZXREYXRhKCk7XG5cdFx0aWYgKEpTT04uc3RyaW5naWZ5KG9QYWdlTW9kZWwpID09PSBcInt9XCIpIHtcblx0XHRcdG9QYWdlTW9kZWwgPSBvQ29tcG9uZW50LmdldE1vZGVsKHNQYWdlTW9kZWwpLl9nZXRPYmplY3QoXCIvXCIsIHVuZGVmaW5lZCk7XG5cdFx0fVxuXHRcdGxldCBhU2VtYW50aWNPYmplY3RzRm91bmQgPSBfZm5maW5kVmFsdWVzKG9QYWdlTW9kZWwsIFwic2VtYW50aWNPYmplY3RQYXRoXCIpO1xuXHRcdGFTZW1hbnRpY09iamVjdHNGb3VuZCA9IF9mbkRlbGV0ZUR1cGxpY2F0ZVNlbWFudGljT2JqZWN0cyhhU2VtYW50aWNPYmplY3RzRm91bmQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBDb21tb25VdGlscy5nZXRTaGVsbFNlcnZpY2VzKG9BcHBDb21wb25lbnQpO1xuXHRcdGxldCBzQ3VycmVudEhhc2ggPSBDb21tb25VdGlscy5nZXRIYXNoKCk7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzID0gW107XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0czogYW55W10gPSBbXTtcblx0XHRsZXQgc1BhdGg7XG5cdFx0bGV0IF9vU2VtYW50aWNPYmplY3Q7XG5cblx0XHRpZiAoc0N1cnJlbnRIYXNoICYmIHNDdXJyZW50SGFzaC5pbmRleE9mKFwiP1wiKSAhPT0gLTEpIHtcblx0XHRcdC8vIHNDdXJyZW50SGFzaCBjYW4gY29udGFpbiBxdWVyeSBzdHJpbmcsIGN1dCBpdCBvZmYhXG5cdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbWFudGljT2JqZWN0c0ZvdW5kLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzUGF0aCA9IGFTZW1hbnRpY09iamVjdHNGb3VuZFtpXTtcblx0XHRcdGFTZW1hbnRpY09iamVjdHNQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0UHJvbWlzZShvQXBwQ29tcG9uZW50LCBvVmlldywgb01ldGFNb2RlbCwgc1BhdGgpKTtcblx0XHR9XG5cblx0XHRpZiAoYVNlbWFudGljT2JqZWN0c1Byb21pc2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRQcm9taXNlLmFsbChhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhVmFsdWVzOiBhbnlbXSkge1xuXHRcdFx0XHRcdGNvbnN0IGFHZXRMaW5rc1Byb21pc2VzID0gW107XG5cdFx0XHRcdFx0bGV0IHNTZW1PYmpFeHByZXNzaW9uO1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZCA9IGFWYWx1ZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgPT09IFwib2JqZWN0XCJcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRzU2VtT2JqRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QuJFBhdGgpKTtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCA9IHNTZW1PYmpFeHByZXNzaW9uO1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3NbMF0uc2VtYW50aWNPYmplY3QgPSBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0X29TZW1hbnRpY09iamVjdCA9IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZFtqXTtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0X29TZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHRfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdCEoX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC5pbmRleE9mKFwie1wiKSA9PT0gMClcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RzRm9yR2V0TGlua3MucHVzaChfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MpO1xuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogX29TZW1hbnRpY09iamVjdC51bmF2YWlsYWJsZUFjdGlvbnMsXG5cdFx0XHRcdFx0XHRcdFx0cGF0aDogYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkW2pdLnNlbWFudGljT2JqZWN0UGF0aFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0YUdldExpbmtzUHJvbWlzZXMucHVzaChvU2hlbGxTZXJ2aWNlSGVscGVyLmdldExpbmtzV2l0aENhY2hlKFtfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3NdKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBDb21tb25VdGlscy51cGRhdGVTZW1hbnRpY1RhcmdldHMoYUdldExpbmtzUHJvbWlzZXMsIGFTZW1hbnRpY09iamVjdHMsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0N1cnJlbnRIYXNoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcImZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVRhYmxlOiBDYW5ub3QgZ2V0IFNlbWFudGljIE9iamVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBhbnksIHNSZXN0cmljdGlvbjogYW55KSB7XG5cdGNvbnN0IEZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLkZpbHRlclJlc3RyaWN0aW9ucztcblx0aWYgKHNSZXN0cmljdGlvbiA9PT0gRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMgfHwgc1Jlc3RyaWN0aW9uID09PSBGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUykge1xuXHRcdGxldCBhUHJvcHMgPSBbXTtcblx0XHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYVByb3BzO1xuXHR9IGVsc2UgaWYgKHNSZXN0cmljdGlvbiA9PT0gRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlMpIHtcblx0XHRjb25zdCBtQWxsb3dlZEV4cHJlc3Npb25zOiBhbnkgPSB7fTtcblx0XHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucykge1xuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSkge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdLnB1c2gob1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9uc107XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbUFsbG93ZWRFeHByZXNzaW9ucztcblx0fVxuXHQvLyBEZWZhdWx0IHJldHVybiB0aGUgRmlsdGVyUmVzdHJpY3Rpb25zIEFubm90YXRpb25cblx0cmV0dXJuIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uO1xufVxuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKHNFbnRpdHlTZXRQYXRoOiBhbnksIG9NZXRhTW9kZWw6IGFueSkge1xuXHRjb25zdCBvUmV0OiBhbnkgPSB7fSxcblx0XHRGaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5GaWx0ZXJSZXN0cmljdGlvbnMsXG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9ucyA9IHNFbnRpdHlTZXRQYXRoID8gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zYCkgOiB7fTtcblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuUkVRVUlSRURfUFJPUEVSVElFU10gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdO1xuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXSA9XG5cdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykgfHwge307XG5cblx0Y29uc3QgYVBhdGhQYXJ0cyA9IHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKTtcblxuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Ly8gSW4gbm9ybWFsIGZpbHRlcmJhciBzY2VuYXJpb3Mgc0VudGl0eVNldFBhdGggaXMgb2YgdGhlIGZvcm1hdCBcIi9DdXN0b21lclwiLlxuXHRcdC8vIEJ1dCwgSW4gY2FzZSBvZiBzRW50aXR5U2V0UGF0aCBvZiBmb3JtYXQgXCIvQ3VzdG9tZXIvU2V0XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFQYXRoUGFydHNbYVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7IC8vIHJlbW92aW5nIE5hdmlnYXRpb25Qcm9wZXJ0eSBmcm9tIHRoZSBlbmQuXG5cdFx0Y29uc3Qgc1BhcmVudEVudGl0eVNldFBhdGggPSBhUGF0aFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTWV0YU1vZGVsLCBzUGFyZW50RW50aXR5U2V0UGF0aCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVNdLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXS5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXVxuXHRcdCk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TKSB8fCB7fSxcblx0XHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBvUmV0O1xufVxuZnVuY3Rpb24gdGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZTogYW55LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IGFueSwgb09wdGlvbnM6IGFueSwgb01vZGlmaWVyPzogYW55KSB7XG5cdG9PcHRpb25zID0gb09wdGlvbnMgfHwge307XG5cdGlmIChvTW9kaWZpZXIpIHtcblx0XHRyZXR1cm4gb01vZGlmaWVyLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMudmlldykudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgRmxleCByZXR1cm5zIGFuIEhUTUxDb2xsZWN0aW9uIGFzIHRlbXBsYXRpbmcgcmVzdWx0IGluIFhNTCB0aW1lLlxuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIiAmJiBvRnJhZ21lbnQubGVuZ3RoID4gMCA/IG9GcmFnbWVudFswXSA6IG9GcmFnbWVudDtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbG9hZE1hY3JvTGlicmFyeSgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0XHRYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSxcblx0XHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBvRnJhZ21lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRpZDogb09wdGlvbnMuaWQsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50LFxuXHRcdFx0XHRcdGNvbnRyb2xsZXI6IG9PcHRpb25zLmNvbnRyb2xsZXJcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0U2luZ2xldG9uUGF0aChwYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0XHRwcm9wZXJ0eU5hbWUgPSBwYXJ0cy5wb3AoKSxcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdGVudGl0eVNldCA9IG5hdmlnYXRpb25QYXRoICYmIG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke25hdmlnYXRpb25QYXRofWApO1xuXHRpZiAoZW50aXR5U2V0Py4ka2luZCA9PT0gXCJTaW5nbGV0b25cIikge1xuXHRcdGNvbnN0IHNpbmdsZXRvbk5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRyZXR1cm4gYC8ke3NpbmdsZXRvbk5hbWV9LyR7cHJvcGVydHlOYW1lfWA7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShwYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsKSB7XG5cdGlmICghcGF0aCB8fCAhbW9kZWwpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHR9XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHQvLyBGaW5kIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzZXQgZnJvbSB0aGUgcHJvcGVydHkgcGF0aCBhbmQgY2hlY2sgd2hldGhlciBpdCBpcyBhIHNpbmdsZXRvbi5cblx0Y29uc3QgcmVzb2x2ZWRQYXRoID0gZ2V0U2luZ2xldG9uUGF0aChwYXRoLCBtZXRhTW9kZWwpO1xuXHRpZiAocmVzb2x2ZWRQYXRoKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHJlc29sdmVkUGF0aCk7XG5cdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZy5yZXF1ZXN0VmFsdWUoKTtcblx0fVxuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG59XG5mdW5jdGlvbiBhZGRFdmVudFRvQmluZGluZ0luZm8ob0NvbnRyb2w6IENvbnRyb2wsIHNFdmVudE5hbWU6IHN0cmluZywgZkhhbmRsZXI6IEZ1bmN0aW9uKSB7XG5cdGxldCBvQmluZGluZ0luZm86IGFueTtcblx0Y29uc3Qgc2V0QmluZGluZ0luZm8gPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKG9CaW5kaW5nSW5mbykge1xuXHRcdFx0aWYgKCFvQmluZGluZ0luZm8uZXZlbnRzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5ldmVudHMgPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghb0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSkge1xuXHRcdFx0XHRvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdID0gZkhhbmRsZXI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmT3JpZ2luYWxIYW5kbGVyID0gb0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXTtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0XHRcdGZIYW5kbGVyLmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHRcdGZPcmlnaW5hbEhhbmRsZXIuYXBwbHkodGhpcywgLi4uYXJncyk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdChvQ29udHJvbCBhcyBhbnkpXG5cdFx0XHQuaW5uZXJDaGFydEJvdW5kKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvID0gKG9Db250cm9sIGFzIGFueSkuZ2V0Q29udHJvbERlbGVnYXRlKCkuX2dldENoYXJ0KG9Db250cm9sKS5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIik7XG5cdFx0XHRcdHNldEJpbmRpbmdJbmZvKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9CaW5kaW5nSW5mbyA9IG9Db250cm9sLmRhdGEoXCJyb3dzQmluZGluZ0luZm9cIik7XG5cdFx0c2V0QmluZGluZ0luZm8oKTtcblx0fVxufVxuZnVuY3Rpb24gbG9hZE1hY3JvTGlicmFyeSgpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL2ZlL21hY3Jvcy9tYWNyb0xpYnJhcnlcIl0sIGZ1bmN0aW9uICgvKm1hY3JvTGlicmFyeSovKSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQoc0dyb3VwSWQ6IHN0cmluZywgYWN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwsIGFNZXNzYWdlczogYW55W10pIHtcblx0Y29uc3QgbG9jYWxJMThuUmVmID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSxcblx0XHRzQWN0aW9uTmFtZSA9IGFjdGlvbk5hbWUsXG5cdFx0c0NhbmNlbEJ1dHRvblR4dCA9IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKTtcblx0YU1lc3NhZ2VzID0gYU1lc3NhZ2VzLmZpbHRlcigob01lc3NhZ2UpID0+IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSAmJiBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkuaHR0cFN0YXR1cyA9PT0gNDEyKTtcblx0aWYgKGFNZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCBzTWVzc2FnZSA9IGAke2FNZXNzYWdlc1swXS5tZXNzYWdlfVxcbiR7bG9jYWxJMThuUmVmLmdldFRleHQoXCJQUk9DRUVEXCIpfWA7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoc01lc3NhZ2UsIHtcblx0XHRcdFx0dGl0bGU6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiV0FSTklOR1wiKSxcblx0XHRcdFx0YWN0aW9uczogW3NBY3Rpb25OYW1lLCBzQ2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdFx0ZW1waGFzaXplZEFjdGlvbjogc0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc0FjdGlvbiA9PT0gc0FjdGlvbk5hbWUpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IHRydWU7XG5cdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlSGFuZGxpbmcucHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdGNvbnRlbnQ6IG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyxcblx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb01lc3NhZ2VPYmplY3Qub0JhY2tCdXR0b25dLFxuXHRcdFx0XHRjb250ZW50TWlkZGxlOiBbbmV3IFRpdGxlKHsgdGV4dDogXCJXYXJuaW5nXCIgfSldXG5cdFx0XHR9KSxcblx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiNTAlXCIsXG5cdFx0XHRjb250ZW50V2lkdGg6IFwiNTAlXCIsXG5cdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2Vcblx0XHR9KTtcblx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0dGV4dDogZ2V0VHJhbnNsYXRlZFRleHQoXCJJR05PUkVcIiwgbG9jYWxJMThuUmVmLCBzQWN0aW9uTmFtZSlcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRvRGlhbG9nLnNldEVuZEJ1dHRvbihcblx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZXh0OiBzQ2FuY2VsQnV0dG9uVHh0XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0b0RpYWxvZy5vcGVuKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlQ29sdW1uKG9Db250cm9sOiBhbnkpOiBzdHJpbmcge1xuXHRpZiAoIW9Db250cm9sIHx8IG9Db250cm9sLmlzQShcInNhcC51aS5jb3JlLm12Yy5YTUxWaWV3XCIpKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0Y29uc3QgaGVhZGVySW5mb1RpdGxlUGF0aCA9IG9Db250cm9sLmdldFBhcmVudCgpLmdldFRhYmxlRGVmaW5pdGlvbigpLmhlYWRlckluZm9UaXRsZTtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0N1cnJlbnRFbnRpdHlTZXROYW1lID0gb0NvbnRyb2wuZGF0YShcIm1ldGFQYXRoXCIpO1xuXHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJFR5cGUvJEtleWApO1xuXHRjb25zdCBhRmlsdGVyZWRUZWNobmljYWxLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGFUZWNobmljYWxLZXlzLmZvckVhY2goZnVuY3Rpb24gKHRlY2huaWNhbEtleTogc3RyaW5nKSB7XG5cdFx0aWYgKHRlY2huaWNhbEtleSAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRhRmlsdGVyZWRUZWNobmljYWxLZXlzLnB1c2godGVjaG5pY2FsS2V5KTtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBzZW1hbnRpY0tleUNvbHVtbnMgPSBvQ29udHJvbC5nZXRQYXJlbnQoKS5nZXRUYWJsZURlZmluaXRpb24oKS5zZW1hbnRpY0tleXM7XG5cblx0Y29uc3QgYVZpc2libGVDb2x1bW5zOiBhbnkgPSBbXTtcblx0Y29uc3QgYVRhYmxlQ29sdW1ucyA9IG9Db250cm9sLmdldENvbHVtbnMoKTtcblx0YVRhYmxlQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRjb25zdCBjb2x1bW5QYXRoU3BsaXQgPSBvQ29sdW1uLmdldElkKCkuc3BsaXQoXCI6OlwiKTtcblx0XHRhVmlzaWJsZUNvbHVtbnMucHVzaChjb2x1bW5QYXRoU3BsaXRbY29sdW1uUGF0aFNwbGl0Lmxlbmd0aCAtIDFdKTtcblx0fSk7XG5cdGxldCBzdWJ0aXRsZUNvbHVtbjogc3RyaW5nID0gXCJcIjsgLy9zZXQgdGhlIGNvcnJlc3Nwb25kaW5nIHN1YnRpdGxlIGNvbHVtblxuXHRpZiAoaGVhZGVySW5mb1RpdGxlUGF0aCAhPT0gdW5kZWZpbmVkICYmIGFWaXNpYmxlQ29sdW1ucy5pbmRleE9mKGhlYWRlckluZm9UaXRsZVBhdGgpICE9PSAtMSkge1xuXHRcdHN1YnRpdGxlQ29sdW1uID0gaGVhZGVySW5mb1RpdGxlUGF0aDtcblx0fSBlbHNlIGlmIChcblx0XHRzZW1hbnRpY0tleUNvbHVtbnMgIT09IHVuZGVmaW5lZCAmJlxuXHRcdHNlbWFudGljS2V5Q29sdW1ucy5sZW5ndGggPT09IDEgJiZcblx0XHRhVmlzaWJsZUNvbHVtbnMuaW5kZXhPZihzZW1hbnRpY0tleUNvbHVtbnNbMF0pICE9PSAtMVxuXHQpIHtcblx0XHRzdWJ0aXRsZUNvbHVtbiA9IHNlbWFudGljS2V5Q29sdW1uc1swXTtcblx0fVxuXHQvLyBzZXQgY29ycmVjdCBjb250ZXh0IHRvIGNvcnJlY3QgbWVzc2FnZSBpbiBtZXNzYWdlIG1vZGVsXG5cdGVsc2UgaWYgKGFGaWx0ZXJlZFRlY2huaWNhbEtleXMgIT09IHVuZGVmaW5lZCAmJiBhRmlsdGVyZWRUZWNobmljYWxLZXlzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHN1YnRpdGxlQ29sdW1uID0gYUZpbHRlcmVkVGVjaG5pY2FsS2V5c1swXTtcblx0fVxuXHRyZXR1cm4gc3VidGl0bGVDb2x1bW47XG59XG5cbmZ1bmN0aW9uIGdldEtleXMob01ldGFNb2RlbDogYW55LCBzUGF0aDogc3RyaW5nLCBzRW50aXR5U2V0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgc01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofS8kVHlwZS8kS2V5YCk7XG5cdGxldCBzS2V5OiBzdHJpbmcgPSBcIlwiO1xuXHRjb25zdCBzZW1hbnRpY0tleSA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljS2V5cyhvTWV0YU1vZGVsLCBzRW50aXR5U2V0TmFtZSk7XG5cdGlmIChzZW1hbnRpY0tleSAhPT0gdW5kZWZpbmVkICYmIHNlbWFudGljS2V5Lmxlbmd0aCA9PT0gMSkge1xuXHRcdHNLZXkgPSBzZW1hbnRpY0tleVswXS4kUHJvcGVydHlQYXRoO1xuXHR9IGVsc2UgaWYgKGFUZWNobmljYWxLZXlzKSB7XG5cdFx0Y29uc3QgYUZpbHRlcmVkVGVjaG5pY2FsS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRhVGVjaG5pY2FsS2V5cy5mb3JFYWNoKGZ1bmN0aW9uICh0ZWNobmljYWxLZXk6IHN0cmluZykge1xuXHRcdFx0aWYgKHRlY2huaWNhbEtleSAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMucHVzaCh0ZWNobmljYWxLZXkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChhRmlsdGVyZWRUZWNobmljYWxLZXlzICE9PSB1bmRlZmluZWQgJiYgYUZpbHRlcmVkVGVjaG5pY2FsS2V5cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNLZXkgPSBhRmlsdGVyZWRUZWNobmljYWxLZXlzWzBdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gc0tleTtcbn1cblxuY29uc3QgQ29tbW9uVXRpbHMgPSB7XG5cdGlzUHJvcGVydHlGaWx0ZXJhYmxlOiBpc1Byb3BlcnR5RmlsdGVyYWJsZSxcblx0aXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlOiBpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUsXG5cdHJlbW92ZVNlbnNpdGl2ZURhdGE6IHJlbW92ZVNlbnNpdGl2ZURhdGEsXG5cdGZpcmVCdXR0b25QcmVzczogZm5GaXJlQnV0dG9uUHJlc3MsXG5cdGdldFRhcmdldFZpZXc6IGdldFRhcmdldFZpZXcsXG5cdGhhc1RyYW5zaWVudENvbnRleHQ6IGZuSGFzVHJhbnNpZW50Q29udGV4dHMsXG5cdHVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlsczogZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMsXG5cdHJlc29sdmVTdHJpbmd0b0Jvb2xlYW46IGZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbixcblx0Z2V0QXBwQ29tcG9uZW50OiBnZXRBcHBDb21wb25lbnQsXG5cdGdldE1hbmRhdG9yeUZpbHRlckZpZWxkczogZm5HZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMsXG5cdGdldENvbnRleHRQYXRoUHJvcGVydGllczogZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMsXG5cdGdldFBhcmFtZXRlckluZm86IGdldFBhcmFtZXRlckluZm8sXG5cdHVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5OiBmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5LFxuXHRnZXRUcmFuc2xhdGVkVGV4dDogZ2V0VHJhbnNsYXRlZFRleHQsXG5cdGdldEVudGl0eVNldE5hbWU6IGdldEVudGl0eVNldE5hbWUsXG5cdGdldEFjdGlvblBhdGg6IGdldEFjdGlvblBhdGgsXG5cdGNvbXB1dGVEaXNwbGF5TW9kZTogY29tcHV0ZURpc3BsYXlNb2RlLFxuXHRzZXRBY3Rpb25FbmFibGVtZW50OiBzZXRBY3Rpb25FbmFibGVtZW50LFxuXHRpc1N0aWNreUVkaXRNb2RlOiBpc1N0aWNreUVkaXRNb2RlLFxuXHRnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eTogZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHksXG5cdGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnM6IGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMsXG5cdGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50OiBhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCxcblx0YWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQ6IGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50LFxuXHRhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5OiBhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5LFxuXHRnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHM6IGdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyxcblx0c2V0VXNlckRlZmF1bHRzOiBzZXRVc2VyRGVmYXVsdHMsXG5cdGdldFNoZWxsU2VydmljZXM6IGdldFNoZWxsU2VydmljZXMsXG5cdGdldEhhc2g6IGdldEhhc2gsXG5cdGdldElCTkFjdGlvbnM6IGZuR2V0SUJOQWN0aW9ucyxcblx0Z2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uOiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRnZXRTZW1hbnRpY09iamVjdFByb21pc2U6IGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlLFxuXHRnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsOiBmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwsXG5cdGdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoOiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoLFxuXHR1cGRhdGVTZW1hbnRpY1RhcmdldHM6IGZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWwsXG5cdGdldFByb3BlcnR5RGF0YVR5cGU6IGdldFByb3BlcnR5RGF0YVR5cGUsXG5cdGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnM6IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMsXG5cdGdldFNlYXJjaFJlc3RyaWN0aW9uczogZ2V0U2VhcmNoUmVzdHJpY3Rpb25zLFxuXHRnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGg6IGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCxcblx0Z2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbjogZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbixcblx0Z2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZTogZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSxcblx0cmVxdWVzdFNpbmdsZXRvblByb3BlcnR5OiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHksXG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50OiB0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCxcblx0YWRkRXZlbnRUb0JpbmRpbmdJbmZvOiBhZGRFdmVudFRvQmluZGluZ0luZm8sXG5cdHNldE9iamVjdE1hcHBpbmdzOiBzZXRPYmplY3RNYXBwaW5ncyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zOiB7XG5cdFx0UkVRVUlSRURfUFJPUEVSVElFUzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIixcblx0XHROT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTOiBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIsXG5cdFx0QUxMT1dFRF9FWFBSRVNTSU9OUzogXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIlxuXHR9LFxuXHRBbGxvd2VkRXhwcmVzc2lvbnNQcmlvOiBbXCJTaW5nbGVWYWx1ZVwiLCBcIk11bHRpVmFsdWVcIiwgXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIiwgXCJTZWFyY2hFeHByZXNzaW9uXCIsIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXSxcblx0bm9ybWFsaXplU2VhcmNoVGVybTogbm9ybWFsaXplU2VhcmNoVGVybSxcblx0Zm5PblN0cmljdEhhbmRsaW5nRmFpbGVkOiBmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQsXG5cdGdldFNpbmdsZXRvblBhdGg6IGdldFNpbmdsZXRvblBhdGgsXG5cdGdldE1lc3NhZ2VDb2x1bW46IGdldE1lc3NhZ2VDb2x1bW4sXG5cdGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM6IGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMsXG5cdGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM6IGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMsXG5cdGhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9uczogaGFzUmVzdHJpY3RlZFByb3BlcnRpZXNJbkFubm90YXRpb25zLFxuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tQW5ub3RhdGlvbnM6IGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21Bbm5vdGF0aW9ucyxcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzOiBnZXRSZXF1aXJlZFByb3BlcnRpZXMsXG5cdGdldEtleXM6IGdldEtleXNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vblV0aWxzO1xuIl19
|