@sapui5/sap.fe.core 1.101.1 → 1.102.2
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/AppComponent.js +5 -5
- package/src/sap/fe/core/AppComponent.ts +19 -18
- package/src/sap/fe/core/AppStateHandler.js +4 -4
- package/src/sap/fe/core/AppStateHandler.ts +9 -9
- package/src/sap/fe/core/CommonUtils.js +59 -93
- package/src/sap/fe/core/CommonUtils.ts +80 -99
- package/src/sap/fe/core/ExtensionAPI.js +2 -4
- package/src/sap/fe/core/ExtensionAPI.ts +1 -3
- package/src/sap/fe/core/PageController.js +14 -9
- package/src/sap/fe/core/PageController.ts +8 -2
- package/src/sap/fe/core/TemplateComponent.js +6 -6
- package/src/sap/fe/core/TemplateComponent.ts +5 -5
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +2 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +303 -75
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +273 -64
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +234 -123
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +176 -114
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +34 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +44 -12
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +30 -28
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +38 -31
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +157 -102
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +155 -103
- package/src/sap/fe/core/controllerextensions/MassEdit.js +4 -3
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +15 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +3 -3
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -2
- package/src/sap/fe/core/controllerextensions/Paginator.js +12 -3
- package/src/sap/fe/core/controllerextensions/Paginator.ts +11 -2
- package/src/sap/fe/core/controllerextensions/Share.js +19 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +18 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +2 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
- package/src/sap/fe/core/controllerextensions/ViewState.js +11 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +10 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +57 -106
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +6 -6
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.js +4 -4
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +3 -3
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1587 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +26 -13
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +785 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +179 -22
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1175 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +203 -98
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +597 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +46 -27
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +20 -18
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/CommandExecution.js +14 -3
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -2
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +34 -29
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +33 -29
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +1 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +17 -7
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +9 -3
- package/src/sap/fe/core/controls/FileWrapper.js +49 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +34 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
- package/src/sap/fe/core/controls/FormElementWrapper.ts +12 -1
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +28 -63
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -36
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -36
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
- package/src/sap/fe/core/converters/annotations/DataField.js +20 -4
- package/src/sap/fe/core/converters/annotations/DataField.ts +24 -2
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -12
- package/src/sap/fe/core/converters/controls/Common/Action.ts +3 -9
- package/src/sap/fe/core/converters/controls/Common/Chart.js +10 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +8 -3
- package/src/sap/fe/core/converters/controls/Common/Form.js +12 -14
- package/src/sap/fe/core/converters/controls/Common/Form.ts +17 -19
- package/src/sap/fe/core/converters/controls/Common/Table.js +149 -66
- package/src/sap/fe/core/converters/controls/Common/Table.ts +136 -52
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +22 -12
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +23 -12
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -5
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +15 -10
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +26 -24
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +35 -33
- package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +25 -25
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +35 -38
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
- package/src/sap/fe/core/formatters/TableFormatter.js +73 -12
- package/src/sap/fe/core/formatters/TableFormatter.ts +70 -15
- package/src/sap/fe/core/fpm/Component.js +2 -2
- package/src/sap/fe/core/fpm/Component.ts +1 -1
- package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
- package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
- package/src/sap/fe/core/helpers/ClassSupport.js +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.ts +1 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
- package/src/sap/fe/core/helpers/MassEditHelper.js +399 -152
- package/src/sap/fe/core/helpers/MassEditHelper.ts +385 -163
- package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +20 -30
- package/src/sap/fe/core/helpers/StableIdHelper.js +5 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -4
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/library.js +12 -3
- package/src/sap/fe/core/library.ts +9 -0
- package/src/sap/fe/core/messagebundle.properties +125 -180
- package/src/sap/fe/core/messagebundle_ar.properties +30 -63
- package/src/sap/fe/core/messagebundle_bg.properties +30 -63
- package/src/sap/fe/core/messagebundle_ca.properties +30 -63
- package/src/sap/fe/core/messagebundle_cs.properties +30 -63
- package/src/sap/fe/core/messagebundle_cy.properties +30 -63
- package/src/sap/fe/core/messagebundle_da.properties +31 -64
- package/src/sap/fe/core/messagebundle_de.properties +30 -63
- package/src/sap/fe/core/messagebundle_el.properties +31 -64
- package/src/sap/fe/core/messagebundle_en.properties +31 -64
- package/src/sap/fe/core/messagebundle_en_GB.properties +31 -64
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +40 -73
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +31 -64
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +49 -82
- package/src/sap/fe/core/messagebundle_es.properties +30 -63
- package/src/sap/fe/core/messagebundle_es_MX.properties +30 -63
- package/src/sap/fe/core/messagebundle_et.properties +30 -63
- package/src/sap/fe/core/messagebundle_fi.properties +30 -63
- package/src/sap/fe/core/messagebundle_fr.properties +33 -66
- package/src/sap/fe/core/messagebundle_fr_CA.properties +30 -63
- package/src/sap/fe/core/messagebundle_hi.properties +30 -63
- package/src/sap/fe/core/messagebundle_hr.properties +30 -63
- package/src/sap/fe/core/messagebundle_hu.properties +29 -62
- package/src/sap/fe/core/messagebundle_id.properties +31 -64
- package/src/sap/fe/core/messagebundle_it.properties +30 -63
- package/src/sap/fe/core/messagebundle_iw.properties +30 -63
- package/src/sap/fe/core/messagebundle_ja.properties +30 -63
- package/src/sap/fe/core/messagebundle_kk.properties +30 -63
- package/src/sap/fe/core/messagebundle_ko.properties +30 -63
- package/src/sap/fe/core/messagebundle_lt.properties +30 -63
- package/src/sap/fe/core/messagebundle_lv.properties +30 -63
- package/src/sap/fe/core/messagebundle_ms.properties +31 -64
- package/src/sap/fe/core/messagebundle_nl.properties +31 -64
- package/src/sap/fe/core/messagebundle_no.properties +30 -63
- package/src/sap/fe/core/messagebundle_pl.properties +31 -64
- package/src/sap/fe/core/messagebundle_pt.properties +31 -64
- package/src/sap/fe/core/messagebundle_pt_PT.properties +30 -63
- package/src/sap/fe/core/messagebundle_ro.properties +30 -63
- package/src/sap/fe/core/messagebundle_ru.properties +30 -63
- package/src/sap/fe/core/messagebundle_sh.properties +30 -63
- package/src/sap/fe/core/messagebundle_sk.properties +30 -63
- package/src/sap/fe/core/messagebundle_sl.properties +32 -65
- package/src/sap/fe/core/messagebundle_sv.properties +30 -63
- package/src/sap/fe/core/messagebundle_th.properties +30 -63
- package/src/sap/fe/core/messagebundle_tr.properties +30 -63
- package/src/sap/fe/core/messagebundle_uk.properties +31 -64
- package/src/sap/fe/core/messagebundle_vi.properties +31 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +30 -63
- package/src/sap/fe/core/messagebundle_zh_TW.properties +31 -64
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -9
- package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +8 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -6
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +10 -9
- package/src/sap/fe/core/services/ShellServicesFactory.js +36 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +38 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -4
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +34 -36
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
- package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
- package/src/sap/fe/core/templating/FilterHelper.js +4 -4
- package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
- package/src/sap/fe/core/templating/PropertyHelper.js +58 -35
- package/src/sap/fe/core/templating/PropertyHelper.ts +19 -4
- package/src/sap/fe/core/templating/UIFormatters.js +16 -5
- package/src/sap/fe/core/templating/UIFormatters.ts +14 -5
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/AnnotationHelper.js +0 -331
- package/src/sap/fe/core/AnnotationHelper.ts +0 -321
- package/src/sap/fe/core/RouterProxy.js +0 -938
- package/src/sap/fe/core/TransactionHelper.js +0 -1577
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -146
- package/src/sap/fe/core/actions/draft.js +0 -665
- package/src/sap/fe/core/actions/messageHandling.js +0 -579
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/helpers/AppStartupHelper", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/SemanticKeyHelper", "sap/ui/base/BindingParser", "sap/ui/base/EventProvider", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/model/odata/v4/ODataUtils"], function (Log, BusyLocker, messageHandling, Placeholder, AppStartupHelper, ClassSupport, EditState, ModelHelper, SemanticKeyHelper, BindingParser, EventProvider, Service, ServiceFactory, ODataUtils) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
|
|
@@ -353,7 +353,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/actions/messageHandling", "sap/fe/co
|
|
|
353
353
|
|
|
354
354
|
var sTargetURLPromise, bIsStickyMode;
|
|
355
355
|
|
|
356
|
-
if (oContext.getModel() && oContext.getModel().getMetaModel) {
|
|
356
|
+
if (oContext.getModel() && oContext.getModel().getMetaModel && oContext.getModel().getMetaModel()) {
|
|
357
357
|
bIsStickyMode = ModelHelper.isStickySessionSupported(oContext.getModel().getMetaModel());
|
|
358
358
|
}
|
|
359
359
|
|
|
@@ -485,7 +485,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/actions/messageHandling", "sap/fe/co
|
|
|
485
485
|
|
|
486
486
|
|
|
487
487
|
if (sTargetPath.length === 0 && this.bExitOnNavigateBackToRoot) {
|
|
488
|
-
|
|
488
|
+
this.oRouterProxy.exitFromApp();
|
|
489
|
+
return Promise.resolve(true);
|
|
489
490
|
} // If the context is deferred or async, we add (...) to the path
|
|
490
491
|
|
|
491
492
|
|
|
@@ -531,7 +532,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/actions/messageHandling", "sap/fe/co
|
|
|
531
532
|
|
|
532
533
|
this._fireRouteMatchEvents(mEventParameters);
|
|
533
534
|
|
|
534
|
-
return Promise.resolve();
|
|
535
|
+
return Promise.resolve(true);
|
|
535
536
|
}
|
|
536
537
|
}
|
|
537
538
|
|
|
@@ -572,7 +573,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/actions/messageHandling", "sap/fe/co
|
|
|
572
573
|
|
|
573
574
|
_this7.oRouter.navTo(sTargetRoute, oRouteParameters);
|
|
574
575
|
|
|
575
|
-
return Promise.resolve();
|
|
576
|
+
return Promise.resolve(true);
|
|
576
577
|
});
|
|
577
578
|
}
|
|
578
579
|
|
|
@@ -581,6 +582,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/actions/messageHandling", "sap/fe/co
|
|
|
581
582
|
// The navigation did not happen --> remove the navigation parameters from the queue as they shouldn't be used
|
|
582
583
|
_this7.navigationInfoQueue.pop();
|
|
583
584
|
}
|
|
585
|
+
|
|
586
|
+
return bNavigated;
|
|
584
587
|
});
|
|
585
588
|
}
|
|
586
589
|
/**
|
|
@@ -962,4 +965,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/actions/messageHandling", "sap/fe/co
|
|
|
962
965
|
|
|
963
966
|
return RoutingServiceFactory;
|
|
964
967
|
}, false);
|
|
965
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiZGVmaW5lVUk1Q2xhc3MiLCJldmVudCIsIkV2ZW50UHJvdmlkZXIiLCJSb3V0aW5nU2VydmljZSIsIm5hdmlnYXRpb25JbmZvUXVldWUiLCJpbml0Iiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwic2NvcGVUeXBlIiwib0FwcENvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib01vZGVsIiwiZ2V0TW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1JvdXRlciIsImdldFJvdXRlciIsIm9Sb3V0ZXJQcm94eSIsImdldFJvdXRlclByb3h5IiwiZXZlbnRQcm92aWRlciIsIm9Sb3V0aW5nQ29uZmlnIiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm9Sb290Vmlld0NvbmZpZyIsIl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uIiwib0FwcENvbmZpZyIsIm91dGJvdW5kcyIsImNyb3NzTmF2aWdhdGlvbiIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJiZWZvcmVFeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiX2ZuT25Sb3V0ZU1hdGNoZWQiLCJmaXJlRXZlbnQiLCJleGl0IiwiZGVzdHJveSIsImlzRkNMIiwidmlld05hbWUiLCJfbVRhcmdldHMiLCJPYmplY3QiLCJrZXlzIiwidGFyZ2V0cyIsImZvckVhY2giLCJzVGFyZ2V0TmFtZSIsImFzc2lnbiIsInRhcmdldE5hbWUiLCJjb250ZXh0UGF0dGVybiIsInVuZGVmaW5lZCIsInZpZXdMZXZlbCIsIl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybiIsIl9tUm91dGVzIiwic1JvdXRlS2V5Iiwicm91dGVzIiwib1JvdXRlTWFuaWZlc3RJbmZvIiwiYVJvdXRlVGFyZ2V0cyIsIkFycmF5IiwiaXNBcnJheSIsInRhcmdldCIsInNSb3V0ZU5hbWUiLCJuYW1lIiwic1JvdXRlUGF0dGVybiIsInBhdHRlcm4iLCJsZW5ndGgiLCJpbmRleE9mIiwiTG9nIiwid2FybmluZyIsImlSb3V0ZUxldmVsIiwicm91dGVMZXZlbCIsImkiLCJzUGFyZW50VGFyZ2V0TmFtZSIsInBhcmVudCIsInB1c2giLCJGQ0xMZXZlbCIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImFMZXZlbDBSb3V0ZU5hbWVzIiwiYUxldmVsMVJvdXRlTmFtZXMiLCJzRGVmYXVsdFJvdXRlTmFtZSIsInNOYW1lIiwiaUxldmVsIiwic0RlZmF1bHRUYXJnZXROYW1lIiwic2xpY2UiLCJzQ29udGV4dFBhdGgiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJvU2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm1hcCIsInNUYXJnZXRLZXkiLCJzb3J0IiwiYSIsImIiLCJmdWxsQ29udGV4dFBhdGgiLCJuYXZpZ2F0aW9uIiwic05hdk5hbWUiLCJ0YXJnZXRSb3V0ZSIsImRldGFpbCIsInJvdXRlIiwic3RhcnRzV2l0aCIsInNQYXR0ZXJuIiwicmVwbGFjZSIsInJlZ2V4IiwiUmVnRXhwIiwibWF0Y2giLCJfZ2V0Um91dGVJbmZvcm1hdGlvbiIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIl9nZXRDb21wb25lbnRJZCIsInNPd25lcklkIiwic0NvbXBvbmVudElkIiwic3Vic3RyIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJzVGFyZ2V0Q29tcG9uZW50SWQiLCJfc093bmVySWQiLCJnZXRJZCIsInNDb3JyZWN0VGFyZ2V0TmFtZSIsImlkIiwidmlld0lkIiwiZ2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9MYXN0U2VtYW50aWNNYXBwaW5nIiwic2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9NYXBwaW5nIiwibmF2aWdhdGVUbyIsIm1QYXJhbWV0ZXJNYXBwaW5nIiwiYlByZXNlcnZlSGlzdG9yeSIsInNUYXJnZXRVUkxQcm9taXNlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY1BhdGgiLCJwcmVwYXJlUGFyYW1ldGVycyIsInRoZW4iLCJtUGFyYW1ldGVycyIsImdldFVSTCIsInNUYXJnZXRVUkwiLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJzcGxpdCIsImFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwic1BhcmFtZXRlcktleSIsInNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiIsIm9QYXJzZWRFeHByZXNzaW9uIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJzUHJvcGVydHlQYXRoIiwiam9pbiIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5Iiwib1ZhbHVlIiwib1Byb3BlcnR5SW5mbyIsImdldE9iamVjdCIsInNFZG1UeXBlIiwiJFR5cGUiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsImFsbCIsImFSZXNvbHZlZFBhcmFtZXRlcnMiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImFwcGx5Iiwia2V5IiwiYUFsbFJlc29sdmVkUGFyYW1ldGVycyIsIm9QYXJhbWV0ZXJzIiwib1Jlc29sdmVkUGFyYW1ldGVyIiwib0Vycm9yIiwiZXJyb3IiLCJfZmlyZVJvdXRlTWF0Y2hFdmVudHMiLCJFZGl0U3RhdGUiLCJjbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSIsIm5hdmlnYXRlVG9Db250ZXh0Iiwib1ZpZXdEYXRhIiwib0N1cnJlbnRUYXJnZXRJbmZvIiwib1JvdXRlUGFyYW1ldGVyc1Byb21pc2UiLCJ0YXJnZXRQYXRoIiwib1JvdXRlRGV0YWlsIiwicGFyYW1ldGVycyIsInNUYXJnZXRQYXRoIiwiX2dldFBhdGhGcm9tQ29udGV4dCIsImJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QiLCJleGl0RnJvbUFwcCIsImFzeW5jQ29udGV4dCIsImJEZWZlcnJlZENvbnRleHQiLCJzTGF5b3V0IiwiX2NhbGN1bGF0ZUxheW91dCIsIm9OYXZpZ2F0aW9uSW5mbyIsIm9Bc3luY0NvbnRleHQiLCJiVGFyZ2V0RWRpdGFibGUiLCJlZGl0YWJsZSIsImJQZXJzaXN0T1BTY3JvbGwiLCJ1c2VDb250ZXh0IiwidXBkYXRlRkNMTGV2ZWwiLCJiUmVjcmVhdGVDb250ZXh0IiwiYkRyYWZ0TmF2aWdhdGlvbiIsImJTaG93UGxhY2Vob2xkZXIiLCJzaG93UGxhY2Vob2xkZXIiLCJiTmF2aWdhdGVUb1NpYmxpbmdFbnRpdHkiLCJjaGVja05vSGFzaENoYW5nZSIsInNDdXJyZW50SGFzaE5vQXBwU3RhdGUiLCJnZXRIYXNoIiwibUV2ZW50UGFyYW1ldGVycyIsImdldFJvdXRlSW5mb0J5SGFzaCIsIm5hdmlnYXRpb25JbmZvIiwicm91dGVJbmZvcm1hdGlvbiIsInNDdXJyZW50Um91dGVOYW1lIiwicm91dGVQYXR0ZXJuIiwic0N1cnJlbnRSb3V0ZVBhdHRlcm4iLCJ2aWV3cyIsImFDdXJyZW50Vmlld3MiLCJzZXRGb2N1c0ZvcmNlZCIsImJGb3JjZUZvY3VzIiwidHJhbnNpZW50Iiwib1JvdXRlSW5mbyIsIm9Sb3V0ZSIsInNMYXN0VGFyZ2V0TmFtZSIsIm9UYXJnZXQiLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib1JvdXRlUGFyYW1ldGVycyIsIm5hdlRvIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJOYXZpZ2F0ZWQiLCJwb3AiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5Iiwic1BhdGgiLCJ0ZXN0Iiwic1NlbWFudGljUGF0aCIsInRlY2huaWNhbFBhdGgiLCJzZW1hbnRpY1BhdGgiLCJfZmluZFBhdGhUb05hdmlnYXRlIiwiX2NoZWNrQ29udGV4dEZvclNlbWFudGljUGF0aCIsInNFbnRpdHlTZXROYW1lIiwiZ2V0U2VtYW50aWNLZXlzIiwiaXNEcmFmdFN1cHBvcnRlZCIsImlzQSIsImlzUmVsYXRpdmUiLCJnZXRIZWFkZXJDb250ZXh0Iiwic3Vic3RyaW5nIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY2FsY3VsYXRlTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJfYmVmb3JlUm91dGVNYXRjaGVkIiwiYlBsYWNlaG9sZGVyRW5hYmxlZCIsIlBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJvUm9vdFZpZXciLCJnZXRSb290Q29udHJvbCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiX29uUm91dGVNYXRjaGVkIiwib0V2ZW50Iiwib0FwcFN0YXRlSGFuZGxlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImlzTG9ja2VkIiwidW5sb2NrIiwiZ2V0UGFyYW1ldGVycyIsImNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAiLCJiUmVhc29uSXNJYXBwU3RhdGUiLCJyZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCIsImdldFBhcmFtZXRlciIsImNvbmZpZyIsImhpc3RvcnkiLCJzdGF0ZSIsImZlTGV2ZWwiLCJyZXN0b3JlSGlzdG9yeSIsInJlc29sdmVSb3V0ZU1hdGNoIiwiY2F0Y2giLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImRldGFjaEV2ZW50IiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImdldFJvdXRlRnJvbUhhc2giLCJzSGFzaCIsImdldEhhc2hDaGFuZ2VyIiwiaGFzaCIsImdldE1ldGFkYXRhIiwiZmlsdGVyIiwiZ2V0VGFyZ2V0c0Zyb21Sb3V0ZSIsImFUYXJnZXQiLCJzVGFyZ2V0IiwiaW5pdGlhbGl6ZVJvdXRpbmciLCJiaW5kIiwiYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwicmVzZXRFZGl0U3RhdGUiLCJiSXNJYXBwU3RhdGUiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsIm9TdGFydHVwUGFyYW1ldGVycyIsImJIYXNTdGFydFVwUGFyYW1ldGVycyIsInByZWZlcnJlZE1vZGUiLCJfbWFuYWdlQ3JlYXRlU3RhcnR1cCIsIl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAiLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsIkFwcFN0YXJ0dXBIZWxwZXIiLCJnZXRDb250ZXh0UGF0aCIsImdldENyZWF0ZVN0YXJ0dXBIYXNoIiwic05ld0hhc2giLCJyZXBsYWNlSGFzaCIsImdldERlZXBMaW5rU3RhcnR1cEhhc2giLCJnZXRNYW5pZmVzdCIsInJvdXRpbmciLCJvRGVlcExpbmsiLCJjb250ZXh0Iiwic1RlY2huaWNhbFBhdGgiLCJnZXRPdXRib3VuZHMiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiUm91dGluZ1NlcnZpY2VGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJvU2VydmljZUNvbnRleHQiLCJvUm91dGluZ1NlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXNCTUEsc0IsV0FETEMsY0FBYyxDQUFDLDZDQUFELEMsVUFFYkMsS0FBSyxFLFVBRUxBLEtBQUssRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFIOEJDLGE7Ozs7Ozs7Ozs7OztNQVd4QkMsYzs7Ozs7Ozs7Ozs7YUFnQlpDLG1CLEdBQTZCLEU7Ozs7Ozs7V0FHN0JDLEksR0FBQSxnQkFBTztBQUNOLFVBQU1DLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCOztBQUNBLFVBQUlELFFBQVEsQ0FBQ0UsU0FBVCxLQUF1QixXQUEzQixFQUF3QztBQUN2QyxhQUFLQyxhQUFMLEdBQXFCSCxRQUFRLENBQUNJLFdBQTlCO0FBQ0EsYUFBS0MsTUFB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QUFLLEdBQUc0QixTQUFTLENBQUMxQixJQUFsQjtBQUNBOztBQUVELFlBQUlGLEtBQUosRUFBVztBQUNWO0FBQ0MsVUFBQSxPQUFJLENBQUNsUixPQUFMLENBQWFtUixjQUFiLEdBQThCdUIsV0FBL0IsQ0FBbUR4QixLQUFuRDtBQUNBO0FBQ0QsT0F6Qk0sQ0FBUDtBQTBCQSxLOztXQUVEK0IsWSxHQUFBLHdCQUFlO0FBQ2QsYUFBTyxLQUFLdlMsU0FBWjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDNlIsYyxHQUFBLDBCQUFpQjtBQUNoQixhQUFPLEtBQUtyTyxZQUFaO0FBQ0EsSzs7V0FDRGdQLFksR0FBQSx3QkFBb0I7QUFDbkIsYUFBTyxJQUFQO0FBQ0EsSzs7O0lBNzFCa0NDLE87Ozs7TUFnMkI5QkMscUI7Ozs7Ozs7OztZQUNMQyxjLEdBQUEsd0JBQWVDLGVBQWYsRUFBd0U7QUFDdkUsVUFBTUMsZUFBZSxHQUFHLElBQUluVSxjQUFKLENBQW1Ca1UsZUFBbkIsQ0FBeEI7QUFDQSxhQUFPQyxlQUFlLENBQUMzUyxXQUF2QjtBQUNBLEs7OztJQUprQzRTLGM7O1NBT3JCSixxQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9hY3Rpb25zL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvQnVzeUxvY2tlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IEFwcFN0YXJ0dXBIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQXBwU3RhcnR1cEhlbHBlclwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNLZXlIZWxwZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvUm91dGVyUHJveHlcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFVdGlscyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhVXRpbHNcIjtcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xudHlwZSBSb3V0aW5nU2VydmljZVNldHRpbmdzID0ge307XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZUV2ZW50aW5nXCIpXG5jbGFzcyBSb3V0aW5nU2VydmljZUV2ZW50aW5nIGV4dGVuZHMgRXZlbnRQcm92aWRlciB7XG5cdEBldmVudCgpXG5cdHJvdXRlTWF0Y2hlZCE6IEZ1bmN0aW9uO1xuXHRAZXZlbnQoKVxuXHRhZnRlclJvdXRlTWF0Y2hlZCE6IEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgdHlwZSBTZW1hbnRpY01hcHBpbmcgPSB7XG5cdHNlbWFudGljUGF0aDogc3RyaW5nO1xuXHR0ZWNobmljYWxQYXRoOiBzdHJpbmc7XG59O1xuZXhwb3J0IGNsYXNzIFJvdXRpbmdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdG9BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cdG9Nb2RlbCE6IE9EYXRhTW9kZWw7XG5cdG9NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblx0b1JvdXRlciE6IFJvdXRlcjtcblx0b1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cdGV2ZW50UHJvdmlkZXIhOiBFdmVudFByb3ZpZGVyO1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55Pjtcblx0b3V0Ym91bmRzOiBhbnk7XG5cdF9tVGFyZ2V0czogYW55O1xuXHRfbVJvdXRlczogYW55O1xuXHRvTGFzdFNlbWFudGljTWFwcGluZz86IFNlbWFudGljTWFwcGluZztcblx0YkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdD86IGJvb2xlYW47XG5cdHNDdXJyZW50Um91dGVOYW1lPzogc3RyaW5nO1xuXHRzQ3VycmVudFJvdXRlUGF0dGVybj86IHN0cmluZztcblx0YUN1cnJlbnRWaWV3cz86IGFueVtdO1xuXHRuYXZpZ2F0aW9uSW5mb1F1ZXVlOiBhbnlbXSA9IFtdO1xuXHRzQ29udGV4dFBhdGghOiBzdHJpbmc7XG5cdF9mbk9uUm91dGVNYXRjaGVkITogRnVuY3Rpb247XG5cdGluaXQoKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHRpZiAob0NvbnRleHQuc2NvcGVUeXBlID09PSBcImNvbXBvbmVudFwiKSB7XG5cdFx0XHR0aGlzLm9BcHBDb21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRcdHRoaXMub01vZGVsID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRcdHRoaXMub01ldGFNb2RlbCA9IHRoaXMub01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlcigpO1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKTtcblx0XHRcdHRoaXMuZXZlbnRQcm92aWRlciA9IG5ldyAoUm91dGluZ1NlcnZpY2VFdmVudGluZyBhcyBhbnkpKCk7XG5cblx0XHRcdGNvbnN0IG9Sb3V0aW5nQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCIvc2FwLnVpNS9yb3V0aW5nXCIpO1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCIvc2FwLnVpNS9yb290Vmlld1wiKTtcblx0XHRcdHRoaXMuX3BhcnNlUm91dGluZ0NvbmZpZ3VyYXRpb24ob1JvdXRpbmdDb25maWcsIG9Sb290Vmlld0NvbmZpZyk7XG5cblx0XHRcdGNvbnN0IG9BcHBDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAuYXBwXCIpO1xuXHRcdFx0dGhpcy5vdXRib3VuZHMgPSBvQXBwQ29uZmlnICYmIG9BcHBDb25maWcuY3Jvc3NOYXZpZ2F0aW9uICYmIG9BcHBDb25maWcuY3Jvc3NOYXZpZ2F0aW9uLm91dGJvdW5kcztcblx0XHR9XG5cblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuXHR9XG5cdGJlZm9yZUV4aXQoKSB7XG5cdFx0dGhpcy5vUm91dGVyLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicm91dGVNYXRjaGVkXCIsIHt9KTtcblx0fVxuXHRleGl0KCkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2UgYSBtYW5pZmVzdCByb3V0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIGludGVybmFsIHVzYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1JvdXRpbmdDb25maWcgVGhlIHJvdXRpbmcgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1Jvb3RWaWV3Q29uZmlnIFRoZSByb290IHZpZXcgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3BhcnNlUm91dGluZ0NvbmZpZ3VyYXRpb24ob1JvdXRpbmdDb25maWc6IGFueSwgb1Jvb3RWaWV3Q29uZmlnOiBhbnkpIHtcblx0XHRjb25zdCBpc0ZDTCA9IG9Sb290Vmlld0NvbmZpZyAmJiBvUm9vdFZpZXdDb25maWcudmlld05hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuRmNsXCI7XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiB0YXJnZXRzXG5cdFx0dGhpcy5fbVRhcmdldHMgPSB7fTtcblx0XHRPYmplY3Qua2V5cyhvUm91dGluZ0NvbmZpZy50YXJnZXRzKS5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0gPSBPYmplY3QuYXNzaWduKHsgdGFyZ2V0TmFtZTogc1RhcmdldE5hbWUgfSwgb1JvdXRpbmdDb25maWcudGFyZ2V0c1tzVGFyZ2V0TmFtZV0pO1xuXG5cdFx0XHQvLyBWaWV3IGxldmVsIGZvciBGQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSB0YXJnZXQgcGF0dGVyblxuXHRcdFx0aWYgKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS52aWV3TGV2ZWwgPSB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybih0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm4sIDApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gSW5mb3JtYXRpb24gb2Ygcm91dGVzXG5cdFx0dGhpcy5fbVJvdXRlcyA9IHt9O1xuXHRcdGZvciAoY29uc3Qgc1JvdXRlS2V5IGluIG9Sb3V0aW5nQ29uZmlnLnJvdXRlcykge1xuXHRcdFx0Y29uc3Qgb1JvdXRlTWFuaWZlc3RJbmZvID0gb1JvdXRpbmdDb25maWcucm91dGVzW3NSb3V0ZUtleV0sXG5cdFx0XHRcdGFSb3V0ZVRhcmdldHMgPSBBcnJheS5pc0FycmF5KG9Sb3V0ZU1hbmlmZXN0SW5mby50YXJnZXQpID8gb1JvdXRlTWFuaWZlc3RJbmZvLnRhcmdldCA6IFtvUm91dGVNYW5pZmVzdEluZm8udGFyZ2V0XSxcblx0XHRcdFx0c1JvdXRlTmFtZSA9IEFycmF5LmlzQXJyYXkob1JvdXRpbmdDb25maWcucm91dGVzKSA/IG9Sb3V0ZU1hbmlmZXN0SW5mby5uYW1lIDogc1JvdXRlS2V5LFxuXHRcdFx0XHRzUm91dGVQYXR0ZXJuID0gb1JvdXRlTWFuaWZlc3RJbmZvLnBhdHRlcm47XG5cblx0XHRcdC8vIENoZWNrIHJvdXRlIHBhdHRlcm46IGFsbCBwYXR0ZXJucyBuZWVkIHRvIGVuZCB3aXRoICc6P3F1ZXJ5OicsIHRoYXQgd2UgdXNlIGZvciBwYXJhbWV0ZXJzXG5cdFx0XHRpZiAoc1JvdXRlUGF0dGVybi5sZW5ndGggPCA4IHx8IHNSb3V0ZVBhdHRlcm4uaW5kZXhPZihcIjo/cXVlcnk6XCIpICE9PSBzUm91dGVQYXR0ZXJuLmxlbmd0aCAtIDgpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJQYXR0ZXJuIGZvciByb3V0ZSBcIiArIHNSb3V0ZU5hbWUgKyBcIiBkb2Vzbid0IGVuZCB3aXRoICc6P3F1ZXJ5OicgOiBcIiArIHNSb3V0ZVBhdHRlcm4pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaVJvdXRlTGV2ZWwgPSB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUm91dGVQYXR0ZXJuLCAwKTtcblx0XHRcdHRoaXMuX21Sb3V0ZXNbc1JvdXRlTmFtZV0gPSB7XG5cdFx0XHRcdG5hbWU6IHNSb3V0ZU5hbWUsXG5cdFx0XHRcdHBhdHRlcm46IHNSb3V0ZVBhdHRlcm4sXG5cdFx0XHRcdHRhcmdldHM6IGFSb3V0ZVRhcmdldHMsXG5cdFx0XHRcdHJvdXRlTGV2ZWw6IGlSb3V0ZUxldmVsXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBBZGQgdGhlIHBhcmVudCB0YXJnZXRzIGluIHRoZSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSByb3V0ZVxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhUm91dGVUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1tpXV0ucGFyZW50O1xuXHRcdFx0XHRpZiAoc1BhcmVudFRhcmdldE5hbWUpIHtcblx0XHRcdFx0XHRhUm91dGVUYXJnZXRzLnB1c2goc1BhcmVudFRhcmdldE5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNGQ0wpIHtcblx0XHRcdFx0Ly8gVmlldyBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHJvdXRlIHBhdHRlcm5cblx0XHRcdFx0aWYgKHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLnZpZXdMZXZlbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLnZpZXdMZXZlbCA8IGlSb3V0ZUxldmVsKSB7XG5cdFx0XHRcdFx0Ly8gVGhlcmUgYXJlIGNhc2VzIHdoZW4gZGlmZmVyZW50IHJvdXRlcyBwb2ludCB0byB0aGUgc2FtZSB0YXJnZXQuIFdlIHRha2UgdGhlXG5cdFx0XHRcdFx0Ly8gbGFyZ2VzdCB2aWV3TGV2ZWwgaW4gdGhhdCBjYXNlLlxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLnZpZXdMZXZlbCA9IGlSb3V0ZUxldmVsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRkNMIGxldmVsIGZvciBub24tRkNMIGNhc2VzIGlzIGVxdWFsIHRvIC0xXG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gLTE7XG5cdFx0XHR9IGVsc2UgaWYgKGFSb3V0ZVRhcmdldHMubGVuZ3RoID09PSAxICYmIHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLmNvbnRyb2xBZ2dyZWdhdGlvbiAhPT0gXCJiZWdpbkNvbHVtblBhZ2VzXCIpIHtcblx0XHRcdFx0Ly8gV2UncmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUncyBvbmx5IDEgdGFyZ2V0IGZvciB0aGUgcm91dGUsIGFuZCBpdCdzIG5vdCBpbiB0aGUgZmlyc3QgY29sdW1uXG5cdFx0XHRcdC8vIC0tPiB0aGlzIGlzIGEgZnVsbHNjcmVlbiBjb2x1bW4gYWZ0ZXIgYWxsIGNvbHVtbnMgaW4gdGhlIEZDTCBoYXZlIGJlZW4gdXNlZFxuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5GQ0xMZXZlbCA9IDM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBPdGhlciBGQ0wgY2FzZXNcblx0XHRcdFx0YVJvdXRlVGFyZ2V0cy5mb3JFYWNoKChzVGFyZ2V0TmFtZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0c3dpdGNoICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiYmVnaW5Db2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSBcIm1pZENvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDE7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJvcGFnYXRlIHZpZXdMZXZlbCwgY29udGV4dFBhdHRlcm4sIEZDTExldmVsIGFuZCBjb250cm9sQWdncmVnYXRpb24gdG8gcGFyZW50IHRhcmdldHNcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cykuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0d2hpbGUgKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5wYXJlbnQpIHtcblx0XHRcdFx0Y29uc3Qgc1BhcmVudFRhcmdldE5hbWUgPSB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ucGFyZW50O1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS52aWV3TGV2ZWw7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLkZDTExldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uRkNMTGV2ZWwgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb247XG5cdFx0XHRcdHNUYXJnZXROYW1lID0gc1BhcmVudFRhcmdldE5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBEZXRlcm1pbmUgdGhlIHJvb3QgZW50aXR5IGZvciB0aGUgYXBwXG5cdFx0Y29uc3QgYUxldmVsMFJvdXRlTmFtZXMgPSBbXTtcblx0XHRjb25zdCBhTGV2ZWwxUm91dGVOYW1lcyA9IFtdO1xuXHRcdGxldCBzRGVmYXVsdFJvdXRlTmFtZTtcblxuXHRcdGZvciAoY29uc3Qgc05hbWUgaW4gdGhpcy5fbVJvdXRlcykge1xuXHRcdFx0Y29uc3QgaUxldmVsID0gdGhpcy5fbVJvdXRlc1tzTmFtZV0ucm91dGVMZXZlbDtcblx0XHRcdGlmIChpTGV2ZWwgPT09IDApIHtcblx0XHRcdFx0YUxldmVsMFJvdXRlTmFtZXMucHVzaChzTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlMZXZlbCA9PT0gMSkge1xuXHRcdFx0XHRhTGV2ZWwxUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYUxldmVsMFJvdXRlTmFtZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRzRGVmYXVsdFJvdXRlTmFtZSA9IGFMZXZlbDBSb3V0ZU5hbWVzWzBdO1xuXHRcdH0gZWxzZSBpZiAoYUxldmVsMVJvdXRlTmFtZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRzRGVmYXVsdFJvdXRlTmFtZSA9IGFMZXZlbDFSb3V0ZU5hbWVzWzBdO1xuXHRcdH1cblxuXHRcdGlmIChzRGVmYXVsdFJvdXRlTmFtZSkge1xuXHRcdFx0Y29uc3Qgc0RlZmF1bHRUYXJnZXROYW1lID0gdGhpcy5fbVJvdXRlc1tzRGVmYXVsdFJvdXRlTmFtZV0udGFyZ2V0cy5zbGljZSgtMSlbMF07XG5cdFx0XHR0aGlzLnNDb250ZXh0UGF0aCA9IFwiXCI7XG5cdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbc0RlZmF1bHRUYXJnZXROYW1lXS5vcHRpb25zICYmIHRoaXMuX21UYXJnZXRzW3NEZWZhdWx0VGFyZ2V0TmFtZV0ub3B0aW9ucy5zZXR0aW5ncykge1xuXHRcdFx0XHRjb25zdCBvU2V0dGluZ3MgPSB0aGlzLl9tVGFyZ2V0c1tzRGVmYXVsdFRhcmdldE5hbWVdLm9wdGlvbnMuc2V0dGluZ3M7XG5cdFx0XHRcdHRoaXMuc0NvbnRleHRQYXRoID0gb1NldHRpbmdzLmNvbnRleHRQYXRoIHx8IFwiL1wiICsgb1NldHRpbmdzLmVudGl0eVNldDtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5zQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XCJDYW5ub3QgZGV0ZXJtaW5lIGRlZmF1bHQgY29udGV4dFBhdGg6IGNvbnRleHRQYXRoIG9yIGVudGl0eVNldCBtaXNzaW5nIGluIGRlZmF1bHQgdGFyZ2V0OiBcIiArIHNEZWZhdWx0VGFyZ2V0TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogbm8gZGVmYXVsdCByb3V0ZSBmb3VuZC5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvcnJlY3QgcGF0aCB0byB0aGUgZGlmZmVyZW50IHBhZ2VzLCBpbmNsdWRpbmcgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKVxuXHRcdFx0Lm1hcCgoc1RhcmdldEtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0S2V5XTtcblx0XHRcdH0pXG5cdFx0XHQuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGEudmlld0xldmVsIDwgYi52aWV3TGV2ZWwgPyAtMSA6IDE7XG5cdFx0XHR9KVxuXHRcdFx0LmZvckVhY2goKHRhcmdldDogYW55KSA9PiB7XG5cdFx0XHRcdC8vIEFmdGVyIHNvcnRpbmcgdGhlIHRhcmdldHMgcGVyIGxldmVsIHdlIGNhbiB0aGVuIGdvIHRocm91Z2ggdGhlaXIgbmF2aWdhdGlvbiBvYmplY3QgYW5kIHVwZGF0ZSB0aGUgcGF0aHMgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdGlmICh0YXJnZXQub3B0aW9ucykge1xuXHRcdFx0XHRcdGNvbnN0IHNldHRpbmdzID0gdGFyZ2V0Lm9wdGlvbnMuc2V0dGluZ3M7XG5cdFx0XHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gc2V0dGluZ3MuY29udGV4dFBhdGggfHwgKHNldHRpbmdzLmVudGl0eVNldCA/IFwiL1wiICsgc2V0dGluZ3MuZW50aXR5U2V0IDogXCJcIik7XG5cdFx0XHRcdFx0aWYgKCFzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggJiYgc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0XHRzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGggKyBcIi9cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoc2V0dGluZ3MubmF2aWdhdGlvbiB8fCB7fSkuZm9yRWFjaCgoc05hdk5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgaXQncyBhIG5hdmlnYXRpb24gcHJvcGVydHlcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldFJvdXRlID0gdGhpcy5fbVJvdXRlc1tzZXR0aW5ncy5uYXZpZ2F0aW9uW3NOYXZOYW1lXS5kZXRhaWwucm91dGVdO1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldFJvdXRlICYmIHRhcmdldFJvdXRlLnRhcmdldHMpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Um91dGUudGFyZ2V0cy5mb3JFYWNoKChzVGFyZ2V0TmFtZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zLnNldHRpbmdzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQhdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMuc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodGFyZ2V0LnZpZXdMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucy5zZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChzTmF2TmFtZS5zdGFydHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBzTmF2TmFtZSArIFwiL1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMuc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggKyBzTmF2TmFtZSArIFwiL1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgYSB2aWV3IGxldmVsIGZyb20gYSBwYXR0ZXJuIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGF0dGVybiBUaGUgcGF0dGVyblxuXHQgKiBAcGFyYW0ge251bWJlcn0gdmlld0xldmVsIFRoZSBjdXJyZW50IGxldmVsIG9mIHZpZXdcblx0ICogQHJldHVybnMge251bWJlcn0gVGhlIGxldmVsXG5cdCAqL1xuXHRfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm46IHN0cmluZywgdmlld0xldmVsOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShcIjo/cXVlcnk6XCIsIFwiXCIpO1xuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIi9bXi9dKiRcIik7XG5cdFx0aWYgKHNQYXR0ZXJuICYmIHNQYXR0ZXJuWzBdICE9PSBcIi9cIiAmJiBzUGF0dGVyblswXSAhPT0gXCI/XCIpIHtcblx0XHRcdHNQYXR0ZXJuID0gXCIvXCIgKyBzUGF0dGVybjtcblx0XHR9XG5cdFx0aWYgKHNQYXR0ZXJuLmxlbmd0aCkge1xuXHRcdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcblx0XHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdHRlcm4pIHx8IHNQYXR0ZXJuID09PSBcIlwiKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybiwgKyt2aWV3TGV2ZWwpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNQYXR0ZXJuLCB2aWV3TGV2ZWwpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdmlld0xldmVsO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRSb3V0ZUluZm9ybWF0aW9uKHNSb3V0ZU5hbWU6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdO1xuXHR9XG5cblx0X2dldFRhcmdldEluZm9ybWF0aW9uKHNUYXJnZXROYW1lOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdO1xuXHR9XG5cblx0X2dldENvbXBvbmVudElkKHNPd25lcklkOiBhbnksIHNDb21wb25lbnRJZDogYW55KSB7XG5cdFx0aWYgKHNDb21wb25lbnRJZC5pbmRleE9mKHNPd25lcklkICsgXCItLS1cIikgPT09IDApIHtcblx0XHRcdHJldHVybiBzQ29tcG9uZW50SWQuc3Vic3RyKHNPd25lcklkLmxlbmd0aCArIDMpO1xuXHRcdH1cblx0XHRyZXR1cm4gc0NvbXBvbmVudElkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0YXJnZXQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gY29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbXBvbmVudEluc3RhbmNlIEluc3RhbmNlIG9mIHRoZSBjb21wb25lbnRcblx0ICogQHJldHVybnMge29iamVjdH0gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0YXJnZXRcblx0ICovXG5cdGdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnRJbnN0YW5jZTogYW55KSB7XG5cdFx0Y29uc3Qgc1RhcmdldENvbXBvbmVudElkID0gdGhpcy5fZ2V0Q29tcG9uZW50SWQob0NvbXBvbmVudEluc3RhbmNlLl9zT3duZXJJZCwgb0NvbXBvbmVudEluc3RhbmNlLmdldElkKCkpO1xuXHRcdGxldCBzQ29ycmVjdFRhcmdldE5hbWUgPSBudWxsO1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKS5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmlkID09PSBzVGFyZ2V0Q29tcG9uZW50SWQgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdJZCA9PT0gc1RhcmdldENvbXBvbmVudElkKSB7XG5cdFx0XHRcdHNDb3JyZWN0VGFyZ2V0TmFtZSA9IHNUYXJnZXROYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzQ29ycmVjdFRhcmdldE5hbWUpO1xuXHR9XG5cblx0Z2V0TGFzdFNlbWFudGljTWFwcGluZygpOiBTZW1hbnRpY01hcHBpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nO1xuXHR9XG5cblx0c2V0TGFzdFNlbWFudGljTWFwcGluZyhvTWFwcGluZz86IFNlbWFudGljTWFwcGluZykge1xuXHRcdHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcgPSBvTWFwcGluZztcblx0fVxuXG5cdG5hdmlnYXRlVG8ob0NvbnRleHQ6IGFueSwgc1JvdXRlTmFtZTogYW55LCBtUGFyYW1ldGVyTWFwcGluZzogYW55LCBiUHJlc2VydmVIaXN0b3J5OiBhbnkpIHtcblx0XHRsZXQgc1RhcmdldFVSTFByb21pc2UsIGJJc1N0aWNreU1vZGU6IGJvb2xlYW47XG5cdFx0aWYgKG9Db250ZXh0LmdldE1vZGVsKCkgJiYgb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwpIHtcblx0XHRcdGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHRcdGlmICghbVBhcmFtZXRlck1hcHBpbmcpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBtYXBwaW5nIGRlZmluZSB0aGlzIG1lYW4gd2UgcmVseSBlbnRpcmVseSBvbiB0aGUgYmluZGluZyBjb250ZXh0IHBhdGhcblx0XHRcdHNUYXJnZXRVUkxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvQ29udGV4dCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMobVBhcmFtZXRlck1hcHBpbmcsIHNSb3V0ZU5hbWUsIG9Db250ZXh0KS50aGVuKChtUGFyYW1ldGVyczogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXIuZ2V0VVJMKHNSb3V0ZU5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gc1RhcmdldFVSTFByb21pc2UudGhlbigoc1RhcmdldFVSTDogYW55KSA9PiB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5uYXZUb0hhc2goc1RhcmdldFVSTCwgYlByZXNlcnZlSGlzdG9yeSwgZmFsc2UsIGZhbHNlLCAhYklzU3RpY2t5TW9kZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJldHVybiBhIG1hcCBvZiByb3V0aW5nIHRhcmdldCBwYXJhbWV0ZXJzIHdoZXJlIHRoZSBiaW5kaW5nIHN5bnRheCBpcyByZXNvbHZlZCB0byB0aGUgY3VycmVudCBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG1QYXJhbWV0ZXJzIFBhcmFtZXRlcnMgbWFwIGluIHRoZSBmb3JtYXQgW2s6IHN0cmluZ10gOiBDb21wbGV4QmluZGluZ1N5bnRheFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RhcmdldFJvdXRlIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBiaW5kaW5nIGNvbnRleHRcblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byB0aGUgcm91dGluZyB0YXJnZXQgcGFyYW1ldGVyc1xuXHQgKi9cblx0cHJlcGFyZVBhcmFtZXRlcnMobVBhcmFtZXRlcnM6IGFueSwgc1RhcmdldFJvdXRlOiBzdHJpbmcsIG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0bGV0IG9QYXJhbWV0ZXJzUHJvbWlzZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0Y29uc3QgYUNvbnRleHRQYXRoUGFydHMgPSBzQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3QgYUFsbFJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMgPSBPYmplY3Qua2V5cyhtUGFyYW1ldGVycykubWFwKChzUGFyYW1ldGVyS2V5OiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck1hcHBpbmdFeHByZXNzaW9uID0gbVBhcmFtZXRlcnNbc1BhcmFtZXRlcktleV07XG5cdFx0XHRcdC8vIFdlIGFzc3VtZSB0aGUgZGVmaW5lZCBwYXJhbWV0ZXJzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIGEgYmluZGluZyBleHByZXNzaW9uXG5cdFx0XHRcdGNvbnN0IG9QYXJzZWRFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbik7XG5cdFx0XHRcdGNvbnN0IGFQYXJ0cyA9IG9QYXJzZWRFeHByZXNzaW9uLnBhcnRzIHx8IFtvUGFyc2VkRXhwcmVzc2lvbl07XG5cdFx0XHRcdGNvbnN0IGFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzID0gYVBhcnRzLm1hcChmdW5jdGlvbiAob1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBhUmVsYXRpdmVQYXJ0cyA9IG9QYXRoUGFydC5wYXRoLnNwbGl0KFwiLi4vXCIpO1xuXHRcdFx0XHRcdC8vIFdlIGdvIHVwIHRoZSBjdXJyZW50IGNvbnRleHQgcGF0aCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGNvbnN0IGFMb2NhbFBhcnRzID0gYUNvbnRleHRQYXRoUGFydHMuc2xpY2UoMCwgYUNvbnRleHRQYXRoUGFydHMubGVuZ3RoIC0gYVJlbGF0aXZlUGFydHMubGVuZ3RoICsgMSk7XG5cdFx0XHRcdFx0YUxvY2FsUGFydHMucHVzaChhUmVsYXRpdmVQYXJ0c1thUmVsYXRpdmVQYXJ0cy5sZW5ndGggLSAxXSk7XG5cblx0XHRcdFx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gYUxvY2FsUGFydHMuam9pbihcIi9cIik7XG5cdFx0XHRcdFx0Y29uc3Qgb01ldGFDb250ZXh0ID0gKG9NZXRhTW9kZWwgYXMgYW55KS5nZXRNZXRhQ29udGV4dChzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHQucmVxdWVzdFByb3BlcnR5KHNQcm9wZXJ0eVBhdGgpLnRoZW4oZnVuY3Rpb24gKG9WYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gb01ldGFDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0VkbVR5cGUgPSBvUHJvcGVydHlJbmZvLiRUeXBlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIE9EYXRhVXRpbHMuZm9ybWF0TGl0ZXJhbChvVmFsdWUsIHNFZG1UeXBlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKChhUmVzb2x2ZWRQYXJhbWV0ZXJzOiBhbnkpID0+IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IG9QYXJzZWRFeHByZXNzaW9uLmZvcm1hdHRlclxuXHRcdFx0XHRcdFx0PyBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXIuYXBwbHkodGhpcywgYVJlc29sdmVkUGFyYW1ldGVycylcblx0XHRcdFx0XHRcdDogYVJlc29sdmVkUGFyYW1ldGVycy5qb2luKFwiXCIpO1xuXHRcdFx0XHRcdHJldHVybiB7IGtleTogc1BhcmFtZXRlcktleSwgdmFsdWU6IHZhbHVlIH07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9QYXJhbWV0ZXJzUHJvbWlzZSA9IFByb21pc2UuYWxsKGFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChcblx0XHRcdFx0YUFsbFJlc29sdmVkUGFyYW1ldGVyczogeyBrZXk6IGFueTsgdmFsdWU6IGFueSB9W11cblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyczogYW55ID0ge307XG5cdFx0XHRcdGFBbGxSZXNvbHZlZFBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1Jlc29sdmVkUGFyYW1ldGVyOiB7IGtleTogYW55OyB2YWx1ZTogYW55IH0pIHtcblx0XHRcdFx0XHRvUGFyYW1ldGVyc1tvUmVzb2x2ZWRQYXJhbWV0ZXIua2V5XSA9IG9SZXNvbHZlZFBhcmFtZXRlci52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBvUGFyYW1ldGVycztcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ291bGQgbm90IHBhcnNlIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbmF2aWdhdGlvbiB0byByb3V0ZSBcIiArIHNUYXJnZXRSb3V0ZSk7XG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJhbWV0ZXJzUHJvbWlzZTtcblx0fVxuXG5cdF9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIG1QYXJhbWV0ZXJzKTtcblxuXHRcdEVkaXRTdGF0ZS5jbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSgpOyAvLyBSZXNldCBVSSBzdGF0ZSB3aGVuIGFsbCBiaW5kaW5ncyBoYXZlIGJlZW4gcmVmcmVzaGVkXG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGEgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgVGhlIENvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsLCBtYXAgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmNoZWNrTm9IYXNoQ2hhbmdlXSBOYXZpZ2F0ZSB0byB0aGUgY29udGV4dCB3aXRob3V0IGNoYW5naW5nIHRoZSBVUkxcblx0ICogQHBhcmFtIHtQcm9taXNlfSBbbVBhcmFtZXRlcnMuYXN5bmNDb250ZXh0XSBUaGUgY29udGV4dCBpcyBjcmVhdGVkIGFzeW5jLCBuYXZpZ2F0ZSB0byAoLi4uKSBhbmRcblx0ICogICAgICAgICAgICAgICAgICAgIHdhaXQgZm9yIFByb21pc2UgdG8gYmUgcmVzb2x2ZWQgYW5kIHRoZW4gbmF2aWdhdGUgaW50byB0aGUgY29udGV4dFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iRGVmZXJyZWRDb250ZXh0XSBUaGUgY29udGV4dCBzaGFsbCBiZSBjcmVhdGVkIGRlZmVycmVkIGF0IHRoZSB0YXJnZXQgcGFnZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5lZGl0YWJsZV0gVGhlIHRhcmdldCBwYWdlIHNoYWxsIGJlIGltbWVkaWF0ZWx5IGluIHRoZSBlZGl0IG1vZGUgdG8gYXZvaWQgZmxpY2tlcmluZ1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsXSBUaGUgYlBlcnNpc3RPUFNjcm9sbCB3aWxsIGJlIHVzZWQgZm9yIHNjcm9sbGluZyB0byBmaXJzdCB0YWJcblx0ICogQHBhcmFtIHtudW1iZXJ9IFttUGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbF0gYCsxYCBpZiB3ZSBhZGQgYSBjb2x1bW4gaW4gRkNMLCBgLTFgIHRvIHJlbW92ZSBhIGNvbHVtbiwgMCB0byBzdGF5IG9uIHRoZSBzYW1lIGNvbHVtblxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5ub1ByZXNlcnZhdGlvbkNhY2hlXSBEbyBuYXZpZ2F0aW9uIHdpdGhvdXQgdGFraW5nIGludG8gYWNjb3VudCB0aGUgcHJlc2VydmVkIGNhY2hlIG1lY2hhbmlzbVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iUmVjcmVhdGVDb250ZXh0XSBGb3JjZSByZS1jcmVhdGlvbiBvZiB0aGUgY29udGV4dCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmUgcGFzc2VkIGFzIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iRm9yY2VGb2N1c10gRm9yY2VzIGZvY3VzIHNlbGVjdGlvbiBhZnRlciBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb1ZpZXdEYXRhXSBWaWV3IGRhdGFcblx0ICogQHBhcmFtIHtvYmplY3R9IFtvQ3VycmVudFRhcmdldEluZm9dIFRoZSB0YXJnZXQgaW5mb3JtYXRpb24gZnJvbSB3aGljaCB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0bmF2aWdhdGVUb0NvbnRleHQoXG5cdFx0b0NvbnRleHQ6IGFueSxcblx0XHRtUGFyYW1ldGVyczpcblx0XHRcdHwge1xuXHRcdFx0XHRcdGNoZWNrTm9IYXNoQ2hhbmdlPzogYm9vbGVhbjtcblx0XHRcdFx0XHRhc3luY0NvbnRleHQ/OiBQcm9taXNlPGFueT47XG5cdFx0XHRcdFx0YkRlZmVycmVkQ29udGV4dD86IGJvb2xlYW47XG5cdFx0XHRcdFx0ZWRpdGFibGU/OiBib29sZWFuO1xuXHRcdFx0XHRcdHRyYW5zaWVudD86IGJvb2xlYW47XG5cdFx0XHRcdFx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdFx0dXBkYXRlRkNMTGV2ZWw/OiBudW1iZXI7XG5cdFx0XHRcdFx0bm9QcmVzZXJ2YXRpb25DYWNoZT86IGJvb2xlYW47XG5cdFx0XHRcdFx0YlJlY3JlYXRlQ29udGV4dD86IGJvb2xlYW47XG5cdFx0XHRcdFx0YkZvcmNlRm9jdXM/OiBib29sZWFuO1xuXHRcdFx0XHRcdHRhcmdldFBhdGg/OiBzdHJpbmc7XG5cdFx0XHRcdFx0c2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcblx0XHRcdFx0XHRiRHJhZnROYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0XHRiTmF2aWdhdGVUb1NpYmxpbmdFbnRpdHk/OiBib29sZWFuO1xuXHRcdFx0ICB9XG5cdFx0XHR8IHVuZGVmaW5lZCxcblx0XHRvVmlld0RhdGE6IGFueSB8IHVuZGVmaW5lZCxcblx0XHRvQ3VycmVudFRhcmdldEluZm86IGFueSB8IHVuZGVmaW5lZFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgc1RhcmdldFJvdXRlOiBzdHJpbmcgPSBcIlwiLFxuXHRcdFx0b1JvdXRlUGFyYW1ldGVyc1Byb21pc2UsXG5cdFx0XHRiSXNTdGlja3lNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwoKSAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCkge1xuXHRcdFx0YklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdFx0Ly8gTWFuYWdlIHBhcmFtZXRlciBtYXBwaW5nXG5cdFx0aWYgKG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLnRhcmdldFBhdGggJiYgb1ZpZXdEYXRhICYmIG9WaWV3RGF0YS5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRjb25zdCBvUm91dGVEZXRhaWwgPSBvVmlld0RhdGEubmF2aWdhdGlvblttUGFyYW1ldGVycy50YXJnZXRQYXRoXS5kZXRhaWw7XG5cdFx0XHRzVGFyZ2V0Um91dGUgPSBvUm91dGVEZXRhaWwucm91dGU7XG5cblx0XHRcdGlmIChvUm91dGVEZXRhaWwucGFyYW1ldGVycykge1xuXHRcdFx0XHRvUm91dGVQYXJhbWV0ZXJzUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMob1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMsIHNUYXJnZXRSb3V0ZSwgb0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzVGFyZ2V0UGF0aCA9IHRoaXMuX2dldFBhdGhGcm9tQ29udGV4dChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdC8vIElmIHRoZSBwYXRoIGlzIGVtcHR5LCB3ZSdyZSBzdXBwb3NlZCB0byBuYXZpZ2F0ZSB0byB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYXBwXG5cdFx0Ly8gQ2hlY2sgaWYgd2UgbmVlZCB0byBleGl0IGZyb20gdGhlIGFwcCBpbnN0ZWFkXG5cdFx0aWYgKHNUYXJnZXRQYXRoLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vUm91dGVyUHJveHkuZXhpdEZyb21BcHAoKSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGNvbnRleHQgaXMgZGVmZXJyZWQgb3IgYXN5bmMsIHdlIGFkZCAoLi4uKSB0byB0aGUgcGF0aFxuXHRcdGlmIChtUGFyYW1ldGVycz8uYXN5bmNDb250ZXh0IHx8IG1QYXJhbWV0ZXJzPy5iRGVmZXJyZWRDb250ZXh0KSB7XG5cdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiguLi4pXCI7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGxheW91dCBwYXJhbWV0ZXIgaWYgbmVlZGVkXG5cdFx0Y29uc3Qgc0xheW91dCA9IHRoaXMuX2NhbGN1bGF0ZUxheW91dChzVGFyZ2V0UGF0aCwgbVBhcmFtZXRlcnMpO1xuXHRcdGlmIChzTGF5b3V0KSB7XG5cdFx0XHRzVGFyZ2V0UGF0aCArPSBcIj9sYXlvdXQ9XCIgKyBzTGF5b3V0O1xuXHRcdH1cblxuXHRcdC8vIE5hdmlnYXRpb24gcGFyYW1ldGVycyBmb3IgbGF0ZXIgdXNhZ2Vcblx0XHRjb25zdCBvTmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRvQXN5bmNDb250ZXh0OiBtUGFyYW1ldGVycz8uYXN5bmNDb250ZXh0LFxuXHRcdFx0YkRlZmVycmVkQ29udGV4dDogbVBhcmFtZXRlcnM/LmJEZWZlcnJlZENvbnRleHQsXG5cdFx0XHRiVGFyZ2V0RWRpdGFibGU6IG1QYXJhbWV0ZXJzPy5lZGl0YWJsZSxcblx0XHRcdGJQZXJzaXN0T1BTY3JvbGw6IG1QYXJhbWV0ZXJzPy5iUGVyc2lzdE9QU2Nyb2xsLFxuXHRcdFx0dXNlQ29udGV4dDogbVBhcmFtZXRlcnM/LnVwZGF0ZUZDTExldmVsID09PSAtMSB8fCBtUGFyYW1ldGVycz8uYlJlY3JlYXRlQ29udGV4dCA/IHVuZGVmaW5lZCA6IG9Db250ZXh0LFxuXHRcdFx0YkRyYWZ0TmF2aWdhdGlvbjogbVBhcmFtZXRlcnM/LmJEcmFmdE5hdmlnYXRpb24sXG5cdFx0XHRiU2hvd1BsYWNlaG9sZGVyOiBtUGFyYW1ldGVycz8uc2hvd1BsYWNlaG9sZGVyICE9PSB1bmRlZmluZWQgPyBtUGFyYW1ldGVycz8uc2hvd1BsYWNlaG9sZGVyIDogdHJ1ZSxcblx0XHRcdGJOYXZpZ2F0ZVRvU2libGluZ0VudGl0eTogbVBhcmFtZXRlcnM/LmJOYXZpZ2F0ZVRvU2libGluZ0VudGl0eVxuXHRcdH07XG5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmNoZWNrTm9IYXNoQ2hhbmdlKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgbmV3IGhhc2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lXG5cdFx0XHRjb25zdCBzQ3VycmVudEhhc2hOb0FwcFN0YXRlID0gdGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpLnJlcGxhY2UoL1smP117MX1zYXAtaWFwcC1zdGF0ZT1bQS1aMC05XSsvLCBcIlwiKTtcblx0XHRcdGlmIChzVGFyZ2V0UGF0aCA9PT0gc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSkge1xuXHRcdFx0XHQvLyBUaGUgaGFzaCBkb2Vzbid0IGNoYW5nZSwgYnV0IHdlIGZpcmUgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgdG8gdHJpZ2dlciBwYWdlIHJlZnJlc2ggLyBiaW5kaW5nXG5cdFx0XHRcdGNvbnN0IG1FdmVudFBhcmFtZXRlcnM6IGFueSA9IHRoaXMub1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2godGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpKTtcblx0XHRcdFx0aWYgKG1FdmVudFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gb05hdmlnYXRpb25JbmZvO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMucm91dGVJbmZvcm1hdGlvbiA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24odGhpcy5zQ3VycmVudFJvdXRlTmFtZSk7XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMudmlld3MgPSB0aGlzLmFDdXJyZW50Vmlld3M7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5zZXRGb2N1c0ZvcmNlZCghIW1QYXJhbWV0ZXJzLmJGb3JjZUZvY3VzKTtcblxuXHRcdFx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtRXZlbnRQYXJhbWV0ZXJzKTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy50cmFuc2llbnQgJiYgbVBhcmFtZXRlcnMuZWRpdGFibGUgPT0gdHJ1ZSAmJiBzVGFyZ2V0UGF0aC5pbmRleE9mKFwiKC4uLilcIikgPT09IC0xKSB7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGguaW5kZXhPZihcIj9cIikgPiAtMSkge1xuXHRcdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiZpLWFjdGlvbj1jcmVhdGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2ktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHVuYm91bmQgbWVzc2FnZXMgdXBvbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1Bcblx0XHQvLyBUaGlzIGlzIHRvIGVuc3VyZSBzdGFsZSBlcnJvciBtZXNzYWdlcyBmcm9tIExSIGFyZSBub3Qgc2hvd24gdG8gdGhlIHVzZXIgYWZ0ZXIgbmF2aWdhdGlvbiB0byBPUC5cblx0XHRpZiAob0N1cnJlbnRUYXJnZXRJbmZvICYmIG9DdXJyZW50VGFyZ2V0SW5mby5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRjb25zdCBvUm91dGVJbmZvID0gdGhpcy5vUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaChzVGFyZ2V0UGF0aCk7XG5cdFx0XHRpZiAob1JvdXRlSW5mbykge1xuXHRcdFx0XHRjb25zdCBvUm91dGUgPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKG9Sb3V0ZUluZm8ubmFtZSk7XG5cdFx0XHRcdGlmIChvUm91dGUgJiYgb1JvdXRlLnRhcmdldHMgJiYgb1JvdXRlLnRhcmdldHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGNvbnN0IHNMYXN0VGFyZ2V0TmFtZSA9IG9Sb3V0ZS50YXJnZXRzW29Sb3V0ZS50YXJnZXRzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzTGFzdFRhcmdldE5hbWUpO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0ICYmIG9UYXJnZXQubmFtZSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyBpbiB0aGUgcXVldWVcblx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucHVzaChvTmF2aWdhdGlvbkluZm8pO1xuXG5cdFx0aWYgKHNUYXJnZXRSb3V0ZSAmJiBvUm91dGVQYXJhbWV0ZXJzUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIG9Sb3V0ZVBhcmFtZXRlcnNQcm9taXNlLnRoZW4oKG9Sb3V0ZVBhcmFtZXRlcnM6IGFueSkgPT4ge1xuXHRcdFx0XHRvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUgPSBiSXNTdGlja3lNb2RlO1xuXHRcdFx0XHR0aGlzLm9Sb3V0ZXIubmF2VG8oc1RhcmdldFJvdXRlLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHQubmF2VG9IYXNoKHNUYXJnZXRQYXRoLCBmYWxzZSwgbVBhcmFtZXRlcnM/Lm5vUHJlc2VydmF0aW9uQ2FjaGUsIG1QYXJhbWV0ZXJzPy5iRm9yY2VGb2N1cywgIWJJc1N0aWNreU1vZGUpXG5cdFx0XHQudGhlbigoYk5hdmlnYXRlZDogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghYk5hdmlnYXRlZCkge1xuXHRcdFx0XHRcdC8vIFRoZSBuYXZpZ2F0aW9uIGRpZCBub3QgaGFwcGVuIC0tPiByZW1vdmUgdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyBmcm9tIHRoZSBxdWV1ZSBhcyB0aGV5IHNob3VsZG4ndCBiZSB1c2VkXG5cdFx0XHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnBvcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlJvdXRpbmcjbmF2aWdhdGVUb1JvdXRlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5Sb3V0aW5nXG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb1JvdXRlUGFyYW1ldGVyc10gUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9Sb3V0ZVBhcmFtZXRlcnM/OiBhbnkpIHtcblx0XHRjb25zdCBzVGFyZ2V0VVJMID0gdGhpcy5vUm91dGVyLmdldFVSTChzVGFyZ2V0Um91dGVOYW1lLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKHNUYXJnZXRVUkwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICFvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgdmlld3Mgb24gdGhlIHNjcmVlbiBpcyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgb3IgYGZhbHNlYCBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBpbXBhY3RlZCBvciBub3Rcblx0ICovXG5cdGlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHQvLyBGaXJzdCwgY2hlY2sgd2l0aCB0aGUgdGVjaG5pY2FsIHBhdGguIFdlIGhhdmUgdG8gdHJ5IGl0LCBiZWNhdXNlIGZvciBsZXZlbCA+IDEsIHdlXG5cdFx0Ly8gdXNlcyB0ZWNobmljYWwga2V5cyBldmVuIGlmIFNlbWFudGljIGtleXMgYXJlIGVuYWJsZWRcblx0XHRpZiAodGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNQYXRoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmICgvXlteXFwoXFwpXStcXChbXlxcKFxcKV0rXFwpJC8udGVzdChzUGF0aCkpIHtcblx0XHRcdC8vIElmIHRoZSBjdXJyZW50IHBhdGggY2FuIGJlIHNlbWFudGljIChpLmUuIGlzIGxpa2UgeHh4KHl5eSkpXG5cdFx0XHQvLyBjaGVjayB3aXRoIHRoZSBzZW1hbnRpYyBwYXRoIGlmIHdlIGNhbiBmaW5kIGl0XG5cdFx0XHRsZXQgc1NlbWFudGljUGF0aDtcblx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nICYmIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNTZW1hbnRpY1BhdGggIT0gc1BhdGggPyB0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1NlbWFudGljUGF0aCkgOiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGg6IGFueSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRzUGF0aCA9IHNQYXRoLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdGgpIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGgpO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0NvbnRleHRGb3JTZW1hbnRpY1BhdGgob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0Ly8gRmlyc3QsIGNoZWNrIGlmIHRoaXMgaXMgYSBsZXZlbC0xIG9iamVjdCAocGF0aCA9IC9hYWEoYmJiKSlcblx0XHRpZiAoIS9eXFwvW15cXChdK1xcKFteXFwpXStcXCkkLy50ZXN0KHNQYXRoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hlY2sgaWYgdGhlIGVudGl0eSBoYXMgc2VtYW50aWMga2V5c1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c0VudGl0eVNldE5hbWUgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIik7XG5cdFx0aWYgKCFTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMob01ldGFNb2RlbCwgc0VudGl0eVNldE5hbWUpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlbiBjaGVjayB0aGUgZW50aXR5IGlzIGRyYWZ0LWVuYWJsZWRcblx0XHRyZXR1cm4gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChvTWV0YU1vZGVsLCBzUGF0aCk7XG5cdH1cblxuXHRfZ2V0UGF0aEZyb21Db250ZXh0KG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRsZXQgc1BhdGg7XG5cblx0XHRpZiAob0NvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikgJiYgb0NvbnRleHQuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRzUGF0aCA9IG9Db250ZXh0LmdldEhlYWRlckNvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9PT0gLTEpIHtcblx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrIGZyb20gYSBjb250ZXh0LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhcblx0XHRcdHNQYXRoID0gdGhpcy5fZmluZFBhdGhUb05hdmlnYXRlKHNQYXRoKTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgd2UncmUgbmF2aWdhdGluZyBiYWNrIHRvIGEgc2VtYW50aWMgcGF0aCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlc29sdmVkXG5cdFx0XHRpZiAodGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyAmJiB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nLnRlY2huaWNhbFBhdGggPT09IHNQYXRoKSB7XG5cdFx0XHRcdHNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9jaGVja0NvbnRleHRGb3JTZW1hbnRpY1BhdGgob0NvbnRleHQpKSB7XG5cdFx0XHQvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIHRvIHVzZSBhIHNlbWFudGljIHBhdGhcblx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQsIHRydWUpO1xuXG5cdFx0XHRpZiAoIXNTZW1hbnRpY1BhdGgpIHtcblx0XHRcdFx0Ly8gV2Ugd2VyZSBub3QgYWJsZSB0byBidWlsZCB0aGUgc2VtYW50aWMgcGF0aCAtLT4gVXNlIHRoZSB0ZWNobmljYWwgcGF0aCBhbmRcblx0XHRcdFx0Ly8gY2xlYXIgdGhlIHByZXZpb3VzIG1hcHBpbmcsIG90aGVyd2lzZSB0aGUgb2xkIG1hcHBpbmcgaXMgdXNlZCBpbiBFZGl0RmxvdyN1cGRhdGVEb2N1bWVudFxuXHRcdFx0XHQvLyBhbmQgaXQgbGVhZHMgdG8gdW53YW50ZWQgcGFnZSByZWxvYWRzXG5cdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh1bmRlZmluZWQpO1xuXHRcdFx0fSBlbHNlIGlmIChzU2VtYW50aWNQYXRoICE9PSBzUGF0aCkge1xuXHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHsgdGVjaG5pY2FsUGF0aDogc1BhdGgsIHNlbWFudGljUGF0aDogc1NlbWFudGljUGF0aCB9KTtcblx0XHRcdFx0c1BhdGggPSBzU2VtYW50aWNQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJlbW92ZSBleHRyYSAnLycgYXQgdGhlIGJlZ2lubmluZyBvZiBwYXRoXG5cdFx0aWYgKHNQYXRoWzBdID09PSBcIi9cIikge1xuXHRcdFx0c1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9XG5cblx0X2NhbGN1bGF0ZUxheW91dChzUGF0aDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bGV0IEZDTExldmVsID0gbVBhcmFtZXRlcnMuRkNMTGV2ZWw7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsKSB7XG5cdFx0XHRGQ0xMZXZlbCArPSBtUGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbDtcblx0XHRcdGlmIChGQ0xMZXZlbCA8IDApIHtcblx0XHRcdFx0RkNMTGV2ZWwgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuY2FsY3VsYXRlTGF5b3V0KFxuXHRcdFx0RkNMTGV2ZWwsXG5cdFx0XHRzUGF0aCxcblx0XHRcdG1QYXJhbWV0ZXJzLnNMYXlvdXQsXG5cdFx0XHRtUGFyYW1ldGVycy5rZWVwQ3VycmVudExheW91dFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciBiZWZvcmUgYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBEaXNwbGF5cyBhIGJ1c3kgaW5kaWNhdG9yLlxuXHQgKlxuXHQgKi9cblx0X2JlZm9yZVJvdXRlTWF0Y2hlZCgvKm9FdmVudDogRXZlbnQqLykge1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmICghYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0XHRCdXN5TG9ja2VyLmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogSGlkZXMgdGhlIGJ1c3kgaW5kaWNhdG9yIGFuZCBmaXJlcyBpdHMgb3duICdyb3V0ZW1hdGNoZWQnIGV2ZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0V2ZW50IFRoZSBldmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKG9FdmVudDogRXZlbnQpIHtcblx0XHRjb25zdCBvQXBwU3RhdGVIYW5kbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLFxuXHRcdFx0b1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob1Jvb3RWaWV3KSAmJiAhYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5sZW5ndGgpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlWzBdO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnNsaWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAob0FwcFN0YXRlSGFuZGxlci5jaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLmJSZWFzb25Jc0lhcHBTdGF0ZSA9IHRydWU7XG5cdFx0XHRvQXBwU3RhdGVIYW5kbGVyLnJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlTmFtZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYW1lXCIpO1xuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm4gPSBtUGFyYW1ldGVycy5jb25maWcucGF0dGVybjtcblx0XHR0aGlzLmFDdXJyZW50Vmlld3MgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIik7XG5cblx0XHRtUGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRtUGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXG5cdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobVBhcmFtZXRlcnMpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgY3VycmVudCBoYXNoIGhhcyBiZWVuIHNldCBieSB0aGUgcm91dGVyUHJveHkubmF2VG9IYXNoIGZ1bmN0aW9uXG5cdFx0Ly8gSWYgbm90LCByZWJ1aWxkIGhpc3RvcnkgcHJvcGVybHkgKGJvdGggaW4gdGhlIGJyb3dzZXIgYW5kIHRoZSBSb3V0ZXJQcm94eSlcblx0XHRpZiAoIWhpc3Rvcnkuc3RhdGUgfHwgaGlzdG9yeS5zdGF0ZS5mZUxldmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHRcdC5yZXN0b3JlSGlzdG9yeSgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVzdG9yaW5nIGhpc3RvcnlcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5LnJlc29sdmVSb3V0ZU1hdGNoKCk7XG5cdFx0fVxuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVkKG9EYXRhOiBhbnksIGZuRnVuY3Rpb24/OiBhbnksIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRkZXRhY2hSb3V0ZU1hdGNoZWQoZm5GdW5jdGlvbjogYW55LCBvTGlzdGVuZXI/OiBhbnkpIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRhdHRhY2hBZnRlclJvdXRlTWF0Y2hlZChvRGF0YTogYW55LCBmbkZ1bmN0aW9uOiBhbnksIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cdGRldGFjaEFmdGVyUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IGFueSwgb0xpc3RlbmVyOiBhbnkpIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0Z2V0Um91dGVGcm9tSGFzaChvUm91dGVyOiBhbnksIG9BcHBDb21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IHNIYXNoID0gb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLmhhc2g7XG5cdFx0Y29uc3Qgb1JvdXRlSW5mbyA9IG9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHNIYXNoKTtcblx0XHRyZXR1cm4gb0FwcENvbXBvbmVudFxuXHRcdFx0LmdldE1ldGFkYXRhKClcblx0XHRcdC5nZXRNYW5pZmVzdEVudHJ5KFwiL3NhcC51aTUvcm91dGluZy9yb3V0ZXNcIilcblx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Sb3V0ZTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvUm91dGUubmFtZSA9PT0gb1JvdXRlSW5mby5uYW1lO1xuXHRcdFx0fSlbMF07XG5cdH1cblx0Z2V0VGFyZ2V0c0Zyb21Sb3V0ZShvUm91dGU6IGFueSkge1xuXHRcdGNvbnN0IG9UYXJnZXQgPSBvUm91dGUudGFyZ2V0O1xuXHRcdGlmICh0eXBlb2Ygb1RhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmV0dXJuIFt0aGlzLl9tVGFyZ2V0c1tvVGFyZ2V0XV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFUYXJnZXQ6IGFueVtdID0gW107XG5cdFx0XHRvVGFyZ2V0LmZvckVhY2goKHNUYXJnZXQ6IGFueSkgPT4ge1xuXHRcdFx0XHRhVGFyZ2V0LnB1c2godGhpcy5fbVRhcmdldHNbc1RhcmdldF0pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gYVRhcmdldDtcblx0XHR9XG5cdH1cblxuXHRpbml0aWFsaXplUm91dGluZygpIHtcblx0XHQvLyBBdHRhY2ggcm91dGVyIGhhbmRsZXJzXG5cdFx0dGhpcy5fZm5PblJvdXRlTWF0Y2hlZCA9IHRoaXMuX29uUm91dGVNYXRjaGVkLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlci5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fYmVmb3JlUm91dGVNYXRjaGVkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHQvLyBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuXHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZSA9IFtdO1xuXHRcdEVkaXRTdGF0ZS5yZXNldEVkaXRTdGF0ZSgpO1xuXHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9ICF0aGlzLm9Sb3V0ZXIubWF0Y2goXCJcIik7XG5cblx0XHRjb25zdCBiSXNJYXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuaW5kZXhPZihcInNhcC1pYXBwLXN0YXRlXCIpICE9PSAtMTtcblx0XHRjb25zdCBpbml0UHJvbWlzZSA9IHRoaXMub0FwcENvbXBvbmVudFxuXHRcdFx0LmdldFN0YXJ0dXBQYXJhbWV0ZXJzKClcblx0XHRcdC50aGVuKChvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvU3RhcnR1cFBhcmFtZXRlcnMpLmxlbmd0aCAhPT0gMDtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCk7XG5cdFx0XHRcdC8vIE1hbmFnZSBzdGFydHVwIHBhcmFtZXRlcnMgKGluIGNhc2Ugb2Ygbm8gaWFwcC1zdGF0ZSlcblx0XHRcdFx0aWYgKCFiSXNJYXBwU3RhdGUgJiYgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzICYmICFzSGFzaCkge1xuXHRcdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXS5pbmRleE9mKFwiY3JlYXRlXCIpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIG1vZGVcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLl9tYW5hZ2VDcmVhdGVTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIERlZXAgbGlua1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuX21hbmFnZURlZXBMaW5rU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHJvdXRpbmcgaW5pdGlhbGl6YXRpb25cIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGluaXRQcm9taXNlO1xuXHR9XG5cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzPzogYW55KSB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCB0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub1JvdXRlcik7XG5cdH1cblxuXHRfbWFuYWdlQ3JlYXRlU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSkge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldENyZWF0ZVN0YXJ0dXBIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIsIHRoaXMub01ldGFNb2RlbCkudGhlbihcblx0XHRcdChzTmV3SGFzaDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCkge1xuXHRcdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBhbnkpKHNOZXdIYXNoKTtcblx0XHRcdFx0XHR0aGlzLmJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRyZXR1cm4gQXBwU3RhcnR1cEhlbHBlci5nZXREZWVwTGlua1N0YXJ0dXBIYXNoKFxuXHRcdFx0KHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpIGFzIGFueSlbXCJzYXAudWk1XCJdLnJvdXRpbmcsXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMsXG5cdFx0XHR0aGlzLm9Nb2RlbFxuXHRcdCkudGhlbigob0RlZXBMaW5rOiBhbnkpID0+IHtcblx0XHRcdGxldCBzSGFzaDtcblx0XHRcdGlmIChvRGVlcExpbmsuY29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBzVGVjaG5pY2FsUGF0aCA9IG9EZWVwTGluay5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0KTtcblxuXHRcdFx0XHRpZiAoc1NlbWFudGljUGF0aCAhPT0gc1RlY2huaWNhbFBhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNUZWNobmljYWxQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzSGFzaCA9IHNTZW1hbnRpY1BhdGguc3Vic3RyaW5nKDEpOyAvLyBUbyByZW1vdmUgdGhlIGxlYWRpbmcgJy8nXG5cdFx0XHR9IGVsc2UgaWYgKG9EZWVwTGluay5oYXNoKSB7XG5cdFx0XHRcdHNIYXNoID0gb0RlZXBMaW5rLmhhc2g7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzSGFzaCkge1xuXHRcdFx0XHQvL1JlcGxhY2UgdGhlIGhhc2ggd2l0aCBuZXdseSBjcmVhdGVkIGhhc2hcblx0XHRcdFx0KHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIGFueSkoc0hhc2gpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0T3V0Ym91bmRzKCkge1xuXHRcdHJldHVybiB0aGlzLm91dGJvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBEcmFmdCByb290IGVudGl0eSBzZXQgb3IgdGhlIHN0aWNreS1lbmFibGVkIGVudGl0eSBzZXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByb290IEVudGl0eVNldFxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCkge1xuXHRcdHJldHVybiB0aGlzLnNDb250ZXh0UGF0aDtcblx0fVxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBSb3V0aW5nU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRjb25zdCBvUm91dGluZ1NlcnZpY2UgPSBuZXcgUm91dGluZ1NlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gb1JvdXRpbmdTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRpbmdTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==
|
|
968
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiZGVmaW5lVUk1Q2xhc3MiLCJldmVudCIsIkV2ZW50UHJvdmlkZXIiLCJSb3V0aW5nU2VydmljZSIsIm5hdmlnYXRpb25JbmZvUXVldWUiLCJpbml0Iiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwic2NvcGVUeXBlIiwib0FwcENvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib01vZGVsIiwiZ2V0TW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1JvdXRlciIsImdldFJvdXRlciIsIm9Sb3V0ZXJQcm94eSIsImdldFJvdXRlclByb3h5IiwiZXZlbnRQcm92aWRlciIsIm9Sb3V0aW5nQ29uZmlnIiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm9Sb290Vmlld0NvbmZpZyIsIl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uIiwib0FwcENvbmZpZyIsIm91dGJvdW5kcyIsImNyb3NzTmF2aWdhdGlvbiIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJiZWZvcmVFeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiX2ZuT25Sb3V0ZU1hdGNoZWQiLCJmaXJlRXZlbnQiLCJleGl0IiwiZGVzdHJveSIsImlzRkNMIiwidmlld05hbWUiLCJfbVRhcmdldHMiLCJPYmplY3QiLCJrZXlzIiwidGFyZ2V0cyIsImZvckVhY2giLCJzVGFyZ2V0TmFtZSIsImFzc2lnbiIsInRhcmdldE5hbWUiLCJjb250ZXh0UGF0dGVybiIsInVuZGVmaW5lZCIsInZpZXdMZXZlbCIsIl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybiIsIl9tUm91dGVzIiwic1JvdXRlS2V5Iiwicm91dGVzIiwib1JvdXRlTWFuaWZlc3RJbmZvIiwiYVJvdXRlVGFyZ2V0cyIsIkFycmF5IiwiaXNBcnJheSIsInRhcmdldCIsInNSb3V0ZU5hbWUiLCJuYW1lIiwic1JvdXRlUGF0dGVybiIsInBhdHRlcm4iLCJsZW5ndGgiLCJpbmRleE9mIiwiTG9nIiwid2FybmluZyIsImlSb3V0ZUxldmVsIiwicm91dGVMZXZlbCIsImkiLCJzUGFyZW50VGFyZ2V0TmFtZSIsInBhcmVudCIsInB1c2giLCJGQ0xMZXZlbCIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImFMZXZlbDBSb3V0ZU5hbWVzIiwiYUxldmVsMVJvdXRlTmFtZXMiLCJzRGVmYXVsdFJvdXRlTmFtZSIsInNOYW1lIiwiaUxldmVsIiwic0RlZmF1bHRUYXJnZXROYW1lIiwic2xpY2UiLCJzQ29udGV4dFBhdGgiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJvU2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm1hcCIsInNUYXJnZXRLZXkiLCJzb3J0IiwiYSIsImIiLCJmdWxsQ29udGV4dFBhdGgiLCJuYXZpZ2F0aW9uIiwic05hdk5hbWUiLCJ0YXJnZXRSb3V0ZSIsImRldGFpbCIsInJvdXRlIiwic3RhcnRzV2l0aCIsInNQYXR0ZXJuIiwicmVwbGFjZSIsInJlZ2V4IiwiUmVnRXhwIiwibWF0Y2giLCJfZ2V0Um91dGVJbmZvcm1hdGlvbiIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIl9nZXRDb21wb25lbnRJZCIsInNPd25lcklkIiwic0NvbXBvbmVudElkIiwic3Vic3RyIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJzVGFyZ2V0Q29tcG9uZW50SWQiLCJfc093bmVySWQiLCJnZXRJZCIsInNDb3JyZWN0VGFyZ2V0TmFtZSIsImlkIiwidmlld0lkIiwiZ2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9MYXN0U2VtYW50aWNNYXBwaW5nIiwic2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9NYXBwaW5nIiwibmF2aWdhdGVUbyIsIm1QYXJhbWV0ZXJNYXBwaW5nIiwiYlByZXNlcnZlSGlzdG9yeSIsInNUYXJnZXRVUkxQcm9taXNlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY1BhdGgiLCJwcmVwYXJlUGFyYW1ldGVycyIsInRoZW4iLCJtUGFyYW1ldGVycyIsImdldFVSTCIsInNUYXJnZXRVUkwiLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJzcGxpdCIsImFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwic1BhcmFtZXRlcktleSIsInNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiIsIm9QYXJzZWRFeHByZXNzaW9uIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJzUHJvcGVydHlQYXRoIiwiam9pbiIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5Iiwib1ZhbHVlIiwib1Byb3BlcnR5SW5mbyIsImdldE9iamVjdCIsInNFZG1UeXBlIiwiJFR5cGUiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsImFsbCIsImFSZXNvbHZlZFBhcmFtZXRlcnMiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImFwcGx5Iiwia2V5IiwiYUFsbFJlc29sdmVkUGFyYW1ldGVycyIsIm9QYXJhbWV0ZXJzIiwib1Jlc29sdmVkUGFyYW1ldGVyIiwib0Vycm9yIiwiZXJyb3IiLCJfZmlyZVJvdXRlTWF0Y2hFdmVudHMiLCJFZGl0U3RhdGUiLCJjbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSIsIm5hdmlnYXRlVG9Db250ZXh0Iiwib1ZpZXdEYXRhIiwib0N1cnJlbnRUYXJnZXRJbmZvIiwib1JvdXRlUGFyYW1ldGVyc1Byb21pc2UiLCJ0YXJnZXRQYXRoIiwib1JvdXRlRGV0YWlsIiwicGFyYW1ldGVycyIsInNUYXJnZXRQYXRoIiwiX2dldFBhdGhGcm9tQ29udGV4dCIsImJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QiLCJleGl0RnJvbUFwcCIsImFzeW5jQ29udGV4dCIsImJEZWZlcnJlZENvbnRleHQiLCJzTGF5b3V0IiwiX2NhbGN1bGF0ZUxheW91dCIsIm9OYXZpZ2F0aW9uSW5mbyIsIm9Bc3luY0NvbnRleHQiLCJiVGFyZ2V0RWRpdGFibGUiLCJlZGl0YWJsZSIsImJQZXJzaXN0T1BTY3JvbGwiLCJ1c2VDb250ZXh0IiwidXBkYXRlRkNMTGV2ZWwiLCJiUmVjcmVhdGVDb250ZXh0IiwiYkRyYWZ0TmF2aWdhdGlvbiIsImJTaG93UGxhY2Vob2xkZXIiLCJzaG93UGxhY2Vob2xkZXIiLCJiTmF2aWdhdGVUb1NpYmxpbmdFbnRpdHkiLCJjaGVja05vSGFzaENoYW5nZSIsInNDdXJyZW50SGFzaE5vQXBwU3RhdGUiLCJnZXRIYXNoIiwibUV2ZW50UGFyYW1ldGVycyIsImdldFJvdXRlSW5mb0J5SGFzaCIsIm5hdmlnYXRpb25JbmZvIiwicm91dGVJbmZvcm1hdGlvbiIsInNDdXJyZW50Um91dGVOYW1lIiwicm91dGVQYXR0ZXJuIiwic0N1cnJlbnRSb3V0ZVBhdHRlcm4iLCJ2aWV3cyIsImFDdXJyZW50Vmlld3MiLCJzZXRGb2N1c0ZvcmNlZCIsImJGb3JjZUZvY3VzIiwidHJhbnNpZW50Iiwib1JvdXRlSW5mbyIsIm9Sb3V0ZSIsInNMYXN0VGFyZ2V0TmFtZSIsIm9UYXJnZXQiLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib1JvdXRlUGFyYW1ldGVycyIsIm5hdlRvIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJOYXZpZ2F0ZWQiLCJwb3AiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5Iiwic1BhdGgiLCJ0ZXN0Iiwic1NlbWFudGljUGF0aCIsInRlY2huaWNhbFBhdGgiLCJzZW1hbnRpY1BhdGgiLCJfZmluZFBhdGhUb05hdmlnYXRlIiwiX2NoZWNrQ29udGV4dEZvclNlbWFudGljUGF0aCIsInNFbnRpdHlTZXROYW1lIiwiZ2V0U2VtYW50aWNLZXlzIiwiaXNEcmFmdFN1cHBvcnRlZCIsImlzQSIsImlzUmVsYXRpdmUiLCJnZXRIZWFkZXJDb250ZXh0Iiwic3Vic3RyaW5nIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY2FsY3VsYXRlTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJfYmVmb3JlUm91dGVNYXRjaGVkIiwiYlBsYWNlaG9sZGVyRW5hYmxlZCIsIlBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJvUm9vdFZpZXciLCJnZXRSb290Q29udHJvbCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiX29uUm91dGVNYXRjaGVkIiwib0V2ZW50Iiwib0FwcFN0YXRlSGFuZGxlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImlzTG9ja2VkIiwidW5sb2NrIiwiZ2V0UGFyYW1ldGVycyIsImNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAiLCJiUmVhc29uSXNJYXBwU3RhdGUiLCJyZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCIsImdldFBhcmFtZXRlciIsImNvbmZpZyIsImhpc3RvcnkiLCJzdGF0ZSIsImZlTGV2ZWwiLCJyZXN0b3JlSGlzdG9yeSIsInJlc29sdmVSb3V0ZU1hdGNoIiwiY2F0Y2giLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImRldGFjaEV2ZW50IiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImdldFJvdXRlRnJvbUhhc2giLCJzSGFzaCIsImdldEhhc2hDaGFuZ2VyIiwiaGFzaCIsImdldE1ldGFkYXRhIiwiZmlsdGVyIiwiZ2V0VGFyZ2V0c0Zyb21Sb3V0ZSIsImFUYXJnZXQiLCJzVGFyZ2V0IiwiaW5pdGlhbGl6ZVJvdXRpbmciLCJiaW5kIiwiYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwicmVzZXRFZGl0U3RhdGUiLCJiSXNJYXBwU3RhdGUiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsIm9TdGFydHVwUGFyYW1ldGVycyIsImJIYXNTdGFydFVwUGFyYW1ldGVycyIsInByZWZlcnJlZE1vZGUiLCJfbWFuYWdlQ3JlYXRlU3RhcnR1cCIsIl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAiLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsIkFwcFN0YXJ0dXBIZWxwZXIiLCJnZXRDb250ZXh0UGF0aCIsImdldENyZWF0ZVN0YXJ0dXBIYXNoIiwic05ld0hhc2giLCJyZXBsYWNlSGFzaCIsImdldERlZXBMaW5rU3RhcnR1cEhhc2giLCJnZXRNYW5pZmVzdCIsInJvdXRpbmciLCJvRGVlcExpbmsiLCJjb250ZXh0Iiwic1RlY2huaWNhbFBhdGgiLCJnZXRPdXRib3VuZHMiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiUm91dGluZ1NlcnZpY2VGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJvU2VydmljZUNvbnRleHQiLCJvUm91dGluZ1NlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXNCTUEsc0IsV0FETEMsY0FBYyxDQUFDLDZDQUFELEMsVUFFYkMsS0FBSyxFLFVBRUxBLEtBQUssRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFIOEJDLGE7Ozs7Ozs7Ozs7OztNQVd4QkMsYzs7Ozs7Ozs7Ozs7YUFnQlpDLG1CLEdBQTZCLEU7Ozs7Ozs7V0FHN0JDLEksR0FBQSxnQkFBTztBQUNOLFVBQU1DLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCOztBQUNBLFVBQUlELFFBQVEsQ0FBQ0UsU0FBVCxLQUF1QixXQUEzQixFQUF3QztBQUN2QyxhQUFLQyxhQUFMLEdBQXFCSCxRQUFRLENBQUNJLFdBQTlCO0FBQ0EsYUFBS0MsTUFB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VyxTQUFkLENBQXdCLENBQXhCLENBQVIsQ0FWc0IsQ0FVYztBQUNwQyxTQVhELE1BV08sSUFBSW1FLFNBQVMsQ0FBQzFCLElBQWQsRUFBb0I7QUFDMUJGLFVBQUFBLEtBQUssR0FBRzRCLFNBQVMsQ0FBQzFCLElBQWxCO0FBQ0E7O0FBRUQsWUFBSUYsS0FBSixFQUFXO0FBQ1Y7QUFDQyxVQUFBLE9BQUksQ0FBQ2xSLE9BQUwsQ0FBYW1SLGNBQWIsR0FBOEJ1QixXQUEvQixDQUFtRHhCLEtBQW5EO0FBQ0E7QUFDRCxPQXpCTSxDQUFQO0FBMEJBLEs7O1dBRUQrQixZLEdBQUEsd0JBQWU7QUFDZCxhQUFPLEtBQUt2UyxTQUFaO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0M2UixjLEdBQUEsMEJBQWlCO0FBQ2hCLGFBQU8sS0FBS3JPLFlBQVo7QUFDQSxLOztXQUNEZ1AsWSxHQUFBLHdCQUFvQjtBQUNuQixhQUFPLElBQVA7QUFDQSxLOzs7SUE5MUJrQ0MsTzs7OztNQWkyQjlCQyxxQjs7Ozs7Ozs7O1lBQ0xDLGMsR0FBQSx3QkFBZUMsZUFBZixFQUF3RTtBQUN2RSxVQUFNQyxlQUFlLEdBQUcsSUFBSW5VLGNBQUosQ0FBbUJrVSxlQUFuQixDQUF4QjtBQUNBLGFBQU9DLGVBQWUsQ0FBQzNTLFdBQXZCO0FBQ0EsSzs7O0lBSmtDNFMsYzs7U0FPckJKLHFCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgQXBwU3RhcnR1cEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9BcHBTdGFydHVwSGVscGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0tleUhlbHBlclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG50eXBlIFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3MgPSB7fTtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlRXZlbnRpbmdcIilcbmNsYXNzIFJvdXRpbmdTZXJ2aWNlRXZlbnRpbmcgZXh0ZW5kcyBFdmVudFByb3ZpZGVyIHtcblx0QGV2ZW50KClcblx0cm91dGVNYXRjaGVkITogRnVuY3Rpb247XG5cdEBldmVudCgpXG5cdGFmdGVyUm91dGVNYXRjaGVkITogRnVuY3Rpb247XG59XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljTWFwcGluZyA9IHtcblx0c2VtYW50aWNQYXRoOiBzdHJpbmc7XG5cdHRlY2huaWNhbFBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgY2xhc3MgUm91dGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0b0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblx0b01vZGVsITogT0RhdGFNb2RlbDtcblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXHRvUm91dGVyITogUm91dGVyO1xuXHRvUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblx0ZXZlbnRQcm92aWRlciE6IEV2ZW50UHJvdmlkZXI7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRvdXRib3VuZHM6IGFueTtcblx0X21UYXJnZXRzOiBhbnk7XG5cdF9tUm91dGVzOiBhbnk7XG5cdG9MYXN0U2VtYW50aWNNYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nO1xuXHRiRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290PzogYm9vbGVhbjtcblx0c0N1cnJlbnRSb3V0ZU5hbWU/OiBzdHJpbmc7XG5cdHNDdXJyZW50Um91dGVQYXR0ZXJuPzogc3RyaW5nO1xuXHRhQ3VycmVudFZpZXdzPzogYW55W107XG5cdG5hdmlnYXRpb25JbmZvUXVldWU6IGFueVtdID0gW107XG5cdHNDb250ZXh0UGF0aCE6IHN0cmluZztcblx0X2ZuT25Sb3V0ZU1hdGNoZWQhOiBGdW5jdGlvbjtcblx0aW5pdCgpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dC5zY29wZVR5cGUgPT09IFwiY29tcG9uZW50XCIpIHtcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdFx0dGhpcy5vTW9kZWwgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0dGhpcy5vTWV0YU1vZGVsID0gdGhpcy5vTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHR0aGlzLm9Sb3V0ZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCk7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpO1xuXHRcdFx0dGhpcy5ldmVudFByb3ZpZGVyID0gbmV3IChSb3V0aW5nU2VydmljZUV2ZW50aW5nIGFzIGFueSkoKTtcblxuXHRcdFx0Y29uc3Qgb1JvdXRpbmdDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1L3JvdXRpbmdcIik7XG5cdFx0XHRjb25zdCBvUm9vdFZpZXdDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1L3Jvb3RWaWV3XCIpO1xuXHRcdFx0dGhpcy5fcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZywgb1Jvb3RWaWV3Q29uZmlnKTtcblxuXHRcdFx0Y29uc3Qgb0FwcENvbmZpZyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwiL3NhcC5hcHBcIik7XG5cdFx0XHR0aGlzLm91dGJvdW5kcyA9IG9BcHBDb25maWcgJiYgb0FwcENvbmZpZy5jcm9zc05hdmlnYXRpb24gJiYgb0FwcENvbmZpZy5jcm9zc05hdmlnYXRpb24ub3V0Ym91bmRzO1xuXHRcdH1cblxuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cblx0YmVmb3JlRXhpdCgpIHtcblx0XHR0aGlzLm9Sb3V0ZXIuZGV0YWNoUm91dGVNYXRjaGVkKHRoaXMuX2ZuT25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwge30pO1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBhIG1hbmlmZXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbiBmb3IgaW50ZXJuYWwgdXNhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvUm91dGluZ0NvbmZpZyBUaGUgcm91dGluZyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvUm9vdFZpZXdDb25maWcgVGhlIHJvb3QgdmlldyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZzogYW55LCBvUm9vdFZpZXdDb25maWc6IGFueSkge1xuXHRcdGNvbnN0IGlzRkNMID0gb1Jvb3RWaWV3Q29uZmlnICYmIG9Sb290Vmlld0NvbmZpZy52aWV3TmFtZSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2xcIjtcblxuXHRcdC8vIEluZm9ybWF0aW9uIG9mIHRhcmdldHNcblx0XHR0aGlzLl9tVGFyZ2V0cyA9IHt9O1xuXHRcdE9iamVjdC5rZXlzKG9Sb3V0aW5nQ29uZmlnLnRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXSA9IE9iamVjdC5hc3NpZ24oeyB0YXJnZXROYW1lOiBzVGFyZ2V0TmFtZSB9LCBvUm91dGluZ0NvbmZpZy50YXJnZXRzW3NUYXJnZXROYW1lXSk7XG5cblx0XHRcdC8vIFZpZXcgbGV2ZWwgZm9yIEZDTCBjYXNlcyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHRhcmdldCBwYXR0ZXJuXG5cdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdMZXZlbCA9IHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiwgMCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiByb3V0ZXNcblx0XHR0aGlzLl9tUm91dGVzID0ge307XG5cdFx0Zm9yIChjb25zdCBzUm91dGVLZXkgaW4gb1JvdXRpbmdDb25maWcucm91dGVzKSB7XG5cdFx0XHRjb25zdCBvUm91dGVNYW5pZmVzdEluZm8gPSBvUm91dGluZ0NvbmZpZy5yb3V0ZXNbc1JvdXRlS2V5XSxcblx0XHRcdFx0YVJvdXRlVGFyZ2V0cyA9IEFycmF5LmlzQXJyYXkob1JvdXRlTWFuaWZlc3RJbmZvLnRhcmdldCkgPyBvUm91dGVNYW5pZmVzdEluZm8udGFyZ2V0IDogW29Sb3V0ZU1hbmlmZXN0SW5mby50YXJnZXRdLFxuXHRcdFx0XHRzUm91dGVOYW1lID0gQXJyYXkuaXNBcnJheShvUm91dGluZ0NvbmZpZy5yb3V0ZXMpID8gb1JvdXRlTWFuaWZlc3RJbmZvLm5hbWUgOiBzUm91dGVLZXksXG5cdFx0XHRcdHNSb3V0ZVBhdHRlcm4gPSBvUm91dGVNYW5pZmVzdEluZm8ucGF0dGVybjtcblxuXHRcdFx0Ly8gQ2hlY2sgcm91dGUgcGF0dGVybjogYWxsIHBhdHRlcm5zIG5lZWQgdG8gZW5kIHdpdGggJzo/cXVlcnk6JywgdGhhdCB3ZSB1c2UgZm9yIHBhcmFtZXRlcnNcblx0XHRcdGlmIChzUm91dGVQYXR0ZXJuLmxlbmd0aCA8IDggfHwgc1JvdXRlUGF0dGVybi5pbmRleE9mKFwiOj9xdWVyeTpcIikgIT09IHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIC0gOCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIlBhdHRlcm4gZm9yIHJvdXRlIFwiICsgc1JvdXRlTmFtZSArIFwiIGRvZXNuJ3QgZW5kIHdpdGggJzo/cXVlcnk6JyA6IFwiICsgc1JvdXRlUGF0dGVybik7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpUm91dGVMZXZlbCA9IHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNSb3V0ZVBhdHRlcm4sIDApO1xuXHRcdFx0dGhpcy5fbVJvdXRlc1tzUm91dGVOYW1lXSA9IHtcblx0XHRcdFx0bmFtZTogc1JvdXRlTmFtZSxcblx0XHRcdFx0cGF0dGVybjogc1JvdXRlUGF0dGVybixcblx0XHRcdFx0dGFyZ2V0czogYVJvdXRlVGFyZ2V0cyxcblx0XHRcdFx0cm91dGVMZXZlbDogaVJvdXRlTGV2ZWxcblx0XHRcdH07XG5cblx0XHRcdC8vIEFkZCB0aGUgcGFyZW50IHRhcmdldHMgaW4gdGhlIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgdGhlIHJvdXRlXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFSb3V0ZVRhcmdldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc1BhcmVudFRhcmdldE5hbWUgPSB0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzW2ldXS5wYXJlbnQ7XG5cdFx0XHRcdGlmIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHRcdGFSb3V0ZVRhcmdldHMucHVzaChzUGFyZW50VGFyZ2V0TmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFpc0ZDTCkge1xuXHRcdFx0XHQvLyBWaWV3IGxldmVsIGZvciBub24tRkNMIGNhc2VzIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgcm91dGUgcGF0dGVyblxuXHRcdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsID09PSB1bmRlZmluZWQgfHwgdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsIDwgaVJvdXRlTGV2ZWwpIHtcblx0XHRcdFx0XHQvLyBUaGVyZSBhcmUgY2FzZXMgd2hlbiBkaWZmZXJlbnQgcm91dGVzIHBvaW50IHRvIHRoZSBzYW1lIHRhcmdldC4gV2UgdGFrZSB0aGVcblx0XHRcdFx0XHQvLyBsYXJnZXN0IHZpZXdMZXZlbCBpbiB0aGF0IGNhc2UuXG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsID0gaVJvdXRlTGV2ZWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGQ0wgbGV2ZWwgZm9yIG5vbi1GQ0wgY2FzZXMgaXMgZXF1YWwgdG8gLTFcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uRkNMTGV2ZWwgPSAtMTtcblx0XHRcdH0gZWxzZSBpZiAoYVJvdXRlVGFyZ2V0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uY29udHJvbEFnZ3JlZ2F0aW9uICE9PSBcImJlZ2luQ29sdW1uUGFnZXNcIikge1xuXHRcdFx0XHQvLyBXZSdyZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSdzIG9ubHkgMSB0YXJnZXQgZm9yIHRoZSByb3V0ZSwgYW5kIGl0J3Mgbm90IGluIHRoZSBmaXJzdCBjb2x1bW5cblx0XHRcdFx0Ly8gLS0+IHRoaXMgaXMgYSBmdWxsc2NyZWVuIGNvbHVtbiBhZnRlciBhbGwgY29sdW1ucyBpbiB0aGUgRkNMIGhhdmUgYmVlbiB1c2VkXG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gMztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIE90aGVyIEZDTCBjYXNlc1xuXHRcdFx0XHRhUm91dGVUYXJnZXRzLmZvckVhY2goKHNUYXJnZXROYW1lOiBhbnkpID0+IHtcblx0XHRcdFx0XHRzd2l0Y2ggKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJiZWdpbkNvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIFwibWlkQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcm9wYWdhdGUgdmlld0xldmVsLCBjb250ZXh0UGF0dGVybiwgRkNMTGV2ZWwgYW5kIGNvbnRyb2xBZ2dyZWdhdGlvbiB0byBwYXJlbnQgdGFyZ2V0c1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKS5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHR3aGlsZSAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5wYXJlbnQ7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS52aWV3TGV2ZWwgPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS52aWV3TGV2ZWwgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdMZXZlbDtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm4gfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5GQ0xMZXZlbCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWw7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24gPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24gfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbjtcblx0XHRcdFx0c1RhcmdldE5hbWUgPSBzUGFyZW50VGFyZ2V0TmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIERldGVybWluZSB0aGUgcm9vdCBlbnRpdHkgZm9yIHRoZSBhcHBcblx0XHRjb25zdCBhTGV2ZWwwUm91dGVOYW1lcyA9IFtdO1xuXHRcdGNvbnN0IGFMZXZlbDFSb3V0ZU5hbWVzID0gW107XG5cdFx0bGV0IHNEZWZhdWx0Um91dGVOYW1lO1xuXG5cdFx0Zm9yIChjb25zdCBzTmFtZSBpbiB0aGlzLl9tUm91dGVzKSB7XG5cdFx0XHRjb25zdCBpTGV2ZWwgPSB0aGlzLl9tUm91dGVzW3NOYW1lXS5yb3V0ZUxldmVsO1xuXHRcdFx0aWYgKGlMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRhTGV2ZWwwUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAoaUxldmVsID09PSAxKSB7XG5cdFx0XHRcdGFMZXZlbDFSb3V0ZU5hbWVzLnB1c2goc05hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhTGV2ZWwwUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMFJvdXRlTmFtZXNbMF07XG5cdFx0fSBlbHNlIGlmIChhTGV2ZWwxUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMVJvdXRlTmFtZXNbMF07XG5cdFx0fVxuXG5cdFx0aWYgKHNEZWZhdWx0Um91dGVOYW1lKSB7XG5cdFx0XHRjb25zdCBzRGVmYXVsdFRhcmdldE5hbWUgPSB0aGlzLl9tUm91dGVzW3NEZWZhdWx0Um91dGVOYW1lXS50YXJnZXRzLnNsaWNlKC0xKVswXTtcblx0XHRcdHRoaXMuc0NvbnRleHRQYXRoID0gXCJcIjtcblx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1tzRGVmYXVsdFRhcmdldE5hbWVdLm9wdGlvbnMgJiYgdGhpcy5fbVRhcmdldHNbc0RlZmF1bHRUYXJnZXROYW1lXS5vcHRpb25zLnNldHRpbmdzKSB7XG5cdFx0XHRcdGNvbnN0IG9TZXR0aW5ncyA9IHRoaXMuX21UYXJnZXRzW3NEZWZhdWx0VGFyZ2V0TmFtZV0ub3B0aW9ucy5zZXR0aW5ncztcblx0XHRcdFx0dGhpcy5zQ29udGV4dFBhdGggPSBvU2V0dGluZ3MuY29udGV4dFBhdGggfHwgXCIvXCIgKyBvU2V0dGluZ3MuZW50aXR5U2V0O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLnNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcIkNhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogY29udGV4dFBhdGggb3IgZW50aXR5U2V0IG1pc3NpbmcgaW4gZGVmYXVsdCB0YXJnZXQ6IFwiICsgc0RlZmF1bHRUYXJnZXROYW1lXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGRldGVybWluZSBkZWZhdWx0IGNvbnRleHRQYXRoOiBubyBkZWZhdWx0IHJvdXRlIGZvdW5kLlwiKTtcblx0XHR9XG5cblx0XHQvLyBXZSBuZWVkIHRvIGVzdGFibGlzaCB0aGUgY29ycmVjdCBwYXRoIHRvIHRoZSBkaWZmZXJlbnQgcGFnZXMsIGluY2x1ZGluZyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpXG5cdFx0XHQubWFwKChzVGFyZ2V0S2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX21UYXJnZXRzW3NUYXJnZXRLZXldO1xuXHRcdFx0fSlcblx0XHRcdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS52aWV3TGV2ZWwgPCBiLnZpZXdMZXZlbCA/IC0xIDogMTtcblx0XHRcdH0pXG5cdFx0XHQuZm9yRWFjaCgodGFyZ2V0OiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gQWZ0ZXIgc29ydGluZyB0aGUgdGFyZ2V0cyBwZXIgbGV2ZWwgd2UgY2FuIHRoZW4gZ28gdGhyb3VnaCB0aGVpciBuYXZpZ2F0aW9uIG9iamVjdCBhbmQgdXBkYXRlIHRoZSBwYXRocyBhY2NvcmRpbmdseS5cblx0XHRcdFx0aWYgKHRhcmdldC5vcHRpb25zKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSB0YXJnZXQub3B0aW9ucy5zZXR0aW5ncztcblx0XHRcdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBzZXR0aW5ncy5jb250ZXh0UGF0aCB8fCAoc2V0dGluZ3MuZW50aXR5U2V0ID8gXCIvXCIgKyBzZXR0aW5ncy5lbnRpdHlTZXQgOiBcIlwiKTtcblx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCAmJiBzQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0XHRcdHNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCA9IHNDb250ZXh0UGF0aCArIFwiL1wiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRPYmplY3Qua2V5cyhzZXR0aW5ncy5uYXZpZ2F0aW9uIHx8IHt9KS5mb3JFYWNoKChzTmF2TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBpdCdzIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0Um91dGUgPSB0aGlzLl9tUm91dGVzW3NldHRpbmdzLm5hdmlnYXRpb25bc05hdk5hbWVdLmRldGFpbC5yb3V0ZV07XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0Um91dGUgJiYgdGFyZ2V0Um91dGUudGFyZ2V0cykge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRSb3V0ZS50YXJnZXRzLmZvckVhY2goKHNUYXJnZXROYW1lOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMuc2V0dGluZ3MgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCF0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucy5zZXR0aW5ncy5mdWxsQ29udGV4dFBhdGhcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0YXJnZXQudmlld0xldmVsID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zLnNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHNOYXZOYW1lLnN0YXJ0c1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHNOYXZOYW1lICsgXCIvXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucy5zZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCArIHNOYXZOYW1lICsgXCIvXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyBhIHZpZXcgbGV2ZWwgZnJvbSBhIHBhdHRlcm4gYnkgY291bnRpbmcgdGhlIG51bWJlciBvZiBzZWdtZW50cy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNQYXR0ZXJuIFRoZSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB2aWV3TGV2ZWwgVGhlIGN1cnJlbnQgbGV2ZWwgb2Ygdmlld1xuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbGV2ZWxcblx0ICovXG5cdF9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybjogc3RyaW5nLCB2aWV3TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XG5cdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKFwiOj9xdWVyeTpcIiwgXCJcIik7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRpZiAoc1BhdHRlcm4gJiYgc1BhdHRlcm5bMF0gIT09IFwiL1wiICYmIHNQYXR0ZXJuWzBdICE9PSBcIj9cIikge1xuXHRcdFx0c1BhdHRlcm4gPSBcIi9cIiArIHNQYXR0ZXJuO1xuXHRcdH1cblx0XHRpZiAoc1BhdHRlcm4ubGVuZ3RoKSB7XG5cdFx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdFx0aWYgKHRoaXMub1JvdXRlci5tYXRjaChzUGF0dGVybikgfHwgc1BhdHRlcm4gPT09IFwiXCIpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNQYXR0ZXJuLCArK3ZpZXdMZXZlbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm4sIHZpZXdMZXZlbCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB2aWV3TGV2ZWw7XG5cdFx0fVxuXHR9XG5cblx0X2dldFJvdXRlSW5mb3JtYXRpb24oc1JvdXRlTmFtZTogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuX21Sb3V0ZXNbc1JvdXRlTmFtZV07XG5cdH1cblxuXHRfZ2V0VGFyZ2V0SW5mb3JtYXRpb24oc1RhcmdldE5hbWU6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV07XG5cdH1cblxuXHRfZ2V0Q29tcG9uZW50SWQoc093bmVySWQ6IGFueSwgc0NvbXBvbmVudElkOiBhbnkpIHtcblx0XHRpZiAoc0NvbXBvbmVudElkLmluZGV4T2Yoc093bmVySWQgKyBcIi0tLVwiKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHNDb21wb25lbnRJZC5zdWJzdHIoc093bmVySWQubGVuZ3RoICsgMyk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29tcG9uZW50SWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50SW5zdGFuY2UgSW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhcmdldFxuXHQgKi9cblx0Z2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudEluc3RhbmNlOiBhbnkpIHtcblx0XHRjb25zdCBzVGFyZ2V0Q29tcG9uZW50SWQgPSB0aGlzLl9nZXRDb21wb25lbnRJZChvQ29tcG9uZW50SW5zdGFuY2UuX3NPd25lcklkLCBvQ29tcG9uZW50SW5zdGFuY2UuZ2V0SWQoKSk7XG5cdFx0bGV0IHNDb3JyZWN0VGFyZ2V0TmFtZSA9IG51bGw7XG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uaWQgPT09IHNUYXJnZXRDb21wb25lbnRJZCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0lkID09PSBzVGFyZ2V0Q29tcG9uZW50SWQpIHtcblx0XHRcdFx0c0NvcnJlY3RUYXJnZXROYW1lID0gc1RhcmdldE5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhcmdldEluZm9ybWF0aW9uKHNDb3JyZWN0VGFyZ2V0TmFtZSk7XG5cdH1cblxuXHRnZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk6IFNlbWFudGljTWFwcGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmc7XG5cdH1cblxuXHRzZXRMYXN0U2VtYW50aWNNYXBwaW5nKG9NYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nKSB7XG5cdFx0dGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyA9IG9NYXBwaW5nO1xuXHR9XG5cblx0bmF2aWdhdGVUbyhvQ29udGV4dDogYW55LCBzUm91dGVOYW1lOiBhbnksIG1QYXJhbWV0ZXJNYXBwaW5nOiBhbnksIGJQcmVzZXJ2ZUhpc3Rvcnk6IGFueSkge1xuXHRcdGxldCBzVGFyZ2V0VVJMUHJvbWlzZSwgYklzU3RpY2t5TW9kZTogYm9vbGVhbjtcblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwoKSAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSB7XG5cdFx0XHRiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0XHRpZiAoIW1QYXJhbWV0ZXJNYXBwaW5nKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgbWFwcGluZyBkZWZpbmUgdGhpcyBtZWFuIHdlIHJlbHkgZW50aXJlbHkgb24gdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoXG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1RhcmdldFVSTFByb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJNYXBwaW5nLCBzUm91dGVOYW1lLCBvQ29udGV4dCkudGhlbigobVBhcmFtZXRlcnM6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5vUm91dGVyLmdldFVSTChzUm91dGVOYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNUYXJnZXRVUkxQcm9taXNlLnRoZW4oKHNUYXJnZXRVUkw6IGFueSkgPT4ge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKHNUYXJnZXRVUkwsIGJQcmVzZXJ2ZUhpc3RvcnksIGZhbHNlLCBmYWxzZSwgIWJJc1N0aWNreU1vZGUpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXR1cm4gYSBtYXAgb2Ygcm91dGluZyB0YXJnZXQgcGFyYW1ldGVycyB3aGVyZSB0aGUgYmluZGluZyBzeW50YXggaXMgcmVzb2x2ZWQgdG8gdGhlIGN1cnJlbnQgbW9kZWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBtUGFyYW1ldGVycyBQYXJhbWV0ZXJzIG1hcCBpbiB0aGUgZm9ybWF0IFtrOiBzdHJpbmddIDogQ29tcGxleEJpbmRpbmdTeW50YXhcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUYXJnZXRSb3V0ZSBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgYmluZGluZyBjb250ZXh0XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnNcblx0ICovXG5cdHByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzOiBhbnksIHNUYXJnZXRSb3V0ZTogc3RyaW5nLCBvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdGxldCBvUGFyYW1ldGVyc1Byb21pc2U7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdGNvbnN0IGFDb250ZXh0UGF0aFBhcnRzID0gc0NvbnRleHRQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IGFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzID0gT2JqZWN0LmtleXMobVBhcmFtZXRlcnMpLm1hcCgoc1BhcmFtZXRlcktleTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiA9IG1QYXJhbWV0ZXJzW3NQYXJhbWV0ZXJLZXldO1xuXHRcdFx0XHQvLyBXZSBhc3N1bWUgdGhlIGRlZmluZWQgcGFyYW1ldGVycyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCBhIGJpbmRpbmcgZXhwcmVzc2lvblxuXHRcdFx0XHRjb25zdCBvUGFyc2VkRXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRjb25zdCBhUGFydHMgPSBvUGFyc2VkRXhwcmVzc2lvbi5wYXJ0cyB8fCBbb1BhcnNlZEV4cHJlc3Npb25dO1xuXHRcdFx0XHRjb25zdCBhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IGFQYXJ0cy5tYXAoZnVuY3Rpb24gKG9QYXRoUGFydDogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3QgYVJlbGF0aXZlUGFydHMgPSBvUGF0aFBhcnQucGF0aC5zcGxpdChcIi4uL1wiKTtcblx0XHRcdFx0XHQvLyBXZSBnbyB1cCB0aGUgY3VycmVudCBjb250ZXh0IHBhdGggYXMgbWFueSB0aW1lcyBhcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRjb25zdCBhTG9jYWxQYXJ0cyA9IGFDb250ZXh0UGF0aFBhcnRzLnNsaWNlKDAsIGFDb250ZXh0UGF0aFBhcnRzLmxlbmd0aCAtIGFSZWxhdGl2ZVBhcnRzLmxlbmd0aCArIDEpO1xuXHRcdFx0XHRcdGFMb2NhbFBhcnRzLnB1c2goYVJlbGF0aXZlUGFydHNbYVJlbGF0aXZlUGFydHMubGVuZ3RoIC0gMV0pO1xuXG5cdFx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IGFMb2NhbFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IG9NZXRhQ29udGV4dCA9IChvTWV0YU1vZGVsIGFzIGFueSkuZ2V0TWV0YUNvbnRleHQoc1Byb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RQcm9wZXJ0eShzUHJvcGVydHlQYXRoKS50aGVuKGZ1bmN0aW9uIChvVmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IG9NZXRhQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNFZG1UeXBlID0gb1Byb3BlcnR5SW5mby4kVHlwZTtcblx0XHRcdFx0XHRcdHJldHVybiBPRGF0YVV0aWxzLmZvcm1hdExpdGVyYWwob1ZhbHVlLCBzRWRtVHlwZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbigoYVJlc29sdmVkUGFyYW1ldGVyczogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXJcblx0XHRcdFx0XHRcdD8gb1BhcnNlZEV4cHJlc3Npb24uZm9ybWF0dGVyLmFwcGx5KHRoaXMsIGFSZXNvbHZlZFBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHQ6IGFSZXNvbHZlZFBhcmFtZXRlcnMuam9pbihcIlwiKTtcblx0XHRcdFx0XHRyZXR1cm4geyBrZXk6IHNQYXJhbWV0ZXJLZXksIHZhbHVlOiB2YWx1ZSB9O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLmFsbChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbihmdW5jdGlvbiAoXG5cdFx0XHRcdGFBbGxSZXNvbHZlZFBhcmFtZXRlcnM6IHsga2V5OiBhbnk7IHZhbHVlOiBhbnkgfVtdXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdFx0XHRhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9SZXNvbHZlZFBhcmFtZXRlcjogeyBrZXk6IGFueTsgdmFsdWU6IGFueSB9KSB7XG5cdFx0XHRcdFx0b1BhcmFtZXRlcnNbb1Jlc29sdmVkUGFyYW1ldGVyLmtleV0gPSBvUmVzb2x2ZWRQYXJhbWV0ZXIudmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlcnM7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkNvdWxkIG5vdCBwYXJzZSB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb24gdG8gcm91dGUgXCIgKyBzVGFyZ2V0Um91dGUpO1xuXHRcdFx0b1BhcmFtZXRlcnNQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyYW1ldGVyc1Byb21pc2U7XG5cdH1cblxuXHRfZmlyZVJvdXRlTWF0Y2hFdmVudHMobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgbVBhcmFtZXRlcnMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cblx0XHRFZGl0U3RhdGUuY2xlYW5Qcm9jZXNzZWRFZGl0U3RhdGUoKTsgLy8gUmVzZXQgVUkgc3RhdGUgd2hlbiBhbGwgYmluZGluZ3MgaGF2ZSBiZWVuIHJlZnJlc2hlZFxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0ge29iamVjdH0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgbWFwIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZV0gTmF2aWdhdGUgdG8gdGhlIGNvbnRleHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgVVJMXG5cdCAqIEBwYXJhbSB7UHJvbWlzZX0gW21QYXJhbWV0ZXJzLmFzeW5jQ29udGV4dF0gVGhlIGNvbnRleHQgaXMgY3JlYXRlZCBhc3luYywgbmF2aWdhdGUgdG8gKC4uLikgYW5kXG5cdCAqICAgICAgICAgICAgICAgICAgICB3YWl0IGZvciBQcm9taXNlIHRvIGJlIHJlc29sdmVkIGFuZCB0aGVuIG5hdmlnYXRlIGludG8gdGhlIGNvbnRleHRcblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYkRlZmVycmVkQ29udGV4dF0gVGhlIGNvbnRleHQgc2hhbGwgYmUgY3JlYXRlZCBkZWZlcnJlZCBhdCB0aGUgdGFyZ2V0IHBhZ2Vcblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuZWRpdGFibGVdIFRoZSB0YXJnZXQgcGFnZSBzaGFsbCBiZSBpbW1lZGlhdGVseSBpbiB0aGUgZWRpdCBtb2RlIHRvIGF2b2lkIGZsaWNrZXJpbmdcblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbF0gVGhlIGJQZXJzaXN0T1BTY3JvbGwgd2lsbCBiZSB1c2VkIGZvciBzY3JvbGxpbmcgdG8gZmlyc3QgdGFiXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbbVBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWxdIGArMWAgaWYgd2UgYWRkIGEgY29sdW1uIGluIEZDTCwgYC0xYCB0byByZW1vdmUgYSBjb2x1bW4sIDAgdG8gc3RheSBvbiB0aGUgc2FtZSBjb2x1bW5cblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZV0gRG8gbmF2aWdhdGlvbiB3aXRob3V0IHRha2luZyBpbnRvIGFjY291bnQgdGhlIHByZXNlcnZlZCBjYWNoZSBtZWNoYW5pc21cblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlJlY3JlYXRlQ29udGV4dF0gRm9yY2UgcmUtY3JlYXRpb24gb2YgdGhlIGNvbnRleHQgaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lIHBhc3NlZCBhcyBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYkZvcmNlRm9jdXNdIEZvcmNlcyBmb2N1cyBzZWxlY3Rpb24gYWZ0ZXIgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0ge29iamVjdH0gW29WaWV3RGF0YV0gVmlldyBkYXRhXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb0N1cnJlbnRUYXJnZXRJbmZvXSBUaGUgdGFyZ2V0IGluZm9ybWF0aW9uIGZyb20gd2hpY2ggdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdG5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdG9Db250ZXh0OiBhbnksXG5cdFx0bVBhcmFtZXRlcnM6XG5cdFx0XHR8IHtcblx0XHRcdFx0XHRjaGVja05vSGFzaENoYW5nZT86IGJvb2xlYW47XG5cdFx0XHRcdFx0YXN5bmNDb250ZXh0PzogUHJvbWlzZTxhbnk+O1xuXHRcdFx0XHRcdGJEZWZlcnJlZENvbnRleHQ/OiBib29sZWFuO1xuXHRcdFx0XHRcdGVkaXRhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0XHR0cmFuc2llbnQ/OiBib29sZWFuO1xuXHRcdFx0XHRcdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRcdHVwZGF0ZUZDTExldmVsPzogbnVtYmVyO1xuXHRcdFx0XHRcdG5vUHJlc2VydmF0aW9uQ2FjaGU/OiBib29sZWFuO1xuXHRcdFx0XHRcdGJSZWNyZWF0ZUNvbnRleHQ/OiBib29sZWFuO1xuXHRcdFx0XHRcdGJGb3JjZUZvY3VzPzogYm9vbGVhbjtcblx0XHRcdFx0XHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHRcdFx0XHRcdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG5cdFx0XHRcdFx0YkRyYWZ0TmF2aWdhdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdFx0Yk5hdmlnYXRlVG9TaWJsaW5nRW50aXR5PzogYm9vbGVhbjtcblx0XHRcdCAgfVxuXHRcdFx0fCB1bmRlZmluZWQsXG5cdFx0b1ZpZXdEYXRhOiBhbnkgfCB1bmRlZmluZWQsXG5cdFx0b0N1cnJlbnRUYXJnZXRJbmZvOiBhbnkgfCB1bmRlZmluZWRcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bGV0IHNUYXJnZXRSb3V0ZTogc3RyaW5nID0gXCJcIixcblx0XHRcdG9Sb3V0ZVBhcmFtZXRlcnNQcm9taXNlLFxuXHRcdFx0YklzU3RpY2t5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdFx0aWYgKG9Db250ZXh0LmdldE1vZGVsKCkgJiYgb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwpIHtcblx0XHRcdGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHRcdC8vIE1hbmFnZSBwYXJhbWV0ZXIgbWFwcGluZ1xuXHRcdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy50YXJnZXRQYXRoICYmIG9WaWV3RGF0YSAmJiBvVmlld0RhdGEubmF2aWdhdGlvbikge1xuXHRcdFx0Y29uc3Qgb1JvdXRlRGV0YWlsID0gb1ZpZXdEYXRhLm5hdmlnYXRpb25bbVBhcmFtZXRlcnMudGFyZ2V0UGF0aF0uZGV0YWlsO1xuXHRcdFx0c1RhcmdldFJvdXRlID0gb1JvdXRlRGV0YWlsLnJvdXRlO1xuXG5cdFx0XHRpZiAob1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0b1JvdXRlUGFyYW1ldGVyc1Byb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKG9Sb3V0ZURldGFpbC5wYXJhbWV0ZXJzLCBzVGFyZ2V0Um91dGUsIG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc1RhcmdldFBhdGggPSB0aGlzLl9nZXRQYXRoRnJvbUNvbnRleHQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0XHQvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2UncmUgc3VwcG9zZWQgdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcFxuXHRcdC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZXhpdCBmcm9tIHRoZSBhcHAgaW5zdGVhZFxuXHRcdGlmIChzVGFyZ2V0UGF0aC5sZW5ndGggPT09IDAgJiYgdGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290KSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5leGl0RnJvbUFwcCgpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgY29udGV4dCBpcyBkZWZlcnJlZCBvciBhc3luYywgd2UgYWRkICguLi4pIHRvIHRoZSBwYXRoXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5hc3luY0NvbnRleHQgfHwgbVBhcmFtZXRlcnM/LmJEZWZlcnJlZENvbnRleHQpIHtcblx0XHRcdHNUYXJnZXRQYXRoICs9IFwiKC4uLilcIjtcblx0XHR9XG5cblx0XHQvLyBBZGQgbGF5b3V0IHBhcmFtZXRlciBpZiBuZWVkZWRcblx0XHRjb25zdCBzTGF5b3V0ID0gdGhpcy5fY2FsY3VsYXRlTGF5b3V0KHNUYXJnZXRQYXRoLCBtUGFyYW1ldGVycyk7XG5cdFx0aWYgKHNMYXlvdXQpIHtcblx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2xheW91dD1cIiArIHNMYXlvdXQ7XG5cdFx0fVxuXG5cdFx0Ly8gTmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZvciBsYXRlciB1c2FnZVxuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uSW5mbyA9IHtcblx0XHRcdG9Bc3luY0NvbnRleHQ6IG1QYXJhbWV0ZXJzPy5hc3luY0NvbnRleHQsXG5cdFx0XHRiRGVmZXJyZWRDb250ZXh0OiBtUGFyYW1ldGVycz8uYkRlZmVycmVkQ29udGV4dCxcblx0XHRcdGJUYXJnZXRFZGl0YWJsZTogbVBhcmFtZXRlcnM/LmVkaXRhYmxlLFxuXHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogbVBhcmFtZXRlcnM/LmJQZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHR1c2VDb250ZXh0OiBtUGFyYW1ldGVycz8udXBkYXRlRkNMTGV2ZWwgPT09IC0xIHx8IG1QYXJhbWV0ZXJzPy5iUmVjcmVhdGVDb250ZXh0ID8gdW5kZWZpbmVkIDogb0NvbnRleHQsXG5cdFx0XHRiRHJhZnROYXZpZ2F0aW9uOiBtUGFyYW1ldGVycz8uYkRyYWZ0TmF2aWdhdGlvbixcblx0XHRcdGJTaG93UGxhY2Vob2xkZXI6IG1QYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZCA/IG1QYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgOiB0cnVlLFxuXHRcdFx0Yk5hdmlnYXRlVG9TaWJsaW5nRW50aXR5OiBtUGFyYW1ldGVycz8uYk5hdmlnYXRlVG9TaWJsaW5nRW50aXR5XG5cdFx0fTtcblxuXHRcdGlmIChtUGFyYW1ldGVycz8uY2hlY2tOb0hhc2hDaGFuZ2UpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBuZXcgaGFzaCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmVcblx0XHRcdGNvbnN0IHNDdXJyZW50SGFzaE5vQXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXJQcm94eS5nZXRIYXNoKCkucmVwbGFjZSgvWyY/XXsxfXNhcC1pYXBwLXN0YXRlPVtBLVowLTldKy8sIFwiXCIpO1xuXHRcdFx0aWYgKHNUYXJnZXRQYXRoID09PSBzQ3VycmVudEhhc2hOb0FwcFN0YXRlKSB7XG5cdFx0XHRcdC8vIFRoZSBoYXNoIGRvZXNuJ3QgY2hhbmdlLCBidXQgd2UgZmlyZSB0aGUgcm91dGVNYXRjaCBldmVudCB0byB0cmlnZ2VyIHBhZ2UgcmVmcmVzaCAvIGJpbmRpbmdcblx0XHRcdFx0Y29uc3QgbUV2ZW50UGFyYW1ldGVyczogYW55ID0gdGhpcy5vUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaCh0aGlzLm9Sb3V0ZXJQcm94eS5nZXRIYXNoKCkpO1xuXHRcdFx0XHRpZiAobUV2ZW50UGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8gPSBvTmF2aWdhdGlvbkluZm87XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy52aWV3cyA9IHRoaXMuYUN1cnJlbnRWaWV3cztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMub1JvdXRlclByb3h5LnNldEZvY3VzRm9yY2VkKCEhbVBhcmFtZXRlcnMuYkZvcmNlRm9jdXMpO1xuXG5cdFx0XHRcdHRoaXMuX2ZpcmVSb3V0ZU1hdGNoRXZlbnRzKG1FdmVudFBhcmFtZXRlcnMpO1xuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy50cmFuc2llbnQgJiYgbVBhcmFtZXRlcnMuZWRpdGFibGUgPT0gdHJ1ZSAmJiBzVGFyZ2V0UGF0aC5pbmRleE9mKFwiKC4uLilcIikgPT09IC0xKSB7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGguaW5kZXhPZihcIj9cIikgPiAtMSkge1xuXHRcdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiZpLWFjdGlvbj1jcmVhdGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2ktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHVuYm91bmQgbWVzc2FnZXMgdXBvbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1Bcblx0XHQvLyBUaGlzIGlzIHRvIGVuc3VyZSBzdGFsZSBlcnJvciBtZXNzYWdlcyBmcm9tIExSIGFyZSBub3Qgc2hvd24gdG8gdGhlIHVzZXIgYWZ0ZXIgbmF2aWdhdGlvbiB0byBPUC5cblx0XHRpZiAob0N1cnJlbnRUYXJnZXRJbmZvICYmIG9DdXJyZW50VGFyZ2V0SW5mby5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRjb25zdCBvUm91dGVJbmZvID0gdGhpcy5vUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaChzVGFyZ2V0UGF0aCk7XG5cdFx0XHRpZiAob1JvdXRlSW5mbykge1xuXHRcdFx0XHRjb25zdCBvUm91dGUgPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKG9Sb3V0ZUluZm8ubmFtZSk7XG5cdFx0XHRcdGlmIChvUm91dGUgJiYgb1JvdXRlLnRhcmdldHMgJiYgb1JvdXRlLnRhcmdldHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGNvbnN0IHNMYXN0VGFyZ2V0TmFtZSA9IG9Sb3V0ZS50YXJnZXRzW29Sb3V0ZS50YXJnZXRzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzTGFzdFRhcmdldE5hbWUpO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0ICYmIG9UYXJnZXQubmFtZSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyBpbiB0aGUgcXVldWVcblx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucHVzaChvTmF2aWdhdGlvbkluZm8pO1xuXG5cdFx0aWYgKHNUYXJnZXRSb3V0ZSAmJiBvUm91dGVQYXJhbWV0ZXJzUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIG9Sb3V0ZVBhcmFtZXRlcnNQcm9taXNlLnRoZW4oKG9Sb3V0ZVBhcmFtZXRlcnM6IGFueSkgPT4ge1xuXHRcdFx0XHRvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUgPSBiSXNTdGlja3lNb2RlO1xuXHRcdFx0XHR0aGlzLm9Sb3V0ZXIubmF2VG8oc1RhcmdldFJvdXRlLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHlcblx0XHRcdC5uYXZUb0hhc2goc1RhcmdldFBhdGgsIGZhbHNlLCBtUGFyYW1ldGVycz8ubm9QcmVzZXJ2YXRpb25DYWNoZSwgbVBhcmFtZXRlcnM/LmJGb3JjZUZvY3VzLCAhYklzU3RpY2t5TW9kZSlcblx0XHRcdC50aGVuKChiTmF2aWdhdGVkOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCFiTmF2aWdhdGVkKSB7XG5cdFx0XHRcdFx0Ly8gVGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW4gLS0+IHJlbW92ZSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIHF1ZXVlIGFzIHRoZXkgc2hvdWxkbid0IGJlIHVzZWRcblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucG9wKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGJOYXZpZ2F0ZWQ7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlJvdXRpbmcjbmF2aWdhdGVUb1JvdXRlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5Sb3V0aW5nXG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb1JvdXRlUGFyYW1ldGVyc10gUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9Sb3V0ZVBhcmFtZXRlcnM/OiBhbnkpIHtcblx0XHRjb25zdCBzVGFyZ2V0VVJMID0gdGhpcy5vUm91dGVyLmdldFVSTChzVGFyZ2V0Um91dGVOYW1lLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKHNUYXJnZXRVUkwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICFvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgdmlld3Mgb24gdGhlIHNjcmVlbiBpcyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgb3IgYGZhbHNlYCBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBpbXBhY3RlZCBvciBub3Rcblx0ICovXG5cdGlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHQvLyBGaXJzdCwgY2hlY2sgd2l0aCB0aGUgdGVjaG5pY2FsIHBhdGguIFdlIGhhdmUgdG8gdHJ5IGl0LCBiZWNhdXNlIGZvciBsZXZlbCA+IDEsIHdlXG5cdFx0Ly8gdXNlcyB0ZWNobmljYWwga2V5cyBldmVuIGlmIFNlbWFudGljIGtleXMgYXJlIGVuYWJsZWRcblx0XHRpZiAodGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNQYXRoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmICgvXlteXFwoXFwpXStcXChbXlxcKFxcKV0rXFwpJC8udGVzdChzUGF0aCkpIHtcblx0XHRcdC8vIElmIHRoZSBjdXJyZW50IHBhdGggY2FuIGJlIHNlbWFudGljIChpLmUuIGlzIGxpa2UgeHh4KHl5eSkpXG5cdFx0XHQvLyBjaGVjayB3aXRoIHRoZSBzZW1hbnRpYyBwYXRoIGlmIHdlIGNhbiBmaW5kIGl0XG5cdFx0XHRsZXQgc1NlbWFudGljUGF0aDtcblx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nICYmIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNTZW1hbnRpY1BhdGggIT0gc1BhdGggPyB0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1NlbWFudGljUGF0aCkgOiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGg6IGFueSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRzUGF0aCA9IHNQYXRoLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdGgpIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGgpO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0NvbnRleHRGb3JTZW1hbnRpY1BhdGgob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0Ly8gRmlyc3QsIGNoZWNrIGlmIHRoaXMgaXMgYSBsZXZlbC0xIG9iamVjdCAocGF0aCA9IC9hYWEoYmJiKSlcblx0XHRpZiAoIS9eXFwvW15cXChdK1xcKFteXFwpXStcXCkkLy50ZXN0KHNQYXRoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hlY2sgaWYgdGhlIGVudGl0eSBoYXMgc2VtYW50aWMga2V5c1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c0VudGl0eVNldE5hbWUgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIik7XG5cdFx0aWYgKCFTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMob01ldGFNb2RlbCwgc0VudGl0eVNldE5hbWUpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlbiBjaGVjayB0aGUgZW50aXR5IGlzIGRyYWZ0LWVuYWJsZWRcblx0XHRyZXR1cm4gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChvTWV0YU1vZGVsLCBzUGF0aCk7XG5cdH1cblxuXHRfZ2V0UGF0aEZyb21Db250ZXh0KG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRsZXQgc1BhdGg7XG5cblx0XHRpZiAob0NvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikgJiYgb0NvbnRleHQuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRzUGF0aCA9IG9Db250ZXh0LmdldEhlYWRlckNvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9PT0gLTEpIHtcblx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrIGZyb20gYSBjb250ZXh0LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhcblx0XHRcdHNQYXRoID0gdGhpcy5fZmluZFBhdGhUb05hdmlnYXRlKHNQYXRoKTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgd2UncmUgbmF2aWdhdGluZyBiYWNrIHRvIGEgc2VtYW50aWMgcGF0aCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlc29sdmVkXG5cdFx0XHRpZiAodGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyAmJiB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nLnRlY2huaWNhbFBhdGggPT09IHNQYXRoKSB7XG5cdFx0XHRcdHNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9jaGVja0NvbnRleHRGb3JTZW1hbnRpY1BhdGgob0NvbnRleHQpKSB7XG5cdFx0XHQvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIHRvIHVzZSBhIHNlbWFudGljIHBhdGhcblx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQsIHRydWUpO1xuXG5cdFx0XHRpZiAoIXNTZW1hbnRpY1BhdGgpIHtcblx0XHRcdFx0Ly8gV2Ugd2VyZSBub3QgYWJsZSB0byBidWlsZCB0aGUgc2VtYW50aWMgcGF0aCAtLT4gVXNlIHRoZSB0ZWNobmljYWwgcGF0aCBhbmRcblx0XHRcdFx0Ly8gY2xlYXIgdGhlIHByZXZpb3VzIG1hcHBpbmcsIG90aGVyd2lzZSB0aGUgb2xkIG1hcHBpbmcgaXMgdXNlZCBpbiBFZGl0RmxvdyN1cGRhdGVEb2N1bWVudFxuXHRcdFx0XHQvLyBhbmQgaXQgbGVhZHMgdG8gdW53YW50ZWQgcGFnZSByZWxvYWRzXG5cdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh1bmRlZmluZWQpO1xuXHRcdFx0fSBlbHNlIGlmIChzU2VtYW50aWNQYXRoICE9PSBzUGF0aCkge1xuXHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHsgdGVjaG5pY2FsUGF0aDogc1BhdGgsIHNlbWFudGljUGF0aDogc1NlbWFudGljUGF0aCB9KTtcblx0XHRcdFx0c1BhdGggPSBzU2VtYW50aWNQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJlbW92ZSBleHRyYSAnLycgYXQgdGhlIGJlZ2lubmluZyBvZiBwYXRoXG5cdFx0aWYgKHNQYXRoWzBdID09PSBcIi9cIikge1xuXHRcdFx0c1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9XG5cblx0X2NhbGN1bGF0ZUxheW91dChzUGF0aDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bGV0IEZDTExldmVsID0gbVBhcmFtZXRlcnMuRkNMTGV2ZWw7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsKSB7XG5cdFx0XHRGQ0xMZXZlbCArPSBtUGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbDtcblx0XHRcdGlmIChGQ0xMZXZlbCA8IDApIHtcblx0XHRcdFx0RkNMTGV2ZWwgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuY2FsY3VsYXRlTGF5b3V0KFxuXHRcdFx0RkNMTGV2ZWwsXG5cdFx0XHRzUGF0aCxcblx0XHRcdG1QYXJhbWV0ZXJzLnNMYXlvdXQsXG5cdFx0XHRtUGFyYW1ldGVycy5rZWVwQ3VycmVudExheW91dFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciBiZWZvcmUgYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBEaXNwbGF5cyBhIGJ1c3kgaW5kaWNhdG9yLlxuXHQgKlxuXHQgKi9cblx0X2JlZm9yZVJvdXRlTWF0Y2hlZCgvKm9FdmVudDogRXZlbnQqLykge1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmICghYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0XHRCdXN5TG9ja2VyLmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogSGlkZXMgdGhlIGJ1c3kgaW5kaWNhdG9yIGFuZCBmaXJlcyBpdHMgb3duICdyb3V0ZW1hdGNoZWQnIGV2ZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0V2ZW50IFRoZSBldmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKG9FdmVudDogRXZlbnQpIHtcblx0XHRjb25zdCBvQXBwU3RhdGVIYW5kbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLFxuXHRcdFx0b1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob1Jvb3RWaWV3KSAmJiAhYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5sZW5ndGgpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlWzBdO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnNsaWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAob0FwcFN0YXRlSGFuZGxlci5jaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLmJSZWFzb25Jc0lhcHBTdGF0ZSA9IHRydWU7XG5cdFx0XHRvQXBwU3RhdGVIYW5kbGVyLnJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlTmFtZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYW1lXCIpO1xuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm4gPSBtUGFyYW1ldGVycy5jb25maWcucGF0dGVybjtcblx0XHR0aGlzLmFDdXJyZW50Vmlld3MgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIik7XG5cblx0XHRtUGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRtUGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXG5cdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobVBhcmFtZXRlcnMpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgY3VycmVudCBoYXNoIGhhcyBiZWVuIHNldCBieSB0aGUgcm91dGVyUHJveHkubmF2VG9IYXNoIGZ1bmN0aW9uXG5cdFx0Ly8gSWYgbm90LCByZWJ1aWxkIGhpc3RvcnkgcHJvcGVybHkgKGJvdGggaW4gdGhlIGJyb3dzZXIgYW5kIHRoZSBSb3V0ZXJQcm94eSlcblx0XHRpZiAoIWhpc3Rvcnkuc3RhdGUgfHwgaGlzdG9yeS5zdGF0ZS5mZUxldmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHRcdC5yZXN0b3JlSGlzdG9yeSgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVzdG9yaW5nIGhpc3RvcnlcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5LnJlc29sdmVSb3V0ZU1hdGNoKCk7XG5cdFx0fVxuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVkKG9EYXRhOiBhbnksIGZuRnVuY3Rpb24/OiBhbnksIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRkZXRhY2hSb3V0ZU1hdGNoZWQoZm5GdW5jdGlvbjogYW55LCBvTGlzdGVuZXI/OiBhbnkpIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRhdHRhY2hBZnRlclJvdXRlTWF0Y2hlZChvRGF0YTogYW55LCBmbkZ1bmN0aW9uOiBhbnksIG9MaXN0ZW5lcj86IGFueSkge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cdGRldGFjaEFmdGVyUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IGFueSwgb0xpc3RlbmVyOiBhbnkpIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0Z2V0Um91dGVGcm9tSGFzaChvUm91dGVyOiBhbnksIG9BcHBDb21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IHNIYXNoID0gb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLmhhc2g7XG5cdFx0Y29uc3Qgb1JvdXRlSW5mbyA9IG9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHNIYXNoKTtcblx0XHRyZXR1cm4gb0FwcENvbXBvbmVudFxuXHRcdFx0LmdldE1ldGFkYXRhKClcblx0XHRcdC5nZXRNYW5pZmVzdEVudHJ5KFwiL3NhcC51aTUvcm91dGluZy9yb3V0ZXNcIilcblx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Sb3V0ZTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvUm91dGUubmFtZSA9PT0gb1JvdXRlSW5mby5uYW1lO1xuXHRcdFx0fSlbMF07XG5cdH1cblx0Z2V0VGFyZ2V0c0Zyb21Sb3V0ZShvUm91dGU6IGFueSkge1xuXHRcdGNvbnN0IG9UYXJnZXQgPSBvUm91dGUudGFyZ2V0O1xuXHRcdGlmICh0eXBlb2Ygb1RhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmV0dXJuIFt0aGlzLl9tVGFyZ2V0c1tvVGFyZ2V0XV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFUYXJnZXQ6IGFueVtdID0gW107XG5cdFx0XHRvVGFyZ2V0LmZvckVhY2goKHNUYXJnZXQ6IGFueSkgPT4ge1xuXHRcdFx0XHRhVGFyZ2V0LnB1c2godGhpcy5fbVRhcmdldHNbc1RhcmdldF0pO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gYVRhcmdldDtcblx0XHR9XG5cdH1cblxuXHRpbml0aWFsaXplUm91dGluZygpIHtcblx0XHQvLyBBdHRhY2ggcm91dGVyIGhhbmRsZXJzXG5cdFx0dGhpcy5fZm5PblJvdXRlTWF0Y2hlZCA9IHRoaXMuX29uUm91dGVNYXRjaGVkLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlci5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fYmVmb3JlUm91dGVNYXRjaGVkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHQvLyBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuXHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZSA9IFtdO1xuXHRcdEVkaXRTdGF0ZS5yZXNldEVkaXRTdGF0ZSgpO1xuXHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9ICF0aGlzLm9Sb3V0ZXIubWF0Y2goXCJcIik7XG5cblx0XHRjb25zdCBiSXNJYXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuaW5kZXhPZihcInNhcC1pYXBwLXN0YXRlXCIpICE9PSAtMTtcblx0XHRjb25zdCBpbml0UHJvbWlzZSA9IHRoaXMub0FwcENvbXBvbmVudFxuXHRcdFx0LmdldFN0YXJ0dXBQYXJhbWV0ZXJzKClcblx0XHRcdC50aGVuKChvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvU3RhcnR1cFBhcmFtZXRlcnMpLmxlbmd0aCAhPT0gMDtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCk7XG5cdFx0XHRcdC8vIE1hbmFnZSBzdGFydHVwIHBhcmFtZXRlcnMgKGluIGNhc2Ugb2Ygbm8gaWFwcC1zdGF0ZSlcblx0XHRcdFx0aWYgKCFiSXNJYXBwU3RhdGUgJiYgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzICYmICFzSGFzaCkge1xuXHRcdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXS5pbmRleE9mKFwiY3JlYXRlXCIpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIG1vZGVcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLl9tYW5hZ2VDcmVhdGVTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIERlZXAgbGlua1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuX21hbmFnZURlZXBMaW5rU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHJvdXRpbmcgaW5pdGlhbGl6YXRpb25cIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGluaXRQcm9taXNlO1xuXHR9XG5cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzPzogYW55KSB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCB0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub1JvdXRlcik7XG5cdH1cblxuXHRfbWFuYWdlQ3JlYXRlU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSkge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldENyZWF0ZVN0YXJ0dXBIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIsIHRoaXMub01ldGFNb2RlbCkudGhlbihcblx0XHRcdChzTmV3SGFzaDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCkge1xuXHRcdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBhbnkpKHNOZXdIYXNoKTtcblx0XHRcdFx0XHR0aGlzLmJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRyZXR1cm4gQXBwU3RhcnR1cEhlbHBlci5nZXREZWVwTGlua1N0YXJ0dXBIYXNoKFxuXHRcdFx0KHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpIGFzIGFueSlbXCJzYXAudWk1XCJdLnJvdXRpbmcsXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMsXG5cdFx0XHR0aGlzLm9Nb2RlbFxuXHRcdCkudGhlbigob0RlZXBMaW5rOiBhbnkpID0+IHtcblx0XHRcdGxldCBzSGFzaDtcblx0XHRcdGlmIChvRGVlcExpbmsuY29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBzVGVjaG5pY2FsUGF0aCA9IG9EZWVwTGluay5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0KTtcblxuXHRcdFx0XHRpZiAoc1NlbWFudGljUGF0aCAhPT0gc1RlY2huaWNhbFBhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNUZWNobmljYWxQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzSGFzaCA9IHNTZW1hbnRpY1BhdGguc3Vic3RyaW5nKDEpOyAvLyBUbyByZW1vdmUgdGhlIGxlYWRpbmcgJy8nXG5cdFx0XHR9IGVsc2UgaWYgKG9EZWVwTGluay5oYXNoKSB7XG5cdFx0XHRcdHNIYXNoID0gb0RlZXBMaW5rLmhhc2g7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzSGFzaCkge1xuXHRcdFx0XHQvL1JlcGxhY2UgdGhlIGhhc2ggd2l0aCBuZXdseSBjcmVhdGVkIGhhc2hcblx0XHRcdFx0KHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIGFueSkoc0hhc2gpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0T3V0Ym91bmRzKCkge1xuXHRcdHJldHVybiB0aGlzLm91dGJvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBEcmFmdCByb290IGVudGl0eSBzZXQgb3IgdGhlIHN0aWNreS1lbmFibGVkIGVudGl0eSBzZXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByb290IEVudGl0eVNldFxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCkge1xuXHRcdHJldHVybiB0aGlzLnNDb250ZXh0UGF0aDtcblx0fVxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBSb3V0aW5nU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRjb25zdCBvUm91dGluZ1NlcnZpY2UgPSBuZXcgUm91dGluZ1NlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gb1JvdXRpbmdTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRpbmdTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
|
-
import messageHandling from "sap/fe/core/actions/messageHandling";
|
|
3
2
|
import AppComponent from "sap/fe/core/AppComponent";
|
|
4
|
-
import BusyLocker from "sap/fe/core/BusyLocker";
|
|
3
|
+
import BusyLocker from "sap/fe/core/controllerextensions/BusyLocker";
|
|
4
|
+
import messageHandling from "sap/fe/core/controllerextensions/messageHandler/messageHandling";
|
|
5
5
|
import Placeholder from "sap/fe/core/controllerextensions/Placeholder";
|
|
6
|
+
import RouterProxy from "sap/fe/core/controllerextensions/routing/RouterProxy";
|
|
6
7
|
import AppStartupHelper from "sap/fe/core/helpers/AppStartupHelper";
|
|
7
8
|
import { defineUI5Class, event } from "sap/fe/core/helpers/ClassSupport";
|
|
8
9
|
import EditState from "sap/fe/core/helpers/EditState";
|
|
9
10
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
10
11
|
import SemanticKeyHelper from "sap/fe/core/helpers/SemanticKeyHelper";
|
|
11
|
-
import RouterProxy from "sap/fe/core/RouterProxy";
|
|
12
12
|
import BindingParser from "sap/ui/base/BindingParser";
|
|
13
13
|
import Event from "sap/ui/base/Event";
|
|
14
14
|
import EventProvider from "sap/ui/base/EventProvider";
|
|
@@ -322,7 +322,7 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
322
322
|
|
|
323
323
|
navigateTo(oContext: any, sRouteName: any, mParameterMapping: any, bPreserveHistory: any) {
|
|
324
324
|
let sTargetURLPromise, bIsStickyMode: boolean;
|
|
325
|
-
if (oContext.getModel() && oContext.getModel().getMetaModel) {
|
|
325
|
+
if (oContext.getModel() && oContext.getModel().getMetaModel && oContext.getModel().getMetaModel()) {
|
|
326
326
|
bIsStickyMode = ModelHelper.isStickySessionSupported(oContext.getModel().getMetaModel());
|
|
327
327
|
}
|
|
328
328
|
if (!mParameterMapping) {
|
|
@@ -447,7 +447,7 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
447
447
|
| undefined,
|
|
448
448
|
oViewData: any | undefined,
|
|
449
449
|
oCurrentTargetInfo: any | undefined
|
|
450
|
-
): Promise<
|
|
450
|
+
): Promise<boolean> {
|
|
451
451
|
let sTargetRoute: string = "",
|
|
452
452
|
oRouteParametersPromise,
|
|
453
453
|
bIsStickyMode: boolean = false;
|
|
@@ -469,7 +469,8 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
469
469
|
// If the path is empty, we're supposed to navigate to the first page of the app
|
|
470
470
|
// Check if we need to exit from the app instead
|
|
471
471
|
if (sTargetPath.length === 0 && this.bExitOnNavigateBackToRoot) {
|
|
472
|
-
|
|
472
|
+
this.oRouterProxy.exitFromApp();
|
|
473
|
+
return Promise.resolve(true);
|
|
473
474
|
}
|
|
474
475
|
|
|
475
476
|
// If the context is deferred or async, we add (...) to the path
|
|
@@ -512,7 +513,7 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
512
513
|
|
|
513
514
|
this._fireRouteMatchEvents(mEventParameters);
|
|
514
515
|
|
|
515
|
-
return Promise.resolve();
|
|
516
|
+
return Promise.resolve(true);
|
|
516
517
|
}
|
|
517
518
|
}
|
|
518
519
|
|
|
@@ -547,10 +548,9 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
547
548
|
return oRouteParametersPromise.then((oRouteParameters: any) => {
|
|
548
549
|
oRouteParameters.bIsStickyMode = bIsStickyMode;
|
|
549
550
|
this.oRouter.navTo(sTargetRoute, oRouteParameters);
|
|
550
|
-
return Promise.resolve();
|
|
551
|
+
return Promise.resolve(true);
|
|
551
552
|
});
|
|
552
553
|
}
|
|
553
|
-
|
|
554
554
|
return this.oRouterProxy
|
|
555
555
|
.navToHash(sTargetPath, false, mParameters?.noPreservationCache, mParameters?.bForceFocus, !bIsStickyMode)
|
|
556
556
|
.then((bNavigated: any) => {
|
|
@@ -558,6 +558,7 @@ export class RoutingService extends Service<RoutingServiceSettings> {
|
|
|
558
558
|
// The navigation did not happen --> remove the navigation parameters from the queue as they shouldn't be used
|
|
559
559
|
this.navigationInfoQueue.pop();
|
|
560
560
|
}
|
|
561
|
+
return bNavigated;
|
|
561
562
|
});
|
|
562
563
|
}
|
|
563
564
|
|