@sapui5/sap.fe.core 1.121.2 → 1.123.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +1 -2
- package/src/sap/fe/core/CommonUtils.js +14 -171
- package/src/sap/fe/core/CommonUtils.ts +15 -221
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +16 -0
- package/src/sap/fe/core/TemplateComponent.js +6 -1
- package/src/sap/fe/core/TemplateComponent.ts +8 -0
- package/src/sap/fe/core/UIProvider.js +23 -0
- package/src/sap/fe/core/UIProvider.ts +38 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
- package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
- package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
- package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
- package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
- package/src/sap/fe/core/controllerextensions/Share.js +7 -7
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
- package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
- package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
- package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
- package/src/sap/fe/core/converters/ConverterContext.js +17 -9
- package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
- package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
- package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
- package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
- package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
- package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
- package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
- package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
- package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
- package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
- package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
- package/src/sap/fe/core/converters/helpers/Key.js +2 -2
- package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
- package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
- package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
- package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
- package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
- package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
- package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
- package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
- package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
- package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
- package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
- package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
- package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
- package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
- package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
- package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
- package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
- package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
- package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
- package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +5 -2
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_en.properties +267 -2
- package/src/sap/fe/core/messagebundle_sl.properties +1 -1
- package/src/sap/fe/core/operationsHelper.js +2 -1
- package/src/sap/fe/core/operationsHelper.ts +1 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
- package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
- package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
- package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
- package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
- package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
- package/src/sap/fe/core/templating/FilterHelper.js +13 -10
- package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
- package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
- package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
- package/src/sap/fe/core/templating/UIFormatters.js +23 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/EDM.ts +2 -2
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +2 -2
|
@@ -88,6 +88,7 @@ export type RoutingNavigationParameters = {
|
|
|
88
88
|
layout?: string;
|
|
89
89
|
keepCurrentLayout?: boolean;
|
|
90
90
|
navMode?: string;
|
|
91
|
+
redirectedToNonDraft?: string;
|
|
91
92
|
};
|
|
92
93
|
|
|
93
94
|
export type RoutingParameterMap = {
|
|
@@ -642,7 +643,8 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
642
643
|
bTargetEditable: parameters?.editable,
|
|
643
644
|
bPersistOPScroll: parameters?.persistOPScroll,
|
|
644
645
|
bShowPlaceholder: parameters?.showPlaceholder !== undefined ? parameters?.showPlaceholder : true,
|
|
645
|
-
reason: parameters?.reason
|
|
646
|
+
reason: parameters?.reason,
|
|
647
|
+
redirectedToNonDraft: parameters.redirectedToNonDraft
|
|
646
648
|
};
|
|
647
649
|
|
|
648
650
|
if (parameters?.updateFCLLevel !== -1 && parameters?.recreateContext !== true) {
|
|
@@ -796,26 +798,35 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
796
798
|
}
|
|
797
799
|
}
|
|
798
800
|
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
801
|
+
/**
|
|
802
|
+
* Checks if a semantic path shall be used to navigate to a given context.
|
|
803
|
+
*
|
|
804
|
+
* @param context The context to navigate to
|
|
805
|
+
* @returns True if semantic path shall be sued, false otherwise
|
|
806
|
+
*/
|
|
807
|
+
_checkIfContextSupportsSemanticPath(context: Context): boolean {
|
|
802
808
|
// First, check if this is a level-1 object (path = /aaa(bbb))
|
|
803
|
-
if (!/^\/[^(]+\([^)]+\)$/.test(
|
|
809
|
+
if (!/^\/[^(]+\([^)]+\)$/.test(context.getPath())) {
|
|
804
810
|
return false;
|
|
805
811
|
}
|
|
806
812
|
|
|
807
|
-
// Then check if the entity
|
|
808
|
-
const
|
|
809
|
-
|
|
810
|
-
const entitySet = MetaModelConverter.getInvolvedDataModelObjects(oMetaModel.getMetaContext(oContext.getPath()))
|
|
813
|
+
// Then check if the entity is a draft root
|
|
814
|
+
const metaModel = context.getModel().getMetaModel();
|
|
815
|
+
const entitySet = MetaModelConverter.getInvolvedDataModelObjects(metaModel.getMetaContext(context.getPath()))
|
|
811
816
|
.targetObject as EntitySet;
|
|
812
|
-
|
|
813
|
-
if (!
|
|
817
|
+
|
|
818
|
+
if (!ModelHelper.isDraftRoot(entitySet)) {
|
|
819
|
+
return false;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
// We don't support semantic path for newly created objects
|
|
823
|
+
if (context.getProperty("IsActiveEntity") === false && context.getProperty("HasActiveEntity") === false) {
|
|
814
824
|
return false;
|
|
815
825
|
}
|
|
816
826
|
|
|
817
|
-
//
|
|
818
|
-
|
|
827
|
+
// Finally, check if the entity has semantic keys
|
|
828
|
+
const entitySetName = entitySet.name;
|
|
829
|
+
return SemanticKeyHelper.getSemanticKeys(metaModel, entitySetName) !== undefined;
|
|
819
830
|
}
|
|
820
831
|
|
|
821
832
|
_getPathFromContext(context: Context | ODataListBinding, parameters: RoutingNavigationParameters): string {
|
|
@@ -1040,10 +1051,12 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
1040
1051
|
}
|
|
1041
1052
|
|
|
1042
1053
|
async _manageDeepLinkStartup(oStartupParameters: StartupParameters | null): Promise<void> {
|
|
1054
|
+
const alwaysCheckTargetExistence = this.oAppComponent.getManifestEntry("sap.fe")?.app?._checkExistenceOnDeepLink === true;
|
|
1043
1055
|
return AppStartupHelper.getDeepLinkStartupHash(
|
|
1044
1056
|
this.oAppComponent.getManifestEntry("sap.ui5").routing,
|
|
1045
1057
|
oStartupParameters,
|
|
1046
|
-
this.oModel
|
|
1058
|
+
this.oModel,
|
|
1059
|
+
alwaysCheckTargetExistence
|
|
1047
1060
|
).then((oDeepLink) => {
|
|
1048
1061
|
let sHash;
|
|
1049
1062
|
if (oDeepLink.context) {
|
|
@@ -25,6 +25,9 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
25
25
|
) {
|
|
26
26
|
return Promise.resolve([]);
|
|
27
27
|
};
|
|
28
|
+
_proto.__fetchSemanticObject = async function __fetchSemanticObject() {
|
|
29
|
+
return Promise.resolve([]);
|
|
30
|
+
};
|
|
28
31
|
_proto.getLinksWithCache = async function getLinksWithCache( /*oArgs: object*/
|
|
29
32
|
) {
|
|
30
33
|
return Promise.resolve([]);
|
|
@@ -156,7 +159,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
156
159
|
};
|
|
157
160
|
_proto.getPrimaryIntent = async function getPrimaryIntent( /*sSemanticObject: string, mParameters?: object*/
|
|
158
161
|
) {
|
|
159
|
-
return Promise.resolve(
|
|
162
|
+
return Promise.resolve(undefined);
|
|
160
163
|
};
|
|
161
164
|
_proto.waitForPluginsLoad = async function waitForPluginsLoad() {
|
|
162
165
|
return Promise.resolve(true);
|
|
@@ -165,7 +168,14 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
165
168
|
return "";
|
|
166
169
|
};
|
|
167
170
|
_proto.getPersonalizer = async function getPersonalizer(_persId, _scope, _component) {
|
|
168
|
-
return Promise.resolve({
|
|
171
|
+
return Promise.resolve({
|
|
172
|
+
getPersData: async () => Promise.resolve({
|
|
173
|
+
historyEnabled: false,
|
|
174
|
+
suggestionsEnabled: false,
|
|
175
|
+
apps: {}
|
|
176
|
+
}),
|
|
177
|
+
setPersData: () => {}
|
|
178
|
+
});
|
|
169
179
|
};
|
|
170
180
|
_proto.deletePersonalizationContainer = async function deletePersonalizationContainer(_key, _scope) {
|
|
171
181
|
return Promise.resolve();
|
|
@@ -187,6 +197,9 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
187
197
|
_proto.isFlpOptimisticBatchPluginLoaded = function isFlpOptimisticBatchPluginLoaded() {
|
|
188
198
|
return false;
|
|
189
199
|
};
|
|
200
|
+
_proto.parseParameters = function parseParameters() {
|
|
201
|
+
return {};
|
|
202
|
+
};
|
|
190
203
|
return ShellServiceMock;
|
|
191
204
|
}(Service);
|
|
192
205
|
/**
|
|
@@ -270,6 +283,15 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
270
283
|
return this.applicationNavigation.getLinks(oArgs);
|
|
271
284
|
}
|
|
272
285
|
|
|
286
|
+
/**
|
|
287
|
+
* Returns a list of semantic objects of the intents the current user can navigate to.
|
|
288
|
+
*
|
|
289
|
+
* @returns Promise that resolve with an array of strings representing the semantic objects of the intents the current user can navigate to, or rejects with an error message
|
|
290
|
+
*/;
|
|
291
|
+
_proto2.__fetchSemanticObject = async function __fetchSemanticObject() {
|
|
292
|
+
return this.applicationNavigation.getSemanticObjects();
|
|
293
|
+
}
|
|
294
|
+
|
|
273
295
|
/**
|
|
274
296
|
* Retrieves the target links configured for a given semantic object & action in cache
|
|
275
297
|
* Will retrieve the CrossApplicationNavigation
|
|
@@ -716,6 +738,17 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
716
738
|
*/;
|
|
717
739
|
_proto2.getShellConfig = function getShellConfig() {
|
|
718
740
|
return window["sap-ushell-config"];
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
/**
|
|
744
|
+
* Parse parameters from a URI query string (starting with ?) into a parameter object.
|
|
745
|
+
*
|
|
746
|
+
* @param url Check the definition of
|
|
747
|
+
* Parameter string
|
|
748
|
+
* @returns An object containg string arrays
|
|
749
|
+
*/;
|
|
750
|
+
_proto2.parseParameters = function parseParameters(url) {
|
|
751
|
+
return this.urlParsingService.parseParameters(url);
|
|
719
752
|
};
|
|
720
753
|
return ShellServices;
|
|
721
754
|
}(Service);
|
|
@@ -732,21 +765,25 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
732
765
|
/**
|
|
733
766
|
* Creates either a standard or a mock Shell service depending on the configuration.
|
|
734
767
|
*
|
|
735
|
-
* @param
|
|
768
|
+
* @param serviceContext The shellservice context
|
|
736
769
|
* @returns A promise for a shell service implementation
|
|
737
770
|
* @see ServiceFactory#createInstance
|
|
738
771
|
*/
|
|
739
|
-
_proto3.createInstance = async function createInstance(
|
|
740
|
-
|
|
741
|
-
const
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
772
|
+
_proto3.createInstance = async function createInstance(serviceContext) {
|
|
773
|
+
serviceContext.settings.shellContainer = sap.ui.require("sap/ushell/Container");
|
|
774
|
+
const shellService = serviceContext.settings.shellContainer ? new ShellServices(serviceContext) : new ShellServiceMock(serviceContext);
|
|
775
|
+
await shellService.initPromise;
|
|
776
|
+
// Enrich the appComponent with this method
|
|
777
|
+
const appComponent = serviceContext.scopeObject;
|
|
778
|
+
appComponent.getShellServices = () => shellService;
|
|
779
|
+
const internalModel = appComponent.getModel("internal");
|
|
780
|
+
if (internalModel) {
|
|
781
|
+
internalModel.setProperty("/semanticObjects", await shellService.__fetchSemanticObject());
|
|
782
|
+
}
|
|
783
|
+
return shellService;
|
|
747
784
|
};
|
|
748
785
|
return ShellServicesFactory;
|
|
749
786
|
}(ServiceFactory);
|
|
750
787
|
return ShellServicesFactory;
|
|
751
788
|
}, false);
|
|
752
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIYXNoIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiZ2V0QXBwU3RhdGUiLCJjcmVhdGVFbXB0eUFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZUFzeW5jIiwibmF2aWdhdGUiLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJpc0luaXRpYWxOYXZpZ2F0aW9uIiwiZXhwYW5kQ29tcGFjdEhhc2giLCJwYXJzZVNoZWxsSGFzaCIsInNwbGl0SGFzaCIsInNIYXNoIiwicmVnZXgiLCJleGVjIiwic2hlbGxQYXJ0IiwiYXBwU3BlY2lmaWNSb3V0ZSIsImxlbmd0aCIsImNvbnN0cnVjdFNoZWxsSGFzaCIsInNldERpcnR5RmxhZyIsInJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwiZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImNyZWF0ZVJlbmRlcmVyIiwiZ2V0VXNlciIsImdldFVzZXJJbml0aWFscyIsImhhc1VTaGVsbCIsInJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsInVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwic2V0QmFja05hdmlnYXRpb24iLCJzZXRIaWVyYXJjaHkiLCJzZXRUaXRsZSIsImdldENvbnRlbnREZW5zaXR5IiwiZG9jdW1lbnQiLCJib2R5IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJnZXRQcmltYXJ5SW50ZW50Iiwid2FpdEZvclBsdWdpbnNMb2FkIiwiZ2V0VGl0bGUiLCJnZXRQZXJzb25hbGl6ZXIiLCJfcGVyc0lkIiwiX3Njb3BlIiwiX2NvbXBvbmVudCIsImRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lciIsIl9rZXkiLCJnZXRTaGVsbFJlbmRlcmVyRmlvcmkyIiwiZ2V0U2hlbGxDb25maWciLCJnZXRSZWdpc3RlcmVkUGx1Z2lucyIsIkFwcFdhcm11cCIsIlJlbmRlcmVyRXh0ZW5zaW9ucyIsIlVzZXJEZWZhdWx0cyIsIlVzZXJJbWFnZSIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiU2VydmljZSIsIlNoZWxsU2VydmljZXMiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvU2hlbGxDb250YWluZXIiLCJzZXR0aW5ncyIsInNoZWxsQ29udGFpbmVyIiwibGlua3NDYWNoZSIsImZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUiLCJvQXJncyIsImFDYWNoZWRTZW1hbnRpY09iamVjdHMiLCJhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwibGlua0ZpbHRlciIsInNlbWFudGljT2JqZWN0IiwicHVzaCIsImxpbmtzIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsIm9sZEFyZ3MiLCJuZXdBcmdzIiwiY2FjaGVkTGlua3MiLCJyZWplY3QiLCJyZXNvbHZlRm4iLCJyZWplY3RGbiIsIm5hdmlnYXRpb25TZXJ2aWNlUCIsImdldFNlcnZpY2VBc3luYyIsIm5hdlRhcmdldFJlc29sdXRpb25QIiwidXNlckluZm9TZXJ2aWNlUCIsIm9VcmxQYXJzaW5nU2VydmljZVByb21pc2UiLCJvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxQbHVnaW5NYW5hZ2VyUHJvbWlzZSIsIm9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlIiwib1NoZWxsVUlTZXJ2aWNlUHJvbWlzZSIsImdldFNlcnZpY2UiLCJhbGwiLCJ0aGVuIiwibmF2aWdhdGlvblNlcnZpY2UiLCJuYXZUYXJnZXRSZXNvbHV0aW9uU2VydmljZSIsInVzZXJJbmZvU2VydmljZSIsIm9VcmxQYXJzaW5nU2VydmljZSIsIm9TaGVsbE5hdmlnYXRpb24iLCJvU2hlbGxVSVNlcnZpY2UiLCJvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIiwib1NoZWxsUGx1Z2luTWFuYWdlciIsImFwcGxpY2F0aW9uTmF2aWdhdGlvbiIsIm5hdlRhcmdldFJlc29sdXRpb24iLCJ1cmxQYXJzaW5nU2VydmljZSIsInNoZWxsTmF2aWdhdGlvbiIsInNoZWxsVUlTZXJ2aWNlIiwic2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIiwic2hlbGxQbHVnaW5NYW5hZ2VyIiwiY2F0Y2giLCJvQ2FjaGVSZXN1bHRzIiwiYUxpbmtzIiwib1NlbWFudGljT2JqZWN0c0xpbmtzIiwiaSIsImFzc2lnbiIsImFNZXJnZWRMaW5rcyIsImoiLCJpdGVtIiwiZ2V0U2hlbGxDb250YWluZXIiLCJvTmF2QXJndW1lbnRzQXJyIiwiZ2V0SHJlZiIsInNBcHBTdGF0ZUtleSIsImFUYXJnZXRzIiwib1RhcmdldCIsInNIYXNoRnJhZ21lbnQiLCJnZXRTaGVsbEhhc2giLCJmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zIiwiaGFzT3duUHJvcGVydHkiLCJNQU5BR0VfRkVfQ0FDSEVTIiwiZW5hYmxlZCIsIm9OZXdTaGVsbEhhc2giLCJiRGlydHkiLCJmbkRpcnR5U3RhdGVQcm92aWRlciIsImdldEluaXRpYWxzIiwiZm5OYXZGaWx0ZXIiLCJmbkNhbGxCYWNrIiwiYUhpZXJhcmNoeUxldmVscyIsInNUaXRsZSIsInNTZW1hbnRpY09iamVjdCIsIm1QYXJhbWV0ZXJzIiwicHJpbWFyeUludGVudCIsIkFycmF5IiwiaXNBcnJheSIsImdldFBsdWdpbkxvYWRpbmdQcm9taXNlIiwiZmFpbCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwicGVyc0lkIiwic2NvcGUiLCJjb21wb25lbnQiLCJrZXlDYXRlZ29yeSIsImNvbnN0YW50cyIsIkZJWEVEX0tFWSIsIndyaXRlRnJlcXVlbmN5IiwiTE9XIiwiY2xpZW50U3RvcmFnZUFsbG93ZWQiLCJ2YWxpZGl0eSIsIkluZmluaXR5Iiwia2V5IiwiZGVsZXRlQ29udGFpbmVyIiwiZ2V0UmVuZGVyZXIiLCJTaGVsbFNlcnZpY2VzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwib1NlcnZpY2VDb250ZXh0Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwib1NoZWxsU2VydmljZSIsImdldFNoZWxsU2VydmljZXMiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgTmF2VGFyZ2V0UmVzb2x1dGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZUYXJnZXRSZXNvbHV0aW9uXCI7XG5pbXBvcnQgdHlwZSBOYXZpZ2F0aW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgTGluaywgTGlua0ZpbHRlciwgVGFyZ2V0IH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uVjIgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB7IHR5cGUgUGVyc0lkLCB0eXBlIFNjb3BlIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB0eXBlIFNoZWxsTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9TaGVsbE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFVSTFBhcnNpbmcgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRIYXNoIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgVXNlckluZm8gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVXNlckluZm9cIjtcbmltcG9ydCB0eXBlIFNoZWxsVUlTZXJ2aWNlIGZyb20gXCJzYXAvdXNoZWxsL3VpNXNlcnZpY2UvU2hlbGxVSVNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIFN0YXJ0dXBBcHBTdGF0ZSA9IHtcblx0Z2V0RGF0YSgpOiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudD86IHtcblx0XHRcdFNlbGVjdE9wdGlvbnM/OiB7XG5cdFx0XHRcdFByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdFx0XHRSYW5nZXM6IHtcblx0XHRcdFx0XHRPcHRpb246IHN0cmluZztcblx0XHRcdFx0XHRTaWduOiBzdHJpbmc7XG5cdFx0XHRcdFx0TG93OiBzdHJpbmc7XG5cdFx0XHRcdH1bXTtcblx0XHRcdH1bXTtcblx0XHR9O1xuXHR9O1xufTtcblxuLy8gc2VlOiBzYXBcXHVzaGVsbFxcc2VydmljZXNcXF9QZXJzb25hbGl6YXRpb25cXGNvbnN0YW50cy5qc1xuZXhwb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cyA9IFBlcnNvbmFsaXphdGlvblYyICYge1xuXHRjb25zdGFudHM6IHtcblx0XHRrZXlDYXRlZ29yeToge1xuXHRcdFx0RklYRURfS0VZOiBzdHJpbmc7XG5cdFx0XHRHRU5FUkFURURfS0VZOiBzdHJpbmc7XG5cdFx0fTtcblx0XHR3cml0ZUZyZXF1ZW5jeToge1xuXHRcdFx0SElHSDogc3RyaW5nO1xuXHRcdFx0TE9XOiBzdHJpbmc7XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFBlcnNvbmFsaXplclR5cGUgPSB7XG5cdGdldFBlcnNEYXRhOiAoKSA9PiBQcm9taXNlPG9iamVjdD47XG5cdHNldFBlcnNEYXRhOiAocGVyc0RhdGE6IG9iamVjdCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIFNoZWxsQ29uZmlnVHlwZSA9IHtcblx0YXBwczoge1xuXHRcdGlucHV0RmllbGRIaXN0b3J5OiB7XG5cdFx0XHRlbmFibGVkOiBib29sZWFuO1xuXHRcdH07XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBTaGVsbFJlbmRlcmVyRmlvcmkyVHlwZSA9IHtcblx0YWRkVXNlckFjdGlvbihwcm9wZXJ0aWVzOiBvYmplY3QpOiBQcm9taXNlPENvbnRyb2w+O1xufTtcblxuZXhwb3J0IHR5cGUgRkxQUGx1Z2luID0ge1xuXHRjb21wb25lbnQ6IHN0cmluZztcblx0ZW5hYmxlZDogYm9vbGVhbjtcblx0dXJsOiBzdHJpbmc7XG5cdGNvbmZpZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZSA9IHtcblx0QXBwV2FybXVwOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFJlbmRlcmVyRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRVc2VyRGVmYXVsdHM6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0VXNlckltYWdlOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG59O1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgSVNoZWxsU2VydmljZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2hlbGxTZXJ2aWNlcyB7XG5cdGluaXRQcm9taXNlOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPjtcblx0aW5zdGFuY2VUeXBlOiBzdHJpbmc7XG5cdGdldExpbmtzKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBPbWl0PExpbmtGaWx0ZXIsIFwidWk1Q29tcG9uZW50XCI+W10pOiBQcm9taXNlPExpbmtbXVtdPjtcblxuXHR0b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnI6IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCk6IHZvaWQ7XG5cblx0Z2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT47XG5cblx0YmFja1RvUHJldmlvdXNBcHAoKTogdm9pZDtcblxuXHRocmVmRm9yRXh0ZXJuYWwob0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBvYmplY3Q7XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+O1xuXG5cdG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPjtcblxuXHRpc05hdmlnYXRpb25TdXBwb3J0ZWQob05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudD86IG9iamVjdCk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0ZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEhhc2goKTogc3RyaW5nO1xuXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBQYXJzZWRIYXNoO1xuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wic3BsaXRIYXNoXCJdPjtcblxuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KTogc3RyaW5nO1xuXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pOiB2b2lkO1xuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdGNyZWF0ZVJlbmRlcmVyKCk6IG9iamVjdDtcblxuXHRnZXRVc2VyKCk6IFVzZXJJbmZvO1xuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nO1xuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuO1xuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjaz86IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQ7XG5cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkO1xuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW47XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nO1xuXG5cdGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxMaW5rPjtcblxuXHR3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGU7XG5cblx0aXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQoKTogYm9vbGVhbjtcblxuXHRnZXRUaXRsZSgpOiBzdHJpbmc7XG5cblx0Z2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT47XG5cblx0ZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD47XG5cblx0Z2V0U2hlbGxSZW5kZXJlckZpb3JpMigpOiBTaGVsbFJlbmRlcmVyRmlvcmkyVHlwZTtcblxuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGU7XG59XG5cbi8qKlxuICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2hlbGxTZXJ2aWNlIGZvciBPcGVuRkVcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZU1vY2sgZXh0ZW5kcyBTZXJ2aWNlPFNoZWxsU2VydmljZXNTZXR0aW5ncz4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0aW5zdGFuY2VUeXBlITogc3RyaW5nO1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzIGFzIElTaGVsbFNlcnZpY2VzKTtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwibW9ja1wiO1xuXHR9XG5cblx0YXN5bmMgZ2V0TGlua3MoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBnZXRMaW5rc1dpdGhDYWNoZSgvKm9BcmdzOiBvYmplY3QqLyk6IFByb21pc2U8TGlua1tdW10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdHRvRXh0ZXJuYWwoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGFzeW5jIGdldFN0YXJ0dXBBcHBTdGF0ZSgvKm9BcmdzOiBvYmplY3QqLyk6IFByb21pc2U8U3RhcnR1cEFwcFN0YXRlIHwgdW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG5cblx0aXNKYW1BY3RpdmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YmFja1RvUHJldmlvdXNBcHAoKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgaHJlZkZvckV4dGVybmFsKC8qb0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QsIGJBc3luYz86IGJvb2xlYW4qLyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0fVxuXG5cdGdldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdH1cblxuXHRhc3luYyBnZXRBcHBTdGF0ZSgvKm9Db21wb25lbnQ6IG9iamVjdCwgc0FwcFN0YXRlS2V5OiBzdHJpbmcqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZSgvKm9Db21wb25lbnQ6IG9iamVjdCovKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlQXN5bmMoLypvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgbmF2aWdhdGUoLypvVGFyZ2V0OiBUYXJnZXQsb0NvbXBvbmVudD86IENvbXBvbmVudCovKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBpc05hdmlnYXRpb25TdXBwb3J0ZWQoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHR9XG5cblx0YXN5bmMgZXhwYW5kQ29tcGFjdEhhc2goLypzSGFzaEZyYWdtZW50OiBzdHJpbmcqLyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0fVxuXG5cdHBhcnNlU2hlbGxIYXNoKC8qc0hhc2g6IHN0cmluZyovKTogUGFyc2VkSGFzaCB7XG5cdFx0cmV0dXJuIHt9IGFzIHVua25vd24gYXMgUGFyc2VkSGFzaDtcblx0fVxuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wic3BsaXRIYXNoXCJdPiB7XG5cdFx0LyoqXG5cdFx0ICogRm9yIGFuIEFwcGxpY2F0aW9uIHdpdGhvdXQgU2hlbGwsIHRoZSBoYXNoIGlzIHNpbWlsYXIgdG8gOiAjL1NhbGVzT3JkZXJNYW5hZ2UoMTExMTExMTEtYWFhYS1iYmJiLWNjY2MtZGRkZGVlZWVmZmZmKVxuXHRcdCAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA6XG5cdFx0ICoge1xuXHRcdFx0c2hlbGxQYXJ0OiBcIlwiLFxuXHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogXCJTYWxlc09yZGVyTWFuYWdlKDExMTExMTExLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcIlxuXHRcdH1cblx0XHQgKi9cblx0XHRjb25zdCByZWdleCA9IC8jW14vXSpcXC8oLiopLy5leGVjKHNIYXNoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2hlbGxQYXJ0OiBcIlwiLFxuXHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogcmVnZXg/Lmxlbmd0aCA9PT0gMiA/IHJlZ2V4WzFdIDogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRjb25zdHJ1Y3RTaGVsbEhhc2goLypvTmV3U2hlbGxIYXNoOiBvYmplY3QqLyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRzZXREaXJ0eUZsYWcoLypiRGlydHk6IGJvb2xlYW4qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRjcmVhdGVSZW5kZXJlcigpOiBvYmplY3Qge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldFVzZXIoKTogVXNlckluZm8ge1xuXHRcdHJldHVybiB7fSBhcyBVc2VySW5mbztcblx0fVxuXG5cdGdldFVzZXJJbml0aWFscygpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcigvKmZuTmF2RmlsdGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoLypmbk5hdkZpbHRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKC8qZm5DYWxsQmFjaz86IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRIaWVyYXJjaHkoLyphSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+Ki8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRUaXRsZSgvKnNUaXRsZTogc3RyaW5nKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gc2hlbGwgd2UgcHJvYmFibHkgbmVlZCB0byBsb29rIGF0IHRoZSBjbGFzc2VzIGJlaW5nIGRlZmluZWQgb24gdGhlIGJvZHlcblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb3p5XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb3p5XCI7XG5cdFx0fSBlbHNlIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvbXBhY3RcIikpIHtcblx0XHRcdHJldHVybiBcImNvbXBhY3RcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZ2V0UHJpbWFyeUludGVudCgvKnNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCovKTogUHJvbWlzZTxMaW5rPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSBhcyBMaW5rKTtcblx0fVxuXG5cdGFzeW5jIHdhaXRGb3JQbHVnaW5zTG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG5cblx0Z2V0VGl0bGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdGFzeW5jIGdldFBlcnNvbmFsaXplcihfcGVyc0lkOiBQZXJzSWQsIF9zY29wZTogU2NvcGUsIF9jb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9IGFzIFBlcnNvbmFsaXplclR5cGUpO1xuXHR9XG5cblx0YXN5bmMgZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKF9rZXk6IHN0cmluZywgX3Njb3BlPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0Z2V0U2hlbGxSZW5kZXJlckZpb3JpMigpOiBTaGVsbFJlbmRlcmVyRmlvcmkyVHlwZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFNoZWxsUmVuZGVyZXJGaW9yaTJUeXBlO1xuXHR9XG5cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlIHtcblx0XHRyZXR1cm4ge30gYXMgU2hlbGxDb25maWdUeXBlO1xuXHR9XG5cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0QXBwV2FybXVwOiB7fSxcblx0XHRcdFJlbmRlcmVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRVc2VyRGVmYXVsdHM6IHt9LFxuXHRcdFx0VXNlckltYWdlOiB7fVxuXHRcdH07XG5cdH1cblxuXHRpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBTaGVsbFNlcnZpY2VzU2V0dGluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgU2hlbGxTZXJ2aWNlc1NldHRpbmdzID0ge1xuXHRzaGVsbENvbnRhaW5lcj86IENvbnRhaW5lcjtcbn07XG5cbnR5cGUgU2hlbGxQbHVnaW5NYW5hZ2VyID0ge1xuXHRnZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShjYXRlZ29yeTogc3RyaW5nKTogalF1ZXJ5LlByb21pc2U7XG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZTtcbn07XG5cbnR5cGUgUHJpdmF0ZVNoZWxsVXNlciA9IHtcblx0Z2V0SW5pdGlhbHMoKTogc3RyaW5nO1xuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZXMgZXh0ZW5kcyBTZXJ2aWNlPFJlcXVpcmVkPFNoZWxsU2VydmljZXNTZXR0aW5ncz4+IGltcGxlbWVudHMgSVNoZWxsU2VydmljZXMge1xuXHRyZXNvbHZlRm4hOiBGdW5jdGlvbjtcblxuXHRyZWplY3RGbiE6ICgpID0+IHZvaWQ7XG5cblx0aW5pdFByb21pc2UhOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPjtcblxuXHRhcHBsaWNhdGlvbk5hdmlnYXRpb24hOiBOYXZpZ2F0aW9uO1xuXG5cdG5hdlRhcmdldFJlc29sdXRpb24hOiBOYXZUYXJnZXRSZXNvbHV0aW9uO1xuXG5cdHVzZXJJbmZvU2VydmljZSE6IFVzZXJJbmZvO1xuXG5cdHVybFBhcnNpbmdTZXJ2aWNlITogVVJMUGFyc2luZztcblxuXHRzaGVsbE5hdmlnYXRpb24hOiBTaGVsbE5hdmlnYXRpb247XG5cblx0c2hlbGxQbHVnaW5NYW5hZ2VyITogU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXG5cdG9TaGVsbENvbnRhaW5lciE6IENvbnRhaW5lciAmIHsgZ2V0VXNlcjogKCkgPT4gUHJpdmF0ZVNoZWxsVXNlciB9O1xuXG5cdHNoZWxsVUlTZXJ2aWNlITogU2hlbGxVSVNlcnZpY2U7XG5cblx0c2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlITogUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblxuXHRpbnN0YW5jZVR5cGUhOiBzdHJpbmc7XG5cblx0bGlua3NDYWNoZSE6IFJlY29yZDxzdHJpbmcsIHsgbGlua3M6IExpbmtbXSB9PjtcblxuXHRmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlITogRnVuY3Rpb247XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdCBhcyBDb21wb25lbnQ7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIgPSBvQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lcjtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwicmVhbFwiO1xuXHRcdHRoaXMubGlua3NDYWNoZSA9IHt9O1xuXHRcdHRoaXMuZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSA9IGZ1bmN0aW9uIChvQXJnczogTGlua0ZpbHRlcltdKTogb2JqZWN0IHtcblx0XHRcdGNvbnN0IGFDYWNoZWRTZW1hbnRpY09iamVjdHM6IExpbmtbXVtdID0gW107XG5cdFx0XHRjb25zdCBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzOiBMaW5rRmlsdGVyW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgbGlua0ZpbHRlciBvZiBvQXJncykge1xuXHRcdFx0XHRpZiAoISFsaW5rRmlsdGVyICYmICEhbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmxpbmtzQ2FjaGVbbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdF0pIHtcblx0XHRcdFx0XHRcdGFDYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaCh0aGlzLmxpbmtzQ2FjaGVbbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGxpbmtGaWx0ZXIsIFwibGlua3NcIiwge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdLmxpbmtzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cy5wdXNoKGxpbmtGaWx0ZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgb2xkQXJnczogb0FyZ3MsIG5ld0FyZ3M6IGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMsIGNhY2hlZExpbmtzOiBhQ2FjaGVkU2VtYW50aWNPYmplY3RzIH07XG5cdFx0fTtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5yZXNvbHZlRm4gPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5yZWplY3RGbiA9IHJlamVjdDtcblx0XHR9KTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uU2VydmljZVAgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJOYXZpZ2F0aW9uXCIpO1xuXHRcdGNvbnN0IG5hdlRhcmdldFJlc29sdXRpb25QID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiTmF2VGFyZ2V0UmVzb2x1dGlvblwiKTtcblx0XHRjb25zdCB1c2VySW5mb1NlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVXNlckluZm9cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFBsdWdpbk1hbmFnZXJQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiUGx1Z2luTWFuYWdlclwiKTtcblx0XHRjb25zdCBvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlBlcnNvbmFsaXphdGlvblYyXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFVJU2VydmljZVByb21pc2UgPSBvQ29tcG9uZW50LmdldFNlcnZpY2UoXCJTaGVsbFVJU2VydmljZVwiKTtcblxuXHRcdFByb21pc2UuYWxsKFtcblx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlUCxcblx0XHRcdG5hdlRhcmdldFJlc29sdXRpb25QLFxuXHRcdFx0dXNlckluZm9TZXJ2aWNlUCxcblx0XHRcdG9VcmxQYXJzaW5nU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxVSVNlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxQbHVnaW5NYW5hZ2VyUHJvbWlzZVxuXHRcdF0pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KFtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZSxcblx0XHRcdFx0XHRuYXZUYXJnZXRSZXNvbHV0aW9uU2VydmljZSxcblx0XHRcdFx0XHR1c2VySW5mb1NlcnZpY2UsXG5cdFx0XHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0b1NoZWxsVUlTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UsXG5cdFx0XHRcdFx0b1NoZWxsUGx1Z2luTWFuYWdlclxuXHRcdFx0XHRdKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2VydmljZSBhcyBOYXZpZ2F0aW9uO1xuXHRcdFx0XHRcdHRoaXMubmF2VGFyZ2V0UmVzb2x1dGlvbiA9IG5hdlRhcmdldFJlc29sdXRpb25TZXJ2aWNlIGFzIE5hdlRhcmdldFJlc29sdXRpb247XG5cdFx0XHRcdFx0dGhpcy51c2VySW5mb1NlcnZpY2UgPSB1c2VySW5mb1NlcnZpY2UgYXMgVXNlckluZm87XG5cdFx0XHRcdFx0dGhpcy51cmxQYXJzaW5nU2VydmljZSA9IG9VcmxQYXJzaW5nU2VydmljZSBhcyBVUkxQYXJzaW5nO1xuXHRcdFx0XHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uID0gb1NoZWxsTmF2aWdhdGlvbiBhcyBTaGVsbE5hdmlnYXRpb247XG5cdFx0XHRcdFx0dGhpcy5zaGVsbFVJU2VydmljZSA9IG9TaGVsbFVJU2VydmljZTtcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSA9IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UgYXMgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlciA9IG9TaGVsbFBsdWdpbk1hbmFnZXIgYXMgU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUZuKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3Mob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9BcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhcmdldCBsaW5rcyBjb25maWd1cmVkIGZvciBhIGdpdmVuIHNlbWFudGljIG9iamVjdCAmIGFjdGlvbiBpbiBjYWNoZVxuXHQgKiBXaWxsIHJldHJpZXZlIHRoZSBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvblxuXHQgKiBzZXJ2aWNlIHJlZmVyZW5jZSBjYWxsIHRoZSBnZXRMaW5rcyBtZXRob2QuIEluIGNhc2Ugc2VydmljZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFueSBleGNlcHRpb25cblx0ICogbWV0aG9kIHRocm93cyBleGNlcHRpb24gZXJyb3IgaW4gY29uc29sZS5cblx0ICpcblx0ICogQHBhcmFtIG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldExpbmtzIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gdGFyZ2V0IGxpbmtzIGFycmF5XG5cdCAqL1xuXHRhc3luYyBnZXRMaW5rc1dpdGhDYWNoZShvQXJncz86IExpbmtGaWx0ZXJbXSk6IFByb21pc2U8TGlua1tdW10+IHtcblx0XHRpZiAoKG9BcmdzIGFzIE9iamVjdFtdKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NhY2hlUmVzdWx0cyA9IHRoaXMuZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZShvQXJncyk7XG5cblx0XHRcdGlmIChvQ2FjaGVSZXN1bHRzLm5ld0FyZ3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FjaGVSZXN1bHRzLmNhY2hlZExpbmtzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYUxpbmtzID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0TGlua3Mob0NhY2hlUmVzdWx0cy5uZXdBcmdzKTtcblx0XHRcdFx0aWYgKGFMaW5rcy5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNPYmplY3RzTGlua3M6IFJlY29yZDxzdHJpbmcsIHsgbGlua3M6IExpbmtbXSB9PiA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGlmIChhTGlua3NbaV0ubGVuZ3RoID4gMCAmJiBvQ2FjaGVSZXN1bHRzLm5ld0FyZ3NbaV1bMF0ubGlua3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RzTGlua3Nbb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2ldWzBdLnNlbWFudGljT2JqZWN0XSA9IHtcblx0XHRcdFx0XHRcdFx0XHRsaW5rczogYUxpbmtzW2ldXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdHRoaXMubGlua3NDYWNoZSA9IE9iamVjdC5hc3NpZ24odGhpcy5saW5rc0NhY2hlLCBvU2VtYW50aWNPYmplY3RzTGlua3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvQ2FjaGVSZXN1bHRzLmNhY2hlZExpbmtzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHJldHVybiBhTGlua3M7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgYU1lcmdlZExpbmtzID0gW107XG5cdFx0XHRcdFx0bGV0IGogPSAwO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIG9DYWNoZVJlc3VsdHMub2xkQXJncykge1xuXHRcdFx0XHRcdFx0aWYgKGogPCBhTGlua3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChhTGlua3Nbal0ubGVuZ3RoID4gMCAmJiBpdGVtWzBdLnNlbWFudGljT2JqZWN0ID09PSBvQ2FjaGVSZXN1bHRzLm5ld0FyZ3Nbal1bMF0uc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRhTWVyZ2VkTGlua3MucHVzaChhTGlua3Nbal0pO1xuXHRcdFx0XHRcdFx0XHRcdGorKztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhTWVyZ2VkTGlua3MucHVzaChpdGVtWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goaXRlbVswXS5saW5rcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBhTWVyZ2VkTGlua3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgU2hlbGxDb250YWluZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHByZWRlZmluZWQgc2hlbGxDb250YWluZXIgbWV0aG9kc1xuXHQgKi9cblx0Z2V0U2hlbGxDb250YWluZXIoKTogQ29udGFpbmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXI7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHRvRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICpcblx0ICogQHBhcmFtIG9OYXZBcmd1bWVudHNBcnIgQW5kXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PnRvRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqL1xuXHR0b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbi50b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IHN0YXJ0dXBBcHBTdGF0ZVxuXHQgKiBXaWxsIGNoZWNrIHRoZSBleGlzdGFuY2Ugb2YgdGhlIFNoZWxsQ29udGFpbmVyIGFuZCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0U3RhcnR1cEFwcFN0YXRlIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0U3RhcnR1cEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gT2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRTdGFydHVwQXBwU3RhdGUob0FyZ3M6IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkIHwgU3RhcnR1cEFwcFN0YXRlPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFN0YXJ0dXBBcHBTdGF0ZShvQXJncyk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGJhY2tUb1ByZXZpb3VzQXBwIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBTb21ldGhpbmcgdGhhdCBpbmRpY2F0ZSB3ZSd2ZSBuYXZpZ2F0ZWRcblx0ICovXG5cdGFzeW5jIGJhY2tUb1ByZXZpb3VzQXBwKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5iYWNrVG9QcmV2aW91c0FwcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBocmVmRm9yRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmhyZWZGb3JFeHRlcm5hbCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHN0cmluZ1xuXHQgKi9cblx0YXN5bmMgaHJlZkZvckV4dGVybmFsKG9BcmdzOiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRIcmVmKG9BcmdzLCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50IGFuZCBvQXBwU3RhdGVLZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50XG5cdCAqIEBwYXJhbSBzQXBwU3RhdGVLZXkgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0QXBwU3RhdGUgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGdldEFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCwgc0FwcFN0YXRlS2V5OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0QXBwU3RhdGUob0NvbXBvbmVudCwgc0FwcFN0YXRlS2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY3JlYXRlRW1wdHlBcHBTdGF0ZSBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmNyZWF0ZUVtcHR5QXBwU3RhdGUgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGlzTmF2aWdhdGlvblN1cHBvcnRlZCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIE5hdmlnYXRpb24gQXJndW1lbnRzIGFuZCBvQ29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gYVRhcmdldHNcblx0ICogQHBhcmFtIG9Db21wb25lbnQgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+aXNOYXZpZ2F0aW9uU3VwcG9ydGVkIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBpc05hdmlnYXRpb25TdXBwb3J0ZWQoYVRhcmdldHM6IFRhcmdldFtdLCBvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5pc05hdmlnYXRpb25TdXBwb3J0ZWQoYVRhcmdldHMsIG9Db21wb25lbnQpIGFzIHVua25vd24gYXMgUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmllZCB0YXJnZXQgb3V0c2lkZSBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgYXBwbGljYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBvVGFyZ2V0IFRoZSBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICogQHBhcmFtIFtvQ29tcG9uZW50XSBBIFVJNSBjb21wb25lbnQsIHVzZWQgdG8gbG9naWNhbGx5IGF0dGFjaCBhbnkgcmVsYXRlZCBhcHAgc3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgb25jZSB0aGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkLiBUaGUgUHJvbWlzZSBtaWdodCBuZXZlciByZWplY3Qgb3IgcmVzb2x2ZVxuXHQgKiAgICAgICAgICAgICAgICAgICAgd2hlbiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBuYXZpZ2F0aW9uLlxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGUob1RhcmdldDogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXQsIG9Db21wb25lbnQpKSBhcyB1bmtub3duIGFzIFByb21pc2U8dW5kZWZpbmVkPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNJbml0aWFsTmF2aWdhdGlvbkFzeW5jIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gYm9vbGVhblxuXHQgKi9cblx0YXN5bmMgaXNJbml0aWFsTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uaXNJbml0aWFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBleHBhbmRDb21wYWN0SGFzaCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoRnJhZ21lbnQgQW4gKGludGVybmFsIGZvcm1hdCkgc2hlbGwgaGFzaFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhlIHN1Y2Nlc3MgaGFuZGxlciBvZiB0aGUgcmVzb2x2ZSBwcm9taXNlIGdldCBhbiBleHBhbmRlZCBzaGVsbCBoYXNoIGFzIGZpcnN0IGFyZ3VtZW50XG5cdCAqL1xuXHRhc3luYyBleHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLm5hdlRhcmdldFJlc29sdXRpb24uZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudCk7XG5cdH1cblxuXHRnZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGAjJHt0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLmdldFNoZWxsSGFzaCh3aW5kb3cubG9jYXRpb24uaHJlZil9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIGFsbCB0aGUgcGx1Z2lucyB3aGljaCBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBQbHVnaW5NYW5hZ2VyLCBzb3J0ZWQgYnkgc3VwcG9ydGVkIHBsdWdpbiBjYXRlZ29yaWVzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBNYXAgb2YgcmVnaXN0ZXJlZCBwbHVnaW5zXG5cdCAqL1xuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUge1xuXHRcdHJldHVybiB0aGlzLnNoZWxsUGx1Z2luTWFuYWdlci5nZXRSZWdpc3RlcmVkUGx1Z2lucygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGZvciB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwbHVnaW4gc2V0dXAgaW4gdGhlIEZMUC5cblx0ICpcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwbHVnaW4gaXMgc2V0IHVwIGFuZCBlbmFibGVkLlxuXHQgKi9cblx0aXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyA9IHRoaXMuZ2V0UmVnaXN0ZXJlZFBsdWdpbnMoKS5SZW5kZXJlckV4dGVuc2lvbnM7XG5cdFx0aWYgKFxuXHRcdFx0ZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucz8uaGFzT3duUHJvcGVydHkoXCJNQU5BR0VfRkVfQ0FDSEVTXCIpICYmXG5cdFx0XHQhIShmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIG9iamVjdD4+KS5NQU5BR0VfRkVfQ0FDSEVTLmVuYWJsZWRcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBwYXJzZVNoZWxsSGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PnBhcnNlU2hlbGxIYXNoIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBUaGUgcGFyc2VkIHVybFxuXHQgKi9cblx0cGFyc2VTaGVsbEhhc2goc0hhc2g6IHN0cmluZyk6IFBhcnNlZEhhc2gge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLnBhcnNlU2hlbGxIYXNoKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc3BsaXRIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+c3BsaXRIYXNoIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZyk6IHsgc2hlbGxQYXJ0Pzogc3RyaW5nOyBhcHBTcGVjaWZpY1JvdXRlPzogc3RyaW5nIH0ge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLnNwbGl0SGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNvbnN0cnVjdFNoZWxsSGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwYXJhbSBvTmV3U2hlbGxIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+Y29uc3RydWN0U2hlbGxIYXNoIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBTaGVsbCBIYXNoIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2g6IG9iamVjdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UuY29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXREaXJ0eUZsYWcgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBiRGlydHkgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIuc2V0RGlydHlGbGFnIGFyZ3VtZW50c1xuXHQgKi9cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLnNldERpcnR5RmxhZyhiRGlydHkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCByZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZSBwcm92aWRlciBjYWxsYmFjayBtZXRob2QuXG5cdCAqXG5cdCAqIEBwYXJhbSBmbkRpcnR5U3RhdGVQcm92aWRlciBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlIHByb3ZpZGVyIGNhbGxiYWNrIG1ldGhvZC5cblx0ICpcblx0ICogQHBhcmFtIGZuRGlydHlTdGF0ZVByb3ZpZGVyIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgYXJndW1lbnRzXG5cdCAqL1xuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZVJlbmRlcmVyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHJlbmRlcmVyIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgY3JlYXRlUmVuZGVyZXIoKTogUHJvbWlzZTxDb250cm9sIHwgQ29tcG9uZW50Q29udGFpbmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmNyZWF0ZVJlbmRlcmVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldFVzZXIgbWV0aG9kIG9mIHVzaGVsbCBjb250YWluZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJldHVybnMgVXNlciBvYmplY3Rcblx0ICovXG5cdGdldFVzZXIoKTogVXNlckluZm8ge1xuXHRcdHJldHVybiB0aGlzLnVzZXJJbmZvU2VydmljZTtcblx0fVxuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRVc2VyKCkuaXNKYW1BY3RpdmUoKTtcblx0fVxuXG5cdGdldFVzZXJJbml0aWFscygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRVc2VyKCkuZ2V0SW5pdGlhbHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNoZWNrIGlmIHVzaGVsbCBjb250YWluZXIgaXMgYXZhaWxhYmxlIG9yIG5vdC5cblx0ICpcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlXG5cdCAqL1xuXHRoYXNVU2hlbGwoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciBtZXRob2Qgb2Ygc2hlbGxOYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byByZWdpc3RlclxuXHQgKi9cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uLnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIG1ldGhvZCBvZiBzaGVsbE5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBmbk5hdkZpbHRlciBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHVucmVnaXN0ZXJcblx0ICovXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uLnVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0QmFja05hdmlnYXRpb24gbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGJhY2sgYnV0dG9uIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBmbkNhbGxCYWNrIEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIGluIHRoZSBVSS5cblx0ICovXG5cdHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0SGllcmFyY2h5IG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiBoaWVyYXJjaHkgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIFthSGllcmFyY2h5TGV2ZWxzXSBBbiBhcnJheSByZXByZXNlbnRpbmcgaGllcmFyY2hpZXMgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgYXBwLlxuXHQgKi9cblx0c2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IG9iamVjdFtdKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVscyk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldFRpdGxlIG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiB0aXRsZSBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gW3NUaXRsZV0gVGhlIG5ldyB0aXRsZS4gVGhlIGRlZmF1bHQgdGl0bGUgaXMgc2V0IGlmIHRoaXMgYXJndW1lbnQgaXMgbm90IGdpdmVuLlxuXHQgKi9cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsVUlTZXJ2aWNlLnNldFRpdGxlKHNUaXRsZSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldFRpdGxlIG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiB0aXRsZSBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgdGl0bGUgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKi9cblx0Z2V0VGl0bGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zaGVsbFVJU2VydmljZS5nZXRUaXRsZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IGRlZmluZWQgY29udGVudCBkZW5zaXR5LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGVudCBkZW5zaXR5IHZhbHVlXG5cdCAqL1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiAodGhpcy5vU2hlbGxDb250YWluZXIgYXMgYW55KS5nZXRVc2VyKCkuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QsIHRoaXMgbWV0aG9kIGNvbnNpZGVycyBhbGwgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbWFudGljIG9iamVjdCBhbmRcblx0ICogcmV0dXJucyB0aGUgb25lIHRhZ2dlZCBhcyBhIFwicHJpbWFyeUFjdGlvblwiLiBJZiBubyBpbmJvdW5kIHRhZ2dlZCBhcyBcInByaW1hcnlBY3Rpb25cIiBleGlzdHMsIHRoZW4gaXQgcmV0dXJuc1xuXHQgKiB0aGUgaW50ZW50IG9mIHRoZSBmaXJzdCBpbmJvdW5kIChhZnRlciBzb3J0aW5nIGhhcyBiZWVuIGFwcGxpZWQpIG1hdGNoaW5nIHRoZSBhY3Rpb24gXCJkaXNwbGF5RmFjdFNoZWV0XCIuXG5cdCAqXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgU2VlICNDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiNnZXRMaW5rcyBmb3IgZGVzY3JpcHRpb24uXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnRlbnQgaWYgaXQgZXhpc3RzLlxuXHQgKi9cblx0YXN5bmMgZ2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBMaW5rRmlsdGVyKTogUHJvbWlzZTxMaW5rPiB7XG5cdFx0Y29uc3QgcHJpbWFyeUludGVudCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0LCBtUGFyYW1ldGVycyk7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkocHJpbWFyeUludGVudCkpIHtcblx0XHRcdHJldHVybiBwcmltYXJ5SW50ZW50WzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHJlbmRlciBleHRlbnNpb25zIHBsdWdpbiB0byBiZSBsb2FkZWQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgd2UgYXJlIGFibGUgdG8gd2FpdCBmb3IgaXQsIG90aGVyd2lzZSB3ZSBjb3VsZG4ndCBhbmQgY2Fubm90IHJlbHkgb24gaXQuXG5cdCAqL1xuXHRhc3luYyB3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyPy5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZSkge1xuXHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlclxuXHRcdFx0XHRcdC5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShcIlJlbmRlcmVyRXh0ZW5zaW9uc1wiKVxuXHRcdFx0XHRcdC5mYWlsKChvRXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihvRXJyb3IgYXMgc3RyaW5nLCBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNoZWxsU2VydmljZXNGYWN0b3J5LndhaXRGb3JQbHVnaW5zTG9hZFwiKTtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwZXJzb25hbGl6ZXIgZnJvbSB0aGUgc2hlbGwgc2VydmljZS5cblx0ICogV2Ugc2V0IHNvbWUgZGVmYXVsdHMgZm9yIHRoZSBzY29wZSBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBwZXJzSWQgUGVyc29uYWxpemF0aW9uIG9iamVjdFxuXHQgKiBAcGFyYW0gc2NvcGUgU2NvcGUgb2JqZWN0XG5cdCAqIEBwYXJhbSBjb21wb25lbnRcblx0ICogQHJldHVybnMgUGVyc29uYWxpemVyIG9iamVjdCB3aGljaCBoYW5kbGVzIHBlcnNvbmFsaXphdGlvblxuXHQgKi9cblx0YXN5bmMgZ2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4ge1xuXHRcdHNjb3BlID0ge1xuXHRcdFx0Ly8gbWVyZ2Ugc29tZSBkZWZhdWx0c1xuXHRcdFx0a2V5Q2F0ZWdvcnk6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy5rZXlDYXRlZ29yeS5GSVhFRF9LRVksXG5cdFx0XHR3cml0ZUZyZXF1ZW5jeTogdGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UuY29uc3RhbnRzLndyaXRlRnJlcXVlbmN5LkxPVyxcblx0XHRcdGNsaWVudFN0b3JhZ2VBbGxvd2VkOiBmYWxzZSxcblx0XHRcdHZhbGlkaXR5OiBJbmZpbml0eSxcblx0XHRcdC4uLnNjb3BlXG5cdFx0fTtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmdldFBlcnNvbmFsaXplcihwZXJzSWQsIHNjb3BlLCBjb21wb25lbnQpKSBhcyBQZXJzb25hbGl6ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSBjb250YWluZXIgaWRlbnRpZmllZCBieSBzQ29udGFpbmVyS2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ga2V5IENvbnRhaW5lciBrZXlcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBkZWxldGVkXG5cdCAqL1xuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoa2V5OiBzdHJpbmcsIHNjb3BlPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmRlbGV0ZUNvbnRhaW5lcihrZXksIHNjb3BlIGFzIHVua25vd24gYXMgb2JqZWN0KSBhcyBQcm9taXNlPHZvaWQ+O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2hlbGwgcmVuZGVyZXIgZnJvbSB0aGUgc2hlbGwgc2VydmljZS5cblx0ICpcblx0ICogQHJldHVybnMgU2hlbGwgcmVuZGVyZXIgXCJmaW9yaTJcIlxuXHQgKi9cblx0Z2V0U2hlbGxSZW5kZXJlckZpb3JpMigpOiBTaGVsbFJlbmRlcmVyRmlvcmkyVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2hlbGxDb250YWluZXIoKS5nZXRSZW5kZXJlcihcImZpb3JpMlwiKSBhcyB1bmtub3duIGFzIFNoZWxsUmVuZGVyZXJGaW9yaTJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2hlbGwgY29uZmlnIGZyb20gdGhlIHdpbmRvd3Mgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBTaGVsbCBjb25maWcgb2JqZWN0XG5cdCAqL1xuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGUge1xuXHRcdHJldHVybiAod2luZG93IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgb2JqZWN0PilbXCJzYXAtdXNoZWxsLWNvbmZpZ1wiXSBhcyBTaGVsbENvbmZpZ1R5cGU7XG5cdH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIEZhY3RvcnkgZm9yIHRoZSBTaGVsbFNlcnZpY2VzXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VzRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFNoZWxsU2VydmljZXNTZXR0aW5ncz4ge1xuXHQvKipcblx0ICogQ3JlYXRlcyBlaXRoZXIgYSBzdGFuZGFyZCBvciBhIG1vY2sgU2hlbGwgc2VydmljZSBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBvU2VydmljZUNvbnRleHQgVGhlIHNoZWxsc2VydmljZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYSBzaGVsbCBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG5cdCAqIEBzZWUgU2VydmljZUZhY3RvcnkjY3JlYXRlSW5zdGFuY2Vcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPik6IFByb21pc2U8SVNoZWxsU2VydmljZXM+IHtcblx0XHRvU2VydmljZUNvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXIgPSBzYXAudWkucmVxdWlyZShcInNhcC91c2hlbGwvQ29udGFpbmVyXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2UgPSBvU2VydmljZUNvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXJcblx0XHRcdD8gbmV3IFNoZWxsU2VydmljZXMob1NlcnZpY2VDb250ZXh0IGFzIFNlcnZpY2VDb250ZXh0PFJlcXVpcmVkPFNoZWxsU2VydmljZXNTZXR0aW5ncz4+KVxuXHRcdFx0OiBuZXcgU2hlbGxTZXJ2aWNlTW9jayhvU2VydmljZUNvbnRleHQpO1xuXHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlLmluaXRQcm9taXNlLnRoZW4oKCkgPT4ge1xuXHRcdFx0Ly8gRW5yaWNoIHRoZSBhcHBDb21wb25lbnQgd2l0aCB0aGlzIG1ldGhvZFxuXHRcdFx0b1NlcnZpY2VDb250ZXh0LnNjb3BlT2JqZWN0LmdldFNoZWxsU2VydmljZXMgPSAoKTogSVNoZWxsU2VydmljZXMgPT4gb1NoZWxsU2VydmljZTtcblx0XHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoZWxsU2VydmljZXNGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7RUFxS0E7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUlNQSxnQkFBZ0I7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBQUEsT0FLckJDLElBQUksR0FBSixnQkFBYTtNQUNaLElBQUksQ0FBQ0MsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQW1CO01BQzFELElBQUksQ0FBQ0MsWUFBWSxHQUFHLE1BQU07SUFDM0IsQ0FBQztJQUFBLE9BRUtDLFFBQVEsR0FBZCx5QkFBZTtJQUFBLEVBQXNDO01BQ3BELE9BQU9ILE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFS0csaUJBQWlCLEdBQXZCLGtDQUF3QjtJQUFBLEVBQXNDO01BQzdELE9BQU9KLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFREksVUFBVSxHQUFWLHFCQUFXO0lBQUEsRUFBK0Q7TUFDekU7SUFBQSxDQUNBO0lBQUEsT0FFS0Msa0JBQWtCLEdBQXhCLG1DQUF5QjtJQUFBLEVBQXlEO01BQ2pGLE9BQU9OLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDTSxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUFBLE9BRURDLFdBQVcsR0FBWCx1QkFBdUI7TUFDdEIsT0FBTyxLQUFLO0lBQ2IsQ0FBQztJQUFBLE9BRURDLGlCQUFpQixHQUFqQiw2QkFBMEI7TUFDekI7SUFBQSxDQUNBO0lBQUEsT0FFS0MsZUFBZSxHQUFyQixnQ0FBc0I7SUFBQSxFQUE0RTtNQUNqRyxPQUFPVixPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBLE9BRURVLE9BQU8sR0FBUCxtQkFBa0I7TUFDakIsT0FBT0MsTUFBTSxDQUFDQyxRQUFRLENBQUNDLElBQUk7SUFDNUIsQ0FBQztJQUFBLE9BRUtDLFdBQVcsR0FBakIsNEJBQWtCO0lBQUEsRUFBZ0U7TUFDakYsT0FBT2YsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUFBLE9BRUtlLG1CQUFtQixHQUF6QixvQ0FBMEI7SUFBQSxFQUEwQztNQUNuRSxPQUFPaEIsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUFBLE9BRUtnQix3QkFBd0IsR0FBOUIseUNBQStCO0lBQUEsRUFBMEM7TUFDeEUsT0FBT2pCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQSxPQUVLaUIsUUFBUSxHQUFkLHlCQUFlO0lBQUEsRUFBZ0U7TUFDOUUsT0FBT2xCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDTSxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUFBLE9BRUtZLHFCQUFxQixHQUEzQixzQ0FBNEI7SUFBQSxFQUE0RjtNQUN2SCxPQUFPbkIsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFBQSxPQUVLbUIsbUJBQW1CLEdBQXpCLHFDQUE4QztNQUM3QyxPQUFPcEIsT0FBTyxDQUFDQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFBQSxPQUVLb0IsaUJBQWlCLEdBQXZCLGtDQUF3QjtJQUFBLEVBQTRDO01BQ25FLE9BQU9yQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBLE9BRURxQixjQUFjLEdBQWQseUJBQWU7SUFBQSxFQUErQjtNQUM3QyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQSxPQUVEQyxTQUFTLEdBQVQsbUJBQVVDLEtBQWEsRUFBdUM7TUFDN0Q7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUNFLE1BQU1DLEtBQUssR0FBRyxjQUFjLENBQUNDLElBQUksQ0FBQ0YsS0FBSyxDQUFDO01BQ3hDLE9BQU87UUFDTkcsU0FBUyxFQUFFLEVBQUU7UUFDYkMsZ0JBQWdCLEVBQUUsQ0FBQUgsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVJLE1BQU0sTUFBSyxDQUFDLEdBQUdKLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRztNQUNwRCxDQUFDO0lBQ0YsQ0FBQztJQUFBLE9BRURLLGtCQUFrQixHQUFsQiw2QkFBbUI7SUFBQSxFQUFtQztNQUNyRCxPQUFPLEVBQUU7SUFDVixDQUFDO0lBQUEsT0FFREMsWUFBWSxHQUFaLHVCQUFhO0lBQUEsRUFBMkI7TUFDdkM7SUFBQSxDQUNBO0lBQUEsT0FFREMsMEJBQTBCLEdBQTFCLHFDQUEyQjtJQUFBLEVBQTBDO01BQ3BFO0lBQUEsQ0FDQTtJQUFBLE9BRURDLDRCQUE0QixHQUE1Qix1Q0FBNkI7SUFBQSxFQUEwQztNQUN0RTtJQUFBLENBQ0E7SUFBQSxPQUVEQyxjQUFjLEdBQWQsMEJBQXlCO01BQ3hCLE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBLE9BRURDLE9BQU8sR0FBUCxtQkFBb0I7TUFDbkIsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUEsT0FFREMsZUFBZSxHQUFmLDJCQUEwQjtNQUN6QixPQUFPLEVBQUU7SUFDVixDQUFDO0lBQUEsT0FFREMsU0FBUyxHQUFULHFCQUFxQjtNQUNwQixPQUFPLEtBQUs7SUFDYixDQUFDO0lBQUEsT0FFREMsd0JBQXdCLEdBQXhCLG1DQUF5QjtJQUFBLEVBQWlDO01BQ3pEO0lBQUEsQ0FDQTtJQUFBLE9BRURDLDBCQUEwQixHQUExQixxQ0FBMkI7SUFBQSxFQUFpQztNQUMzRDtJQUFBLENBQ0E7SUFBQSxPQUVEQyxpQkFBaUIsR0FBakIsNEJBQWtCO0lBQUEsRUFBaUM7TUFDbEQ7SUFBQSxDQUNBO0lBQUEsT0FFREMsWUFBWSxHQUFaLHVCQUFhO0lBQUEsRUFBMkM7TUFDdkQ7SUFBQSxDQUNBO0lBQUEsT0FFREMsUUFBUSxHQUFSLG1CQUFTO0lBQUEsRUFBMEI7TUFDbEM7SUFBQSxDQUNBO0lBQUEsT0FFREMsaUJBQWlCLEdBQWpCLDZCQUE0QjtNQUMzQjtNQUNBLElBQUlDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUN0RCxPQUFPLE1BQU07TUFDZCxDQUFDLE1BQU0sSUFBSUgsUUFBUSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDaEUsT0FBTyxTQUFTO01BQ2pCLENBQUMsTUFBTTtRQUNOLE9BQU8sRUFBRTtNQUNWO0lBQ0QsQ0FBQztJQUFBLE9BRUtDLGdCQUFnQixHQUF0QixpQ0FBdUI7SUFBQSxFQUFrRTtNQUN4RixPQUFPaEQsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQVM7SUFDbkMsQ0FBQztJQUFBLE9BRUtnRCxrQkFBa0IsR0FBeEIsb0NBQTZDO01BQzVDLE9BQU9qRCxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUFBLE9BRURpRCxRQUFRLEdBQVIsb0JBQW1CO01BQ2xCLE9BQU8sRUFBRTtJQUNWLENBQUM7SUFBQSxPQUVLQyxlQUFlLEdBQXJCLCtCQUFzQkMsT0FBZSxFQUFFQyxNQUFhLEVBQUVDLFVBQXNCLEVBQTZCO01BQ3hHLE9BQU90RCxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBcUI7SUFDL0MsQ0FBQztJQUFBLE9BRUtzRCw4QkFBOEIsR0FBcEMsOENBQXFDQyxJQUFZLEVBQUVILE1BQWUsRUFBaUI7TUFDbEYsT0FBT3JELE9BQU8sQ0FBQ0MsT0FBTyxFQUFFO0lBQ3pCLENBQUM7SUFBQSxPQUVEd0Qsc0JBQXNCLEdBQXRCLGtDQUFrRDtNQUNqRCxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQSxPQUVEQyxjQUFjLEdBQWQsMEJBQWtDO01BQ2pDLE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBLE9BRURDLG9CQUFvQixHQUFwQixnQ0FBaUQ7TUFDaEQsT0FBTztRQUNOQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2JDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUN0QkMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNoQkMsU0FBUyxFQUFFLENBQUM7TUFDYixDQUFDO0lBQ0YsQ0FBQztJQUFBLE9BRURDLGdDQUFnQyxHQUFoQyw0Q0FBNEM7TUFDM0MsT0FBTyxLQUFLO0lBQ2IsQ0FBQztJQUFBO0VBQUEsRUFoTTZCQyxPQUFPO0VBbU10QztBQUNBO0FBQ0E7RUFnQkE7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUlNQyxhQUFhO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQUFBLFFBK0JsQnBFLElBQUksR0FBSixnQkFBYTtNQUNaLE1BQU1xRSxRQUFRLEdBQUcsSUFBSSxDQUFDQyxVQUFVLEVBQUU7TUFDbEMsTUFBTUMsVUFBVSxHQUFHRixRQUFRLENBQUNHLFdBQXdCO01BQ3BELElBQUksQ0FBQ0MsZUFBZSxHQUFHSixRQUFRLENBQUNLLFFBQVEsQ0FBQ0MsY0FBYztNQUN2RCxJQUFJLENBQUN2RSxZQUFZLEdBQUcsTUFBTTtNQUMxQixJQUFJLENBQUN3RSxVQUFVLEdBQUcsQ0FBQyxDQUFDO01BQ3BCLElBQUksQ0FBQ0MsNEJBQTRCLEdBQUcsVUFBVUMsS0FBbUIsRUFBVTtRQUMxRSxNQUFNQyxzQkFBZ0MsR0FBRyxFQUFFO1FBQzNDLE1BQU1DLHlCQUF1QyxHQUFHLEVBQUU7UUFDbEQsS0FBSyxNQUFNQyxVQUFVLElBQUlILEtBQUssRUFBRTtVQUMvQixJQUFJLENBQUMsQ0FBQ0csVUFBVSxJQUFJLENBQUMsQ0FBQ0EsVUFBVSxDQUFDQyxjQUFjLEVBQUU7WUFDaEQsSUFBSSxJQUFJLENBQUNOLFVBQVUsQ0FBQ0ssVUFBVSxDQUFDQyxjQUFjLENBQUMsRUFBRTtjQUMvQ0gsc0JBQXNCLENBQUNJLElBQUksQ0FBQyxJQUFJLENBQUNQLFVBQVUsQ0FBQ0ssVUFBVSxDQUFDQyxjQUFjLENBQUMsQ0FBQ0UsS0FBSyxDQUFDO2NBQzdFQyxNQUFNLENBQUNDLGNBQWMsQ0FBQ0wsVUFBVSxFQUFFLE9BQU8sRUFBRTtnQkFDMUNNLEtBQUssRUFBRSxJQUFJLENBQUNYLFVBQVUsQ0FBQ0ssVUFBVSxDQUFDQyxjQUFjLENBQUMsQ0FBQ0U7Y0FDbkQsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxNQUFNO2NBQ05KLHlCQUF5QixDQUFDRyxJQUFJLENBQUNGLFVBQVUsQ0FBQztZQUMzQztVQUNEO1FBQ0Q7UUFDQSxPQUFPO1VBQUVPLE9BQU8sRUFBRVYsS0FBSztVQUFFVyxPQUFPLEVBQUVULHlCQUF5QjtVQUFFVSxXQUFXLEVBQUVYO1FBQXVCLENBQUM7TUFDbkcsQ0FBQztNQUNELElBQUksQ0FBQzlFLFdBQVcsR0FBRyxJQUFJQyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFd0YsTUFBTSxLQUFLO1FBQ25ELElBQUksQ0FBQ0MsU0FBUyxHQUFHekYsT0FBTztRQUN4QixJQUFJLENBQUMwRixRQUFRLEdBQUdGLE1BQU07TUFDdkIsQ0FBQyxDQUFDO01BQ0YsTUFBTUcsa0JBQWtCLEdBQUcsSUFBSSxDQUFDckIsZUFBZSxDQUFDc0IsZUFBZSxDQUFDLFlBQVksQ0FBQztNQUM3RSxNQUFNQyxvQkFBb0IsR0FBRyxJQUFJLENBQUN2QixlQUFlLENBQUNzQixlQUFlLENBQUMscUJBQXFCLENBQUM7TUFDeEYsTUFBTUUsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDeEIsZUFBZSxDQUFDc0IsZUFBZSxDQUFDLFVBQVUsQ0FBQztNQUN6RSxNQUFNRyx5QkFBeUIsR0FBRyxJQUFJLENBQUN6QixlQUFlLENBQUNzQixlQUFlLENBQUMsWUFBWSxDQUFDO01BQ3BGLE1BQU1JLDhCQUE4QixHQUFHLElBQUksQ0FBQzFCLGVBQWUsQ0FBQ3NCLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQztNQUM5RixNQUFNSywwQkFBMEIsR0FBRyxJQUFJLENBQUMzQixlQUFlLENBQUNzQixlQUFlLENBQUMsZUFBZSxDQUFDO01BQ3hGLE1BQU1NLG1DQUFtQyxHQUFHLElBQUksQ0FBQzVCLGVBQWUsQ0FBQ3NCLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQztNQUNyRyxNQUFNTyxzQkFBc0IsR0FBRy9CLFVBQVUsQ0FBQ2dDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztNQUV0RXJHLE9BQU8sQ0FBQ3NHLEdBQUcsQ0FBQyxDQUNYVixrQkFBa0IsRUFDbEJFLG9CQUFvQixFQUNwQkMsZ0JBQWdCLEVBQ2hCQyx5QkFBeUIsRUFDekJDLDhCQUE4QixFQUM5Qkcsc0JBQXNCLEVBQ3RCRCxtQ0FBbUMsRUFDbkNELDBCQUEwQixDQUMxQixDQUFDLENBQ0FLLElBQUksQ0FDSixRQVNNO1FBQUEsSUFUTCxDQUNBQyxpQkFBaUIsRUFDakJDLDBCQUEwQixFQUMxQkMsZUFBZSxFQUNmQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMsZUFBZSxFQUNmQyw0QkFBNEIsRUFDNUJDLG1CQUFtQixDQUNuQjtRQUNBLElBQUksQ0FBQ0MscUJBQXFCLEdBQUdSLGlCQUErQjtRQUM1RCxJQUFJLENBQUNTLG1CQUFtQixHQUFHUiwwQkFBaUQ7UUFDNUUsSUFBSSxDQUFDQyxlQUFlLEdBQUdBLGVBQTJCO1FBQ2xELElBQUksQ0FBQ1EsaUJBQWlCLEdBQUdQLGtCQUFnQztRQUN6RCxJQUFJLENBQUNRLGVBQWUsR0FBR1AsZ0JBQW1DO1FBQzFELElBQUksQ0FBQ1EsY0FBYyxHQUFHUCxlQUFlO1FBQ3JDLElBQUksQ0FBQ1EsMkJBQTJCLEdBQUdQLDRCQUE0RDtRQUMvRixJQUFJLENBQUNRLGtCQUFrQixHQUFHUCxtQkFBeUM7UUFDbkUsSUFBSSxDQUFDckIsU0FBUyxFQUFFO1FBQ2hCO01BQ0QsQ0FBQyxDQUNELENBQ0E2QixLQUFLLENBQUMsSUFBSSxDQUFDNUIsUUFBUSxDQUFDO0lBQ3ZCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQSxRQVVNeEYsUUFBUSxHQUFkLHdCQUFleUUsS0FBb0IsRUFBcUI7TUFDdkQsT0FBTyxJQUFJLENBQUNvQyxxQkFBcUIsQ0FBQzdHLFFBQVEsQ0FBQ3lFLEtBQUssQ0FBQztJQUNsRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUEsUUFVTXhFLGlCQUFpQixHQUF2QixpQ0FBd0J3RSxLQUFvQixFQUFxQjtNQUNoRSxJQUFLQSxLQUFLLENBQWMvQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JDLE9BQU8sRUFBRTtNQUNWLENBQUMsTUFBTTtRQUNOLE1BQU0yRixhQUFhLEdBQUcsSUFBSSxDQUFDN0MsNEJBQTRCLENBQUNDLEtBQUssQ0FBQztRQUU5RCxJQUFJNEMsYUFBYSxDQUFDakMsT0FBTyxDQUFDMUQsTUFBTSxLQUFLLENBQUMsRUFBRTtVQUN2QyxPQUFPMkYsYUFBYSxDQUFDaEMsV0FBVztRQUNqQyxDQUFDLE1BQU07VUFDTixNQUFNaUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDVCxxQkFBcUIsQ0FBQzdHLFFBQVEsQ0FBQ3FILGFBQWEsQ0FBQ2pDLE9BQU8sQ0FBQztVQUMvRSxJQUFJa0MsTUFBTSxDQUFDNUYsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QixNQUFNNkYscUJBQXdELEdBQUcsQ0FBQyxDQUFDO1lBRW5FLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixNQUFNLENBQUM1RixNQUFNLEVBQUU4RixDQUFDLEVBQUUsRUFBRTtjQUN2QyxJQUFJRixNQUFNLENBQUNFLENBQUMsQ0FBQyxDQUFDOUYsTUFBTSxHQUFHLENBQUMsSUFBSTJGLGFBQWEsQ0FBQ2pDLE9BQU8sQ0FBQ29DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDekMsS0FBSyxLQUFLM0UsU0FBUyxFQUFFO2dCQUM1RW1ILHFCQUFxQixDQUFDRixhQUFhLENBQUNqQyxPQUFPLENBQUNvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNDLGNBQWMsQ0FBQyxHQUFHO2tCQUNuRUUsS0FBSyxFQUFFdUMsTUFBTSxDQUFDRSxDQUFDO2dCQUNoQixDQUFDO2dCQUNELElBQUksQ0FBQ2pELFVBQVUsR0FBR1MsTUFBTSxDQUFDeUMsTUFBTSxDQUFDLElBQUksQ0FBQ2xELFVBQVUsRUFBRWdELHFCQUFxQixDQUFDO2NBQ3hFO1lBQ0Q7VUFDRDtVQUVBLElBQUlGLGFBQWEsQ0FBQ2hDLFdBQVcsQ0FBQzNELE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0MsT0FBTzRGLE1BQU07VUFDZCxDQUFDLE1BQU07WUFDTixNQUFNSSxZQUFZLEdBQUcsRUFBRTtZQUN2QixJQUFJQyxDQUFDLEdBQUcsQ0FBQztZQUVULEtBQUssTUFBTUMsSUFBSSxJQUFJUCxhQUFhLENBQUNsQyxPQUFPLEVBQUU7Y0FDekMsSUFBSXdDLENBQUMsR0FBR0wsTUFBTSxDQUFDNUYsTUFBTSxFQUFFO2dCQUN0QixJQUFJNEYsTUFBTSxDQUFDSyxDQUFDLENBQUMsQ0FBQ2pHLE1BQU0sR0FBRyxDQUFDLElBQUlrRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMvQyxjQUFjLEtBQUt3QyxhQUFhLENBQUNqQyxPQUFPLENBQUN1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlDLGNBQWMsRUFBRTtrQkFDbEc2QyxZQUFZLENBQUM1QyxJQUFJLENBQUN3QyxNQUFNLENBQUNLLENBQUMsQ0FBQyxDQUFDO2tCQUM1QkEsQ0FBQyxFQUFFO2dCQUNKLENBQUMsTUFBTTtrQkFDTkQsWUFBWSxDQUFDNUMsSUFBSSxDQUFDOEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDO2dCQUNqQztjQUNELENBQUMsTUFBTTtnQkFDTjJDLFlBQVksQ0FBQzVDLElBQUksQ0FBQzhDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzdDLEtBQUssQ0FBQztjQUNqQztZQUNEO1lBQ0EsT0FBTzJDLFlBQVk7VUFDcEI7UUFDRDtNQUNEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLQUcsaUJBQWlCLEdBQWpCLDZCQUErQjtNQUM5QixPQUFPLElBQUksQ0FBQ3pELGVBQWU7SUFDNUI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBLFFBT0FsRSxVQUFVLEdBQVYsb0JBQVc0SCxnQkFBK0IsRUFBRTVELFVBQXNCLEVBQVE7TUFDekUsSUFBSSxDQUFDOEMsZUFBZSxDQUFDOUcsVUFBVSxDQUFDNEgsZ0JBQWdCLEVBQUU1RCxVQUFVLENBQUM7SUFDOUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBLFFBVU0vRCxrQkFBa0IsR0FBeEIsa0NBQXlCc0UsS0FBZ0IsRUFBd0M7TUFDaEYsT0FBTyxJQUFJLENBQUNvQyxxQkFBcUIsQ0FBQzFHLGtCQUFrQixDQUFDc0UsS0FBSyxDQUFDO0lBQzVEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS01uRSxpQkFBaUIsR0FBdkIsbUNBQXlDO01BQ3hDLE9BQU8sSUFBSSxDQUFDdUcscUJBQXFCLENBQUN2RyxpQkFBaUIsRUFBRTtJQUN0RDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQSxRQVFNQyxlQUFlLEdBQXJCLCtCQUFzQmtFLEtBQWEsRUFBRVAsVUFBc0IsRUFBbUI7TUFDN0UsT0FBTyxJQUFJLENBQUMyQyxxQkFBcUIsQ0FBQ2tCLE9BQU8sQ0FBQ3RELEtBQUssRUFBRVAsVUFBVSxDQUFDO0lBQzdEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBLFFBUU10RCxXQUFXLEdBQWpCLDJCQUFrQnNELFVBQXFCLEVBQUU4RCxZQUFvQixFQUFvQjtNQUNoRixPQUFPLElBQUksQ0FBQ25CLHFCQUFxQixDQUFDakcsV0FBVyxDQUFDc0QsVUFBVSxFQUFFOEQsWUFBWSxDQUFDO0lBQ3hFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQSxRQU9NbkgsbUJBQW1CLEdBQXpCLG1DQUEwQnFELFVBQXFCLEVBQW9CO01BQ2xFLE9BQU8sSUFBSSxDQUFDMkMscUJBQXFCLENBQUNoRyxtQkFBbUIsQ0FBQ3FELFVBQVUsQ0FBQztJQUNsRTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQSxRQVFNbEQscUJBQXFCLEdBQTNCLHFDQUE0QmlILFFBQWtCLEVBQUUvRCxVQUFxQixFQUFxQztNQUN6RyxPQUFPLElBQUksQ0FBQzJDLHFCQUFxQixDQUFDN0YscUJBQXFCLENBQUNpSCxRQUFRLEVBQUUvRCxVQUFVLENBQUM7SUFDOUU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUEsUUFRTW5ELFFBQVEsR0FBZCx3QkFBZW1ILE9BQWUsRUFBRWhFLFVBQXNCLEVBQXNCO01BQzNFLE9BQVEsTUFBTSxJQUFJLENBQUMyQyxxQkFBcUIsQ0FBQzlGLFFBQVEsQ0FBQ21ILE9BQU8sRUFBRWhFLFVBQVUsQ0FBQztJQUN2RTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQSxRQUtNakQsbUJBQW1CLEdBQXpCLHFDQUE4QztNQUM3QyxPQUFPLElBQUksQ0FBQzRGLHFCQUFxQixDQUFDNUYsbUJBQW1CLEVBQUU7SUFDeEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQSxRQU1NQyxpQkFBaUIsR0FBdkIsaUNBQXdCaUgsYUFBcUIsRUFBbUI7TUFDL0QsT0FBTyxJQUFJLENBQUNyQixtQkFBbUIsQ0FBQzVGLGlCQUFpQixDQUFDaUgsYUFBYSxDQUFDO0lBQ2pFLENBQUM7SUFBQSxRQUVEM0gsT0FBTyxHQUFQLG1CQUFrQjtNQUNqQixPQUFRLElBQUcsSUFBSSxDQUFDdUcsaUJBQWlCLENBQUNxQixZQUFZLENBQUMzSCxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFFLEVBQUM7SUFDdkU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLQTZDLG9CQUFvQixHQUFwQixnQ0FBaUQ7TUFDaEQsT0FBTyxJQUFJLENBQUMyRCxrQkFBa0IsQ0FBQzNELG9CQUFvQixFQUFFO0lBQ3REOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0FLLGdDQUFnQyxHQUFoQyw0Q0FBNEM7TUFDM0MsTUFBTXdFLDRCQUE0QixHQUFHLElBQUksQ0FBQzdFLG9CQUFvQixFQUFFLENBQUNFLGtCQUFrQjtNQUNuRixJQUNDMkUsNEJBQTRCLGFBQTVCQSw0QkFBNEIsZUFBNUJBLDRCQUE0QixDQUFFQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFDaEUsQ0FBQyxDQUFFRCw0QkFBNEIsQ0FBNENFLGdCQUFnQixDQUFDQyxPQUFPLEVBQ2xHO1FBQ0QsT0FBTyxJQUFJO01BQ1osQ0FBQyxNQUFNO1FBQ04sT0FBTyxLQUFLO01BQ2I7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPQXJILGNBQWMsR0FBZCx3QkFBZUUsS0FBYSxFQUFjO01BQ3pDLE9BQU8sSUFBSSxDQUFDMEYsaUJBQWlCLENBQUM1RixjQUFjLENBQUNFLEtBQUssQ0FBQztJQUNwRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPQUQsU0FBUyxHQUFULG1CQUFVQyxLQUFhLEVBQXFEO01BQzNFLE9BQU8sSUFBSSxDQUFDMEYsaUJBQWlCLENBQUMzRixTQUFTLENBQUNDLEtBQUssQ0FBQztJQUMvQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPQU0sa0JBQWtCLEdBQWxCLDRCQUFtQjhHLGFBQXFCLEVBQVU7TUFDakQsT0FBTyxJQUFJLENBQUMxQixpQkFBaUIsQ0FBQ3BGLGtCQUFrQixDQUFDOEcsYUFBYSxDQUFDO0lBQ2hFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0E3RyxZQUFZLEdBQVosc0JBQWE4RyxNQUFlLEVBQVE7TUFDbkMsSUFBSSxDQUFDdEUsZUFBZSxDQUFDeEMsWUFBWSxDQUFDOEcsTUFBTSxDQUFDO0lBQzFDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0E3RywwQkFBMEIsR0FBMUIsb0NBQTJCOEcsb0JBQW1DLEVBQVE7TUFDckUsSUFBSSxDQUFDdkUsZUFBZSxDQUFDdkMsMEJBQTBCLENBQUM4RyxvQkFBb0IsQ0FBQztJQUN0RTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQSxRQUtBN0csNEJBQTRCLEdBQTVCLHNDQUE2QjZHLG9CQUFtQyxFQUFRO01BQ3ZFLElBQUksQ0FBQ3ZFLGVBQWUsQ0FBQ3RDLDRCQUE0QixDQUFDNkcsb0JBQW9CLENBQUM7SUFDeEU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLTTVHLGNBQWMsR0FBcEIsZ0NBQThEO01BQzdELE9BQU8sSUFBSSxDQUFDcUMsZUFBZSxDQUFDckMsY0FBYyxFQUFFO0lBQzdDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0FDLE9BQU8sR0FBUCxtQkFBb0I7TUFDbkIsT0FBTyxJQUFJLENBQUN1RSxlQUFlO0lBQzVCLENBQUM7SUFBQSxRQUVEbEcsV0FBVyxHQUFYLHVCQUF1QjtNQUN0QixPQUFPLElBQUksQ0FBQytELGVBQWUsQ0FBQ3BDLE9BQU8sRUFBRSxDQUFDM0IsV0FBVyxFQUFFO0lBQ3BELENBQUM7SUFBQSxRQUVENEIsZUFBZSxHQUFmLDJCQUEwQjtNQUN6QixPQUFPLElBQUksQ0FBQ21DLGVBQWUsQ0FBQ3BDLE9BQU8sRUFBRSxDQUFDNEcsV0FBVyxFQUFFO0lBQ3BEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0ExRyxTQUFTLEdBQVQscUJBQXFCO01BQ3BCLE9BQU8sSUFBSTtJQUNaOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0FDLHdCQUF3QixHQUF4QixrQ0FBeUIwRyxXQUFxQixFQUFRO01BQ3JELElBQUksQ0FBQzdCLGVBQWUsQ0FBQzdFLHdCQUF3QixDQUFDMEcsV0FBVyxDQUFDO0lBQzNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0F6RywwQkFBMEIsR0FBMUIsb0NBQTJCeUcsV0FBcUIsRUFBUTtNQUN2RCxJQUFJLENBQUM3QixlQUFlLENBQUM1RSwwQkFBMEIsQ0FBQ3lHLFdBQVcsQ0FBQztJQUM3RDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLFFBTUF4RyxpQkFBaUIsR0FBakIsMkJBQWtCeUcsVUFBb0IsRUFBUTtNQUM3QyxJQUFJLENBQUM3QixjQUFjLENBQUM1RSxpQkFBaUIsQ0FBQ3lHLFVBQVUsQ0FBQztJQUNsRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLFFBTUF4RyxZQUFZLEdBQVosc0JBQWF5RyxnQkFBMEIsRUFBUTtNQUM5QyxJQUFJLENBQUM5QixjQUFjLENBQUMzRSxZQUFZLENBQUN5RyxnQkFBZ0IsQ0FBQztJQUNuRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLFFBTUF4RyxRQUFRLEdBQVIsa0JBQVN5RyxNQUFjLEVBQVE7TUFDOUIsSUFBSSxDQUFDL0IsY0FBYyxDQUFDMUUsUUFBUSxDQUFDeUcsTUFBTSxDQUFDO0lBQ3JDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEsUUFNQWpHLFFBQVEsR0FBUixvQkFBbUI7TUFDbEIsT0FBTyxJQUFJLENBQUNrRSxjQUFjLENBQUNsRSxRQUFRLEVBQUU7SUFDdEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLQVAsaUJBQWlCLEdBQWpCLDZCQUE0QjtNQUMzQixPQUFRLElBQUksQ0FBQzRCLGVBQWUsQ0FBU3BDLE9BQU8sRUFBRSxDQUFDUSxpQkFBaUIsRUFBRTtJQUNuRTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBLFFBU01LLGdCQUFnQixHQUF0QixnQ0FBdUJvRyxlQUF1QixFQUFFQyxXQUF3QixFQUFpQjtNQUN4RixNQUFNQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUN0QyxxQkFBcUIsQ0FBQ2hFLGdCQUFnQixDQUFDb0csZUFBZSxFQUFFQyxXQUFXLENBQUM7TUFDckcsSUFBSUUsS0FBSyxDQUFDQyxPQUFPLENBQUNGLGFBQWEsQ0FBQyxFQUFFO1FBQ2pDLE9BQU9BLGFBQWEsQ0FBQyxDQUFDLENBQUM7TUFDeEIsQ0FBQyxNQUFNO1FBQ04sT0FBT0EsYUFBYTtNQUNyQjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS01yRyxrQkFBa0IsR0FBeEIsb0NBQTZDO01BQzVDLE9BQU8sSUFBSWpELE9BQU8sQ0FBRUMsT0FBTyxJQUFLO1FBQUE7UUFDL0IsSUFBSSwyQkFBQyxJQUFJLENBQUNxSCxrQkFBa0Isa0RBQXZCLHNCQUF5Qm1DLHVCQUF1QixHQUFFO1VBQ3REeEosT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUMsTUFBTTtVQUNOO1VBQ0EsSUFBSSxDQUFDcUgsa0JBQWtCLENBQ3JCbUMsdUJBQXVCLENBQUMsb0JBQW9CLENBQUMsQ0FDN0NDLElBQUksQ0FBRUMsTUFBZSxJQUFLO1lBQzFCQyxHQUFHLENBQUNDLEtBQUssQ0FBQ0YsTUFBTSxFQUFZLDhEQUE4RCxDQUFDO1lBQzNGMUosT0FBTyxDQUFDLEtBQUssQ0FBQztVQUNmLENBQUMsQ0FBQyxDQUNEc0csSUFBSSxDQUFDLE1BQU10RyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUI7TUFDRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBLFFBU01rRCxlQUFlLEdBQXJCLCtCQUFzQjJHLE1BQWMsRUFBRUMsS0FBWSxFQUFFQyxTQUFxQixFQUE2QjtNQUNyR0QsS0FBSyxHQUFHO1FBQ1A7UUFDQUUsV0FBVyxFQUFFLElBQUksQ0FBQzVDLDJCQUEyQixDQUFDNkMsU0FBUyxDQUFDRCxXQUFXLENBQUNFLFNBQVM7UUFDN0VDLGNBQWMsRUFBRSxJQUFJLENBQUMvQywyQkFBMkIsQ0FBQzZDLFNBQVMsQ0FBQ0UsY0FBYyxDQUFDQyxHQUFHO1FBQzdFQyxvQkFBb0IsRUFBRSxLQUFLO1FBQzNCQyxRQUFRLEVBQUVDLFFBQVE7UUFDbEIsR0FBR1Q7TUFDSixDQUFDO01BQ0QsT0FBUSxNQUFNLElBQUksQ0FBQzFDLDJCQUEyQixDQUFDbEUsZUFBZSxDQUFDMkcsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsQ0FBQztJQUN6Rjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsUUFPTXpHLDhCQUE4QixHQUFwQyw4Q0FBcUNrSCxHQUFXLEVBQUVWLEtBQWMsRUFBaUI7TUFDaEYsT0FBTyxJQUFJLENBQUMxQywyQkFBMkIsQ0FBQ3FELGVBQWUsQ0FBQ0QsR0FBRyxFQUFFVixLQUFLLENBQXNCO0lBQ3pGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFFBS0F0RyxzQkFBc0IsR0FBdEIsa0NBQWtEO01BQ2pELE9BQU8sSUFBSSxDQUFDdUUsaUJBQWlCLEVBQUUsQ0FBQzJDLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDdEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsUUFLQWpILGNBQWMsR0FBZCwwQkFBa0M7TUFDakMsT0FBUTlDLE1BQU0sQ0FBdUMsbUJBQW1CLENBQUM7SUFDMUUsQ0FBQztJQUFBO0VBQUEsRUEvakIwQnFELE9BQU87RUFra0JuQztBQUNBO0FBQ0E7QUFDQTtFQUhBLElBSU0yRyxvQkFBb0I7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBQ3pCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTkMsUUFPTUMsY0FBYyxHQUFwQiw4QkFBcUJDLGVBQXNELEVBQTJCO01BQ3JHQSxlQUFlLENBQUN0RyxRQUFRLENBQUNDLGNBQWMsR0FBR3NHLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7TUFDaEYsTUFBTUMsYUFBYSxHQUFHSixlQUFlLENBQUN0RyxRQUFRLENBQUNDLGNBQWMsR0FDMUQsSUFBSVAsYUFBYSxDQUFDNEcsZUFBZSxDQUFvRCxHQUNyRixJQUFJakwsZ0JBQWdCLENBQUNpTCxlQUFlLENBQUM7TUFDeEMsT0FBT0ksYUFBYSxDQUFDbkwsV0FBVyxDQUFDd0csSUFBSSxDQUFDLE1BQU07UUFDM0M7UUFDQXVFLGVBQWUsQ0FBQ3hHLFdBQVcsQ0FBQzZHLGdCQUFnQixHQUFHLE1BQXNCRCxhQUFhO1FBQ2xGLE9BQU9BLGFBQWE7TUFDckIsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBO0VBQUEsRUFsQmlDRSxjQUFjO0VBQUEsT0FxQmxDUixvQkFBb0I7QUFBQSJ9
|
|
789
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIYXNoIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiZ2V0QXBwU3RhdGUiLCJjcmVhdGVFbXB0eUFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZUFzeW5jIiwibmF2aWdhdGUiLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJpc0luaXRpYWxOYXZpZ2F0aW9uIiwiZXhwYW5kQ29tcGFjdEhhc2giLCJwYXJzZVNoZWxsSGFzaCIsInNwbGl0SGFzaCIsInNIYXNoIiwicmVnZXgiLCJleGVjIiwic2hlbGxQYXJ0IiwiYXBwU3BlY2lmaWNSb3V0ZSIsImxlbmd0aCIsImNvbnN0cnVjdFNoZWxsSGFzaCIsInNldERpcnR5RmxhZyIsInJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwiZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImNyZWF0ZVJlbmRlcmVyIiwiZ2V0VXNlciIsImdldFVzZXJJbml0aWFscyIsImhhc1VTaGVsbCIsInJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsInVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwic2V0QmFja05hdmlnYXRpb24iLCJzZXRIaWVyYXJjaHkiLCJzZXRUaXRsZSIsImdldENvbnRlbnREZW5zaXR5IiwiZG9jdW1lbnQiLCJib2R5IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJnZXRQcmltYXJ5SW50ZW50Iiwid2FpdEZvclBsdWdpbnNMb2FkIiwiZ2V0VGl0bGUiLCJnZXRQZXJzb25hbGl6ZXIiLCJfcGVyc0lkIiwiX3Njb3BlIiwiX2NvbXBvbmVudCIsImdldFBlcnNEYXRhIiwiaGlzdG9yeUVuYWJsZWQiLCJzdWdnZXN0aW9uc0VuYWJsZWQiLCJhcHBzIiwic2V0UGVyc0RhdGEiLCJkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIiLCJfa2V5IiwiZ2V0U2hlbGxSZW5kZXJlckZpb3JpMiIsImdldFNoZWxsQ29uZmlnIiwiZ2V0UmVnaXN0ZXJlZFBsdWdpbnMiLCJBcHBXYXJtdXAiLCJSZW5kZXJlckV4dGVuc2lvbnMiLCJVc2VyRGVmYXVsdHMiLCJVc2VySW1hZ2UiLCJpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCIsInBhcnNlUGFyYW1ldGVycyIsIlNlcnZpY2UiLCJTaGVsbFNlcnZpY2VzIiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwib0NvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib1NoZWxsQ29udGFpbmVyIiwic2V0dGluZ3MiLCJzaGVsbENvbnRhaW5lciIsImxpbmtzQ2FjaGUiLCJmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlIiwib0FyZ3MiLCJhQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwiYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyIsImxpbmtGaWx0ZXIiLCJzZW1hbnRpY09iamVjdCIsInB1c2giLCJsaW5rcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJvbGRBcmdzIiwibmV3QXJncyIsImNhY2hlZExpbmtzIiwicmVqZWN0IiwicmVzb2x2ZUZuIiwicmVqZWN0Rm4iLCJuYXZpZ2F0aW9uU2VydmljZVAiLCJnZXRTZXJ2aWNlQXN5bmMiLCJuYXZUYXJnZXRSZXNvbHV0aW9uUCIsInVzZXJJbmZvU2VydmljZVAiLCJvVXJsUGFyc2luZ1NlcnZpY2VQcm9taXNlIiwib1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlIiwib1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UiLCJvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbFVJU2VydmljZVByb21pc2UiLCJnZXRTZXJ2aWNlIiwiYWxsIiwidGhlbiIsIm5hdmlnYXRpb25TZXJ2aWNlIiwibmF2VGFyZ2V0UmVzb2x1dGlvblNlcnZpY2UiLCJ1c2VySW5mb1NlcnZpY2UiLCJvVXJsUGFyc2luZ1NlcnZpY2UiLCJvU2hlbGxOYXZpZ2F0aW9uIiwib1NoZWxsVUlTZXJ2aWNlIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXIiLCJhcHBsaWNhdGlvbk5hdmlnYXRpb24iLCJuYXZUYXJnZXRSZXNvbHV0aW9uIiwidXJsUGFyc2luZ1NlcnZpY2UiLCJzaGVsbE5hdmlnYXRpb24iLCJzaGVsbFVJU2VydmljZSIsInNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSIsInNoZWxsUGx1Z2luTWFuYWdlciIsImNhdGNoIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwib0NhY2hlUmVzdWx0cyIsImFMaW5rcyIsIm9TZW1hbnRpY09iamVjdHNMaW5rcyIsImkiLCJhc3NpZ24iLCJhTWVyZ2VkTGlua3MiLCJqIiwiaXRlbSIsImdldFNoZWxsQ29udGFpbmVyIiwib05hdkFyZ3VtZW50c0FyciIsImdldEhyZWYiLCJzQXBwU3RhdGVLZXkiLCJhVGFyZ2V0cyIsIm9UYXJnZXQiLCJzSGFzaEZyYWdtZW50IiwiZ2V0U2hlbGxIYXNoIiwiZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyIsImhhc093blByb3BlcnR5IiwiTUFOQUdFX0ZFX0NBQ0hFUyIsImVuYWJsZWQiLCJvTmV3U2hlbGxIYXNoIiwiYkRpcnR5IiwiZm5EaXJ0eVN0YXRlUHJvdmlkZXIiLCJnZXRJbml0aWFscyIsImZuTmF2RmlsdGVyIiwiZm5DYWxsQmFjayIsImFIaWVyYXJjaHlMZXZlbHMiLCJzVGl0bGUiLCJzU2VtYW50aWNPYmplY3QiLCJtUGFyYW1ldGVycyIsInByaW1hcnlJbnRlbnQiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZSIsImZhaWwiLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsInBlcnNJZCIsInNjb3BlIiwiY29tcG9uZW50Iiwia2V5Q2F0ZWdvcnkiLCJjb25zdGFudHMiLCJGSVhFRF9LRVkiLCJ3cml0ZUZyZXF1ZW5jeSIsIkxPVyIsImNsaWVudFN0b3JhZ2VBbGxvd2VkIiwidmFsaWRpdHkiLCJJbmZpbml0eSIsImtleSIsImRlbGV0ZUNvbnRhaW5lciIsImdldFJlbmRlcmVyIiwidXJsIiwiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsInNlcnZpY2VDb250ZXh0Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwic2hlbGxTZXJ2aWNlIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsInNldFByb3BlcnR5IiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlNoZWxsU2VydmljZXNGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250YWluZXIgZnJvbSBcInNhcC91c2hlbGwvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBOYXZUYXJnZXRSZXNvbHV0aW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdlRhcmdldFJlc29sdXRpb25cIjtcbmltcG9ydCB0eXBlIE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBMaW5rLCBMaW5rRmlsdGVyLCBUYXJnZXQgfSBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBQZXJzb25hbGl6YXRpb25WMiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9QZXJzb25hbGl6YXRpb25WMlwiO1xuaW1wb3J0IHsgdHlwZSBQZXJzSWQsIHR5cGUgU2NvcGUgfSBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9QZXJzb25hbGl6YXRpb25WMlwiO1xuaW1wb3J0IHR5cGUgU2hlbGxOYXZpZ2F0aW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1NoZWxsTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgVVJMUGFyc2luZyBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9VUkxQYXJzaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFBhcnNlZEhhc2ggfSBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9VUkxQYXJzaW5nXCI7XG5pbXBvcnQgdHlwZSBVc2VySW5mbyBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9Vc2VySW5mb1wiO1xuaW1wb3J0IHR5cGUgU2hlbGxVSVNlcnZpY2UgZnJvbSBcInNhcC91c2hlbGwvdWk1c2VydmljZS9TaGVsbFVJU2VydmljZVwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgU3RhcnR1cEFwcFN0YXRlID0ge1xuXHRnZXREYXRhKCk6IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50Pzoge1xuXHRcdFx0U2VsZWN0T3B0aW9ucz86IHtcblx0XHRcdFx0UHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFJhbmdlczoge1xuXHRcdFx0XHRcdE9wdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdFNpZ246IHN0cmluZztcblx0XHRcdFx0XHRMb3c6IHN0cmluZztcblx0XHRcdFx0fVtdO1xuXHRcdFx0fVtdO1xuXHRcdH07XG5cdH07XG59O1xuXG4vLyBzZWU6IHNhcFxcdXNoZWxsXFxzZXJ2aWNlc1xcX1BlcnNvbmFsaXphdGlvblxcY29uc3RhbnRzLmpzXG5leHBvcnQgdHlwZSBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzID0gUGVyc29uYWxpemF0aW9uVjIgJiB7XG5cdGNvbnN0YW50czoge1xuXHRcdGtleUNhdGVnb3J5OiB7XG5cdFx0XHRGSVhFRF9LRVk6IHN0cmluZztcblx0XHRcdEdFTkVSQVRFRF9LRVk6IHN0cmluZztcblx0XHR9O1xuXHRcdHdyaXRlRnJlcXVlbmN5OiB7XG5cdFx0XHRISUdIOiBzdHJpbmc7XG5cdFx0XHRMT1c6IHN0cmluZztcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgUGVyc29uYWxpemVyVHlwZSA9IHtcblx0Z2V0UGVyc0RhdGE6ICgpID0+IFByb21pc2U8b2JqZWN0Pjtcblx0c2V0UGVyc0RhdGE6IChwZXJzRGF0YTogb2JqZWN0KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgU2hlbGxDb25maWdUeXBlID0ge1xuXHRhcHBzOiB7XG5cdFx0aW5wdXRGaWVsZEhpc3Rvcnk6IHtcblx0XHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFNoZWxsUmVuZGVyZXJGaW9yaTJUeXBlID0ge1xuXHRhZGRVc2VyQWN0aW9uKHByb3BlcnRpZXM6IG9iamVjdCk6IFByb21pc2U8Q29udHJvbD47XG59O1xuXG5leHBvcnQgdHlwZSBGTFBQbHVnaW4gPSB7XG5cdGNvbXBvbmVudDogc3RyaW5nO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHR1cmw6IHN0cmluZztcblx0Y29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlID0ge1xuXHRBcHBXYXJtdXA6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0UmVuZGVyZXJFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJEZWZhdWx0czogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRVc2VySW1hZ2U6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcbn07XG5cbi8qKlxuICogQGludGVyZmFjZSBJU2hlbGxTZXJ2aWNlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2U6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXHRpbnN0YW5jZVR5cGU6IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXTtcblxuXHRnZXRMaW5rcyhvQXJncz86IE9taXQ8TGlua0ZpbHRlciwgXCJ1aTVDb21wb25lbnRcIj5bXSk6IFByb21pc2U8TGlua1tdW10+O1xuXG5cdGdldExpbmtzV2l0aENhY2hlKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiB2b2lkO1xuXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogb2JqZWN0KTogUHJvbWlzZTx1bmRlZmluZWQgfCBTdGFydHVwQXBwU3RhdGU+O1xuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQ7XG5cblx0aHJlZkZvckV4dGVybmFsKG9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCwgc0FwcFN0YXRlS2V5OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+O1xuXG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50KTogb2JqZWN0O1xuXG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTx1bmtub3duPjtcblxuXHRuYXZpZ2F0ZShvVGFyZ2V0OiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHVuZGVmaW5lZD47XG5cblx0aXNOYXZpZ2F0aW9uU3VwcG9ydGVkKG9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ/OiBvYmplY3QpOiBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT47XG5cblx0aXNJbml0aWFsTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG5cdGV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcblxuXHRnZXRIYXNoKCk6IHN0cmluZztcblxuXHRwYXJzZVNoZWxsSGFzaChzSGFzaDogc3RyaW5nKTogUGFyc2VkSGFzaDtcblxuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInNwbGl0SGFzaFwiXT47XG5cblx0Y29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2g6IG9iamVjdCk6IHN0cmluZztcblxuXHRzZXREaXJ0eUZsYWcoYkRpcnR5OiBib29sZWFuKTogdm9pZDtcblxuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRjcmVhdGVSZW5kZXJlcigpOiBvYmplY3Q7XG5cblx0Z2V0VXNlcigpOiBVc2VySW5mbztcblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZztcblxuXHRoYXNVU2hlbGwoKTogYm9vbGVhbjtcblxuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s/OiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0c2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IEFycmF5PG9iamVjdD4pOiB2b2lkO1xuXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogdm9pZDtcblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZztcblxuXHRnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8TGluaz47XG5cblx0d2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlO1xuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW47XG5cblx0Z2V0VGl0bGUoKTogc3RyaW5nO1xuXG5cdGdldFBlcnNvbmFsaXplcihwZXJzSWQ6IFBlcnNJZCwgc2NvcGU6IFNjb3BlLCBjb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+O1xuXG5cdGRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lcihrZXk6IHN0cmluZywgc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdGdldFNoZWxsUmVuZGVyZXJGaW9yaTIoKTogU2hlbGxSZW5kZXJlckZpb3JpMlR5cGU7XG5cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlO1xuXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInBhcnNlUGFyYW1ldGVyc1wiXT47XG59XG5cbi8qKlxuICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2hlbGxTZXJ2aWNlIGZvciBPcGVuRkVcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZU1vY2sgZXh0ZW5kcyBTZXJ2aWNlPFNoZWxsU2VydmljZXNTZXR0aW5ncz4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0aW5zdGFuY2VUeXBlITogc3RyaW5nO1xuXG5cdHNlbWFudGljT2JqZWN0cyE6IHN0cmluZ1tdO1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzIGFzIElTaGVsbFNlcnZpY2VzKTtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwibW9ja1wiO1xuXHR9XG5cblx0YXN5bmMgZ2V0TGlua3MoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBfX2ZldGNoU2VtYW50aWNPYmplY3QoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHR0b0V4dGVybmFsKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRhc3luYyBnZXRTdGFydHVwQXBwU3RhdGUoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPFN0YXJ0dXBBcHBTdGF0ZSB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGFzeW5jIGhyZWZGb3JFeHRlcm5hbCgvKm9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRnZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHR9XG5cblx0YXN5bmMgZ2V0QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QsIHNBcHBTdGF0ZUtleTogc3RyaW5nKi8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIGNyZWF0ZUVtcHR5QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZUFzeW5jKC8qb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIG5hdmlnYXRlKC8qb1RhcmdldDogVGFyZ2V0LG9Db21wb25lbnQ/OiBDb21wb25lbnQqLyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG5cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgaXNJbml0aWFsTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0fVxuXG5cdGFzeW5jIGV4cGFuZENvbXBhY3RIYXNoKC8qc0hhc2hGcmFnbWVudDogc3RyaW5nKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRwYXJzZVNoZWxsSGFzaCgvKnNIYXNoOiBzdHJpbmcqLyk6IFBhcnNlZEhhc2gge1xuXHRcdHJldHVybiB7fSBhcyB1bmtub3duIGFzIFBhcnNlZEhhc2g7XG5cdH1cblxuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInNwbGl0SGFzaFwiXT4ge1xuXHRcdC8qKlxuXHRcdCAqIEZvciBhbiBBcHBsaWNhdGlvbiB3aXRob3V0IFNoZWxsLCB0aGUgaGFzaCBpcyBzaW1pbGFyIHRvIDogIy9TYWxlc09yZGVyTWFuYWdlKDExMTExMTExLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHQgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgOlxuXHRcdCAqIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IFwiU2FsZXNPcmRlck1hbmFnZSgxMTExMTExMS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYpXCJcblx0XHR9XG5cdFx0ICovXG5cdFx0Y29uc3QgcmVnZXggPSAvI1teL10qXFwvKC4qKS8uZXhlYyhzSGFzaCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IHJlZ2V4Py5sZW5ndGggPT09IDIgPyByZWdleFsxXSA6IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0U2hlbGxIYXNoKC8qb05ld1NoZWxsSGFzaDogb2JqZWN0Ki8pOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0c2V0RGlydHlGbGFnKC8qYkRpcnR5OiBib29sZWFuKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0Y3JlYXRlUmVuZGVyZXIoKTogb2JqZWN0IHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRnZXRVc2VyKCk6IFVzZXJJbmZvIHtcblx0XHRyZXR1cm4ge30gYXMgVXNlckluZm87XG5cdH1cblxuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoLypmbk5hdkZpbHRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKC8qZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRCYWNrTmF2aWdhdGlvbigvKmZuQ2FsbEJhY2s/OiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0c2V0SGllcmFyY2h5KC8qYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0PiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0c2V0VGl0bGUoLypzVGl0bGU6IHN0cmluZyovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nIHtcblx0XHQvLyBpbiBjYXNlIHRoZXJlIGlzIG5vIHNoZWxsIHdlIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgY2xhc3NlcyBiZWluZyBkZWZpbmVkIG9uIHRoZSBib2R5XG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2FwVWlTaXplQ296eVwiKSkge1xuXHRcdFx0cmV0dXJuIFwiY296eVwiO1xuXHRcdH0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb21wYWN0XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb21wYWN0XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGdldFByaW1hcnlJbnRlbnQoLypzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBvYmplY3QqLyk6IFByb21pc2U8TGluaz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkIGFzIHVua25vd24gYXMgTGluayk7XG5cdH1cblxuXHRhc3luYyB3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxuXG5cdGdldFRpdGxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRhc3luYyBnZXRQZXJzb25hbGl6ZXIoX3BlcnNJZDogUGVyc0lkLCBfc2NvcGU6IFNjb3BlLCBfY29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHRnZXRQZXJzRGF0YTogYXN5bmMgKCkgPT5cblx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdFx0XHRoaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0c3VnZ2VzdGlvbnNFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRhcHBzOiB7fVxuXHRcdFx0XHR9KSxcblx0XHRcdHNldFBlcnNEYXRhOiAoKSA9PiB7fVxuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKF9rZXk6IHN0cmluZywgX3Njb3BlPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0Z2V0U2hlbGxSZW5kZXJlckZpb3JpMigpOiBTaGVsbFJlbmRlcmVyRmlvcmkyVHlwZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFNoZWxsUmVuZGVyZXJGaW9yaTJUeXBlO1xuXHR9XG5cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlIHtcblx0XHRyZXR1cm4ge30gYXMgU2hlbGxDb25maWdUeXBlO1xuXHR9XG5cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0QXBwV2FybXVwOiB7fSxcblx0XHRcdFJlbmRlcmVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRVc2VyRGVmYXVsdHM6IHt9LFxuXHRcdFx0VXNlckltYWdlOiB7fVxuXHRcdH07XG5cdH1cblxuXHRpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwYXJzZVBhcmFtZXRlcnMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0XHRyZXR1cm4ge307XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBTaGVsbFNlcnZpY2VzU2V0dGluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgU2hlbGxTZXJ2aWNlc1NldHRpbmdzID0ge1xuXHRzaGVsbENvbnRhaW5lcj86IENvbnRhaW5lcjtcbn07XG5cbnR5cGUgU2hlbGxQbHVnaW5NYW5hZ2VyID0ge1xuXHRnZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShjYXRlZ29yeTogc3RyaW5nKTogalF1ZXJ5LlByb21pc2U7XG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZTtcbn07XG5cbnR5cGUgUHJpdmF0ZVNoZWxsVXNlciA9IHtcblx0Z2V0SW5pdGlhbHMoKTogc3RyaW5nO1xuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZXMgZXh0ZW5kcyBTZXJ2aWNlPFJlcXVpcmVkPFNoZWxsU2VydmljZXNTZXR0aW5ncz4+IGltcGxlbWVudHMgSVNoZWxsU2VydmljZXMge1xuXHRyZXNvbHZlRm4hOiBGdW5jdGlvbjtcblxuXHRyZWplY3RGbiE6ICgpID0+IHZvaWQ7XG5cblx0aW5pdFByb21pc2UhOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPjtcblxuXHRhcHBsaWNhdGlvbk5hdmlnYXRpb24hOiBOYXZpZ2F0aW9uO1xuXG5cdG5hdlRhcmdldFJlc29sdXRpb24hOiBOYXZUYXJnZXRSZXNvbHV0aW9uO1xuXG5cdHVzZXJJbmZvU2VydmljZSE6IFVzZXJJbmZvO1xuXG5cdHVybFBhcnNpbmdTZXJ2aWNlITogVVJMUGFyc2luZztcblxuXHRzaGVsbE5hdmlnYXRpb24hOiBTaGVsbE5hdmlnYXRpb247XG5cblx0c2hlbGxQbHVnaW5NYW5hZ2VyITogU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXG5cdG9TaGVsbENvbnRhaW5lciE6IENvbnRhaW5lciAmIHsgZ2V0VXNlcjogKCkgPT4gUHJpdmF0ZVNoZWxsVXNlciB9O1xuXG5cdHNoZWxsVUlTZXJ2aWNlITogU2hlbGxVSVNlcnZpY2U7XG5cblx0c2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlITogUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblxuXHRpbnN0YW5jZVR5cGUhOiBzdHJpbmc7XG5cblx0bGlua3NDYWNoZSE6IFJlY29yZDxzdHJpbmcsIHsgbGlua3M6IExpbmtbXSB9PjtcblxuXHRzZW1hbnRpY09iamVjdHMhOiBzdHJpbmdbXTtcblxuXHRmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlITogRnVuY3Rpb247XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdCBhcyBDb21wb25lbnQ7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIgPSBvQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lcjtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwicmVhbFwiO1xuXHRcdHRoaXMubGlua3NDYWNoZSA9IHt9O1xuXHRcdHRoaXMuZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSA9IGZ1bmN0aW9uIChvQXJnczogTGlua0ZpbHRlcltdKTogb2JqZWN0IHtcblx0XHRcdGNvbnN0IGFDYWNoZWRTZW1hbnRpY09iamVjdHM6IExpbmtbXVtdID0gW107XG5cdFx0XHRjb25zdCBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzOiBMaW5rRmlsdGVyW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgbGlua0ZpbHRlciBvZiBvQXJncykge1xuXHRcdFx0XHRpZiAoISFsaW5rRmlsdGVyICYmICEhbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmxpbmtzQ2FjaGVbbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdF0pIHtcblx0XHRcdFx0XHRcdGFDYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaCh0aGlzLmxpbmtzQ2FjaGVbbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGxpbmtGaWx0ZXIsIFwibGlua3NcIiwge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdLmxpbmtzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cy5wdXNoKGxpbmtGaWx0ZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgb2xkQXJnczogb0FyZ3MsIG5ld0FyZ3M6IGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMsIGNhY2hlZExpbmtzOiBhQ2FjaGVkU2VtYW50aWNPYmplY3RzIH07XG5cdFx0fTtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5yZXNvbHZlRm4gPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5yZWplY3RGbiA9IHJlamVjdDtcblx0XHR9KTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uU2VydmljZVAgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJOYXZpZ2F0aW9uXCIpO1xuXHRcdGNvbnN0IG5hdlRhcmdldFJlc29sdXRpb25QID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiTmF2VGFyZ2V0UmVzb2x1dGlvblwiKTtcblx0XHRjb25zdCB1c2VySW5mb1NlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVXNlckluZm9cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFBsdWdpbk1hbmFnZXJQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiUGx1Z2luTWFuYWdlclwiKTtcblx0XHRjb25zdCBvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlBlcnNvbmFsaXphdGlvblYyXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFVJU2VydmljZVByb21pc2UgPSBvQ29tcG9uZW50LmdldFNlcnZpY2UoXCJTaGVsbFVJU2VydmljZVwiKTtcblxuXHRcdFByb21pc2UuYWxsKFtcblx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlUCxcblx0XHRcdG5hdlRhcmdldFJlc29sdXRpb25QLFxuXHRcdFx0dXNlckluZm9TZXJ2aWNlUCxcblx0XHRcdG9VcmxQYXJzaW5nU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxVSVNlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxQbHVnaW5NYW5hZ2VyUHJvbWlzZVxuXHRcdF0pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KFtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZSxcblx0XHRcdFx0XHRuYXZUYXJnZXRSZXNvbHV0aW9uU2VydmljZSxcblx0XHRcdFx0XHR1c2VySW5mb1NlcnZpY2UsXG5cdFx0XHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0b1NoZWxsVUlTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UsXG5cdFx0XHRcdFx0b1NoZWxsUGx1Z2luTWFuYWdlclxuXHRcdFx0XHRdKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2VydmljZSBhcyBOYXZpZ2F0aW9uO1xuXHRcdFx0XHRcdHRoaXMubmF2VGFyZ2V0UmVzb2x1dGlvbiA9IG5hdlRhcmdldFJlc29sdXRpb25TZXJ2aWNlIGFzIE5hdlRhcmdldFJlc29sdXRpb247XG5cdFx0XHRcdFx0dGhpcy51c2VySW5mb1NlcnZpY2UgPSB1c2VySW5mb1NlcnZpY2UgYXMgVXNlckluZm87XG5cdFx0XHRcdFx0dGhpcy51cmxQYXJzaW5nU2VydmljZSA9IG9VcmxQYXJzaW5nU2VydmljZSBhcyBVUkxQYXJzaW5nO1xuXHRcdFx0XHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uID0gb1NoZWxsTmF2aWdhdGlvbiBhcyBTaGVsbE5hdmlnYXRpb247XG5cdFx0XHRcdFx0dGhpcy5zaGVsbFVJU2VydmljZSA9IG9TaGVsbFVJU2VydmljZTtcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSA9IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UgYXMgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlciA9IG9TaGVsbFBsdWdpbk1hbmFnZXIgYXMgU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUZuKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3Mob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9BcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGlzdCBvZiBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZSB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLCBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgbWVzc2FnZVxuXHQgKi9cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0U2VtYW50aWNPYmplY3RzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb24gaW4gY2FjaGVcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0aWYgKChvQXJncyBhcyBPYmplY3RbXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9DYWNoZVJlc3VsdHMgPSB0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUob0FyZ3MpO1xuXG5cdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5uZXdBcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gb0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9DYWNoZVJlc3VsdHMubmV3QXJncyk7XG5cdFx0XHRcdGlmIChhTGlua3MubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0c0xpbmtzOiBSZWNvcmQ8c3RyaW5nLCB7IGxpbmtzOiBMaW5rW10gfT4gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2ldLmxlbmd0aCA+IDAgJiYgb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2ldWzBdLmxpbmtzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0c0xpbmtzW29DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0bGlua3M6IGFMaW5rc1tpXVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR0aGlzLmxpbmtzQ2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMubGlua3NDYWNoZSwgb1NlbWFudGljT2JqZWN0c0xpbmtzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gYUxpbmtzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGFNZXJnZWRMaW5rcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBqID0gMDtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBvQ2FjaGVSZXN1bHRzLm9sZEFyZ3MpIHtcblx0XHRcdFx0XHRcdGlmIChqIDwgYUxpbmtzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2pdLmxlbmd0aCA+IDAgJiYgaXRlbVswXS5zZW1hbnRpY09iamVjdCA9PT0gb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2pdWzBdLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goYUxpbmtzW2pdKTtcblx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goaXRlbVswXS5saW5rcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGl0ZW1bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYU1lcmdlZExpbmtzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIFNoZWxsQ29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBwcmVkZWZpbmVkIHNoZWxsQ29udGFpbmVyIG1ldGhvZHNcblx0ICovXG5cdGdldFNoZWxsQ29udGFpbmVyKCk6IENvbnRhaW5lciB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB0b0V4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTmF2QXJndW1lbnRzQXJyIEFuZFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT50b0V4dGVybmFsIGFyZ3VtZW50c1xuXHQgKi9cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24udG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyLCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhcmdldCBzdGFydHVwQXBwU3RhdGVcblx0ICogV2lsbCBjaGVjayB0aGUgZXhpc3RhbmNlIG9mIHRoZSBTaGVsbENvbnRhaW5lciBhbmQgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldFN0YXJ0dXBBcHBTdGF0ZSBtZXRob2QuIEluIGNhc2Ugc2VydmljZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFueSBleGNlcHRpb25cblx0ICogbWV0aG9kIHRocm93cyBleGNlcHRpb24gZXJyb3IgaW4gY29uc29sZS5cblx0ICpcblx0ICogQHBhcmFtIG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldFN0YXJ0dXBBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIE9iamVjdFxuXHQgKi9cblx0YXN5bmMgZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBDb21wb25lbnQpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRTdGFydHVwQXBwU3RhdGUob0FyZ3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBiYWNrVG9QcmV2aW91c0FwcCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHJldHVybnMgU29tZXRoaW5nIHRoYXQgaW5kaWNhdGUgd2UndmUgbmF2aWdhdGVkXG5cdCAqL1xuXHRhc3luYyBiYWNrVG9QcmV2aW91c0FwcCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaHJlZkZvckV4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogQHBhcmFtIG9Db21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5ocmVmRm9yRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBzdHJpbmdcblx0ICovXG5cdGFzeW5jIGhyZWZGb3JFeHRlcm5hbChvQXJnczogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0SHJlZihvQXJncywgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldEFwcFN0YXRlIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggb0NvbXBvbmVudCBhbmQgb0FwcFN0YXRlS2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudFxuXHQgKiBAcGFyYW0gc0FwcFN0YXRlS2V5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEFwcFN0YXRlKG9Db21wb25lbnQsIHNBcHBTdGF0ZUtleSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZUVtcHR5QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5jcmVhdGVFbXB0eUFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5jcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc05hdmlnYXRpb25TdXBwb3J0ZWQgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICpcblx0ICogQHBhcmFtIGFUYXJnZXRzXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmlzTmF2aWdhdGlvblN1cHBvcnRlZCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzOiBUYXJnZXRbXSwgb0NvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzLCBvQ29tcG9uZW50KSBhcyB1bmtub3duIGFzIFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpZWQgdGFyZ2V0IG91dHNpZGUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGFwcGxpY2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1RhcmdldCBUaGUgbmF2aWdhdGlvbiB0YXJnZXQuXG5cdCAqIEBwYXJhbSBbb0NvbXBvbmVudF0gQSBVSTUgY29tcG9uZW50LCB1c2VkIHRvIGxvZ2ljYWxseSBhdHRhY2ggYW55IHJlbGF0ZWQgYXBwIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2aW5nIG9uY2UgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZC4gVGhlIFByb21pc2UgbWlnaHQgbmV2ZXIgcmVqZWN0IG9yIHJlc29sdmVcblx0ICogICAgICAgICAgICAgICAgICAgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgbmF2aWdhdGlvbi5cblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0LCBvQ29tcG9uZW50KSkgYXMgdW5rbm93biBhcyBQcm9taXNlPHVuZGVmaW5lZD47XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGlzSW5pdGlhbE5hdmlnYXRpb25Bc3luYyBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIGJvb2xlYW5cblx0ICovXG5cdGFzeW5jIGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmlzSW5pdGlhbE5hdmlnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZXhwYW5kQ29tcGFjdEhhc2ggbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaEZyYWdtZW50IEFuIChpbnRlcm5hbCBmb3JtYXQpIHNoZWxsIGhhc2hcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoZSBzdWNjZXNzIGhhbmRsZXIgb2YgdGhlIHJlc29sdmUgcHJvbWlzZSBnZXQgYW4gZXhwYW5kZWQgc2hlbGwgaGFzaCBhcyBmaXJzdCBhcmd1bWVudFxuXHQgKi9cblx0YXN5bmMgZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5uYXZUYXJnZXRSZXNvbHV0aW9uLmV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQpO1xuXHR9XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgIyR7dGhpcy51cmxQYXJzaW5nU2VydmljZS5nZXRTaGVsbEhhc2god2luZG93LmxvY2F0aW9uLmhyZWYpfWA7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiBhbGwgdGhlIHBsdWdpbnMgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgUGx1Z2luTWFuYWdlciwgc29ydGVkIGJ5IHN1cHBvcnRlZCBwbHVnaW4gY2F0ZWdvcmllcy5cblx0ICpcblx0ICogQHJldHVybnMgTWFwIG9mIHJlZ2lzdGVyZWQgcGx1Z2luc1xuXHQgKi9cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5zaGVsbFBsdWdpbk1hbmFnZXIuZ2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBmb3IgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcGx1Z2luIHNldHVwIGluIHRoZSBGTFAuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcGx1Z2luIGlzIHNldCB1cCBhbmQgZW5hYmxlZC5cblx0ICovXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnMgPSB0aGlzLmdldFJlZ2lzdGVyZWRQbHVnaW5zKCkuUmVuZGVyZXJFeHRlbnNpb25zO1xuXHRcdGlmIChcblx0XHRcdGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnM/Lmhhc093blByb3BlcnR5KFwiTUFOQUdFX0ZFX0NBQ0hFU1wiKSAmJlxuXHRcdFx0ISEoZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+PikuTUFOQUdFX0ZFX0NBQ0hFUy5lbmFibGVkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcGFyc2VTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5wYXJzZVNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgVGhlIHBhcnNlZCB1cmxcblx0ICovXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBQYXJzZWRIYXNoIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVNoZWxsSGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNwbGl0SGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PnNwbGl0SGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiB7IHNoZWxsUGFydD86IHN0cmluZzsgYXBwU3BlY2lmaWNSb3V0ZT86IHN0cmluZyB9IHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5zcGxpdEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjb25zdHJ1Y3RTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gb05ld1NoZWxsSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PmNvbnN0cnVjdFNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgU2hlbGwgSGFzaCBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLmNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0RGlydHlGbGFnIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0gYkRpcnR5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnNldERpcnR5RmxhZyBhcmd1bWVudHNcblx0ICovXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5zZXREaXJ0eUZsYWcoYkRpcnR5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgYXJndW1lbnRzXG5cdCAqL1xuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZSBwcm92aWRlciBjYWxsYmFjayBtZXRob2QuXG5cdCAqXG5cdCAqIEBwYXJhbSBmbkRpcnR5U3RhdGVQcm92aWRlciBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIGFyZ3VtZW50c1xuXHQgKi9cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjcmVhdGVSZW5kZXJlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICpcblx0ICogQHJldHVybnMgUmV0dXJucyByZW5kZXJlciBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGNyZWF0ZVJlbmRlcmVyKCk6IFByb21pc2U8Q29udHJvbCB8IENvbXBvbmVudENvbnRhaW5lcj4ge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5jcmVhdGVSZW5kZXJlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRVc2VyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIFVzZXIgb2JqZWN0XG5cdCAqL1xuXHRnZXRVc2VyKCk6IFVzZXJJbmZvIHtcblx0XHRyZXR1cm4gdGhpcy51c2VySW5mb1NlcnZpY2U7XG5cdH1cblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmlzSmFtQWN0aXZlKCk7XG5cdH1cblxuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmdldEluaXRpYWxzKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjaGVjayBpZiB1c2hlbGwgY29udGFpbmVyIGlzIGF2YWlsYWJsZSBvciBub3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZVxuXHQgKi9cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCByZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXJcblx0ICovXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbi5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciBtZXRob2Qgb2Ygc2hlbGxOYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyXG5cdCAqL1xuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbi51bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEJhY2tOYXZpZ2F0aW9uIG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBiYWNrIGJ1dHRvbiBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5DYWxsQmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCBpbiB0aGUgVUkuXG5cdCAqL1xuXHRzZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEhpZXJhcmNoeSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gaGllcmFyY2h5IGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBbYUhpZXJhcmNoeUxldmVsc10gQW4gYXJyYXkgcmVwcmVzZW50aW5nIGhpZXJhcmNoaWVzIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFwcC5cblx0ICovXG5cdHNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzOiBvYmplY3RbXSk6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICovXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRUaXRsZShzVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHRpdGxlIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICovXG5cdGdldFRpdGxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxVSVNlcnZpY2UuZ2V0VGl0bGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGNvbnRlbnQgZGVuc2l0eS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGNvbnRlbnQgZGVuc2l0eSB2YWx1ZVxuXHQgKi9cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKHRoaXMub1NoZWxsQ29udGFpbmVyIGFzIGFueSkuZ2V0VXNlcigpLmdldENvbnRlbnREZW5zaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogRm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0LCB0aGlzIG1ldGhvZCBjb25zaWRlcnMgYWxsIGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZW1hbnRpYyBvYmplY3QgYW5kXG5cdCAqIHJldHVybnMgdGhlIG9uZSB0YWdnZWQgYXMgYSBcInByaW1hcnlBY3Rpb25cIi4gSWYgbm8gaW5ib3VuZCB0YWdnZWQgYXMgXCJwcmltYXJ5QWN0aW9uXCIgZXhpc3RzLCB0aGVuIGl0IHJldHVybnNcblx0ICogdGhlIGludGVudCBvZiB0aGUgZmlyc3QgaW5ib3VuZCAoYWZ0ZXIgc29ydGluZyBoYXMgYmVlbiBhcHBsaWVkKSBtYXRjaGluZyB0aGUgYWN0aW9uIFwiZGlzcGxheUZhY3RTaGVldFwiLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1NlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFNlZSAjQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24jZ2V0TGlua3MgZm9yIGRlc2NyaXB0aW9uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW50ZW50IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGFzeW5jIGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogTGlua0ZpbHRlcik6IFByb21pc2U8TGluaz4ge1xuXHRcdGNvbnN0IHByaW1hcnlJbnRlbnQgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdCwgbVBhcmFtZXRlcnMpO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHByaW1hcnlJbnRlbnQpKSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudFswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHByaW1hcnlJbnRlbnQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdhaXQgZm9yIHRoZSByZW5kZXIgZXh0ZW5zaW9ucyBwbHVnaW4gdG8gYmUgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHdlIGFyZSBhYmxlIHRvIHdhaXQgZm9yIGl0LCBvdGhlcndpc2Ugd2UgY291bGRuJ3QgYW5kIGNhbm5vdCByZWx5IG9uIGl0LlxuXHQgKi9cblx0YXN5bmMgd2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLnNoZWxsUGx1Z2luTWFuYWdlcj8uZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UpIHtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRcdFx0dGhpcy5zaGVsbFBsdWdpbk1hbmFnZXJcblx0XHRcdFx0XHQuZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UoXCJSZW5kZXJlckV4dGVuc2lvbnNcIilcblx0XHRcdFx0XHQuZmFpbCgob0Vycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZywgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzRmFjdG9yeS53YWl0Rm9yUGx1Z2luc0xvYWRcIik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHJlc29sdmUodHJ1ZSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcGVyc29uYWxpemVyIGZyb20gdGhlIHNoZWxsIHNlcnZpY2UuXG5cdCAqIFdlIHNldCBzb21lIGRlZmF1bHRzIGZvciB0aGUgc2NvcGUgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gcGVyc0lkIFBlcnNvbmFsaXphdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcGFyYW0gY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFBlcnNvbmFsaXplciBvYmplY3Qgd2hpY2ggaGFuZGxlcyBwZXJzb25hbGl6YXRpb25cblx0ICovXG5cdGFzeW5jIGdldFBlcnNvbmFsaXplcihwZXJzSWQ6IFBlcnNJZCwgc2NvcGU6IFNjb3BlLCBjb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRzY29wZSA9IHtcblx0XHRcdC8vIG1lcmdlIHNvbWUgZGVmYXVsdHNcblx0XHRcdGtleUNhdGVnb3J5OiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5jb25zdGFudHMua2V5Q2F0ZWdvcnkuRklYRURfS0VZLFxuXHRcdFx0d3JpdGVGcmVxdWVuY3k6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy53cml0ZUZyZXF1ZW5jeS5MT1csXG5cdFx0XHRjbGllbnRTdG9yYWdlQWxsb3dlZDogZmFsc2UsXG5cdFx0XHR2YWxpZGl0eTogSW5maW5pdHksXG5cdFx0XHQuLi5zY29wZVxuXHRcdH07XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5nZXRQZXJzb25hbGl6ZXIocGVyc0lkLCBzY29wZSwgY29tcG9uZW50KSkgYXMgUGVyc29uYWxpemVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGEgY29udGFpbmVyIGlkZW50aWZpZWQgYnkgc0NvbnRhaW5lcktleS5cblx0ICpcblx0ICogQHBhcmFtIGtleSBDb250YWluZXIga2V5XG5cdCAqIEBwYXJhbSBzY29wZSBTY29wZSBvYmplY3Rcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIHRoZSBjb250YWluZXIgaXMgZGVsZXRlZFxuXHQgKi9cblx0YXN5bmMgZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5kZWxldGVDb250YWluZXIoa2V5LCBzY29wZSBhcyB1bmtub3duIGFzIG9iamVjdCkgYXMgUHJvbWlzZTx2b2lkPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNoZWxsIHJlbmRlcmVyIGZyb20gdGhlIHNoZWxsIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFNoZWxsIHJlbmRlcmVyIFwiZmlvcmkyXCJcblx0ICovXG5cdGdldFNoZWxsUmVuZGVyZXJGaW9yaTIoKTogU2hlbGxSZW5kZXJlckZpb3JpMlR5cGUge1xuXHRcdHJldHVybiB0aGlzLmdldFNoZWxsQ29udGFpbmVyKCkuZ2V0UmVuZGVyZXIoXCJmaW9yaTJcIikgYXMgdW5rbm93biBhcyBTaGVsbFJlbmRlcmVyRmlvcmkyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNoZWxsIGNvbmZpZyBmcm9tIHRoZSB3aW5kb3dzIG9iamVjdC5cblx0ICpcblx0ICogQHJldHVybnMgU2hlbGwgY29uZmlnIG9iamVjdFxuXHQgKi9cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlIHtcblx0XHRyZXR1cm4gKHdpbmRvdyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIG9iamVjdD4pW1wic2FwLXVzaGVsbC1jb25maWdcIl0gYXMgU2hlbGxDb25maWdUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIHBhcmFtZXRlcnMgZnJvbSBhIFVSSSBxdWVyeSBzdHJpbmcgKHN0YXJ0aW5nIHdpdGggPykgaW50byBhIHBhcmFtZXRlciBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB1cmwgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogUGFyYW1ldGVyIHN0cmluZ1xuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmcgc3RyaW5nIGFycmF5c1xuXHQgKi9cblx0cGFyc2VQYXJhbWV0ZXJzKHVybDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVBhcmFtZXRlcnModXJsKTtcblx0fVxufVxuXG4vKipcbiAqIFNlcnZpY2UgRmFjdG9yeSBmb3IgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZXNGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPiB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGVpdGhlciBhIHN0YW5kYXJkIG9yIGEgbW9jayBTaGVsbCBzZXJ2aWNlIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHNlcnZpY2VDb250ZXh0IFRoZSBzaGVsbHNlcnZpY2UgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGEgc2hlbGwgc2VydmljZSBpbXBsZW1lbnRhdGlvblxuXHQgKiBAc2VlIFNlcnZpY2VGYWN0b3J5I2NyZWF0ZUluc3RhbmNlXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVJbnN0YW5jZShzZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPik6IFByb21pc2U8SVNoZWxsU2VydmljZXM+IHtcblx0XHRzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdFx0Y29uc3Qgc2hlbGxTZXJ2aWNlID0gc2VydmljZUNvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXJcblx0XHRcdD8gbmV3IFNoZWxsU2VydmljZXMoc2VydmljZUNvbnRleHQgYXMgU2VydmljZUNvbnRleHQ8UmVxdWlyZWQ8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPj4pXG5cdFx0XHQ6IG5ldyBTaGVsbFNlcnZpY2VNb2NrKHNlcnZpY2VDb250ZXh0KTtcblx0XHRhd2FpdCBzaGVsbFNlcnZpY2UuaW5pdFByb21pc2U7XG5cdFx0Ly8gRW5yaWNoIHRoZSBhcHBDb21wb25lbnQgd2l0aCB0aGlzIG1ldGhvZFxuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHNlcnZpY2VDb250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzID0gKCk6IElTaGVsbFNlcnZpY2VzID0+IHNoZWxsU2VydmljZTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKGludGVybmFsTW9kZWwpIHtcblx0XHRcdChpbnRlcm5hbE1vZGVsIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoXCIvc2VtYW50aWNPYmplY3RzXCIsIGF3YWl0IHNoZWxsU2VydmljZS5fX2ZldGNoU2VtYW50aWNPYmplY3QoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBzaGVsbFNlcnZpY2U7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hlbGxTZXJ2aWNlc0ZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQTBLQTtBQUNBO0FBQ0E7QUFDQTtFQUhBLElBSU1BLGdCQUFnQjtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFBQSxPQU9yQkMsSUFBSSxHQUFKLGdCQUFhO01BQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBbUI7TUFDMUQsSUFBSSxDQUFDQyxZQUFZLEdBQUcsTUFBTTtJQUMzQixDQUFDO0lBQUEsT0FFS0MsUUFBUSxHQUFkLHlCQUFlO0lBQUEsRUFBc0M7TUFDcEQsT0FBT0gsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFBQSxPQUVLRyxxQkFBcUIsR0FBM0IsdUNBQWlEO01BQ2hELE9BQU9KLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFS0ksaUJBQWlCLEdBQXZCLGtDQUF3QjtJQUFBLEVBQXNDO01BQzdELE9BQU9MLE9BQU8s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
|