@sapui5/sap.fe.core 1.130.1 → 1.131.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 -3
- package/src/sap/fe/core/ActionRuntime.ts +1 -1
- package/src/sap/fe/core/AppComponent.js +4 -11
- package/src/sap/fe/core/AppComponent.ts +3 -12
- package/src/sap/fe/core/CommonUtils.js +13 -13
- package/src/sap/fe/core/CommonUtils.ts +16 -16
- package/src/sap/fe/core/TemplateComponent.js +4 -1
- package/src/sap/fe/core/TemplateComponent.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
- package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
- package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +0 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +16 -19
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +29 -28
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
- package/src/sap/fe/core/converters/ConverterContext.js +10 -3
- package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
- package/src/sap/fe/core/converters/controls/Common/Table.js +43 -46
- package/src/sap/fe/core/converters/controls/Common/Table.ts +68 -57
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +7 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +6 -13
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
- package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
- package/src/sap/fe/core/helpers/MetaPath.js +16 -2
- package/src/sap/fe/core/helpers/MetaPath.ts +19 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
- package/src/sap/fe/core/library.js +5 -2
- package/src/sap/fe/core/library.support.js +3 -3
- package/src/sap/fe/core/library.support.ts +2 -1
- package/src/sap/fe/core/library.ts +4 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +17 -8
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +16 -14
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +11 -3
- package/src/sap/fe/core/messagebundle_bg.properties +14 -6
- package/src/sap/fe/core/messagebundle_ca.properties +10 -2
- package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
- package/src/sap/fe/core/messagebundle_cs.properties +10 -2
- package/src/sap/fe/core/messagebundle_cy.properties +10 -2
- package/src/sap/fe/core/messagebundle_da.properties +10 -2
- package/src/sap/fe/core/messagebundle_de.properties +12 -4
- package/src/sap/fe/core/messagebundle_el.properties +10 -2
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
- package/src/sap/fe/core/messagebundle_es.properties +12 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
- package/src/sap/fe/core/messagebundle_et.properties +10 -2
- package/src/sap/fe/core/messagebundle_fi.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
- package/src/sap/fe/core/messagebundle_hi.properties +10 -2
- package/src/sap/fe/core/messagebundle_hr.properties +11 -3
- package/src/sap/fe/core/messagebundle_hu.properties +11 -3
- package/src/sap/fe/core/messagebundle_id.properties +10 -2
- package/src/sap/fe/core/messagebundle_it.properties +10 -2
- package/src/sap/fe/core/messagebundle_iw.properties +11 -3
- package/src/sap/fe/core/messagebundle_ja.properties +10 -2
- package/src/sap/fe/core/messagebundle_kk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ko.properties +10 -2
- package/src/sap/fe/core/messagebundle_lt.properties +10 -2
- package/src/sap/fe/core/messagebundle_lv.properties +10 -2
- package/src/sap/fe/core/messagebundle_mk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ms.properties +10 -2
- package/src/sap/fe/core/messagebundle_nl.properties +12 -4
- package/src/sap/fe/core/messagebundle_no.properties +11 -3
- package/src/sap/fe/core/messagebundle_pl.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
- package/src/sap/fe/core/messagebundle_ro.properties +10 -2
- package/src/sap/fe/core/messagebundle_ru.properties +10 -2
- package/src/sap/fe/core/messagebundle_sh.properties +10 -2
- package/src/sap/fe/core/messagebundle_sk.properties +10 -2
- package/src/sap/fe/core/messagebundle_sl.properties +10 -2
- package/src/sap/fe/core/messagebundle_sr.properties +10 -2
- package/src/sap/fe/core/messagebundle_sv.properties +10 -2
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +12 -4
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +11 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
- package/src/sap/fe/core/operationsHelper.js +4 -4
- package/src/sap/fe/core/operationsHelper.ts +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
- package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
|
@@ -652,6 +652,7 @@ export type PropertyInfo = {
|
|
|
652
652
|
settings?: FilterSettings;
|
|
653
653
|
visualFilter?: VisualFilters;
|
|
654
654
|
typeConfig?: TypeConfig;
|
|
655
|
+
filterable?: boolean;
|
|
655
656
|
};
|
|
656
657
|
|
|
657
658
|
// The propertyInfo we share with MDC
|
|
@@ -1201,7 +1202,7 @@ export const getSelectionFields = function (
|
|
|
1201
1202
|
const filterFields: Record<string, FilterField> = oAnnotatedSelectionFieldData.filterFields;
|
|
1202
1203
|
|
|
1203
1204
|
// finally create final list of filter fields by adding the SelectionFields first (order matters)...
|
|
1204
|
-
|
|
1205
|
+
const allFilters = propSelectionFields
|
|
1205
1206
|
|
|
1206
1207
|
// ...and adding remaining filter fields, that are not used in a SelectionVariant (order doesn't matter)
|
|
1207
1208
|
.concat(
|
|
@@ -1211,7 +1212,6 @@ export const getSelectionFields = function (
|
|
|
1211
1212
|
return Object.assign(filterFields[propertyPath], filterFacetMap[propertyPath]);
|
|
1212
1213
|
})
|
|
1213
1214
|
);
|
|
1214
|
-
const sContextPath = converterContext.getContextPath();
|
|
1215
1215
|
|
|
1216
1216
|
const selectionFields = insertCustomManifestElements(allFilters, entityType, converterContext, annotationPath);
|
|
1217
1217
|
|
|
@@ -51,7 +51,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
51
51
|
if (customAggregates.some(function (custAgg) {
|
|
52
52
|
return custAgg.qualifier === sMeasure;
|
|
53
53
|
})) {
|
|
54
|
+
// Custom aggregate match found
|
|
54
55
|
sMeasurePath = sMeasure;
|
|
56
|
+
bAggregatable = true;
|
|
55
57
|
} else if (aTransAggregations && aTransAggregations[0]) {
|
|
56
58
|
aTransAggregations.some(function (oAggregate) {
|
|
57
59
|
if (oAggregate.Name === sMeasure) {
|
|
@@ -59,16 +61,18 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
59
61
|
}
|
|
60
62
|
});
|
|
61
63
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
if (!bAggregatable) {
|
|
65
|
+
const aAggregatablePropsFromContainer = aggregationHelper.getAggregatableProperties();
|
|
66
|
+
if (aAggregatablePropsFromContainer && aAggregatablePropsFromContainer.length) {
|
|
67
|
+
for (const aggregatableProp of aAggregatablePropsFromContainer) {
|
|
68
|
+
var _Property;
|
|
69
|
+
if ((aggregatableProp === null || aggregatableProp === void 0 ? void 0 : (_Property = aggregatableProp.Property) === null || _Property === void 0 ? void 0 : _Property.value) === sMeasurePath) {
|
|
70
|
+
bAggregatable = true;
|
|
71
|
+
}
|
|
69
72
|
}
|
|
70
73
|
}
|
|
71
74
|
}
|
|
75
|
+
const aGroupablePropsFromContainer = aggregationHelper.getGroupableProperties();
|
|
72
76
|
if (aGroupablePropsFromContainer && aGroupablePropsFromContainer.length) {
|
|
73
77
|
for (const groupableProp of aGroupablePropsFromContainer) {
|
|
74
78
|
if ((groupableProp === null || groupableProp === void 0 ? void 0 : groupableProp.value) === sDimension) {
|
|
@@ -308,4 +312,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
|
|
|
308
312
|
_exports._addInParameters = _addInParameters;
|
|
309
313
|
return _exports;
|
|
310
314
|
}, false);
|
|
311
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImNoYXJ0QW5ub3RhdGlvbiIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyOCIsIl9jaGFydEFubm90YXRpb24kJHRhcjExIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTIiLCJzTWVhc3VyZVBhdGgiLCJiR3JvdXBhYmxlIiwiYkFnZ3JlZ2F0YWJsZSIsInNNZWFzdXJlIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhQ3VzdEFnZ01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI1IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyNiIsIl9jaGFydEFubm90YXRpb24kJHRhcjciLCJmaWx0ZXIiLCJjdXN0QWdnIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMiIsIl9jaGFydEFubm90YXRpb24kJHRhcjMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI0IiwicXVhbGlmaWVyIiwidmFsdWUiLCJsZW5ndGgiLCJEeW5hbWljTWVhc3VyZXMiLCJfY29udmVydGVyQ29udGV4dCRnZXQiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI5IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTAiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJOYW1lIiwidG9TdHJpbmciLCJnZXRBZ2dyZWdhdGVkUHJvcGVydHkiLCJnZXRBZ2dyZWdhdGVkUHJvcGVydGllcyIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwic29tZSIsIm9BZ2dyZWdhdGUiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsImFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJhZ2dyZWdhdGFibGVQcm9wIiwiX1Byb3BlcnR5IiwiUHJvcGVydHkiLCJncm91cGFibGVQcm9wIiwiZ2V0VmlzdWFsRmlsdGVycyIsImVudGl0eVR5cGUiLCJzUHJvcGVydHlQYXRoIiwiRmlsdGVyRmllbGRzIiwiX29WaXN1YWxGaWx0ZXIkdmlzdWFsIiwidmlzdWFsRmlsdGVyIiwib1Zpc3VhbEZpbHRlciIsInZhbHVlTGlzdCIsIl9vVmlzdWFsRmlsdGVyJHZpc3VhbDIiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczQiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM1Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsIlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsInZhbHVlT2YiLCJfY29udmVydGVyQ29udGV4dCRnZXQyIiwiX2NvbGxlY3Rpb25QYXRoQ29udmVyIiwiY29sbGVjdGlvblBhdGgiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwiZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJnZXRDb250ZXh0UGF0aCIsIl9hZGRJblBhcmFtZXRlcnMiLCJ2YWx1ZUxpc3RQYXJhbSIsIl9Mb2NhbERhdGFQcm9wZXJ0eSIsImxvY2FsRGF0YVByb3BlcnR5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCJ2YWx1ZUxpc3RQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwicHVzaCIsImZvckVhY2giLCJvSW5QYXJhbWV0ZXIiLCJtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsInZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiRXJyb3IiLCJwdlF1YWxpZmllciIsIlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJzdlF1YWxpZmllciIsIlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJwdkFubm90YXRpb24iLCJnZXRFbnRpdHlUeXBlIiwiVUkiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiwiX2NvbGxlY3Rpb25QYXRoQ29udmVyMiIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwiX3Zpc3VhbGl6YXRpb24kJHRhcmdlIiwidGVybSIsIl9jaGFydEFubm90YXRpb24iLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxMyIsIl9jaGFydEFubm90YXRpb24kJHRhcjE0IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTUiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxNiIsIl9jaGFydEFubm90YXRpb24kJHRhcjE3IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTgiLCJfY2hhcnRBbm5vdGF0aW9uMiIsIl9jaGFydEFubm90YXRpb24yJCR0YSIsIl9jaGFydEFubm90YXRpb24yJCR0YTIiLCJfY2hhcnRBbm5vdGF0aW9uMiQkdGEzIiwiX2NoYXJ0QW5ub3RhdGlvbjIkJHRhNCIsIl9jaGFydEFubm90YXRpb24yJCR0YTUiLCJfY2hhcnRBbm5vdGF0aW9uMiQkdGE2IiwiX2JnZXRWRkFnZ3JlZ2F0aW9uIiwiYkRpbWVuc2lvbkhpZGRlbiIsIkhpZGRlbiIsImJEaW1lbnNpb25IaWRkZW5GaWx0ZXIiLCJIaWRkZW5GaWx0ZXIiLCJfY29sbGVjdGlvblBhdGhDb252ZXIzIiwiX291dFBhcmFtZXRlciIsIl9vdXRQYXJhbWV0ZXIkTG9jYWxEYSIsIl9vdXRQYXJhbWV0ZXIyIiwiX3JlcXVpcmVkUHJvcGVydGllcyIsIl92aXN1YWxGaWx0ZXIkcmVxdWlyZSIsIl9jaGFydEFubm90YXRpb24zIiwiX2NoYXJ0QW5ub3RhdGlvbjMkJHRhIiwiX2NoYXJ0QW5ub3RhdGlvbjMkJHRhMiIsIl9jaGFydEFubm90YXRpb24zJCR0YTMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxOSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVNldE5hbWUiLCJwcmVzZW50YXRpb25Bbm5vdGF0aW9uIiwicmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsImdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgiLCJ2YWx1ZWxpc3RQcm9wZXJ0eSIsImJJc1JhbmdlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIlZBTFVFTElTVCIsImJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24iLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJub3QiLCJyZXF1aXJlZCIsImdldElzUmVxdWlyZWQiLCJzdkFubm90YXRpb24iLCJfY29sbGVjdGlvblBhdGhDb252ZXI0IiwiX3N2QW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlcXVpcmVkUHJvcGVydGllcyIsIl9vRW50aXR5U2V0Q29udmVydGVyQyIsIl9vRW50aXR5U2V0Q29udmVydGVyQzIiLCJfb0VudGl0eVNldENvbnZlcnRlckMzIiwiX29FbnRpdHlTZXRDb252ZXJ0ZXJDNCIsIl9vUmVzdHJpY3RlZFByb3BlcnR5JCIsInNFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblByb3BlcnR5Iiwib0VudGl0eVNldENvbnZlcnRlckNvbnRleHQiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJzdGFydGluZ0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJmaW5kIiwicmVzdHJpY3RlZE5hdlByb3AiLCJfcmVzdHJpY3RlZE5hdlByb3AkTmEiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0eXBlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZW50aXR5U2V0T3JTaW5nbGV0b24iLCJpc0VudGl0eVNldCIsIl9lbnRpdHlTZXRPclNpbmdsZXRvbiIsIl9lbnRpdHlTZXRPclNpbmdsZXRvbjIiLCJyZXF1aXJlZFByb3BlcnR5UGF0aHMiLCJvUmVxdWlyZVByb3BlcnR5IiwiY29uY2F0Iiwic2hvd092ZXJsYXlJbml0aWFsbHkiLCJfc3ZBbm5vdGF0aW9uMiIsIl9zdkFubm90YXRpb24yJFNlbGVjdCIsIl9zdkFubm90YXRpb24zIiwiX3N2QW5ub3RhdGlvbjMkUGFyYW1lIiwic2VsZWN0T3B0aW9ucyIsIlNlbGVjdE9wdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwiX29TZWxlY3RPcHRpb24kUHJvcGVyIiwiUHJvcGVydHlOYW1lIiwicGFyYW1ldGVyT3B0aW9ucyIsIm9QYXJhbWV0ZXJPcHRpb24iLCJfUHJvcGVydHlOYW1lIiwic29ydCIsInNQYXRoIiwiaW5jbHVkZXMiLCJzRGltZW5zaW9uVHlwZSIsInJlbmRlckxpbmVDaGFydCIsIkNoYXJ0VHlwZSIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIk1hbmlmZXN0IiwiX2V4cG9ydHMiLCJpblBhcmFtcyIsInByb3BlcnRpZXMiLCJpc1BhcmFtIiwiZWxlbWVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlzdWFsRmlsdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoLCBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlLCBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0ZWRQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRWYWx1ZUxpc3QsXG5cdFZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCxcblx0VmFsdWVMaXN0UGFyYW1ldGVyT3V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0LCBQYXJhbWV0ZXJUeXBlcywgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0SXNSZXF1aXJlZCwgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWx0ZXJUZW1wbGF0aW5nXCI7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbEZpbHRlcnMgPSB7XG5cdGRpbWVuc2lvblBhdGg/OiBzdHJpbmc7XG5cdG1lYXN1cmVQYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Y2hhcnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0b3V0UGFyYW1ldGVyPzogc3RyaW5nO1xuXHRpblBhcmFtZXRlcnM/OiBvYmplY3RbXTtcblx0dmFsdWVsaXN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXHRyZW5kZXJMaW5lQ2hhcnQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0aXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBtZWFzdXJlcyBhbmQgZGltZW5zaW9ucyBvZiB0aGUgdmlzdWFsIGZpbHRlciBjaGFydCBjYW4gYmUgYWdncmVnYXRlZCBhbmQgZ3JvdXBlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWVhc3VyZSBjYW4gYmUgZ3JvdXBlZCBhbmQgYWdncmVnYXRlZFxuICovXG5jb25zdCBfY2hlY2tWRkFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXJcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRsZXQgc01lYXN1cmVQYXRoLCBiR3JvdXBhYmxlLCBiQWdncmVnYXRhYmxlO1xuXHRsZXQgc01lYXN1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGxldCBhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRUcmFuc0FnZ3JlZ2F0aW9ucygpO1xuXHRsZXQgYUN1c3RBZ2dNZWFzdXJlID0gW10gYXMgQXJyYXk8Q3VzdG9tQWdncmVnYXRlPjtcblx0Ly8gaWYgdGhlIGNoYXJ0IGRlZmluaXRpb24gaGFzIGN1c3RvbSBhZ2dyZWdhdGVzLCB0aGVuIGNvbnNpZGVyIHRoZW0sIGVsc2UgZmFsbCBiYWNrIHRvIHRoZSBtZWFzdXJlcyB3aXRoIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXNcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXMpIHtcblx0XHRhQ3VzdEFnZ01lYXN1cmUgPSBjdXN0b21BZ2dyZWdhdGVzLmZpbHRlcihmdW5jdGlvbiAoY3VzdEFnZzogQ3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXM/LlswXT8udmFsdWU7XG5cdFx0fSk7XG5cdFx0c01lYXN1cmUgPSBhQ3VzdEFnZ01lYXN1cmUubGVuZ3RoID4gMCA/IGFDdXN0QWdnTWVhc3VyZVswXS5xdWFsaWZpZXIgOiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzPy5bMF0/LnZhbHVlO1xuXHR9XG5cdC8vIGNvbnNpZGVyIGR5bmFtaWMgbWVhc3VyZXMgb25seSBpZiB0aGVyZSBhcmUgbm8gbWVhc3VyZXMgd2l0aCBjdXN0b20gYWdncmVnYXRlc1xuXHRpZiAoIWFDdXN0QWdnTWVhc3VyZVswXSAmJiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkR5bmFtaWNNZWFzdXJlcykge1xuXHRcdHNNZWFzdXJlID0gY29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3I8QWdncmVnYXRlZFByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LkR5bmFtaWNNZWFzdXJlcz8uWzBdPy52YWx1ZSlcblx0XHRcdClcblx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0XHRcdC50YXJnZXRPYmplY3Q/Lk5hbWUudG9TdHJpbmcoKTtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydHkoKTtcblx0fSBlbHNlIHtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydGllcygpWzBdIGFzIHVua25vd24gYXMgQWdncmVnYXRlZFByb3BlcnR5W107XG5cdH1cblxuXHRjb25zdCBzRGltZW5zaW9uID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0c01lYXN1cmVQYXRoID0gc01lYXN1cmU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zQWdncmVnYXRpb25zICYmIGFUcmFuc0FnZ3JlZ2F0aW9uc1swXSkge1xuXHRcdGFUcmFuc0FnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uIChvQWdncmVnYXRlKSB7XG5cdFx0XHRpZiAob0FnZ3JlZ2F0ZS5OYW1lID09PSBzTWVhc3VyZSkge1xuXHRcdFx0XHRzTWVhc3VyZVBhdGggPSBvQWdncmVnYXRlPy5BZ2dyZWdhdGFibGVQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRjb25zdCBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpO1xuXHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgYWdncmVnYXRhYmxlUHJvcCBvZiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyKSB7XG5cdFx0XHRpZiAoKGFnZ3JlZ2F0YWJsZVByb3AgYXMgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlKT8uUHJvcGVydHk/LnZhbHVlID09PSBzTWVhc3VyZVBhdGgpIHtcblx0XHRcdFx0YkFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBncm91cGFibGVQcm9wIG9mIGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmIChncm91cGFibGVQcm9wPy52YWx1ZSA9PT0gc0RpbWVuc2lvbikge1xuXHRcdFx0XHRiR3JvdXBhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGJBZ2dyZWdhdGFibGUgJiYgYkdyb3VwYWJsZTtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlclR5cGUgPSB7XG5cdGxvY2FsRGF0YVByb3BlcnR5OiBzdHJpbmc7XG5cdHZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIHZpc3VhbCBmaWx0ZXJzIG9iamVjdCBmb3IgYSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEBwYXJhbSBGaWx0ZXJGaWVsZHMgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMgVGhlIHZpc3VhbCBmaWx0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXN1YWxGaWx0ZXJzKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj5cbik6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQge1xuXHRsZXQgdmlzdWFsRmlsdGVyOiBWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVmlzdWFsRmlsdGVyOiBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IEZpbHRlckZpZWxkc1tzUHJvcGVydHlQYXRoXTtcblx0aWYgKG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0KSB7XG5cdFx0Y29uc3Qgb1ZGUGF0aCA9IG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0O1xuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IG9WRlBhdGguc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllclZMID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Lmxlbmd0aCA+IDEgPyBgVmFsdWVMaXN0IyR7YW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdfWAgOiBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMF07XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpIGFzIFByb3BlcnR5O1xuXHRcdGNvbnN0IHZhbHVlTGlzdCA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5bcXVhbGlmaWVyVkwgYXMga2V5b2YgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb25dIGFzIFZhbHVlTGlzdCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCkgYXMgYm9vbGVhbikgfHwgZmFsc2U7XG5cdFx0aWYgKHZhbHVlTGlzdCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoLnRvU3RyaW5nKCk7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0Pihcblx0XHRcdFx0YC8ke2NvbGxlY3Rpb25QYXRoIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWV9YFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtcyA9IHZhbHVlTGlzdD8uUGFyYW1ldGVycztcblx0XHRcdGxldCBvdXRQYXJhbWV0ZXI6IFZhbHVlTGlzdFBhcmFtZXRlck91dCB8IFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzOiBQYXJhbWV0ZXJUeXBlW10gPSBbXTtcblx0XHRcdGxldCBhUGFyYW1ldGVyczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRcdFx0YVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5rZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzLCBhUGFyYW1ldGVycywgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWVMaXN0UGFyYW1zKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWVMaXN0UGFyYW0gb2YgdmFsdWVMaXN0UGFyYW1zKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSAodmFsdWVMaXN0UGFyYW0gYXMgVmFsdWVMaXN0UGFyYW1ldGVySW4pLkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9IHZhbHVlTGlzdFBhcmFtLlZhbHVlTGlzdFByb3BlcnR5IGFzIHN0cmluZztcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoID09PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3V0UGFyYW1ldGVyID0gdmFsdWVMaXN0UGFyYW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJblwiKSAmJlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCAhPT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJOb3RGaWx0ZXJhYmxlID0gaXNQcm9wZXJ0eUZpbHRlcmFibGUoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LCB2YWx1ZUxpc3RQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRpZiAoIWJOb3RGaWx0ZXJhYmxlKSB7XG5cdFx0XHRcdFx0XHRcdGluUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogbG9jYWxEYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHZhbHVlTGlzdFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGluUGFyYW1ldGVycyAmJiBpblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdGluUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvSW5QYXJhbWV0ZXIpIHtcblx0XHRcdFx0XHRjb25zdCBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LmxvY2FsRGF0YVByb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LnZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcInRydWVcIiAmJiBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGaWx0ZXJSZXN0cmljdGlvbnMgb2YgJHtzUHJvcGVydHlQYXRofSBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudGApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3QgcHZBbm5vdGF0aW9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuVUk/LltgUHJlc2VudGF0aW9uVmFyaWFudCMke3B2UXVhbGlmaWVyfWBdO1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHB2QW5ub3RhdGlvbikge1xuXHRcdFx0XHRjb25zdCBhVmlzdWFsaXphdGlvbnMgPSBwdkFubm90YXRpb24/LlZpc3VhbGl6YXRpb25zO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGAvJHt2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRofWAgfHwgYC8ke2NvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCk/Lm5hbWV9YDtcblx0XHRcdFx0dmlzdWFsRmlsdGVyID0ge307XG5cdFx0XHRcdHZpc3VhbEZpbHRlci5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcztcblx0XHRcdFx0bGV0IGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZpc3VhbGl6YXRpb24gb2YgYVZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24uJHRhcmdldD8udGVybSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24gPSB2aXN1YWxpemF0aW9uIGFzIEFubm90YXRpb25QYXRoPENoYXJ0Pjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgX2JnZXRWRkFnZ3JlZ2F0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gX2NoZWNrVkZBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIV9iZ2V0VkZBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPVxuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uLiR0YXJnZXRcblx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRgJHtjaGFydEFubm90YXRpb24uJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWV9LyRBbm5vdGF0aW9uUGF0aC9gXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdC8vIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSB0byBhdm9pZCByZXBldGl0aXZlIGVudGl0eSB0eXBlIGluIGNhc2Ugb2Ygbm9uLXBhcmFtZXRlcml6ZWQgZW50aXR5IHNldCBlLmcgL1NhbGVzT3JkZXJNYW5hZ2UvY29tLmNfc2FsZXNvcmRlcm1hbmFnZV9zZF9hZ2dyZWdhdGUuU2FsZXNPcmRlck1hbmFnZVxuXHRcdFx0XHRcdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZTtcblx0XHRcdFx0XHRcdGxldCBwcmVzZW50YXRpb25Bbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0YCR7cHZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZX0vYCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSArIFwiL1wiICsgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbkFubm90YXRpb24gPSBcIi9cIiArIGVudGl0eVNldE5hbWUgKyBcIi9cIiArIHJlbGF0aXZlQW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IHB2QW5ub3RhdGlvbiA/IHByZXNlbnRhdGlvbkFubm90YXRpb24gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIub3V0UGFyYW1ldGVyID0gb3V0UGFyYW1ldGVyPy5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzID0gaW5QYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnZhbHVlbGlzdFByb3BlcnR5ID0gb3V0UGFyYW1ldGVyPy5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0XHRjb25zdCBiSXNSYW5nZSA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIl1cblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmIChjb21waWxlRXhwcmVzc2lvbihiSXNSYW5nZSkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24gPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlVmFsdWVcIl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIubXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkID0gY29tcGlsZUV4cHJlc3Npb24obm90KGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24pKTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZXF1aXJlZCA9IGdldElzUmVxdWlyZWQoY29udmVydGVyQ29udGV4dCwgc1Byb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0XHRsZXQgc3ZBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0aWYgKHN2UXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb248U2VsZWN0aW9uVmFyaWFudD4oXG5cdFx0XHRcdFx0XHRcdFx0YEBVSS5TZWxlY3Rpb25WYXJpYW50IyR7c3ZRdWFsaWZpZXJ9YFxuXHRcdFx0XHRcdFx0XHQpPy5hbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGggPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0YCR7c3ZBbm5vdGF0aW9uPy5mdWxseVF1YWxpZmllZE5hbWV9L2AsXG5cdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVyRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpICsgXCIvXCIgKyByZWxhdGl2ZVNlbGVjdGlvblZhcmlhbnRQYXRoO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gXCIvXCIgKyBlbnRpdHlTZXROYW1lICsgXCIvXCIgKyByZWxhdGl2ZVNlbGVjdGlvblZhcmlhbnRQYXRoO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHN2QW5ub3RhdGlvbiA/IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydGllczogUHJvcGVydHlQYXRoW10gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUHJvcGVydHkgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGAvJHtzRW50aXR5U2V0fWApO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPVxuXHRcdFx0XHRcdFx0XHRcdG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdD8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXN0cmljdGVkUHJvcGVydHkgPSBhUmVzdHJpY3RlZFByb3BlcnRpZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0KHJlc3RyaWN0ZWROYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlID09PSBzTmF2aWdhdGlvblByb3BlcnR5O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gb1Jlc3RyaWN0ZWRQcm9wZXJ0eT8uRmlsdGVyUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgPz8gW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXRPclNpbmdsZXRvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0VudGl0eVNldChlbnRpdHlTZXRPclNpbmdsZXRvbikpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0T3JTaW5nbGV0b24uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydHlQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAob1JlcXVpcmVQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocy5wdXNoKG9SZXF1aXJlUHJvcGVydHkudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5jb25jYXQoYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIGNvbnRleHQgUGF0aCBmb3IgYm90aCB2aXN1YWwgZmlsdGVyIGFuZCBmaWx0ZXIgYmFyIGFyZSBzYW1lLCBjb25zaWRlciByZXF1aXJlZCBQcm9wZXJ0aWVzIGFzIHdlbGwgYWxvbmcgd2l0aCBpbiBQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzLCByZXF1aXJlZFByb3BlcnRpZXMsIGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uU2VsZWN0T3B0aW9ucz8ubWFwKChvU2VsZWN0T3B0aW9uKSA9PiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZT8udmFsdWUpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyT3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uUGFyYW1ldGVycz8ubWFwKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvUGFyYW1ldGVyT3B0aW9uKSA9PiAob1BhcmFtZXRlck9wdGlvbiBhcyBQYXJhbWV0ZXJUeXBlcykuUHJvcGVydHlOYW1lPy52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KHBhcmFtZXRlck9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5zb21lKGZ1bmN0aW9uIChzUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIXNlbGVjdE9wdGlvbnMuaW5jbHVkZXMoc1BhdGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9XG5cdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8XG5cdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHxcblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiIHx8XG5cdFx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0Py5DaGFydFR5cGUgIT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLkNIQVJUKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlBSRVNFTlRBVElPTlZBUklBTlQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHR9XG5cdHJldHVybiB2aXN1YWxGaWx0ZXI7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGFkZCBpbnBhcmFtZXRlcnMgZnJvbSByZXF1aXJlZCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIGluUGFyYW1zIEFuIGFycmF5IGNvbnRhaW5pbmcgZXhpc3RpbmcgaW5wYXJhbXNcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHJlcXVpcmVkcHJvcGVydGllcyBvciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gaXNQYXJhbSBBIGJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcGFzc2VkIHByb3BlcnRpZXMgYXJlIHBhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9hZGRJblBhcmFtZXRlcnMoaW5QYXJhbXM6IFBhcmFtZXRlclR5cGVbXSwgcHJvcGVydGllczogUHJvcGVydHlQYXRoW10gfCBzdHJpbmdbXSwgaXNQYXJhbTogYm9vbGVhbik6IHZvaWQge1xuXHRwcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGlzUGFyYW0gPyBlbGVtZW50IDogKGVsZW1lbnQgYXMgUHJvcGVydHlQYXRoKS52YWx1ZTtcblx0XHRpblBhcmFtcy5wdXNoKHtcblx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBwcm9wZXJ0eSBhcyBzdHJpbmcsXG5cdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogcHJvcGVydHkgYXMgc3RyaW5nXG5cdFx0fSk7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxtQkFBbUIsR0FBRyxTQUFBQSxDQUMzQkMsZ0JBQXlELEVBQ3pEQyxlQUFzQyxFQUN0Q0MsaUJBQW9DLEVBQ2Q7SUFBQSxJ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
|
|
315
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hlY2tWRkFnZ3JlZ2F0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImNoYXJ0QW5ub3RhdGlvbiIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyOCIsIl9jaGFydEFubm90YXRpb24kJHRhcjExIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTIiLCJzTWVhc3VyZVBhdGgiLCJiR3JvdXBhYmxlIiwiYkFnZ3JlZ2F0YWJsZSIsInNNZWFzdXJlIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhQ3VzdEFnZ01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI1IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyNiIsIl9jaGFydEFubm90YXRpb24kJHRhcjciLCJmaWx0ZXIiLCJjdXN0QWdnIiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMiIsIl9jaGFydEFubm90YXRpb24kJHRhcjMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI0IiwicXVhbGlmaWVyIiwidmFsdWUiLCJsZW5ndGgiLCJEeW5hbWljTWVhc3VyZXMiLCJfY29udmVydGVyQ29udGV4dCRnZXQiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXI5IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTAiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJOYW1lIiwidG9TdHJpbmciLCJnZXRBZ2dyZWdhdGVkUHJvcGVydHkiLCJnZXRBZ2dyZWdhdGVkUHJvcGVydGllcyIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwic29tZSIsIm9BZ2dyZWdhdGUiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsImFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRhYmxlUHJvcCIsIl9Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJncm91cGFibGVQcm9wIiwiZ2V0VmlzdWFsRmlsdGVycyIsImVudGl0eVR5cGUiLCJzUHJvcGVydHlQYXRoIiwiRmlsdGVyRmllbGRzIiwiX29WaXN1YWxGaWx0ZXIkdmlzdWFsIiwidmlzdWFsRmlsdGVyIiwib1Zpc3VhbEZpbHRlciIsInZhbHVlTGlzdCIsIl9vVmlzdWFsRmlsdGVyJHZpc3VhbDIiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczQiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM1Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsIlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsInZhbHVlT2YiLCJfY29udmVydGVyQ29udGV4dCRnZXQyIiwiX2NvbGxlY3Rpb25QYXRoQ29udmVyIiwiY29sbGVjdGlvblBhdGgiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwiZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJnZXRDb250ZXh0UGF0aCIsIl9hZGRJblBhcmFtZXRlcnMiLCJ2YWx1ZUxpc3RQYXJhbSIsIl9Mb2NhbERhdGFQcm9wZXJ0eSIsImxvY2FsRGF0YVByb3BlcnR5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCJ2YWx1ZUxpc3RQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwicHVzaCIsImZvckVhY2giLCJvSW5QYXJhbWV0ZXIiLCJtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsInZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiRXJyb3IiLCJwdlF1YWxpZmllciIsIlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJzdlF1YWxpZmllciIsIlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJwdkFubm90YXRpb24iLCJnZXRFbnRpdHlUeXBlIiwiVUkiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiwiX2NvbGxlY3Rpb25QYXRoQ29udmVyMiIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwiX3Zpc3VhbGl6YXRpb24kJHRhcmdlIiwidGVybSIsIl9jaGFydEFubm90YXRpb24iLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxMyIsIl9jaGFydEFubm90YXRpb24kJHRhcjE0IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTUiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxNiIsIl9jaGFydEFubm90YXRpb24kJHRhcjE3IiwiX2NoYXJ0QW5ub3RhdGlvbiQkdGFyMTgiLCJfY2hhcnRBbm5vdGF0aW9uMiIsIl9jaGFydEFubm90YXRpb24yJCR0YSIsIl9jaGFydEFubm90YXRpb24yJCR0YTIiLCJfY2hhcnRBbm5vdGF0aW9uMiQkdGEzIiwiX2NoYXJ0QW5ub3RhdGlvbjIkJHRhNCIsIl9jaGFydEFubm90YXRpb24yJCR0YTUiLCJfY2hhcnRBbm5vdGF0aW9uMiQkdGE2IiwiX2JnZXRWRkFnZ3JlZ2F0aW9uIiwiYkRpbWVuc2lvbkhpZGRlbiIsIkhpZGRlbiIsImJEaW1lbnNpb25IaWRkZW5GaWx0ZXIiLCJIaWRkZW5GaWx0ZXIiLCJfY29sbGVjdGlvblBhdGhDb252ZXIzIiwiX291dFBhcmFtZXRlciIsIl9vdXRQYXJhbWV0ZXIkTG9jYWxEYSIsIl9vdXRQYXJhbWV0ZXIyIiwiX3JlcXVpcmVkUHJvcGVydGllcyIsIl92aXN1YWxGaWx0ZXIkcmVxdWlyZSIsIl9jaGFydEFubm90YXRpb24zIiwiX2NoYXJ0QW5ub3RhdGlvbjMkJHRhIiwiX2NoYXJ0QW5ub3RhdGlvbjMkJHRhMiIsIl9jaGFydEFubm90YXRpb24zJCR0YTMiLCJfY2hhcnRBbm5vdGF0aW9uJCR0YXIxOSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVNldE5hbWUiLCJwcmVzZW50YXRpb25Bbm5vdGF0aW9uIiwicmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsImdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgiLCJ2YWx1ZWxpc3RQcm9wZXJ0eSIsImJJc1JhbmdlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIlZBTFVFTElTVCIsImJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24iLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJub3QiLCJyZXF1aXJlZCIsImdldElzUmVxdWlyZWQiLCJzdkFubm90YXRpb24iLCJfY29sbGVjdGlvblBhdGhDb252ZXI0IiwiX3N2QW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlcXVpcmVkUHJvcGVydGllcyIsIl9vRW50aXR5U2V0Q29udmVydGVyQyIsIl9vRW50aXR5U2V0Q29udmVydGVyQzIiLCJfb0VudGl0eVNldENvbnZlcnRlckMzIiwiX29FbnRpdHlTZXRDb252ZXJ0ZXJDNCIsIl9vUmVzdHJpY3RlZFByb3BlcnR5JCIsInNFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblByb3BlcnR5Iiwib0VudGl0eVNldENvbnZlcnRlckNvbnRleHQiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJzdGFydGluZ0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJmaW5kIiwicmVzdHJpY3RlZE5hdlByb3AiLCJfcmVzdHJpY3RlZE5hdlByb3AkTmEiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0eXBlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiZW50aXR5U2V0T3JTaW5nbGV0b24iLCJpc0VudGl0eVNldCIsIl9lbnRpdHlTZXRPclNpbmdsZXRvbiIsIl9lbnRpdHlTZXRPclNpbmdsZXRvbjIiLCJyZXF1aXJlZFByb3BlcnR5UGF0aHMiLCJvUmVxdWlyZVByb3BlcnR5IiwiY29uY2F0Iiwic2hvd092ZXJsYXlJbml0aWFsbHkiLCJfc3ZBbm5vdGF0aW9uMiIsIl9zdkFubm90YXRpb24yJFNlbGVjdCIsIl9zdkFubm90YXRpb24zIiwiX3N2QW5ub3RhdGlvbjMkUGFyYW1lIiwic2VsZWN0T3B0aW9ucyIsIlNlbGVjdE9wdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwiX29TZWxlY3RPcHRpb24kUHJvcGVyIiwiUHJvcGVydHlOYW1lIiwicGFyYW1ldGVyT3B0aW9ucyIsIm9QYXJhbWV0ZXJPcHRpb24iLCJfUHJvcGVydHlOYW1lIiwic29ydCIsInNQYXRoIiwiaW5jbHVkZXMiLCJzRGltZW5zaW9uVHlwZSIsInJlbmRlckxpbmVDaGFydCIsIkNoYXJ0VHlwZSIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIk1hbmlmZXN0IiwiX2V4cG9ydHMiLCJpblBhcmFtcyIsInByb3BlcnRpZXMiLCJpc1BhcmFtIiwiZWxlbWVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlzdWFsRmlsdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoLCBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlLCBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0ZWRQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRWYWx1ZUxpc3QsXG5cdFZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCxcblx0VmFsdWVMaXN0UGFyYW1ldGVyT3V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0LCBQYXJhbWV0ZXJUeXBlcywgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0SXNSZXF1aXJlZCwgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWx0ZXJUZW1wbGF0aW5nXCI7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbEZpbHRlcnMgPSB7XG5cdGRpbWVuc2lvblBhdGg/OiBzdHJpbmc7XG5cdG1lYXN1cmVQYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Y2hhcnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0b3V0UGFyYW1ldGVyPzogc3RyaW5nO1xuXHRpblBhcmFtZXRlcnM/OiBvYmplY3RbXTtcblx0dmFsdWVsaXN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXHRyZW5kZXJMaW5lQ2hhcnQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0aXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBtZWFzdXJlcyBhbmQgZGltZW5zaW9ucyBvZiB0aGUgdmlzdWFsIGZpbHRlciBjaGFydCBjYW4gYmUgYWdncmVnYXRlZCBhbmQgZ3JvdXBlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWVhc3VyZSBjYW4gYmUgZ3JvdXBlZCBhbmQgYWdncmVnYXRlZFxuICovXG5jb25zdCBfY2hlY2tWRkFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNoYXJ0QW5ub3RhdGlvbjogQW5ub3RhdGlvblBhdGg8Q2hhcnQ+LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXJcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRsZXQgc01lYXN1cmVQYXRoLCBiR3JvdXBhYmxlLCBiQWdncmVnYXRhYmxlO1xuXHRsZXQgc01lYXN1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGxldCBhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRUcmFuc0FnZ3JlZ2F0aW9ucygpO1xuXHRsZXQgYUN1c3RBZ2dNZWFzdXJlID0gW10gYXMgQXJyYXk8Q3VzdG9tQWdncmVnYXRlPjtcblx0Ly8gaWYgdGhlIGNoYXJ0IGRlZmluaXRpb24gaGFzIGN1c3RvbSBhZ2dyZWdhdGVzLCB0aGVuIGNvbnNpZGVyIHRoZW0sIGVsc2UgZmFsbCBiYWNrIHRvIHRoZSBtZWFzdXJlcyB3aXRoIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXNcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXMpIHtcblx0XHRhQ3VzdEFnZ01lYXN1cmUgPSBjdXN0b21BZ2dyZWdhdGVzLmZpbHRlcihmdW5jdGlvbiAoY3VzdEFnZzogQ3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXM/LlswXT8udmFsdWU7XG5cdFx0fSk7XG5cdFx0c01lYXN1cmUgPSBhQ3VzdEFnZ01lYXN1cmUubGVuZ3RoID4gMCA/IGFDdXN0QWdnTWVhc3VyZVswXS5xdWFsaWZpZXIgOiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzPy5bMF0/LnZhbHVlO1xuXHR9XG5cdC8vIGNvbnNpZGVyIGR5bmFtaWMgbWVhc3VyZXMgb25seSBpZiB0aGVyZSBhcmUgbm8gbWVhc3VyZXMgd2l0aCBjdXN0b20gYWdncmVnYXRlc1xuXHRpZiAoIWFDdXN0QWdnTWVhc3VyZVswXSAmJiBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkR5bmFtaWNNZWFzdXJlcykge1xuXHRcdHNNZWFzdXJlID0gY29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3I8QWdncmVnYXRlZFByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LkR5bmFtaWNNZWFzdXJlcz8uWzBdPy52YWx1ZSlcblx0XHRcdClcblx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0XHRcdC50YXJnZXRPYmplY3Q/Lk5hbWUudG9TdHJpbmcoKTtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydHkoKTtcblx0fSBlbHNlIHtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydGllcygpWzBdIGFzIHVua25vd24gYXMgQWdncmVnYXRlZFByb3BlcnR5W107XG5cdH1cblxuXHRjb25zdCBzRGltZW5zaW9uID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0Ly8gQ3VzdG9tIGFnZ3JlZ2F0ZSBtYXRjaCBmb3VuZFxuXHRcdHNNZWFzdXJlUGF0aCA9IHNNZWFzdXJlO1xuXHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucyAmJiBhVHJhbnNBZ2dyZWdhdGlvbnNbMF0pIHtcblx0XHRhVHJhbnNBZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbiAob0FnZ3JlZ2F0ZSkge1xuXHRcdFx0aWYgKG9BZ2dyZWdhdGUuTmFtZSA9PT0gc01lYXN1cmUpIHtcblx0XHRcdFx0c01lYXN1cmVQYXRoID0gb0FnZ3JlZ2F0ZT8uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKCFiQWdncmVnYXRhYmxlKSB7XG5cdFx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0XHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdFx0aWYgKChhZ2dyZWdhdGFibGVQcm9wIGFzIEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSk/LlByb3BlcnR5Py52YWx1ZSA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdFx0YkFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEdyb3VwYWJsZVByb3BlcnRpZXMoKTtcblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyYW1ldGVyVHlwZSA9IHtcblx0bG9jYWxEYXRhUHJvcGVydHk6IHN0cmluZztcblx0dmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZztcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIGdldCB0aGUgdmlzdWFsIGZpbHRlcnMgb2JqZWN0IGZvciBhIHByb3BlcnR5LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHNQcm9wZXJ0eVBhdGggVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHBhcmFtIEZpbHRlckZpZWxkcyBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcmV0dXJucyBUaGUgdmlzdWFsIGZpbHRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc3VhbEZpbHRlcnMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c1Byb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPlxuKTogVmlzdWFsRmlsdGVycyB8IHVuZGVmaW5lZCB7XG5cdGxldCB2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WaXN1YWxGaWx0ZXI6IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uID0gRmlsdGVyRmllbGRzW3NQcm9wZXJ0eVBhdGhdO1xuXHRpZiAob1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyPy52YWx1ZUxpc3QpIHtcblx0XHRjb25zdCBvVkZQYXRoID0gb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyPy52YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgYW5ub3RhdGlvblF1YWxpZmllclNwbGl0ID0gb1ZGUGF0aC5zcGxpdChcIiNcIik7XG5cdFx0Y29uc3QgcXVhbGlmaWVyVkwgPSBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQubGVuZ3RoID4gMSA/IGBWYWx1ZUxpc3QjJHthbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV19YCA6IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFswXTtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCkgYXMgUHJvcGVydHk7XG5cdFx0Y29uc3QgdmFsdWVMaXN0ID0gcHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LltxdWFsaWZpZXJWTCBhcyBrZXlvZiBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl0gYXMgVmFsdWVMaXN0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKSBhcyBib29sZWFuKSB8fCBmYWxzZTtcblx0XHRpZiAodmFsdWVMaXN0KSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aCA9IHZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGgudG9TdHJpbmcoKTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxFbnRpdHlTZXQ+KFxuXHRcdFx0XHRgLyR7Y29sbGVjdGlvblBhdGggfHwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZX1gXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0UGFyYW1zID0gdmFsdWVMaXN0Py5QYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IG91dFBhcmFtZXRlcjogVmFsdWVMaXN0UGFyYW1ldGVyT3V0IHwgVmFsdWVMaXN0UGFyYW1ldGVySW5PdXQgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBpblBhcmFtZXRlcnM6IFBhcmFtZXRlclR5cGVbXSA9IFtdO1xuXHRcdFx0bGV0IGFQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRQYXJhbWV0ZXJFbnRpdHlUeXBlKCk7XG5cdFx0XHRhUGFyYW1ldGVycyA9IHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmtleXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0X2FkZEluUGFyYW1ldGVycyhpblBhcmFtZXRlcnMsIGFQYXJhbWV0ZXJzLCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZUxpc3RQYXJhbSBvZiB2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbERhdGFQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBWYWx1ZUxpc3RQYXJhbWV0ZXJJbikuTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW0uVmFsdWVMaXN0UHJvcGVydHkgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvdXRQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RQYXJhbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoICE9PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYk5vdEZpbHRlcmFibGUgPSBpc1Byb3BlcnR5RmlsdGVyYWJsZShjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsIHZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdGlmICghYk5vdEZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRcdFx0aW5QYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBsb2NhbERhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogdmFsdWVMaXN0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5QYXJhbWV0ZXJzICYmIGluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9JblBhcmFtZXRlcikge1xuXHRcdFx0XHRcdGNvbnN0IG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8ubG9jYWxEYXRhUHJvcGVydHkpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8udmFsdWVMaXN0UHJvcGVydHkpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAodmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwidHJ1ZVwiICYmIG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZpbHRlclJlc3RyaWN0aW9ucyBvZiAke3NQcm9wZXJ0eVBhdGh9IGluIE1haW5FbnRpdHlTZXQgYW5kIFZhbHVlTGlzdEVudGl0eVNldCBhcmUgZGlmZmVyZW50YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHB2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3Qgc3ZRdWFsaWZpZXIgPSB2YWx1ZUxpc3Q/LlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXI7XG5cdFx0XHRjb25zdCBwdkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5VST8uW2BQcmVzZW50YXRpb25WYXJpYW50IyR7cHZRdWFsaWZpZXJ9YF07XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHZBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFWaXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYC8ke3ZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGh9YCB8fCBgLyR7Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKT8ubmFtZX1gO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIgPSB7fTtcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0XHRcdHZpc3VhbEZpbHRlci5pc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzO1xuXHRcdFx0XHRsZXQgY2hhcnRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uUGF0aDxDaGFydD4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBhVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi4kdGFyZ2V0Py50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHZpc3VhbGl6YXRpb24gYXMgQW5ub3RhdGlvblBhdGg8Q2hhcnQ+O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjaGFydEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRjb25zdCBfYmdldFZGQWdncmVnYXRpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBfY2hlY2tWRkFnZ3JlZ2F0aW9uKFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmICghX2JnZXRWRkFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW4gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0Y29uc3QgYkRpbWVuc2lvbkhpZGRlbkZpbHRlciA9XG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0aWYgKGJEaW1lbnNpb25IaWRkZW4gPT09IHRydWUgfHwgYkRpbWVuc2lvbkhpZGRlbkZpbHRlciA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYVZpc3VhbGl6YXRpb25zICYmIGFWaXN1YWxpemF0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5jaGFydEFubm90YXRpb24gPSBjaGFydEFubm90YXRpb24uJHRhcmdldFxuXHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0XHRcdGAke2NoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZX0vJEFubm90YXRpb25QYXRoL2Bcblx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0Ly8gVGhpcyBuZWVkcyB0byBiZSBkb25lIHRvIGF2b2lkIHJlcGV0aXRpdmUgZW50aXR5IHR5cGUgaW4gY2FzZSBvZiBub24tcGFyYW1ldGVyaXplZCBlbnRpdHkgc2V0IGUuZyAvU2FsZXNPcmRlck1hbmFnZS9jb20uY19zYWxlc29yZGVybWFuYWdlX3NkX2FnZ3JlZ2F0ZS5TYWxlc09yZGVyTWFuYWdlXG5cdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXROYW1lID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHRcdFx0XHRcdFx0bGV0IHByZXNlbnRhdGlvbkFubm90YXRpb247XG5cdFx0XHRcdFx0XHRjb25zdCByZWxhdGl2ZUFubm90YXRpb25QYXRoID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRgJHtwdkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lfS9gLFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpICsgXCIvXCIgKyByZWxhdGl2ZUFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IFwiL1wiICsgZW50aXR5U2V0TmFtZSArIFwiL1wiICsgcmVsYXRpdmVBbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5wcmVzZW50YXRpb25Bbm5vdGF0aW9uID0gcHZBbm5vdGF0aW9uID8gcHJlc2VudGF0aW9uQW5ub3RhdGlvbiA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5vdXRQYXJhbWV0ZXIgPSBvdXRQYXJhbWV0ZXI/LkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnMgPSBpblBhcmFtZXRlcnM7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIudmFsdWVsaXN0UHJvcGVydHkgPSBvdXRQYXJhbWV0ZXI/LlZhbHVlTGlzdFByb3BlcnR5IGFzIHN0cmluZztcblx0XHRcdFx0XHRcdGNvbnN0IGJJc1JhbmdlID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiXVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGNvbXBpbGVFeHByZXNzaW9uKGJJc1JhbmdlKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQgPSBjb21waWxlRXhwcmVzc2lvbihub3QoYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbikpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkID0gZ2V0SXNSZXF1aXJlZChjb252ZXJ0ZXJDb250ZXh0LCBzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdGxldCBzdkFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRpZiAoc3ZRdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxTZWxlY3Rpb25WYXJpYW50Pihcblx0XHRcdFx0XHRcdFx0XHRgQFVJLlNlbGVjdGlvblZhcmlhbnQjJHtzdlF1YWxpZmllcn1gXG5cdFx0XHRcdFx0XHRcdCk/LmFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdGxldCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVTZWxlY3Rpb25WYXJpYW50UGF0aCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChcblx0XHRcdFx0XHRcdFx0XHRgJHtzdkFubm90YXRpb24/LmZ1bGx5UXVhbGlmaWVkTmFtZX0vYCxcblx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgKyBcIi9cIiArIHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGg7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSBcIi9cIiArIGVudGl0eVNldE5hbWUgKyBcIi9cIiArIHJlbGF0aXZlU2VsZWN0aW9uVmFyaWFudFBhdGg7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gc3ZBbm5vdGF0aW9uID8gc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgcmVxdWlyZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVBhdGhbXSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVswXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc05hdmlnYXRpb25Qcm9wZXJ0eSA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoYC8ke3NFbnRpdHlTZXR9YCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9XG5cdFx0XHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHRcdFx0Py5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc3RyaWN0ZWRQcm9wZXJ0eSA9IGFSZXN0cmljdGVkUHJvcGVydGllcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHQocmVzdHJpY3RlZE5hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHk/LnR5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN0cmljdGVkTmF2UHJvcC5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPSBvUmVzdHJpY3RlZFByb3BlcnR5Py5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVudGl0eVNldE9yU2luZ2xldG9uID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdFx0XHRcdFx0aWYgKGlzRW50aXR5U2V0KGVudGl0eVNldE9yU2luZ2xldG9uKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXRPclNpbmdsZXRvbi5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgcmVxdWlyZWRQcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvUmVxdWlyZVByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnB1c2gob1JlcXVpcmVQcm9wZXJ0eS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLmNvbmNhdChhUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgY29udGV4dCBQYXRoIGZvciBib3RoIHZpc3VhbCBmaWx0ZXIgYW5kIGZpbHRlciBiYXIgYXJlIHNhbWUsIGNvbnNpZGVyIHJlcXVpcmVkIFByb3BlcnRpZXMgYXMgd2VsbCBhbG9uZyB3aXRoIGluIFBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdFx0X2FkZEluUGFyYW1ldGVycyhpblBhcmFtZXRlcnMsIHJlcXVpcmVkUHJvcGVydGllcywgZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHZpc3VhbEZpbHRlci5yZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnMgfHwgIXZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBzZWxlY3RPcHRpb25zID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uPy5TZWxlY3RPcHRpb25zPy5tYXAoKG9TZWxlY3RPcHRpb24pID0+IG9TZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJPcHRpb25zID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uPy5QYXJhbWV0ZXJzPy5tYXAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG9QYXJhbWV0ZXJPcHRpb24pID0+IChvUGFyYW1ldGVyT3B0aW9uIGFzIFBhcmFtZXRlclR5cGVzKS5Qcm9wZXJ0eU5hbWU/LnZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQocGFyYW1ldGVyT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvbWUoZnVuY3Rpb24gKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAhc2VsZWN0T3B0aW9ucy5pbmNsdWRlcyhzUGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0RpbWVuc2lvblR5cGUgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVuZGVyTGluZUNoYXJ0ID1cblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIgfHxcblx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fFxuXHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIgfHxcblx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLiR0YXJnZXQ/LkNoYXJ0VHlwZSAhPT0gXCJVSS5DaGFydFR5cGUvTGluZVwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuQ0hBUlQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuUFJFU0VOVEFUSU9OVkFSSUFOVCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdH1cblx0cmV0dXJuIHZpc3VhbEZpbHRlcjtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gYWRkIGlucGFyYW1ldGVycyBmcm9tIHJlcXVpcmVkIHByb3BlcnRpZXMgYW5kIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0gaW5QYXJhbXMgQW4gYXJyYXkgY29udGFpbmluZyBleGlzdGluZyBpbnBhcmFtc1xuICogQHBhcmFtIHByb3BlcnRpZXMgQW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgcmVxdWlyZWRwcm9wZXJ0aWVzIG9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBpc1BhcmFtIEEgYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciBwYXNzZWQgcHJvcGVydGllcyBhcmUgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gX2FkZEluUGFyYW1ldGVycyhpblBhcmFtczogUGFyYW1ldGVyVHlwZVtdLCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eVBhdGhbXSB8IHN0cmluZ1tdLCBpc1BhcmFtOiBib29sZWFuKTogdm9pZCB7XG5cdHByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gaXNQYXJhbSA/IGVsZW1lbnQgOiAoZWxlbWVudCBhcyBQcm9wZXJ0eVBhdGgpLnZhbHVlO1xuXHRcdGluUGFyYW1zLnB1c2goe1xuXHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IHByb3BlcnR5IGFzIHN0cmluZyxcblx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiBwcm9wZXJ0eSBhcyBzdHJpbmdcblx0XHR9KTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJDQTtB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
|
|
@@ -85,7 +85,9 @@ const _checkVFAggregation = function (
|
|
|
85
85
|
return custAgg.qualifier === sMeasure;
|
|
86
86
|
})
|
|
87
87
|
) {
|
|
88
|
+
// Custom aggregate match found
|
|
88
89
|
sMeasurePath = sMeasure;
|
|
90
|
+
bAggregatable = true;
|
|
89
91
|
} else if (aTransAggregations && aTransAggregations[0]) {
|
|
90
92
|
aTransAggregations.some(function (oAggregate) {
|
|
91
93
|
if (oAggregate.Name === sMeasure) {
|
|
@@ -93,15 +95,17 @@ const _checkVFAggregation = function (
|
|
|
93
95
|
}
|
|
94
96
|
});
|
|
95
97
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
if (!bAggregatable) {
|
|
99
|
+
const aAggregatablePropsFromContainer = aggregationHelper.getAggregatableProperties();
|
|
100
|
+
if (aAggregatablePropsFromContainer && aAggregatablePropsFromContainer.length) {
|
|
101
|
+
for (const aggregatableProp of aAggregatablePropsFromContainer) {
|
|
102
|
+
if ((aggregatableProp as AggregatablePropertyType)?.Property?.value === sMeasurePath) {
|
|
103
|
+
bAggregatable = true;
|
|
104
|
+
}
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
107
|
}
|
|
108
|
+
const aGroupablePropsFromContainer = aggregationHelper.getGroupableProperties();
|
|
105
109
|
if (aGroupablePropsFromContainer && aGroupablePropsFromContainer.length) {
|
|
106
110
|
for (const groupableProp of aGroupablePropsFromContainer) {
|
|
107
111
|
if (groupableProp?.value === sDimension) {
|