@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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassSupport", "sap/m/Popover", "sap/ui/core/Lib", "sap/ui/core/Locale", "sap/ui/core/format/DateFormat", "sap/ui/core/format/NumberFormat", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/ControllerExtension", "sap/ui/model/Filter", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel"], function (Log, Localization, ClassSupport, Popover, Library, Locale, DateFormat, NumberFormat, MessageType, ControllerExtension, Filter, Sorter, JSONModel) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassSupport", "sap/fe/core/formatters/ValueFormatter", "sap/m/Popover", "sap/ui/core/Lib", "sap/ui/core/Locale", "sap/ui/core/format/DateFormat", "sap/ui/core/format/NumberFormat", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/ControllerExtension", "sap/ui/model/Filter", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel"], function (Log, Localization, ClassSupport, valueFormatters, Popover, Library, Locale, DateFormat, NumberFormat, MessageType, ControllerExtension, Filter, Sorter, JSONModel) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _class, _class2;
|
|
@@ -226,7 +226,9 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
|
|
|
226
226
|
return resBundle.getText("C_KPICARD_ITEMSLIST", [res, items[items.length - 1].label]);
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
|
-
|
|
229
|
+
|
|
230
|
+
// If the chart has a title, use it. Otherwise, create a title from the dimensions and measures
|
|
231
|
+
return kpiDef.chart.title ?? resBundle.getText("C_KPICARD_CHARTTITLE", [formatList(kpiDef.chart.measures), formatList(kpiDef.chart.dimensions)]);
|
|
230
232
|
}
|
|
231
233
|
function updateChartLabelSettings(chartDefinition, oChartProperties) {
|
|
232
234
|
switch (chartDefinition.chartType) {
|
|
@@ -655,14 +657,14 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
|
|
|
655
657
|
const kpiValue = NumberFormat.getFloatInstance({
|
|
656
658
|
style: isPercentage ? undefined : "short",
|
|
657
659
|
minFractionDigits: 0,
|
|
658
|
-
maxFractionDigits: 1,
|
|
660
|
+
maxFractionDigits: kpiDefinition.datapoint.numberOfFractionalDigits ?? 1,
|
|
659
661
|
showScale: !isPercentage
|
|
660
662
|
}, currentLocale).format(rawValue);
|
|
661
663
|
oKPIModel.setProperty(`/${kpiDefinition.id}/manifest/sap.card/data/json/mainValue`, kpiValue);
|
|
662
664
|
|
|
663
665
|
// Value without a scale
|
|
664
666
|
const kpiValueUnscaled = NumberFormat.getFloatInstance({
|
|
665
|
-
maxFractionDigits: 2,
|
|
667
|
+
maxFractionDigits: kpiDefinition.datapoint.numberOfFractionalDigits ?? 2,
|
|
666
668
|
showScale: false,
|
|
667
669
|
groupingEnabled: true
|
|
668
670
|
}, currentLocale).format(rawValue);
|
|
@@ -672,7 +674,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
|
|
|
672
674
|
const kpiValueNoScale = NumberFormat.getFloatInstance({
|
|
673
675
|
style: isPercentage ? undefined : "short",
|
|
674
676
|
minFractionDigits: 0,
|
|
675
|
-
maxFractionDigits: 1,
|
|
677
|
+
maxFractionDigits: kpiDefinition.datapoint.numberOfFractionalDigits ?? 1,
|
|
676
678
|
showScale: false
|
|
677
679
|
}, currentLocale).format(rawValue);
|
|
678
680
|
oKPIModel.setProperty(`/${kpiDefinition.id}/manifest/sap.card/data/json/mainValueNoScale`, kpiValueNoScale);
|
|
@@ -766,7 +768,8 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
|
|
|
766
768
|
const targetValue = NumberFormat.getFloatInstance({
|
|
767
769
|
style: "short",
|
|
768
770
|
minFractionDigits: 0,
|
|
769
|
-
maxFractionDigits: 1,
|
|
771
|
+
maxFractionDigits: kpiDefinition.datapoint.numberOfFractionalDigits ?? 1,
|
|
772
|
+
// Use the same precision as the main value
|
|
770
773
|
showScale: false
|
|
771
774
|
}, currentLocale).format(targetRawValue);
|
|
772
775
|
const targetScale = NumberFormat.getFloatInstance({
|
|
@@ -891,6 +894,10 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
|
|
|
891
894
|
const oAggregate = {};
|
|
892
895
|
kpiDefinition.chart.dimensions.forEach(dimension => {
|
|
893
896
|
oGroup[dimension.name] = {};
|
|
897
|
+
if (dimension.text) {
|
|
898
|
+
// Also load the text property if there's one (as an additional property)
|
|
899
|
+
oGroup[dimension.name].additionally = [dimension.text];
|
|
900
|
+
}
|
|
894
901
|
});
|
|
895
902
|
kpiDefinition.chart.measures.forEach(measure => {
|
|
896
903
|
oAggregate[measure.name] = {};
|
|
@@ -914,20 +921,33 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
|
|
|
914
921
|
return new Sorter(sortInfo.name, sortInfo.descending);
|
|
915
922
|
}));
|
|
916
923
|
}
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
924
|
+
const allContexts = await oListBinding.requestContexts(0, kpiDefinition.chart.maxItems);
|
|
925
|
+
const chartData = allContexts.map(oContext => {
|
|
926
|
+
const oData = {};
|
|
927
|
+
kpiDefinition.chart.dimensions.forEach(dimension => {
|
|
928
|
+
// We have to format the dimension value here, as the card doesn't support calculated bindings yet
|
|
929
|
+
switch (dimension.textArrangement) {
|
|
930
|
+
case "TextOnly":
|
|
931
|
+
oData[dimension.name] = oContext.getProperty(dimension.text);
|
|
932
|
+
break;
|
|
933
|
+
case "TextLast":
|
|
934
|
+
oData[dimension.name] = valueFormatters.formatWithBrackets(oContext.getProperty(dimension.name), oContext.getProperty(dimension.text));
|
|
935
|
+
break;
|
|
936
|
+
case undefined:
|
|
937
|
+
// No text arrangement
|
|
938
|
+
oData[dimension.name] = oContext.getProperty(dimension.name);
|
|
939
|
+
break;
|
|
940
|
+
default:
|
|
941
|
+
//Default should be TextFirst if there is a Text annotation and neither TextOnly nor TextLast are set
|
|
942
|
+
oData[dimension.name] = valueFormatters.formatWithBrackets(oContext.getProperty(dimension.text), oContext.getProperty(dimension.name));
|
|
943
|
+
}
|
|
927
944
|
});
|
|
928
|
-
|
|
929
|
-
|
|
945
|
+
kpiDefinition.chart.measures.forEach(measure => {
|
|
946
|
+
oData[measure.name] = oContext.getProperty(measure.name);
|
|
947
|
+
});
|
|
948
|
+
return oData;
|
|
930
949
|
});
|
|
950
|
+
oKPIModel.setProperty(`/${kpiDefinition.id}/manifest/sap.card/data/json/chartData`, chartData);
|
|
931
951
|
}
|
|
932
952
|
|
|
933
953
|
/**
|
|
@@ -995,12 +1015,20 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
|
|
|
995
1015
|
try {
|
|
996
1016
|
const oModel = oKPITag.getModel();
|
|
997
1017
|
const popover = await this.getPopover(oKPITag);
|
|
1018
|
+
// Set the popover as modal while the card is loading (so that card rendering doesn't interfere with the popover and close it)
|
|
1019
|
+
popover.setModal(true);
|
|
998
1020
|
this.oCard.setManifest(oKPIModel.getProperty(`/${kpiID}/manifest`));
|
|
999
1021
|
this.oCard.setPreviewMode("Abstract"); // Display placeholders in the card until data is loaded
|
|
1000
1022
|
popover.openBy(oKPITag, false); // Open the popover immediately
|
|
1001
1023
|
|
|
1002
1024
|
const promises = [this.loadKPITagData(kpiDefinition, oModel, oKPIModel, true), this.loadKPICardData(kpiDefinition, oModel, oKPIModel)];
|
|
1003
1025
|
await Promise.all(promises);
|
|
1026
|
+
this.oCard.attachEventOnce("stateChanged", () => {
|
|
1027
|
+
var _this$oCard$getFocusD;
|
|
1028
|
+
// Once the card has been rendered, set the focus properly and set the popover as non-modal
|
|
1029
|
+
(_this$oCard$getFocusD = this.oCard.getFocusDomRef()) === null || _this$oCard$getFocusD === void 0 ? void 0 : _this$oCard$getFocusD.focus();
|
|
1030
|
+
popover.setModal(false);
|
|
1031
|
+
});
|
|
1004
1032
|
this.oCard.setManifest(oKPIModel.getProperty(`/${kpiID}/manifest`));
|
|
1005
1033
|
this.oCard.refresh();
|
|
1006
1034
|
this.oCard.setPreviewMode("Off"); // Display real data in the card
|
|
@@ -1014,4 +1042,4 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
|
|
|
1014
1042
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype)), _class2)) || _class);
|
|
1015
1043
|
return KPIManagementControllerExtension;
|
|
1016
1044
|
}, false);
|
|
1017
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZSIsIk5vbmUiLCJtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbiIsImtwaVZhbHVlIiwiYVRocmVzaG9sZHMiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwidW5kZWZpbmVkIiwibWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbiIsIm1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24iLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwidHJlbmRWYWx1ZSIsImRldmlhdGlvbkluZGljYXRvciIsImRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbiIsInJlZmVyZW5jZVZhbHVlIiwiaXNSZWxhdGl2ZSIsImNvbXBWYWx1ZSIsImNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uIiwiZmlsdGVyRGVmaW5pdGlvbiIsInJhbmdlcyIsImxlbmd0aCIsIkZpbHRlciIsInByb3BlcnR5UGF0aCIsIm9wZXJhdG9yIiwicmFuZ2VMb3ciLCJyYW5nZUhpZ2giLCJhUmFuZ2VGaWx0ZXJzIiwibWFwIiwicmFuZ2UiLCJmaWx0ZXJzIiwiYW5kIiwiZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24iLCJjdXJyZW50TG9jYWxlIiwiTG9jYWxlIiwiTG9jYWxpemF0aW9uIiwiZ2V0TGFuZ3VhZ2UiLCJyZXNCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkYXRlRm9ybWF0IiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsInN0eWxlIiwiZm9ybWF0UmFuZ2UiLCJ2YWx1ZUxvdyIsInByb3BlcnR5VHlwZSIsImluZGV4T2YiLCJmb3JtYXQiLCJEYXRlIiwidmFsdWVIaWdoIiwiZ2V0VGV4dCIsImpvaW4iLCJmb3JtYXRDaGFydFRpdGxlIiwia3BpRGVmIiwiZm9ybWF0TGlzdCIsIml0ZW1zIiwibGFiZWwiLCJyZXMiLCJJIiwiY2hhcnQiLCJtZWFzdXJlcyIsImRpbWVuc2lvbnMiLCJ1cGRhdGVDaGFydExhYmVsU2V0dGluZ3MiLCJjaGFydERlZmluaXRpb24iLCJvQ2hhcnRQcm9wZXJ0aWVzIiwiY2hhcnRUeXBlIiwiY2F0ZWdvcnlBeGlzIiwidGl0bGUiLCJ2aXNpYmxlIiwidmFsdWVBeGlzIiwiZm9ybWF0U3RyaW5nIiwicGxvdEFyZWEiLCJkYXRhTGFiZWwiLCJ0eXBlIiwidmFsdWVBeGlzMiIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwicG9zaXRpb24iLCJhbGlnbm1lbnQiLCJzaXplTGVnZW5kIiwiZmlsdGVyTWFwIiwiYU9iamVjdHMiLCJhUm9sZXMiLCJmaWx0ZXIiLCJkaW1lbnNpb24iLCJpbmNsdWRlcyIsInJvbGUiLCJnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyIsImF4aXMxTWVhc3VyZXMiLCJheGlzMk1lYXN1cmVzIiwiYXhpczNNZWFzdXJlcyIsIm90aGVyTWVhc3VyZXMiLCJzZXJpZXNEaW1lbnNpb25zIiwic2hhcGVEaW1lbnNpb24iLCJmaW5kIiwieE1lYXN1cmUiLCJzaGlmdCIsInlNZWFzdXJlIiwidWlkIiwidmFsdWVzIiwic2l6ZU1lYXN1cmUiLCJwdXNoIiwiZ2V0Q2hhcnRGZWVkcyIsImdldE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2SW5mbyIsIm9TaGVsbFNlcnZpY2UiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldExpbmtzIiwidGhlbiIsImFMaW5rcyIsImdldFByaW1hcnlJbnRlbnQiLCJvTGluayIsIm9JbmZvIiwicGFyc2VTaGVsbEhhc2giLCJpbnRlbnQiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJvdXRib3VuZE5hdmlnYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dGJvdW5kIiwiS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24iLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfaW5oZXJpdHNMb29zZSIsImNhbGwiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0Q2FyZE1hbmlmZXN0Iiwia3BpRGVmaW5pdGlvbiIsIm9LUElNb2RlbCIsIl9rcGlEZWZpbml0aW9uJHNlbGVjdCIsIm9DYXJkTWFuaWZlc3QiLCJpZCIsInRlY2hub2xvZ3kiLCJkYXRhIiwianNvbiIsImhlYWRlciIsImRhdGFwb2ludCIsInN1YlRpdGxlIiwiZGVzY3JpcHRpb24iLCJ1bml0T2ZNZWFzdXJlbWVudCIsIm1haW5JbmRpY2F0b3IiLCJudW1iZXIiLCJ1bml0Iiwic3RhdGUiLCJ0cmVuZCIsImNvbnRlbnQiLCJtaW5IZWlnaHQiLCJjaGFydFByb3BlcnRpZXMiLCJwYXRoIiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwic2lkZUluZGljYXRvcnMiLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJhRGVzY3JpcHRpb25zIiwiZm9yRWFjaCIsImRlc2MiLCJkZXRhaWxzIiwidGV4dCIsInZhbHVlIiwibmFtZSIsIm1lYXN1cmUiLCJmZWVkcyIsInNldFByb3BlcnR5IiwibWFuaWZlc3QiLCJpbml0TmF2aWdhdGlvbkluZm8iLCJuYXZpZ2F0aW9uIiwib05hdkluZm8iLCJwYXJhbWV0ZXJzIiwib25Jbml0IiwiX2dldFBhZ2VNb2RlbCIsImFLUElEZWZpbml0aW9ucyIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0UHJvcGVydHkiLCJvVmlldyIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsImdldFNoZWxsU2VydmljZXMiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwibG9hZEtQSVRhZ0RhdGEiLCJnZXRNb2RlbCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJ1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5Iiwia3BpQ29udGV4dCIsIl9rcGlEZWZpbml0aW9uJGRhdGFwbyIsIl9rcGlEZWZpbml0aW9uJGRhdGFwbzIiLCJfa3BpRGVmaW5pdGlvbiRkYXRhcG8zIiwicmF3VW5pdCIsImlzUGF0aCIsImlzUGVyY2VudGFnZSIsImlzQ3VycmVuY3kiLCJyYXdWYWx1ZSIsIk51bWJlciIsInBhcnNlRmxvYXQiLCJOdW1iZXJGb3JtYXQiLCJnZXRGbG9hdEluc3RhbmNlIiwibWluRnJhY3Rpb25EaWdpdHMiLCJtYXhGcmFjdGlvbkRpZ2l0cyIsInNob3dTY2FsZSIsImtwaVZhbHVlVW5zY2FsZWQiLCJncm91cGluZ0VuYWJsZWQiLCJrcGlWYWx1ZU5vU2NhbGUiLCJrcGlWYWx1ZVNjYWxlIiwiZGVjaW1hbHMiLCJtYXhJbnRlZ2VyRGlnaXRzIiwia3BpVW5pdCIsImdldFVuaXRJbnN0YW5jZSIsInNob3dOdW1iZXIiLCJ1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eSIsImNyaXRpY2FsaXR5VmFsdWUiLCJjcml0aWNhbGl0eVBhdGgiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlIiwidXBkYXRlRGF0YXBvaW50VHJlbmQiLCJ0cmVuZFBhdGgiLCJ0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUiLCJ0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCIsInRyZW5kUmVmZXJlbmNlVmFsdWUiLCJ0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSIsInRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHMiLCJ1cGRhdGVUYXJnZXRWYWx1ZSIsInRhcmdldFJhd1ZhbHVlIiwiZGV2aWF0aW9uUmF3VmFsdWUiLCJ0YXJnZXRTY2FsZSIsImRldmlhdGlvblZhbHVlIiwib01haW5Nb2RlbCIsImxvYWRGdWxsIiwiX2twaURlZmluaXRpb24kZGF0YXBvNCIsIl9rcGlEZWZpbml0aW9uJHNlbGVjdDIiLCJvTGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImNvbnRleHRQYXRoIiwiJCRncm91cElkIiwib0FnZ3JlZ2F0ZSIsInNldEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRlIiwiYUZpbHRlcnMiLCJyZXF1ZXN0Q29udGV4dHMiLCJhQ29udGV4dHMiLCJfa3BpRGVmaW5pdGlvbiRkYXRhcG81IiwiX2twaURlZmluaXRpb24kZGF0YXBvNiIsImxvYWRLUElDYXJkRGF0YSIsIl9rcGlEZWZpbml0aW9uJHNlbGVjdDMiLCJvR3JvdXAiLCJncm91cCIsInNvcnRPcmRlciIsInNvcnQiLCJzb3J0SW5mbyIsIlNvcnRlciIsImRlc2NlbmRpbmciLCJtYXhJdGVtcyIsImNoYXJ0RGF0YSIsIm9Db250ZXh0Iiwib0RhdGEiLCJnZXRQb3BvdmVyIiwib0tQSVRhZyIsIl90aGlzIiwib1BvcG92ZXIiLCJyZWplY3QiLCJsb2FkIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiX2xlbiIsImFyZ3VtZW50cyIsInBhcmFtcyIsIkFycmF5IiwiX2tleSIsIkNhcmRDbGFzcyIsIkhvc3QiLCJvSG9zdCIsImF0dGFjaEFjdGlvbiIsIm9FdmVudCIsInNUeXBlIiwiZ2V0UGFyYW1ldGVyIiwib1BhcmFtcyIsImJhc2UiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJuYXZpZ2F0ZU91dGJvdW5kIiwib0NhcmQiLCJ3aWR0aCIsImhlaWdodCIsInNldEhvc3QiLCJQb3BvdmVyIiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsImFkZERlcGVuZGVudCIsIm9uS1BJUHJlc3NlZCIsImtwaUlEIiwib0RlZiIsIm9Nb2RlbCIsInBvcG92ZXIiLCJzZXRNYW5pZmVzdCIsInNldFByZXZpZXdNb2RlIiwib3BlbkJ5IiwicHJvbWlzZXMiLCJhbGwiLCJyZWZyZXNoIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIktQSU1hbmFnZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgTG9jYWxpemF0aW9uIGZyb20gXCJzYXAvYmFzZS9pMThuL0xvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIG1ldGhvZE92ZXJyaWRlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5hbHl0aWNhbEtQSURlZmluaXRpb24sXG5cdEtQSUNoYXJ0RGVmaW5pdGlvbixcblx0S1BJRGVmaW5pdGlvbixcblx0TmF2aWdhdGlvbkluZm9cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJEZWZpbml0aW9uLCBSYW5nZURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEdlbmVyaWNUYWcgZnJvbSBcInNhcC9tL0dlbmVyaWNUYWdcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCJzYXAvdWkvY29yZS9Mb2NhbGVcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IE51bWJlckZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L051bWJlckZvcm1hdFwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCB0eXBlIEhvc3RUeXBlIGZyb20gXCJzYXAvdWkvaW50ZWdyYXRpb24vSG9zdFwiO1xuaW1wb3J0IHR5cGUgeyBIb3N0JEFjdGlvbkV2ZW50IH0gZnJvbSBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgQ2FyZCwgQ2FyZE1hbmlmZXN0LCBkZWZhdWx0IGFzIENhcmRUeXBlLCBDaGFydENhcmRDb250ZW50IH0gZnJvbSBcInNhcC91aS9pbnRlZ3JhdGlvbi93aWRnZXRzL0NhcmRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5OiBSZWNvcmQ8c3RyaW5nLCBNZXNzYWdlVHlwZT4gPSB7XG5cdFwiMVwiOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XCIyXCI6IE1lc3NhZ2VUeXBlLldhcm5pbmcsXG5cdFwiM1wiOiBNZXNzYWdlVHlwZS5TdWNjZXNzLFxuXHRcIjVcIjogTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25cbn07XG5cbmNvbnN0IFZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGU6IFJlY29yZDxNZXNzYWdlVHlwZSwgc3RyaW5nPiA9IHtcblx0RXJyb3I6IFwiRXJyb3JcIixcblx0V2FybmluZzogXCJDcml0aWNhbFwiLFxuXHRTdWNjZXNzOiBcIkdvb2RcIixcblx0SW5mb3JtYXRpb246IFwiTm9uZVwiLFxuXHROb25lOiBcIk5vbmVcIlxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIHN0YXRlIGZyb20gYSBjYWxjdWxhdGVkIGNyaXRpY2FsaXR5IG9mIHR5cGUgJ1RhcmdldCcuXG4gKiBAcGFyYW0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUEkgdG8gYmUgdGVzdGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gYVRocmVzaG9sZHMgVGhyZXNob2xkcyB0byBiZSB1c2VkIFtEZXZpYXRpb25SYW5nZUxvd1ZhbHVlLFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUsQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlLFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLERldmlhdGlvblJhbmdlSGlnaFZhbHVlXS5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbVRhcmdldENhbGN1bGF0aW9uKGtwaVZhbHVlOiBudW1iZXIsIGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IE1lc3NhZ2VUeXBlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbNV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1s1XSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzVdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzRdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbNF0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1s0XSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzNdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbM10gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1szXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2Uge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdNaW5pbWl6ZScuXG4gKiBAcGFyYW0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUEkgdG8gYmUgdGVzdGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gYVRocmVzaG9sZHMgVGhyZXNob2xkcyB0byBiZSB1c2VkIFtBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUsRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVdLlxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgTWVzc2FnZVR5cGVcbiAqL1xuZnVuY3Rpb24gbWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2Uge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdNYXhpbWl6ZScuXG4gKiBAcGFyYW0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUEkgdG8gYmUgdGVzdGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gYVRocmVzaG9sZHMgVGhyZXNob2xkcyB0byBiZSB1c2VkIFtEZXZpYXRpb25SYW5nZUxvd1ZhbHVlLFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsQWNjZXB0YW5jZVJhbmdlTG93VmFsdWVdLlxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgTWVzc2FnZVR5cGVcbiAqL1xuZnVuY3Rpb24gbWVzc2FnZVR5cGVGcm9tTWF4aW1pemVDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2Uge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGEgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlIGZyb20gYSB0cmVuZCB2YWx1ZS5cbiAqIEBwYXJhbSB0cmVuZFZhbHVlIFRoZSBjcml0aWNhbGl0eSB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbVRyZW5kVHlwZSh0cmVuZFZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgZGV2aWF0aW9uSW5kaWNhdG9yOiBzdHJpbmc7XG5cblx0c3dpdGNoICh0cmVuZFZhbHVlKSB7XG5cdFx0Y2FzZSAxOiAvLyBTdHJvbmdVcFxuXHRcdGNhc2UgXCIxXCI6XG5cdFx0Y2FzZSAyOiAvLyBVcFxuXHRcdGNhc2UgXCIyXCI6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIlVwXCI7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgNDogLy8gRG93blxuXHRcdGNhc2UgXCI0XCI6XG5cdFx0Y2FzZSA1OiAvLyBTdHJvbmdEb3duXG5cdFx0Y2FzZSBcIjVcIjpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiRG93blwiO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJOb25lXCI7XG5cdH1cblxuXHRyZXR1cm4gZGV2aWF0aW9uSW5kaWNhdG9yO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIERldmlhdGlvbkluZGljYXRvciBmcm9tIGEgVHJlbmRDYWxjdWxhdGlvbi5cbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSVxuICogQHBhcmFtIHJlZmVyZW5jZVZhbHVlIFRoZSByZWZlcmVuY2UgdmFsdWUgdG8gY29tcGFyZSB3aXRoXG4gKiBAcGFyYW0gaXNSZWxhdGl2ZSBUcnVlIGlzIHRoZSBjb21wYXJpc29uIGlzIHJlbGF0aXZlXG4gKiBAcGFyYW0gYVRocmVzaG9sZHMgQXJyYXkgb2YgdGhyZXNob2xkcyBbU3Ryb25nRG93bkRpZmZlcmVuY2UsIERvd25EaWZmZXJlbmNlLCBVcERpZmZlcmVuY2UsIFN0cm9uZ1VwRGlmZmVyZW5jZV1cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIERldmlhdGlvbkluZGljYXRvciB2YWx1ZVxuICovXG5mdW5jdGlvbiBkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24oXG5cdGtwaVZhbHVlOiBudW1iZXIsXG5cdHJlZmVyZW5jZVZhbHVlOiBudW1iZXIsXG5cdGlzUmVsYXRpdmU6IGJvb2xlYW4sXG5cdGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcblx0bGV0IGRldmlhdGlvbkluZGljYXRvcjogc3RyaW5nO1xuXG5cdGlmICghYVRocmVzaG9sZHMgfHwgKGlzUmVsYXRpdmUgJiYgIXJlZmVyZW5jZVZhbHVlKSkge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxuXG5cdGNvbnN0IGNvbXBWYWx1ZSA9IGlzUmVsYXRpdmUgPyAoa3BpVmFsdWUgLSByZWZlcmVuY2VWYWx1ZSkgLyByZWZlcmVuY2VWYWx1ZSA6IGtwaVZhbHVlIC0gcmVmZXJlbmNlVmFsdWU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYgY29tcFZhbHVlIDw9IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Ly8gU3Ryb25nRG93biAtLT4gRG93blxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiRG93blwiO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYgY29tcFZhbHVlIDw9IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Ly8gRG93biAtLT4gRG93blxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiRG93blwiO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzNdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbM10gIT09IG51bGwgJiYgY29tcFZhbHVlID49IGFUaHJlc2hvbGRzWzNdKSB7XG5cdFx0Ly8gU3Ryb25nVXAgLS0+IFVwXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYgY29tcFZhbHVlID49IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Ly8gVXAgLS0+IFVwXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFNpZGV3YXlzIC0tPiBOb25lXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJOb25lXCI7XG5cdH1cblxuXHRyZXR1cm4gZGV2aWF0aW9uSW5kaWNhdG9yO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzYXAudWkubW9kZWwuRmlsdGVyIGZyb20gYSBmaWx0ZXIgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSBmaWx0ZXJEZWZpbml0aW9uIFRoZSBmaWx0ZXIgZGVmaW5pdGlvblxuICogQHJldHVybnMgUmV0dXJucyBhIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSB0aGUgZGVmaW5pdGlvbiwgb3IgdW5kZWZpbmVkIGlmIHRoZSBkZWZpbml0aW9uIGlzIGVtcHR5IChubyByYW5nZXMpXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pOiBGaWx0ZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcihcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlQYXRoLFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5yYW5nZUxvdyxcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLnJhbmdlSGlnaFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgYVJhbmdlRmlsdGVycyA9IGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLm1hcCgocmFuZ2UpID0+IHtcblx0XHRcdHJldHVybiBuZXcgRmlsdGVyKGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlQYXRoLCByYW5nZS5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvciwgcmFuZ2UucmFuZ2VMb3csIHJhbmdlLnJhbmdlSGlnaCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0ZmlsdGVyczogYVJhbmdlRmlsdGVycyxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uOiBGaWx0ZXJEZWZpbml0aW9uKTogc3RyaW5nIHtcblx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoTG9jYWxpemF0aW9uLmdldExhbmd1YWdlKCkpO1xuXHRjb25zdCByZXNCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRjb25zdCBkYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoeyBzdHlsZTogXCJtZWRpdW1cIiB9LCBjdXJyZW50TG9jYWxlKTtcblxuXHRmdW5jdGlvbiBmb3JtYXRSYW5nZShyYW5nZTogUmFuZ2VEZWZpbml0aW9uKTogc3RyaW5nIHtcblx0XHRjb25zdCB2YWx1ZUxvdyA9XG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5VHlwZS5pbmRleE9mKFwiRWRtLkRhdGVcIikgPT09IDBcblx0XHRcdFx0PyBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZShyYW5nZS5yYW5nZUxvdykpXG5cdFx0XHRcdDogKHJhbmdlLnJhbmdlTG93IGFzIHN0cmluZyk7XG5cdFx0Y29uc3QgdmFsdWVIaWdoID1cblx0XHRcdGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlUeXBlLmluZGV4T2YoXCJFZG0uRGF0ZVwiKSA9PT0gMCAmJiByYW5nZS5yYW5nZUhpZ2ggIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKHJhbmdlLnJhbmdlSGlnaCkpXG5cdFx0XHRcdDogcmFuZ2UucmFuZ2VIaWdoO1xuXG5cdFx0c3dpdGNoIChyYW5nZS5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRcdHJldHVybiBgWyR7dmFsdWVMb3d9IC0gJHt2YWx1ZUhpZ2h9XWA7XG5cblx0XHRcdGNhc2UgXCJDb250YWluc1wiOlxuXHRcdFx0XHRyZXR1cm4gYCoke3ZhbHVlTG93fSpgO1xuXG5cdFx0XHRjYXNlIFwiR0VcIjpcblx0XHRcdFx0cmV0dXJuIGBcXHUyMjY1JHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiR1RcIjpcblx0XHRcdFx0cmV0dXJuIGA+JHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiTEVcIjpcblx0XHRcdFx0cmV0dXJuIGBcXHUyMjY0JHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdFx0cmV0dXJuIGA8JHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiTkJcIjpcblx0XHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0ZJTFRFUlNUUklOR19OT1RcIiwgW2BbJHt2YWx1ZUxvd30gLSAke3ZhbHVlSGlnaH1dYF0pO1xuXG5cdFx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdFx0cmV0dXJuIGBcXHUyMjYwJHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiTm90Q29udGFpbnNcIjpcblx0XHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0ZJTFRFUlNUUklOR19OT1RcIiwgW2AqJHt2YWx1ZUxvd30qYF0pO1xuXG5cdFx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZUxvdztcblx0XHR9XG5cdH1cblx0aWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2UgaWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBmb3JtYXRSYW5nZShmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGAoJHtmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5tYXAoZm9ybWF0UmFuZ2UpLmpvaW4oXCIsXCIpfSlgO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IHJlc0J1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0ZnVuY3Rpb24gZm9ybWF0TGlzdChpdGVtczogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdKTogc3RyaW5nIHtcblx0XHRpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9IGVsc2UgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIGl0ZW1zWzBdLmxhYmVsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgcmVzID0gaXRlbXNbMF0ubGFiZWw7XG5cdFx0XHRmb3IgKGxldCBJID0gMTsgSSA8IGl0ZW1zLmxlbmd0aCAtIDE7IEkrKykge1xuXHRcdFx0XHRyZXMgKz0gYCwgJHtpdGVtc1tJXS5sYWJlbH1gO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSVRFTVNMSVNUXCIsIFtyZXMsIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLmxhYmVsXSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0NIQVJUVElUTEVcIiwgW2Zvcm1hdExpc3Qoa3BpRGVmLmNoYXJ0Lm1lYXN1cmVzKSwgZm9ybWF0TGlzdChrcGlEZWYuY2hhcnQuZGltZW5zaW9ucyldKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hhcnRMYWJlbFNldHRpbmdzKFxuXHRjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbixcblx0b0NoYXJ0UHJvcGVydGllczoge1xuXHRcdGNhdGVnb3J5QXhpczogeyB0aXRsZTogeyB2aXNpYmxlOiBib29sZWFuIH0gfTtcblx0XHRzaXplTGVnZW5kOiB7IHZpc2libGU6IGJvb2xlYW4gfTtcblx0XHRsZWdlbmRHcm91cDogeyBsYXlvdXQ6IHsgcG9zaXRpb246IHN0cmluZzsgYWxpZ25tZW50OiBzdHJpbmcgfSB9O1xuXHRcdHZhbHVlQXhpczoge1xuXHRcdFx0dGl0bGU6IHsgdmlzaWJsZTogYm9vbGVhbiB9O1xuXHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBzdHJpbmc7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0dmFsdWVBeGlzMjoge1xuXHRcdFx0dGl0bGU6IHsgdmlzaWJsZTogYm9vbGVhbiB9O1xuXHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBzdHJpbmc7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0cGxvdEFyZWE6IHtcblx0XHRcdGRhdGFMYWJlbDoge307XG5cdFx0fTtcblx0fVxuKTogdm9pZCB7XG5cdHN3aXRjaCAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSkge1xuXHRcdGNhc2UgXCJEb251dFwiOlxuXHRcdFx0Ly8gU2hvdyBkYXRhIGxhYmVscywgZG8gbm90IHNob3cgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuY2F0ZWdvcnlBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0ge1xuXHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcInZhbHVlXCIsXG5cdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0X01GRDJcIlxuXHRcdFx0fTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImJ1YmJsZVwiOlxuXHRcdFx0Ly8gU2hvdyBheGlzIHRpdGxlLCBidWJibGUgc2l6ZSBsZWdlbmQsIGRvIG5vdCBzaG93IGRhdGEgbGFiZWxzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMyID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmxlZ2VuZEdyb3VwID0ge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIixcblx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwidG9wTGVmdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnNpemVMZWdlbmQgPSB7XG5cdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInNjYXR0ZXJcIjpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpczIgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5jYXRlZ29yeUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdH1cbn1cbmZ1bmN0aW9uIGZpbHRlck1hcChhT2JqZWN0czogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHJvbGU/OiBzdHJpbmcgfVtdLCBhUm9sZXM/OiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogc3RyaW5nW10ge1xuXHRpZiAoYVJvbGVzICYmIGFSb2xlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gYU9iamVjdHNcblx0XHRcdC5maWx0ZXIoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYVJvbGVzLmluY2x1ZGVzKGRpbWVuc2lvbi5yb2xlKTtcblx0XHRcdH0pXG5cdFx0XHQubWFwKChkaW1lbnNpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGRpbWVuc2lvbi5sYWJlbDtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBhT2JqZWN0cy5tYXAoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0cmV0dXJuIGRpbWVuc2lvbi5sYWJlbDtcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyhjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbik6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W10ge1xuXHRjb25zdCBheGlzMU1lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczFcIl0pO1xuXHRjb25zdCBheGlzMk1lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczJcIl0pO1xuXHRjb25zdCBheGlzM01lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczNcIl0pO1xuXHRjb25zdCBvdGhlck1lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW3VuZGVmaW5lZF0pO1xuXHRjb25zdCBzZXJpZXNEaW1lbnNpb25zID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pO1xuXG5cdC8vIEdldCB0aGUgZmlyc3QgZGltZW5zaW9uIHdpdGggcm9sZSBcIkNhdGVnb3J5XCIgZm9yIHRoZSBzaGFwZVxuXHRjb25zdCBzaGFwZURpbWVuc2lvbiA9IGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLmZpbmQoKGRpbWVuc2lvbikgPT4ge1xuXHRcdHJldHVybiBkaW1lbnNpb24ucm9sZSA9PT0gXCJDYXRlZ29yeVwiO1xuXHR9KTtcblxuXHQvLyBNZWFzdXJlIGZvciB0aGUgeC1BeGlzIDogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczEsIG9yIGZvciBBeGlzMiBpZiBub3QgZm91bmQsIG9yIGZvciBBeGlzMyBpZiBub3QgZm91bmRcblx0Y29uc3QgeE1lYXN1cmUgPSBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBvdGhlck1lYXN1cmVzLnNoaWZ0KCkgfHwgXCJcIjtcblx0Ly8gTWVhc3VyZSBmb3IgdGhlIHktQXhpcyA6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMyLCBvciBzZWNvbmQgbWVhc3VyZSBmb3IgQXhpczEgaWYgbm90IGZvdW5kLCBvciBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMyBpZiBub3QgZm91bmRcblx0Y29uc3QgeU1lYXN1cmUgPSBheGlzMk1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBvdGhlck1lYXN1cmVzLnNoaWZ0KCkgfHwgXCJcIjtcblx0Y29uc3QgcmVzID0gW1xuXHRcdHtcblx0XHRcdHVpZDogXCJ2YWx1ZUF4aXNcIixcblx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0dmFsdWVzOiBbeE1lYXN1cmVdXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR1aWQ6IFwidmFsdWVBeGlzMlwiLFxuXHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHR2YWx1ZXM6IFt5TWVhc3VyZV1cblx0XHR9XG5cdF07XG5cblx0aWYgKGNoYXJ0RGVmaW5pdGlvbi5jaGFydFR5cGUgPT09IFwiYnViYmxlXCIpIHtcblx0XHQvLyBNZWFzdXJlIGZvciB0aGUgc2l6ZSBvZiB0aGUgYnViYmxlOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMywgb3IgcmVtYWluaW5nIG1lYXN1cmUgZm9yIEF4aXMxL0F4aXMyIGlmIG5vdCBmb3VuZFxuXHRcdGNvbnN0IHNpemVNZWFzdXJlID0gYXhpczNNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMk1lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0dWlkOiBcImJ1YmJsZVdpZHRoXCIsXG5cdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdHZhbHVlczogW3NpemVNZWFzdXJlXVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gQ29sb3IgKG9wdGlvbmFsKVxuXHRpZiAoc2VyaWVzRGltZW5zaW9ucy5sZW5ndGgpIHtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHR2YWx1ZXM6IHNlcmllc0RpbWVuc2lvbnNcblx0XHR9KTtcblx0fVxuXHQvLyBTaGFwZSAob3B0aW9uYWwpXG5cdGlmIChzaGFwZURpbWVuc2lvbikge1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdHVpZDogXCJzaGFwZVwiLFxuXHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdHZhbHVlczogW3NoYXBlRGltZW5zaW9uLmxhYmVsXVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGdldENoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24pOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdIHtcblx0bGV0IHJlczogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXTtcblxuXHRzd2l0Y2ggKGNoYXJ0RGVmaW5pdGlvbi5jaGFydFR5cGUpIHtcblx0XHRjYXNlIFwiRG9udXRcIjpcblx0XHRcdHJlcyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJzaXplXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucylcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImJ1YmJsZVwiOlxuXHRcdGNhc2UgXCJzY2F0dGVyXCI6XG5cdFx0XHRyZXMgPSBnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyhjaGFydERlZmluaXRpb24pO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwidmVydGljYWxfYnVsbGV0XCI6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiYWN0dWFsVmFsdWVzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbdW5kZWZpbmVkLCBcIkF4aXMxXCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcInRhcmdldFZhbHVlc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczJcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY2F0ZWdvcnlBeGlzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW3VuZGVmaW5lZCwgXCJDYXRlZ29yeVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjb2xvclwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFtcIlNlcmllc1wiXSlcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJlcyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJ2YWx1ZUF4aXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY2F0ZWdvcnlBeGlzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW3VuZGVmaW5lZCwgXCJDYXRlZ29yeVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjb2xvclwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFtcIlNlcmllc1wiXSlcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0fVxuXG5cdHJldHVybiByZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE5hdmlnYXRpb25QYXJhbWV0ZXJzKFxuXHRuYXZJbmZvOiBOYXZpZ2F0aW9uSW5mbyxcblx0b1NoZWxsU2VydmljZTogSVNoZWxsU2VydmljZXNcbik6IFByb21pc2U8eyBzZW1hbnRpY09iamVjdD86IHN0cmluZzsgYWN0aW9uPzogc3RyaW5nOyBvdXRib3VuZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XG5cdGlmIChuYXZJbmZvLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0aWYgKG5hdkluZm8uYWN0aW9uKSB7XG5cdFx0XHQvLyBBY3Rpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQ6IGNoZWNrIGlmIGl0J3MgYXZhaWxhYmxlIGluIHRoZSBzaGVsbFxuXHRcdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuZ2V0TGlua3MoW3sgc2VtYW50aWNPYmplY3Q6IG5hdkluZm8uc2VtYW50aWNPYmplY3QsIGFjdGlvbjogbmF2SW5mby5hY3Rpb24gfV0pLnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYUxpbmtzLmxlbmd0aCAmJiBhTGlua3NbMF0ubGVuZ3RoID8geyBzZW1hbnRpY09iamVjdDogbmF2SW5mby5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBuYXZJbmZvLmFjdGlvbiB9IDogdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlIGdldCB0aGUgcHJpbWFyeSBpbnRlbnQgZnJvbSB0aGUgc2hlbGxcblx0XHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlLmdldFByaW1hcnlJbnRlbnQobmF2SW5mby5zZW1hbnRpY09iamVjdCkudGhlbigob0xpbmspID0+IHtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIE5vIHByaW1hcnkgaW50ZW50Li4uXG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIHRoYXQgdGhlIHByaW1hcnkgaW50ZW50IGlzIG5vdCBwYXJ0IG9mIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zXG5cdFx0XHRcdGNvbnN0IG9JbmZvID0gb1NoZWxsU2VydmljZS5wYXJzZVNoZWxsSGFzaChvTGluay5pbnRlbnQpO1xuXHRcdFx0XHRyZXR1cm4gbmF2SW5mby51bmF2YWlsYWJsZUFjdGlvbnMgJiYgbmF2SW5mby51bmF2YWlsYWJsZUFjdGlvbnMuaW5jbHVkZXMob0luZm8uYWN0aW9uKVxuXHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0OiB7IHNlbWFudGljT2JqZWN0OiBvSW5mby5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBvSW5mby5hY3Rpb24gfTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBPdXRib3VuZCBuYXZpZ2F0aW9uIHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRyZXR1cm4gbmF2SW5mby5vdXRib3VuZE5hdmlnYXRpb24gPyBQcm9taXNlLnJlc29sdmUoeyBvdXRib3VuZDogbmF2SW5mby5vdXRib3VuZE5hdmlnYXRpb24gfSkgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxufVxuXG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gZm9yIG1hbmFnaW5nIHRoZSBLUElzIGluIGFuIGFuYWx5dGljYWwgbGlzdCBwYWdlLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNpbmNlIDEuOTMuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5LUElNYW5hZ2VtZW50XCIpXG5jbGFzcyBLUElNYW5hZ2VtZW50Q29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcm90ZWN0ZWQgYUtQSURlZmluaXRpb25zPzogS1BJRGVmaW5pdGlvbltdO1xuXG5cdHByb3RlY3RlZCBvQ2FyZCE6IENhcmQ7XG5cblx0cHJvdGVjdGVkIG9Qb3BvdmVyITogUG9wb3ZlcjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGNhcmQgbWFuaWZlc3QgZm9yIGEgS1BJIGRlZmluaXRpb24gYW5kIHN0b3JlcyBpdCBpbiBhIEpTT04gbW9kZWwuXG5cdCAqIEBwYXJhbSBrcGlEZWZpbml0aW9uIFRoZSBLUEkgZGVmaW5pdGlvblxuXHQgKiBAcGFyYW0gb0tQSU1vZGVsIFRoZSBKU09OIG1vZGVsIGluIHdoaWNoIHRoZSBtYW5pZmVzdCB3aWxsIGJlIHN0b3JlZFxuXHQgKi9cblx0cHJvdGVjdGVkIGluaXRDYXJkTWFuaWZlc3Qoa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NhcmRNYW5pZmVzdDogQ2FyZE1hbmlmZXN0PFBhcnRpYWw8Q2hhcnRDYXJkQ29udGVudD4+ID0ge1xuXHRcdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdFx0aWQ6IFwic2FwLmZlLktQSUNhcmRcIixcblx0XHRcdFx0dHlwZTogXCJjYXJkXCJcblx0XHRcdH0sXG5cdFx0XHRcInNhcC51aVwiOiB7XG5cdFx0XHRcdHRlY2hub2xvZ3k6IFwiVUk1XCJcblx0XHRcdH0sXG5cdFx0XHRcInNhcC5jYXJkXCI6IHtcblx0XHRcdFx0dHlwZTogXCJBbmFseXRpY2FsXCIsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRqc29uOiB7fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRoZWFkZXI6IHtcblx0XHRcdFx0XHR0eXBlOiBcIk51bWVyaWNcIixcblx0XHRcdFx0XHR0aXRsZToga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGl0bGUsXG5cdFx0XHRcdFx0c3ViVGl0bGU6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdHVuaXRPZk1lYXN1cmVtZW50OiBcInttYWluVW5pdH1cIixcblx0XHRcdFx0XHRtYWluSW5kaWNhdG9yOiB7XG5cdFx0XHRcdFx0XHRudW1iZXI6IFwie21haW5WYWx1ZU5vU2NhbGV9XCIsXG5cdFx0XHRcdFx0XHR1bml0OiBcInttYWluVmFsdWVTY2FsZX1cIixcblx0XHRcdFx0XHRcdHN0YXRlOiBcInttYWluU3RhdGV9XCIsXG5cdFx0XHRcdFx0XHR0cmVuZDogXCJ7dHJlbmR9XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRtaW5IZWlnaHQ6IFwiMjVyZW1cIixcblx0XHRcdFx0XHRjaGFydFByb3BlcnRpZXM6IHtcblx0XHRcdFx0XHRcdHBsb3RBcmVhOiB7fSxcblx0XHRcdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFsaWdubWVudDogXCJsZWZ0XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdHBhdGg6IFwiL2NoYXJ0RGF0YVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIEFkZCBzaWRlIGluZGljYXRvcnMgaW4gdGhlIGNhcmQgaGVhZGVyIGlmIGEgdGFyZ2V0IGlzIGRlZmluZWQgZm9yIHRoZSBLUElcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCB8fCBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCByZXNCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmhlYWRlci5zaWRlSW5kaWNhdG9ycyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9JTkRJQ0FUT1JfVEFSR0VUXCIpLFxuXHRcdFx0XHRcdG51bWJlcjogXCJ7dGFyZ2V0TnVtYmVyfVwiLFxuXHRcdFx0XHRcdHVuaXQ6IFwie3RhcmdldFVuaXR9XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9JTkRJQ0FUT1JfREVWSUFUSU9OXCIpLFxuXHRcdFx0XHRcdG51bWJlcjogXCJ7ZGV2aWF0aW9uTnVtYmVyfVwiLFxuXHRcdFx0XHRcdHVuaXQ6IFwiJVwiXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0fVxuXG5cdFx0Ly8gRGV0YWlscyBvZiB0aGUgY2FyZDogZmlsdGVyIGRlc2NyaXB0aW9uc1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBhRGVzY3JpcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0a3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMuZm9yRWFjaCgoZmlsdGVyRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBkZXNjID0gZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbik7XG5cdFx0XHRcdGlmIChkZXNjKSB7XG5cdFx0XHRcdFx0YURlc2NyaXB0aW9ucy5wdXNoKGRlc2MpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGFEZXNjcmlwdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5oZWFkZXIuZGV0YWlscyA9IGFEZXNjcmlwdGlvbnMuam9pbihcIiwgXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENoYXJ0IHNldHRpbmdzOiB0eXBlLCB0aXRsZSwgZGltZW5zaW9ucyBhbmQgbWVhc3VyZXMgaW4gdGhlIG1hbmlmZXN0XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRUeXBlID0ga3BpRGVmaW5pdGlvbi5jaGFydC5jaGFydFR5cGU7XG5cdFx0dXBkYXRlQ2hhcnRMYWJlbFNldHRpbmdzKGtwaURlZmluaXRpb24uY2hhcnQsIG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmNoYXJ0UHJvcGVydGllcyk7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRQcm9wZXJ0aWVzLnRpdGxlLnRleHQgPSBmb3JtYXRDaGFydFRpdGxlKGtwaURlZmluaXRpb24pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmRpbWVuc2lvbnMgPSBrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMubWFwKChkaW1lbnNpb24pID0+IHtcblx0XHRcdHJldHVybiB7IGxhYmVsOiBkaW1lbnNpb24ubGFiZWwsIHZhbHVlOiBgeyR7ZGltZW5zaW9uLm5hbWV9fWAgfTtcblx0XHR9KTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5tZWFzdXJlcyA9IGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMubWFwKChtZWFzdXJlKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBsYWJlbDogbWVhc3VyZS5sYWJlbCwgdmFsdWU6IGB7JHttZWFzdXJlLm5hbWV9fWAgfTtcblx0XHR9KTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5mZWVkcyA9IGdldENoYXJ0RmVlZHMoa3BpRGVmaW5pdGlvbi5jaGFydCk7XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9YCwge1xuXHRcdFx0bWFuaWZlc3Q6IG9DYXJkTWFuaWZlc3Rcblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCBhc3luYyBpbml0TmF2aWdhdGlvbkluZm8oXG5cdFx0a3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sXG5cdFx0b0tQSU1vZGVsOiBKU09OTW9kZWwsXG5cdFx0b1NoZWxsU2VydmljZTogSVNoZWxsU2VydmljZXNcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gQWRkIG5hdmlnYXRpb25cblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gZ2V0TmF2aWdhdGlvblBhcmFtZXRlcnMoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uLCBvU2hlbGxTZXJ2aWNlKS50aGVuKChvTmF2SW5mbykgPT4ge1xuXHRcdFx0XHRpZiAob05hdkluZm8pIHtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2hlYWRlci9hY3Rpb25zYCwgW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25cIixcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVyczogb05hdkluZm9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5hS1BJRGVmaW5pdGlvbnMgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2twaURlZmluaXRpb25zXCIpO1xuXG5cdFx0aWYgKHRoaXMuYUtQSURlZmluaXRpb25zICYmIHRoaXMuYUtQSURlZmluaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSAob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIEJhc2VDb250cm9sbGVyKS5nZXRBcHBDb21wb25lbnQoKTtcblxuXHRcdFx0Ly8gQ3JlYXRlIGEgSlNPTiBtb2RlbCB0byBzdG9yZSBLUEkgZGF0YVxuXHRcdFx0Y29uc3Qgb0tQSU1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdFx0b1ZpZXcuc2V0TW9kZWwob0tQSU1vZGVsLCBcImtwaU1vZGVsXCIpO1xuXG5cdFx0XHR0aGlzLmFLUElEZWZpbml0aW9ucy5mb3JFYWNoKChrcGlEZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdC8vIFdlIG9ubHkgbmVlZCB0byB3b3JyeSBhYm91dCBhbmFseXRpY2FsIEtQSSBkZWZpbml0aW9uXG5cdFx0XHRcdGlmIChrcGlEZWZpbml0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFwiKSB7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBtYW5pZmVzdCBmb3IgdGhlIEtQSSBjYXJkIGFuZCBzdG9yZSBpdCBpbiB0aGUgS1BJIG1vZGVsXG5cdFx0XHRcdFx0dGhpcy5pbml0Q2FyZE1hbmlmZXN0KGtwaURlZmluaXRpb24sIG9LUElNb2RlbCk7XG5cblx0XHRcdFx0XHQvLyBTZXQgdGhlIG5hdmlnYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdFx0dGhpcy5pbml0TmF2aWdhdGlvbkluZm8oa3BpRGVmaW5pdGlvbiwgb0tQSU1vZGVsLCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKSkuY2F0Y2goZnVuY3Rpb24gKGVycjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIExvYWQgdGFnIGRhdGEgZm9yIHRoZSBLUElcblx0XHRcdFx0XHR0aGlzLmxvYWRLUElUYWdEYXRhKGtwaURlZmluaXRpb24sIG9BcHBDb21wb25lbnQuZ2V0TW9kZWwoKSwgb0tQSU1vZGVsKS5jYXRjaChmdW5jdGlvbiAoZXJyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25FeGl0KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9LUElNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwia3BpTW9kZWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdFx0aWYgKG9LUElNb2RlbCkge1xuXHRcdFx0b0tQSU1vZGVsLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3koa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoTG9jYWxpemF0aW9uLmdldExhbmd1YWdlKCkpO1xuXHRcdGNvbnN0IHJhd1VuaXQgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGhcblx0XHRcdD8ga3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LnZhbHVlKVxuXHRcdFx0OiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py52YWx1ZTtcblxuXHRcdGNvbnN0IGlzUGVyY2VudGFnZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzQ3VycmVuY3kgPT09IGZhbHNlICYmIHJhd1VuaXQgPT09IFwiJVwiO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gTWFpbiBLUEkgdmFsdWVcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHQvLyBWYWx1ZSBmb3JtYXR0ZWQgd2l0aCBhIHNjYWxlXG5cdFx0Y29uc3Qga3BpVmFsdWUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IGlzUGVyY2VudGFnZSA/IHVuZGVmaW5lZCA6IFwic2hvcnRcIixcblx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAxLFxuXHRcdFx0XHRzaG93U2NhbGU6ICFpc1BlcmNlbnRhZ2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZWAsIGtwaVZhbHVlKTtcblxuXHRcdC8vIFZhbHVlIHdpdGhvdXQgYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlVW5zY2FsZWQgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDIsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2UsXG5cdFx0XHRcdGdyb3VwaW5nRW5hYmxlZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdChyYXdWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlVW5zY2FsZWRgLCBrcGlWYWx1ZVVuc2NhbGVkKTtcblxuXHRcdC8vIFZhbHVlIGZvcm1hdHRlZCB3aXRoIHRoZSBzY2FsZSBvbWl0dGVkXG5cdFx0Y29uc3Qga3BpVmFsdWVOb1NjYWxlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdChyYXdWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlTm9TY2FsZWAsIGtwaVZhbHVlTm9TY2FsZSk7XG5cblx0XHQvLyBTY2FsZSBvZiB0aGUgdmFsdWVcblx0XHRjb25zdCBrcGlWYWx1ZVNjYWxlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdGRlY2ltYWxzOiAwLFxuXHRcdFx0XHRtYXhJbnRlZ2VyRGlnaXRzOiAwLFxuXHRcdFx0XHRzaG93U2NhbGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlYCwga3BpVmFsdWVTY2FsZSk7XG5cblx0XHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0XHQvLyBVbml0IG9yIGN1cnJlbmN5XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQgJiYgcmF3VW5pdCkge1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQuaXNDdXJyZW5jeSkge1xuXHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdGAsIHJhd1VuaXQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSBvZiB1bml0IG9mIG1lYXN1cmUsIHdlIGhhdmUgdG8gZm9ybWF0IGl0IHByb3Blcmx5XG5cdFx0XHRcdGNvbnN0IGtwaVVuaXQgPSBOdW1iZXJGb3JtYXQuZ2V0VW5pdEluc3RhbmNlKHsgc2hvd051bWJlcjogZmFsc2UgfSwgY3VycmVudExvY2FsZSkuZm9ybWF0KHJhd1ZhbHVlLCByYXdVbml0KTtcblx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCBrcGlVbml0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5KGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdGxldCBjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSAhPSBudWxsKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBpcyBhIGZpeGVkIHZhbHVlXG5cdFx0XHRjcml0aWNhbGl0eVZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZTtcblx0XHR9IGVsc2UgaWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgY29tZXMgZnJvbSBhbm90aGVyIHByb3BlcnR5ICh2aWEgYSBwYXRoKVxuXHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9XG5cdFx0XHRcdE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5W2twaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKV0gfHwgTWVzc2FnZVR5cGUuTm9uZTtcblx0XHR9IGVsc2UgaWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzICYmIGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlICE9IG51bGwpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGNhbGN1bGF0aW9uXG5cdFx0XHRzd2l0Y2ggKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvVGFyZ2V0XCI6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbVRhcmdldENhbGN1bGF0aW9uKHJhd1ZhbHVlLCBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NaW5pbWl6ZVwiOlxuXHRcdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlVHlwZUZyb21NaW5pbWl6ZUNhbGN1bGF0aW9uKFxuXHRcdFx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NYXhpbWl6ZVwiOlxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlVHlwZUZyb21NYXhpbWl6ZUNhbGN1bGF0aW9uKFxuXHRcdFx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpbkNyaXRpY2FsaXR5YCwgY3JpdGljYWxpdHlWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFxuXHRcdFx0YC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluU3RhdGVgLFxuXHRcdFx0VmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZVtjcml0aWNhbGl0eVZhbHVlXSB8fCBcIk5vbmVcIlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZURhdGFwb2ludFRyZW5kKGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdGxldCB0cmVuZFZhbHVlID0gXCJOb25lXCI7XG5cblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRWYWx1ZSkge1xuXHRcdFx0Ly8gVHJlbmQgaXMgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0dHJlbmRWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kVmFsdWU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpIHtcblx0XHRcdC8vIFRyZW5kIGNvbWVzIGZyb20gYW5vdGhlciBwcm9wZXJ0eSB2aWEgYSBwYXRoXG5cdFx0XHR0cmVuZFZhbHVlID0gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbVRyZW5kVHlwZShrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aCkpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUgIT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGhcblx0XHQpIHtcblx0XHRcdC8vIENhbGN1bGF0ZWQgdHJlbmRcblx0XHRcdGxldCB0cmVuZFJlZmVyZW5jZVZhbHVlOiBudW1iZXI7XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dHJlbmRSZWZlcmVuY2VWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChcblx0XHRcdFx0XHRrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIHx8IFwiXCIpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0cmVuZFZhbHVlID0gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbUNhbGN1bGF0aW9uKFxuXHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0dHJlbmRSZWZlcmVuY2VWYWx1ZSxcblx0XHRcdFx0ISFrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSxcblx0XHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblRyZXNob2xkc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZGAsIHRyZW5kVmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVUYXJnZXRWYWx1ZShrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjsgLy8gTm8gdGFyZ2V0IHNldCBmb3IgdGhlIEtQSVxuXHRcdH1cblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoTG9jYWxpemF0aW9uLmdldExhbmd1YWdlKCkpO1xuXG5cdFx0bGV0IHRhcmdldFJhd1ZhbHVlOiBudW1iZXI7XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRhcmdldFJhd1ZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldFJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoIHx8IFwiXCIpKTtcblx0XHR9XG5cdFx0Y29uc3QgZGV2aWF0aW9uUmF3VmFsdWUgPSB0YXJnZXRSYXdWYWx1ZSAhPT0gMCA/ICgocmF3VmFsdWUgLSB0YXJnZXRSYXdWYWx1ZSkgLyB0YXJnZXRSYXdWYWx1ZSkgKiAxMDAgOiB1bmRlZmluZWQ7XG5cblx0XHQvLyBGb3JtYXR0aW5nXG5cdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAxLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHRhcmdldFJhd1ZhbHVlKTtcblx0XHRjb25zdCB0YXJnZXRTY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0XHRkZWNpbWFsczogMCxcblx0XHRcdFx0bWF4SW50ZWdlckRpZ2l0czogMCxcblx0XHRcdFx0c2hvd1NjYWxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHRhcmdldFJhd1ZhbHVlKTtcblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldE51bWJlcmAsIHRhcmdldFZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXRVbml0YCwgdGFyZ2V0U2NhbGUpO1xuXG5cdFx0aWYgKGRldmlhdGlvblJhd1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRldmlhdGlvblZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHRcdCkuZm9ybWF0KGRldmlhdGlvblJhd1ZhbHVlKTtcblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlcmAsIGRldmlhdGlvblZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyYCwgXCJOL0FcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIExvYWRzIHRhZyBkYXRhIGZvciBhIEtQSSwgYW5kIHN0b3JlcyBpdCBpbiB0aGUgSlNPTiBLUEkgbW9kZWwuXG5cdCAqIEBwYXJhbSBrcGlEZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBLUEkuXG5cdCAqIEBwYXJhbSBvTWFpbk1vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGRhdGEuXG5cdCAqIEBwYXJhbSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSBzdG9yZWRcblx0ICogQHBhcmFtIGxvYWRGdWxsIElmIG5vdCB0cnVlLCBsb2FkcyBvbmx5IGRhdGEgZm9yIHRoZSBLUEkgdGFnXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBsb2FkS1BJVGFnRGF0YShcblx0XHRrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbixcblx0XHRvTWFpbk1vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdG9LUElNb2RlbDogSlNPTk1vZGVsLFxuXHRcdGxvYWRGdWxsPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0W10+IHtcblx0XHQvLyBJZiBsb2FkRnVsbD1mYWxzZSwgdGhlbiB3ZSdyZSBqdXN0IGxvYWRpbmcgZGF0YSBmb3IgdGhlIHRhZyBhbmQgd2UgdXNlIHRoZSBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgZ3JvdXBJRFxuXHRcdC8vIElmIGxvYWRGdWxsPXRydWUsIHdlJ3JlIGxvYWRpbmcgZGF0YSBmb3IgdGhlIHdob2xlIEtQSSAodGFnICsgY2FyZCkgYW5kIHdlIHVzZSB0aGUgXCIkYXV0by5Xb3JrZXJzXCIgZ3JvdXBJRFxuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IGxvYWRGdWxsXG5cdFx0XHQ/IG9NYWluTW9kZWwuYmluZExpc3Qoa3BpRGVmaW5pdGlvbi5jb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uV29ya2Vyc1wiIH0pXG5cdFx0XHQ6IG9NYWluTW9kZWwuYmluZExpc3Qoa3BpRGVmaW5pdGlvbi5jb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uTG9uZ1J1bm5lcnNcIiB9KTtcblx0XHRjb25zdCBvQWdncmVnYXRlOiBSZWNvcmQ8c3RyaW5nLCB7IHVuaXQ/OiBzdHJpbmcgfT4gPSB7fTtcblxuXHRcdC8vIE1haW4gdmFsdWUgKyBjdXJyZW5jeS91bml0XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzUGF0aCkge1xuXHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGhdID0geyB1bml0OiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LnZhbHVlIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoXSA9IHt9O1xuXHRcdH1cblxuXHRcdC8vIFByb3BlcnR5IGZvciBjcml0aWNhbGl0eVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoXSA9IHt9O1xuXHRcdH1cblxuXHRcdC8vIFByb3BlcnRpZXMgZm9yIHRyZW5kIGFuZCB0cmVuZCBjYWxjdWxhdGlvblxuXHRcdGlmIChsb2FkRnVsbCkge1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aCkge1xuXHRcdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCkge1xuXHRcdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoXSA9IHt9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9MaXN0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7IGFnZ3JlZ2F0ZTogb0FnZ3JlZ2F0ZSB9KTtcblxuXHRcdC8vIE1hbmFnZSBTZWxlY3Rpb25WYXJpYW50IGZpbHRlcnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYUZpbHRlcnMgPSBrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5tYXAoY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24pLmZpbHRlcigoZmlsdGVyKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXIgIT09IHVuZGVmaW5lZDtcblx0XHRcdH0pIGFzIEZpbHRlcltdO1xuXHRcdFx0b0xpc3RCaW5kaW5nLmZpbHRlcihhRmlsdGVycyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9MaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMSkudGhlbigoYUNvbnRleHRzOiBDb250ZXh0W10pOiB2b2lkID0+IHtcblx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHJhd1VuaXQgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGhcblx0XHRcdFx0XHQ/IGFDb250ZXh0c1swXS5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LnZhbHVlKVxuXHRcdFx0XHRcdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8udmFsdWU7XG5cblx0XHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQgJiYgIXJhd1VuaXQpIHtcblx0XHRcdFx0XHQvLyBBIHVuaXQvY3VycmVuY3kgaXMgZGVmaW5lZCwgYnV0IGl0cyB2YWx1ZSBpcyB1bmRlZmluZWQgLS0+IG11bHRpLXVuaXQgc2l0dWF0aW9uXG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlYCwgXCIqXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVVuc2NhbGVkYCwgXCIqXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZU5vU2NhbGVgLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlU2NhbGVgLCBcIlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdGAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpbkNyaXRpY2FsaXR5YCwgTWVzc2FnZVR5cGUuTm9uZSk7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblN0YXRlYCwgXCJOb25lXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RyZW5kYCwgXCJOb25lXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldE51bWJlcmAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0VW5pdGAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyYCwgdW5kZWZpbmVkKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3koa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50Q3JpdGljYWxpdHkoa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXG5cdFx0XHRcdFx0aWYgKGxvYWRGdWxsKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZURhdGFwb2ludFRyZW5kKGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlVGFyZ2V0VmFsdWUoa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvYWRzIGNhcmQgZGF0YSBmb3IgYSBLUEksIGFuZCBzdG9yZXMgaXQgaW4gdGhlIEpTT04gS1BJIG1vZGVsLlxuXHQgKiBAcGFyYW0ga3BpRGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgS1BJLlxuXHQgKiBAcGFyYW0gb01haW5Nb2RlbCBUaGUgbW9kZWwgdXNlZCB0byBsb2FkIHRoZSBkYXRhLlxuXHQgKiBAcGFyYW0gb0tQSU1vZGVsIFRoZSBKU09OIG1vZGVsIHdoZXJlIHRoZSBkYXRhIHdpbGwgYmUgc3RvcmVkXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBsb2FkS1BJQ2FyZERhdGEoXG5cdFx0a3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sXG5cdFx0b01haW5Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRvS1BJTW9kZWw6IEpTT05Nb2RlbFxuXHQpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0W10+IHtcblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvTWFpbk1vZGVsLmJpbmRMaXN0KGtwaURlZmluaXRpb24uY29udGV4dFBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHtcblx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0by5Xb3JrZXJzXCJcblx0XHR9KTtcblx0XHRjb25zdCBvR3JvdXA6IFJlY29yZDxzdHJpbmcsIE9iamVjdD4gPSB7fTtcblx0XHRjb25zdCBvQWdncmVnYXRlOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3Q+ID0ge307XG5cblx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMuZm9yRWFjaCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRvR3JvdXBbZGltZW5zaW9uLm5hbWVdID0ge307XG5cdFx0fSk7XG5cdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5mb3JFYWNoKChtZWFzdXJlKSA9PiB7XG5cdFx0XHRvQWdncmVnYXRlW21lYXN1cmUubmFtZV0gPSB7fTtcblx0XHR9KTtcblx0XHRvTGlzdEJpbmRpbmcuc2V0QWdncmVnYXRpb24oe1xuXHRcdFx0Z3JvdXA6IG9Hcm91cCxcblx0XHRcdGFnZ3JlZ2F0ZTogb0FnZ3JlZ2F0ZVxuXHRcdH0pO1xuXG5cdFx0Ly8gTWFuYWdlIFNlbGVjdGlvblZhcmlhbnQgZmlsdGVyc1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBhRmlsdGVycyA9IGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zLm1hcChjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbikuZmlsdGVyKChmaWx0ZXIpID0+IHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlciAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0fSkgYXMgRmlsdGVyW107XG5cdFx0XHRvTGlzdEJpbmRpbmcuZmlsdGVyKGFGaWx0ZXJzKTtcblx0XHR9XG5cblx0XHQvLyBTb3J0aW5nXG5cdFx0aWYgKGtwaURlZmluaXRpb24uY2hhcnQuc29ydE9yZGVyKSB7XG5cdFx0XHRvTGlzdEJpbmRpbmcuc29ydChcblx0XHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5zb3J0T3JkZXIubWFwKChzb3J0SW5mbykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgU29ydGVyKHNvcnRJbmZvLm5hbWUsIHNvcnRJbmZvLmRlc2NlbmRpbmcpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCBrcGlEZWZpbml0aW9uLmNoYXJ0Lm1heEl0ZW1zKS50aGVuKChhQ29udGV4dHM6IENvbnRleHRbXSk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgY2hhcnREYXRhID0gYUNvbnRleHRzLm1hcChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0RhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5mb3JFYWNoKChkaW1lbnNpb24pID0+IHtcblx0XHRcdFx0XHRvRGF0YVtkaW1lbnNpb24ubmFtZV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24ubmFtZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0Lm1lYXN1cmVzLmZvckVhY2goKG1lYXN1cmUpID0+IHtcblx0XHRcdFx0XHRvRGF0YVttZWFzdXJlLm5hbWVdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkobWVhc3VyZS5uYW1lKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIG9EYXRhO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2NoYXJ0RGF0YWAsIGNoYXJ0RGF0YSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcG9wb3ZlciB0byBkaXNwbGF5IHRoZSBLUEkgY2FyZFxuXHQgKiBUaGUgcG9wb3ZlciBhbmQgdGhlIGNvbnRhaW5lZCBjYXJkIGZvciB0aGUgS1BJcyBhcmUgY3JlYXRlZCBpZiBuZWNlc3NhcnkuXG5cdCAqIFRoZSBwb3BvdmVyIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBLUElzLCBzbyBpdCdzIGNyZWF0ZWQgb25seSBvbmNlLlxuXHQgKiBAcGFyYW0gb0tQSVRhZyBUaGUgdGFnIHRoYXQgdHJpZ2dlcmVkIHRoZSBwb3BvdmVyIG9wZW5pbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBzaGFyZWQgcG9wb3ZlciBhcyBhIHByb21pc2UuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgZ2V0UG9wb3ZlcihvS1BJVGFnOiBHZW5lcmljVGFnKTogUHJvbWlzZTxQb3BvdmVyPiB7XG5cdFx0aWYgKCF0aGlzLm9Qb3BvdmVyKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRMaWJyYXJ5LmxvYWQoeyBuYW1lOiBcInNhcC91aS9pbnRlZ3JhdGlvblwiIH0pXG5cdFx0XHRcdFx0LnRoZW4oKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VpL2ludGVncmF0aW9uL3dpZGdldHMvQ2FyZFwiLCBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCJdLCAoLi4ucGFyYW1zOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgQ2FyZENsYXNzID0gcGFyYW1zWzBdIGFzIHR5cGVvZiBDYXJkVHlwZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgSG9zdCA9IHBhcmFtc1sxXSBhcyB0eXBlb2YgSG9zdFR5cGU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9Ib3N0ID0gbmV3IEhvc3QoKTtcblxuXHRcdFx0XHRcdFx0XHRvSG9zdC5hdHRhY2hBY3Rpb24oKG9FdmVudDogSG9zdCRBY3Rpb25FdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNUeXBlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInR5cGVcIik7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwYXJhbWV0ZXJzXCIpIGFzIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRvdXRib3VuZDogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoc1R5cGUgPT09IFwiTmF2aWdhdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1BhcmFtcy5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmJhc2UuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvUGFyYW1zLnNlbWFudGljT2JqZWN0LCBvUGFyYW1zLmFjdGlvbik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmJhc2UuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZU91dGJvdW5kKG9QYXJhbXMub3V0Ym91bmQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5vQ2FyZCA9IG5ldyBDYXJkQ2xhc3Moe1xuXHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcImF1dG9cIlxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRIb3N0KG9Ib3N0IGFzIHVua25vd24gYXMgQ29udHJvbCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5vUG9wb3ZlciA9IG5ldyBQb3BvdmVyKFwia3BpLVBvcG92ZXJcIiwge1xuXHRcdFx0XHRcdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlbWVudDogXCJBdXRvXCIsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogW3RoaXMub0NhcmRdXG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdG9LUElUYWcuYWRkRGVwZW5kZW50KHRoaXMub1BvcG92ZXIpOyAvLyBUaGUgZmlyc3QgY2xpY2tlZCB0YWcgZ2V0cyB0aGUgcG9wb3ZlciBhcyBkZXBlbmRlbnRcblxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRoaXMub1BvcG92ZXIpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLm9Qb3BvdmVyKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgb25LUElQcmVzc2VkKG9LUElUYWc6IEdlbmVyaWNUYWcsIGtwaUlEOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvS1BJTW9kZWwgPSBvS1BJVGFnLmdldE1vZGVsKFwia3BpTW9kZWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdFx0aWYgKHRoaXMuYUtQSURlZmluaXRpb25zICYmIHRoaXMuYUtQSURlZmluaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3Qga3BpRGVmaW5pdGlvbiA9IHRoaXMuYUtQSURlZmluaXRpb25zLmZpbmQoZnVuY3Rpb24gKG9EZWYpIHtcblx0XHRcdFx0cmV0dXJuIChvRGVmIGFzIEFuYWx5dGljYWxLUElEZWZpbml0aW9uKS5pZCA9PT0ga3BpSUQ7XG5cdFx0XHR9KSBhcyBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24pIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvS1BJVGFnLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblxuXHRcdFx0XHRcdGNvbnN0IHBvcG92ZXIgPSBhd2FpdCB0aGlzLmdldFBvcG92ZXIob0tQSVRhZyk7XG5cblx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldE1hbmlmZXN0KG9LUElNb2RlbC5nZXRQcm9wZXJ0eShgLyR7a3BpSUR9L21hbmlmZXN0YCkpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0UHJldmlld01vZGUoXCJBYnN0cmFjdFwiKTsgLy8gRGlzcGxheSBwbGFjZWhvbGRlcnMgaW4gdGhlIGNhcmQgdW50aWwgZGF0YSBpcyBsb2FkZWRcblx0XHRcdFx0XHRwb3BvdmVyLm9wZW5CeShvS1BJVGFnLCBmYWxzZSk7IC8vIE9wZW4gdGhlIHBvcG92ZXIgaW1tZWRpYXRlbHlcblxuXHRcdFx0XHRcdGNvbnN0IHByb21pc2VzID0gW1xuXHRcdFx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbCwgdHJ1ZSksXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRLUElDYXJkRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbClcblx0XHRcdFx0XHRdO1xuXG5cdFx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0TWFuaWZlc3Qob0tQSU1vZGVsLmdldFByb3BlcnR5KGAvJHtrcGlJRH0vbWFuaWZlc3RgKSk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRQcmV2aWV3TW9kZShcIk9mZlwiKTsgLy8gRGlzcGxheSByZWFsIGRhdGEgaW4gdGhlIGNhcmRcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVyciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBZ0NBLE1BQU1BLDBCQUF1RCxHQUFHO0lBQy9ELEdBQUcsRUFBRUMsV0FBVyxDQUFDQyxLQUFLO0lBQ3RCLEdBQUcsRUFBRUQsV0FBVyxDQUFDRSxPQUFPO0lBQ3hCLEdBQUcsRUFBRUYsV0FBVyxDQUFDRyxPQUFPO0lBQ3hCLEdBQUcsRUFBRUgsV0FBVyxDQUFDSTtFQUNsQixDQUFDO0VBRUQsTUFBTUMseUJBQXNELEdBQUc7SUFDOURKLEtBQUssRUFBRSxPQUFPO0lBQ2RDLE9BQU8sRUFBRSxVQUFVO0lBQ25CQyxPQUFPLEVBQUUsTUFBTTtJQUNmQyxXQUFXLEVBQUUsTUFBTTtJQUNuQkUsSUFBSSxFQUFFO0VBQ1AsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxnQ0FBZ0NBLENBQUNDLFFB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LElBQUksQ0FBQ3RDLFVBQVUsQ0FBQ0MsT0FBTyxDQUFDO1lBRTlDLElBQUksQ0FBQ3lCLEtBQUssQ0FBQ2EsV0FBVyxDQUFDM0ssU0FBUyxDQUFDNkMsV0FBVyxDQUFDLElBQUkwSCxLQUFLLFdBQVcsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQ1QsS0FBSyxDQUFDYyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN2Q0YsT0FBTyxDQUFDRyxNQUFNLENBQUN4QyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzs7WUFFaEMsTUFBTXlDLFFBQVEsR0FBRyxDQUNoQixJQUFJLENBQUN0SCxjQUFjLENBQUN6RCxhQUFhLEVBQUUwSyxNQUFNLEVBQUV6SyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQzNELElBQUksQ0FBQ3VILGVBQWUsQ0FBQ3hILGFBQWEsRUFBRTBLLE1BQU0sRUFBRXpLLFNBQVMsQ0FBQyxDQUN0RDtZQUVELE1BQU1sQixPQUFPLENBQUNpTSxHQUFHLENBQUNELFFBQVEsQ0FBQztZQUMzQixJQUFJLENBQUNoQixLQUFLLENBQUNhLFdBQVcsQ0FBQzNLLFNBQVMsQ0FBQzZDLFdBQVcsQ0FBQyxJQUFJMEgsS0FBSyxXQUFXLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUNULEtBQUssQ0FBQ2tCLE9BQU8sQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQ2xCLEtBQUssQ0FBQ2MsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDbkMsQ0FBQyxDQUFDLE9BQU92SCxHQUFHLEVBQUU7WUFDYkMsR0FBRyxDQUFDQyxLQUFLLENBQUNGLEdBQWEsQ0FBQztVQUN6QjtRQUNEO01BQ0Q7SUFDRCxDQUFDO0lBQUEsT0FBQXBFLGdDQUFBO0VBQUEsRUE3bUI2Q2dNLG1CQUFtQixJQUFBQyx5QkFBQSxDQUFBMUwsT0FBQSxDQUFBSyxTQUFBLGFBQUFULEtBQUEsR0FBQStMLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQTVMLE9BQUEsQ0FBQUssU0FBQSxhQUFBTCxPQUFBLENBQUFLLFNBQUEsR0FBQXFMLHlCQUFBLENBQUExTCxPQUFBLENBQUFLLFNBQUEsYUFBQVAsS0FBQSxHQUFBNkwsTUFBQSxDQUFBQyx3QkFBQSxDQUFBNUwsT0FBQSxDQUFBSyxTQUFBLGFBQUFMLE9BQUEsQ0FBQUssU0FBQSxJQUFBTCxPQUFBLE1BQUFELE1BQUE7RUFBQSxPQWduQm5ETixnQ0FBZ0M7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
1045
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZSIsIk5vbmUiLCJtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbiIsImtwaVZhbHVlIiwiYVRocmVzaG9sZHMiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwidW5kZWZpbmVkIiwibWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbiIsIm1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24iLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwidHJlbmRWYWx1ZSIsImRldmlhdGlvbkluZGljYXRvciIsImRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbiIsInJlZmVyZW5jZVZhbHVlIiwiaXNSZWxhdGl2ZSIsImNvbXBWYWx1ZSIsImNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uIiwiZmlsdGVyRGVmaW5pdGlvbiIsInJhbmdlcyIsImxlbmd0aCIsIkZpbHRlciIsInByb3BlcnR5UGF0aCIsIm9wZXJhdG9yIiwicmFuZ2VMb3ciLCJyYW5nZUhpZ2giLCJhUmFuZ2VGaWx0ZXJzIiwibWFwIiwicmFuZ2UiLCJmaWx0ZXJzIiwiYW5kIiwiZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24iLCJjdXJyZW50TG9jYWxlIiwiTG9jYWxlIiwiTG9jYWxpemF0aW9uIiwiZ2V0TGFuZ3VhZ2UiLCJyZXNCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkYXRlRm9ybWF0IiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsInN0eWxlIiwiZm9ybWF0UmFuZ2UiLCJ2YWx1ZUxvdyIsInByb3BlcnR5VHlwZSIsImluZGV4T2YiLCJmb3JtYXQiLCJEYXRlIiwidmFsdWVIaWdoIiwiZ2V0VGV4dCIsImpvaW4iLCJmb3JtYXRDaGFydFRpdGxlIiwia3BpRGVmIiwiZm9ybWF0TGlzdCIsIml0ZW1zIiwibGFiZWwiLCJyZXMiLCJJIiwiY2hhcnQiLCJ0aXRsZSIsIm1lYXN1cmVzIiwiZGltZW5zaW9ucyIsInVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyIsImNoYXJ0RGVmaW5pdGlvbiIsIm9DaGFydFByb3BlcnRpZXMiLCJjaGFydFR5cGUiLCJjYXRlZ29yeUF4aXMiLCJ2aXNpYmxlIiwidmFsdWVBeGlzIiwiZm9ybWF0U3RyaW5nIiwicGxvdEFyZWEiLCJkYXRhTGFiZWwiLCJ0eXBlIiwidmFsdWVBeGlzMiIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwicG9zaXRpb24iLCJhbGlnbm1lbnQiLCJzaXplTGVnZW5kIiwiZmlsdGVyTWFwIiwiYU9iamVjdHMiLCJhUm9sZXMiLCJmaWx0ZXIiLCJkaW1lbnNpb24iLCJpbmNsdWRlcyIsInJvbGUiLCJnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyIsImF4aXMxTWVhc3VyZXMiLCJheGlzMk1lYXN1cmVzIiwiYXhpczNNZWFzdXJlcyIsIm90aGVyTWVhc3VyZXMiLCJzZXJpZXNEaW1lbnNpb25zIiwic2hhcGVEaW1lbnNpb24iLCJmaW5kIiwieE1lYXN1cmUiLCJzaGlmdCIsInlNZWFzdXJlIiwidWlkIiwidmFsdWVzIiwic2l6ZU1lYXN1cmUiLCJwdXNoIiwiZ2V0Q2hhcnRGZWVkcyIsImdldE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2SW5mbyIsIm9TaGVsbFNlcnZpY2UiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldExpbmtzIiwidGhlbiIsImFMaW5rcyIsImdldFByaW1hcnlJbnRlbnQiLCJvTGluayIsIm9JbmZvIiwicGFyc2VTaGVsbEhhc2giLCJpbnRlbnQiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJvdXRib3VuZE5hdmlnYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dGJvdW5kIiwiS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24iLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfaW5oZXJpdHNMb29zZSIsImNhbGwiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0Q2FyZE1hbmlmZXN0Iiwia3BpRGVmaW5pdGlvbiIsIm9LUElNb2RlbCIsIl9rcGlEZWZpbml0aW9uJHNlbGVjdCIsIm9DYXJkTWFuaWZlc3QiLCJpZCIsInRlY2hub2xvZ3kiLCJkYXRhIiwianNvbiIsImhlYWRlciIsImRhdGFwb2ludCIsInN1YlRpdGxlIiwiZGVzY3JpcHRpb24iLCJ1bml0T2ZNZWFzdXJlbWVudCIsIm1haW5JbmRpY2F0b3IiLCJudW1iZXIiLCJ1bml0Iiwic3RhdGUiLCJ0cmVuZCIsImNvbnRlbnQiLCJtaW5IZWlnaHQiLCJjaGFydFByb3BlcnRpZXMiLCJwYXRoIiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwic2lkZUluZGljYXRvcnMiLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJhRGVzY3JpcHRpb25zIiwiZm9yRWFjaCIsImRlc2MiLCJkZXRhaWxzIiwidGV4dCIsInZhbHVlIiwibmFtZSIsIm1lYXN1cmUiLCJmZWVkcyIsInNldFByb3BlcnR5IiwibWFuaWZlc3QiLCJpbml0TmF2aWdhdGlvbkluZm8iLCJuYXZpZ2F0aW9uIiwib05hdkluZm8iLCJwYXJhbWV0ZXJzIiwib25Jbml0IiwiX2dldFBhZ2VNb2RlbCIsImFLUElEZWZpbml0aW9ucyIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0UHJvcGVydHkiLCJvVmlldyIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsImdldFNoZWxsU2VydmljZXMiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwibG9hZEtQSVRhZ0RhdGEiLCJnZXRNb2RlbCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJ1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5Iiwia3BpQ29udGV4dCIsIl9rcGlEZWZpbml0aW9uJGRhdGFwbyIsIl9rcGlEZWZpbml0aW9uJGRhdGFwbzIiLCJfa3BpRGVmaW5pdGlvbiRkYXRhcG8zIiwicmF3VW5pdCIsImlzUGF0aCIsImlzUGVyY2VudGFnZSIsImlzQ3VycmVuY3kiLCJyYXdWYWx1ZSIsIk51bWJlciIsInBhcnNlRmxvYXQiLCJOdW1iZXJGb3JtYXQiLCJnZXRGbG9hdEluc3RhbmNlIiwibWluRnJhY3Rpb25EaWdpdHMiLCJtYXhGcmFjdGlvbkRpZ2l0cyIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInNob3dTY2FsZSIsImtwaVZhbHVlVW5zY2FsZWQiLCJncm91cGluZ0VuYWJsZWQiLCJrcGlWYWx1ZU5vU2NhbGUiLCJrcGlWYWx1ZVNjYWxlIiwiZGVjaW1hbHMiLCJtYXhJbnRlZ2VyRGlnaXRzIiwia3BpVW5pdCIsImdldFVuaXRJbnN0YW5jZSIsInNob3dOdW1iZXIiLCJ1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eSIsImNyaXRpY2FsaXR5VmFsdWUiLCJjcml0aWNhbGl0eVBhdGgiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlIiwidXBkYXRlRGF0YXBvaW50VHJlbmQiLCJ0cmVuZFBhdGgiLCJ0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUiLCJ0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCIsInRyZW5kUmVmZXJlbmNlVmFsdWUiLCJ0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSIsInRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHMiLCJ1cGRhdGVUYXJnZXRWYWx1ZSIsInRhcmdldFJhd1ZhbHVlIiwiZGV2aWF0aW9uUmF3VmFsdWUiLCJ0YXJnZXRTY2FsZSIsImRldmlhdGlvblZhbHVlIiwib01haW5Nb2RlbCIsImxvYWRGdWxsIiwiX2twaURlZmluaXRpb24kZGF0YXBvNCIsIl9rcGlEZWZpbml0aW9uJHNlbGVjdDIiLCJvTGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImNvbnRleHRQYXRoIiwiJCRncm91cElkIiwib0FnZ3JlZ2F0ZSIsInNldEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRlIiwiYUZpbHRlcnMiLCJyZXF1ZXN0Q29udGV4dHMiLCJhQ29udGV4dHMiLCJfa3BpRGVmaW5pdGlvbiRkYXRhcG81IiwiX2twaURlZmluaXRpb24kZGF0YXBvNiIsImxvYWRLUElDYXJkRGF0YSIsIl9rcGlEZWZpbml0aW9uJHNlbGVjdDMiLCJvR3JvdXAiLCJhZGRpdGlvbmFsbHkiLCJncm91cCIsInNvcnRPcmRlciIsInNvcnQiLCJzb3J0SW5mbyIsIlNvcnRlciIsImRlc2NlbmRpbmciLCJhbGxDb250ZXh0cyIsIm1heEl0ZW1zIiwiY2hhcnREYXRhIiwib0NvbnRleHQiLCJvRGF0YSIsInRleHRBcnJhbmdlbWVudCIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhCcmFja2V0cyIsImdldFBvcG92ZXIiLCJvS1BJVGFnIiwiX3RoaXMiLCJvUG9wb3ZlciIsInJlamVjdCIsImxvYWQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJfbGVuIiwiYXJndW1lbnRzIiwicGFyYW1zIiwiQXJyYXkiLCJfa2V5IiwiQ2FyZENsYXNzIiwiSG9zdCIsIm9Ib3N0IiwiYXR0YWNoQWN0aW9uIiwib0V2ZW50Iiwic1R5cGUiLCJnZXRQYXJhbWV0ZXIiLCJvUGFyYW1zIiwiYmFzZSIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRlT3V0Ym91bmQiLCJvQ2FyZCIsIndpZHRoIiwiaGVpZ2h0Iiwic2V0SG9zdCIsIlBvcG92ZXIiLCJzaG93SGVhZGVyIiwicGxhY2VtZW50IiwiYWRkRGVwZW5kZW50Iiwib25LUElQcmVzc2VkIiwia3BpSUQiLCJvRGVmIiwib01vZGVsIiwicG9wb3ZlciIsInNldE1vZGFsIiwic2V0TWFuaWZlc3QiLCJzZXRQcmV2aWV3TW9kZSIsIm9wZW5CeSIsInByb21pc2VzIiwiYWxsIiwiYXR0YWNoRXZlbnRPbmNlIiwiX3RoaXMkb0NhcmQkZ2V0Rm9jdXNEIiwiZ2V0Rm9jdXNEb21SZWYiLCJmb2N1cyIsInJlZnJlc2giLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiS1BJTWFuYWdlbWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBMb2NhbGl6YXRpb24gZnJvbSBcInNhcC9iYXNlL2kxOG4vTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgbWV0aG9kT3ZlcnJpZGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbmFseXRpY2FsS1BJRGVmaW5pdGlvbixcblx0S1BJQ2hhcnREZWZpbml0aW9uLFxuXHRLUElEZWZpbml0aW9uLFxuXHROYXZpZ2F0aW9uSW5mb1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckRlZmluaXRpb24sIFJhbmdlRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvU2VsZWN0aW9uVmFyaWFudEhlbHBlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgR2VuZXJpY1RhZyBmcm9tIFwic2FwL20vR2VuZXJpY1RhZ1wiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcInNhcC91aS9jb3JlL0xvY2FsZVwiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgTnVtYmVyRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvTnVtYmVyRm9ybWF0XCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IHR5cGUgSG9zdFR5cGUgZnJvbSBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCI7XG5pbXBvcnQgdHlwZSB7IEhvc3QkQWN0aW9uRXZlbnQgfSBmcm9tIFwic2FwL3VpL2ludGVncmF0aW9uL0hvc3RcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBDYXJkLCBDYXJkTWFuaWZlc3QsIGRlZmF1bHQgYXMgQ2FyZFR5cGUsIENoYXJ0Q2FyZENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2ludGVncmF0aW9uL3dpZGdldHMvQ2FyZFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcblxuY29uc3QgTWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHk6IFJlY29yZDxzdHJpbmcsIE1lc3NhZ2VUeXBlPiA9IHtcblx0XCIxXCI6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcIjJcIjogTWVzc2FnZVR5cGUuV2FybmluZyxcblx0XCIzXCI6IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MsXG5cdFwiNVwiOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvblxufTtcblxuY29uc3QgVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZTogUmVjb3JkPE1lc3NhZ2VUeXBlLCBzdHJpbmc+ID0ge1xuXHRFcnJvcjogXCJFcnJvclwiLFxuXHRXYXJuaW5nOiBcIkNyaXRpY2FsXCIsXG5cdFN1Y2Nlc3M6IFwiR29vZFwiLFxuXHRJbmZvcm1hdGlvbjogXCJOb25lXCIsXG5cdE5vbmU6IFwiTm9uZVwiXG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnVGFyZ2V0Jy5cbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUsRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVdLlxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgTWVzc2FnZVR5cGVcbiAqL1xuZnVuY3Rpb24gbWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1s1XSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzVdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbNV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbNF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1s0XSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzRdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbM10gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1szXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzNdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH1cblxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIHN0YXRlIGZyb20gYSBjYWxjdWxhdGVkIGNyaXRpY2FsaXR5IG9mIHR5cGUgJ01pbmltaXplJy5cbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0FjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSxUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZV0uXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21NaW5pbWl6ZUNhbGN1bGF0aW9uKGtwaVZhbHVlOiBudW1iZXIsIGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IE1lc3NhZ2VUeXBlO1xuXG5cdGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH1cblxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIHN0YXRlIGZyb20gYSBjYWxjdWxhdGVkIGNyaXRpY2FsaXR5IG9mIHR5cGUgJ01heGltaXplJy5cbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZV0uXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21NYXhpbWl6ZUNhbGN1bGF0aW9uKGtwaVZhbHVlOiBudW1iZXIsIGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IE1lc3NhZ2VUeXBlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH1cblxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgYSBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWUgZnJvbSBhIHRyZW5kIHZhbHVlLlxuICogQHBhcmFtIHRyZW5kVmFsdWUgVGhlIGNyaXRpY2FsaXR5IHZhbHVlcy5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIERldmlhdGlvbkluZGljYXRvciB2YWx1ZVxuICovXG5mdW5jdGlvbiBkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlKHRyZW5kVmFsdWU6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBkZXZpYXRpb25JbmRpY2F0b3I6IHN0cmluZztcblxuXHRzd2l0Y2ggKHRyZW5kVmFsdWUpIHtcblx0XHRjYXNlIDE6IC8vIFN0cm9uZ1VwXG5cdFx0Y2FzZSBcIjFcIjpcblx0XHRjYXNlIDI6IC8vIFVwXG5cdFx0Y2FzZSBcIjJcIjpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSA0OiAvLyBEb3duXG5cdFx0Y2FzZSBcIjRcIjpcblx0XHRjYXNlIDU6IC8vIFN0cm9uZ0Rvd25cblx0XHRjYXNlIFwiNVwiOlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJEb3duXCI7XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIk5vbmVcIjtcblx0fVxuXG5cdHJldHVybiBkZXZpYXRpb25JbmRpY2F0b3I7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGEgRGV2aWF0aW9uSW5kaWNhdG9yIGZyb20gYSBUcmVuZENhbGN1bGF0aW9uLlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJXG4gKiBAcGFyYW0gcmVmZXJlbmNlVmFsdWUgVGhlIHJlZmVyZW5jZSB2YWx1ZSB0byBjb21wYXJlIHdpdGhcbiAqIEBwYXJhbSBpc1JlbGF0aXZlIFRydWUgaXMgdGhlIGNvbXBhcmlzb24gaXMgcmVsYXRpdmVcbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBBcnJheSBvZiB0aHJlc2hvbGRzIFtTdHJvbmdEb3duRGlmZmVyZW5jZSwgRG93bkRpZmZlcmVuY2UsIFVwRGlmZmVyZW5jZSwgU3Ryb25nVXBEaWZmZXJlbmNlXVxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbihcblx0a3BpVmFsdWU6IG51bWJlcixcblx0cmVmZXJlbmNlVmFsdWU6IG51bWJlcixcblx0aXNSZWxhdGl2ZTogYm9vbGVhbixcblx0YVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuXHRsZXQgZGV2aWF0aW9uSW5kaWNhdG9yOiBzdHJpbmc7XG5cblx0aWYgKCFhVGhyZXNob2xkcyB8fCAoaXNSZWxhdGl2ZSAmJiAhcmVmZXJlbmNlVmFsdWUpKSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG5cblx0Y29uc3QgY29tcFZhbHVlID0gaXNSZWxhdGl2ZSA/IChrcGlWYWx1ZSAtIHJlZmVyZW5jZVZhbHVlKSAvIHJlZmVyZW5jZVZhbHVlIDoga3BpVmFsdWUgLSByZWZlcmVuY2VWYWx1ZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPD0gYVRocmVzaG9sZHNbMF0pIHtcblx0XHQvLyBTdHJvbmdEb3duIC0tPiBEb3duXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJEb3duXCI7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPD0gYVRocmVzaG9sZHNbMV0pIHtcblx0XHQvLyBEb3duIC0tPiBEb3duXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJEb3duXCI7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbM10gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1szXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPj0gYVRocmVzaG9sZHNbM10pIHtcblx0XHQvLyBTdHJvbmdVcCAtLT4gVXBcblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIlVwXCI7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBjb21wVmFsdWUgPj0gYVRocmVzaG9sZHNbMl0pIHtcblx0XHQvLyBVcCAtLT4gVXBcblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIlVwXCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU2lkZXdheXMgLS0+IE5vbmVcblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIk5vbmVcIjtcblx0fVxuXG5cdHJldHVybiBkZXZpYXRpb25JbmRpY2F0b3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSBhIGZpbHRlciBkZWZpbml0aW9uLlxuICogQHBhcmFtIGZpbHRlckRlZmluaXRpb24gVGhlIGZpbHRlciBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIHRoZSBkZWZpbml0aW9uLCBvciB1bmRlZmluZWQgaWYgdGhlIGRlZmluaXRpb24gaXMgZW1wdHkgKG5vIHJhbmdlcylcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbjogRmlsdGVyRGVmaW5pdGlvbik6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcixcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLnJhbmdlTG93LFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ucmFuZ2VIaWdoXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBhUmFuZ2VGaWx0ZXJzID0gZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKChyYW5nZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsIHJhbmdlLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCByYW5nZS5yYW5nZUxvdywgcmFuZ2UucmFuZ2VIaWdoKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBhUmFuZ2VGaWx0ZXJzLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShMb2NhbGl6YXRpb24uZ2V0TGFuZ3VhZ2UoKSk7XG5cdGNvbnN0IHJlc0J1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdGNvbnN0IGRhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSh7IHN0eWxlOiBcIm1lZGl1bVwiIH0sIGN1cnJlbnRMb2NhbGUpO1xuXG5cdGZ1bmN0aW9uIGZvcm1hdFJhbmdlKHJhbmdlOiBSYW5nZURlZmluaXRpb24pOiBzdHJpbmcge1xuXHRcdGNvbnN0IHZhbHVlTG93ID1cblx0XHRcdGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlUeXBlLmluZGV4T2YoXCJFZG0uRGF0ZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKHJhbmdlLnJhbmdlTG93KSlcblx0XHRcdFx0OiAocmFuZ2UucmFuZ2VMb3cgYXMgc3RyaW5nKTtcblx0XHRjb25zdCB2YWx1ZUhpZ2ggPVxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVR5cGUuaW5kZXhPZihcIkVkbS5EYXRlXCIpID09PSAwICYmIHJhbmdlLnJhbmdlSGlnaCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUocmFuZ2UucmFuZ2VIaWdoKSlcblx0XHRcdFx0OiByYW5nZS5yYW5nZUhpZ2g7XG5cblx0XHRzd2l0Y2ggKHJhbmdlLm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiQlRcIjpcblx0XHRcdFx0cmV0dXJuIGBbJHt2YWx1ZUxvd30gLSAke3ZhbHVlSGlnaH1dYDtcblxuXHRcdFx0Y2FzZSBcIkNvbnRhaW5zXCI6XG5cdFx0XHRcdHJldHVybiBgKiR7dmFsdWVMb3d9KmA7XG5cblx0XHRcdGNhc2UgXCJHRVwiOlxuXHRcdFx0XHRyZXR1cm4gYFxcdTIyNjUke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJHVFwiOlxuXHRcdFx0XHRyZXR1cm4gYD4ke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJMRVwiOlxuXHRcdFx0XHRyZXR1cm4gYFxcdTIyNjQke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJMVFwiOlxuXHRcdFx0XHRyZXR1cm4gYDwke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJOQlwiOlxuXHRcdFx0XHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfRklMVEVSU1RSSU5HX05PVFwiLCBbYFske3ZhbHVlTG93fSAtICR7dmFsdWVIaWdofV1gXSk7XG5cblx0XHRcdGNhc2UgXCJORVwiOlxuXHRcdFx0XHRyZXR1cm4gYFxcdTIyNjAke3ZhbHVlTG93fWA7XG5cblx0XHRcdGNhc2UgXCJOb3RDb250YWluc1wiOlxuXHRcdFx0XHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfRklMVEVSU1RSSU5HX05PVFwiLCBbYCoke3ZhbHVlTG93fSpgXSk7XG5cblx0XHRcdGNhc2UgXCJFUVwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlTG93O1xuXHRcdH1cblx0fVxuXHRpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0gZWxzZSBpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJhbmdlKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYCgke2ZpbHRlckRlZmluaXRpb24ucmFuZ2VzLm1hcChmb3JtYXRSYW5nZSkuam9pbihcIixcIil9KWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0Q2hhcnRUaXRsZShrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogc3RyaW5nIHtcblx0Y29uc3QgcmVzQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRmdW5jdGlvbiBmb3JtYXRMaXN0KGl0ZW1zOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10pOiBzdHJpbmcge1xuXHRcdGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gaXRlbXNbMF0ubGFiZWw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCByZXMgPSBpdGVtc1swXS5sYWJlbDtcblx0XHRcdGZvciAobGV0IEkgPSAxOyBJIDwgaXRlbXMubGVuZ3RoIC0gMTsgSSsrKSB7XG5cdFx0XHRcdHJlcyArPSBgLCAke2l0ZW1zW0ldLmxhYmVsfWA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9JVEVNU0xJU1RcIiwgW3JlcywgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ubGFiZWxdKTtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY2hhcnQgaGFzIGEgdGl0bGUsIHVzZSBpdC4gT3RoZXJ3aXNlLCBjcmVhdGUgYSB0aXRsZSBmcm9tIHRoZSBkaW1lbnNpb25zIGFuZCBtZWFzdXJlc1xuXHRyZXR1cm4gKFxuXHRcdGtwaURlZi5jaGFydC50aXRsZSA/P1xuXHRcdHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0NIQVJUVElUTEVcIiwgW2Zvcm1hdExpc3Qoa3BpRGVmLmNoYXJ0Lm1lYXN1cmVzKSwgZm9ybWF0TGlzdChrcGlEZWYuY2hhcnQuZGltZW5zaW9ucyldKVxuXHQpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGFydExhYmVsU2V0dGluZ3MoXG5cdGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uLFxuXHRvQ2hhcnRQcm9wZXJ0aWVzOiB7XG5cdFx0Y2F0ZWdvcnlBeGlzOiB7IHRpdGxlOiB7IHZpc2libGU6IGJvb2xlYW4gfSB9O1xuXHRcdHNpemVMZWdlbmQ6IHsgdmlzaWJsZTogYm9vbGVhbiB9O1xuXHRcdGxlZ2VuZEdyb3VwOiB7IGxheW91dDogeyBwb3NpdGlvbjogc3RyaW5nOyBhbGlnbm1lbnQ6IHN0cmluZyB9IH07XG5cdFx0dmFsdWVBeGlzOiB7XG5cdFx0XHR0aXRsZTogeyB2aXNpYmxlOiBib29sZWFuIH07XG5cdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRmb3JtYXRTdHJpbmc6IHN0cmluZztcblx0XHRcdH07XG5cdFx0fTtcblx0XHR2YWx1ZUF4aXMyOiB7XG5cdFx0XHR0aXRsZTogeyB2aXNpYmxlOiBib29sZWFuIH07XG5cdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRmb3JtYXRTdHJpbmc6IHN0cmluZztcblx0XHRcdH07XG5cdFx0fTtcblx0XHRwbG90QXJlYToge1xuXHRcdFx0ZGF0YUxhYmVsOiB7fTtcblx0XHR9O1xuXHR9XG4pOiB2b2lkIHtcblx0c3dpdGNoIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlKSB7XG5cdFx0Y2FzZSBcIkRvbnV0XCI6XG5cdFx0XHQvLyBTaG93IGRhdGEgbGFiZWxzLCBkbyBub3Qgc2hvdyBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5jYXRlZ29yeUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7XG5cdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwidmFsdWVcIixcblx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRfTUZEMlwiXG5cdFx0XHR9O1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiYnViYmxlXCI6XG5cdFx0XHQvLyBTaG93IGF4aXMgdGl0bGUsIGJ1YmJsZSBzaXplIGxlZ2VuZCwgZG8gbm90IHNob3cgZGF0YSBsYWJlbHNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpczIgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMubGVnZW5kR3JvdXAgPSB7XG5cdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdGFsaWdubWVudDogXCJ0b3BMZWZ0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuc2l6ZUxlZ2VuZCA9IHtcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0geyB2aXNpYmxlOiBmYWxzZSB9O1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwic2NhdHRlclwiOlxuXHRcdFx0Ly8gRG8gbm90IHNob3cgZGF0YSBsYWJlbHMgYW5kIGF4aXMgdGl0bGVzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzMiA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0geyB2aXNpYmxlOiBmYWxzZSB9O1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gRG8gbm90IHNob3cgZGF0YSBsYWJlbHMgYW5kIGF4aXMgdGl0bGVzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmNhdGVnb3J5QXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0fVxufVxuZnVuY3Rpb24gZmlsdGVyTWFwKGFPYmplY3RzOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgcm9sZT86IHN0cmluZyB9W10sIGFSb2xlcz86IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBzdHJpbmdbXSB7XG5cdGlmIChhUm9sZXMgJiYgYVJvbGVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBhT2JqZWN0c1xuXHRcdFx0LmZpbHRlcigoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhUm9sZXMuaW5jbHVkZXMoZGltZW5zaW9uLnJvbGUpO1xuXHRcdFx0fSlcblx0XHRcdC5tYXAoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZGltZW5zaW9uLmxhYmVsO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGFPYmplY3RzLm1hcCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGltZW5zaW9uLmxhYmVsO1xuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNjYXR0ZXJCdWJibGVDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uKTogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXSB7XG5cdGNvbnN0IGF4aXMxTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzMVwiXSk7XG5cdGNvbnN0IGF4aXMyTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzMlwiXSk7XG5cdGNvbnN0IGF4aXMzTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzM1wiXSk7XG5cdGNvbnN0IG90aGVyTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbdW5kZWZpbmVkXSk7XG5cdGNvbnN0IHNlcmllc0RpbWVuc2lvbnMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFtcIlNlcmllc1wiXSk7XG5cblx0Ly8gR2V0IHRoZSBmaXJzdCBkaW1lbnNpb24gd2l0aCByb2xlIFwiQ2F0ZWdvcnlcIiBmb3IgdGhlIHNoYXBlXG5cdGNvbnN0IHNoYXBlRGltZW5zaW9uID0gY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMuZmluZCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0cmV0dXJuIGRpbWVuc2lvbi5yb2xlID09PSBcIkNhdGVnb3J5XCI7XG5cdH0pO1xuXG5cdC8vIE1lYXN1cmUgZm9yIHRoZSB4LUF4aXMgOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMSwgb3IgZm9yIEF4aXMyIGlmIG5vdCBmb3VuZCwgb3IgZm9yIEF4aXMzIGlmIG5vdCBmb3VuZFxuXHRjb25zdCB4TWVhc3VyZSA9IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMk1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczNNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHQvLyBNZWFzdXJlIGZvciB0aGUgeS1BeGlzIDogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczIsIG9yIHNlY29uZCBtZWFzdXJlIGZvciBBeGlzMSBpZiBub3QgZm91bmQsIG9yIGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMzIGlmIG5vdCBmb3VuZFxuXHRjb25zdCB5TWVhc3VyZSA9IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczNNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHRjb25zdCByZXMgPSBbXG5cdFx0e1xuXHRcdFx0dWlkOiBcInZhbHVlQXhpc1wiLFxuXHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHR2YWx1ZXM6IFt4TWVhc3VyZV1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHVpZDogXCJ2YWx1ZUF4aXMyXCIsXG5cdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdHZhbHVlczogW3lNZWFzdXJlXVxuXHRcdH1cblx0XTtcblxuXHRpZiAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSA9PT0gXCJidWJibGVcIikge1xuXHRcdC8vIE1lYXN1cmUgZm9yIHRoZSBzaXplIG9mIHRoZSBidWJibGU6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMzLCBvciByZW1haW5pbmcgbWVhc3VyZSBmb3IgQXhpczEvQXhpczIgaWYgbm90IGZvdW5kXG5cdFx0Y29uc3Qgc2l6ZU1lYXN1cmUgPSBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBvdGhlck1lYXN1cmVzLnNoaWZ0KCkgfHwgXCJcIjtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHR1aWQ6IFwiYnViYmxlV2lkdGhcIixcblx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0dmFsdWVzOiBbc2l6ZU1lYXN1cmVdXG5cdFx0fSk7XG5cdH1cblxuXHQvLyBDb2xvciAob3B0aW9uYWwpXG5cdGlmIChzZXJpZXNEaW1lbnNpb25zLmxlbmd0aCkge1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdHVpZDogXCJjb2xvclwiLFxuXHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdHZhbHVlczogc2VyaWVzRGltZW5zaW9uc1xuXHRcdH0pO1xuXHR9XG5cdC8vIFNoYXBlIChvcHRpb25hbClcblx0aWYgKHNoYXBlRGltZW5zaW9uKSB7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0dWlkOiBcInNoYXBlXCIsXG5cdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0dmFsdWVzOiBbc2hhcGVEaW1lbnNpb24ubGFiZWxdXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRGZWVkcyhjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbik6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W10ge1xuXHRsZXQgcmVzOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdO1xuXG5cdHN3aXRjaCAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSkge1xuXHRcdGNhc2UgXCJEb251dFwiOlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcInNpemVcIixcblx0XHRcdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zKVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiYnViYmxlXCI6XG5cdFx0Y2FzZSBcInNjYXR0ZXJcIjpcblx0XHRcdHJlcyA9IGdldFNjYXR0ZXJCdWJibGVDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbik7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJ2ZXJ0aWNhbF9idWxsZXRcIjpcblx0XHRcdHJlcyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJhY3R1YWxWYWx1ZXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFt1bmRlZmluZWQsIFwiQXhpczFcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwidGFyZ2V0VmFsdWVzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzMlwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjYXRlZ29yeUF4aXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbdW5kZWZpbmVkLCBcIkNhdGVnb3J5XCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcInZhbHVlQXhpc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcylcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjYXRlZ29yeUF4aXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbdW5kZWZpbmVkLCBcIkNhdGVnb3J5XCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblBhcmFtZXRlcnMoXG5cdG5hdkluZm86IE5hdmlnYXRpb25JbmZvLFxuXHRvU2hlbGxTZXJ2aWNlOiBJU2hlbGxTZXJ2aWNlc1xuKTogUHJvbWlzZTx7IHNlbWFudGljT2JqZWN0Pzogc3RyaW5nOyBhY3Rpb24/OiBzdHJpbmc7IG91dGJvdW5kPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ+IHtcblx0aWYgKG5hdkluZm8uc2VtYW50aWNPYmplY3QpIHtcblx0XHRpZiAobmF2SW5mby5hY3Rpb24pIHtcblx0XHRcdC8vIEFjdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZDogY2hlY2sgaWYgaXQncyBhdmFpbGFibGUgaW4gdGhlIHNoZWxsXG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5nZXRMaW5rcyhbeyBzZW1hbnRpY09iamVjdDogbmF2SW5mby5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBuYXZJbmZvLmFjdGlvbiB9XSkudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhTGlua3MubGVuZ3RoICYmIGFMaW5rc1swXS5sZW5ndGggPyB7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UgZ2V0IHRoZSBwcmltYXJ5IGludGVudCBmcm9tIHRoZSBzaGVsbFxuXHRcdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuZ2V0UHJpbWFyeUludGVudChuYXZJbmZvLnNlbWFudGljT2JqZWN0KS50aGVuKChvTGluaykgPT4ge1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gTm8gcHJpbWFyeSBpbnRlbnQuLi5cblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgcHJpbWFyeSBpbnRlbnQgaXMgbm90IHBhcnQgb2YgdGhlIHVuYXZhaWxhYmxlIGFjdGlvbnNcblx0XHRcdFx0Y29uc3Qgb0luZm8gPSBvU2hlbGxTZXJ2aWNlLnBhcnNlU2hlbGxIYXNoKG9MaW5rLmludGVudCk7XG5cdFx0XHRcdHJldHVybiBuYXZJbmZvLnVuYXZhaWxhYmxlQWN0aW9ucyAmJiBuYXZJbmZvLnVuYXZhaWxhYmxlQWN0aW9ucy5pbmNsdWRlcyhvSW5mby5hY3Rpb24pXG5cdFx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0XHQ6IHsgc2VtYW50aWNPYmplY3Q6IG9JbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG9JbmZvLmFjdGlvbiB9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE91dGJvdW5kIG5hdmlnYXRpb24gc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdHJldHVybiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiA/IFByb21pc2UucmVzb2x2ZSh7IG91dGJvdW5kOiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiB9KSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG59XG5cbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgbWFuYWdpbmcgdGhlIEtQSXMgaW4gYW4gYW5hbHl0aWNhbCBsaXN0IHBhZ2UuXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAc2luY2UgMS45My4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLktQSU1hbmFnZW1lbnRcIilcbmNsYXNzIEtQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByb3RlY3RlZCBhS1BJRGVmaW5pdGlvbnM/OiBLUElEZWZpbml0aW9uW107XG5cblx0cHJvdGVjdGVkIG9DYXJkITogQ2FyZDtcblxuXHRwcm90ZWN0ZWQgb1BvcG92ZXIhOiBQb3BvdmVyO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY2FyZCBtYW5pZmVzdCBmb3IgYSBLUEkgZGVmaW5pdGlvbiBhbmQgc3RvcmVzIGl0IGluIGEgSlNPTiBtb2RlbC5cblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIEtQSSBkZWZpbml0aW9uXG5cdCAqIEBwYXJhbSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgaW4gd2hpY2ggdGhlIG1hbmlmZXN0IHdpbGwgYmUgc3RvcmVkXG5cdCAqL1xuXHRwcm90ZWN0ZWQgaW5pdENhcmRNYW5pZmVzdChrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRjb25zdCBvQ2FyZE1hbmlmZXN0OiBDYXJkTWFuaWZlc3Q8UGFydGlhbDxDaGFydENhcmRDb250ZW50Pj4gPSB7XG5cdFx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0XHRpZDogXCJzYXAuZmUuS1BJQ2FyZFwiLFxuXHRcdFx0XHR0eXBlOiBcImNhcmRcIlxuXHRcdFx0fSxcblx0XHRcdFwic2FwLnVpXCI6IHtcblx0XHRcdFx0dGVjaG5vbG9neTogXCJVSTVcIlxuXHRcdFx0fSxcblx0XHRcdFwic2FwLmNhcmRcIjoge1xuXHRcdFx0XHR0eXBlOiBcIkFuYWx5dGljYWxcIixcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdGpzb246IHt9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGhlYWRlcjoge1xuXHRcdFx0XHRcdHR5cGU6IFwiTnVtZXJpY1wiLFxuXHRcdFx0XHRcdHRpdGxlOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50aXRsZSxcblx0XHRcdFx0XHRzdWJUaXRsZToga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuZGVzY3JpcHRpb24sXG5cdFx0XHRcdFx0dW5pdE9mTWVhc3VyZW1lbnQ6IFwie21haW5Vbml0fVwiLFxuXHRcdFx0XHRcdG1haW5JbmRpY2F0b3I6IHtcblx0XHRcdFx0XHRcdG51bWJlcjogXCJ7bWFpblZhbHVlTm9TY2FsZX1cIixcblx0XHRcdFx0XHRcdHVuaXQ6IFwie21haW5WYWx1ZVNjYWxlfVwiLFxuXHRcdFx0XHRcdFx0c3RhdGU6IFwie21haW5TdGF0ZX1cIixcblx0XHRcdFx0XHRcdHRyZW5kOiBcInt0cmVuZH1cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudDoge1xuXHRcdFx0XHRcdG1pbkhlaWdodDogXCIyNXJlbVwiLFxuXHRcdFx0XHRcdGNoYXJ0UHJvcGVydGllczoge1xuXHRcdFx0XHRcdFx0cGxvdEFyZWE6IHt9LFxuXHRcdFx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpZ25tZW50OiBcImxlZnRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0cGF0aDogXCIvY2hhcnREYXRhXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gQWRkIHNpZGUgaW5kaWNhdG9ycyBpbiB0aGUgY2FyZCBoZWFkZXIgaWYgYSB0YXJnZXQgaXMgZGVmaW5lZCBmb3IgdGhlIEtQSVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoIHx8IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHJlc0J1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uaGVhZGVyLnNpZGVJbmRpY2F0b3JzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lORElDQVRPUl9UQVJHRVRcIiksXG5cdFx0XHRcdFx0bnVtYmVyOiBcInt0YXJnZXROdW1iZXJ9XCIsXG5cdFx0XHRcdFx0dW5pdDogXCJ7dGFyZ2V0VW5pdH1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lORElDQVRPUl9ERVZJQVRJT05cIiksXG5cdFx0XHRcdFx0bnVtYmVyOiBcIntkZXZpYXRpb25OdW1iZXJ9XCIsXG5cdFx0XHRcdFx0dW5pdDogXCIlXCJcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHR9XG5cblx0XHQvLyBEZXRhaWxzIG9mIHRoZSBjYXJkOiBmaWx0ZXIgZGVzY3JpcHRpb25zXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFEZXNjcmlwdGlvbnM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5mb3JFYWNoKChmaWx0ZXJEZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uKTtcblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRhRGVzY3JpcHRpb25zLnB1c2goZGVzYyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoYURlc2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmhlYWRlci5kZXRhaWxzID0gYURlc2NyaXB0aW9ucy5qb2luKFwiLCBcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2hhcnQgc2V0dGluZ3M6IHR5cGUsIHRpdGxlLCBkaW1lbnNpb25zIGFuZCBtZWFzdXJlcyBpbiB0aGUgbWFuaWZlc3Rcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFR5cGUgPSBrcGlEZWZpbml0aW9uLmNoYXJ0LmNoYXJ0VHlwZTtcblx0XHR1cGRhdGVDaGFydExhYmVsU2V0dGluZ3Moa3BpRGVmaW5pdGlvbi5jaGFydCwgb0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRQcm9wZXJ0aWVzKTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFByb3BlcnRpZXMudGl0bGUudGV4dCA9IGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmaW5pdGlvbik7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZGltZW5zaW9ucyA9IGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5tYXAoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbGFiZWw6IGRpbWVuc2lvbi5sYWJlbCwgdmFsdWU6IGB7JHtkaW1lbnNpb24ubmFtZX19YCB9O1xuXHRcdH0pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50Lm1lYXN1cmVzID0ga3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5tYXAoKG1lYXN1cmUpID0+IHtcblx0XHRcdHJldHVybiB7IGxhYmVsOiBtZWFzdXJlLmxhYmVsLCB2YWx1ZTogYHske21lYXN1cmUubmFtZX19YCB9O1xuXHRcdH0pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmZlZWRzID0gZ2V0Q2hhcnRGZWVkcyhrcGlEZWZpbml0aW9uLmNoYXJ0KTtcblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH1gLCB7XG5cdFx0XHRtYW5pZmVzdDogb0NhcmRNYW5pZmVzdFxuXHRcdH0pO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFzeW5jIGluaXROYXZpZ2F0aW9uSW5mbyhcblx0XHRrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbixcblx0XHRvS1BJTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRvU2hlbGxTZXJ2aWNlOiBJU2hlbGxTZXJ2aWNlc1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBBZGQgbmF2aWdhdGlvblxuXHRcdGlmIChrcGlEZWZpbml0aW9uLm5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBnZXROYXZpZ2F0aW9uUGFyYW1ldGVycyhrcGlEZWZpbml0aW9uLm5hdmlnYXRpb24sIG9TaGVsbFNlcnZpY2UpLnRoZW4oKG9OYXZJbmZvKSA9PiB7XG5cdFx0XHRcdGlmIChvTmF2SW5mbykge1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvaGVhZGVyL2FjdGlvbnNgLCBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvTmF2SW5mb1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLmFLUElEZWZpbml0aW9ucyA9ICh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIva3BpRGVmaW5pdGlvbnNcIik7XG5cblx0XHRpZiAodGhpcy5hS1BJRGVmaW5pdGlvbnMgJiYgdGhpcy5hS1BJRGVmaW5pdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXIpLmdldEFwcENvbXBvbmVudCgpO1xuXG5cdFx0XHQvLyBDcmVhdGUgYSBKU09OIG1vZGVsIHRvIHN0b3JlIEtQSSBkYXRhXG5cdFx0XHRjb25zdCBvS1BJTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0XHRvVmlldy5zZXRNb2RlbChvS1BJTW9kZWwsIFwia3BpTW9kZWxcIik7XG5cblx0XHRcdHRoaXMuYUtQSURlZmluaXRpb25zLmZvckVhY2goKGtwaURlZmluaXRpb24pID0+IHtcblx0XHRcdFx0Ly8gV2Ugb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0IGFuYWx5dGljYWwgS1BJIGRlZmluaXRpb25cblx0XHRcdFx0aWYgKGtwaURlZmluaXRpb24udHlwZSA9PT0gXCJBbmFseXRpY2FsXCIpIHtcblx0XHRcdFx0XHQvLyBDcmVhdGUgdGhlIG1hbmlmZXN0IGZvciB0aGUgS1BJIGNhcmQgYW5kIHN0b3JlIGl0IGluIHRoZSBLUEkgbW9kZWxcblx0XHRcdFx0XHR0aGlzLmluaXRDYXJkTWFuaWZlc3Qoa3BpRGVmaW5pdGlvbiwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHRcdC8vIFNldCB0aGUgbmF2aWdhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0XHR0aGlzLmluaXROYXZpZ2F0aW9uSW5mbyhrcGlEZWZpbml0aW9uLCBvS1BJTW9kZWwsIG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpKS5jYXRjaChmdW5jdGlvbiAoZXJyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gTG9hZCB0YWcgZGF0YSBmb3IgdGhlIEtQSVxuXHRcdFx0XHRcdHRoaXMubG9hZEtQSVRhZ0RhdGEoa3BpRGVmaW5pdGlvbiwgb0FwcENvbXBvbmVudC5nZXRNb2RlbCgpLCBvS1BJTW9kZWwpLmNhdGNoKGZ1bmN0aW9uIChlcnI6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkV4aXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0tQSU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJrcGlNb2RlbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0XHRpZiAob0tQSU1vZGVsKSB7XG5cdFx0XHRvS1BJTW9kZWwuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50VmFsdWVBbmRDdXJyZW5jeShrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShMb2NhbGl6YXRpb24uZ2V0TGFuZ3VhZ2UoKSk7XG5cdFx0Y29uc3QgcmF3VW5pdCA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzUGF0aFxuXHRcdFx0PyBrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQudmFsdWUpXG5cdFx0XHQ6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LnZhbHVlO1xuXG5cdFx0Y29uc3QgaXNQZXJjZW50YWdlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNDdXJyZW5jeSA9PT0gZmFsc2UgJiYgcmF3VW5pdCA9PT0gXCIlXCI7XG5cblx0XHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0XHQvLyBNYWluIEtQSSB2YWx1ZVxuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdC8vIFZhbHVlIGZvcm1hdHRlZCB3aXRoIGEgc2NhbGVcblx0XHRjb25zdCBrcGlWYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IGtwaURlZmluaXRpb24uZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA/PyAxLFxuXHRcdFx0XHRzaG93U2NhbGU6ICFpc1BlcmNlbnRhZ2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZWAsIGtwaVZhbHVlKTtcblxuXHRcdC8vIFZhbHVlIHdpdGhvdXQgYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlVW5zY2FsZWQgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IGtwaURlZmluaXRpb24uZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA/PyAyLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGluZ0VuYWJsZWQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVVuc2NhbGVkYCwga3BpVmFsdWVVbnNjYWxlZCk7XG5cblx0XHQvLyBWYWx1ZSBmb3JtYXR0ZWQgd2l0aCB0aGUgc2NhbGUgb21pdHRlZFxuXHRcdGNvbnN0IGtwaVZhbHVlTm9TY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IGtwaURlZmluaXRpb24uZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA/PyAxLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVOb1NjYWxlYCwga3BpVmFsdWVOb1NjYWxlKTtcblxuXHRcdC8vIFNjYWxlIG9mIHRoZSB2YWx1ZVxuXHRcdGNvbnN0IGtwaVZhbHVlU2NhbGUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IGlzUGVyY2VudGFnZSA/IHVuZGVmaW5lZCA6IFwic2hvcnRcIixcblx0XHRcdFx0ZGVjaW1hbHM6IDAsXG5cdFx0XHRcdG1heEludGVnZXJEaWdpdHM6IDAsXG5cdFx0XHRcdHNob3dTY2FsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdChyYXdWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlU2NhbGVgLCBrcGlWYWx1ZVNjYWxlKTtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIFVuaXQgb3IgY3VycmVuY3lcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdCAmJiByYXdVbml0KSB7XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC5pc0N1cnJlbmN5KSB7XG5cdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Vbml0YCwgcmF3VW5pdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbiBjYXNlIG9mIHVuaXQgb2YgbWVhc3VyZSwgd2UgaGF2ZSB0byBmb3JtYXQgaXQgcHJvcGVybHlcblx0XHRcdFx0Y29uc3Qga3BpVW5pdCA9IE51bWJlckZvcm1hdC5nZXRVbml0SW5zdGFuY2UoeyBzaG93TnVtYmVyOiBmYWxzZSB9LCBjdXJyZW50TG9jYWxlKS5mb3JtYXQocmF3VmFsdWUsIHJhd1VuaXQpO1xuXHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdGAsIGtwaVVuaXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50Q3JpdGljYWxpdHkoa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0bGV0IGNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlICE9IG51bGwpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGlzIGEgZml4ZWQgdmFsdWVcblx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBjb21lcyBmcm9tIGFub3RoZXIgcHJvcGVydHkgKHZpYSBhIHBhdGgpXG5cdFx0XHRjcml0aWNhbGl0eVZhbHVlID1cblx0XHRcdFx0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlba3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpXSB8fCBNZXNzYWdlVHlwZS5Ob25lO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMgJiYga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUgIT0gbnVsbCkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgY2FsY3VsYXRpb25cblx0XHRcdHN3aXRjaCAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24ocmF3VmFsdWUsIGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01pbmltaXplXCI6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01heGltaXplXCI6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluQ3JpdGljYWxpdHlgLCBjcml0aWNhbGl0eVZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZWAsXG5cdFx0XHRWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlW2NyaXRpY2FsaXR5VmFsdWVdIHx8IFwiTm9uZVwiXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0bGV0IHRyZW5kVmFsdWUgPSBcIk5vbmVcIjtcblxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFZhbHVlKSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhIGZpeGVkIHZhbHVlXG5cdFx0XHR0cmVuZFZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRWYWx1ZTtcblx0XHR9IGVsc2UgaWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aCkge1xuXHRcdFx0Ly8gVHJlbmQgY29tZXMgZnJvbSBhbm90aGVyIHByb3BlcnR5IHZpYSBhIHBhdGhcblx0XHRcdHRyZW5kVmFsdWUgPSBkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlKGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aFxuXHRcdCkge1xuXHRcdFx0Ly8gQ2FsY3VsYXRlZCB0cmVuZFxuXHRcdFx0bGV0IHRyZW5kUmVmZXJlbmNlVmFsdWU6IG51bWJlcjtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJlbmRSZWZlcmVuY2VWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KFxuXHRcdFx0XHRcdGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGggfHwgXCJcIilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHRyZW5kVmFsdWUgPSBkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24oXG5cdFx0XHRcdHJhd1ZhbHVlLFxuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlLFxuXHRcdFx0XHQhIWtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlLFxuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RyZW5kYCwgdHJlbmRWYWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVRhcmdldFZhbHVlKGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuOyAvLyBObyB0YXJnZXQgc2V0IGZvciB0aGUgS1BJXG5cdFx0fVxuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblx0XHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShMb2NhbGl6YXRpb24uZ2V0TGFuZ3VhZ2UoKSk7XG5cblx0XHRsZXQgdGFyZ2V0UmF3VmFsdWU6IG51bWJlcjtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGFyZ2V0UmF3VmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0UmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggfHwgXCJcIikpO1xuXHRcdH1cblx0XHRjb25zdCBkZXZpYXRpb25SYXdWYWx1ZSA9IHRhcmdldFJhd1ZhbHVlICE9PSAwID8gKChyYXdWYWx1ZSAtIHRhcmdldFJhd1ZhbHVlKSAvIHRhcmdldFJhd1ZhbHVlKSAqIDEwMCA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIEZvcm1hdHRpbmdcblx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IGtwaURlZmluaXRpb24uZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA/PyAxLCAvLyBVc2UgdGhlIHNhbWUgcHJlY2lzaW9uIGFzIHRoZSBtYWluIHZhbHVlXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQodGFyZ2V0UmF3VmFsdWUpO1xuXHRcdGNvbnN0IHRhcmdldFNjYWxlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdGRlY2ltYWxzOiAwLFxuXHRcdFx0XHRtYXhJbnRlZ2VyRGlnaXRzOiAwLFxuXHRcdFx0XHRzaG93U2NhbGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQodGFyZ2V0UmF3VmFsdWUpO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0TnVtYmVyYCwgdGFyZ2V0VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRgLCB0YXJnZXRTY2FsZSk7XG5cblx0XHRpZiAoZGV2aWF0aW9uUmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGV2aWF0aW9uVmFsdWUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAxLFxuXHRcdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdFx0KS5mb3JtYXQoZGV2aWF0aW9uUmF3VmFsdWUpO1xuXHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyYCwgZGV2aWF0aW9uVmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9kZXZpYXRpb25OdW1iZXJgLCBcIk4vQVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgdGFnIGRhdGEgZm9yIGEgS1BJLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBKU09OIEtQSSBtb2RlbC5cblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcGFyYW0gbG9hZEZ1bGwgSWYgbm90IHRydWUsIGxvYWRzIG9ubHkgZGF0YSBmb3IgdGhlIEtQSSB0YWdcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIGRhdGEgaXMgbG9hZGVkLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFzeW5jIGxvYWRLUElUYWdEYXRhKFxuXHRcdGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLFxuXHRcdG9NYWluTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0b0tQSU1vZGVsOiBKU09OTW9kZWwsXG5cdFx0bG9hZEZ1bGw/OiBib29sZWFuXG5cdCk6IFByb21pc2U8dm9pZCB8IENvbnRleHRbXT4ge1xuXHRcdC8vIElmIGxvYWRGdWxsPWZhbHNlLCB0aGVuIHdlJ3JlIGp1c3QgbG9hZGluZyBkYXRhIGZvciB0aGUgdGFnIGFuZCB3ZSB1c2UgdGhlIFwiJGF1dG8uTG9uZ1J1bm5lcnNcIiBncm91cElEXG5cdFx0Ly8gSWYgbG9hZEZ1bGw9dHJ1ZSwgd2UncmUgbG9hZGluZyBkYXRhIGZvciB0aGUgd2hvbGUgS1BJICh0YWcgKyBjYXJkKSBhbmQgd2UgdXNlIHRoZSBcIiRhdXRvLldvcmtlcnNcIiBncm91cElEXG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gbG9hZEZ1bGxcblx0XHRcdD8gb01haW5Nb2RlbC5iaW5kTGlzdChrcGlEZWZpbml0aW9uLmNvbnRleHRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7ICQkZ3JvdXBJZDogXCIkYXV0by5Xb3JrZXJzXCIgfSlcblx0XHRcdDogb01haW5Nb2RlbC5iaW5kTGlzdChrcGlEZWZpbml0aW9uLmNvbnRleHRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7ICQkZ3JvdXBJZDogXCIkYXV0by5Mb25nUnVubmVyc1wiIH0pO1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIHsgdW5pdD86IHN0cmluZyB9PiA9IHt9O1xuXG5cdFx0Ly8gTWFpbiB2YWx1ZSArIGN1cnJlbmN5L3VuaXRcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoKSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aF0gPSB7IHVuaXQ6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQudmFsdWUgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGhdID0ge307XG5cdFx0fVxuXG5cdFx0Ly8gUHJvcGVydHkgZm9yIGNyaXRpY2FsaXR5XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCkge1xuXHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGhdID0ge307XG5cdFx0fVxuXG5cdFx0Ly8gUHJvcGVydGllcyBmb3IgdHJlbmQgYW5kIHRyZW5kIGNhbGN1bGF0aW9uXG5cdFx0aWYgKGxvYWRGdWxsKSB7XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCkge1xuXHRcdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b0xpc3RCaW5kaW5nLnNldEFnZ3JlZ2F0aW9uKHsgYWdncmVnYXRlOiBvQWdncmVnYXRlIH0pO1xuXG5cdFx0Ly8gTWFuYWdlIFNlbGVjdGlvblZhcmlhbnQgZmlsdGVyc1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBhRmlsdGVycyA9IGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zLm1hcChjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbikuZmlsdGVyKChmaWx0ZXIpID0+IHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlciAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0fSkgYXMgRmlsdGVyW107XG5cdFx0XHRvTGlzdEJpbmRpbmcuZmlsdGVyKGFGaWx0ZXJzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCAxKS50aGVuKChhQ29udGV4dHM6IENvbnRleHRbXSk6IHZvaWQgPT4ge1xuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcmF3VW5pdCA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzUGF0aFxuXHRcdFx0XHRcdD8gYUNvbnRleHRzWzBdLmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQudmFsdWUpXG5cdFx0XHRcdFx0OiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py52YWx1ZTtcblxuXHRcdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdCAmJiAhcmF3VW5pdCkge1xuXHRcdFx0XHRcdC8vIEEgdW5pdC9jdXJyZW5jeSBpcyBkZWZpbmVkLCBidXQgaXRzIHZhbHVlIGlzIHVuZGVmaW5lZCAtLT4gbXVsdGktdW5pdCBzaXR1YXRpb25cblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVgLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlVW5zY2FsZWRgLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlTm9TY2FsZWAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVTY2FsZWAsIFwiXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Vbml0YCwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluQ3JpdGljYWxpdHlgLCBNZXNzYWdlVHlwZS5Ob25lKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluU3RhdGVgLCBcIk5vbmVcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdHJlbmRgLCBcIk5vbmVcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0TnVtYmVyYCwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXRVbml0YCwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9kZXZpYXRpb25OdW1iZXJgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50VmFsdWVBbmRDdXJyZW5jeShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cblx0XHRcdFx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVUYXJnZXRWYWx1ZShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgY2FyZCBkYXRhIGZvciBhIEtQSSwgYW5kIHN0b3JlcyBpdCBpbiB0aGUgSlNPTiBLUEkgbW9kZWwuXG5cdCAqIEBwYXJhbSBrcGlEZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBLUEkuXG5cdCAqIEBwYXJhbSBvTWFpbk1vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGRhdGEuXG5cdCAqIEBwYXJhbSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSBzdG9yZWRcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIGRhdGEgaXMgbG9hZGVkLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFzeW5jIGxvYWRLUElDYXJkRGF0YShcblx0XHRrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbixcblx0XHRvTWFpbk1vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdG9LUElNb2RlbDogSlNPTk1vZGVsXG5cdCk6IFByb21pc2U8dm9pZCB8IENvbnRleHRbXT4ge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NYWluTW9kZWwuYmluZExpc3Qoa3BpRGVmaW5pdGlvbi5jb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuXHRcdFx0JCRncm91cElkOiBcIiRhdXRvLldvcmtlcnNcIlxuXHRcdH0pO1xuXHRcdGNvbnN0IG9Hcm91cDogUmVjb3JkPHN0cmluZywgeyBhZGRpdGlvbmFsbHk/OiBzdHJpbmdbXSB9PiA9IHt9O1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIE9iamVjdD4gPSB7fTtcblxuXHRcdGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5mb3JFYWNoKChkaW1lbnNpb24pID0+IHtcblx0XHRcdG9Hcm91cFtkaW1lbnNpb24ubmFtZV0gPSB7fTtcblx0XHRcdGlmIChkaW1lbnNpb24udGV4dCkge1xuXHRcdFx0XHQvLyBBbHNvIGxvYWQgdGhlIHRleHQgcHJvcGVydHkgaWYgdGhlcmUncyBvbmUgKGFzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkpXG5cdFx0XHRcdG9Hcm91cFtkaW1lbnNpb24ubmFtZV0uYWRkaXRpb25hbGx5ID0gW2RpbWVuc2lvbi50ZXh0XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0Lm1lYXN1cmVzLmZvckVhY2goKG1lYXN1cmUpID0+IHtcblx0XHRcdG9BZ2dyZWdhdGVbbWVhc3VyZS5uYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHRcdG9MaXN0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7XG5cdFx0XHRncm91cDogb0dyb3VwLFxuXHRcdFx0YWdncmVnYXRlOiBvQWdncmVnYXRlXG5cdFx0fSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnRpbmdcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5jaGFydC5zb3J0T3JkZXIpIHtcblx0XHRcdG9MaXN0QmluZGluZy5zb3J0KFxuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LnNvcnRPcmRlci5tYXAoKHNvcnRJbmZvKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBTb3J0ZXIoc29ydEluZm8ubmFtZSwgc29ydEluZm8uZGVzY2VuZGluZyk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFsbENvbnRleHRzID0gYXdhaXQgb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCBrcGlEZWZpbml0aW9uLmNoYXJ0Lm1heEl0ZW1zKTtcblx0XHRjb25zdCBjaGFydERhdGEgPSBhbGxDb250ZXh0cy5tYXAoKG9Db250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBvRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5mb3JFYWNoKChkaW1lbnNpb24pID0+IHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSB0byBmb3JtYXQgdGhlIGRpbWVuc2lvbiB2YWx1ZSBoZXJlLCBhcyB0aGUgY2FyZCBkb2Vzbid0IHN1cHBvcnQgY2FsY3VsYXRlZCBiaW5kaW5ncyB5ZXRcblx0XHRcdFx0c3dpdGNoIChkaW1lbnNpb24udGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRPbmx5XCI6XG5cdFx0XHRcdFx0XHRvRGF0YVtkaW1lbnNpb24ubmFtZV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24udGV4dCEpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiVGV4dExhc3RcIjpcblx0XHRcdFx0XHRcdG9EYXRhW2RpbWVuc2lvbi5uYW1lXSA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi5uYW1lKSxcblx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLnRleHQhKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRcdFx0XHQvLyBObyB0ZXh0IGFycmFuZ2VtZW50XG5cdFx0XHRcdFx0XHRvRGF0YVtkaW1lbnNpb24ubmFtZV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24ubmFtZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdFx0XHRcdFx0b0RhdGFbZGltZW5zaW9uLm5hbWVdID0gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhcblx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLnRleHQhKSxcblx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLm5hbWUpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMuZm9yRWFjaCgobWVhc3VyZSkgPT4ge1xuXHRcdFx0XHRvRGF0YVttZWFzdXJlLm5hbWVdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkobWVhc3VyZS5uYW1lKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gb0RhdGE7XG5cdFx0fSk7XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9jaGFydERhdGFgLCBjaGFydERhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBvcG92ZXIgdG8gZGlzcGxheSB0aGUgS1BJIGNhcmRcblx0ICogVGhlIHBvcG92ZXIgYW5kIHRoZSBjb250YWluZWQgY2FyZCBmb3IgdGhlIEtQSXMgYXJlIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5LlxuXHQgKiBUaGUgcG9wb3ZlciBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgS1BJcywgc28gaXQncyBjcmVhdGVkIG9ubHkgb25jZS5cblx0ICogQHBhcmFtIG9LUElUYWcgVGhlIHRhZyB0aGF0IHRyaWdnZXJlZCB0aGUgcG9wb3ZlciBvcGVuaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgc2hhcmVkIHBvcG92ZXIgYXMgYSBwcm9taXNlLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFzeW5jIGdldFBvcG92ZXIob0tQSVRhZzogR2VuZXJpY1RhZyk6IFByb21pc2U8UG9wb3Zlcj4ge1xuXHRcdGlmICghdGhpcy5vUG9wb3Zlcikge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0TGlicmFyeS5sb2FkKHsgbmFtZTogXCJzYXAvdWkvaW50ZWdyYXRpb25cIiB9KVxuXHRcdFx0XHRcdC50aGVuKCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC91aS9pbnRlZ3JhdGlvbi93aWRnZXRzL0NhcmRcIiwgXCJzYXAvdWkvaW50ZWdyYXRpb24vSG9zdFwiXSwgKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IENhcmRDbGFzcyA9IHBhcmFtc1swXSBhcyB0eXBlb2YgQ2FyZFR5cGU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IEhvc3QgPSBwYXJhbXNbMV0gYXMgdHlwZW9mIEhvc3RUeXBlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvSG9zdCA9IG5ldyBIb3N0KCk7XG5cblx0XHRcdFx0XHRcdFx0b0hvc3QuYXR0YWNoQWN0aW9uKChvRXZlbnQ6IEhvc3QkQWN0aW9uRXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVHlwZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ0eXBlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicGFyYW1ldGVyc1wiKSBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdD86IHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdFx0b3V0Ym91bmQ6IHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNUeXBlID09PSBcIk5hdmlnYXRpb25cIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9QYXJhbXMuc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5iYXNlLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1BhcmFtcy5zZW1hbnRpY09iamVjdCwgb1BhcmFtcy5hY3Rpb24pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5iYXNlLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVPdXRib3VuZChvUGFyYW1zLm91dGJvdW5kKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMub0NhcmQgPSBuZXcgQ2FyZENsYXNzKHtcblx0XHRcdFx0XHRcdFx0XHR3aWR0aDogXCIyNXJlbVwiLFxuXHRcdFx0XHRcdFx0XHRcdGhlaWdodDogXCJhdXRvXCJcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0SG9zdChvSG9zdCBhcyB1bmtub3duIGFzIENvbnRyb2wpO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMub1BvcG92ZXIgPSBuZXcgUG9wb3ZlcihcImtwaS1Qb3BvdmVyXCIsIHtcblx0XHRcdFx0XHRcdFx0XHRzaG93SGVhZGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRwbGFjZW1lbnQ6IFwiQXV0b1wiLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFt0aGlzLm9DYXJkXVxuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRvS1BJVGFnLmFkZERlcGVuZGVudCh0aGlzLm9Qb3BvdmVyKTsgLy8gVGhlIGZpcnN0IGNsaWNrZWQgdGFnIGdldHMgdGhlIHBvcG92ZXIgYXMgZGVwZW5kZW50XG5cblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGlzLm9Qb3BvdmVyKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vUG9wb3Zlcik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFzeW5jIG9uS1BJUHJlc3NlZChvS1BJVGFnOiBHZW5lcmljVGFnLCBrcGlJRDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb0tQSU1vZGVsID0gb0tQSVRhZy5nZXRNb2RlbChcImtwaU1vZGVsXCIpIGFzIEpTT05Nb2RlbDtcblxuXHRcdGlmICh0aGlzLmFLUElEZWZpbml0aW9ucyAmJiB0aGlzLmFLUElEZWZpbml0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGtwaURlZmluaXRpb24gPSB0aGlzLmFLUElEZWZpbml0aW9ucy5maW5kKGZ1bmN0aW9uIChvRGVmKSB7XG5cdFx0XHRcdHJldHVybiAob0RlZiBhcyBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbikuaWQgPT09IGtwaUlEO1xuXHRcdFx0fSkgYXMgQW5hbHl0aWNhbEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01vZGVsID0gb0tQSVRhZy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cblx0XHRcdFx0XHRjb25zdCBwb3BvdmVyID0gYXdhaXQgdGhpcy5nZXRQb3BvdmVyKG9LUElUYWcpO1xuXHRcdFx0XHRcdC8vIFNldCB0aGUgcG9wb3ZlciBhcyBtb2RhbCB3aGlsZSB0aGUgY2FyZCBpcyBsb2FkaW5nIChzbyB0aGF0IGNhcmQgcmVuZGVyaW5nIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggdGhlIHBvcG92ZXIgYW5kIGNsb3NlIGl0KVxuXHRcdFx0XHRcdHBvcG92ZXIuc2V0TW9kYWwodHJ1ZSk7XG5cblx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldE1hbmlmZXN0KG9LUElNb2RlbC5nZXRQcm9wZXJ0eShgLyR7a3BpSUR9L21hbmlmZXN0YCkpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0UHJldmlld01vZGUoXCJBYnN0cmFjdFwiKTsgLy8gRGlzcGxheSBwbGFjZWhvbGRlcnMgaW4gdGhlIGNhcmQgdW50aWwgZGF0YSBpcyBsb2FkZWRcblx0XHRcdFx0XHRwb3BvdmVyLm9wZW5CeShvS1BJVGFnLCBmYWxzZSk7IC8vIE9wZW4gdGhlIHBvcG92ZXIgaW1tZWRpYXRlbHlcblxuXHRcdFx0XHRcdGNvbnN0IHByb21pc2VzID0gW1xuXHRcdFx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbCwgdHJ1ZSksXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRLUElDYXJkRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbClcblx0XHRcdFx0XHRdO1xuXG5cdFx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQuYXR0YWNoRXZlbnRPbmNlKFwic3RhdGVDaGFuZ2VkXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdC8vIE9uY2UgdGhlIGNhcmQgaGFzIGJlZW4gcmVuZGVyZWQsIHNldCB0aGUgZm9jdXMgcHJvcGVybHkgYW5kIHNldCB0aGUgcG9wb3ZlciBhcyBub24tbW9kYWxcblx0XHRcdFx0XHRcdCh0aGlzLm9DYXJkLmdldEZvY3VzRG9tUmVmKCkgYXMgSFRNTEVsZW1lbnQpPy5mb2N1cygpO1xuXHRcdFx0XHRcdFx0cG9wb3Zlci5zZXRNb2RhbChmYWxzZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRNYW5pZmVzdChvS1BJTW9kZWwuZ2V0UHJvcGVydHkoYC8ke2twaUlEfS9tYW5pZmVzdGApKTtcblx0XHRcdFx0XHR0aGlzLm9DYXJkLnJlZnJlc2goKTtcblx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldFByZXZpZXdNb2RlKFwiT2ZmXCIpOyAvLyBEaXNwbGF5IHJlYWwgZGF0YSBpbiB0aGUgY2FyZFxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyIGFzIHN0cmluZyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUFpQ0EsTUFBTUEsMEJBQXVELEdBQUc7SUFDL0QsR0FBRyxFQUFFQyxXQUFXLENBQUNDLEtBQUs7SUFDdEIsR0FBRyxFQUFFRCxXQUFXLENBQUNFLE9BQU87SUFDeEIsR0FBRyxFQUFFRixXQUFXLENBQUNHLE9BQU87SUFDeEIsR0FBRyxFQUFFSCxXQUFXLENBQUNJO0VBQ2xCLENBQUM7RUFFRCxNQUFNQyx5QkFBc0QsR0FBRztJQUM5REosS0FBSyxFQUFFLE9BQU87SUFDZEMsT0FBTyxFQUFFLFVBQVU7SUFDbkJDLE9BQU8sRUFBRSxNQUFNO0lBQ2ZDLFdBQVcsRUFBRSxNQUFNO0lBQ25CRSxJQUFJLEVBQUU7RUFDUCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLGdDQUFnQ0EsQ0FBQ0MsUUFBZ0IsRUFBRUMsV0FBMEMsRUFBZTtJQUNwSCxJQUFJQyxtQkFBZ0M7SUFFcEMsSUFBSUQsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLRSxTQUFTLElBQUlGLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUlELFFBQVEsR0FBR0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3pGQyxtQkFBbUIsR0FBR1YsV0FBVyxDQUFDQyxLQUFLO0lBQ3hDLENBQUMsTUFBTSxJQUFJUSxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUtFLFNBQVMsSUFBSUYsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSUQsUUFBUSxHQUFHQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDaEdDLG1CQUFtQixHQUFHVixXQUFXLENBQUNFLE9BQU87SUFDMUMsQ0FBQyxNQUFNLElBQUlPLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBS0UsU0FBUyxJQUFJRixXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJRCxRQUFRLEdBQUdDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUNoR0MsbUJBQW1CLEdBQUdWLFdBQVcsQ0FBQ00sSUFBSTtJQUN2QyxDQUFDLE1BQU0sSUFBSUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLRSxTQUFTLElBQUlGLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUlELFFBQVEsR0FBR0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ2hHQyxtQkFBbUIsR0FBR1YsV0FBVyxDQUFDQyxLQUFLO0lBQ3hDLENBQUMsTUFBTSxJQUFJUSxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUtFLFNBQVMsSUFBSUYsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSUQsUUFBUSxHQUFHQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDaEdDLG1CQUFtQixHQUFHVixXQUFXLENBQUNFLE9BQU87SUFDMUMsQ0FBQyxNQUFNLElBQUlPLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBS0UsU0FBUyxJQUFJRixXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJRCxRQUFRLEdBQUdDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUNoR0MsbUJBQW1CLEdBQUdWLFdBQVcsQ0FBQ00sSUFBSTtJQUN2QyxDQUFDLE1BQU07TUFDTkksbUJBQW1CLEdBQUdWLFdBQVcsQ0FBQ0csT0FBTztJQUMxQztJQUVBLE9BQU9PLG1CQUFtQjtFQUMzQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTRSxrQ0FBa0NBLENBQUNKLFFBQWdCLEVBQUVDLFdBQTBDLEVBQWU7SUFDdEgsSUFBSUMsbUJBQWdDO0lBRXBDLElBQUlELFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBS0UsU0FBUyxJQUFJRixXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJRCxRQUFRLEdBQUdDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUN6RkMsbUJBQW1CLEdBQUdWLFdBQVcsQ0FBQ0MsS0FBSztJQUN4QyxDQUFDLE1BQU0sSUFBSVEsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLRSxTQUFTLElBQUlGLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUlELFFBQVEsR0FBR0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ2hHQyxtQkFBbUIsR0FBR1YsV0FBVyxDQUFDRSxPQUFPO0lBQzFDLENBQUMsTUFBTSxJQUFJTyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUtFLFNBQVMsSUFBSUYsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSUQsUUFBUSxHQUFHQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDaEdDLG1CQUFtQixHQUFHVixXQUFXLENBQUNNLElBQUk7SUFDdkMsQ0FBQyxNQUFNO01BQ05JLG1CQUFtQixHQUFHVixXQUFXLENBQUNHLE9BQU87SUFDMUM7SUFFQSxPQUFPTyxtQkFBbUI7RUFDM0I7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0csa0NBQWtDQSxDQUFDTCxRQUFnQixFQUFFQyxXQUEwQyxFQUFlO0lBQ3RILElBQUlDLG1CQUFnQztJQUVwQyxJQUFJRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUtFLFNBQVMsSUFBSUYsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSUQsUUFBUSxHQUFHQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDekZDLG1CQUFtQixHQUFHVixXQUFXLENBQUNDLEtBQUs7SUFDeEMsQ0FBQyxNQUFNLElBQUlRLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBS0UsU0FBUyxJQUFJRixXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJRCxRQUFRLEdBQUdDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUNoR0MsbUJBQW1CLEdBQUdWLFdBQVcsQ0FBQ0UsT0FBTztJQUMxQyxDQUFDLE1BQU0sSUFBSU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLRSxTQUFTLElBQUlGLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUlELFFBQVEsR0FBR0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ2hHQyxtQkFBbUIsR0FBR1YsV0FBVyxDQUFDTSxJQUFJO0lBQ3ZDLENBQUMsTUFBTTtNQUNOSSxtQkFBbUIsR0FBR1YsV0FBVyxDQUFDRyxPQUFPO0lBQzFDO0lBRUEsT0FBT08sbUJBQW1CO0VBQzNCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSSwrQkFBK0JBLENBQUNDLFVBQTJCLEVBQVU7SUFDN0UsSUFBSUMsa0JBQTBCO0lBRTlCLFFBQVFELFVBQVU7TUFDakIsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNSLEtBQUssR0FBRztNQUNSLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDUixLQUFLLEdBQUc7UUFDUEMsa0JBQWtCLEdBQUcsSUFBSTtRQUN6QjtNQUVELEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDUixLQUFLLEdBQUc7TUFDUixLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ1IsS0FBSyxHQUFHO1FBQ1BBLGtCQUFrQixHQUFHLE1BQU07UUFDM0I7TUFFRDtRQUNDQSxrQkFBa0IsR0FBRyxNQUFNO0lBQzdCO0lBRUEsT0FBT0Esa0JBQWtCO0VBQzFCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxpQ0FBaUNBLENBQ3pDVCxRQUFnQixFQUNoQlUsY0FBc0IsRUFDdEJDLFVBQW1CLEVBQ25CVixXQUFzRCxFQUM3QztJQUNULElBQUlPLGtCQUEwQjtJQUU5QixJQUFJLENBQUNQLFdBQVcsSUFBS1UsVUFBVSxJQUFJLENBQUNELGNBQWUsRUFBRTtNQUNwRCxPQUFPLE1BQU07SUFDZDtJQUVBLE1BQU1FLFNBQVMsR0FBR0QsVUFBVSxHQUFHLENBQUNYLFFBQVEsR0FBR1UsY0FBYyxJQUFJQSxjQUFjLEdBQUdWLFFBQVEsR0FBR1UsY0FBYztJQUV2RyxJQUFJVCxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUtFLFNBQVMsSUFBSUYsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSVcsU0FBUyxJQUFJWCxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDM0Y7TUFDQU8sa0JBQWtCLEdBQUcsTUFBTTtJQUM1QixDQUFDLE1BQU0sSUFBSVAsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLRSxTQUFTLElBQUlGLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUlXLFNBQVMsSUFBSVgsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ2xHO01BQ0FPLGtCQUFrQixHQUFHLE1BQU07SUFDNUIsQ0FBQyxNQUFNLElBQUlQLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBS0UsU0FBUyxJQUFJRixXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJVyxTQUFTLElBQUlYLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUNsRztNQUNBTyxrQkFBa0IsR0FBRyxJQUFJO0lBQzFCLENBQUMsTUFBTSxJQUFJUCxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUtFLFNBQVMsSUFBSUYsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSVcsU0FBUyxJQUFJWCxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDbEc7TUFDQU8sa0JBQWtCLEdBQUcsSUFBSTtJQUMxQixDQUFDLE1BQU07TUFDTjtNQUNBQSxrQkFBa0IsR0FBRyxNQUFNO0lBQzVCO0lBRUEsT0FBT0Esa0JBQWtCO0VBQzFCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSywwQkFBMEJBLENBQUNDLGdCQUFrQyxFQUFzQjtJQUMzRixJQUFJQSxnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3pDLE9BQU9iLFNBQVM7SUFDakIsQ0FBQyxNQUFNLElBQUlXLGdCQUFnQixDQUFDQyxNQUFNLENBQUNDLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDaEQsT0FBTyxJQUFJQyxNQUFNLENBQ2hCSCxnQkFBZ0IsQ0FBQ0ksWUFBWSxFQUM3QkosZ0JBQWdCLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksUUFBUSxFQUNuQ0wsZ0JBQWdCLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssUUFBUSxFQUNuQ04sZ0JBQWdCLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ00sU0FDNUIsQ0FBQztJQUNGLENBQUMsTUFBTTtNQUNOLE1BQU1DLGFBQWEsR0FBR1IsZ0JBQWdCLENBQUNDLE1BQU0sQ0FBQ1EsR0FBRyxDQUFFQyxLQUFLLElBQUs7UUFDNUQsT0FBTyxJQUFJUCxNQUFNLENBQUNILGdCQUFnQixDQUFDSSxZQUFZLEVBQUVNLEtBQUssQ0FBQ0wsUUFBUSxFQUFvQkssS0FBSyxDQUFDSixRQUFRLEVBQUVJLEtBQUssQ0FBQ0gsU0FBUyxDQUFDO01BQ3BILENBQUMsQ0FBQztNQUNGLE9BQU8sSUFBSUosTUFBTSxDQUFDO1FBQ2pCUSxPQUFPLEVBQUVILGFBQWE7UUFDdEJJLEdBQUcsRUFBRTtNQUNOLENBQUMsQ0FBQztJQUNIO0VBQ0Q7RUFFQSxTQUFTQyw2QkFBNkJBLENBQUNiLGdCQUFrQyxFQUFVO0lBQ2xGLE1BQU1jLGFBQWEsR0FBRyxJQUFJQyxNQUFNLENBQUNDLFlBQVksQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM1RCxNQUFNQyxTQUFTLEdBQUdDLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFFO0lBQzlELE1BQU1DLFVBQVUsR0FBR0MsVUFBVSxDQUFDQyxlQUFlLENBQUM7TUFBRUMsS0FBSyxFQUFFO0lBQVMsQ0FBQyxFQUFFVixhQUFhLENBQUM7SUFFakYsU0FBU1csV0FBV0EsQ0FBQ2YsS0FBc0IsRUFBVTtNQUNwRCxNQUFNZ0IsUUFBUSxHQUNiMUIsZ0JBQWdCLENBQUMyQixZQUFZLENBQUNDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQ3BEUCxVQUFVLENBQUNRLE1BQU0sQ0FBQyxJQUFJQyxJQUFJLENBQUNwQixLQUFLLENBQUNKLFFBQVEsQ0FBQyxDQUFDLEdBQzFDSSxLQUFLLENBQUNKLFFBQW1CO01BQzlCLE1BQU15QixTQUFTLEdBQ2QvQixnQkFBZ0IsQ0FBQzJCLFlBQVksQ0FBQ0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSWxCLEtBQUssQ0FBQ0gsU0FBUyxLQUFLbEIsU0FBUyxHQUNyRmdDLFVBQVUsQ0FBQ1EsTUFBTSxDQUFDLElBQUlDLElBQUksQ0FBQ3BCLEtBQUssQ0FBQ0gsU0FBUyxDQUFDLENBQUMsR0FDNUNHLEtBQUssQ0FBQ0gsU0FBUztNQUVuQixRQUFRRyxLQUFLLENBQUNMLFFBQVE7UUFDckIsS0FBSyxJQUFJO1VBQ1IsT0FBTyxJQUFJcUIsUUFBUSxNQUFNSyxTQUFTLEdBQUc7UUFFdEMsS0FBSyxVQUFVO1VBQ2QsT0FBTyxJQUFJTCxRQUFRLEdBQUc7UUFFdkIsS0FBSyxJQUFJO1VBQ1IsT0FBTyxTQUFTQSxRQUFRLEVBQUU7UUFFM0IsS0FBSyxJQUFJO1VBQ1IsT0FBTyxJQUFJQSxRQUFRLEVBQUU7UUFFdEIsS0FBSyxJQUFJO1VBQ1IsT0FBTyxTQUFTQSxRQUFRLEVBQUU7UUFFM0IsS0FBSyxJQUFJO1VBQ1IsT0FBTyxJQUFJQSxRQUFRLEVBQUU7UUFFdEIsS0FBSyxJQUFJO1VBQ1IsT0FBT1IsU0FBUyxDQUFDYyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxJQUFJTixRQUFRLE1BQU1LLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFFekYsS0FBSyxJQUFJO1VBQ1IsT0FBTyxTQUFTTCxRQUFRLEVBQUU7UUFFM0IsS0FBSyxhQUFhO1VBQ2pCLE9BQU9SLFNBQVMsQ0FBQ2MsT0FBTyxDQUFDLDRCQUE0QixFQUFFLENBQUMsSUFBSU4sUUFBUSxHQUFHLENBQUMsQ0FBQztRQUUxRSxLQUFLLElBQUk7UUFDVDtVQUNDLE9BQU9BLFFBQVE7TUFDakI7SUFDRDtJQUNBLElBQUkxQixnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3pDLE9BQU8sRUFBRTtJQUNWLENBQUMsTUFBTSxJQUFJRixnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ2hELE9BQU91QixXQUFXLENBQUN6QixnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUMsTUFBTTtNQUNOLE9BQU8sSUFBSUQsZ0JBQWdCLENBQUNDLE1BQU0sQ0FBQ1EsR0FBRyxDQUFDZ0IsV0FBVyxDQUFDLENBQUNRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRztJQUNqRTtFQUNEO0VBRUEsU0FBU0MsZ0JBQWdCQSxDQUFDQyxNQUErQixFQUFVO0lBQ2xFLE1BQU1qQixTQUFTLEdBQUdDLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFFO0lBRTlELFNBQVNnQixVQUFVQSxDQUFDQyxLQUF3QyxFQUFVO01BQ3JFLElBQUlBLEtBQUssQ0FBQ25DLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxFQUFFO01BQ1YsQ0FBQyxNQUFNLElBQUltQyxLQUFLLENBQUNuQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzlCLE9BQU9tQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUs7TUFDdEIsQ0FBQyxNQUFNO1FBQ04sSUFBSUMsR0FBRyxHQUFHRixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUs7UUFDeEIsS0FBSyxJQUFJRSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdILEtBQUssQ0FBQ25DLE1BQU0sR0FBRyxDQUFDLEVBQUVzQyxDQUFDLEVBQUUsRUFBRTtVQUMxQ0QsR0FBRyxJQUFJLEtBQUtGLEtBQUssQ0FBQ0csQ0FBQyxDQUFDLENBQUNGLEtBQUssRUFBRTtRQUM3QjtRQUVBLE9BQU9wQixTQUFTLENBQUNjLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDTyxHQUFHLEVBQUVGLEtBQUssQ0FBQ0EsS0FBSyxDQUFDbkMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDb0MsS0FBSyxDQUFDLENBQUM7TUFDdEY7SUFDRDs7SUFFQTtJQUNBLE9BQ0NILE1BQU0sQ0FBQ00sS0FBSyxDQUFDQyxLQUFLLElBQ2xCeEIsU0FBUyxDQUFDYyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQ0ksVUFBVSxDQUFDRCxNQUFNLENBQUNNLEtBQUssQ0FBQ0UsUUFBUSxDQUFDLEVBQUVQLFVBQVUsQ0FBQ0QsTUFBTSxDQUFDTSxLQUFLLENBQUNHLFVBQVUsQ0FBQyxDQUFDLENBQUM7RUFFckg7RUFFQSxTQUFTQyx3QkFBd0JBLENBQ2hDQyxlQUFtQyxFQUNuQ0MsZ0JBbUJDLEVBQ007SUFDUCxRQUFRRCxlQUFlLENBQUNFLFNBQVM7TUFDaEMsS0FBSyxPQUFPO1FBQ1g7UUFDQUQsZ0JBQWdCLENBQUNFLFlBQVksR0FBRztVQUMvQlAsS0FBSyxFQUFFO1lBQ05RLE9BQU8sRUFBRTtVQUNWO1FBQ0QsQ0FBQztRQUNESCxnQkFBZ0IsQ0FBQ0ksU0FBUyxHQUFHO1VBQzVCVCxLQUFLLEVBQUU7WUFDTlEsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEWixLQUFLLEVBQUU7WUFDTmMsWUFBWSxFQUFFO1VBQ2Y7UUFDRCxDQUFDO1FBQ0RMLGdCQUFnQixDQUFDTSxRQUFRLENBQUNDLFNBQVMsR0FBRztVQUNyQ0osT0FBTyxFQUFFLElBQUk7VUFDYkssSUFBSSxFQUFFLE9BQU87VUFDYkgsWUFBWSxFQUFFO1FBQ2YsQ0FBQztRQUNEO01BRUQsS0FBSyxRQUFRO1FBQ1o7UUFDQUwsZ0JBQWdCLENBQUNJLFNBQVMsR0FBRztVQUM1QlQsS0FBSyxFQUFFO1lBQ05RLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRFosS0FBSyxFQUFFO1lBQ05jLFlBQVksRUFBRTtVQUNmO1FBQ0QsQ0FBQztRQUNETCxnQkFBZ0IsQ0FBQ1MsVUFBVSxHQUFHO1VBQzdCZCxLQUFLLEVBQUU7WUFDTlEsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEWixLQUFLLEVBQUU7WUFDTmMsWUFBWSxFQUFFO1VBQ2Y7UUFDRCxDQUFDO1FBQ0RMLGdCQUFnQixDQUFDVSxXQUFXLEdBQUc7VUFDOUJDLE1BQU0sRUFBRTtZQUNQQyxRQUFRLEVBQUUsUUFBUTtZQUNsQkMsU0FBUyxFQUFFO1VBQ1o7UUFDRCxDQUFDO1FBQ0RiLGdCQUFnQixDQUFDYyxVQUFVLEdBQUc7VUFDN0JYLE9BQU8sRUFBRTtRQUNWLENBQUM7UUFDREgsZ0JBQWdCLENBQUNNLFFBQVEsQ0FBQ0MsU0FBUyxHQUFHO1VBQUVKLE9BQU8sRUFBRTtRQUFNLENBQUM7UUFDeEQ7TUFFRCxLQUFLLFNBQVM7UUFDYjtRQUNBSCxnQkFBZ0IsQ0FBQ0ksU0FBUyxHQUFHO1VBQzVCVCxLQUFLLEVBQUU7WUFDTlEsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEWixLQUFLLEVBQUU7WUFDTmMsWUFBWSxFQUFFO1VBQ2Y7UUFDRCxDQUFDO1FBQ0RMLGdCQUFnQixDQUFDUyxVQUFVLEdBQUc7VUFDN0JkLEtBQUssRUFBRTtZQUNOUSxPQUFPLEVBQUU7VUFDVixDQUFDO1VBQ0RaLEtBQUssRUFBRTtZQUNOYyxZQUFZLEVBQUU7VUFDZjtRQUNELENBQUM7UUFDREwsZ0JBQWdCLENBQUNNLFFBQVEsQ0FBQ0MsU0FBUyxHQUFHO1VBQUVKLE9BQU8sRUFBRTtRQUFNLENBQUM7UUFDeEQ7TUFFRDtRQUNDO1FBQ0FILGdCQUFnQixDQUFDRSxZQUFZLEdBQUc7VUFDL0JQLEtBQUssRUFBRTtZQUNOUSxPQUFPLEVBQUU7VUFDVjtRQUNELENBQUM7UUFDREgsZ0JBQWdCLENBQUNJLFNBQVMsR0FBRztVQUM1QlQsS0FBSyxFQUFFO1lBQ05RLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRFosS0FBSyxFQUFFO1lBQ05jLFlBQVksRUFBRTtVQUNmO1FBQ0QsQ0FBQztRQUNETCxnQkFBZ0IsQ0FBQ00sUUFBUSxDQUFDQyxTQUFTLEdBQUc7VUFBRUosT0FBTyxFQUFFO1FBQU0sQ0FBQztJQUMxRDtFQUNEO0VBQ0EsU0FBU1ksU0FBU0EsQ0FBQ0MsUUFBMEQsRUFBRUMsTUFBK0IsRUFBWTtJQUN6SCxJQUFJQSxNQUFNLElBQUlBLE1BQU0sQ0FBQzlELE1BQU0sRUFBRTtNQUM1QixPQUFPNkQsUUFBUSxDQUNiRSxNQUFNLENBQUVDLFNBQVMsSUFBSztRQUN0QixPQUFPRixNQUFNLENBQUNHLFFBQVEsQ0FBQ0QsU0FBUyxDQUFDRSxJQUFJLENBQUM7TUFDdkMsQ0FBQyxDQUFDLENBQ0QzRCxHQUFHLENBQUV5RCxTQUFTLElBQUs7UUFDbkIsT0FBT0EsU0FBUyxDQUFDNUIsS0FBSztNQUN2QixDQUFDLENBQUM7SUFDSixDQUFDLE1BQU07TUFDTixPQUFPeUIsUUFBUSxDQUFDdEQsR0FBRyxDQUFFeUQsU0FBUyxJQUFLO1FBQ2xDLE9BQU9BLFNBQVMsQ0FBQzVCLEtBQUs7TUFDdkIsQ0FBQyxDQUFDO0lBQ0g7RUFDRDtFQUVBLFNBQVMrQiwwQkFBMEJBLENBQUN2QixlQUFtQyxFQUFxRDtJQUMzSCxNQUFNd0IsYUFBYSxHQUFHUixTQUFTLENBQUNoQixlQUFlLENBQUNILFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLE1BQU00QixhQUFhLEdBQUdULFNBQVMsQ0FBQ2hCLGVBQWUsQ0FBQ0gsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEUsTUFBTTZCLGFBQWEsR0FBR1YsU0FBUyxDQUFDaEIsZUFBZSxDQUFDSCxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxNQUFNOEIsYUFBYSxHQUFHWCxTQUFTLENBQUNoQixlQUFlLENBQUNILFFBQVEsRUFBRSxDQUFDdEQsU0FBUyxDQUFDLENBQUM7SUFDdEUsTUFBTXFGLGdCQUFnQixHQUFHWixTQUFTLENBQUNoQixlQUFlLENBQUNGLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztJQUUxRTtJQUNBLE1BQU0rQixjQUFjLEdBQUc3QixlQUFlLENBQUNGLFVBQVUsQ0FBQ2dDLElBQUksQ0FBRVYsU0FBUyxJQUFLO01BQ3JFLE9BQU9BLFNBQVMsQ0FBQ0UsSUFBSSxLQUFLLFVBQVU7SUFDckMsQ0FBQyxDQUFDOztJQUVGO0lBQ0EsTUFBTVMsUUFBUSxHQUFHUCxhQUFhLENBQUNRLEtBQUssQ0FBQyxDQUFDLElBQUlQLGFBQWEsQ0FBQ08sS0FBSyxDQUFDLENBQUMsSUFBSU4sYUFBYSxDQUFDTSxLQUFLLENBQUMsQ0FBQyxJQUFJTCxhQUFhLENBQUNLLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtJQUN2SDtJQUNBLE1BQU1DLFFBQVEsR0FBR1IsYUFBYSxDQUFDTyxLQUFLLENBQUMsQ0FBQyxJQUFJUixhQUFhLENBQUNRLEtBQUssQ0FBQyxDQUFDLElBQUlOLGFBQWEsQ0FBQ00sS0FBSyxDQUFDLENBQUMsSUFBSUwsYUFBYSxDQUFDSyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU7SUFDdkgsTUFBTXZDLEdBQUcsR0FBRyxDQUNYO01BQ0N5QyxHQUFHLEVBQUUsV0FBVztNQUNoQnpCLElBQUksRUFBRSxTQUFTO01BQ2YwQixNQUFNLEVBQUUsQ0FBQ0osUUFBUTtJQUNsQixDQUFDLEVBQ0Q7TUFDQ0csR0FBRyxFQUFFLFlBQVk7TUFDakJ6QixJQUFJLEVBQUUsU0FBUztNQUNmMEIsTUFBTSxFQUFFLENBQUNGLFFBQVE7SUFDbEIsQ0FBQyxDQUNEO0lBRUQsSUFBSWpDLGVBQWUsQ0FBQ0UsU0FBUyxLQUFLLFFBQVEsRUFBRTtNQUMzQztNQUNBLE1BQU1rQyxXQUFXLEdBQUdWLGFBQWEsQ0FBQ00sS0FBSyxDQUFDLENBQUMsSUFBSVIsYUFBYSxDQUFDUSxLQUFLLENBQUMsQ0FBQyxJQUFJUCxhQUFhLENBQUNPLEtBQUssQ0FBQyxDQUFDLElBQUlMLGFBQWEsQ0FBQ0ssS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFO01BQzFIdkMsR0FBRyxDQUFDNEMsSUFBSSxDQUFDO1FBQ1JILEdBQUcsRUFBRSxhQUFhO1FBQ2xCekIsSUFBSSxFQUFFLFNBQVM7UUFDZjBCLE1BQU0sRUFBRSxDQUFDQyxXQUFXO01BQ3JCLENBQUMsQ0FBQztJQUNIOztJQUVBO0lBQ0EsSUFBSVIsZ0JBQWdCLENBQUN4RSxNQUFNLEVBQUU7TUFDNUJxQyxHQUFHLENBQUM0QyxJQUFJLENBQUM7UUFDUkgsR0FBRyxFQUFFLE9BQU87UUFDWnpCLElBQUksRUFBRSxXQUFXO1FBQ2pCMEIsTUFBTSxFQUFFUDtNQUNULENBQUMsQ0FBQztJQUNIO0lBQ0E7SUFDQSxJQUFJQyxjQUFjLEVBQUU7TUFDbkJwQyxHQUFHLENBQUM0QyxJQUFJLENBQUM7UUFDUkgsR0FBRyxFQUFFLE9BQU87UUFDWnpCLElBQUksRUFBRSxXQUFXO1FBQ2pCMEIsTUFBTSxFQUFFLENBQUNOLGNBQWMsQ0FBQ3JDLEtBQUs7TUFDOUIsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPQyxHQUFHO0VBQ1g7RUFFQSxTQUFTNkMsYUFBYUEsQ0FBQ3RDLGVBQW1DLEVBQXFEO0lBQzlHLElBQUlQLEdBQXNEO0lBRTFELFFBQVFPLGVBQWUsQ0FBQ0UsU0FBUztNQUNoQyxLQUFLLE9BQU87UUFDWFQsR0FBRyxHQUFHLENBQ0w7VUFDQ3lDLEdBQUcsRUFBRSxNQUFNO1VBQ1h6QixJQUFJLEVBQUUsU0FBUztVQUNmMEIsTUFBTSxFQUFFbkIsU0FBUyxDQUFDaEIsZUFBZSxDQUFDSCxRQUFRO1FBQzNDLENBQUMsRUFDRDtVQUNDcUMsR0FBRyxFQUFFLE9BQU87VUFDWnpCLElBQUksRUFBRSxXQUFXO1VBQ2pCMEIsTUFBTSxFQUFFbkIsU0FBUyxDQUFDaEIsZUFBZSxDQUFDRixVQUFVO1FBQzdDLENBQUMsQ0FDRDtRQUNEO01BRUQsS0FBSyxRQUFRO01BQ2IsS0FBSyxTQUFTO1FBQ2JMLEdBQUcsR0FBRzhCLDBCQUEwQixDQUFDdkIsZUFBZSxDQUFDO1FBQ2pEO01BRUQsS0FBSyxpQkFBaUI7UUFDckJQLEdBQUcsR0FBRyxDQUNMO1VBQ0N5QyxHQUFHLEVBQUUsY0FBYztVQUNuQnpCLElBQUksRUFBRSxTQUFTO1VBQ2YwQixNQUFNLEVBQUVuQixTQUFTLENBQUNoQixlQUFlLENBQUNILFFBQVEsRUFBRSxDQUFDdEQsU0FBUyxFQUFFLE9BQU8sQ0FBQztRQUNqRSxDQUFDLEVBQ0Q7VUFDQzJGLEdBQUcsRUFBRSxjQUFjO1VBQ25CekIsSUFBSSxFQUFFLFNBQVM7VUFDZjBCLE1BQU0sRUFBRW5CLFNBQVMsQ0FBQ2hCLGVBQWUsQ0FBQ0gsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ3RELENBQUMsRUFDRDtVQUNDcUMsR0FBRyxFQUFFLGNBQWM7VUFDbkJ6QixJQUFJLEVBQUUsV0FBVztVQUNqQjBCLE1BQU0sRUFBRW5CLFNBQVMsQ0FBQ2hCLGVBQWUsQ0FBQ0YsVUFBVSxFQUFFLENBQUN2RCxTQUFTLEVBQUUsVUFBVSxDQUFDO1FBQ3RFLENBQUMsRUFDRDtVQUNDMkYsR0FBRyxFQUFFLE9BQU87VUFDWnpCLElBQUksRUFBRSxXQUFXO1VBQ2pCMEIsTUFBTSxFQUFFbkIsU0FBUyxDQUFDaEIsZUFBZSxDQUFDRixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDekQsQ0FBQyxDQUNEO1FBQ0Q7TUFFRDtRQUNDTCxHQUFHLEdBQUcsQ0FDTDtVQUNDeUMsR0FBRyxFQUFFLFdBQVc7VUFDaEJ6QixJQUFJLEVBQUUsU0FBUztVQUNmMEIsTUFBTSxFQUFFbkIsU0FBUyxDQUFDaEIsZUFBZSxDQUFDSCxRQUFRO1FBQzNDLENBQUMsRUFDRDtVQUNDcUMsR0FBRyxFQUFFLGNBQWM7VUFDbkJ6QixJQUFJLEVBQUUsV0FBVztVQUNqQjBCLE1BQU0sRUFBRW5CLFNBQVMsQ0FBQ2hCLGVBQWUsQ0FBQ0YsVUFBVSxFQUFFLENBQUN2RCxTQUFTLEVBQUUsVUFBVSxDQUFDO1FBQ3RFLENBQUMsRUFDRDtVQUNDMkYsR0FBRyxFQUFFLE9BQU87VUFDWnpCLElBQUksRUFBRSxXQUFXO1VBQ2pCMEIsTUFBTSxFQUFFbkIsU0FBUyxDQUFDaEIsZUFBZSxDQUFDRixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDekQsQ0FBQyxDQUNEO0lBQ0g7SUFFQSxPQUFPTCxHQUFHO0VBQ1g7RUFFQSxlQUFlOEMsdUJBQXVCQSxDQUNyQ0MsT0FBdUIsRUFDdkJDLGFBQTZCLEVBQzBEO0lBQ3ZGLElBQUlELE9BQU8sQ0FBQ0UsY0FBYyxFQUFFO01BQzNCLElBQUlGLE9BQU8sQ0FBQ0csTUFBTSxFQUFFO1FBQ25CO1FBQ0EsT0FBT0YsYUFBYSxDQUFDRyxRQUFRLENBQUMsQ0FBQztVQUFFRixjQUFjLEVBQUVGLE9BQU8sQ0FBQ0UsY0FBYztVQUFFQyxNQUFNLEVBQUVILE9BQU8sQ0FBQ0c7UUFBTyxDQUFDLENBQUMsQ0FBQyxDQUFDRSxJQUFJLENBQUVDLE1BQU0sSUFBSztVQUNwSCxPQUFPQSxNQUFNLENBQUMxRixNQUFNLElBQUkwRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMxRixNQUFNLEdBQUc7WUFBRXNGLGNBQWMsRUFBRUYsT0FBTyxDQUFDRSxjQUFjO1lBQUVDLE1BQU0sRUFBRUgsT0FBTyxDQUFDRztVQUFPLENBQUMsR0FBR3BHLFNBQVM7UUFDMUgsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxNQUFNO1FBQ047UUFDQSxPQUFPa0csYUFBYSxDQUFDTSxnQkFBZ0IsQ0FBQ1AsT0FBTyxDQUFDRSxjQUFjLENBQUMsQ0FBQ0csSUFBSSxDQUFFRyxLQUFLLElBQUs7VUFDN0UsSUFBSSxDQUFDQSxLQUFLLEVBQUU7WUFDWDtZQUNBLE9BQU96RyxTQUFTO1VBQ2pCOztVQUVBO1VBQ0EsTUFBTTBHLEtBQUssR0FBR1IsYUFBYSxDQUFDUyxjQUFjLENBQUNGLEtBQUssQ0FBQ0csTUFBTSxDQUFDO1VBQ3hELE9BQU9YLE9BQU8sQ0FBQ1ksa0JBQWtCLElBQUlaLE9BQU8sQ0FBQ1ksa0JBQWtCLENBQUMvQixRQUFRLENBQUM0QixLQUFLLENBQUNOLE1BQU0sQ0FBQyxHQUNuRnBHLFNBQVMsR0FDVDtZQUFFbUcsY0FBYyxFQUFFTyxLQUFLLENBQUNQLGNBQWM7WUFBRUMsTUFBTSxFQUFFTSxLQUFLLENBQUNOO1VBQU8sQ0FBQztRQUNsRSxDQUFDLENBQUM7TUFDSDtJQUNELENBQUMsTUFBTTtNQUNOO01BQ0EsT0FBT0gsT0FBTyxDQUFDYSxrQkFBa0IsR0FBR0MsT0FBTyxDQUFDQyxPQUFPLENBQUM7UUFBRUMsUUFBUSxFQUFFaEIsT0FBTyxDQUFDYTtNQUFtQixDQUFDLENBQUMsR0FBR0MsT0FBTyxDQUFDQyxPQUFPLENBQUNoSCxTQUFTLENBQUM7SUFDM0g7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkEsSUFNTWtILGdDQUFnQyxJQUFBQyxJQUFBLEdBRHJDQyxjQUFjLENBQUMsZ0RBQWdELENBQUMsRUFBQUMsS0FBQSxHQXFJL0RDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FnQ2hCRCxjQUFjLENBQUMsQ0FBQyxFQUFBSCxJQUFBLENBQUFLLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsb0JBQUE7SUFBQUMsY0FBQSxDQUFBVCxnQ0FBQSxFQUFBUSxvQkFBQTtJQTNKakIsU0FBQVIsaUNBQUEsRUFBYztNQUFBLE9BQ2JRLG9CQUFBLENBQUFFLElBQUEsS0FBTSxDQUFDO0lBQ1I7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUpDLElBQUFDLE1BQUEsR0FBQVgsZ0NBQUEsQ0FBQVksU0FBQTtJQUFBRCxNQUFBLENBS1VFLGdCQUFnQixHQUExQixTQUFBQSxpQkFBMkJDLGFBQXNDLEVBQUVDLFNBQW9CLEVBQVE7TUFBQSxJQUFBQyxxQkFBQTtNQUM5RixNQUFNQyxhQUFzRCxHQUFHO1FBQzlELFNBQVMsRUFBRTtVQUNWQyxFQUFFLEVBQUUsZ0JBQWdCO1VBQ3BCbEUsSUFBSSxFQUFFO1FBQ1AsQ0FBQztRQUNELFFBQVEsRUFBRTtVQUNUbUUsVUFBVSxFQUFFO1FBQ2IsQ0FBQztRQUNELFVBQVUsRUFBRTtVQUNYbkUsSUFBSSxFQUFFLFlBQVk7VUFDbEJvRSxJQUFJLEVBQUU7WUFDTEMsSUFBSSxFQUFFLENBQUM7VUFDUixDQUFDO1VBQ0RDLE1BQU0sRUFBRTtZQUNQdEUsSUFBSSxFQUFFLFNBQVM7WUFDZmIsS0FBSyxFQUFFMkUsYUFBYSxDQUFDUyxTQUFTLENBQUNwRixLQUFLO1lBQ3BDcUYsUUFBUSxFQUFFVixhQUFhLENBQUNTLFNBQVMsQ0FBQ0UsV0FBVztZQUM3Q0MsaUJBQWlCLEVBQUUsWUFBWTtZQUMvQkMsYUFBYSxFQUFFO2NBQ2RDLE1BQU0sRUFBRSxvQkFBb0I7Y0FDNUJDLElBQUksRUFBRSxrQkFBa0I7Y0FDeEJDLEtBQUssRUFBRSxhQUFhO2NBQ3BCQyxLQUFLLEVBQUU7WUFDUjtVQUNELENBQUM7VUFDREMsT0FBTyxFQUFFO1lBQ1JDLFNBQVMsRUFBRSxPQUFPO1lBQ2xCQyxlQUFlLEVBQUU7Y0FDaEJwRixRQUFRLEVBQUUsQ0FBQyxDQUFDO2NBQ1pYLEtBQUssRUFBRTtnQkFDTlEsT0FBTyxFQUFFLElBQUk7Z0JBQ2JVLFNBQVMsRUFBRTtjQUNaO1lBQ0QsQ0FBQztZQUNEK0QsSUFBSSxFQUFFO2NBQ0xlLElBQUksRUFBRTtZQUNQO1VBQ0Q7UUFDRDtNQUNELENBQUM7O01BRUQ7TUFDQSxJQUFJckIsYUFBYSxDQUFDUyxTQUFTLENBQUNhLFVBQVUsSUFBSXRCLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDYyxXQUFXLEtBQUt2SixTQUFTLEVBQUU7UUFDNUYsTUFBTTZCLFNBQVMsR0FBR0MsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUU7UUFDOURvRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUNLLE1BQU0sQ0FBQ2dCLGNBQWMsR0FBRyxDQUNqRDtVQUNDbkcsS0FBSyxFQUFFeEIsU0FBUyxDQUFDYyxPQUFPLENBQUMsNEJBQTRCLENBQUM7VUFDdERtRyxNQUFNLEVBQUUsZ0JBQWdCO1VBQ3hCQyxJQUFJLEVBQUU7UUFDUCxDQUFDLEVBQ0Q7VUFDQzFGLEtBQUssRUFBRXhCLFNBQVMsQ0FBQ2MsT0FBTyxDQUFDLCtCQUErQixDQUFDO1VBQ3pEbUcsTUFBTSxFQUFFLG1CQUFtQjtVQUMzQkMsSUFBSSxFQUFFO1FBQ1AsQ0FBQyxDQUNEO01BQ0Y7O01BRUE7TUFDQSxLQUFBYixxQkFBQSxHQUFJRixhQUFhLENBQUN5QixpQ0FBaUMsY0FBQXZCLHFCQUFBLGVBQS9DQSxxQkFBQSxDQUFpRHJILE1BQU0sRUFBRTtRQUM1RCxNQUFNNkksYUFBdUIsR0FBRyxFQUFFO1FBQ2xDMUIsYUFBYSxDQUFDeUIsaUNBQWlDLENBQUNFLE9BQU8sQ0FBRWhKLGdCQUFnQixJQUFLO1VBQzdFLE1BQU1pSixJQUFJLEdBQUdwSSw2QkFBNkIsQ0FBQ2IsZ0JBQWdCLENBQUM7VUFDNUQsSUFBSWlKLElBQUksRUFBRTtZQUNURixhQUFhLENBQUM1RCxJQUFJLENBQUM4RCxJQUFJLENBQUM7VUFDekI7UUFDRCxDQUFDLENBQUM7UUFFRixJQUFJRixhQUFhLENBQUM3SSxNQUFNLEVBQUU7VUFDekJzSCxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUNLLE1BQU0sQ0FBQ3FCLE9BQU8sR0FBR0gsYUFBYSxDQUFDOUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNwRTtNQUNEOztNQUVBO01BQ0F1RixhQUFhLENBQUMsVUFBVSxDQUFDLENBQUNlLE9BQU8sQ0FBQ3ZGLFNBQVMsR0FBR3FFLGFBQWEsQ0FBQzVFLEtBQUssQ0FBQ08sU0FBUztNQUMzRUgsd0JBQXdCLENBQUN3RSxhQUFhLENBQUM1RSxLQUFLLEVBQUUrRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUNlLE9BQU8sQ0FBQ0UsZUFBZSxDQUFDO01BQ2hHakIsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDZSxPQUFPLENBQUNFLGVBQWUsQ0FBQy9GLEtBQUssQ0FBQ3lHLElBQUksR0FBR2pILGdCQUFnQixDQUFDbUYsYUFBYSxDQUFDO01BQzlGRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUNlLE9BQU8sQ0FBQzNGLFVBQVUsR0FBR3lFLGFBQWEsQ0FBQzVFLEtBQUssQ0FBQ0csVUFBVSxDQUFDbkMsR0FBRyxDQUFFeUQsU0FBUyxJQUFLO1FBQ2hHLE9BQU87VUFBRTVCLEtBQUssRUFBRTRCLFNBQVMsQ0FBQzVCLEtBQUs7VUFBRThHLEtBQUssRUFBRSxJQUFJbEYsU0FBUyxDQUFDbUYsSUFBSTtRQUFJLENBQUM7TUFDaEUsQ0FBQyxDQUFDO01BQ0Y3QixhQUFhLENBQUMsVUFBVSxDQUFDLENBQUNlLE9BQU8sQ0FBQzVGLFFBQVEsR0FBRzBFLGFBQWEsQ0FBQzVFLEtBQUssQ0FBQ0UsUUFBUSxDQUFDbEMsR0FBRyxDQUFFNkksT0FBTyxJQUFLO1FBQzFGLE9BQU87VUFBRWhILEtBQUssRUFBRWdILE9BQU8sQ0FBQ2hILEtBQUs7VUFBRThHLEtBQUssRUFBRSxJQUFJRSxPQUFPLENBQUNELElBQUk7UUFBSSxDQUFDO01BQzVELENBQUMsQ0FBQztNQUNGN0IsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDZSxPQUFPLENBQUNnQixLQUFLLEdBQUduRSxhQUFhLENBQUNpQyxhQUFhLENBQUM1RSxLQUFLLENBQUM7TUFFNUU2RSxTQUFTLENBQUNrQyxXQUFXLENBQUMsSUFBSW5DLGFBQWEsQ0FBQ0ksRUFBRSxFQUFFLEVBQUU7UUFDN0NnQyxRQUFRLEVBQUVqQztNQUNYLENBQUMsQ0FBQztJQUNILENBQUM7SUFBQU4sTUFBQSxDQUVld0Msa0JBQWtCLEdBQWxDLGVBQUFBLG1CQUNDckMsYUFBc0MsRUFDdENDLFNBQW9CLEVBQ3BCL0IsYUFBNkIsRUFDYjtNQUNoQjtNQUNBLElBQUk4QixhQUFhLENBQUNzQyxVQUFVLEVBQUU7UUFDN0IsT0FBT3RFLHVCQUF1QixDQUFDZ0MsYUFBYSxDQUFDc0MsVUFBVSxFQUFFcEUsYUFBYSxDQUFDLENBQUNJLElBQUksQ0FBRWlFLFFBQVEsSUFBSztVQUMxRixJQUFJQSxRQUFRLEVBQUU7WUFDYnRDLFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLG1DQUFtQyxFQUFFLENBQzlFO2NBQ0NsRSxJQUFJLEVBQUUsWUFBWTtjQUNsQnNHLFVBQVUsRUFBRUQ7WUFDYixDQUFDLENBQ0QsQ0FBQztVQUNIO1VBQ0E7UUFDRCxDQUFDLENBQUM7TUFDSCxDQUFDLE1BQU07UUFDTixPQUFPeEQsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUN6QjtJQUNELENBQUM7SUFBQWEsTUFBQSxDQUdNNEMsTUFBTSxHQURiLFNBQUFBLE9BQUEsRUFDc0I7TUFBQSxJQUFBQyxhQUFBO01BQ3JCLElBQUksQ0FBQ0MsZUFBZSxJQUFBRCxhQUFBLEdBQUksSUFBSSxDQUFDRSxPQUFPLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUFvQkgsYUFBYSxDQUFDLENBQUMsY0FBQUEsYUFBQSx1QkFBbEVBLGFBQUEsQ0FBb0VJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztNQUV6SCxJQUFJLElBQUksQ0FBQ0gsZUFBZSxJQUFJLElBQUksQ0FBQ0EsZUFBZSxDQUFDOUosTUFBTSxFQUFFO1FBQ3hELE1BQU1rSyxLQUFLLEdBQUcsSUFBSSxDQUFDSCxPQUFPLENBQUMsQ0FBQztRQUM1QixNQUFNSSxhQUFhLEdBQUlELEtBQUssQ0FBQ0YsYUFBYSxDQUFDLENBQUMsQ0FBb0JJLGVBQWUsQ0FBQyxDQUFDOztRQUVqRjtRQUNBLE1BQU1oRCxTQUFTLEdBQUcsSUFBSWlELFNBQVMsQ0FBQyxDQUFDO1FBQ2pDSCxLQUFLLENBQUNJLFFBQVEsQ0FBQ2xELFNBQVMsRUFBRSxVQUFVLENBQUM7UUFFckMsSUFBSSxDQUFDMEMsZUFBZSxDQUFDaEIsT0FBTyxDQUFFM0IsYUFBYSxJQUFLO1VBQy9DO1VBQ0EsSUFBSUEsYUFBYSxDQUFDOUQsSUFBSSxLQUFLLFlBQVksRUFBRTtZQUN4QztZQUNBLElBQUksQ0FBQzZELGdCQUFnQixDQUFDQyxhQUFhLEVBQUVDLFNBQVMsQ0FBQzs7WUFFL0M7WUFDQSxJQUFJLENBQUNvQyxrQkFBa0IsQ0FBQ3JDLGFBQWEsRUFBRUMsU0FBUyxFQUFFK0MsYUFBYSxDQUFDSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFVBQVVDLEdBQVcsRUFBRTtjQUNoSEMsR0FBRyxDQUFDQyxLQUFLLENBQUNGLEdBQUcsQ0FBQztZQUNmLENBQUMsQ0FBQzs7WUFFRjtZQUNBLElBQUksQ0FBQ0csY0FBYyxDQUFDekQsYUFBYSxFQUFFZ0QsYUFBYSxDQUFDVSxRQUFRLENBQUMsQ0FBQyxFQUFFekQsU0FBUyxDQUFDLENBQUNvRCxLQUFLLENBQUMsVUFBVUMsR0FBVyxFQUFFO2NBQ3BHQyxHQUFHLENBQUNDLEtBQUssQ0FBQ0YsR0FBRyxDQUFDO1lBQ2YsQ0FBQyxDQUFDO1VBQ0g7UUFDRCxDQUFDLENBQUM7TUFDSDtJQUNELENBQUM7SUFBQXpELE1BQUEsQ0FHTThELE1BQU0sR0FEYixTQUFBQSxPQUFBLEVBQ3NCO01BQ3JCLE1BQU0xRCxTQUFTLEdBQUcsSUFBSSxDQUFDMkMsT0FBTyxDQUFDLENBQUMsQ0FBQ2MsUUFBUSxDQUFDLFVBQVUsQ0FBYztNQUVsRSxJQUFJekQsU0FBUyxFQUFFO1FBQ2RBLFNBQVMsQ0FBQzJELE9BQU8sQ0FBQyxDQUFDO01BQ3BCO0lBQ0QsQ0FBQztJQUFBL0QsTUFBQSxDQUVPZ0UsK0JBQStCLEdBQXZDLFNBQUFBLGdDQUF3QzdELGFBQXNDLEVBQUU4RCxVQUFtQixFQUFFN0QsU0FBb0IsRUFBUTtNQUFBLElBQUE4RCxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtNQUNoSSxNQUFNeEssYUFBYSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDQyxXQUFXLENBQUMsQ0FBQyxDQUFDO01BQzVELE1BQU1zSyxPQUFPLEdBQUcsQ0FBQUgscUJBQUEsR0FBQS9ELGFBQWEsQ0FBQ1MsU0FBUyxDQUFDTSxJQUFJLGNBQUFnRCxxQkFBQSxlQUE1QkEscUJBQUEsQ0FBOEJJLE1BQU0sR0FDakRMLFVBQVUsQ0FBQ2hCLFdBQVcsQ0FBQzlDLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDTSxJQUFJLENBQUNnQixLQUFLLENBQUMsSUFBQWlDLHNCQUFBLEdBQzFEaEUsYUFBYSxDQUFDUyxTQUFTLENBQUNNLElBQUksY0FBQWlELHNCQUFBLHVCQUE1QkEsc0JBQUEsQ0FBOEJqQyxLQUFLO01BRXRDLE1BQU1xQyxZQUFZLEdBQUcsRUFBQUgsc0JBQUEsR0FBQWpFLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDTSxJQUFJLGNBQUFrRCxzQkFBQSx1QkFBNUJBLHNCQUFBLENBQThCSSxVQUFVLE1BQUssS0FBSyxJQUFJSCxPQUFPLEtBQUssR0FBRzs7TUFFMUY7TUFDQTtNQUNBLE1BQU1JLFFBQVEsR0FBR0MsTUFBTSxDQUFDQyxVQUFVLENBQUNWLFVBQVUsQ0FBQ2hCLFdBQVcsQ0FBQzlDLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDMUgsWUFBWSxDQUFDLENBQUM7O01BRWhHO01BQ0EsTUFBTWxCLFFBQVEsR0FBRzRNLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQzdDO1FBQ0N2SyxLQUFLLEVBQUVpSyxZQUFZLEdBQUdwTSxTQUFTLEdBQUcsT0FBTztRQUN6QzJNLGlCQUFpQixFQUFFLENBQUM7UUFDcEJDLGlCQUFpQixFQUFFNUUsYUFBYSxDQUFDUyxTQUFTLENBQUNvRSx3QkFBd0IsSUFBSSxDQUFDO1FBQ3hFQyxTQUFTLEVBQUUsQ0FBQ1Y7TUFDYixDQUFDLEVBQ0QzSyxhQUNELENBQUMsQ0FBQ2UsTUFBTSxDQUFDOEosUUFBUSxDQUFDO01BQ2xCckUsU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsd0NBQXdDLEVBQUV2SSxRQUFRLENBQUM7O01BRTdGO01BQ0EsTUFBTWtOLGdCQUFnQixHQUFHTixZQUFZLENBQUNDLGdCQUFnQixDQUNyRDtRQUNDRSxpQkFBaUIsRUFBRTVFLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDb0Usd0JBQXdCLElBQUksQ0FBQztRQUN4RUMsU0FBUyxFQUFFLEtBQUs7UUFDaEJFLGVBQWUsRUFBRTtNQUNsQixDQUFDLEVBQ0R2TCxhQUNELENBQUMsQ0FBQ2UsTUFBTSxDQUFDOEosUUFBUSxDQUFDO01BQ2xCckUsU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsZ0RBQWdELEVBQUUyRSxnQkFBZ0IsQ0FBQzs7TUFFN0c7TUFDQSxNQUFNRSxlQUFlLEdBQUdSLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQ3BEO1FBQ0N2SyxLQUFLLEVBQUVpSyxZQUFZLEdBQUdwTSxTQUFTLEdBQUcsT0FBTztRQUN6QzJNLGlCQUFpQixFQUFFLENBQUM7UUFDcEJDLGlCQUFpQixFQUFFNUUsYUFBYSxDQUFDUyxTQUFTLENBQUNvRSx3QkFBd0IsSUFBSSxDQUFDO1FBQ3hFQyxTQUFTLEVBQUU7TUFDWixDQUFDLEVBQ0RyTCxhQUNELENBQUMsQ0FBQ2UsTUFBTSxDQUFDOEosUUFBUSxDQUFDO01BQ2xCckUsU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsK0NBQStDLEVBQUU2RSxlQUFlLENBQUM7O01BRTNHO01BQ0EsTUFBTUMsYUFBYSxHQUFHVCxZQUFZLENBQUNDLGdCQUFnQixDQUNsRDtRQUNDdkssS0FBSyxFQUFFaUssWUFBWSxHQUFHcE0sU0FBUyxHQUFHLE9BQU87UUFDekNtTixRQUFRLEVBQUUsQ0FBQztRQUNYQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CTixTQUFTLEVBQUU7TUFDWixDQUFDLEVBQ0RyTCxhQUNELENBQUMsQ0FBQ2UsTUFBTSxDQUFDOEosUUFBUSxDQUFDO01BQ2xCckUsU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsNkNBQTZDLEVBQUU4RSxhQUFhLENBQUM7O01BRXZHO01BQ0E7TUFDQSxJQUFJbEYsYUFBYSxDQUFDUyxTQUFTLENBQUNNLElBQUksSUFBSW1ELE9BQU8sRUFBRTtRQUM1QyxJQUFJbEUsYUFBYSxDQUFDUyxTQUFTLENBQUNNLElBQUksQ0FBQ3NELFVBQVUsRUFBRTtVQUM1Q3BFLFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLHVDQUF1QyxFQUFFOEQsT0FBTyxDQUFDO1FBQzVGLENBQUMsTUFBTTtVQUNOO1VBQ0EsTUFBTW1CLE9BQU8sR0FBR1osWUFBWSxDQUFDYSxlQUFlLENBQUM7WUFBRUMsVUFBVSxFQUFFO1VBQU0sQ0FBQyxFQUFFOUwsYUFBYSxDQUFDLENBQUNlLE1BQU0sQ0FBQzhKLFFBQVEsRUFBRUosT0FBTyxDQUFDO1VBQzVHakUsU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsdUNBQXVDLEVBQUVpRixPQUFPLENBQUM7UUFDNUY7TUFDRDtJQUNELENBQUM7SUFBQXhGLE1BQUEsQ0FFTzJGLDBCQUEwQixHQUFsQyxTQUFBQSwyQkFBbUN4RixhQUFzQyxFQUFFOEQsVUFBbUIsRUFBRTdELFNBQW9CLEVBQVE7TUFDM0gsTUFBTXFFLFFBQVEsR0FBR0MsTUFBTSxDQUFDQyxVQUFVLENBQUNWLFVBQVUsQ0FBQ2hCLFdBQVcsQ0FBQzlDLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDMUgsWUFBWSxDQUFDLENBQUM7TUFFaEcsSUFBSTBNLGdCQUFnQixHQUFHcE8sV0FBVyxDQUFDTSxJQUFJO01BQ3ZDLElBQUlxSSxhQUFhLENBQUNTLFNBQVMsQ0FBQ2dGLGdCQUFnQixJQUFJLElBQUksRUFBRTtRQUNyRDtRQUNBQSxnQkFBZ0IsR0FBR3pGLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDZ0YsZ0JBQWdCO01BQzVELENBQUMsTUFBTSxJQUFJekYsYUFBYSxDQUFDUyxTQUFTLENBQUNpRixlQUFlLEVBQUU7UUFDbkQ7UUFDQUQsZ0JBQWdCLEdBQ2ZyTywwQkFBMEIsQ0FBQzBNLFVBQVUsQ0FBQ2hCLFdBQVcsQ0FBQzlDLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDaUYsZUFBZSxDQUFDLENBQUMsSUFBSXJPLFdBQVcsQ0FBQ00sSUFBSTtNQUNqSCxDQUFDLE1BQU0sSUFBSXFJLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDa0YsZ0NBQWdDLElBQUkzRixhQUFhLENBQUNTLFNBQVMsQ0FBQ21GLDBCQUEwQixJQUFJLElBQUksRUFBRTtRQUNsSTtRQUNBLFFBQVE1RixhQUFhLENBQUNTLFNBQVMsQ0FBQ21GLDBCQUEwQjtVQUN6RCxLQUFLLG9DQUFvQztZQUN4Q0gsZ0JBQWdCLEdBQUc3TixnQ0FBZ0MsQ0FBQzBNLFFBQVEsRUFBRXRFLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDa0YsZ0NBQWdDLENBQUM7WUFDdkg7VUFFRCxLQUFLLHNDQUFzQztZQUMxQ0YsZ0JBQWdCLEdBQUd4TixrQ0FBa0MsQ0FDcERxTSxRQUFRLEVBQ1J0RSxhQUFhLENBQUNTLFNBQVMsQ0FBQ2tGLGdDQUN6QixDQUFDO1lBQ0Q7VUFFRCxLQUFLLHNDQUFzQztVQUMzQztZQUNDRixnQkFBZ0IsR0FBR3ZOLGtDQUFrQyxDQUNwRG9NLFFBQVEsRUFDUnRFLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDa0YsZ0NBQ3pCLENBQUM7WUFDRDtRQUNGO01BQ0Q7TUFFQTFGLFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLDhDQUE4QyxFQUFFcUYsZ0JBQWdCLENBQUM7TUFDM0d4RixTQUFTLENBQUNrQyxXQUFXLENBQ3BCLElBQUluQyxhQUFhLENBQUNJLEVBQUUsd0NBQXdDLEVBQzVEMUkseUJBQXlCLENBQUMrTixnQkFBZ0IsQ0FBQyxJQUFJLE1BQ2hELENBQUM7SUFDRixDQUFDO0lBQUE1RixNQUFBLENBRU9nRyxvQkFBb0IsR0FBNUIsU0FBQUEscUJBQTZCN0YsYUFBc0MsRUFBRThELFVBQW1CLEVBQUU3RCxTQUFvQixFQUFRO01BQ3JILE1BQU1xRSxRQUFRLEdBQUdDLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDVixVQUFVLENBQUNoQixXQUFXLENBQUM5QyxhQUFhLENBQUNTLFNBQVMsQ0FBQzFILFlBQVksQ0FBQyxDQUFDO01BRWhHLElBQUlYLFVBQVUsR0FBRyxNQUFNO01BRXZCLElBQUk0SCxhQUFhLENBQUNTLFNBQVMsQ0FBQ3JJLFVBQVUsRUFBRTtRQUN2QztRQUNBQSxVQUFVLEdBQUc0SCxhQUFhLENBQUNTLFNBQVMsQ0FBQ3JJLFVBQVU7TUFDaEQsQ0FBQyxNQUFNLElBQUk0SCxhQUFhLENBQUNTLFNBQVMsQ0FBQ3FGLFNBQVMsRUFBRTtRQUM3QztRQUNBMU4sVUFBVSxHQUFHRCwrQkFBK0IsQ0FBQzJMLFVBQVUsQ0FBQ2hCLFdBQVcsQ0FBQzlDLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDcUYsU0FBUyxDQUFDLENBQUM7TUFDeEcsQ0FBQyxNQUFNLElBQ045RixhQUFhLENBQUNTLFNBQVMsQ0FBQ3NGLDhCQUE4QixLQUFLL04sU0FBUyxJQUNwRWdJLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDdUYsNkJBQTZCLEVBQ3BEO1FBQ0Q7UUFDQSxJQUFJQyxtQkFBMkI7UUFDL0IsSUFBSWpHLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDc0YsOEJBQThCLEtBQUsvTixTQUFTLEVBQUU7VUFDekVpTyxtQkFBbUIsR0FBR2pHLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDc0YsOEJBQThCO1FBQzdFLENBQUMsTUFBTTtVQUNORSxtQkFBbUIsR0FBRzFCLE1BQU0sQ0FBQ0MsVUFBVSxDQUN0Q1YsVUFBVSxDQUFDaEIsV0FBVyxDQUFDOUMsYUFBYSxDQUFDUyxTQUFTLENBQUN1Riw2QkFBNkIsSUFBSSxFQUFFLENBQ25GLENBQUM7UUFDRjtRQUNBNU4sVUFBVSxHQUFHRSxpQ0FBaUMsQ0FDN0NnTSxRQUFRLEVBQ1IyQixtQkFBbUIsRUFDbkIsQ0FBQyxDQUFDakcsYUFBYSxDQUFDUyxTQUFTLENBQUN5RiwwQkFBMEIsRUFDcERsRyxhQUFhLENBQUNTLFNBQVMsQ0FBQzBGLHlCQUN6QixDQUFDO01BQ0Y7TUFFQWxHLFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLG9DQUFvQyxFQUFFaEksVUFBVSxDQUFDO0lBQzVGLENBQUM7SUFBQXlILE1BQUEsQ0FFT3VHLGlCQUFpQixHQUF6QixTQUFBQSxrQkFBMEJwRyxhQUFzQyxFQUFFOEQsVUFBbUIsRUFBRTdELFNBQW9CLEVBQVE7TUFDbEgsSUFBSUQsYUFBYSxDQUFDUyxTQUFTLENBQUNjLFdBQVcsS0FBS3ZKLFNBQVMsSUFBSWdJLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDYSxVQUFVLEtBQUt0SixTQUFTLEVBQUU7UUFDMUcsT0FBTyxDQUFDO01BQ1Q7TUFDQSxNQUFNc00sUUFBUSxHQUFHQyxNQUFNLENBQUNDLFVBQVUsQ0FBQ1YsVUFBVSxDQUFDaEIsV0FBVyxDQUFDOUMsYUFBYSxDQUFDUyxTQUFTLENBQUMxSCxZQUFZLENBQUMsQ0FBQztNQUNoRyxNQUFNVSxhQUFhLEdBQUcsSUFBSUMsTUFBTSxDQUFDQyxZQUFZLENBQUNDLFdBQVcsQ0FBQyxDQUFDLENBQUM7TUFFNUQsSUFBSXlNLGNBQXNCO01BQzFCLElBQUlyRyxhQUFhLENBQUNTLFNBQVMsQ0FBQ2MsV0FBVyxLQUFLdkosU0FBUyxFQUFFO1FBQ3REcU8sY0FBYyxHQUFHckcsYUFBYSxDQUFDUyxTQUFTLENBQUNjLFdBQVc7TUFDckQsQ0FBQyxNQUFNO1FBQ044RSxjQUFjLEdBQUc5QixNQUFNLENBQUNDLFVBQVUsQ0FBQ1YsVUFBVSxDQUFDaEIsV0FBVyxDQUFDOUMsYUFBYSxDQUFDUyxTQUFTLENBQUNhLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztNQUNyRztNQUNBLE1BQU1nRixpQkFBaUIsR0FBR0QsY0FBYyxLQUFLLENBQUMsR0FBSSxDQUFDL0IsUUFBUSxHQUFHK0IsY0FBYyxJQUFJQSxjQUFjLEdBQUksR0FBRyxHQUFHck8sU0FBUzs7TUFFakg7TUFDQSxNQUFNdUosV0FBVyxHQUFHa0QsWUFBWSxDQUFDQyxnQkFBZ0IsQ0FDaEQ7UUFDQ3ZLLEtBQUssRUFBRSxPQUFPO1FBQ2R3SyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3BCQyxpQkFBaUIsRUFBRTVFLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDb0Usd0JBQXdCLElBQUksQ0FBQztRQUFFO1FBQzFFQyxTQUFTLEVBQUU7TUFDWixDQUFDLEVBQ0RyTCxhQUNELENBQUMsQ0FBQ2UsTUFBTSxDQUFDNkwsY0FBYyxDQUFDO01BQ3hCLE1BQU1FLFdBQVcsR0FBRzlCLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQ2hEO1FBQ0N2SyxLQUFLLEVBQUUsT0FBTztRQUNkZ0wsUUFBUSxFQUFFLENBQUM7UUFDWEMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNuQk4sU0FBUyxFQUFFO01BQ1osQ0FBQyxFQUNEckwsYUFDRCxDQUFDLENBQUNlLE1BQU0sQ0FBQzZMLGNBQWMsQ0FBQztNQUV4QnBHLFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLDJDQUEyQyxFQUFFbUIsV0FBVyxDQUFDO01BQ25HdEIsU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUseUNBQXlDLEVBQUVtRyxXQUFXLENBQUM7TUFFakcsSUFBSUQsaUJBQWlCLEtBQUt0TyxTQUFTLEVBQUU7UUFDcEMsTUFBTXdPLGNBQWMsR0FBRy9CLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQ25EO1VBQ0NDLGlCQUFpQixFQUFFLENBQUM7VUFDcEJDLGlCQUFpQixFQUFFLENBQUM7VUFDcEJFLFNBQVMsRUFBRTtRQUNaLENBQUMsRUFDRHJMLGFBQ0QsQ0FBQyxDQUFDZSxNQUFNLENBQUM4TCxpQkFBaUIsQ0FBQztRQUMzQnJHLFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLDhDQUE4QyxFQUFFb0csY0FBYyxDQUFDO01BQzFHLENBQUMsTUFBTTtRQUNOdkcsU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsOENBQThDLEVBQUUsS0FBSyxDQUFDO01BQ2pHO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUFQLE1BQUEsQ0FRZ0I0RCxjQUFjLEdBQTlCLGVBQUFBLGVBQ0N6RCxhQUFzQyxFQUN0Q3lHLFVBQXNCLEVBQ3RCeEcsU0FBb0IsRUFDcEJ5RyxRQUFrQixFQUNVO01BQUEsSUFBQUMsc0JBQUEsRUFBQUMsc0JBQUE7TUFDNUI7TUFDQTtNQUNBLE1BQU1DLFlBQVksR0FBR0gsUUFBUSxHQUMxQkQsVUFBVSxDQUFDSyxRQUFRLENBQUM5RyxhQUFhLENBQUMrRyxXQUFXLEVBQUUvTyxTQUFTLEVBQUVBLFNBQVMsRUFBRUEsU0FBUyxFQUFFO1FBQUVnUCxTQUFTLEVBQUU7TUFBZ0IsQ0FBQyxDQUFDLEdBQy9HUCxVQUFVLENBQUNLLFFBQVEsQ0FBQzlHLGFBQWEsQ0FBQytHLFdBQVcsRUFBRS9PLFNBQVMsRUFBRUEsU0FBUyxFQUFFQSxTQUFTLEVBQUU7UUFBRWdQLFNBQVMsRUFBRTtNQUFvQixDQUFDLENBQUM7TUFDdEgsTUFBTUMsVUFBNkMsR0FBRyxDQUFDLENBQUM7O01BRXhEO01BQ0EsS0FBQU4sc0JBQUEsR0FBSTNHLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDTSxJQUFJLGNBQUE0RixzQkFBQSxlQUE1QkEsc0JBQUEsQ0FBOEJ4QyxNQUFNLEVBQUU7UUFDekM4QyxVQUFVLENBQUNqSCxhQUFhLENBQUNTLFNBQVMsQ0FBQzFILFlBQVksQ0FBQyxHQUFHO1VBQUVnSSxJQUFJLEVBQUVmLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDTSxJQUFJLENBQUNnQjtRQUFNLENBQUM7TUFDaEcsQ0FBQyxNQUFNO1FBQ05rRixVQUFVLENBQUNqSCxhQUFhLENBQUNTLFNBQVMsQ0FBQzFILFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN0RDs7TUFFQTtNQUNBLElBQUlpSCxhQUFhLENBQUNTLFNBQVMsQ0FBQ2lGLGVBQWUsRUFBRTtRQUM1Q3VCLFVBQVUsQ0FBQ2pILGFBQWEsQ0FBQ1MsU0FBUyxDQUFDaUYsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3pEOztNQUVBO01BQ0EsSUFBSWdCLFFBQVEsRUFBRTtRQUNiLElBQUkxRyxhQUFhLENBQUNTLFNBQVMsQ0FBQ3FGLFNBQVMsRUFBRTtVQUN0Q21CLFVBQVUsQ0FBQ2pILGFBQWEsQ0FBQ1MsU0FBUyxDQUFDcUYsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25EO1FBQ0EsSUFBSTlGLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDdUYsNkJBQTZCLEVBQUU7VUFDMURpQixVQUFVLENBQUNqSCxhQUFhLENBQUNTLFNBQVMsQ0FBQ3VGLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZFO1FBQ0EsSUFBSWhHLGFBQWEsQ0FBQ1MsU0FBUyxDQUFDYSxVQUFVLEVBQUU7VUFDdkMyRixVQUFVLENBQUNqSCxhQUFhLENBQUNTLFNBQVMsQ0FBQ2EsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BEO01BQ0Q7TUFFQXVGLFlBQVksQ0FBQ0ssY0FBYyxDQUFDO1FBQUVDLFNBQVMsRUFBRUY7TUFBVyxDQUFDLENBQUM7O01BRXREO01BQ0EsS0FBQUwsc0JBQUEsR0FBSTVHLGFBQWEsQ0FBQ3lCLGlDQUFpQyxjQUFBbUYsc0JBQUEsZUFBL0NBLHNCQUFBLENBQWlEL04sTUFBTSxFQUFFO1FBQzVELE1BQU11TyxRQUFRLEdBQUdwSCxhQUFhLENBQUN5QixpQ0FBaUMsQ0FBQ3JJLEdBQUcsQ0FBQ1YsMEJBQTBCLENBQUMsQ0FBQ2tFLE1BQU0sQ0FBRUEsTUFBTSxJQUFLO1VBQ25ILE9BQU9BLE1BQU0sS0FBSzVFLFNBQVM7UUFDNUIsQ0FBQyxDQUFhO1FBQ2Q2TyxZQUFZLENBQUNqSyxNQUFNLENBQUN3SyxRQUFRLENBQUM7TUFDOUI7TUFFQSxPQUFPUCxZQUFZLENBQUNRLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMvSSxJQUFJLENBQUVnSixTQUFvQixJQUFXO1FBQzlFLElBQUlBLFNBQVMsQ0FBQ3pPLE1BQU0sRUFBRTtVQUFBLElBQUEwTyxzQkFBQSxFQUFBQyxzQkFBQTtVQUNyQixNQUFNdEQsT0FBTyxHQUFHLENBQUFxRCxzQkFBQSxHQUFBdkgsYUFBYSxDQUFDUyxTQUFTLENBQUNNLElBQUksY0FBQXdHLHNCQUFBLGVBQTVCQSxzQkFBQSxDQUE4QnBELE1BQU0sR0FDakRtRCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUN4RSxXQUFXLENBQUM5QyxhQUFhLENBQUNTLFNBQVMsQ0FBQ00sSUFBSSxDQUFDZ0IsS0FBSyxDQUFDLElBQUF5RixzQkFBQSxHQUM1RHhILGFBQWEsQ0FBQ1MsU0FBUyxDQUFDTSxJQUFJLGNBQUF5RyxzQkFBQSx1QkFBNUJBLHNCQUFBLENBQThCekYsS0FBSztVQUV0QyxJQUFJL0IsYUFBYSxDQUFDUyxTQUFTLENBQUNNLElBQUksSUFBSSxDQUFDbUQsT0FBTyxFQUFFO1lBQzdDO1lBQ0FqRSxTQUFTLENBQUNrQyxXQUFXLENBQUMsSUFBSW5DLGFBQWEsQ0FBQ0ksRUFBRSx3Q0FBd0MsRUFBRSxHQUFHLENBQUM7WUFDeEZILFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQztZQUNoR0gsU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsK0NBQStDLEVBQUUsR0FBRyxDQUFDO1lBQy9GSCxTQUFTLENBQUNrQyxXQUFXLENBQUMsSUFBSW5DLGFBQWEsQ0FBQ0ksRUFBRSw2Q0FBNkMsRUFBRSxFQUFFLENBQUM7WUFDNUZILFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLHVDQUF1QyxFQUFFcEksU0FBUyxDQUFDO1lBQzdGaUksU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsOENBQThDLEVBQUUvSSxXQUFXLENBQUNNLElBQUksQ0FBQztZQUMzR3NJLFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sQ0FBQztZQUMzRkgsU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxDQUFDO1lBQ3ZGSCxTQUFTLENBQUNrQyxXQUFXLENBQUMsSUFBSW5DLGFBQWEsQ0FBQ0ksRUFBRSwyQ0FBMkMsRUFBRXBJLFNBQVMsQ0FBQztZQUNqR2lJLFNBQVMsQ0FBQ2tDLFdBQVcsQ0FBQyxJQUFJbkMsYUFBYSxDQUFDSSxFQUFFLHlDQUF5QyxFQUFFcEksU0FBUyxDQUFDO1lBQy9GaUksU0FBUyxDQUFDa0MsV0FBVyxDQUFDLElBQUluQyxhQUFhLENBQUNJLEVBQUUsOENBQThDLEVBQUVwSSxTQUFTLENBQUM7VUFDckcsQ0FBQyxNQUFNO1lBQ04sSUFBSSxDQUFDNkwsK0JBQStCLENBQUM3RCxhQUFhLEVBQUVzSCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUVySCxTQUFTLENBQUM7WUFDNUUsSUFBSSxDQUFDdUYsMEJBQTBCLENBQUN4RixhQUFhLEVBQUVzSCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUVySCxTQUFTLENBQUM7WUFFdkUsSUFBSXlHLFFBQVEsRUFBRTtjQUNiLElBQUksQ0FBQ2Isb0JBQW9CLENBQUM3RixhQUFhLEVBQUVzSCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUVySCxTQUFTLENBQUM7Y0FDakUsSUFBSSxDQUFDbUcsaUJBQWlCLENBQUNwRyxhQUFhLEVBQUVzSCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUVySCxTQUFTLENBQUM7WUFDL0Q7VUFDRDtRQUNEO1FBQ0E7TUFDRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUFKLE1BQUEsQ0FPZ0I0SCxlQUFlLEdBQS9CLGVBQUFBLGdCQUNDekgsYUFBc0MsRUFDdEN5RyxVQUFzQixFQUN0QnhHLFNBQW9CLEVBQ1E7TUFBQSxJQUFBeUgsc0JBQUE7TUFDNUIsTUFBTWIsWUFBWSxHQUFHSixVQUFVLENBQUNLLFFBQVEsQ0FBQzlHLGFBQWEsQ0FBQytHLFdBQVcsRUFBRS9PLFNBQVMsRUFBRUEsU0FBUyxFQUFFQSxTQUFTLEVBQUU7UUFDcEdnUCxTQUFTLEVBQUU7TUFDWixDQUFDLENBQUM7TUFDRixNQUFNVyxNQUFtRCxHQUFHLENBQUMsQ0FBQztNQUM5RCxNQUFNVixVQUFrQyxHQUFHLENBQUMsQ0FBQztNQUU3Q2pILGFBQWEsQ0FBQzVFLEtBQUssQ0FBQ0csVUFBVSxDQUFDb0csT0FBTyxDQUFFOUUsU0FBUyxJQUFLO1FBQ3JEOEssTUFBTSxDQUFDOUssU0FBUyxDQUFDbUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUluRixTQUFTLENBQUNpRixJQUFJLEVBQUU7VUFDbkI7VUFDQTZGLE1BQU0sQ0FBQzlLLFNBQVMsQ0FBQ21GLElBQUksQ0FBQyxDQUFDNEYsWUFBWSxHQUFHLENBQUMvSyxTQUFTLENBQUNpRixJQUFJLENBQUM7UUFDdkQ7TUFDRCxDQUFDLENBQUM7TUFDRjlCLGFBQWEsQ0FBQzVFLEtBQUssQ0FBQ0UsUUFBUSxDQUFDcUcsT0FBTyxDQUFFTSxPQUFPLElBQUs7UUFDakRnRixVQUFVLENBQUNoRixPQUFPLENBQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM5QixDQUFDLENBQUM7TUFDRjZFLFlBQVksQ0FBQ0ssY0FBYyxDQUFDO1FBQzNCVyxLQUFLLEVBQUVGLE1BQU07UUFDYlIsU0FBUyxFQUFFRjtNQUNaLENBQUMsQ0FBQzs7TUFFRjtNQUNBLEtBQUFTLHNCQUFBLEdBQUkxSCxhQUFhLENBQUN5QixpQ0FBaUMsY0FBQWlHLHNCQUFBLGVBQS9DQSxzQkFBQSxDQUFpRDdPLE1BQU0sRUFBRTtRQUM1RCxNQUFNdU8sUUFBUSxHQUFHcEgsYUFBYSxDQUFDeUIsaUNBQWlDLENBQUNySSxHQUFHLENBQUNWLDBCQUEwQixDQUFDLENBQUNrRSxNQUFNLENBQUVBLE1BQU0sSUFBSztVQUNuSCxPQUFPQSxNQUFNLEtBQUs1RSxTQUFTO1FBQzVCLENBQUMsQ0FBYTtRQUNkNk8sWUFBWSxDQUFDakssTUFBTSxDQUFDd0ssUUFBUSxDQUFDO01BQzlCOztNQUVBO01BQ0EsSUFBSXBILGFBQWEsQ0FBQzVFLEtBQUssQ0FBQzBNLFNBQVMsRUFBRTtRQUNsQ2pCLFlBQVksQ0FBQ2tCLElBQUksQ0FDaEIvSCxhQUFhLENBQUM1RSxLQUFLLENBQUMwTSxTQUFTLENBQUMxTyxHQUFHLENBQUU0TyxRQUFRLElBQUs7VUFDL0MsT0FBTyxJQUFJQyxNQUFNLENBQUNELFFBQVEsQ0FBQ2hHLElBQUksRUFBRWdHLFFBQVEsQ0FBQ0UsVUFBVSxDQUFDO1FBQ3RELENBQUMsQ0FDRixDQUFDO01BQ0Y7TUFFQSxNQUFNQyxXQUFXLEdBQUcsTUFBTXRCLFlBQVksQ0FBQ1EsZUFBZSxDQUFDLENBQUMsRUFBRXJILGFBQWEsQ0FBQzVFLEtBQUssQ0FBQ2dOLFFBQVEsQ0FBQztNQUN2RixNQUFNQyxTQUFTLEdBQUdGLFdBQVcsQ0FBQy9PLEdBQUcsQ0FBRWtQLFFBQVEsSUFBSztRQUMvQyxNQUFNQyxLQUE4QixHQUFHLENBQUMsQ0FBQztRQUN6Q3ZJLGFBQWEsQ0FBQzVFLEtBQUssQ0FBQ0csVUFBVSxDQUFDb0csT0FBTyxDQUFFOUUsU0FBUyxJQUFLO1VBQ3JEO1VBQ0EsUUFBUUEsU0FBUyxDQUFDMkwsZUFBZTtZQUNoQyxLQUFLLFVBQVU7Y0FDZEQsS0FBSyxDQUFDMUwsU0FBUyxDQUFDbUYsSUFBSSxDQUFDLEdBQUdzRyxRQUFRLENBQUN4RixXQUFXLENBQUNqRyxTQUFTLENBQUNpRixJQUFLLENBQUM7Y0FDN0Q7WUFFRCxLQUFLLFVBQVU7Y0FDZHlHLEtBQUssQ0FBQzFMLFNBQVMsQ0FBQ21GLElBQUksQ0FBQyxHQUFHeUcsZUFBZSxDQUFDQyxrQkFBa0IsQ0FDekRKLFFBQVEsQ0FBQ3hGLFdBQVcsQ0FBQ2pHLFNBQVMsQ0FBQ21GLElBQUksQ0FBQyxFQUNwQ3NHLFFBQVEsQ0FBQ3hGLFdBQVcsQ0FBQ2pHLFNBQVMsQ0FBQ2lGLElBQUssQ0FDckMsQ0FBQztjQUNEO1lBRUQsS0FBSzlKLFNBQVM7Y0FDYjtjQUNBdVEsS0FBSyxDQUFDMUwsU0FBUyxDQUFDbUYsSUFBSSxDQUFDLEdBQUdzRyxRQUFRLENBQUN4RixXQUFXLENBQUNqRyxTQUFTLENBQUNtRixJQUFJLENBQUM7Y0FDNUQ7WUFFRDtjQUNDO2NBQ0F1RyxLQUFLLENBQUMxTCxTQUFTLENBQUNtRixJQUFJLENBQUMsR0FBR3lHLGVBQWUsQ0FBQ0Msa0JBQWtCLENBQ3pESixRQUFRLENBQUN4RixXQUFXLENBQUNqRyxTQUFTLENBQUNpRixJQUFLLENBQUMsRUFDckN3RyxRQUFRLENBQUN4RixXQUFXLENBQUNqRyxTQUFTLENBQUNtRixJQUFJLENBQ3BDLENBQUM7VUFDSDtRQUNELENBQUMsQ0FBQztRQUNGaEMsYUFBYSxDQUFDNUUsS0FBSyxDQUFDRSxRQUFRLENBQUNxRyxPQUFPLENBQUVNLE9BQU8sSUFBSztVQUNqRHNHLEtBQUssQ0FBQ3RHLE9BQU8sQ0FBQ0QsSUFBSSxDQUFDLEdBQUdzRyxRQUFRLENBQUN4RixXQUFXLENBQUNiLE9BQU8sQ0FBQ0QsSUFBSSxDQUFDO1FBQ3pELENBQUMsQ0FBQztRQUVGLE9BQU91RyxLQUFLO01BQ2IsQ0FBQyxDQUFDO01BRUZ0SSxTQUFTLENBQUNrQyxXQUFXLENBQUMsSUFBSW5DLGFBQWEsQ0FBQ0ksRUFBRSx3Q0FBd0MsRUFBRWlJLFNBQVMsQ0FBQztJQUMvRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUF4SSxNQUFBLENBT2dCOEksVUFBVSxHQUExQixlQUFBQSxXQUEyQkMsT0FBbUIsRUFBb0I7TUFBQSxJQUFBQyxLQUFBO01BQ2pFLElBQUksQ0FBQyxJQUFJLENBQUNDLFFBQVEsRUFBRTtRQUNuQixPQUFPLElBQUkvSixPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFK0osTUFBTSxLQUFLO1VBQ3ZDalAsT0FBTyxDQUFDa1AsSUFBSSxDQUFDO1lBQUVoSCxJQUFJLEVBQUU7VUFBcUIsQ0FBQyxDQUFDLENBQzFDMUQsSUFBSSxDQUFDLE1BQVk7WUFDakIySyxHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsaUNBQWlDLEVBQUUseUJBQXlCLENBQUMsRUFBRSxZQUEwQjtjQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBeFEsTUFBQSxFQUF0QnlRLE1BQU0sT0FBQUMsS0FBQSxDQUFBSCxJQUFBLEdBQUFJLElBQUEsTUFBQUEsSUFBQSxHQUFBSixJQUFBLEVBQUFJLElBQUE7Z0JBQU5GLE1BQU0sQ0FBQUUsSUFBQSxJQUFBSCxTQUFBLENBQUFHLElBQUE7Y0FBQTtjQUN4RixNQUFNQyxTQUFTLEdBQUdILE1BQU0sQ0FBQyxDQUFDLENBQW9CO2NBQzlDLE1BQU1JLElBQUksR0FBR0osTUFBTSxDQUFDLENBQUMsQ0FBb0I7Y0FDekMsTUFBTUssS0FBSyxHQUFHLElBQUlELElBQUksQ0FBQyxDQUFDO2NBRXhCQyxLQUFLLENBQUNDLFlBQVksQ0FBRUMsTUFBd0IsSUFBSztnQkFDaEQsTUFBTUMsS0FBSyxHQUFHRCxNQUFNLENBQUNFLFlBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQ3pDLE1BQU1DLE9BQU8sR0FBR0gsTUFBTSxDQUFDRSxZQUFZLENBQUMsWUFBWSxDQUkvQztnQkFFRCxJQUFJRCxLQUFLLEtBQUssWUFBWSxFQUFFO2tCQUMzQixJQUFJRSxPQUFPLENBQUM3TCxjQUFjLEVBQUU7b0JBQzNCMEssS0FBSSxDQUFDb0IsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQ0MsUUFBUSxDQUFDSCxPQUFPLENBQUM3TCxjQUFjLEVBQUU2TCxPQUFPLENBQUM1TCxNQUFNLENBQUM7a0JBQ2xGLENBQUMsTUFBTTtvQkFDTnlLLEtBQUksQ0FBQ29CLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNFLGdCQUFnQixDQUFDSixPQUFPLENBQUMvSyxRQUFRLENBQUM7a0JBQ3BFO2dCQUNEO2NBQ0QsQ0FBQyxDQUFDO2NBRUY0SixLQUFJLENBQUN3QixLQUFLLEdBQUcsSUFBSVosU0FBUyxDQUFDO2dCQUMxQmEsS0FBSyxFQUFFLE9BQU87Z0JBQ2RDLE1BQU0sRUFBRTtjQUNULENBQUMsQ0FBQztjQUNGMUIsS0FBSSxDQUFDd0IsS0FBSyxDQUFDRyxPQUFPLENBQUNiLEtBQTJCLENBQUM7Y0FFL0NkLEtBQUksQ0FBQ0MsUUFBUSxHQUFHLElBQUkyQixPQUFPLENBQUMsYUFBYSxFQUFFO2dCQUMxQ0MsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCQyxTQUFTLEVBQUUsTUFBTTtnQkFDakJ6SixPQUFPLEVBQUUsQ0FBQzJILEtBQUksQ0FBQ3dCLEtBQUs7Y0FDckIsQ0FBQyxDQUFDO2NBRUZ6QixPQUFPLENBQUNnQyxZQUFZLENBQUMvQixLQUFJLENBQUNDLFFBQVEsQ0FBQyxDQUFDLENBQUM7O2NBRXJDOUosT0FBTyxDQUFDNkosS0FBSSxDQUFDQyxRQUFRLENBQUM7WUFDdkIsQ0FBQyxDQUFDO1lBQ0Y7VUFDRCxDQUFDLENBQUMsQ0FDRHpGLEtBQUssQ0FBQyxZQUFZO1lBQ2xCMEYsTUFBTSxDQUFDLENBQUM7VUFDVCxDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7TUFDSCxDQUFDLE1BQU07UUFDTixPQUFPaEssT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDOEosUUFBUSxDQUFDO01BQ3RDO0lBQ0QsQ0FBQztJQUFBakosTUFBQSxDQUVZZ0wsWUFBWSxHQUF6QixlQUFBQSxhQUEwQmpDLE9BQW1CLEVBQUVrQyxLQUFhLEVBQWlCO01BQzVFLE1BQU03SyxTQUFTLEdBQUcySSxPQUFPLENBQUNsRixRQUFRLENBQUMsVUFBVSxDQUFjO01BRTNELElBQUksSUFBSSxDQUFDZixlQUFlLElBQUksSUFBSSxDQUFDQSxlQUFlLENBQUM5SixNQUFNLEVBQUU7UUFDeEQsTUFBTW1ILGFBQWEsR0FBRyxJQUFJLENBQUMyQyxlQUFlLENBQUNwRixJQUFJLENBQUMsVUFBVXdOLElBQUksRUFBRTtVQUMvRCxPQUFRQSxJQUFJLENBQTZCM0ssRUFBRSxLQUFLMEssS0FBSztRQUN0RCxDQUFDLENBQXdDO1FBRXpDLElBQUk5SyxhQUFhLEVBQUU7VUFDbEIsSUFBSTtZQUNILE1BQU1nTCxNQUFNLEdBQUdwQyxPQUFPLENBQUNsRixRQUFRLENBQUMsQ0FBZTtZQUUvQyxNQUFNdUgsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDdEMsVUFBVSxDQUFDQyxPQUFPLENBQUM7WUFDOUM7WUFDQXFDLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQztZQUV0QixJQUFJLENBQUNiLEtBQUssQ0FBQ2MsV0FBVyxDQUFDbEwsU0FBUyxDQUFDNkMsV0FBVyxDQUFDLElBQUlnSSxLQUFLLFdBQVcsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQ1QsS0FBSyxDQUFDZSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN2Q0gsT0FBTyxDQUFDSSxNQUFNLENBQUN6QyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzs7WUFFaEMsTUFBTTBDLFFBQVEsR0FBRyxDQUNoQixJQUFJLENBQUM3SCxjQUFjLENBQUN6RCxhQUFhLEVBQUVnTCxNQUFNLEVBQUUvSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQzNELElBQUksQ0FBQ3dILGVBQWUsQ0FBQ3pILGFBQWEsRUFBRWdMLE1BQU0sRUFBRS9LLFNBQVMsQ0FBQyxDQUN0RDtZQUVELE1BQU1sQixPQUFPLENBQUN3TSxHQUFHLENBQUNELFFBQVEsQ0FBQztZQUMzQixJQUFJLENBQUNqQixLQUFLLENBQUNtQixlQUFlLENBQUMsY0FBYyxFQUFFLE1BQU07Y0FBQSxJQUFBQyxxQkFBQTtjQUNoRDtjQUNBLENBQUFBLHFCQUFBLEdBQUMsSUFBSSxDQUFDcEIsS0FBSyxDQUFDcUIsY0FBYyxDQUFDLENBQUMsY0FBQUQscUJBQUEsdUJBQTVCQSxxQkFBQSxDQUE4Q0UsS0FBSyxDQUFDLENBQUM7Y0FDckRWLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUN4QixDQUFDLENBQUM7WUFDRixJQUFJLENBQUNiLEtBQUssQ0FBQ2MsV0FBVyxDQUFDbEwsU0FBUyxDQUFDNkMsV0FBVyxDQUFDLElBQUlnSSxLQUFLLFdBQVcsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQ1QsS0FBSyxDQUFDdUIsT0FBTyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDdkIsS0FBSyxDQUFDZSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztVQUNuQyxDQUFDLENBQUMsT0FBTzlILEdBQUcsRUFBRTtZQUNiQyxHQUFHLENBQUNDLEtBQUssQ0FBQ0YsR0FBYSxDQUFDO1VBQ3pCO1FBQ0Q7TUFDRDtJQUNELENBQUM7SUFBQSxPQUFBcEUsZ0NBQUE7RUFBQSxFQTlvQjZDMk0sbUJBQW1CLElBQUFDLHlCQUFBLENBQUFyTSxPQUFBLENBQUFLLFNBQUEsYUFBQVQsS0FBQSxHQUFBME0sTUFBQSxDQUFBQyx3QkFBQSxDQUFBdk0sT0FBQSxDQUFBSyxTQUFBLGFBQUFMLE9BQUEsQ0FBQUssU0FBQSxHQUFBZ00seUJBQUEsQ0FBQXJNLE9BQUEsQ0FBQUssU0FBQSxhQUFBUCxLQUFBLEdBQUF3TSxNQUFBLENBQUFDLHdCQUFBLENBQUF2TSxPQUFBLENBQUFLLFNBQUEsYUFBQUwsT0FBQSxDQUFBSyxTQUFBLElBQUFMLE9BQUEsTUFBQUQsTUFBQTtFQUFBLE9BaXBCbkROLGdDQUFnQztBQUFBIiwiaWdub3JlTGlzdCI6W119
|