@sapui5/sap.fe.core 1.135.0 → 1.136.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 +3 -2
- package/src/sap/fe/core/ActionRuntime.ts +3 -1
- package/src/sap/fe/core/AppComponent.js +6 -4
- package/src/sap/fe/core/AppComponent.ts +3 -1
- package/src/sap/fe/core/AppStateHandler.js +8 -6
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/CommonUtils.js +4 -1
- package/src/sap/fe/core/CommonUtils.ts +12 -2
- package/src/sap/fe/core/ExtensionAPI.js +5 -3
- package/src/sap/fe/core/ExtensionAPI.ts +4 -2
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +13 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +13 -5
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +19 -6
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +4 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +58 -14
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +71 -11
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +184 -17
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +204 -12
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -3
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +11 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +35 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +6 -6
- package/src/sap/fe/core/controllerextensions/Routing.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -11
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +11 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +21 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +19 -5
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +17 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +19 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +10 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +33 -31
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +4 -3
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +7 -2
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +18 -8
- package/src/sap/fe/core/converters/controls/Common/Action.js +54 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -4
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +13 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +29 -9
- package/src/sap/fe/core/converters/controls/Common/Table.ts +38 -8
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +14 -16
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +61 -96
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +62 -13
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +75 -13
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -33
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +4 -44
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +9 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +7 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +29 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +34 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +35 -16
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +24 -3
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +4 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +3 -8
- package/src/sap/fe/core/helpers/ModelHelper.js +14 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +38 -39
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/WebSocket.js +10 -1
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +23 -2
- package/src/sap/fe/core/messagebundle_bg.properties +23 -2
- package/src/sap/fe/core/messagebundle_ca.properties +21 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +23 -2
- package/src/sap/fe/core/messagebundle_cs.properties +21 -0
- package/src/sap/fe/core/messagebundle_cy.properties +21 -0
- package/src/sap/fe/core/messagebundle_da.properties +23 -2
- package/src/sap/fe/core/messagebundle_de.properties +23 -2
- package/src/sap/fe/core/messagebundle_el.properties +21 -0
- package/src/sap/fe/core/messagebundle_en.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_GB.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +23 -2
- package/src/sap/fe/core/messagebundle_es.properties +21 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +21 -0
- package/src/sap/fe/core/messagebundle_et.properties +21 -0
- package/src/sap/fe/core/messagebundle_fi.properties +21 -0
- package/src/sap/fe/core/messagebundle_fr.properties +22 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +21 -0
- package/src/sap/fe/core/messagebundle_hi.properties +22 -1
- package/src/sap/fe/core/messagebundle_hr.properties +24 -3
- package/src/sap/fe/core/messagebundle_hu.properties +21 -0
- package/src/sap/fe/core/messagebundle_id.properties +21 -0
- package/src/sap/fe/core/messagebundle_it.properties +23 -2
- package/src/sap/fe/core/messagebundle_iw.properties +21 -0
- package/src/sap/fe/core/messagebundle_ja.properties +21 -0
- package/src/sap/fe/core/messagebundle_kk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ko.properties +21 -0
- package/src/sap/fe/core/messagebundle_lt.properties +21 -0
- package/src/sap/fe/core/messagebundle_lv.properties +23 -2
- package/src/sap/fe/core/messagebundle_mk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ms.properties +22 -1
- package/src/sap/fe/core/messagebundle_nl.properties +21 -0
- package/src/sap/fe/core/messagebundle_no.properties +21 -0
- package/src/sap/fe/core/messagebundle_pl.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +21 -0
- package/src/sap/fe/core/messagebundle_ro.properties +23 -2
- package/src/sap/fe/core/messagebundle_ru.properties +22 -1
- package/src/sap/fe/core/messagebundle_sh.properties +23 -2
- package/src/sap/fe/core/messagebundle_sk.properties +21 -0
- package/src/sap/fe/core/messagebundle_sl.properties +23 -2
- package/src/sap/fe/core/messagebundle_sr.properties +23 -2
- package/src/sap/fe/core/messagebundle_sv.properties +21 -0
- package/src/sap/fe/core/messagebundle_th.properties +21 -0
- package/src/sap/fe/core/messagebundle_tr.properties +21 -0
- package/src/sap/fe/core/messagebundle_uk.properties +23 -2
- package/src/sap/fe/core/messagebundle_vi.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_CN.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +21 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +5 -5
- package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -4
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +61 -9
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +70 -7
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +28 -12
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +4 -3
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +27 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +198 -58
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +9 -7
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/Common/table/Columns", "sap/fe/core/converters/controls/ListReport/VisualFilters", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/m/library"], function (DataVisualization, Table, Columns, VisualFilters, ConfigurableObject, IssueManager, Key, ModelHelper, TypeGuards, DataModelPathHelper, PropertyHelper, library) {
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/Common/table/Columns", "sap/fe/core/converters/controls/ListReport/FilterField", "sap/fe/core/converters/controls/ListReport/VisualFilters", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/m/library"], function (DataVisualization, Table, Columns, FilterField, VisualFilters, ConfigurableObject, IssueManager, Key, ModelHelper, TypeGuards, DataModelPathHelper, PropertyHelper, library) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -26,6 +26,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
26
26
|
var Placement = ConfigurableObject.Placement;
|
|
27
27
|
var OverrideType = ConfigurableObject.OverrideType;
|
|
28
28
|
var getVisualFilters = VisualFilters.getVisualFilters;
|
|
29
|
+
var getMaxConditions = FilterField.getMaxConditions;
|
|
29
30
|
var isFilteringCaseSensitive = Columns.isFilteringCaseSensitive;
|
|
30
31
|
var getTypeConfig = Columns.getTypeConfig;
|
|
31
32
|
var getSelectionVariantConfiguration = Table.getSelectionVariantConfiguration;
|
|
@@ -371,23 +372,6 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
371
372
|
return aProps;
|
|
372
373
|
};
|
|
373
374
|
_exports.getFilterRestrictions = getFilterRestrictions;
|
|
374
|
-
const getFilterAllowedExpression = function (oFilterRestrictionsAnnotation) {
|
|
375
|
-
const mAllowedExpressions = {};
|
|
376
|
-
if (oFilterRestrictionsAnnotation && oFilterRestrictionsAnnotation.FilterExpressionRestrictions) {
|
|
377
|
-
oFilterRestrictionsAnnotation.FilterExpressionRestrictions.forEach(function (oProperty) {
|
|
378
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
379
|
-
if (oProperty.Property?.value && oProperty.AllowedExpressions) {
|
|
380
|
-
if (mAllowedExpressions[oProperty.Property?.value]) {
|
|
381
|
-
mAllowedExpressions[oProperty.Property?.value].push(oProperty.AllowedExpressions.toString());
|
|
382
|
-
} else {
|
|
383
|
-
mAllowedExpressions[oProperty.Property?.value] = [oProperty.AllowedExpressions.toString()];
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
return mAllowedExpressions;
|
|
389
|
-
};
|
|
390
|
-
_exports.getFilterAllowedExpression = getFilterAllowedExpression;
|
|
391
375
|
const getSearchFilterPropertyInfo = function () {
|
|
392
376
|
return {
|
|
393
377
|
name: "$search",
|
|
@@ -448,14 +432,6 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
448
432
|
}
|
|
449
433
|
});
|
|
450
434
|
};
|
|
451
|
-
const getSpecificAllowedExpression = function (aExpressions) {
|
|
452
|
-
const aAllowedExpressionsPriority = ["SingleValue", "MultiValue", "SingleRange", "MultiRange", "SearchExpression", "MultiRangeOrSearchExpression"];
|
|
453
|
-
aExpressions.sort(function (a, b) {
|
|
454
|
-
return aAllowedExpressionsPriority.indexOf(a) - aAllowedExpressionsPriority.indexOf(b);
|
|
455
|
-
});
|
|
456
|
-
return aExpressions[0];
|
|
457
|
-
};
|
|
458
|
-
_exports.getSpecificAllowedExpression = getSpecificAllowedExpression;
|
|
459
435
|
const displayMode = function (oPropertyAnnotations, oCollectionAnnotations) {
|
|
460
436
|
const oTextAnnotation = oPropertyAnnotations?.Common?.Text,
|
|
461
437
|
oTextArrangmentAnnotation = oTextAnnotation && (oPropertyAnnotations && oPropertyAnnotations?.Common?.Text?.annotations?.UI?.TextArrangement || oCollectionAnnotations && oCollectionAnnotations?.UI?.TextArrangement);
|
|
@@ -644,7 +620,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
644
620
|
}
|
|
645
621
|
if (oPropertyInfo) {
|
|
646
622
|
oPropertyInfo = Object.assign(oPropertyInfo, {
|
|
647
|
-
maxConditions:
|
|
623
|
+
maxConditions: oPropertyInfo.isParameter ? 1 : getMaxConditions(enhanceDataModelPath(converterContext.getDataModelObjectPath(), sPropertyPath)),
|
|
648
624
|
required: propertyInfoField.required ?? (oPropertyInfo.isParameter || aRequiredProps.includes(sPropertyPath)),
|
|
649
625
|
caseSensitive: isFilteringCaseSensitive(converterContext),
|
|
650
626
|
dataType: aTypeConfig[propertyInfoField.key].type
|
|
@@ -679,7 +655,6 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
679
655
|
const oRet = {};
|
|
680
656
|
oRet.RequiredProperties = getFilterRestrictions(oFilterRestrictions, "RequiredProperties") || [];
|
|
681
657
|
oRet.NonFilterableProperties = getFilterRestrictions(oFilterRestrictions, "NonFilterableProperties") || [];
|
|
682
|
-
oRet.FilterAllowedExpressions = getFilterAllowedExpression(oFilterRestrictions);
|
|
683
658
|
const sEntitySetPath = converterContext.getContextPath();
|
|
684
659
|
const aPathParts = sEntitySetPath.split("/");
|
|
685
660
|
if (aPathParts.length > 2) {
|
|
@@ -689,10 +664,6 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
689
664
|
const oNavigationFilterRestrictions = oNavigationRestrictions && oNavigationRestrictions.FilterRestrictions;
|
|
690
665
|
oRet.RequiredProperties = oRet.RequiredProperties.concat(getFilterRestrictions(oNavigationFilterRestrictions, "RequiredProperties") || []);
|
|
691
666
|
oRet.NonFilterableProperties = oRet.NonFilterableProperties.concat(getFilterRestrictions(oNavigationFilterRestrictions, "NonFilterableProperties") || []);
|
|
692
|
-
oRet.FilterAllowedExpressions = {
|
|
693
|
-
...(getFilterAllowedExpression(oNavigationFilterRestrictions) || {}),
|
|
694
|
-
...oRet.FilterAllowedExpressions
|
|
695
|
-
};
|
|
696
667
|
}
|
|
697
668
|
const aRequiredProps = oRet.RequiredProperties;
|
|
698
669
|
const aNonFilterableProps = oRet.NonFilterableProperties;
|
|
@@ -868,4 +839,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
868
839
|
_exports.getExpandFilterFields = getExpandFilterFields;
|
|
869
840
|
return _exports;
|
|
870
841
|
}, false);
|
|
871
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJjb252ZXJ0ZXJDb250ZXh0Iiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiY2hhcnRzIiwibm9TZWFyY2hJbkNoYXJ0cyIsImV2ZXJ5IiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljcyIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwibWFuaWZlc3RXcmFwcGVyIiwic2V0dGluZ3NDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImZpbHRlckNvbmZpZ3VyYXRpb25QYXRoIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJmYkNvbmZpZyIsImRlZmluZWRGaWx0ZXJGaWVsZHMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsIlNsb3QiLCJEZWZhdWx0IiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsImlzQ3VzdG9tRmlsdGVyIiwic2xvdE5hbWUiLCJkb2N1bWVudFJlZlRleHQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInJlcXVpcmVkIiwib2JqZWN0UGF0aCIsImZpbHRlckJhckNvbnRleHRQYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24iLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvIiwiaGlkZGVuRmlsdGVyIiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwiZW50aXR5U2V0IiwiaXNFbnRpdHlTZXQiLCJDYXBhYmlsaXRpZXMiLCJTZWFyY2hSZXN0cmljdGlvbnMiLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwic05hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJvUmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8iLCJvRmlsdGVyRmllbGRJbmZvIiwiZGlzcGxheSIsImNhc2VTZW5zaXRpdmUiLCJtZW51IiwiX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzIiwiaGFzT3duUHJvcGVydHkiLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5Iiwic29ydCIsImEiLCJiIiwiaW5kZXhPZiIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwiVGV4dCIsIm9UZXh0QXJyYW5nbWVudEFubm90YXRpb24iLCJUZXh0QXJyYW5nZW1lbnQiLCJmZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJhc3NpZ24iLCJpc011bHRpVmFsdWUiLCJiSXNNdWx0aVZhbHVlIiwiZmlsdGVyRXhwcmVzc2lvbiIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJlbnRyeSIsImluY2x1ZGVzIiwiYWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3BlcnRpZXMiLCJ0YXJnZXRQcm9wZXJ0eSIsIiR0YXJnZXQiLCJhZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5IiwiVGFyZ2V0IiwiaW5uZXJEYXRhRmllbGQiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwibHJUYWJsZXMiLCJhcmd1bWVudHMiLCJsaW5lSXRlbVRlcm0iLCJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInJlZHVjZSIsImZpbHRlclByb3BlcnR5UGF0aCIsImRlZmF1bHRGaWx0ZXJGaWVsZHMiLCJmZXRjaFR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwibnVsbGFibGUiLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJhUmVxdWlyZWRQcm9wcyIsImFUeXBlQ29uZmlnIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsImRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzIiwiY29uY2F0IiwicGFyYW1ldGVyRmllbGQiLCJwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0Iiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIm9SZXQiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsInNFbnRpdHlTZXRQYXRoIiwiYVBhdGhQYXJ0cyIsInNwbGljZSIsIm9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zIiwiYU5vbkZpbHRlcmFibGVQcm9wcyIsImFGZXRjaGVkUHJvcGVydGllcyIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJhcHAiLCJoaWRlRHJhZnQiLCJlbmFibGVkIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJzaG93RHJhZnRFZGl0U3RhdHVzIiwic2VhcmNoUmVzdHJpY3Rpb25zIiwiaGlkZUJhc2ljU2VhcmNoIiwiQm9vbGVhbiIsIlNlYXJjaGFibGUiLCJuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiRmlsdGVyYWJsZSIsImluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsInNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIiwicHJvcGVydHlJbmZvcyIsImFHcm91cExhYmVsSXNTZXQiLCJiR3JvdXBMYWJlbElzU2V0IiwibG9jYWxlQ29tcGFyZSIsImdldFNlbGVjdGlvbkZpZWxkcyIsIm9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJwYXJhbWV0ZXJGaWVsZHMiLCJzRmV0Y2hQcm9wZXJ0aWVzIiwiSlNPTiIsInN0cmluZ2lmeSIsInNQcm9wZXJ0eUluZm8iLCJwcm9wU2VsZWN0aW9uRmllbGRzIiwicGFyc2UiLCJmaWx0ZXJGYWNldHMiLCJGaWx0ZXJGYWNldHMiLCJhRmllbGRHcm91cHMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImkiLCJwcmV2aW91c1ZhbHVlIiwiZmlsdGVyRmFjZXQiLCJJRCIsImFsbEZpbHRlcnMiLCJpc0Nhc2VTZW5zaXRpdmUiLCJnZXRFeHBhbmRGaWx0ZXJGaWVsZHMiLCJmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwidmFsdWVMaXN0IiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiRmV0Y2hWYWx1ZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpbHRlckJhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25UZXJtLCBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlLFxuXHRGaWx0ZXJFeHByZXNzaW9uVHlwZSxcblx0RmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRGaWx0ZXJSZXN0cmljdGlvbnNUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbixcblx0U2VhcmNoUmVzdHJpY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlTGlzdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVR5cGVBbm5vdGF0aW9ucywgUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRWRtX1R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCxcblx0RGF0YUZpZWxkV2l0aFVybCxcblx0RmllbGRHcm91cCxcblx0TGluZUl0ZW0sXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFNlbGVjdE9wdGlvblR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5VHlwZUNvbmZpZyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBnZXRUeXBlQ29uZmlnLCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBnZXRWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0NvbXBsZXhUeXBlLCBpc0VudGl0eVNldCwgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocywgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFR5cGVDb25maWcgZnJvbSBcInNhcC91aS9tZGMvVHlwZUNvbmZpZ1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJTZXR0aW5nc1xufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGRvY3VtZW50UmVmVGV4dD86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdG1lbnU/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0dmlzdWFsRmlsdGVyPzogVmlzdWFsRmlsdGVycztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0RmlsdGVyRmllbGQgPSBGaWx0ZXJGaWVsZCAmIHtcblx0c2xvdE5hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIEZpbHRlckdyb3VwID0ge1xuXHRncm91cD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcbn07XG5cbmVudW0gZmlsdGVyRmllbGRUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuY29uc3Qgc0VkbVN0cmluZyA9IFwiRWRtLlN0cmluZ1wiO1xuY29uc3Qgc1N0cmluZ0RhdGFUeXBlID0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkID0gQ3VzdG9tRWxlbWVudDxNYW5pZmVzdEZpbHRlckZpZWxkPjtcblxuLyoqXG4gKiBFbnRlciBhbGwgRGF0YUZpZWxkcyBvZiBhIGdpdmVuIEZpZWxkR3JvdXAgaW50byB0aGUgZmlsdGVyRmFjZXRNYXAuXG4gKiBAcGFyYW0gZmllbGRHcm91cFxuICogQHJldHVybnMgVGhlIG1hcCBvZiBmYWNldHMgZm9yIHRoZSBnaXZlbiBGaWVsZEdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoZmllbGRHcm91cDogRmllbGRHcm91cCk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiB7XG5cdGNvbnN0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwW2RhdGFGaWVsZC5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0Z3JvdXA6IGZpZWxkR3JvdXAuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOiBmaWVsZEdyb3VwLkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5xdWFsaWZpZXJcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZpbHRlckZhY2V0TWFwO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzIHVzZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZC5cbiAqIEBwYXJhbSBsclRhYmxlVmlzdWFsaXphdGlvbnMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZXhjbHVkZWQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoXG5cdGxyVGFibGVWaXN1YWxpemF0aW9uczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogU2V0PHN0cmluZz4ge1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgbWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKS5maWx0ZXJGaWVsZHMgPz8ge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oW1xuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgYW5ub3RhdGlvblxuXHRcdC4uLihjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcyA/PyBbXSkubWFwKFxuXHRcdFx0KHNlbGVjdGlvbkZpZWxkKSA9PiBzZWxlY3Rpb25GaWVsZC52YWx1ZVxuXHRcdCksXG5cdFx0Ly9TZWxlY3Rpb24gRmllbGRzIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgbm90IHdpdGggY3VzdG9tIHRlbXBsYXRlXG5cdFx0Li4uT2JqZWN0LmtleXMobWFuaWZlc3RGaWx0ZXJGaWVsZHMpLmZpbHRlcigoa2V5KSA9PiAhIW1hbmlmZXN0RmlsdGVyRmllbGRzW2tleV0udGVtcGxhdGUpXG5cdF0pO1xuXG5cdHJldHVybiBuZXcgU2V0KFxuXHRcdGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdFx0Lm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCB0YWJsZUZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycztcblx0XHRcdFx0aWYgKCF0YWJsZUZpbHRlcnMpIHtcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIFsuLi4odGFibGVGaWx0ZXJzLmhpZGRlbkZpbHRlcnM/LnBhdGhzID8/IFtdKSwgLi4uKHRhYmxlRmlsdGVycy5xdWlja0ZpbHRlcnM/LnBhdGhzID8/IFtdKV0ubWFwKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBwYXRoLmFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdGlmICghc2VsZWN0aW9uVmFyaWFudFBhdGhzLmhhcyhhbm5vdGF0aW9uUGF0aCkpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRocy5hZGQoYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudENvbmZpZyA9IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcyA9IHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KHByb3BlcnR5TmFtZSkgPT4gIXNlbGVjdGlvbkZpZWxkUGF0aHMuaGFzKHByb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuZmxhdCgyKVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbmRpdGlvbiBwYXRoIHJlcXVpcmVkIGZvciB0aGUgY29uZGl0aW9uIG1vZGVsLiBJdCBsb29rcyBhcyBmb2xsb3dzOlxuICogPDE6Ti1Qcm9wZXJ0eU5hbWU+KlxcLzwxOjEtUHJvcGVydHlOYW1lPi88UHJvcGVydHlOYW1lPi5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSByb290IEVudGl0eVR5cGVcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGNvbmRpdGlvbiBwYXRoXG4gKi9cbmNvbnN0IF9nZXRDb25kaXRpb25QYXRoID0gZnVuY3Rpb24gKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRsZXQgcGFydGlhbFBhdGg7XG5cdGxldCBrZXkgPSBcIlwiO1xuXHR3aGlsZSAocGFydHMubGVuZ3RoKSB7XG5cdFx0bGV0IHBhcnQgPSBwYXJ0cy5zaGlmdCgpIGFzIHN0cmluZztcblx0XHRwYXJ0aWFsUGF0aCA9IHBhcnRpYWxQYXRoID8gYCR7cGFydGlhbFBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHRjb25zdCBwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhcnRpYWxQYXRoKTtcblx0XHRpZiAoaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0fVxuXHRcdGtleSA9IGtleSA/IGAke2tleX0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHR9XG5cdHJldHVybiBrZXk7XG59O1xuXG5jb25zdCBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0ZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0Ly8gaWdub3JlIGNvbXBsZXggcHJvcGVydHkgdHlwZXMgYW5kIGhpZGRlbiBhbm5vdGF0ZWQgb25lc1xuXHRpZiAocHJvcGVydHkgJiYgcHJvcGVydHkudGFyZ2V0VHlwZSA9PT0gdW5kZWZpbmVkICYmIChpbmNsdWRlSGlkZGVuIHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUpKSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUocHJvcGVydHkpLFxuXHRcdFx0ZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkID0ge1xuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRjb25kaXRpb25QYXRoOiBfZ2V0Q29uZGl0aW9uUGF0aChlbnRpdHlUeXBlLCBmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpID09PSB0cnVlID8gXCJIaWRkZW5cIiA6IFwiQWRhcHRhdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogcHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRncm91cDogdGFyZ2V0RW50aXR5VHlwZS5uYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOiB0YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyB0YXJnZXRFbnRpdHlUeXBlLm5hbWVcblx0XHRcdH07XG5cdFx0Z2V0U2V0dGluZ3NPZkRlZmF1bHRGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGQpO1xuXHRcdHJldHVybiBmaWx0ZXJGaWVsZDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS4gT25seSByZWxldmFudCBmb3IgQ3JlYXRpb25EYXRlVGltZVxuICogYW5kIExhc3RDaGFuZ2VEYXRlVGltZSwgYXMgdGhleSBhcmUgZGlzcGxheWluZyB0aGUgdGltZWZyYW1lIHJlbGF0ZWQgcHJvcGVydGllcyBhcyBhIFNlbWFudGljRGF0ZVJhbmdlLlxuICogQHBhcmFtIGZpbHRlckZpZWxkXG4gKi9cbmNvbnN0IGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpDcmVhdGlvbkRhdGVUaW1lXCIgfHxcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6Okxhc3RDaGFuZ2VEYXRlVGltZVwiXG5cdCkge1xuXHRcdGNvbnN0IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgPSBbXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UT01PUlJPVyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFdFRUssXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRNT05USCxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFFVQVJURVIsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRZRUFSXG5cdFx0XTtcblx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdG9wZXJhdG9yQ29uZmlndXJhdGlvbjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0aDogXCJrZXlcIixcblx0XHRcdFx0XHRlcXVhbHM6IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuam9pbihcIixcIiksXG5cdFx0XHRcdFx0ZXhjbHVkZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0cHJvcGVydGllczogQXJyYXk8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZnVsbFBhdGg6IHN0cmluZyA9IChuYXZpZ2F0aW9uUGF0aCA/IGAke25hdmlnYXRpb25QYXRofS9gIDogXCJcIikgKyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBwcm9wZXJ0eSwgZnVsbFBhdGgsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKHNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdHNlbGVjdGlvbkZpZWxkTWFwW2Z1bGxQYXRoXSA9IHNlbGVjdGlvbkZpZWxkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZE1hcDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGggPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5UGF0aHM6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0XHRcdGNvbnN0IGVuaGFuY2VkUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdHByb3BlcnR5UGF0aFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZW5oYW5jZWRQYXRoLnRhcmdldE9iamVjdDtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoIWluY2x1ZGVIaWRkZW4gJiZcblx0XHRcdFx0XHRlbmhhbmNlZFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZChcblx0XHRcdFx0XHRcdChuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG5hdmlnYXRpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlXG5cdFx0XHRcdFx0KSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUuZW50aXR5UHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAoaXNDb21wbGV4VHlwZShwcm9wZXJ0eS50YXJnZXRUeXBlKSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgQ29tcGxleFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZW5oYW5jZWRQYXRoLCB0cnVlKSxcblx0XHRcdFx0XHRbcHJvcGVydHldLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSB7XG5cdFx0XHRcdC4uLnNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdFx0Li4ubG9jYWxTZWxlY3Rpb25GaWVsZHNcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbmNvbnN0IF9nZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0bGV0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdGlmICghZmlsdGVyRmllbGQpIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCk/LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUlTU0lOR19TRUxFQ1RJT05GSUVMRCk7XG5cdH1cblx0Ly8gZGVmaW5lZCBTZWxlY3Rpb25GaWVsZHMgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIiA/IFwiSGlkZGVuXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRmaWx0ZXJGaWVsZC5pc1BhcmFtZXRlciA9ICEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZDtcbn07XG5cbmNvbnN0IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogU2V0PHN0cmluZz4sXG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW11cbik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcblx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdC8vIFVzaW5nIGVudGl0eVR5cGUgaW5zdGVhZCBvZiBlbnRpdHlTZXRcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdH0pO1xuXHRpZiAoYVNlbGVjdE9wdGlvbnMgJiYgYVNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlOYW1lPy52YWx1ZTtcblx0XHRcdGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggJiYgIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBjdXJyZW50U2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgJiYgIShwcm9wZXJ0eVBhdGggaW4gVUlTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIHBhcmFtZXRlciBmaWx0ZXIgZmllbGRzIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIEZpbHRlckZpZWxkc1xuICovXG5mdW5jdGlvbiBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0ICYmICFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCA9XG5cdFx0aXNQYXJhbWV0ZXJpemVkICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxFbnRpdHlTZXQ+KGAvJHtkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWV9YCk7XG5cblx0cmV0dXJuIChcblx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0XHRcdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdXG5cdCkgYXMgRmlsdGVyRmllbGRbXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3QuXG4gKiBAcGFyYW0gbGlzdFJlcG9ydFRhYmxlcyBUaGUgbGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY2hhcnRzIFRoZSBBTFAgY2hhcnRzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2ggPSBmdW5jdGlvbiAoXG5cdGxpc3RSZXBvcnRUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjaGFydHM6IENoYXJ0VmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBjaGFydHMgYWxsb3cgc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5DaGFydHMgPSBjaGFydHMubGVuZ3RoID09PSAwIHx8IGNoYXJ0cy5ldmVyeSgoY2hhcnQpID0+ICFjaGFydC5hcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2gpO1xuXG5cdC8vIENoZWNrIGlmIGFsbCB0YWJsZXMgYXJlIGFuYWx5dGljYWwgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdC8vIG9yIGFsbCB0YWJsZXMgYXJlIFRyZWVUYWJsZSBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJblRhYmxlcyA9XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPT09IDAgfHxcblx0XHRsaXN0UmVwb3J0VGFibGVzLmV2ZXJ5KCh0YWJsZSkgPT4gKHRhYmxlLmVuYWJsZUFuYWx5dGljcyB8fCB0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpICYmICF0YWJsZS5lbmFibGVCYXNpY1NlYXJjaCk7XG5cblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGlmIChjb250ZXh0UGF0aCAmJiBub1NlYXJjaEluQ2hhcnRzICYmIG5vU2VhcmNoSW5UYWJsZXMpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGZpbHRlciBmaWVsZHMgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBBbm5vdGF0aW9uIHBhdGggb2YgdGhlIHNlbGVjdGlvbiBmaWVsZHNcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZ1xuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cblx0Y29uc3Qgc2V0dGluZ3NDb250ZXh0UGF0aCA9XG5cdFx0bWFuaWZlc3RXcmFwcGVyLmdldENvbnRleHRQYXRoKCkgfHwgKG1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSA/IGAvJHttYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCl9YCA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IGZpbHRlckNvbmZpZ3VyYXRpb25QYXRoID0gZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgoY29udmVydGVyQ29udGV4dCwgc2V0dGluZ3NDb250ZXh0UGF0aCwgYW5ub3RhdGlvblBhdGgpO1xuXHRsZXQgZmJDb25maWc6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IHt9O1xuXHRmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKGZpbHRlckNvbmZpZ3VyYXRpb25QYXRoKTtcblxuXHRjb25zdCBkZWZpbmVkRmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj4gPSBmYkNvbmZpZz8uZmlsdGVyRmllbGRzIHx8IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRPYmplY3Qua2V5cyhkZWZpbmVkRmlsdGVyRmllbGRzKS5tYXAoKGtleSkgPT4gZGVmaW5lZEZpbHRlckZpZWxkc1trZXldLnByb3BlcnR5ID8/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KGtleSkpLFxuXHRcdHRydWUsXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHQpO1xuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gZGVmaW5lZEZpbHRlckZpZWxkcykge1xuXHRcdGNvbnN0IGZpbHRlckZpZWxkID0gZGVmaW5lZEZpbHRlckZpZWxkc1tzS2V5XTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KTtcblx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkc1twcm9wZXJ0eU5hbWVdO1xuXHRcdGNvbnN0IHR5cGUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBcIlNsb3RcIiA/IGZpbHRlckZpZWxkVHlwZS5TbG90IDogZmlsdGVyRmllbGRUeXBlLkRlZmF1bHQ7XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID1cblx0XHRcdGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkPy52aXN1YWxGaWx0ZXJcblx0XHRcdFx0PyBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChmaWx0ZXJGaWVsZC50ZW1wbGF0ZSB8fCBmaWx0ZXJGaWVsZC50eXBlID09PSBmaWx0ZXJGaWVsZFR5cGUuU2xvdCkge1xuXHRcdFx0aWYgKGZpbHRlckZpZWxkLnNldHRpbmdzKSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzLmlzQ3VzdG9tRmlsdGVyID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGlzQ3VzdG9tRmlsdGVyOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRzbG90TmFtZTogZmlsdGVyRmllbGQ/LnNsb3ROYW1lIHx8IHNLZXksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogZmlsdGVyRmllbGQucHJvcGVydHlcblx0XHRcdFx0PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KVxuXHRcdFx0XHQ6IHNlbGVjdGlvbkZpZWxkPy5jb25kaXRpb25QYXRoIHx8IHByb3BlcnR5TmFtZSxcblx0XHRcdGRvY3VtZW50UmVmVGV4dDpcblx0XHRcdFx0ZmlsdGVyRmllbGQucHJvcGVydHkgJiZcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKFxuXHRcdFx0XHRcdFwie21ldGFNb2RlbD5cIiArIGZpbHRlckZpZWxkLnByb3BlcnR5ICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRvY3VtZW50YXRpb25SZWZ9XCJcblx0XHRcdFx0KSxcblx0XHRcdHRlbXBsYXRlOiBmaWx0ZXJGaWVsZC50ZW1wbGF0ZSxcblx0XHRcdGxhYmVsOiBjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwoZmlsdGVyRmllbGQubGFiZWwpLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IFwiRGVmYXVsdFwiLFxuXHRcdFx0c2V0dGluZ3M6IGZpbHRlckZpZWxkLnNldHRpbmdzLFxuXHRcdFx0dmlzdWFsRmlsdGVyOiB2aXN1YWxGaWx0ZXIsXG5cdFx0XHRyZXF1aXJlZDogZmlsdGVyRmllbGQucmVxdWlyZWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZHM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgY29uZmlndXJhdGlvbiBwYXRoIHRvIGZldGNoIHRoZSBjdXN0b20gZmlsdGVyIGZpZWxkcyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gc2V0dGluZ3NDb250ZXh0UGF0aCBNYW5pZmVzdCBlbnRpdHkgc2V0IHBhdGggYW5kIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIFRoZSBhbm5vdGF0aW9uIHBhdGhcbiAqIEByZXR1cm5zIFBhdGggdG8gZmV0Y2ggdGhlIGN1c3RvbSBmaWx0ZXJzIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldEZpbHRlckNvbmZpZ3VyYXRpb25QYXRoID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNldHRpbmdzQ29udGV4dFBhdGg/OiBzdHJpbmcsXG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgb2JqZWN0UGF0aDtcblx0Y29uc3QgZmlsdGVyQmFyQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IG1ldGFQYXRoID0gYCR7ZmlsdGVyQmFyQ29udGV4dFBhdGh9LyR7YW5ub3RhdGlvblBhdGh9YDtcblx0aWYgKHNldHRpbmdzQ29udGV4dFBhdGggJiYgbWV0YVBhdGg/LnN0YXJ0c1dpdGgoc2V0dGluZ3NDb250ZXh0UGF0aCkgJiYgYW5ub3RhdGlvblBhdGgpIHtcblx0XHRvYmplY3RQYXRoID0gbWV0YVBhdGgucmVwbGFjZShgJHtzZXR0aW5nc0NvbnRleHRQYXRofS9gLCBcIlwiKTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RQYXRoID0gYW5ub3RhdGlvblBhdGg7XG5cdH1cblx0cmV0dXJuIG9iamVjdFBhdGggPyBvYmplY3RQYXRoIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30sIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zVHlwZSB8IHVuZGVmaW5lZCxcblx0c1Jlc3RyaWN0aW9uOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiIHwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiXG4pOiBzdHJpbmdbXSB7XG5cdGxldCBhUHJvcHM6IHN0cmluZ1tdID0gW107XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS52YWx1ZTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufTtcbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+IHtcblx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyRXhwcmVzc2lvblR5cGVbXT4gPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSkge1xuXHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0aWYgKG9Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWUgJiYgb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucykge1xuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHk/LnZhbHVlXSkge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucy50b1N0cmluZygpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkc2VhcmNoXCIsXG5cdFx0cGF0aDogXCIkc2VhcmNoXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRtYXhDb25kaXRpb25zOiAxXG5cdH07XG59O1xuXG5jb25zdCBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFNlYXJjaFJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c05hdmlnYXRpb25QYXRoOiBzdHJpbmdcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuLy8gVGhlIHByb3BlcnR5SW5mbyB1c2VkIGludGVybmFsbHkgd2l0aGluIEZFXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm8gPSB7XG5cdGtleT86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGZpbHRlckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGlzQ3VzdG9tRmlsdGVyPzogYm9vbGVhbjtcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdHR5cGVDb25maWc/OiBUeXBlQ29uZmlnO1xuXHRmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8vIFRoZSBwcm9wZXJ0eUluZm8gd2Ugc2hhcmUgd2l0aCBNRENcbmV4cG9ydCB0eXBlIFByb3BlcnR5SW5mb0V4dGVybmFsID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0ZGF0YVR5cGU6IHN0cmluZztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IG9iamVjdDtcblx0Zm9ybWF0T3B0aW9ucz86IG9iamVjdDtcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0aGlkZGVuRmlsdGVyPzogYm9vbGVhbjtcbn07XG5jb25zdCBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBvRmlsdGVyRmllbGRJbmZvLmtleSxcblx0XHRhbm5vdGF0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRjb25kaXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bmFtZTogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoISxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gW1xuXHRcdFwiU2luZ2xlVmFsdWVcIixcblx0XHRcIk11bHRpVmFsdWVcIixcblx0XHRcIlNpbmdsZVJhbmdlXCIsXG5cdFx0XCJNdWx0aVJhbmdlXCIsXG5cdFx0XCJTZWFyY2hFeHByZXNzaW9uXCIsXG5cdFx0XCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJcblx0XTtcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCB1bmRlZmluZWQsXG5cdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM6IEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7IC8vVGV4dEZpcnN0XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkIHwgUHJvcGVydHlJbmZvLFxuXHRvVHlwZUNvbmZpZzogUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+XG4pOiBQcm9wZXJ0eUluZm8ge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvKG9GaWx0ZXJGaWVsZEluZm8pO1xuXHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoO1xuXG5cdGlmICghc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH1cblx0Y29uc3QgdGFyZ2V0UHJvcGVydHlPYmplY3QgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHNBbm5vdGF0aW9uUGF0aCkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblxuXHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRhcmdldFByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0Y29uc3Qgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zO1xuXG5cdGNvbnN0IG9Gb3JtYXRPcHRpb25zID0gb1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucztcblx0Y29uc3Qgb0NvbnN0cmFpbnRzID0gb1R5cGVDb25maWcuY29uc3RyYWludHM7XG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKVxuXHR9KTtcblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHlJbmZvKTogYm9vbGVhbiB7XG5cdGxldCBiSXNNdWx0aVZhbHVlID0gdHJ1ZTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBiSXNNdWx0aVZhbHVlO1xufTtcblxuY29uc3QgX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50cnk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcbik6IGVudHJ5IGlzIEFubm90YXRpb25UZXJtPERhdGFGaWVsZCB8IERhdGFGaWVsZFdpdGhVcmwgfCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg+IHtcblx0cmV0dXJuIChcblx0XHQoZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpICYmXG5cdFx0ZW50cnkuVmFsdWUucGF0aD8uaW5jbHVkZXMoXCIvXCIpXG5cdCk7XG59O1xuXG4vKipcbiAqIEFkZHMgdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgd2hpY2ggcmVmZXJlbmNlcyB0byB0aGUgdW5pdCwgdGltZXpvbmUsIHRleHRBcnJhbmdlbWVudCBvciBjdXJyZW5jeSBmcm9tIGEgZGF0YSBmaWVsZC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgYWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdXG4pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ7XG5cdGlmICh0YXJnZXRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPVxuXHRcdFx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gYWRkaXRpb25hbFByb3BlcnR5UGF0aFxuXHRcdFx0PyBlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgYWRkaXRpb25hbFByb3BlcnR5UGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHk/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVswXS5uYW1lO1xuXHRcdFx0aWYgKCFuYXZQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdG5hdlByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB1c2VkIG5hdmlnYXRpb24gcHJvcGVydGllcyBmb3IgYXZhaWxhYmxlIGRhdGFGaWVsZC5cbiAqIEBwYXJhbSBuYXZQcm9wZXJ0aWVzIFRoZSBsaXN0IG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICovXG5jb25zdCBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5ID0gZnVuY3Rpb24gKFxuXHRuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXSxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZ1tdIHtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRpZiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlKSB7XG5cdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0XHRcdGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkobmF2UHJvcGVydGllcywgaW5uZXJEYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGlmIChfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5KGRhdGFGaWVsZCkpIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoXG5cdFx0XHRcdFx0ZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGRhdGFGaWVsZC5WYWx1ZS5wYXRoKSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCkuam9pbihcIi9cIik7XG5cdFx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRcdG5hdlByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQWRkaXRpb25hbCBwcm9wZXJ0eSBmcm9tIHRleHQgYXJyYW5nZW1lbnQvdW5pdHMvY3VycmVuY2llcy90aW1lem9uZS4uLlxuXHRcdFx0YWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyhkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIG5hdlByb3BlcnRpZXMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8vIE90aGVyIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gbmF2UHJvcGVydGllcztcbn07XG5cbmNvbnN0IGdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGggPSBcIlwiLFxuXHRpbmNsdWRlSGlkZGVuID0gZmFsc2UsXG5cdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuKToge1xuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFNldDxzdHJpbmc+O1xuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdO1xuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPjtcblx0cHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRkZWZhdWx0RmlsdGVyRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xufSB7XG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uIHZhcmlhbnRzIGRlZmluZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyBhbmQgZGlmZmVyZW50IHZpZXdzIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMgPSBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMobHJUYWJsZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdC8vRmlsdGVycyB3aGljaCBoYXMgdG8gYmUgYWRkZWQgd2hpY2ggaXMgcGFydCBvZiBTVi9EZWZhdWx0IGFubm90YXRpb25zIGJ1dCBub3QgcHJlc2VudCBpbiB0aGUgU2VsZWN0aW9uRmllbGRzXG5cdGNvbnN0IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyA9ICgoYW5ub3RhdGlvblBhdGggJiYgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihhbm5vdGF0aW9uUGF0aCk/LmFubm90YXRpb24pIHx8XG5cdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcyB8fFxuXHRcdFtdKSBhcyBQcm9wZXJ0eVBhdGhbXTtcblxuXHRsZXQgbmF2UHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0aWYgKGxyVGFibGVzLmxlbmd0aCA9PT0gMCAmJiAhIWxpbmVJdGVtVGVybSkge1xuXHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGxpbmVJdGVtVGVybSkuYW5ub3RhdGlvbiBhcyBMaW5lSXRlbSk/LmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0bmF2UHJvcGVydGllcyA9IGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkobmF2UHJvcGVydGllcywgZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSkge1xuXHRcdG5hdlByb3BlcnRpZXMucHVzaChcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRpb25EYXRlVGltZVwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGVkQnlVc2VyXCIsXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VEYXRlVGltZVwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlclwiXG5cdFx0KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7XG5cdFx0Ly8gLi4ubm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIHRoZSBlbnRpdHlcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzKGVudGl0eVR5cGUsIFwiXCIsIGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcywgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uIG5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKGVudGl0eVR5cGUsIG5hdlByb3BlcnRpZXMsIGZhbHNlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAuLi5hZGRpdGlvbmFsIG1hbmlmZXN0IGRlZmluZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChcblx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKS5uYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0KVxuXHR9O1xuXHRsZXQgYVNlbGVjdE9wdGlvbnM6IFNlbGVjdE9wdGlvblR5cGVbXSA9IFtdO1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRhU2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucztcblx0fVxuXG5cdGNvbnN0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9XG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5yZWR1Y2UoKHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSwgc2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHNlbGVjdGlvbkZpZWxkLnZhbHVlO1xuXHRcdFx0aWYgKCFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0bGV0IG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aD8uc3RhcnRzV2l0aChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIikpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBhbm5vdGF0aW9uUGF0aD8uc3BsaXQoXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKVswXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGZpbHRlclByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25QYXRoID8gbmF2aWdhdGlvblBhdGggKyBcIi9cIiArIHByb3BlcnR5UGF0aCA6IHByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gX2dldEZpbHRlckZpZWxkKFxuXHRcdFx0XHRcdGZpbHRlckZpZWxkcyxcblx0XHRcdFx0XHRmaWx0ZXJQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwID0gXCJcIjtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cExhYmVsID0gXCJcIjtcblx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChmaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdFx0fSwgW10pIHx8IFtdO1xuXG5cdGNvbnN0IGRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyhcblx0XHRhU2VsZWN0T3B0aW9ucyxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkc1xuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0ZW50aXR5VHlwZTogZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyxcblx0XHRmaWx0ZXJGaWVsZHM6IGZpbHRlckZpZWxkcyxcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHM6IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRkZWZhdWx0RmlsdGVyRmllbGRzOiBkZWZhdWx0RmlsdGVyRmllbGRzXG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hUeXBlQ29uZmlnID0gZnVuY3Rpb24gKHByb3BlcnR5PzogUHJvcGVydHkpOiBQcm9wZXJ0eVR5cGVDb25maWcge1xuXHRjb25zdCBvVHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHksIHByb3BlcnR5Py50eXBlKTtcblx0aWYgKHByb3BlcnR5Py50eXBlID09PSBzRWRtU3RyaW5nICYmIChvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdW5kZWZpbmVkIHx8IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB0cnVlKSkge1xuXHRcdG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIG9UeXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhUmVxdWlyZWRQcm9wczogdW5rbm93bltdLFxuXHRhVHlwZUNvbmZpZzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+PlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBmZXRjaFByb3BlcnR5SW5mbyhjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eUluZm9GaWVsZCwgYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5IV0pLFxuXHRcdHNQcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRpZiAocHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aCkge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1xcK3xcXCovZywgXCJcIik7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eUluZm8pIHtcblx0XHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0XHRtYXhDb25kaXRpb25zOiAhb1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlciAmJiBpc011bHRpVmFsdWUob1Byb3BlcnR5SW5mbykgPyAtMSA6IDEsXG5cdFx0XHRyZXF1aXJlZDogcHJvcGVydHlJbmZvRmllbGQucmVxdWlyZWQgPz8gKG9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgfHwgYVJlcXVpcmVkUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0ZGF0YVR5cGU6IGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdLnR5cGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj4gPSB7fTtcblxuXHRpZiAoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpIHtcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwcm9wZXJ0eUluZm9GaWVsZHMuY29uY2F0KGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKTtcblx0fVxuXHQvL2FkZCB0eXBlQ29uZmlnXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXJGaWVsZCkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSBvVHlwZUNvbmZpZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnMgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXQ6IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9ucz86IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+O1xuXHR9ID0ge307XG5cdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucyk7XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHtcblx0XHRcdC4uLihnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucykgfHwge30pLFxuXHRcdFx0Li4ub1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXM7XG5cdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcHMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cblx0Ly8gcHJvY2VzcyB0aGUgZmllbGRzIHRvIGFkZCBuZWNlc3NhcnkgcHJvcGVydGllc1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlJbmZvRmllbGQpIHtcblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9bKypdL2csIFwiXCIpO1xuXHRcdGlmICghYU5vbkZpbHRlcmFibGVQcm9wcy5pbmNsdWRlcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIGFSZXF1aXJlZFByb3BzLCBhVHlwZUNvbmZpZyk7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vYWRkIGVkaXRcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24oKT8uYXBwPy5oaWRlRHJhZnQ/LmVuYWJsZWQ7XG5cdGlmIChNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChkYXRhTW9kZWxPYmplY3RQYXRoKSkge1xuXHRcdGlmIChzaG93RHJhZnRFZGl0U3RhdHVzKGNvbnZlcnRlckNvbnRleHQpICYmICFpc0hpZGRlbkRyYWZ0RW5hYmxlZCkge1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvKCkpO1xuXHRcdH1cblx0fVxuXHQvLyBhZGQgc2VhcmNoXG5cdGNvbnN0IHNlYXJjaFJlc3RyaWN0aW9ucyA9IGdldFNlYXJjaFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gQm9vbGVhbihzZWFyY2hSZXN0cmljdGlvbnMgJiYgIXNlYXJjaFJlc3RyaWN0aW9ucy5TZWFyY2hhYmxlKTtcblx0aWYgKHNFbnRpdHlTZXRQYXRoICYmIGhpZGVCYXNpY1NlYXJjaCAhPT0gdHJ1ZSkge1xuXHRcdGlmICghc2VhcmNoUmVzdHJpY3Rpb25zIHx8IHNlYXJjaFJlc3RyaWN0aW9ucz8uU2VhcmNoYWJsZSkge1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvKCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhRmV0Y2hlZFByb3BlcnRpZXM7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvd0RyYWZ0RWRpdFN0YXR1cyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0Y29uc3QgbmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCwgXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKTtcblx0cmV0dXJuIG5hdmlnYXRpb25SZXN0cmljdGlvbnM/LkZpbHRlclJlc3RyaWN0aW9ucz8uRmlsdGVyYWJsZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBNYW5pZmVzdEZpbHRlckZpZWxkW10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZ1xuKTogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgbWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBhbm5vdGF0aW9uUGF0aCk7XG5cdF9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMsIHtcblx0XHRhdmFpbGFiaWxpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0bGFiZWw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dHlwZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzbG90TmFtZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkb2N1bWVudFJlZlRleHQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dGVtcGxhdGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2V0dGluZ3M6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzdWFsRmlsdGVyOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHJlcXVpcmVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsID0gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdKTogdm9pZCA9PiB7XG5cdHByb3BlcnR5SW5mb3Muc29ydChmdW5jdGlvbiAoYTogRmlsdGVyR3JvdXAsIGI6IEZpbHRlckdyb3VwKSB7XG5cdFx0Y29uc3QgYUdyb3VwTGFiZWxJc1NldCA9IGEuZ3JvdXBMYWJlbCAhPT0gdW5kZWZpbmVkICYmIGEuZ3JvdXBMYWJlbCAhPT0gbnVsbDtcblx0XHRjb25zdCBiR3JvdXBMYWJlbElzU2V0ID0gYi5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYi5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGlmICghYUdyb3VwTGFiZWxJc1NldCAmJiAhYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXHRcdGlmIChhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGlmICghYUdyb3VwTGFiZWxJc1NldCAmJiBiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIGEuZ3JvdXBMYWJlbCEubG9jYWxlQ29tcGFyZShiLmdyb3VwTGFiZWwhKTtcblx0fSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIGZpbHRlciBiYXJcbiAqIFRoaXMgY29uZmlndXJhdGlvbiB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGFubm90YXRpb24gYW5kIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxyVGFibGVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBbaW5jbHVkZUhpZGRlbl1cbiAqIEBwYXJhbSBbbGluZUl0ZW1UZXJtXVxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VsZWN0aW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aCA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHsgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdOyBzUHJvcGVydHlJbmZvOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRsclRhYmxlcyxcblx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdGxpbmVJdGVtVGVybVxuXHQpO1xuXHRjb25zdCBwYXJhbWV0ZXJGaWVsZHMgPSBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHM7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmVudGl0eVR5cGU7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wZXJ0eUluZm9GaWVsZHMpO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMocHJvcGVydHlJbmZvRmllbGRzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBhbm5vdGF0aW9uUGF0aCk7XG5cblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzID0gcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyhcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0KTtcblx0c29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblxuXHRsZXQgc0ZldGNoUHJvcGVydGllcyA9IEpTT04uc3RyaW5naWZ5KGFGZXRjaGVkUHJvcGVydGllcyk7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcey9nLCBcIlxcXFx7XCIpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXH0vZywgXCJcXFxcfVwiKTtcblx0Y29uc3Qgc1Byb3BlcnR5SW5mbyA9IHNGZXRjaFByb3BlcnRpZXM7XG5cdC8vIGVuZCBvZiBwcm9wZXJ0eUZpZWxkcyBwcm9jZXNzaW5nXG5cblx0Ly8gdG8gcG9wdWxhdGUgc2VsZWN0aW9uIGZpZWxkc1xuXHRsZXQgcHJvcFNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHMpKTtcblx0cHJvcFNlbGVjdGlvbkZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcFNlbGVjdGlvbkZpZWxkcyk7XG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uIHZhcmlhbnRzXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzO1xuXHRjb25zdCBmaWx0ZXJGYWNldHMgPSBlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LkZpbHRlckZhY2V0cztcblx0bGV0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblxuXHRjb25zdCBhRmllbGRHcm91cHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiVUlcIiwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCkgYXMgRmllbGRHcm91cFtdO1xuXG5cdGlmIChmaWx0ZXJGYWNldHMgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJGYWNldHMubGVuZ3RoIDwgMCkge1xuXHRcdGZvciAoY29uc3QgaSBpbiBhRmllbGRHcm91cHMpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwID0ge1xuXHRcdFx0XHQuLi5maWx0ZXJGYWNldE1hcCxcblx0XHRcdFx0Li4uZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhhRmllbGRHcm91cHNbaV0pXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGYWNldE1hcCA9IGZpbHRlckZhY2V0cy5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiwgZmlsdGVyRmFjZXQ6IFJlZmVyZW5jZUZhY2V0VHlwZXMpID0+IHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGE/Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHByZXZpb3VzVmFsdWVbKChmaWx0ZXJGYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhW2ldIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGhdID0ge1xuXHRcdFx0XHRcdGdyb3VwOiBmaWx0ZXJGYWNldD8uSUQ/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0Z3JvdXBMYWJlbDogZmlsdGVyRmFjZXQ/LkxhYmVsPy50b1N0cmluZygpXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHR9LCB7fSk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5maWx0ZXJGaWVsZHM7XG5cblx0Ly8gZmluYWxseSBjcmVhdGUgZmluYWwgbGlzdCBvZiBmaWx0ZXIgZmllbGRzIGJ5IGFkZGluZyB0aGUgU2VsZWN0aW9uRmllbGRzIGZpcnN0IChvcmRlciBtYXR0ZXJzKS4uLlxuXHRjb25zdCBhbGxGaWx0ZXJzID0gcHJvcFNlbGVjdGlvbkZpZWxkc1xuXG5cdFx0Ly8gLi4uYW5kIGFkZGluZyByZW1haW5pbmcgZmlsdGVyIGZpZWxkcywgdGhhdCBhcmUgbm90IHVzZWQgaW4gYSBTZWxlY3Rpb25WYXJpYW50IChvcmRlciBkb2Vzbid0IG1hdHRlcilcblx0XHQuY29uY2F0KFxuXHRcdFx0T2JqZWN0LmtleXMoZmlsdGVyRmllbGRzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wZXJ0eVBhdGgpID0+ICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHByb3BlcnR5UGF0aCkpXG5cdFx0XHRcdC5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdLCBmaWx0ZXJGYWNldE1hcFtwcm9wZXJ0eVBhdGhdKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMoYWxsRmlsdGVycywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXG5cdC8vIEFkZCBjYXNlU2Vuc2l0aXZlIHByb3BlcnR5IHRvIGFsbCBzZWxlY3Rpb24gZmllbGRzLlxuXHRjb25zdCBpc0Nhc2VTZW5zaXRpdmUgPSBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCk7XG5cdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKChmaWx0ZXJGaWVsZCkgPT4ge1xuXHRcdGZpbHRlckZpZWxkLmNhc2VTZW5zaXRpdmUgPSBpc0Nhc2VTZW5zaXRpdmU7XG5cdH0pO1xuXG5cdHJldHVybiB7IHNlbGVjdGlvbkZpZWxkcywgc1Byb3BlcnR5SW5mbyB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBiYXIgaW5zaWRlIGEgdmFsdWUgaGVscCBkaWFsb2cgc2hvdWxkIGJlIGV4cGFuZGVkLiBUaGlzIGlzIHRydWUgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBob2xkOlxuICogKDEpIGEgZmlsdGVyIHByb3BlcnR5IGlzIG1hbmRhdG9yeSxcbiAqICgyKSBubyBzZWFyY2ggZmllbGQgZXhpc3RzIChlbnRpdHkgaXNuJ3Qgc2VhcmNoIGVuYWJsZWQpLFxuICogKDMpIHdoZW4gdGhlIGRhdGEgaXNuJ3QgbG9hZGVkIGJ5IGRlZmF1bHQgKGFubm90YXRpb24gRmV0Y2hWYWx1ZXMgPSAyKS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gVGhlIEZpbHRlclJlc3RyaWN0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIFZhbHVlTGlzdCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZm9yIGV4cGFuZEZpbHRlckZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kRmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCxcblx0dmFsdWVMaXN0OiBNZXRhTW9kZWxUeXBlPFZhbHVlTGlzdD5cbik6IGJvb2xlYW4ge1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIik7XG5cdGNvbnN0IHNlYXJjaFJlc3RyaWN0aW9ucyA9IGdldFNlYXJjaFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gQm9vbGVhbihzZWFyY2hSZXN0cmljdGlvbnMgJiYgIXNlYXJjaFJlc3RyaWN0aW9ucy5TZWFyY2hhYmxlKTtcblx0aWYgKHJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGggPiAwIHx8IGhpZGVCYXNpY1NlYXJjaCB8fCB2YWx1ZUxpc3Q/LkZldGNoVmFsdWVzID09PSAyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3REE7RUFBQSxJQWdDS0Es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
|
|
842
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJjb252ZXJ0ZXJDb250ZXh0Iiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiY2hhcnRzIiwibm9TZWFyY2hJbkNoYXJ0cyIsImV2ZXJ5IiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljcyIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwibWFuaWZlc3RXcmFwcGVyIiwic2V0dGluZ3NDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImZpbHRlckNvbmZpZ3VyYXRpb25QYXRoIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJmYkNvbmZpZyIsImRlZmluZWRGaWx0ZXJGaWVsZHMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsIlNsb3QiLCJEZWZhdWx0IiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsImlzQ3VzdG9tRmlsdGVyIiwic2xvdE5hbWUiLCJkb2N1bWVudFJlZlRleHQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInJlcXVpcmVkIiwib2JqZWN0UGF0aCIsImZpbHRlckJhckNvbnRleHRQYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvIiwiaGlkZGVuRmlsdGVyIiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwiZW50aXR5U2V0IiwiaXNFbnRpdHlTZXQiLCJDYXBhYmlsaXRpZXMiLCJTZWFyY2hSZXN0cmljdGlvbnMiLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwic05hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJvUmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8iLCJvRmlsdGVyRmllbGRJbmZvIiwiZGlzcGxheSIsImNhc2VTZW5zaXRpdmUiLCJtZW51IiwiX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzIiwiaGFzT3duUHJvcGVydHkiLCJkaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJvVHlwZUNvbmZpZyIsIm9Qcm9wZXJ0eUluZm8iLCJzQW5ub3RhdGlvblBhdGgiLCJ0YXJnZXRQcm9wZXJ0eU9iamVjdCIsIm9Gb3JtYXRPcHRpb25zIiwiZm9ybWF0T3B0aW9ucyIsIm9Db25zdHJhaW50cyIsImNvbnN0cmFpbnRzIiwiYXNzaWduIiwiaXNNdWx0aVZhbHVlIiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJpbmRleE9mIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiaW5jbHVkZXMiLCJhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydGllcyIsInRhcmdldFByb3BlcnR5IiwiJHRhcmdldCIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJUYXJnZXQiLCJpbm5lckRhdGFGaWVsZCIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJsclRhYmxlcyIsImFyZ3VtZW50cyIsImxpbmVJdGVtVGVybSIsImdldEVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJNb2RlbEhlbHBlciIsImlzRHJhZnRSb290Iiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3RPcHRpb25zIiwicHJvcGVydHlJbmZvRmllbGRzIiwicmVkdWNlIiwiZmlsdGVyUHJvcGVydHlQYXRoIiwiZGVmYXVsdEZpbHRlckZpZWxkcyIsImZldGNoVHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJudWxsYWJsZSIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8iLCJwcm9wZXJ0eUluZm9GaWVsZCIsImFSZXF1aXJlZFByb3BzIiwiYVR5cGVDb25maWciLCJnZXRNYXhDb25kaXRpb25zIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsImRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzIiwiY29uY2F0IiwicGFyYW1ldGVyRmllbGQiLCJwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0Iiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIm9SZXQiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNFbnRpdHlTZXRQYXRoIiwiYVBhdGhQYXJ0cyIsInNwbGljZSIsIm9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zIiwiYU5vbkZpbHRlcmFibGVQcm9wcyIsImFGZXRjaGVkUHJvcGVydGllcyIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJhcHAiLCJoaWRlRHJhZnQiLCJlbmFibGVkIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJzaG93RHJhZnRFZGl0U3RhdHVzIiwic2VhcmNoUmVzdHJpY3Rpb25zIiwiaGlkZUJhc2ljU2VhcmNoIiwiQm9vbGVhbiIsIlNlYXJjaGFibGUiLCJuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiRmlsdGVyYWJsZSIsImluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsInNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIiwicHJvcGVydHlJbmZvcyIsInNvcnQiLCJhIiwiYiIsImFHcm91cExhYmVsSXNTZXQiLCJiR3JvdXBMYWJlbElzU2V0IiwibG9jYWxlQ29tcGFyZSIsImdldFNlbGVjdGlvbkZpZWxkcyIsIm9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJwYXJhbWV0ZXJGaWVsZHMiLCJzRmV0Y2hQcm9wZXJ0aWVzIiwiSlNPTiIsInN0cmluZ2lmeSIsInNQcm9wZXJ0eUluZm8iLCJwcm9wU2VsZWN0aW9uRmllbGRzIiwicGFyc2UiLCJmaWx0ZXJGYWNldHMiLCJGaWx0ZXJGYWNldHMiLCJhRmllbGRHcm91cHMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImkiLCJwcmV2aW91c1ZhbHVlIiwiZmlsdGVyRmFjZXQiLCJJRCIsImFsbEZpbHRlcnMiLCJpc0Nhc2VTZW5zaXRpdmUiLCJnZXRFeHBhbmRGaWx0ZXJGaWVsZHMiLCJmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwidmFsdWVMaXN0IiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiRmV0Y2hWYWx1ZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpbHRlckJhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25UZXJtLCBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWx0ZXJSZXN0cmljdGlvbnMsXG5cdEZpbHRlclJlc3RyaWN0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uLFxuXHRTZWFyY2hSZXN0cmljdGlvbnNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVMaXN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5VHlwZUFubm90YXRpb25zLCBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IGdldFR5cGVDb25maWcsIGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBnZXRNYXhDb25kaXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBnZXRWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0NvbXBsZXhUeXBlLCBpc0VudGl0eVNldCwgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocywgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFR5cGVDb25maWcgZnJvbSBcInNhcC91aS9tZGMvVHlwZUNvbmZpZ1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJTZXR0aW5nc1xufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGRvY3VtZW50UmVmVGV4dD86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdG1lbnU/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0dmlzdWFsRmlsdGVyPzogVmlzdWFsRmlsdGVycztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0RmlsdGVyRmllbGQgPSBGaWx0ZXJGaWVsZCAmIHtcblx0c2xvdE5hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIEZpbHRlckdyb3VwID0ge1xuXHRncm91cD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcbn07XG5cbmVudW0gZmlsdGVyRmllbGRUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuY29uc3Qgc0VkbVN0cmluZyA9IFwiRWRtLlN0cmluZ1wiO1xuY29uc3Qgc1N0cmluZ0RhdGFUeXBlID0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkID0gQ3VzdG9tRWxlbWVudDxNYW5pZmVzdEZpbHRlckZpZWxkPjtcblxuLyoqXG4gKiBFbnRlciBhbGwgRGF0YUZpZWxkcyBvZiBhIGdpdmVuIEZpZWxkR3JvdXAgaW50byB0aGUgZmlsdGVyRmFjZXRNYXAuXG4gKiBAcGFyYW0gZmllbGRHcm91cFxuICogQHJldHVybnMgVGhlIG1hcCBvZiBmYWNldHMgZm9yIHRoZSBnaXZlbiBGaWVsZEdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoZmllbGRHcm91cDogRmllbGRHcm91cCk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiB7XG5cdGNvbnN0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwW2RhdGFGaWVsZC5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0Z3JvdXA6IGZpZWxkR3JvdXAuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOiBmaWVsZEdyb3VwLkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5xdWFsaWZpZXJcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZpbHRlckZhY2V0TWFwO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzIHVzZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZC5cbiAqIEBwYXJhbSBsclRhYmxlVmlzdWFsaXphdGlvbnMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZXhjbHVkZWQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoXG5cdGxyVGFibGVWaXN1YWxpemF0aW9uczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogU2V0PHN0cmluZz4ge1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgbWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKS5maWx0ZXJGaWVsZHMgPz8ge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oW1xuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgYW5ub3RhdGlvblxuXHRcdC4uLihjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcyA/PyBbXSkubWFwKFxuXHRcdFx0KHNlbGVjdGlvbkZpZWxkKSA9PiBzZWxlY3Rpb25GaWVsZC52YWx1ZVxuXHRcdCksXG5cdFx0Ly9TZWxlY3Rpb24gRmllbGRzIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgbm90IHdpdGggY3VzdG9tIHRlbXBsYXRlXG5cdFx0Li4uT2JqZWN0LmtleXMobWFuaWZlc3RGaWx0ZXJGaWVsZHMpLmZpbHRlcigoa2V5KSA9PiAhIW1hbmlmZXN0RmlsdGVyRmllbGRzW2tleV0udGVtcGxhdGUpXG5cdF0pO1xuXG5cdHJldHVybiBuZXcgU2V0KFxuXHRcdGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdFx0Lm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCB0YWJsZUZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycztcblx0XHRcdFx0aWYgKCF0YWJsZUZpbHRlcnMpIHtcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIFsuLi4odGFibGVGaWx0ZXJzLmhpZGRlbkZpbHRlcnM/LnBhdGhzID8/IFtdKSwgLi4uKHRhYmxlRmlsdGVycy5xdWlja0ZpbHRlcnM/LnBhdGhzID8/IFtdKV0ubWFwKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBwYXRoLmFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdGlmICghc2VsZWN0aW9uVmFyaWFudFBhdGhzLmhhcyhhbm5vdGF0aW9uUGF0aCkpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRocy5hZGQoYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudENvbmZpZyA9IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcyA9IHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KHByb3BlcnR5TmFtZSkgPT4gIXNlbGVjdGlvbkZpZWxkUGF0aHMuaGFzKHByb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuZmxhdCgyKVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbmRpdGlvbiBwYXRoIHJlcXVpcmVkIGZvciB0aGUgY29uZGl0aW9uIG1vZGVsLiBJdCBsb29rcyBhcyBmb2xsb3dzOlxuICogPDE6Ti1Qcm9wZXJ0eU5hbWU+KlxcLzwxOjEtUHJvcGVydHlOYW1lPi88UHJvcGVydHlOYW1lPi5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSByb290IEVudGl0eVR5cGVcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGNvbmRpdGlvbiBwYXRoXG4gKi9cbmNvbnN0IF9nZXRDb25kaXRpb25QYXRoID0gZnVuY3Rpb24gKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRsZXQgcGFydGlhbFBhdGg7XG5cdGxldCBrZXkgPSBcIlwiO1xuXHR3aGlsZSAocGFydHMubGVuZ3RoKSB7XG5cdFx0bGV0IHBhcnQgPSBwYXJ0cy5zaGlmdCgpIGFzIHN0cmluZztcblx0XHRwYXJ0aWFsUGF0aCA9IHBhcnRpYWxQYXRoID8gYCR7cGFydGlhbFBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHRjb25zdCBwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhcnRpYWxQYXRoKTtcblx0XHRpZiAoaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0fVxuXHRcdGtleSA9IGtleSA/IGAke2tleX0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHR9XG5cdHJldHVybiBrZXk7XG59O1xuXG5jb25zdCBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0ZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0Ly8gaWdub3JlIGNvbXBsZXggcHJvcGVydHkgdHlwZXMgYW5kIGhpZGRlbiBhbm5vdGF0ZWQgb25lc1xuXHRpZiAocHJvcGVydHkgJiYgcHJvcGVydHkudGFyZ2V0VHlwZSA9PT0gdW5kZWZpbmVkICYmIChpbmNsdWRlSGlkZGVuIHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUpKSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUocHJvcGVydHkpLFxuXHRcdFx0ZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkID0ge1xuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRjb25kaXRpb25QYXRoOiBfZ2V0Q29uZGl0aW9uUGF0aChlbnRpdHlUeXBlLCBmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpID09PSB0cnVlID8gXCJIaWRkZW5cIiA6IFwiQWRhcHRhdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogcHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRncm91cDogdGFyZ2V0RW50aXR5VHlwZS5uYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOiB0YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyB0YXJnZXRFbnRpdHlUeXBlLm5hbWVcblx0XHRcdH07XG5cdFx0Z2V0U2V0dGluZ3NPZkRlZmF1bHRGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGQpO1xuXHRcdHJldHVybiBmaWx0ZXJGaWVsZDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS4gT25seSByZWxldmFudCBmb3IgQ3JlYXRpb25EYXRlVGltZVxuICogYW5kIExhc3RDaGFuZ2VEYXRlVGltZSwgYXMgdGhleSBhcmUgZGlzcGxheWluZyB0aGUgdGltZWZyYW1lIHJlbGF0ZWQgcHJvcGVydGllcyBhcyBhIFNlbWFudGljRGF0ZVJhbmdlLlxuICogQHBhcmFtIGZpbHRlckZpZWxkXG4gKi9cbmNvbnN0IGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpDcmVhdGlvbkRhdGVUaW1lXCIgfHxcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6Okxhc3RDaGFuZ2VEYXRlVGltZVwiXG5cdCkge1xuXHRcdGNvbnN0IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgPSBbXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UT01PUlJPVyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFdFRUssXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRNT05USCxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFFVQVJURVIsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRZRUFSXG5cdFx0XTtcblx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdG9wZXJhdG9yQ29uZmlndXJhdGlvbjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0aDogXCJrZXlcIixcblx0XHRcdFx0XHRlcXVhbHM6IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuam9pbihcIixcIiksXG5cdFx0XHRcdFx0ZXhjbHVkZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0cHJvcGVydGllczogQXJyYXk8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZnVsbFBhdGg6IHN0cmluZyA9IChuYXZpZ2F0aW9uUGF0aCA/IGAke25hdmlnYXRpb25QYXRofS9gIDogXCJcIikgKyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBwcm9wZXJ0eSwgZnVsbFBhdGgsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKHNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdHNlbGVjdGlvbkZpZWxkTWFwW2Z1bGxQYXRoXSA9IHNlbGVjdGlvbkZpZWxkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZE1hcDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGggPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5UGF0aHM6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0XHRcdGNvbnN0IGVuaGFuY2VkUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdHByb3BlcnR5UGF0aFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZW5oYW5jZWRQYXRoLnRhcmdldE9iamVjdDtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoIWluY2x1ZGVIaWRkZW4gJiZcblx0XHRcdFx0XHRlbmhhbmNlZFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZChcblx0XHRcdFx0XHRcdChuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG5hdmlnYXRpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlXG5cdFx0XHRcdFx0KSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUuZW50aXR5UHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAoaXNDb21wbGV4VHlwZShwcm9wZXJ0eS50YXJnZXRUeXBlKSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgQ29tcGxleFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZW5oYW5jZWRQYXRoLCB0cnVlKSxcblx0XHRcdFx0XHRbcHJvcGVydHldLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSB7XG5cdFx0XHRcdC4uLnNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdFx0Li4ubG9jYWxTZWxlY3Rpb25GaWVsZHNcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbmNvbnN0IF9nZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0bGV0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdGlmICghZmlsdGVyRmllbGQpIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCk/LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUlTU0lOR19TRUxFQ1RJT05GSUVMRCk7XG5cdH1cblx0Ly8gZGVmaW5lZCBTZWxlY3Rpb25GaWVsZHMgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIiA/IFwiSGlkZGVuXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRmaWx0ZXJGaWVsZC5pc1BhcmFtZXRlciA9ICEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZDtcbn07XG5cbmNvbnN0IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogU2V0PHN0cmluZz4sXG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW11cbik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcblx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdC8vIFVzaW5nIGVudGl0eVR5cGUgaW5zdGVhZCBvZiBlbnRpdHlTZXRcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdH0pO1xuXHRpZiAoYVNlbGVjdE9wdGlvbnMgJiYgYVNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlOYW1lPy52YWx1ZTtcblx0XHRcdGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggJiYgIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBjdXJyZW50U2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgJiYgIShwcm9wZXJ0eVBhdGggaW4gVUlTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIHBhcmFtZXRlciBmaWx0ZXIgZmllbGRzIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIEZpbHRlckZpZWxkc1xuICovXG5mdW5jdGlvbiBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0ICYmICFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCA9XG5cdFx0aXNQYXJhbWV0ZXJpemVkICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxFbnRpdHlTZXQ+KGAvJHtkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWV9YCk7XG5cblx0cmV0dXJuIChcblx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0XHRcdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdXG5cdCkgYXMgRmlsdGVyRmllbGRbXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3QuXG4gKiBAcGFyYW0gbGlzdFJlcG9ydFRhYmxlcyBUaGUgbGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY2hhcnRzIFRoZSBBTFAgY2hhcnRzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2ggPSBmdW5jdGlvbiAoXG5cdGxpc3RSZXBvcnRUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjaGFydHM6IENoYXJ0VmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBjaGFydHMgYWxsb3cgc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5DaGFydHMgPSBjaGFydHMubGVuZ3RoID09PSAwIHx8IGNoYXJ0cy5ldmVyeSgoY2hhcnQpID0+ICFjaGFydC5hcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2gpO1xuXG5cdC8vIENoZWNrIGlmIGFsbCB0YWJsZXMgYXJlIGFuYWx5dGljYWwgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdC8vIG9yIGFsbCB0YWJsZXMgYXJlIFRyZWVUYWJsZSBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJblRhYmxlcyA9XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPT09IDAgfHxcblx0XHRsaXN0UmVwb3J0VGFibGVzLmV2ZXJ5KCh0YWJsZSkgPT4gKHRhYmxlLmVuYWJsZUFuYWx5dGljcyB8fCB0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpICYmICF0YWJsZS5lbmFibGVCYXNpY1NlYXJjaCk7XG5cblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGlmIChjb250ZXh0UGF0aCAmJiBub1NlYXJjaEluQ2hhcnRzICYmIG5vU2VhcmNoSW5UYWJsZXMpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGZpbHRlciBmaWVsZHMgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBBbm5vdGF0aW9uIHBhdGggb2YgdGhlIHNlbGVjdGlvbiBmaWVsZHNcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZ1xuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cblx0Y29uc3Qgc2V0dGluZ3NDb250ZXh0UGF0aCA9XG5cdFx0bWFuaWZlc3RXcmFwcGVyLmdldENvbnRleHRQYXRoKCkgfHwgKG1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSA/IGAvJHttYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCl9YCA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IGZpbHRlckNvbmZpZ3VyYXRpb25QYXRoID0gZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgoY29udmVydGVyQ29udGV4dCwgc2V0dGluZ3NDb250ZXh0UGF0aCwgYW5ub3RhdGlvblBhdGgpO1xuXHRsZXQgZmJDb25maWc6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IHt9O1xuXHRmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKGZpbHRlckNvbmZpZ3VyYXRpb25QYXRoKTtcblxuXHRjb25zdCBkZWZpbmVkRmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj4gPSBmYkNvbmZpZz8uZmlsdGVyRmllbGRzIHx8IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRPYmplY3Qua2V5cyhkZWZpbmVkRmlsdGVyRmllbGRzKS5tYXAoKGtleSkgPT4gZGVmaW5lZEZpbHRlckZpZWxkc1trZXldLnByb3BlcnR5ID8/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KGtleSkpLFxuXHRcdHRydWUsXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHQpO1xuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gZGVmaW5lZEZpbHRlckZpZWxkcykge1xuXHRcdGNvbnN0IGZpbHRlckZpZWxkID0gZGVmaW5lZEZpbHRlckZpZWxkc1tzS2V5XTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KTtcblx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkc1twcm9wZXJ0eU5hbWVdO1xuXHRcdGNvbnN0IHR5cGUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBcIlNsb3RcIiA/IGZpbHRlckZpZWxkVHlwZS5TbG90IDogZmlsdGVyRmllbGRUeXBlLkRlZmF1bHQ7XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID1cblx0XHRcdGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkPy52aXN1YWxGaWx0ZXJcblx0XHRcdFx0PyBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChmaWx0ZXJGaWVsZC50ZW1wbGF0ZSB8fCBmaWx0ZXJGaWVsZC50eXBlID09PSBmaWx0ZXJGaWVsZFR5cGUuU2xvdCkge1xuXHRcdFx0aWYgKGZpbHRlckZpZWxkLnNldHRpbmdzKSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzLmlzQ3VzdG9tRmlsdGVyID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGlzQ3VzdG9tRmlsdGVyOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRzbG90TmFtZTogZmlsdGVyRmllbGQ/LnNsb3ROYW1lIHx8IHNLZXksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogZmlsdGVyRmllbGQucHJvcGVydHlcblx0XHRcdFx0PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KVxuXHRcdFx0XHQ6IHNlbGVjdGlvbkZpZWxkPy5jb25kaXRpb25QYXRoIHx8IHByb3BlcnR5TmFtZSxcblx0XHRcdGRvY3VtZW50UmVmVGV4dDpcblx0XHRcdFx0ZmlsdGVyRmllbGQucHJvcGVydHkgJiZcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKFxuXHRcdFx0XHRcdFwie21ldGFNb2RlbD5cIiArIGZpbHRlckZpZWxkLnByb3BlcnR5ICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRvY3VtZW50YXRpb25SZWZ9XCJcblx0XHRcdFx0KSxcblx0XHRcdHRlbXBsYXRlOiBmaWx0ZXJGaWVsZC50ZW1wbGF0ZSxcblx0XHRcdGxhYmVsOiBjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwoZmlsdGVyRmllbGQubGFiZWwpLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IFwiRGVmYXVsdFwiLFxuXHRcdFx0c2V0dGluZ3M6IGZpbHRlckZpZWxkLnNldHRpbmdzLFxuXHRcdFx0dmlzdWFsRmlsdGVyOiB2aXN1YWxGaWx0ZXIsXG5cdFx0XHRyZXF1aXJlZDogZmlsdGVyRmllbGQucmVxdWlyZWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZHM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgY29uZmlndXJhdGlvbiBwYXRoIHRvIGZldGNoIHRoZSBjdXN0b20gZmlsdGVyIGZpZWxkcyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gc2V0dGluZ3NDb250ZXh0UGF0aCBNYW5pZmVzdCBlbnRpdHkgc2V0IHBhdGggYW5kIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIFRoZSBhbm5vdGF0aW9uIHBhdGhcbiAqIEByZXR1cm5zIFBhdGggdG8gZmV0Y2ggdGhlIGN1c3RvbSBmaWx0ZXJzIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldEZpbHRlckNvbmZpZ3VyYXRpb25QYXRoID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNldHRpbmdzQ29udGV4dFBhdGg/OiBzdHJpbmcsXG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgb2JqZWN0UGF0aDtcblx0Y29uc3QgZmlsdGVyQmFyQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IG1ldGFQYXRoID0gYCR7ZmlsdGVyQmFyQ29udGV4dFBhdGh9LyR7YW5ub3RhdGlvblBhdGh9YDtcblx0aWYgKHNldHRpbmdzQ29udGV4dFBhdGggJiYgbWV0YVBhdGg/LnN0YXJ0c1dpdGgoc2V0dGluZ3NDb250ZXh0UGF0aCkgJiYgYW5ub3RhdGlvblBhdGgpIHtcblx0XHRvYmplY3RQYXRoID0gbWV0YVBhdGgucmVwbGFjZShgJHtzZXR0aW5nc0NvbnRleHRQYXRofS9gLCBcIlwiKTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RQYXRoID0gYW5ub3RhdGlvblBhdGg7XG5cdH1cblx0cmV0dXJuIG9iamVjdFBhdGggPyBvYmplY3RQYXRoIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30sIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zVHlwZSB8IHVuZGVmaW5lZCxcblx0c1Jlc3RyaWN0aW9uOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiIHwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiXG4pOiBzdHJpbmdbXSB7XG5cdGxldCBhUHJvcHM6IHN0cmluZ1tdID0gW107XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS52YWx1ZTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkc2VhcmNoXCIsXG5cdFx0cGF0aDogXCIkc2VhcmNoXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRtYXhDb25kaXRpb25zOiAxXG5cdH07XG59O1xuXG5jb25zdCBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFNlYXJjaFJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c05hdmlnYXRpb25QYXRoOiBzdHJpbmdcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuLy8gVGhlIHByb3BlcnR5SW5mbyB1c2VkIGludGVybmFsbHkgd2l0aGluIEZFXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm8gPSB7XG5cdGtleT86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGZpbHRlckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGlzQ3VzdG9tRmlsdGVyPzogYm9vbGVhbjtcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdHR5cGVDb25maWc/OiBUeXBlQ29uZmlnO1xuXHRmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8vIFRoZSBwcm9wZXJ0eUluZm8gd2Ugc2hhcmUgd2l0aCBNRENcbmV4cG9ydCB0eXBlIFByb3BlcnR5SW5mb0V4dGVybmFsID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0ZGF0YVR5cGU6IHN0cmluZztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IG9iamVjdDtcblx0Zm9ybWF0T3B0aW9ucz86IG9iamVjdDtcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0aGlkZGVuRmlsdGVyPzogYm9vbGVhbjtcbn07XG5jb25zdCBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBvRmlsdGVyRmllbGRJbmZvLmtleSxcblx0XHRhbm5vdGF0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRjb25kaXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bmFtZTogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoISxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zOiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0b1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpKTtcblxuXHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiOyAvL1RleHRGaXJzdFxuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0b1R5cGVDb25maWc6IFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cblx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSB0YXJnZXRQcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdGNvbnN0IG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblxuXHRjb25zdCBvRm9ybWF0T3B0aW9ucyA9IG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnM7XG5cdGNvbnN0IG9Db25zdHJhaW50cyA9IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzO1xuXHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50cyxcblx0XHRkaXNwbGF5OiBkaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9ucywgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucylcblx0fSk7XG5cdHJldHVybiBvUHJvcGVydHlJbmZvO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5SW5mbyk6IGJvb2xlYW4ge1xuXHRsZXQgYklzTXVsdGlWYWx1ZSA9IHRydWU7XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0c3dpdGNoIChvUHJvcGVydHkuZmlsdGVyRXhwcmVzc2lvbikge1xuXHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS50eXBlICYmIG9Qcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJCb29sZWFuXCIpID4gMCkge1xuXHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYklzTXVsdGlWYWx1ZTtcbn07XG5cbmNvbnN0IF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudHJ5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG4pOiBlbnRyeSBpcyBBbm5vdGF0aW9uVGVybTxEYXRhRmllbGQgfCBEYXRhRmllbGRXaXRoVXJsIHwgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoPiB7XG5cdHJldHVybiAoXG5cdFx0KGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKSAmJlxuXHRcdGVudHJ5LlZhbHVlLnBhdGg/LmluY2x1ZGVzKFwiL1wiKVxuXHQpO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdG8gdGhlIHVuaXQsIHRpbWV6b25lLCB0ZXh0QXJyYW5nZW1lbnQgb3IgY3VycmVuY3kgZnJvbSBhIGRhdGEgZmllbGQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0O1xuXHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID1cblx0XHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGhcblx0XHRcdD8gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlbMF0ubmFtZTtcblx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdXNlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgZm9yIGF2YWlsYWJsZSBkYXRhRmllbGQuXG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0bmF2UHJvcGVydGllczogc3RyaW5nW10sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGlubmVyRGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCksXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEFkZGl0aW9uYWwgcHJvcGVydHkgZnJvbSB0ZXh0IGFycmFuZ2VtZW50L3VuaXRzL2N1cnJlbmNpZXMvdGltZXpvbmUuLi5cblx0XHRcdGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZQcm9wZXJ0aWVzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBPdGhlciB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIG5hdlByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHtcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPjtcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXTtcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cdHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0ZGVmYXVsdEZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXTtcbn0ge1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0bGV0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdG5hdlByb3BlcnRpZXMgPSBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRlZEJ5VXNlclwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdCk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGg/LnN0YXJ0c1dpdGgoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGg/LnNwbGl0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIilbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aCA/IG5hdmlnYXRpb25QYXRoICsgXCIvXCIgKyBwcm9wZXJ0eVBhdGggOiBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZHMsXG5cdFx0XHRcdFx0ZmlsdGVyUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cCA9IFwiXCI7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXBMYWJlbCA9IFwiXCI7XG5cdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xuXHRcdH0sIFtdKSB8fCBbXTtcblxuXHRjb25zdCBkZWZhdWx0RmlsdGVyRmllbGRzID0gX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMoXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHNcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmllbGRzOiBmaWx0ZXJGaWVsZHMsXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0ZGVmYXVsdEZpbHRlckZpZWxkczogZGVmYXVsdEZpbHRlckZpZWxkc1xuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eT86IFByb3BlcnR5KTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0Y29uc3Qgb1R5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5LCBwcm9wZXJ0eT8udHlwZSk7XG5cdGlmIChwcm9wZXJ0eT8udHlwZSA9PT0gc0VkbVN0cmluZyAmJiAob1R5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IHVuZGVmaW5lZCB8fCBvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdHJ1ZSkpIHtcblx0XHRvVHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBvVHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZDogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YVJlcXVpcmVkUHJvcHM6IHVua25vd25bXSxcblx0YVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj5cbik6IFByb3BlcnR5SW5mbyB7XG5cdGxldCBvUHJvcGVydHlJbmZvID0gZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHlJbmZvRmllbGQsIGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdKSxcblx0XHRzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogb1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlclxuXHRcdFx0XHQ/IDFcblx0XHRcdFx0OiBnZXRNYXhDb25kaXRpb25zKGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgc1Byb3BlcnR5UGF0aCkpLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXkhXS50eXBlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzPzogRmlsdGVyRmllbGRbXVxuKTogUHJvcGVydHlJbmZvW10ge1xuXHQvL2dldCBUeXBlQ29uZmlnIGZ1bmN0aW9uXG5cdGNvbnN0IGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz4+ID0ge307XG5cblx0aWYgKGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKSB7XG5cdFx0cHJvcGVydHlJbmZvRmllbGRzID0gcHJvcGVydHlJbmZvRmllbGRzLmNvbmNhdChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyk7XG5cdH1cblx0Ly9hZGQgdHlwZUNvbmZpZ1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1ldGVyRmllbGQpIHtcblx0XHRpZiAocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5Q29udmVydHlDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdCA9IHByb3BlcnR5Q29udmVydHlDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IGZldGNoVHlwZUNvbmZpZyhwcm9wZXJ0eVRhcmdldE9iamVjdCk7XG5cdFx0XHRhVHlwZUNvbmZpZ1twYXJhbWV0ZXJGaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSB7IHR5cGU6IHNTdHJpbmdEYXRhVHlwZSB9O1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gZmlsdGVyUmVzdHJpY3Rpb25zXG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvUmV0OiB7XG5cdFx0UmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fSA9IHt9O1xuXHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBhUGF0aFBhcnRzID0gc0VudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpO1xuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVBhdGhQYXJ0c1thUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW11cblx0XHQpO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdH1cblx0Y29uc3QgYVJlcXVpcmVkUHJvcHMgPSBvUmV0LlJlcXVpcmVkUHJvcGVydGllcztcblx0Y29uc3QgYU5vbkZpbHRlcmFibGVQcm9wcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblxuXHQvLyBwcm9jZXNzIHRoZSBmaWVsZHMgdG8gYWRkIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm9GaWVsZCkge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1srKl0vZywgXCJcIik7XG5cdFx0aWYgKCFhTm9uRmlsdGVyYWJsZVByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm9GaWVsZCwgY29udmVydGVyQ29udGV4dCwgYVJlcXVpcmVkUHJvcHMsIGFUeXBlQ29uZmlnKTtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdH1cblx0fSk7XG5cblx0Ly9hZGQgZWRpdFxuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LmhpZGVEcmFmdD8uZW5hYmxlZDtcblx0aWYgKE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0aWYgKHNob3dEcmFmdEVkaXRTdGF0dXMoY29udmVydGVyQ29udGV4dCkgJiYgIWlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdFx0fVxuXHR9XG5cdC8vIGFkZCBzZWFyY2hcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAoc0VudGl0eVNldFBhdGggJiYgaGlkZUJhc2ljU2VhcmNoICE9PSB0cnVlKSB7XG5cdFx0aWYgKCFzZWFyY2hSZXN0cmljdGlvbnMgfHwgc2VhcmNoUmVzdHJpY3Rpb25zPy5TZWFyY2hhYmxlKSB7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFGZXRjaGVkUHJvcGVydGllcztcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93RHJhZnRFZGl0U3RhdHVzID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRjb25zdCBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRyZXR1cm4gbmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uRmlsdGVyUmVzdHJpY3Rpb25zPy5GaWx0ZXJhYmxlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nXG4pOiBNYW5pZmVzdEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBtYW5pZmVzdEZpbHRlckZpZWxkcyA9IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblx0X2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcywge1xuXHRcdGF2YWlsYWJpbGl0eTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRsYWJlbDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0eXBlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNsb3ROYW1lOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGRvY3VtZW50UmVmVGV4dDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0ZW1wbGF0ZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzZXR0aW5nczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXN1YWxGaWx0ZXI6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cmVxdWlyZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwgPSAocHJvcGVydHlJbmZvczogUHJvcGVydHlJbmZvW10pOiB2b2lkID0+IHtcblx0cHJvcGVydHlJbmZvcy5zb3J0KGZ1bmN0aW9uIChhOiBGaWx0ZXJHcm91cCwgYjogRmlsdGVyR3JvdXApIHtcblx0XHRjb25zdCBhR3JvdXBMYWJlbElzU2V0ID0gYS5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYS5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGNvbnN0IGJHcm91cExhYmVsSXNTZXQgPSBiLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBiLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKGFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmIGJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gYS5ncm91cExhYmVsIS5sb2NhbGVDb21wYXJlKGIuZ3JvdXBMYWJlbCEpO1xuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGUgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbHJUYWJsZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIFtpbmNsdWRlSGlkZGVuXVxuICogQHBhcmFtIFtsaW5lSXRlbVRlcm1dXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZWxlY3Rpb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbj86IGJvb2xlYW4sXG5cdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuKTogeyBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW107IHNQcm9wZXJ0eUluZm86IHN0cmluZyB9IHtcblx0Y29uc3Qgb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSA9IGdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGxyVGFibGVzLFxuXHRcdGFubm90YXRpb25QYXRoLFxuXHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0bGluZUl0ZW1UZXJtXG5cdCk7XG5cdGNvbnN0IHBhcmFtZXRlckZpZWxkcyA9IF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcztcblx0Y29uc3QgZW50aXR5VHlwZSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZW50aXR5VHlwZTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BlcnR5SW5mb0ZpZWxkcyk7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhwcm9wZXJ0eUluZm9GaWVsZHMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzU2VsZWN0aW9uRmllbGRzKFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZGVmYXVsdEZpbHRlckZpZWxkc1xuXHQpO1xuXHRzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbChhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSBhcyBGaWVsZEdyb3VwW107XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGNvbnN0IGFsbEZpbHRlcnMgPSBwcm9wU2VsZWN0aW9uRmllbGRzXG5cblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BlcnR5UGF0aCkgPT4gIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMocHJvcGVydHlQYXRoKSlcblx0XHRcdFx0Lm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF0sIGZpbHRlckZhY2V0TWFwW3Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhhbGxGaWx0ZXJzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBhbm5vdGF0aW9uUGF0aCk7XG5cblx0Ly8gQWRkIGNhc2VTZW5zaXRpdmUgcHJvcGVydHkgdG8gYWxsIHNlbGVjdGlvbiBmaWVsZHMuXG5cdGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KTtcblx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0ZmlsdGVyRmllbGQuY2FzZVNlbnNpdGl2ZSA9IGlzQ2FzZVNlbnNpdGl2ZTtcblx0fSk7XG5cblx0cmV0dXJuIHsgc2VsZWN0aW9uRmllbGRzLCBzUHJvcGVydHlJbmZvIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIGJhciBpbnNpZGUgYSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgZXhwYW5kZWQuIFRoaXMgaXMgdHJ1ZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6XG4gKiAoMSkgYSBmaWx0ZXIgcHJvcGVydHkgaXMgbWFuZGF0b3J5LFxuICogKDIpIG5vIHNlYXJjaCBmaWVsZCBleGlzdHMgKGVudGl0eSBpc24ndCBzZWFyY2ggZW5hYmxlZCksXG4gKiAoMykgd2hlbiB0aGUgZGF0YSBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCAoYW5ub3RhdGlvbiBGZXRjaFZhbHVlcyA9IDIpLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiBUaGUgRmlsdGVyUmVzdHJpY3Rpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zIHwgdW5kZWZpbmVkLFxuXHR2YWx1ZUxpc3Q6IE1ldGFNb2RlbFR5cGU8VmFsdWVMaXN0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF1REE7RUFBQSxJQWdDS0EsZUFBZSwwQkFBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBQSxPQUFmQSxlQUFlO0VBQUEsRUFBZkEsZUFBZTtFQUtwQixNQUFNQyxVQUFV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
|