@sapui5/sap.fe.core 1.136.1 → 1.138.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +76 -28
- package/src/sap/fe/core/ActionRuntime.ts +106 -30
- package/src/sap/fe/core/AppComponent.js +11 -1
- package/src/sap/fe/core/AppComponent.ts +10 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -2
- package/src/sap/fe/core/AppStateHandler.ts +8 -2
- package/src/sap/fe/core/CommonUtils.js +15 -3
- package/src/sap/fe/core/CommonUtils.ts +13 -2
- package/src/sap/fe/core/PageController.controller.js +10 -0
- package/src/sap/fe/core/PageController.controller.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +2 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -12
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -16
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
- package/src/sap/fe/core/controllerextensions/Paginator.js +20 -5
- package/src/sap/fe/core/controllerextensions/Paginator.ts +19 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +4 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +178 -125
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +222 -174
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +39 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +51 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +17 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +88 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +106 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +15 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +25 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +24 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +11 -8
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +13 -10
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +7 -3
- package/src/sap/fe/core/controls/DataWatcher.js +2 -2
- package/src/sap/fe/core/controls/DataWatcher.tsx +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +11 -6
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +13 -9
- package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +3 -2
- package/src/sap/fe/core/converters/MetaModelConverter.ts +12 -4
- package/src/sap/fe/core/converters/controls/Common/Action.js +42 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +42 -5
- package/src/sap/fe/core/converters/controls/Common/Chart.js +4 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +46 -13
- package/src/sap/fe/core/converters/controls/Common/Table.ts +50 -11
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +11 -10
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +13 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +2 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +9 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +8 -9
- package/src/sap/fe/core/helpers/FPMHelper.js +2 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +8 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
- package/src/sap/fe/core/library.js +33 -4
- package/src/sap/fe/core/library.ts +33 -2
- package/src/sap/fe/core/messagebundle.properties +18 -2
- package/src/sap/fe/core/messagebundle_ar.properties +3 -2
- package/src/sap/fe/core/messagebundle_bg.properties +2 -1
- package/src/sap/fe/core/messagebundle_ca.properties +2 -1
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
- package/src/sap/fe/core/messagebundle_cs.properties +4 -3
- package/src/sap/fe/core/messagebundle_cy.properties +2 -1
- package/src/sap/fe/core/messagebundle_da.properties +2 -1
- package/src/sap/fe/core/messagebundle_de.properties +8 -7
- package/src/sap/fe/core/messagebundle_el.properties +2 -1
- package/src/sap/fe/core/messagebundle_en.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -1
- package/src/sap/fe/core/messagebundle_es.properties +5 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
- package/src/sap/fe/core/messagebundle_et.properties +2 -1
- package/src/sap/fe/core/messagebundle_fi.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -1
- package/src/sap/fe/core/messagebundle_hr.properties +2 -1
- package/src/sap/fe/core/messagebundle_hu.properties +2 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -1
- package/src/sap/fe/core/messagebundle_it.properties +2 -1
- package/src/sap/fe/core/messagebundle_iw.properties +2 -1
- package/src/sap/fe/core/messagebundle_ja.properties +3 -2
- package/src/sap/fe/core/messagebundle_kk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ko.properties +2 -1
- package/src/sap/fe/core/messagebundle_lt.properties +2 -1
- package/src/sap/fe/core/messagebundle_lv.properties +2 -1
- package/src/sap/fe/core/messagebundle_mk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ms.properties +2 -1
- package/src/sap/fe/core/messagebundle_nl.properties +2 -1
- package/src/sap/fe/core/messagebundle_no.properties +3 -2
- package/src/sap/fe/core/messagebundle_pl.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
- package/src/sap/fe/core/messagebundle_ro.properties +2 -1
- package/src/sap/fe/core/messagebundle_ru.properties +2 -1
- package/src/sap/fe/core/messagebundle_sh.properties +2 -1
- package/src/sap/fe/core/messagebundle_sk.properties +2 -1
- package/src/sap/fe/core/messagebundle_sl.properties +2 -1
- package/src/sap/fe/core/messagebundle_sr.properties +2 -1
- package/src/sap/fe/core/messagebundle_sv.properties +2 -1
- package/src/sap/fe/core/messagebundle_th.properties +2 -1
- package/src/sap/fe/core/messagebundle_tr.properties +2 -1
- package/src/sap/fe/core/messagebundle_uk.properties +2 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +6 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +5 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
- package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +1 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +0 -126
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +0 -10
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +0 -2
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/library", "sap/ui/model/odata/v4/SubmitMode", "../../../helpers/ModelHelper", "../../../helpers/TypeGuards", "./ODataStrictHandling", "./actionHelper"], function (Log, deepClone, MetaModelConverter, FELibrary, SubmitMode, ModelHelper, TypeGuards, ODataStrictHandling, actionHelper) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/library", "sap/m/InstanceManager", "sap/ui/model/odata/v4/SubmitMode", "../../../helpers/ModelHelper", "../../../helpers/TypeGuards", "./ODataStrictHandling", "./actionHelper"], function (Log, deepClone, MetaModelConverter, FELibrary, InstanceManager, SubmitMode, ModelHelper, TypeGuards, ODataStrictHandling, actionHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -10,6 +10,37 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
10
10
|
var convertTypes = MetaModelConverter.convertTypes;
|
|
11
11
|
const InvocationGrouping = FELibrary.InvocationGrouping;
|
|
12
12
|
let ODataOperation = /*#__PURE__*/function () {
|
|
13
|
+
/**
|
|
14
|
+
* Creates an instance of ODataOperation.
|
|
15
|
+
* This instance is used to execute on the model an OData operation, which can be an action or an action import.
|
|
16
|
+
* @param operation The operation to be executed, can be an action or an import
|
|
17
|
+
* @param parameters The parameters for the operation
|
|
18
|
+
* @param parameters.appComponent The AppComponent instance
|
|
19
|
+
* @param parameters.contexts The contexts to be used for the operation
|
|
20
|
+
* @param parameters.model The ODataModel instance
|
|
21
|
+
* @param parameters.invocationGrouping The invocation grouping for the operation, can be 'ChangeSet' or 'Isolated'
|
|
22
|
+
* @param parameters.disableStrictHandling If true, the strict handling is disabled
|
|
23
|
+
* @param parameters.disableSideEffects If true, the side effects are disabled
|
|
24
|
+
* @param parameters.ghostContextBindingProtection If true, the ghost context binding protection is enabled
|
|
25
|
+
* @param parameters.label The label for the operation, used in the strict handling
|
|
26
|
+
* @param parameters.events The events for the operation
|
|
27
|
+
* @param parameters.events.onStrictValidation The event triggered when the strict handling is validated by the end user
|
|
28
|
+
* @param parameters.events.onStrictCancel The event triggered when the strict handling is canceled by the end user
|
|
29
|
+
* @param parameters.events.onStrictResponse The event triggered when the backend returns 412 messages (strict handling)
|
|
30
|
+
* @param parameters.events.onODataResponse The event triggered when all responses related to the Fiori element operations are received
|
|
31
|
+
* @param parameters.events.onODataSubmit The event triggered when the batch is submitted (request sent to the back end)
|
|
32
|
+
* @param parameters.events.onAfterODataInvoke The event triggered when the promise of invoke method of the oDataContextBinding is resolved
|
|
33
|
+
* @param parameters.events.onAfterODataOperationExecution The event triggered when first responses related to the Fiori element operations are received (before strict handling or final response if no 412 are received)
|
|
34
|
+
* @param parameters.events.onRequestSideEffects The event triggered when side effects are requested
|
|
35
|
+
* @param parameters.parametersValues The values for the parameters of the operation
|
|
36
|
+
* @param operationProperties The model properties for the operation
|
|
37
|
+
* @param operationProperties.enhance$select If true, the $select parameter is enhanced with additional properties (e.g. Messages)
|
|
38
|
+
* @param operationProperties.groupId The groupId for the operation, used for batch processing
|
|
39
|
+
* @param operationProperties.bindingParameters The binding parameters for the operation
|
|
40
|
+
* @param operationProperties.deferredSubmit If true, the operation is not submitted immediately and must be submitted by the developer
|
|
41
|
+
* @param operationProperties.ignoreETag If true, the ETag is ignored for the operation
|
|
42
|
+
* @param operationProperties.replaceWithRVC Whether this operation binding's parent context, which must belong to a list binding, is replaced with the operation's return value context (see below) and that list context is returned instead
|
|
43
|
+
*/
|
|
13
44
|
function ODataOperation(operation, parameters) {
|
|
14
45
|
let operationProperties = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
15
46
|
this.operationContextBindings = [];
|
|
@@ -24,9 +55,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
24
55
|
this.operation = operation;
|
|
25
56
|
this.parameters = parameters;
|
|
26
57
|
this.operationProperties = operationProperties;
|
|
27
|
-
|
|
58
|
+
const action = isAction(this.operation) ? this.operation : this.operation.action;
|
|
59
|
+
this.actionName = actionHelper.getActionName(action);
|
|
28
60
|
this.sideEffects = this.parameters.appComponent.getSideEffectsService().getODataActionSideEffects(this.actionName, this.parameters.contexts.length ? this.parameters.contexts[0] : undefined);
|
|
29
|
-
if (!
|
|
61
|
+
if (!action.isFunction && this.parameters.disableStrictHandling !== true) {
|
|
30
62
|
this.oDataStrictHandling = new ODataStrictHandling({
|
|
31
63
|
appComponent: this.parameters.appComponent,
|
|
32
64
|
contexts: this.parameters.contexts,
|
|
@@ -213,7 +245,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
213
245
|
const appComponent = this.parameters.appComponent;
|
|
214
246
|
const origin = operationContextBinding.requestSideEffects.bind(operationContextBinding);
|
|
215
247
|
operationContextBinding.requestSideEffects = async function () {
|
|
216
|
-
if
|
|
248
|
+
// We check if one of the pages or an open dialog uses the returned context.
|
|
249
|
+
// If not, side effects are not requested.
|
|
250
|
+
if (appComponent.getRootViewController().getInstancedViews().some(pageView => pageView.getBindingContext() === returnedContext) || InstanceManager.getOpenDialogs().some(dialog => dialog.getBindingContext() === returnedContext)) {
|
|
217
251
|
return origin(...arguments);
|
|
218
252
|
}
|
|
219
253
|
return Promise.resolve();
|
|
@@ -427,4 +461,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/converter
|
|
|
427
461
|
_exports = ODataOperation;
|
|
428
462
|
return _exports;
|
|
429
463
|
}, false);
|
|
430
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsImFjdGlvbkhlbHBlciIsImdldEFjdGlvbk5hbWUiLCJpc0FjdGlvbiIsImFjdGlvbiIsInNpZGVFZmZlY3RzIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyIsImNvbnRleHRzIiwiaXNGdW5jdGlvbiIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsIm9EYXRhU3RyaWN0SGFuZGxpbmciLCJPRGF0YVN0cmljdEhhbmRsaW5nIiwibGFiZWwiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJldmVudHMiLCJvblJlc3BvbnNlIiwib25TdHJpY3RSZXNwb25zZSIsIm9uVmFsaWRhdGlvbiIsIm9uU3RyaWN0VmFsaWRhdGlvbiIsImJpbmQiLCJvbkNhbmNlbCIsIm9uU3RyaWN0Q2FuY2VsIiwiZGVmaW5lT3BlcmF0aW9uUGFyYW1ldGVycyIsInNldEJpbmRpbmdQYXJhbWV0ZXJzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJkZWVwQ2xvbmUiLCJlbmhhbmNlJHNlbGVjdCIsImV4aXN0aW5nU2VsZWN0IiwiJHNlbGVjdCIsInNwbGl0IiwicmV0dXJuRW50aXR5VHlwZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWVzc2FnZXNQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXNzYWdlc1BhdGgiLCJnZXRQYXRoIiwiZW50aXR5U2V0IiwiY29udmVydFR5cGVzIiwiZW50aXR5U2V0cyIsImZpbHRlciIsImVudGl0eSIsImVudGl0eVR5cGUiLCJpc1NhbWVFbnRpdHkiLCJyZXR1cm5Db2xsZWN0aW9uIiwic291cmNlRW50aXR5VHlwZSIsImlzRHJhZnRSb290IiwiaW5jbHVkZXMiLCJwdXNoIiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsIm5hbWUiLCJzZWxlY3RQcm9wZXJ0aWVzIiwiam9pbiIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJjbGVhciIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiZGVzdHJveSIsImV4ZWN1dGUiLCJyZXN1bHQiLCJDaGFuZ2VTZXQiLCJleGVjdXRlQ2hhbmdlc2V0IiwiZXhlY3V0ZVNlcXVlbnRpYWxseSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZXhlY3V0ZUltcG9ydCIsImVycm9yIiwiTG9nIiwib25PRGF0YVJlc3BvbnNlIiwib3BlcmF0aW9uQ29udGV4dCIsImJpbmRDb250ZXh0Iiwic2V0UGFyYW1ldGVyc1ZhbHVlIiwiZ3JvdXBJZCIsInByb21pc2VzIiwiaW52b2tlIiwiZGVmYXVsdFN1Ym1pdCIsImFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24iLCJjdXJyZW50UHJvbWlzZVZhbHVlcyIsImFsbCIsIm1hcCIsImNvbnRleHQiLCJleGVjdXRlQm91bmRPcGVyYXRpb24iLCJtYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzIiwib25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uIiwicmVkdWNlIiwicHJvbWlzZSIsImlkIiwicmVzb2x2ZSIsImZpbmFsR3JvdXBJZCIsImdldFVwZGF0ZUdyb3VwSWQiLCJvcGVyYXRpb25Qcm9taXNlIiwiZW5oYW5jZVNpZGVFZmZlY3RzIiwicmV0dXJuZWRDb250ZXh0IiwiZ2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24iLCJvcmlnaW4iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRJbnN0YW5jZWRWaWV3cyIsInBhZ2VWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJmaXJzdEl0ZXJhdGlvblJlc29sdmUiLCJmaXJzdEl0ZXJhdGlvblJlamVjdCIsInN0cmljdEhhbmRsaW5nUHJvbWlzZSIsInJlamVjdCIsImlzQVBJTW9kZSIsImFkZCIsInNpZGVFZmZlY3RzQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvcGVyYXRpb25JbnZva2UiLCJpZ25vcmVFVGFnIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsInN1Ym1pdEJhdGNoIiwicmVwbGFjZVdpdGhSVkMiLCJyYWNlIiwib25BZnRlck9EYXRhSW52b2tlIiwiYm91bmRDb250ZXh0IiwicmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMiLCJpbmRleCIsImZhaWxlZENvbnRleHQiLCJzdWJtaXQiLCJzaXplIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwic3VibWl0T25Nb2RlbCIsIm9uT0RhdGFTdWJtaXQiLCJpc1N0cmljdENhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImRlbGV0ZSIsInN0YXJ0c1dpdGgiLCJzdWJtaXRNb2RlIiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm1vZGVscyIsInNldHRpbmdzIiwiZ3JvdXBQcm9wZXJ0aWVzIiwiU3VibWl0TW9kZSIsIkF1dG8iLCJEaXJlY3QiLCJmaXJzdFN1Ym1pdCIsImRlZmVycmVkU3VibWl0IiwiZGVmYXVsdFZhbHVlcyIsInBhcmFtZXRlcnNWYWx1ZXMiLCJwYXJhbWV0ZXIiLCJ0eXBlIiwic2V0UGFyYW1ldGVyIiwibG9jYWxQcm9taXNlIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZGlzYWJsZVNpZGVFZmZlY3RzIiwicGF0aEV4cHJlc3Npb25zIiwic29tZSIsImV4cCIsImNvbmNhdCIsInRyaWdnZXJBY3Rpb25zIiwiZXhlY3V0ZUFjdGlvbiIsIm9uUmVxdWVzdFNpZGVFZmZlY3RzIiwiaW5mbyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT0RhdGFPcGVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25JbXBvcnQsIEFjdGlvblBhcmFtZXRlciwgQWN0aW9uIGFzIEVkbUFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBTdWJtaXRNb2RlIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvU3VibWl0TW9kZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQmluZENvbnRleHRQYXJhbWV0ZXJzIH0gZnJvbSBcIi4uL2RyYWZ0XCI7XG5pbXBvcnQgT0RhdGFTdHJpY3RIYW5kbGluZyBmcm9tIFwiLi9PRGF0YVN0cmljdEhhbmRsaW5nXCI7XG5pbXBvcnQgYWN0aW9uSGVscGVyIGZyb20gXCIuL2FjdGlvbkhlbHBlclwiO1xuXG5jb25zdCBJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuXG5leHBvcnQgdHlwZSBPcGVyYXRpb25SZXN1bHQgPSB7XG5cdHJldHVybmVkQ29udGV4dD86IE9EYXRhVjRDb250ZXh0O1xuXHRib3VuZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT0RhdGFPcGVyYXRpb24ge1xuXHRwcml2YXRlIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nczogT0RhdGFDb250ZXh0QmluZGluZ1tdID0gW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBmaXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYXBpR3JvdXBJZHNUb1N1Ym1pdDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBzaWRlRWZmZWN0czogQWN0aW9uU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYmluZGluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSA9IFtdO1xuXG5cdHByaXZhdGUgbmV2ZXJTdWJtaXR0ZWQgPSB0cnVlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb0RhdGFTdHJpY3RIYW5kbGluZzogT0RhdGFTdHJpY3RIYW5kbGluZyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGZhaWxlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25Qcm9taXNlczogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+W10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb3BlcmF0aW9uOiBFZG1BY3Rpb24gfCBBY3Rpb25JbXBvcnQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJzOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0bW9kZWw6IE9EYXRhTW9kZWw7XG5cdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuO1xuXHRcdFx0ZGlzYWJsZVNpZGVFZmZlY3RzPzogYm9vbGVhbjtcblx0XHRcdGdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0ZXZlbnRzPzoge1xuXHRcdFx0XHRvblN0cmljdFZhbGlkYXRpb24/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHN0cmljdCBoYW5kbGluZyBpcyB2YWxpZGF0ZWQgYnkgdGhlIGVuZCB1c2VyXG5cdFx0XHRcdG9uU3RyaWN0Q2FuY2VsPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgY2FuY2VsZWQgYnkgdGhlIGVuZCB1c2VyXG5cdFx0XHRcdG9uU3RyaWN0UmVzcG9uc2U/OiAobWVzc2FnZXM0MTI6IE1lc3NhZ2VbXSkgPT4gdm9pZDsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gYmFja2VuZCByZXR1cm5zICA0MTIgbWVzc2FnZXMgKHN0cmljdCBoYW5kbGluZylcblx0XHRcdFx0b25PRGF0YVJlc3BvbnNlPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIGFsbCByZXNwb25zZXMgcmVsYXRlZCB0byB0aGUgRmlvcmkgZWxlbWVudCBvcGVyYXRpb25zIGFyZSByZWNlaXZlZFxuXHRcdFx0XHRvbk9EYXRhU3VibWl0PzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHRoZSBiYXRjaCBpcyBzdWJtaXR0ZWQgKHJlcXVlc3Qgc2VudCB0byB0aGUgYmFjayBlbmQpXG5cdFx0XHRcdG9uQWZ0ZXJPRGF0YUludm9rZT86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgcHJvbWlzZSBvZiBpbnZva2UgbWV0aG9kIG9mIHRoZSBvRGF0YUNvbnRleHRCaW5kaW5nIGlzIHJlc29sdmVkXG5cdFx0XHRcdG9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbj86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiBmaXJzdCByZXNwb25zZXMgcmVsYXRlZCB0byB0aGUgRmlvcmkgZWxlbWVudCBvcGVyYXRpb25zIGFyZSByZWNlaXZlZCAoYmVmb3JlIHN0cmljdCBoYW5kbGluZyBvciBmaW5hbCByZXNwb25zZSBpZiBubyA0MTIgYXJlIHJlY2VpdmVkKVxuXHRcdFx0XHRvblJlcXVlc3RTaWRlRWZmZWN0cz86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiBzaWRlRWZmZWN0cyBhcmUgdHJpZ2dlcmVkXG5cdFx0XHR9O1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvcGVyYXRpb25Qcm9wZXJ0aWVzOiB7XG5cdFx0XHRlbmhhbmNlJHNlbGVjdD86IGJvb2xlYW47XG5cdFx0XHRncm91cElkPzogc3RyaW5nO1xuXHRcdFx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdFx0XHRkZWZlcnJlZFN1Ym1pdD86IGJvb2xlYW47XG5cdFx0XHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcblx0XHRcdHJlcGxhY2VXaXRoUlZDPzogYm9vbGVhbjtcblx0XHR9ID0ge31cblx0KSB7XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUoaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pID8gdGhpcy5vcGVyYXRpb24gOiB0aGlzLm9wZXJhdGlvbi5hY3Rpb24pO1xuXG5cdFx0dGhpcy5zaWRlRWZmZWN0cyA9IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnRcblx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0LmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHModGhpcy5hY3Rpb25OYW1lLCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID8gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdIDogdW5kZWZpbmVkKTtcblxuXHRcdGlmICghKHRoaXMub3BlcmF0aW9uIGFzIEVkbUFjdGlvbikuaXNGdW5jdGlvbiAmJiB0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVN0cmljdEhhbmRsaW5nICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcgPSBuZXcgT0RhdGFTdHJpY3RIYW5kbGluZyh7XG5cdFx0XHRcdGFwcENvbXBvbmVudDogdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdFx0Y29udGV4dHM6IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cyxcblx0XHRcdFx0bGFiZWw6IHRoaXMucGFyYW1ldGVycy5sYWJlbCA/PyB0aGlzLmFjdGlvbk5hbWUsXG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogdGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0ZXZlbnRzOiB7XG5cdFx0XHRcdFx0b25SZXNwb25zZTogdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25TdHJpY3RSZXNwb25zZSxcblx0XHRcdFx0XHRvblZhbGlkYXRpb246IHRoaXMub25TdHJpY3RWYWxpZGF0aW9uLmJpbmQodGhpcyksXG5cdFx0XHRcdFx0b25DYW5jZWw6IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uU3RyaWN0Q2FuY2VsXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzLmRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMoKTtcblx0XHR0aGlzLnNldEJpbmRpbmdQYXJhbWV0ZXJzKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9ucy5cblx0ICovXG5cdHByaXZhdGUgc2V0QmluZGluZ1BhcmFtZXRlcnMoKTogdm9pZCB7XG5cdFx0dGhpcy5iaW5kaW5nUGFyYW1ldGVycyA9IGRlZXBDbG9uZSh0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuYmluZGluZ1BhcmFtZXRlcnMgPz8ge30pO1xuXG5cdFx0aWYgKGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSAmJiB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoICYmIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5lbmhhbmNlJHNlbGVjdCA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZXhpc3RpbmdTZWxlY3QgPSAodGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0IGFzIHN0cmluZyB8IHVuZGVmaW5lZCk/LnNwbGl0KFwiLFwiKSA/PyBbXTtcblx0XHRcdGNvbnN0IHJldHVybkVudGl0eVR5cGUgPSB0aGlzLm9wZXJhdGlvbi5yZXR1cm5FbnRpdHlUeXBlO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG1ldGFNb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSkhO1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCkuZW50aXR5U2V0cy5maWx0ZXIoKGVudGl0eSkgPT4gZW50aXR5LmVudGl0eVR5cGUgPT09IHJldHVybkVudGl0eVR5cGUpPy5bMF07XG5cdFx0XHRjb25zdCBpc1NhbWVFbnRpdHkgPVxuXHRcdFx0XHQhdGhpcy5vcGVyYXRpb24ucmV0dXJuQ29sbGVjdGlvbiAmJiAhIXJldHVybkVudGl0eVR5cGUgJiYgdGhpcy5vcGVyYXRpb24uc291cmNlRW50aXR5VHlwZSA9PT0gcmV0dXJuRW50aXR5VHlwZTtcblx0XHRcdGlmIChpc1NhbWVFbnRpdHkpIHtcblx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGVudGl0eVNldCkgJiYgIWV4aXN0aW5nU2VsZWN0LmluY2x1ZGVzKFwiSGFzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0XHRcdFx0dGhpcy5hZGRpdGlvbmFsU2VsZWN0UHJvcGVydGllcy5wdXNoKFwiSGFzQWN0aXZlRW50aXR5XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQvKiBUaGUgZm9ybWVyIGxvZ2ljIGNoZWNrZWQgaWYgdGhlIG1lc3NhZ2VzUGF0aCBpcyBjb250YWluZWQgaW50byB0aGUgU2lkZUVmZmVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRoZSBjaGVjayB3YXMgaW52YWxpZCAoYWx3YXlzIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgIFRvIGJlIGNvbXBsaWFudCB3aXRoIGZvcm1lciB2ZXJzaW9uIHdlIGRvbid0IGNoZWNrIHRoZSBTaWRlRWZmZWN0cy4uXG5cdFx0XHRcdFx0ICAgXG5cdFx0XHRcdFx0ICAgdGhpcy5zaWRlRWZmZWN0cyAmJlxuXHRcdFx0XHRcdCAgIG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHRcdCAgICh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucyA/PyBbXSkuc29tZSgoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIFttZXNzYWdlc1BhdGgsIFwiKlwiXS5pbmNsdWRlcyhleHApKSovXG5cdFx0XHRcdFx0bWVzc2FnZXNQYXRoICYmXG5cdFx0XHRcdFx0ISFyZXR1cm5FbnRpdHlUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBtZXNzYWdlc1BhdGgpICYmXG5cdFx0XHRcdFx0IWV4aXN0aW5nU2VsZWN0LmluY2x1ZGVzKG1lc3NhZ2VzUGF0aClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhpcy5hZGRpdGlvbmFsU2VsZWN0UHJvcGVydGllcy5wdXNoKG1lc3NhZ2VzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuYWRkaXRpb25hbFNlbGVjdFByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdFByb3BlcnRpZXMgPSB0aGlzLmFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzLmpvaW4oXCIsXCIpO1xuXHRcdFx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgPSB0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Rcblx0XHRcdFx0XHQ/IGAke3RoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHtzZWxlY3RQcm9wZXJ0aWVzfWBcblx0XHRcdFx0XHQ6IHNlbGVjdFByb3BlcnRpZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZGVmaW5lT3BlcmF0aW9uUGFyYW1ldGVycygpOiB2b2lkIHtcblx0XHRpZiAoIWlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSkge1xuXHRcdFx0dGhpcy5vcGVyYXRpb25QYXJhbWV0ZXJzID0gdGhpcy5vcGVyYXRpb24uYWN0aW9uLnBhcmFtZXRlcnM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vUmVtb3ZlIHRoZSBiaW5kaW5nIHBhcmFtZXRlcnMgZnJvbSB0aGUgcGFyYW1ldGVycyBsaXN0XG5cdFx0XHR0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMgPSBhY3Rpb25IZWxwZXIuZ2V0QWN0aW9uUGFyYW1ldGVycyh0aGlzLm9wZXJhdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNsZWFyKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3Qgb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcgb2YgdGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MpIHtcblx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0dGhpcy5hcGlHcm91cElkc1RvU3VibWl0LmNsZWFyKCk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MgPSBbXTtcblx0XHR0aGlzLmZhaWxlZENvbnRleHRzID0gW107XG5cdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBvcGVyYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25cblx0ICovXG5cdGFzeW5jIGV4ZWN1dGUoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHRsZXQgcmVzdWx0OiBQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W107XG5cdFx0dHJ5IHtcblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGF3YWl0ICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyB0aGlzLmV4ZWN1dGVDaGFuZ2VzZXQoKVxuXHRcdFx0XHRcdDogdGhpcy5leGVjdXRlU2VxdWVudGlhbGx5KCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFt0aGlzLmV4ZWN1dGVJbXBvcnQoKV0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgb3BlcmF0aW9uIFwiICsgdGhpcy5hY3Rpb25OYW1lLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uT0RhdGFSZXNwb25zZT8uKCk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGltcG9ydCBvcGVyYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUltcG9ydCgpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYC8ke3RoaXMuYWN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHRoaXMub3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzLnB1c2gob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZ3JvdXBJZCA9IHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkID8/IFwiYWN0aW9uSW1wb3J0XCI7XG5cdFx0Y29uc3QgcHJvbWlzZXMgPSBbdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZ3JvdXBJZCldO1xuXG5cdFx0dGhpcy5kZWZhdWx0U3VibWl0KGdyb3VwSWQpO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmZpcnN0SXRlcmF0aW9uT3BlcmF0aW9ucyk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0Y29uc3QgY3VycmVudFByb21pc2VWYWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIGN1cnJlbnRQcm9taXNlVmFsdWVzWzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBvcGVyYXRpb25zIG9uIG9uZSBjaGFuZ2VzZXQuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25zXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVDaGFuZ2VzZXQoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLm1hcChhc3luYyAoY29udGV4dCkgPT5cblx0XHRcdHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQsIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkKVxuXHRcdCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMub3BlcmF0aW9uUHJvbWlzZXMpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMub0RhdGFTdHJpY3RIYW5kbGluZz8ubWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscygpO1xuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbj8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgc2VxdWVudGlhbGx5LlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uc1xuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlU2VxdWVudGlhbGx5KCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8T3BlcmF0aW9uUmVzdWx0PltdPiB7XG5cdFx0Ly8gc2VyaWFsaXphdGlvbjogZXhlY3V0ZUJvdW5kT3BlcmF0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbnRyeSBvbmx5IGFmdGVyIHRoZSBwcm9taXNlIHJldHVybmVkIGZyb20gdGhlIG9uZSBiZWZvcmUgaGFzIGJlZW4gcmVzb2x2ZWRcblx0XHRhd2FpdCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMucmVkdWNlKGFzeW5jIChwcm9taXNlOiBQcm9taXNlPHZvaWQ+LCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0YXdhaXQgcHJvbWlzZTtcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMucHVzaCh0aGlzLmV4ZWN1dGVCb3VuZE9wZXJhdGlvbihjb250ZXh0LCB0aGlzLm9wZXJhdGlvblByb3BlcnRpZXMuZ3JvdXBJZCA/PyBgYXBpTW9kZSR7aWQgKyAxfWApKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmZpcnN0SXRlcmF0aW9uT3BlcmF0aW9ucyk7XG5cdFx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGJvdW5kIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGJvdW5kIGNvbnRleHRcblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBncm91cElkPzogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRjb25zdCBvcGVyYXRpb25Db250ZXh0ID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmJpbmRDb250ZXh0KGAke3RoaXMuYWN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQsIHRoaXMuYmluZGluZ1BhcmFtZXRlcnMpO1xuXHRcdHRoaXMub3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzLnB1c2gob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXHRcdHRoaXMuc2V0UGFyYW1ldGVyc1ZhbHVlKG9wZXJhdGlvbkNvbnRleHQpO1xuXHRcdGNvbnN0IGZpbmFsR3JvdXBJZCA9IGdyb3VwSWQgPz8gb3BlcmF0aW9uQ29udGV4dC5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uUHJvbWlzZSA9IHRoaXMuaW52b2tlKG9wZXJhdGlvbkNvbnRleHQsIGZpbmFsR3JvdXBJZCk7XG5cdFx0cHJvbWlzZXMucHVzaChvcGVyYXRpb25Qcm9taXNlKTtcblx0XHR0aGlzLmRlZmF1bHRTdWJtaXQoZmluYWxHcm91cElkKTtcblx0XHRQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuXHRcdHJldHVybiBvcGVyYXRpb25Qcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuaGFuY2VzIHRoZSBzaWRlIGVmZmVjdHMgb2YgdGhlIG9wZXJhdGlvblxuXHQgKlxuXHQgKiBXaGVuIGEgbmV3IGVudGl0eSBpcyBjcmVhdGVkIHVzaW5nIGEgRGF0YUZpZWxkRm9yQWN0aW9uLCBhIG5ld1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nIGlzIGNyZWF0ZWQgdG8gZXhlY3V0ZSB0aGUgYWN0aW9uLiBCeSBkZWZhdWx0LCB0aGlzXG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgcmVsYXRpdmUgdG8gdGhlIE9kYXRhTGlzdEJpbmRpbmcgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBCZWNhdXNlIG9mIHRoaXMgZGVwZW5kZW5jeSwgd2hlbiBhIFNpZGVFZmZlY3RzIGlzIGV4ZWN1dGVkIG9uIHRoZVxuXHQgKiBjb250ZXh0IGludG8gdGhlIE9kYXRhTGlzdEJpbmRpbmcgd2hlcmUgdGhlIG9EYXRhQ29udGV4dEJpbmRpbmcgd2FzIGJvdW5kLCB0aGlzIFNpZGVFZmZlY3RzIGlzIGFsc28gdHJpZ2dlcmVkIG9uIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gV2UgZG9uJ3QgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlXG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcuIEl0IG1lYW5zIGV2ZW4gaWYgdGhlIGRyYWZ0IHJlbGF0ZWQgdG8gdGhlIGFjdGlvblxuXHQgKiBpcyByZW1vdmVkLCB0aGUgb2RhdGFDb250ZXh0QmluZGluZyBpcyBzdGlsbCB0aGVyZSwgc28gaWYgYSBTaWRlRWZmZWN0c1xuXHQgKiBpcyBleGVjdXRlZCBvbiB0aGUgc291cmNlIHRhcmdldCBpbnRvIG9EYXRhQ29udGV4dEJpbmRpbmcsIGFuIGVycm9yIGZyb20gdGhlIGJhY2sgZW5kIHdpbGwgYmVcblx0ICogcmVjZWl2ZWQgYmVjYXVzZSB3ZSBhc2sgdG8gcmVmcmVzaCBhIHByb3BlcnR5IG9uIGFuIHVua25vd24gZW50aXR5LlxuXHQgKlxuXHQgKiBUaGUgU2lkZUVmZmVjdHMgYXJlIHJlcXVlc3RlZCBvbmx5IGlmIHRoZSBwYWdlIGlzIHN0aWxsIG9wZW4uXG5cdCAqIFRoaXMgYXZvaWRzIGdlbmVyYXRpbmcgaXNzdWVzIHdpdGggZ2hvc3Qgb0RhdGFDb250ZXh0QmluZGluZyBsaW5rZWQgdG8gZGVzdHJveWVkIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Db250ZXh0QmluZGluZyBUaGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSByZXR1cm5lZENvbnRleHQgVGhlIHJldHVybmVkIGNvbnRleHQgb2YgdGhpcyBvcGVyYXRpb25cblx0ICovXG5cdHByaXZhdGUgZW5oYW5jZVNpZGVFZmZlY3RzKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nOiBPRGF0YUNvbnRleHRCaW5kaW5nLCByZXR1cm5lZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKHJldHVybmVkQ29udGV4dCAmJiB0aGlzLnBhcmFtZXRlcnMuZ2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24gPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQ7XG5cdFx0XHRjb25zdCBvcmlnaW4gPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5yZXF1ZXN0U2lkZUVmZmVjdHMuYmluZChvcGVyYXRpb25Db250ZXh0QmluZGluZyk7XG5cdFx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0XHRcdC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKVxuXHRcdFx0XHRcdFx0LmdldEluc3RhbmNlZFZpZXdzKClcblx0XHRcdFx0XHRcdC5maW5kKChwYWdlVmlldzogVmlldykgPT4gcGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIG9wZXJhdGlvbiBvbiB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGludm9rZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRsZXQgcmV0dXJuZWRDb250ZXh0O1xuXHRcdGxldCBmaXJzdEl0ZXJhdGlvblJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZWplY3QhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx1bmtub3duPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0dGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMucHVzaChzdHJpY3RIYW5kbGluZ1Byb21pc2UpO1xuXHRcdGlmIChncm91cElkICYmIHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpKSB7XG5cdFx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuYWRkKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNDb250ZXh0ID1cblx0XHRcdFx0KG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkgPz8gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvcGVyYXRpb25JbnZva2UgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5pbnZva2UoXG5cdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnLFxuXHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcuYmluZChcblx0XHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW10pO1xuXHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLnJlcGxhY2VXaXRoUlZDXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNDb250ZXh0LCBncm91cElkLCBbb3BlcmF0aW9uSW52b2tlXSk7XG5cdFx0XHRhd2FpdCBQcm9taXNlLnJhY2UoW29wZXJhdGlvbkludm9rZSwgc3RyaWN0SGFuZGxpbmdQcm9taXNlXSk7XG5cblx0XHRcdHJldHVybmVkQ29udGV4dCA9IGF3YWl0IG9wZXJhdGlvbkludm9rZTtcblx0XHRcdHRoaXMuZW5oYW5jZVNpZGVFZmZlY3RzKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLCByZXR1cm5lZENvbnRleHQpO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVqZWN0KGVycm9yKTtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHR0aGlzLmZhaWxlZENvbnRleHRzLnB1c2goY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhSW52b2tlPy4ob3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsIGdyb3VwSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXR1cm5lZENvbnRleHQsXG5cdFx0XHRib3VuZENvbnRleHQ6IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgTWFuYWdlcyB0aGUgc3RyaWN0IGhhbmRsaW5nIHZhbGlkYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIG9uU3RyaWN0VmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFZhbGlkYXRpb24/LigpO1xuXHRcdHRoaXMucmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgVHJpZ2dlcnMgdGhlIGZhaWxlZCBvcGVyYXRpb25zIGluIGNhc2Ugb2Ygc3RyaWN0IGhhbmRsaW5nLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmV3IG9wZXJhdGlvbnMgYXJlIHJlc29sdmVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJldHJpZ2dlckZhaWxlZENvbnRleHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vUmV0cnkgdGhlIGFjdGlvbiBleGVjdXRpb24gaW4gY2FzZSBvZiBzdHJpY3QgaGFuZGxpbmcgYW5kIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmYWlsZWQgY29udGV4dCAoZ2l2ZSBpdCBhbm90aGVyIHRyeSB0byBzdWNjZWVkKVxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nICE9PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0Zm9yIChjb25zdCBmYWlsZWRDb250ZXh0IG9mIHRoaXMuZmFpbGVkQ29udGV4dHMpIHtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGZhaWxlZENvbnRleHQsIGBhcGlSZXRyaWdnZXIke2luZGV4ICsgMX1gKSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGJhdGNoIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5ldmVyU3VibWl0dGVkIHx8IHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5zaXplID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXBJZCBvZiBBcnJheS5mcm9tKHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC52YWx1ZXMoKSkpIHtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogIElzIHN0cmljdCBoYW5kbGluZyBjYW5jZWxlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcyBjYW5jZWxlZCwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqL1xuXHRwdWJsaWMgaXNTdHJpY3RDYW5jZWxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5pc0NhbmNlbGVkKCkgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggYXQgdGhlIG1vZGVsIGxldmVsIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIHN1Ym1pdE9uTW9kZWwoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5kZWxldGUoZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogSXMgdGhlIFN1Ym1pdE1vZGUgb2YgdGhlIGdyb3VwSWQgc2V0IHRvIEFQSS5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFN1Ym1pdE1vZGUgaXMgc2V0IHRvIEFQSSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzQVBJTW9kZShncm91cElkPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFncm91cElkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChncm91cElkLnN0YXJ0c1dpdGgoXCIkYXV0b1wiKSB8fCBncm91cElkLnN0YXJ0c1dpdGgoXCIkZGlyZWN0XCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRzaW5nbGVcIikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3VibWl0TW9kZSA9IChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik/Lm1vZGVsc1tcIlwiXT8uc2V0dGluZ3MgYXNcblx0XHRcdFx0fCB7IGdyb3VwUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHsgc3VibWl0OiBTdWJtaXRNb2RlIH0+IH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpPy5ncm91cFByb3BlcnRpZXM/Lltncm91cElkXT8uc3VibWl0O1xuXG5cdFx0aWYgKHN1Ym1pdE1vZGUgPT09IHVuZGVmaW5lZCB8fCBbU3VibWl0TW9kZS5BdXRvLCBTdWJtaXRNb2RlLkRpcmVjdF0uaW5jbHVkZXMoc3VibWl0TW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgc3VibWl0IG9mIHRoZSBvcGVyYXRpb24gaWYgdGhlIHN1Ym1pdE1vZGUgaXMgb24gQVBJIGFuZCBkZWZlcnJlZFN1Ym1pdCBpcyBub3Qgc2V0IHRvIHRydWVcblx0ICogVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbC5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIGRlZmF1bHRTdWJtaXQoZ3JvdXBJZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0U3VibWl0ID0gdGhpcy5uZXZlclN1Ym1pdHRlZDtcblx0XHRjb25zdCBpc0FQSU1vZGUgPSB0aGlzLmlzQVBJTW9kZShncm91cElkKTtcblx0XHRpZiAoIWlzQVBJTW9kZSkge1xuXHRcdFx0Ly8gVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbFxuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlICYmIGdyb3VwSWQpIHtcblx0XHRcdHRoaXMubmV2ZXJTdWJtaXR0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0aWYgKGZpcnN0U3VibWl0ICYmICF0aGlzLm5ldmVyU3VibWl0dGVkKSB7XG5cdFx0XHQvL1RyaWdnZXIgdGhlIGNhbGxiYWNrIG9ubHkgb25jZVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqICBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqL1xuXHRwcml2YXRlIHNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuc2V0UGFyYW1ldGVyKG5hbWUsIGRlZmF1bHRWYWx1ZXNbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSBncm91cElkICBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHBhcmFtIGxvY2FsUHJvbWlzZSBUaGUgcHJvbWlzZSBvZiB0aGUgaW52b2tlZCBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIHNpZGUgZWZmZWN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0cyhjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgZ3JvdXBJZDogc3RyaW5nLCBsb2NhbFByb21pc2U/OiBQcm9taXNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtZXNzYWdlc1BhdGggPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoXG5cdFx0XHQ/IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChtZXRhTW9kZWwsIHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGxldCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gbG9jYWxQcm9taXNlID8/IFtdO1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzICE9PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBwYXRoRXhwcmVzc2lvbnMgPSBbXG5cdFx0XHRcdC4uLih0aGlzLnNpZGVFZmZlY3RzPy5wYXRoRXhwcmVzc2lvbnMgPz8gW10pLFxuXHRcdFx0XHQuLi4odGhpcy5zaWRlRWZmZWN0cz8ucGF0aEV4cHJlc3Npb25zICYmXG5cdFx0XHRcdG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHR0aGlzLmFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKG1lc3NhZ2VzUGF0aCkgJiZcblx0XHRcdFx0dGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnMuc29tZSgoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIChleHAgPT09IG1lc3NhZ2VzUGF0aCB8fCBleHAgPT09IFwiKlwiKSlcblx0XHRcdFx0XHQ/IFtcIipcIl1cblx0XHRcdFx0XHQ6IFtdKVxuXHRcdFx0XHQvLyBGb3JtZXIgd29ya2Zsb3cgLT4gd2UgYWRkIFwiKlwiIHRvIHRoZSBTaWRlRWZmZWN0cyB0byBnZXQgYWxsIHByb3BlcnRpZXMgb25seSBpZiB0aGUgbWVzc2FnZXNQYXRoIGlzIGluIHRoZSBpbml0aWFsIFNpZGVFZmZlY3RzXG5cdFx0XHRcdC8vIGFuZCBtZXNzYWdlc1BhdGggaXMgYWRkZWQgaW4gdGhlICRzZWxlY3Qgb2YgdGhlIG9wZXJhdGlvblxuXHRcdFx0XTtcblxuXHRcdFx0aWYgKHRoaXMuc2lkZUVmZmVjdHMgfHwgcGF0aEV4cHJlc3Npb25zLmxlbmd0aCkge1xuXHRcdFx0XHRwcm9taXNlcyA9IHByb21pc2VzLmNvbmNhdChcblx0XHRcdFx0XHQodGhpcy5zaWRlRWZmZWN0cz8udHJpZ2dlckFjdGlvbnMgPz8gW10pLm1hcChhc3luYyAoYWN0aW9uKSA9PlxuXHRcdFx0XHRcdFx0c2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBjb250ZXh0LCBncm91cElkKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zLmxlbmd0aCA/IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMocGF0aEV4cHJlc3Npb25zLCBjb250ZXh0LCBncm91cElkKSA6IFtdXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzPy5wYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblJlcXVlc3RTaWRlRWZmZWN0cz8uKHRoaXMuc2lkZUVmZmVjdHMsIHRoaXMub3BlcmF0aW9uLCBwcm9taXNlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHMgZm9yIHRoZSBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7RUFtQkEsTUFBTUEsa0JBQWtCLEdBQUdDLFNBQVMsQ0FBQ0Qsa0JBQWtCO0VBQUMsSUFPbkNFLGNBQWM7SUF5QmxDLFNBQUFBLGVBQ2tCQyxTQUFtQyxFQUNuQ0MsVUFvQmhCLEVBU0E7TUFBQSxJQVJnQkMsbUJBT2hCLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztNQUFBLEtBdERDRyx3QkFBd0IsR0FBMEIsRUFBRTtNQUFBLEtBRTNDQyx3QkFBd0IsR0FBdUIsRUFBRTtNQUFBLEtBRWpEQyxtQkFBbUIsR0FBZ0IsSUFBSUMsR0FBRyxDQUFDLENBQUM7TUFBQSxLQU1yREMsaUJBQWlCLEdBQTRCLENBQUMsQ0FBQztNQUFBLEtBRS9DQyxtQkFBbUIsR0FBc0IsRUFBRTtNQUFBLEtBRTNDQyxjQUFjLEdBQUcsSUFBSTtNQUFBLEtBSXJCQyxjQUFjLEdBQXFCLEVBQUU7TUFBQSxLQUVyQ0MsaUJBQWlCLEdBQStCLEVBQUU7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
|
|
464
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzIiwiYWN0aW9uIiwiaXNBY3Rpb24iLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsInNpZGVFZmZlY3RzIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyIsImNvbnRleHRzIiwiaXNGdW5jdGlvbiIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsIm9EYXRhU3RyaWN0SGFuZGxpbmciLCJPRGF0YVN0cmljdEhhbmRsaW5nIiwibGFiZWwiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJldmVudHMiLCJvblJlc3BvbnNlIiwib25TdHJpY3RSZXNwb25zZSIsIm9uVmFsaWRhdGlvbiIsIm9uU3RyaWN0VmFsaWRhdGlvbiIsImJpbmQiLCJvbkNhbmNlbCIsIm9uU3RyaWN0Q2FuY2VsIiwiZGVmaW5lT3BlcmF0aW9uUGFyYW1ldGVycyIsInNldEJpbmRpbmdQYXJhbWV0ZXJzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJkZWVwQ2xvbmUiLCJlbmhhbmNlJHNlbGVjdCIsImV4aXN0aW5nU2VsZWN0IiwiJHNlbGVjdCIsInNwbGl0IiwicmV0dXJuRW50aXR5VHlwZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWVzc2FnZXNQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXNzYWdlc1BhdGgiLCJnZXRQYXRoIiwiZW50aXR5U2V0IiwiY29udmVydFR5cGVzIiwiZW50aXR5U2V0cyIsImZpbHRlciIsImVudGl0eSIsImVudGl0eVR5cGUiLCJpc1NhbWVFbnRpdHkiLCJyZXR1cm5Db2xsZWN0aW9uIiwic291cmNlRW50aXR5VHlwZSIsImlzRHJhZnRSb290IiwiaW5jbHVkZXMiLCJwdXNoIiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsIm5hbWUiLCJzZWxlY3RQcm9wZXJ0aWVzIiwiam9pbiIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJjbGVhciIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiZGVzdHJveSIsImV4ZWN1dGUiLCJyZXN1bHQiLCJDaGFuZ2VTZXQiLCJleGVjdXRlQ2hhbmdlc2V0IiwiZXhlY3V0ZVNlcXVlbnRpYWxseSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZXhlY3V0ZUltcG9ydCIsImVycm9yIiwiTG9nIiwib25PRGF0YVJlc3BvbnNlIiwib3BlcmF0aW9uQ29udGV4dCIsImJpbmRDb250ZXh0Iiwic2V0UGFyYW1ldGVyc1ZhbHVlIiwiZ3JvdXBJZCIsInByb21pc2VzIiwiaW52b2tlIiwiZGVmYXVsdFN1Ym1pdCIsImFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24iLCJjdXJyZW50UHJvbWlzZVZhbHVlcyIsImFsbCIsIm1hcCIsImNvbnRleHQiLCJleGVjdXRlQm91bmRPcGVyYXRpb24iLCJtYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzIiwib25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uIiwicmVkdWNlIiwicHJvbWlzZSIsImlkIiwicmVzb2x2ZSIsImZpbmFsR3JvdXBJZCIsImdldFVwZGF0ZUdyb3VwSWQiLCJvcGVyYXRpb25Qcm9taXNlIiwiZW5oYW5jZVNpZGVFZmZlY3RzIiwicmV0dXJuZWRDb250ZXh0IiwiZ2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24iLCJvcmlnaW4iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRJbnN0YW5jZWRWaWV3cyIsInNvbWUiLCJwYWdlVmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiSW5zdGFuY2VNYW5hZ2VyIiwiZ2V0T3BlbkRpYWxvZ3MiLCJkaWFsb2ciLCJmaXJzdEl0ZXJhdGlvblJlc29sdmUiLCJmaXJzdEl0ZXJhdGlvblJlamVjdCIsInN0cmljdEhhbmRsaW5nUHJvbWlzZSIsInJlamVjdCIsImlzQVBJTW9kZSIsImFkZCIsInNpZGVFZmZlY3RzQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvcGVyYXRpb25JbnZva2UiLCJpZ25vcmVFVGFnIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsInN1Ym1pdEJhdGNoIiwicmVwbGFjZVdpdGhSVkMiLCJyYWNlIiwib25BZnRlck9EYXRhSW52b2tlIiwiYm91bmRDb250ZXh0IiwicmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMiLCJpbmRleCIsImZhaWxlZENvbnRleHQiLCJzdWJtaXQiLCJzaXplIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwic3VibWl0T25Nb2RlbCIsIm9uT0RhdGFTdWJtaXQiLCJpc1N0cmljdENhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImRlbGV0ZSIsInN0YXJ0c1dpdGgiLCJzdWJtaXRNb2RlIiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm1vZGVscyIsInNldHRpbmdzIiwiZ3JvdXBQcm9wZXJ0aWVzIiwiU3VibWl0TW9kZSIsIkF1dG8iLCJEaXJlY3QiLCJmaXJzdFN1Ym1pdCIsImRlZmVycmVkU3VibWl0IiwiZGVmYXVsdFZhbHVlcyIsInBhcmFtZXRlcnNWYWx1ZXMiLCJwYXJhbWV0ZXIiLCJ0eXBlIiwic2V0UGFyYW1ldGVyIiwibG9jYWxQcm9taXNlIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZGlzYWJsZVNpZGVFZmZlY3RzIiwicGF0aEV4cHJlc3Npb25zIiwiZXhwIiwiY29uY2F0IiwidHJpZ2dlckFjdGlvbnMiLCJleGVjdXRlQWN0aW9uIiwib25SZXF1ZXN0U2lkZUVmZmVjdHMiLCJpbmZvIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPRGF0YU9wZXJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbkltcG9ydCwgQWN0aW9uUGFyYW1ldGVyLCBBY3Rpb24gYXMgRWRtQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU3VibWl0TW9kZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L1N1Ym1pdE1vZGVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblNpZGVFZmZlY3RzVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRDb250ZXh0UGFyYW1ldGVycyB9IGZyb20gXCIuLi9kcmFmdFwiO1xuaW1wb3J0IE9EYXRhU3RyaWN0SGFuZGxpbmcgZnJvbSBcIi4vT0RhdGFTdHJpY3RIYW5kbGluZ1wiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwiLi9hY3Rpb25IZWxwZXJcIjtcblxuY29uc3QgSW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uUmVzdWx0ID0ge1xuXHRyZXR1cm5lZENvbnRleHQ/OiBPRGF0YVY0Q29udGV4dDtcblx0Ym91bmRDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9EYXRhT3BlcmF0aW9uIHtcblx0cHJpdmF0ZSBvcGVyYXRpb25Db250ZXh0QmluZGluZ3M6IE9EYXRhQ29udGV4dEJpbmRpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFwaUdyb3VwSWRzVG9TdWJtaXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgc2lkZUVmZmVjdHM6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHN0cmluZztcblxuXHRwcml2YXRlIGJpbmRpbmdQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdHByaXZhdGUgb3BlcmF0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10gPSBbXTtcblxuXHRwcml2YXRlIG5ldmVyU3VibWl0dGVkID0gdHJ1ZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG9EYXRhU3RyaWN0SGFuZGxpbmc6IE9EYXRhU3RyaWN0SGFuZGxpbmcgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBmYWlsZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXG5cdHByaXZhdGUgb3BlcmF0aW9uUHJvbWlzZXM6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PltdID0gW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBhZGRpdGlvbmFsU2VsZWN0UHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBPRGF0YU9wZXJhdGlvbi5cblx0ICogVGhpcyBpbnN0YW5jZSBpcyB1c2VkIHRvIGV4ZWN1dGUgb24gdGhlIG1vZGVsIGFuIE9EYXRhIG9wZXJhdGlvbiwgd2hpY2ggY2FuIGJlIGFuIGFjdGlvbiBvciBhbiBhY3Rpb24gaW1wb3J0LlxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gdG8gYmUgZXhlY3V0ZWQsIGNhbiBiZSBhbiBhY3Rpb24gb3IgYW4gaW1wb3J0XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmNvbnRleHRzIFRoZSBjb250ZXh0cyB0byBiZSB1c2VkIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLm1vZGVsIFRoZSBPRGF0YU1vZGVsIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyBUaGUgaW52b2NhdGlvbiBncm91cGluZyBmb3IgdGhlIG9wZXJhdGlvbiwgY2FuIGJlICdDaGFuZ2VTZXQnIG9yICdJc29sYXRlZCdcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGlzYWJsZVN0cmljdEhhbmRsaW5nIElmIHRydWUsIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgZGlzYWJsZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzIElmIHRydWUsIHRoZSBzaWRlIGVmZmVjdHMgYXJlIGRpc2FibGVkXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uIElmIHRydWUsIHRoZSBnaG9zdCBjb250ZXh0IGJpbmRpbmcgcHJvdGVjdGlvbiBpcyBlbmFibGVkXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmxhYmVsIFRoZSBsYWJlbCBmb3IgdGhlIG9wZXJhdGlvbiwgdXNlZCBpbiB0aGUgc3RyaWN0IGhhbmRsaW5nXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cyBUaGUgZXZlbnRzIGZvciB0aGUgb3BlcmF0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vblN0cmljdFZhbGlkYXRpb24gVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgdmFsaWRhdGVkIGJ5IHRoZSBlbmQgdXNlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25TdHJpY3RDYW5jZWwgVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgY2FuY2VsZWQgYnkgdGhlIGVuZCB1c2VyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vblN0cmljdFJlc3BvbnNlIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgYmFja2VuZCByZXR1cm5zIDQxMiBtZXNzYWdlcyAoc3RyaWN0IGhhbmRsaW5nKVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25PRGF0YVJlc3BvbnNlIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiBhbGwgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZXZlbnRzLm9uT0RhdGFTdWJtaXQgVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBiYXRjaCBpcyBzdWJtaXR0ZWQgKHJlcXVlc3Qgc2VudCB0byB0aGUgYmFjayBlbmQpXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vbkFmdGVyT0RhdGFJbnZva2UgVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBwcm9taXNlIG9mIGludm9rZSBtZXRob2Qgb2YgdGhlIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgcmVzb2x2ZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZXZlbnRzLm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbiBUaGUgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gZmlyc3QgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWQgKGJlZm9yZSBzdHJpY3QgaGFuZGxpbmcgb3IgZmluYWwgcmVzcG9uc2UgaWYgbm8gNDEyIGFyZSByZWNlaXZlZClcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZXZlbnRzLm9uUmVxdWVzdFNpZGVFZmZlY3RzIFRoZSBldmVudCB0cmlnZ2VyZWQgd2hlbiBzaWRlIGVmZmVjdHMgYXJlIHJlcXVlc3RlZFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wYXJhbWV0ZXJzVmFsdWVzIFRoZSB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIG9wZXJhdGlvblByb3BlcnRpZXMgVGhlIG1vZGVsIHByb3BlcnRpZXMgZm9yIHRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIG9wZXJhdGlvblByb3BlcnRpZXMuZW5oYW5jZSRzZWxlY3QgSWYgdHJ1ZSwgdGhlICRzZWxlY3QgcGFyYW1ldGVyIGlzIGVuaGFuY2VkIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIChlLmcuIE1lc3NhZ2VzKVxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkIFRoZSBncm91cElkIGZvciB0aGUgb3BlcmF0aW9uLCB1c2VkIGZvciBiYXRjaCBwcm9jZXNzaW5nXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Qcm9wZXJ0aWVzLmJpbmRpbmdQYXJhbWV0ZXJzIFRoZSBiaW5kaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIG9wZXJhdGlvblByb3BlcnRpZXMuZGVmZXJyZWRTdWJtaXQgSWYgdHJ1ZSwgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VibWl0dGVkIGltbWVkaWF0ZWx5IGFuZCBtdXN0IGJlIHN1Ym1pdHRlZCBieSB0aGUgZGV2ZWxvcGVyXG5cdCAqIEBwYXJhbSBvcGVyYXRpb25Qcm9wZXJ0aWVzLmlnbm9yZUVUYWcgSWYgdHJ1ZSwgdGhlIEVUYWcgaXMgaWdub3JlZCBmb3IgdGhlIG9wZXJhdGlvblxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uUHJvcGVydGllcy5yZXBsYWNlV2l0aFJWQyBXaGV0aGVyIHRoaXMgb3BlcmF0aW9uIGJpbmRpbmcncyBwYXJlbnQgY29udGV4dCwgd2hpY2ggbXVzdCBiZWxvbmcgdG8gYSBsaXN0IGJpbmRpbmcsIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9wZXJhdGlvbidzIHJldHVybiB2YWx1ZSBjb250ZXh0IChzZWUgYmVsb3cpIGFuZCB0aGF0IGxpc3QgY29udGV4dCBpcyByZXR1cm5lZCBpbnN0ZWFkXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wZXJhdGlvbjogRWRtQWN0aW9uIHwgQWN0aW9uSW1wb3J0LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbjtcblx0XHRcdGRpc2FibGVTaWRlRWZmZWN0cz86IGJvb2xlYW47XG5cdFx0XHRnaG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25TdHJpY3RWYWxpZGF0aW9uPzogKCkgPT4gdm9pZDtcblx0XHRcdFx0b25TdHJpY3RDYW5jZWw/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvblN0cmljdFJlc3BvbnNlPzogKG1lc3NhZ2VzNDEyOiBNZXNzYWdlW10pID0+IHZvaWQ7XG5cdFx0XHRcdG9uT0RhdGFSZXNwb25zZT86ICgpID0+IHZvaWQ7XG5cdFx0XHRcdG9uT0RhdGFTdWJtaXQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvbkFmdGVyT0RhdGFJbnZva2U/OiAob2RhdGFDb250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKSA9PiBQcm9taXNlPHVua25vd24+O1xuXHRcdFx0XHRvbkFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24/OiAoKSA9PiBQcm9taXNlPHVua25vd24+O1xuXHRcdFx0XHRvblJlcXVlc3RTaWRlRWZmZWN0cz86IChcblx0XHRcdFx0XHRzaWRlRWZmZWN0czogQWN0aW9uU2lkZUVmZmVjdHNUeXBlLFxuXHRcdFx0XHRcdG9wZXJhdGlvbjogRWRtQWN0aW9uIHwgQWN0aW9uSW1wb3J0LFxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXVxuXHRcdFx0XHQpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvcGVyYXRpb25Qcm9wZXJ0aWVzOiB7XG5cdFx0XHRlbmhhbmNlJHNlbGVjdD86IGJvb2xlYW47XG5cdFx0XHRncm91cElkPzogc3RyaW5nO1xuXHRcdFx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdFx0XHRkZWZlcnJlZFN1Ym1pdD86IGJvb2xlYW47XG5cdFx0XHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcblx0XHRcdHJlcGxhY2VXaXRoUlZDPzogYm9vbGVhbjtcblx0XHR9ID0ge31cblx0KSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pID8gdGhpcy5vcGVyYXRpb24gOiB0aGlzLm9wZXJhdGlvbi5hY3Rpb247XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUoYWN0aW9uKTtcblxuXHRcdHRoaXMuc2lkZUVmZmVjdHMgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdC5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHRoaXMuYWN0aW9uTmFtZSwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoIWFjdGlvbi5pc0Z1bmN0aW9uICYmIHRoaXMucGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmcgIT09IHRydWUpIHtcblx0XHRcdHRoaXMub0RhdGFTdHJpY3RIYW5kbGluZyA9IG5ldyBPRGF0YVN0cmljdEhhbmRsaW5nKHtcblx0XHRcdFx0YXBwQ29tcG9uZW50OiB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0XHRjb250ZXh0czogdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLFxuXHRcdFx0XHRsYWJlbDogdGhpcy5wYXJhbWV0ZXJzLmxhYmVsID8/IHRoaXMuYWN0aW9uTmFtZSxcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiB0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nLFxuXHRcdFx0XHRldmVudHM6IHtcblx0XHRcdFx0XHRvblJlc3BvbnNlOiB0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFJlc3BvbnNlLFxuXHRcdFx0XHRcdG9uVmFsaWRhdGlvbjogdGhpcy5vblN0cmljdFZhbGlkYXRpb24uYmluZCh0aGlzKSxcblx0XHRcdFx0XHRvbkNhbmNlbDogdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25TdHJpY3RDYW5jZWxcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuZGVmaW5lT3BlcmF0aW9uUGFyYW1ldGVycygpO1xuXHRcdHRoaXMuc2V0QmluZGluZ1BhcmFtZXRlcnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBvcGVyYXRpb25zLlxuXHQgKi9cblx0cHJpdmF0ZSBzZXRCaW5kaW5nUGFyYW1ldGVycygpOiB2b2lkIHtcblx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzID0gZGVlcENsb25lKHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5iaW5kaW5nUGFyYW1ldGVycyA/PyB7fSk7XG5cblx0XHRpZiAoaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pICYmIHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggJiYgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmVuaGFuY2Ukc2VsZWN0ID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBleGlzdGluZ1NlbGVjdCA9ICh0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKT8uc3BsaXQoXCIsXCIpID8/IFtdO1xuXHRcdFx0Y29uc3QgcmV0dXJuRW50aXR5VHlwZSA9IHRoaXMub3BlcmF0aW9uLnJldHVybkVudGl0eVR5cGU7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXNzYWdlc1BhdGggPSBNb2RlbEhlbHBlci5nZXRNZXNzYWdlc1BhdGgobWV0YU1vZGVsLCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0uZ2V0UGF0aCgpKSE7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKS5lbnRpdHlTZXRzLmZpbHRlcigoZW50aXR5KSA9PiBlbnRpdHkuZW50aXR5VHlwZSA9PT0gcmV0dXJuRW50aXR5VHlwZSk/LlswXTtcblx0XHRcdGNvbnN0IGlzU2FtZUVudGl0eSA9XG5cdFx0XHRcdCF0aGlzLm9wZXJhdGlvbi5yZXR1cm5Db2xsZWN0aW9uICYmICEhcmV0dXJuRW50aXR5VHlwZSAmJiB0aGlzLm9wZXJhdGlvbi5zb3VyY2VFbnRpdHlUeXBlID09PSByZXR1cm5FbnRpdHlUeXBlO1xuXHRcdFx0aWYgKGlzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoZW50aXR5U2V0KSAmJiAhZXhpc3RpbmdTZWxlY3QuaW5jbHVkZXMoXCJIYXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRcdFx0XHR0aGlzLmFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzLnB1c2goXCJIYXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdC8qIFRoZSBmb3JtZXIgbG9naWMgY2hlY2tlZCBpZiB0aGUgbWVzc2FnZXNQYXRoIGlzIGNvbnRhaW5lZCBpbnRvIHRoZSBTaWRlRWZmZWN0c1xuICAgICAgICAgICAgICAgICAgICAgICBidXQgdGhlIGNoZWNrIHdhcyBpbnZhbGlkIChhbHdheXMgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgVG8gYmUgY29tcGxpYW50IHdpdGggZm9ybWVyIHZlcnNpb24gd2UgZG9uJ3QgY2hlY2sgdGhlIFNpZGVFZmZlY3RzLi5cblx0XHRcdFx0XHQgICBcblx0XHRcdFx0XHQgICB0aGlzLnNpZGVFZmZlY3RzICYmXG5cdFx0XHRcdFx0ICAgbWVzc2FnZXNQYXRoICYmXG5cdFx0XHRcdFx0ICAgKHRoaXMuc2lkZUVmZmVjdHMucGF0aEV4cHJlc3Npb25zID8/IFtdKS5zb21lKChleHApID0+IHR5cGVvZiBleHAgPT09IFwic3RyaW5nXCIgJiYgW21lc3NhZ2VzUGF0aCwgXCIqXCJdLmluY2x1ZGVzKGV4cCkpKi9cblx0XHRcdFx0XHRtZXNzYWdlc1BhdGggJiZcblx0XHRcdFx0XHQhIXJldHVybkVudGl0eVR5cGU/LmVudGl0eVByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IG1lc3NhZ2VzUGF0aCkgJiZcblx0XHRcdFx0XHQhZXhpc3RpbmdTZWxlY3QuaW5jbHVkZXMobWVzc2FnZXNQYXRoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0aGlzLmFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzLnB1c2gobWVzc2FnZXNQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5hZGRpdGlvbmFsU2VsZWN0UHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0UHJvcGVydGllcyA9IHRoaXMuYWRkaXRpb25hbFNlbGVjdFByb3BlcnRpZXMuam9pbihcIixcIik7XG5cdFx0XHRcdHRoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCA9IHRoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdFxuXHRcdFx0XHRcdD8gYCR7dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0fSwke3NlbGVjdFByb3BlcnRpZXN9YFxuXHRcdFx0XHRcdDogc2VsZWN0UHJvcGVydGllcztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBkZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdGlmICghaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pKSB7XG5cdFx0XHR0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMgPSB0aGlzLm9wZXJhdGlvbi5hY3Rpb24ucGFyYW1ldGVycztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9SZW1vdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBwYXJhbWV0ZXJzIGxpc3Rcblx0XHRcdHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycyA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25QYXJhbWV0ZXJzKHRoaXMub3BlcmF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBvcGVyYXRpb25Db250ZXh0QmluZGluZyBvZiB0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncykge1xuXHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuY2xlYXIoKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncyA9IFtdO1xuXHRcdHRoaXMuZmFpbGVkQ29udGV4dHMgPSBbXTtcblx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdGxldCByZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IHRoaXMuZXhlY3V0ZUNoYW5nZXNldCgpXG5cdFx0XHRcdFx0OiB0aGlzLmV4ZWN1dGVTZXF1ZW50aWFsbHkoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3RoaXMuZXhlY3V0ZUltcG9ydCgpXSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVJlc3BvbnNlPy4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgaW1wb3J0IG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlSW1wb3J0KCk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQ29udGV4dCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5iaW5kQ29udGV4dChgLyR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHR0aGlzLnNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBncm91cElkID0gdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQgPz8gXCJhY3Rpb25JbXBvcnRcIjtcblx0XHRjb25zdCBwcm9taXNlcyA9IFt0aGlzLmludm9rZShvcGVyYXRpb25Db250ZXh0LCBncm91cElkKV07XG5cblx0XHR0aGlzLmRlZmF1bHRTdWJtaXQoZ3JvdXBJZCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRjb25zdCBjdXJyZW50UHJvbWlzZVZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRyZXR1cm4gY3VycmVudFByb21pc2VWYWx1ZXNbMF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgb24gb25lIGNoYW5nZXNldC5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvbnNcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUNoYW5nZXNldCgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKGFzeW5jIChjb250ZXh0KSA9PlxuXHRcdFx0dGhpcy5leGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dCwgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQpXG5cdFx0KTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5tYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzKCk7XG5cdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgb3BlcmF0aW9ucyBzZXF1ZW50aWFsbHkuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25zXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVTZXF1ZW50aWFsbHkoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHQvLyBzZXJpYWxpemF0aW9uOiBleGVjdXRlQm91bmRPcGVyYXRpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQsIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkID8/IGBhcGlNb2RlJHtpZCArIDF9YCkpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHR9LCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLm9wZXJhdGlvblByb21pc2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgYm91bmQgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgYm91bmQgY29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYCR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCwgdGhpcy5iaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZmluYWxHcm91cElkID0gZ3JvdXBJZCA/PyBvcGVyYXRpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRjb25zdCBvcGVyYXRpb25Qcm9taXNlID0gdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZmluYWxHcm91cElkKTtcblx0XHRwcm9taXNlcy5wdXNoKG9wZXJhdGlvblByb21pc2UpO1xuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChmaW5hbEdyb3VwSWQpO1xuXHRcdFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIG9wZXJhdGlvblByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRW5oYW5jZXMgdGhlIHNpZGUgZWZmZWN0cyBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqXG5cdCAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgY3JlYXRlZCB0byBleGVjdXRlIHRoZSBhY3Rpb24uIEJ5IGRlZmF1bHQsIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEJlY2F1c2Ugb2YgdGhpcyBkZXBlbmRlbmN5LCB3aGVuIGEgU2lkZUVmZmVjdHMgaXMgZXhlY3V0ZWQgb24gdGhlXG5cdCAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gSXQgbWVhbnMgZXZlbiBpZiB0aGUgZHJhZnQgcmVsYXRlZCB0byB0aGUgYWN0aW9uXG5cdCAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG5cdCAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuXHQgKiByZWNlaXZlZCBiZWNhdXNlIHdlIGFzayB0byByZWZyZXNoIGEgcHJvcGVydHkgb24gYW4gdW5rbm93biBlbnRpdHkuXG5cdCAqXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cblx0ICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyBpc3N1ZXMgd2l0aCBnaG9zdCBvRGF0YUNvbnRleHRCaW5kaW5nIGxpbmtlZCB0byBkZXN0cm95ZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBlbmhhbmNlU2lkZUVmZmVjdHMob3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIHJldHVybmVkQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAocmV0dXJuZWRDb250ZXh0ICYmIHRoaXMucGFyYW1ldGVycy5naG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudDtcblx0XHRcdGNvbnN0IG9yaWdpbiA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nKTtcblx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgb25lIG9mIHRoZSBwYWdlcyBvciBhbiBvcGVuIGRpYWxvZyB1c2VzIHRoZSByZXR1cm5lZCBjb250ZXh0LlxuXHRcdFx0XHQvLyBJZiBub3QsIHNpZGUgZWZmZWN0cyBhcmUgbm90IHJlcXVlc3RlZC5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSByZXR1cm5lZENvbnRleHQpIHx8XG5cdFx0XHRcdFx0SW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuc29tZSgoZGlhbG9nKSA9PiBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIG9wZXJhdGlvbiBvbiB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGludm9rZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRsZXQgcmV0dXJuZWRDb250ZXh0O1xuXHRcdGxldCBmaXJzdEl0ZXJhdGlvblJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZWplY3QhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx1bmtub3duPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0dGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMucHVzaChzdHJpY3RIYW5kbGluZ1Byb21pc2UpO1xuXHRcdGlmIChncm91cElkICYmIHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpKSB7XG5cdFx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuYWRkKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNDb250ZXh0ID1cblx0XHRcdFx0KG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkgPz8gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvcGVyYXRpb25JbnZva2UgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5pbnZva2UoXG5cdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnLFxuXHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcuYmluZChcblx0XHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW10pO1xuXHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLnJlcGxhY2VXaXRoUlZDXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNDb250ZXh0LCBncm91cElkLCBbb3BlcmF0aW9uSW52b2tlXSk7XG5cdFx0XHRhd2FpdCBQcm9taXNlLnJhY2UoW29wZXJhdGlvbkludm9rZSwgc3RyaWN0SGFuZGxpbmdQcm9taXNlXSk7XG5cblx0XHRcdHJldHVybmVkQ29udGV4dCA9IGF3YWl0IG9wZXJhdGlvbkludm9rZTtcblx0XHRcdHRoaXMuZW5oYW5jZVNpZGVFZmZlY3RzKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLCByZXR1cm5lZENvbnRleHQpO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVqZWN0KGVycm9yKTtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHR0aGlzLmZhaWxlZENvbnRleHRzLnB1c2goY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhSW52b2tlPy4ob3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsIGdyb3VwSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXR1cm5lZENvbnRleHQsXG5cdFx0XHRib3VuZENvbnRleHQ6IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgTWFuYWdlcyB0aGUgc3RyaWN0IGhhbmRsaW5nIHZhbGlkYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIG9uU3RyaWN0VmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFZhbGlkYXRpb24/LigpO1xuXHRcdHRoaXMucmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgVHJpZ2dlcnMgdGhlIGZhaWxlZCBvcGVyYXRpb25zIGluIGNhc2Ugb2Ygc3RyaWN0IGhhbmRsaW5nLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmV3IG9wZXJhdGlvbnMgYXJlIHJlc29sdmVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJldHJpZ2dlckZhaWxlZENvbnRleHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vUmV0cnkgdGhlIGFjdGlvbiBleGVjdXRpb24gaW4gY2FzZSBvZiBzdHJpY3QgaGFuZGxpbmcgYW5kIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmYWlsZWQgY29udGV4dCAoZ2l2ZSBpdCBhbm90aGVyIHRyeSB0byBzdWNjZWVkKVxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nICE9PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0Zm9yIChjb25zdCBmYWlsZWRDb250ZXh0IG9mIHRoaXMuZmFpbGVkQ29udGV4dHMpIHtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGZhaWxlZENvbnRleHQsIGBhcGlSZXRyaWdnZXIke2luZGV4ICsgMX1gKSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGJhdGNoIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5ldmVyU3VibWl0dGVkIHx8IHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5zaXplID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXBJZCBvZiBBcnJheS5mcm9tKHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC52YWx1ZXMoKSkpIHtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogIElzIHN0cmljdCBoYW5kbGluZyBjYW5jZWxlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcyBjYW5jZWxlZCwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqL1xuXHRwdWJsaWMgaXNTdHJpY3RDYW5jZWxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5pc0NhbmNlbGVkKCkgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggYXQgdGhlIG1vZGVsIGxldmVsIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIHN1Ym1pdE9uTW9kZWwoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5kZWxldGUoZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogSXMgdGhlIFN1Ym1pdE1vZGUgb2YgdGhlIGdyb3VwSWQgc2V0IHRvIEFQSS5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFN1Ym1pdE1vZGUgaXMgc2V0IHRvIEFQSSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzQVBJTW9kZShncm91cElkPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFncm91cElkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChncm91cElkLnN0YXJ0c1dpdGgoXCIkYXV0b1wiKSB8fCBncm91cElkLnN0YXJ0c1dpdGgoXCIkZGlyZWN0XCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRzaW5nbGVcIikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3VibWl0TW9kZSA9IChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik/Lm1vZGVsc1tcIlwiXT8uc2V0dGluZ3MgYXNcblx0XHRcdFx0fCB7IGdyb3VwUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHsgc3VibWl0OiBTdWJtaXRNb2RlIH0+IH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpPy5ncm91cFByb3BlcnRpZXM/Lltncm91cElkXT8uc3VibWl0O1xuXG5cdFx0aWYgKHN1Ym1pdE1vZGUgPT09IHVuZGVmaW5lZCB8fCBbU3VibWl0TW9kZS5BdXRvLCBTdWJtaXRNb2RlLkRpcmVjdF0uaW5jbHVkZXMoc3VibWl0TW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgc3VibWl0IG9mIHRoZSBvcGVyYXRpb24gaWYgdGhlIHN1Ym1pdE1vZGUgaXMgb24gQVBJIGFuZCBkZWZlcnJlZFN1Ym1pdCBpcyBub3Qgc2V0IHRvIHRydWVcblx0ICogVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbC5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIGRlZmF1bHRTdWJtaXQoZ3JvdXBJZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0U3VibWl0ID0gdGhpcy5uZXZlclN1Ym1pdHRlZDtcblx0XHRjb25zdCBpc0FQSU1vZGUgPSB0aGlzLmlzQVBJTW9kZShncm91cElkKTtcblx0XHRpZiAoIWlzQVBJTW9kZSkge1xuXHRcdFx0Ly8gVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbFxuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlICYmIGdyb3VwSWQpIHtcblx0XHRcdHRoaXMubmV2ZXJTdWJtaXR0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0aWYgKGZpcnN0U3VibWl0ICYmICF0aGlzLm5ldmVyU3VibWl0dGVkKSB7XG5cdFx0XHQvL1RyaWdnZXIgdGhlIGNhbGxiYWNrIG9ubHkgb25jZVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqICBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqL1xuXHRwcml2YXRlIHNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuc2V0UGFyYW1ldGVyKG5hbWUsIGRlZmF1bHRWYWx1ZXNbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSBncm91cElkICBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHBhcmFtIGxvY2FsUHJvbWlzZSBUaGUgcHJvbWlzZSBvZiB0aGUgaW52b2tlZCBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIHNpZGUgZWZmZWN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0cyhjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgZ3JvdXBJZDogc3RyaW5nLCBsb2NhbFByb21pc2U/OiBQcm9taXNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtZXNzYWdlc1BhdGggPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoXG5cdFx0XHQ/IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChtZXRhTW9kZWwsIHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGxldCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gbG9jYWxQcm9taXNlID8/IFtdO1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzICE9PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBwYXRoRXhwcmVzc2lvbnMgPSBbXG5cdFx0XHRcdC4uLih0aGlzLnNpZGVFZmZlY3RzPy5wYXRoRXhwcmVzc2lvbnMgPz8gW10pLFxuXHRcdFx0XHQuLi4odGhpcy5zaWRlRWZmZWN0cz8ucGF0aEV4cHJlc3Npb25zICYmXG5cdFx0XHRcdG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHR0aGlzLmFkZGl0aW9uYWxTZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKG1lc3NhZ2VzUGF0aCkgJiZcblx0XHRcdFx0dGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnMuc29tZSgoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIChleHAgPT09IG1lc3NhZ2VzUGF0aCB8fCBleHAgPT09IFwiKlwiKSlcblx0XHRcdFx0XHQ/IFtcIipcIl1cblx0XHRcdFx0XHQ6IFtdKVxuXHRcdFx0XHQvLyBGb3JtZXIgd29ya2Zsb3cgLT4gd2UgYWRkIFwiKlwiIHRvIHRoZSBTaWRlRWZmZWN0cyB0byBnZXQgYWxsIHByb3BlcnRpZXMgb25seSBpZiB0aGUgbWVzc2FnZXNQYXRoIGlzIGluIHRoZSBpbml0aWFsIFNpZGVFZmZlY3RzXG5cdFx0XHRcdC8vIGFuZCBtZXNzYWdlc1BhdGggaXMgYWRkZWQgaW4gdGhlICRzZWxlY3Qgb2YgdGhlIG9wZXJhdGlvblxuXHRcdFx0XTtcblxuXHRcdFx0aWYgKHRoaXMuc2lkZUVmZmVjdHMgfHwgcGF0aEV4cHJlc3Npb25zLmxlbmd0aCkge1xuXHRcdFx0XHRwcm9taXNlcyA9IHByb21pc2VzLmNvbmNhdChcblx0XHRcdFx0XHQodGhpcy5zaWRlRWZmZWN0cz8udHJpZ2dlckFjdGlvbnMgPz8gW10pLm1hcChhc3luYyAoYWN0aW9uKSA9PlxuXHRcdFx0XHRcdFx0c2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBjb250ZXh0LCBncm91cElkKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zLmxlbmd0aCA/IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMocGF0aEV4cHJlc3Npb25zLCBjb250ZXh0LCBncm91cElkKSA6IFtdXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzPy5wYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblJlcXVlc3RTaWRlRWZmZWN0cz8uKHRoaXMuc2lkZUVmZmVjdHMsIHRoaXMub3BlcmF0aW9uLCBwcm9taXNlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHMgZm9yIHRoZSBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7RUFvQkEsTUFBTUEsa0JBQWtCLEdBQUdDLFNBQVMsQ0FBQ0Qsa0JBQWtCO0VBQUMsSUFPbkNFLGNBQWM7SUF5QmxDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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
|
|
@@ -4,6 +4,7 @@ import deepClone from "sap/base/util/deepClone";
|
|
|
4
4
|
import type AppComponent from "sap/fe/core/AppComponent";
|
|
5
5
|
import { convertTypes } from "sap/fe/core/converters/MetaModelConverter";
|
|
6
6
|
import FELibrary from "sap/fe/core/library";
|
|
7
|
+
import InstanceManager from "sap/m/InstanceManager";
|
|
7
8
|
import type Message from "sap/ui/core/message/Message";
|
|
8
9
|
import type View from "sap/ui/core/mvc/View";
|
|
9
10
|
import type { default as ODataV4Context } from "sap/ui/model/odata/v4/Context";
|
|
@@ -49,6 +50,37 @@ export default class ODataOperation {
|
|
|
49
50
|
|
|
50
51
|
private readonly additionalSelectProperties: string[] = [];
|
|
51
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Creates an instance of ODataOperation.
|
|
55
|
+
* This instance is used to execute on the model an OData operation, which can be an action or an action import.
|
|
56
|
+
* @param operation The operation to be executed, can be an action or an import
|
|
57
|
+
* @param parameters The parameters for the operation
|
|
58
|
+
* @param parameters.appComponent The AppComponent instance
|
|
59
|
+
* @param parameters.contexts The contexts to be used for the operation
|
|
60
|
+
* @param parameters.model The ODataModel instance
|
|
61
|
+
* @param parameters.invocationGrouping The invocation grouping for the operation, can be 'ChangeSet' or 'Isolated'
|
|
62
|
+
* @param parameters.disableStrictHandling If true, the strict handling is disabled
|
|
63
|
+
* @param parameters.disableSideEffects If true, the side effects are disabled
|
|
64
|
+
* @param parameters.ghostContextBindingProtection If true, the ghost context binding protection is enabled
|
|
65
|
+
* @param parameters.label The label for the operation, used in the strict handling
|
|
66
|
+
* @param parameters.events The events for the operation
|
|
67
|
+
* @param parameters.events.onStrictValidation The event triggered when the strict handling is validated by the end user
|
|
68
|
+
* @param parameters.events.onStrictCancel The event triggered when the strict handling is canceled by the end user
|
|
69
|
+
* @param parameters.events.onStrictResponse The event triggered when the backend returns 412 messages (strict handling)
|
|
70
|
+
* @param parameters.events.onODataResponse The event triggered when all responses related to the Fiori element operations are received
|
|
71
|
+
* @param parameters.events.onODataSubmit The event triggered when the batch is submitted (request sent to the back end)
|
|
72
|
+
* @param parameters.events.onAfterODataInvoke The event triggered when the promise of invoke method of the oDataContextBinding is resolved
|
|
73
|
+
* @param parameters.events.onAfterODataOperationExecution The event triggered when first responses related to the Fiori element operations are received (before strict handling or final response if no 412 are received)
|
|
74
|
+
* @param parameters.events.onRequestSideEffects The event triggered when side effects are requested
|
|
75
|
+
* @param parameters.parametersValues The values for the parameters of the operation
|
|
76
|
+
* @param operationProperties The model properties for the operation
|
|
77
|
+
* @param operationProperties.enhance$select If true, the $select parameter is enhanced with additional properties (e.g. Messages)
|
|
78
|
+
* @param operationProperties.groupId The groupId for the operation, used for batch processing
|
|
79
|
+
* @param operationProperties.bindingParameters The binding parameters for the operation
|
|
80
|
+
* @param operationProperties.deferredSubmit If true, the operation is not submitted immediately and must be submitted by the developer
|
|
81
|
+
* @param operationProperties.ignoreETag If true, the ETag is ignored for the operation
|
|
82
|
+
* @param operationProperties.replaceWithRVC Whether this operation binding's parent context, which must belong to a list binding, is replaced with the operation's return value context (see below) and that list context is returned instead
|
|
83
|
+
*/
|
|
52
84
|
constructor(
|
|
53
85
|
private readonly operation: EdmAction | ActionImport,
|
|
54
86
|
private readonly parameters: {
|
|
@@ -61,14 +93,18 @@ export default class ODataOperation {
|
|
|
61
93
|
ghostContextBindingProtection?: boolean;
|
|
62
94
|
label?: string;
|
|
63
95
|
events?: {
|
|
64
|
-
onStrictValidation?:
|
|
65
|
-
onStrictCancel?:
|
|
66
|
-
onStrictResponse?: (messages412: Message[]) => void;
|
|
67
|
-
onODataResponse?:
|
|
68
|
-
onODataSubmit?:
|
|
69
|
-
onAfterODataInvoke?:
|
|
70
|
-
onAfterODataOperationExecution?:
|
|
71
|
-
onRequestSideEffects?:
|
|
96
|
+
onStrictValidation?: () => void;
|
|
97
|
+
onStrictCancel?: () => void;
|
|
98
|
+
onStrictResponse?: (messages412: Message[]) => void;
|
|
99
|
+
onODataResponse?: () => void;
|
|
100
|
+
onODataSubmit?: () => void;
|
|
101
|
+
onAfterODataInvoke?: (odataContextBinding: ODataContextBinding, groupId: string) => Promise<unknown>;
|
|
102
|
+
onAfterODataOperationExecution?: () => Promise<unknown>;
|
|
103
|
+
onRequestSideEffects?: (
|
|
104
|
+
sideEffects: ActionSideEffectsType,
|
|
105
|
+
operation: EdmAction | ActionImport,
|
|
106
|
+
sideEffectsPromises: Promise<unknown>[]
|
|
107
|
+
) => void;
|
|
72
108
|
};
|
|
73
109
|
parametersValues?: Record<string, unknown>;
|
|
74
110
|
},
|
|
@@ -81,13 +117,14 @@ export default class ODataOperation {
|
|
|
81
117
|
replaceWithRVC?: boolean;
|
|
82
118
|
} = {}
|
|
83
119
|
) {
|
|
84
|
-
|
|
120
|
+
const action = isAction(this.operation) ? this.operation : this.operation.action;
|
|
121
|
+
this.actionName = actionHelper.getActionName(action);
|
|
85
122
|
|
|
86
123
|
this.sideEffects = this.parameters.appComponent
|
|
87
124
|
.getSideEffectsService()
|
|
88
125
|
.getODataActionSideEffects(this.actionName, this.parameters.contexts.length ? this.parameters.contexts[0] : undefined);
|
|
89
126
|
|
|
90
|
-
if (!
|
|
127
|
+
if (!action.isFunction && this.parameters.disableStrictHandling !== true) {
|
|
91
128
|
this.oDataStrictHandling = new ODataStrictHandling({
|
|
92
129
|
appComponent: this.parameters.appComponent,
|
|
93
130
|
contexts: this.parameters.contexts,
|
|
@@ -287,11 +324,14 @@ export default class ODataOperation {
|
|
|
287
324
|
const appComponent = this.parameters.appComponent;
|
|
288
325
|
const origin = operationContextBinding.requestSideEffects.bind(operationContextBinding);
|
|
289
326
|
operationContextBinding.requestSideEffects = async (...args: unknown[]): Promise<void> => {
|
|
327
|
+
// We check if one of the pages or an open dialog uses the returned context.
|
|
328
|
+
// If not, side effects are not requested.
|
|
290
329
|
if (
|
|
291
330
|
appComponent
|
|
292
331
|
.getRootViewController()
|
|
293
332
|
.getInstancedViews()
|
|
294
|
-
.
|
|
333
|
+
.some((pageView: View) => pageView.getBindingContext() === returnedContext) ||
|
|
334
|
+
InstanceManager.getOpenDialogs().some((dialog) => dialog.getBindingContext() === returnedContext)
|
|
295
335
|
) {
|
|
296
336
|
return origin(...args);
|
|
297
337
|
}
|
|
@@ -8,6 +8,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/R
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
const InvocationGrouping = FELibrary.InvocationGrouping;
|
|
10
10
|
let ODataStrictHandling = /*#__PURE__*/function () {
|
|
11
|
+
/**
|
|
12
|
+
* Creates an instance of ODataStrictHandling.
|
|
13
|
+
* This class is used to handle strict handling operations in OData V4.
|
|
14
|
+
* It manages the responses from the OData service when strict handling is enabled,
|
|
15
|
+
* and provides a way to display messages to the user when operations fail due to strict handling.
|
|
16
|
+
* @param parameters The parameters for the strict handling.
|
|
17
|
+
* @param parameters.appComponent The AppComponent instance.
|
|
18
|
+
* @param parameters.contexts An array of Context instances used for the operation.
|
|
19
|
+
* @param parameters.label A label for the operation, used in messages.
|
|
20
|
+
* @param parameters.invocationGrouping Optional parameter to specify the grouping of the invocation (e.g., ChangeSet).
|
|
21
|
+
* @param parameters.events The events for the strict handling
|
|
22
|
+
* @param parameters.events.onResponse The event triggered when the backend returns 412 messages.
|
|
23
|
+
* @param parameters.events.onCancel The event triggered when the strict handling is canceled by the end user.
|
|
24
|
+
* @param parameters.events.onValidation The event triggered when the strict handling is validated by the end user.
|
|
25
|
+
*/
|
|
11
26
|
function ODataStrictHandling(parameters) {
|
|
12
27
|
this.strictHandlingResolves = [];
|
|
13
28
|
this.strictHandlingWarningMessages = [];
|
|
@@ -199,4 +214,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/R
|
|
|
199
214
|
_exports = ODataStrictHandling;
|
|
200
215
|
return _exports;
|
|
201
216
|
}, false);
|
|
202
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YVN0cmljdEhhbmRsaW5nIiwicGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nUmVzb2x2ZXMiLCJzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyIsImNhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImNvbnRleHRzIiwibGVuZ3RoIiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0EiLCJ0YWJsZUFQSSIsIkVsZW1lbnRSZWdpc3RyeSIsImZpbHRlciIsImVsZW1lbnQiLCJnZXRDb250ZW50IiwiZ2V0Um93QmluZGluZyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUiLCJvbkNvbnRleHRWYWxpZGF0aW9uIiwibWVzc2FnZXM0MTIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJoYW5kbGluZ1Jlc29sdmUiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJtZXNzYWdlIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJMb2ciLCJ3YXJuaW5nIiwiYWRkaXRpb25hbFRleHQiLCJjb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZ2V0Q29udGV4dCIsImdldE9iamVjdCIsInNldEFkZGl0aW9uYWxUZXh0IiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uVmFsaWRhdGlvbiIsImlzVmFsaWRhdGVkIiwibWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscyIsIm1lc3NhZ2VIYW5kbGluZyIsImhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0IiwiZGlzcGxheU1lc3NhZ2VzIiwibWVzc2FnZU1vZGVsIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwibWVzc2FnZXNJbk1vZGVsIiwiZ2V0RGF0YSIsInNldERhdGEiLCJjb25jYXQiLCJlcnJvciIsIm1lc3NhZ2VzIiwiYWN0aW9uTmFtZSIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRMb2NhbGl6ZWRUZXh0IiwibGFiZWwiLCJhcHBDb21wb25lbnQiLCJnZXREZXNjcmlwdGlvbiIsImdldERlc2NyaXB0aW9uVXJsIiwiZGlzcGxheU1lc3NhZ2VPbk1lc3NhZ2VCb3giLCJkaXNwbGF5TWVzc2FnZXNPbkRpYWxvZyIsIm1lc3NhZ2VSZXNvbHZlIiwicHJvbWlzZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWVzc2FnZVRleHQiLCJnZXRNZXNzYWdlIiwiaWRlbnRpZmllclRleHQiLCJnZXRBZGRpdGlvbmFsVGV4dCIsImlzTXVsdGlDb250ZXh0NDEyIiwiZ2VuZXJpY0NoYW5nZXNldE1lc3NhZ2UiLCJnZXRUZXh0Iiwid2FybmluZ01lc3NhZ2VUZXh0IiwiY2FuY2VsQnV0dG9uVHh0IiwiZGlzcGxheWVkTWVzc2FnZSIsInRhYmxlVHlwZU5hbWUiLCJnZXRUYWJsZURlZmluaXRpb24iLCJoZWFkZXJJbmZvVHlwZU5hbWUiLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJ0b1N0cmluZyIsIk1lc3NhZ2VCb3giLCJ0aXRsZSIsImFjdGlvbnMiLCJlbXBoYXNpemVkQWN0aW9uIiwib25DbG9zZSIsImFjdGlvbiIsIm1lc3NhZ2VEaWFsb2dNb2RlbCIsIkpTT05Nb2RlbCIsIndhcm5pbmdNZXNzYWdlIiwid2FybmluZ0Rlc2MiLCJnZW5lcmljTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0eXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJwZXJzaXN0ZW50IiwiZGVzY3JpcHRpb24iLCJTdHJpY3REaWFsb2ciLCJtZXNzYWdlT2JqZWN0IiwicHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nIiwib25CZWdpbkJ1dHRvblByZXNzIiwiaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvbiIsImJpbmQiLCJvbkVuZEJ1dHRvblByZXNzIiwiaGFuZGxlTWVzc2FnZU9uQ2FuY2VsIiwib3BlbiIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImluZm9ybWF0aW9uIiwiY29udGVudFdpZHRoIiwib25DYW5jZWwiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9EYXRhU3RyaWN0SGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgRWxlbWVudFJlZ2lzdHJ5IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50UmVnaXN0cnlcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IFN0cmljdERpYWxvZyBmcm9tIFwiLi4vLi4vZGlhbG9nL09EYXRhU3RyaWN0RGlhbG9nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCIuLi8uLi9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmNvbnN0IEludm9jYXRpb25Hcm91cGluZyA9IEZFTGlicmFyeS5JbnZvY2F0aW9uR3JvdXBpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9EYXRhU3RyaWN0SGFuZGxpbmcge1xuXHRwcml2YXRlIHN0cmljdEhhbmRsaW5nUmVzb2x2ZXM6ICgodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQpW10gPSBbXTtcblxuXHRwcml2YXRlIHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuXHRwcml2YXRlIGNhbmNlbGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZWFkb25seSB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJzOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdGNvbnRleHRzOiBDb250ZXh0W107XG5cdFx0XHRsYWJlbDogc3RyaW5nO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0ZXZlbnRzPzoge1xuXHRcdFx0XHRvblJlc3BvbnNlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10pID0+IHZvaWQ7XG5cdFx0XHRcdG9uQ2FuY2VsPzogRnVuY3Rpb247XG5cdFx0XHRcdG9uVmFsaWRhdGlvbj86IEZ1bmN0aW9uO1xuXHRcdFx0fTtcblx0XHR9XG5cdCkge1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChiaW5kaW5nPy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJID0gRWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihcblx0XHRcdFx0XHQoZWxlbWVudCkgPT4gZWxlbWVudC5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSAmJiBlbGVtZW50LmdldENvbnRlbnQoKT8uZ2V0Um93QmluZGluZygpID09PSBiaW5kaW5nXG5cdFx0XHRcdClbMF0gYXMgVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyhcblx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyxcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZTogRnVuY3Rpb24gfCB1bmRlZmluZWQsXG5cdFx0b25Db250ZXh0VmFsaWRhdGlvbjogRnVuY3Rpb24sXG5cdFx0bWVzc2FnZXM0MTI6IE1lc3NhZ2VbXSA9IFtdXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGxldCBoYW5kbGluZ1Jlc29sdmUhOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG5cdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdQcm9taXNlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4oZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGhhbmRsaW5nUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzLnB1c2goaGFuZGxpbmdSZXNvbHZlKTtcblx0XHQvLyBGaW5kIGVycm9yIG1lc3NhZ2UgaW4gdGhlIDQxMiByZXNwb25zZSBhbmQgcmFpc2Ugd2FybmluZy5cblx0XHRpZiAobWVzc2FnZXM0MTIuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuRXJyb3IpLmxlbmd0aCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFwiV2FybmluZzogNDEyICgnUHJlLWNvbmRpdGlvbiBDaGVjayBGYWlsZWQgZHVlIHRvIHN0cmljdC1oYW5kbGluZycpIHJldHVybnMgbWVzc2FnZXMgb2YgdHlwZSBlcnJvciBidXQgb25seSB3YXJuaW5nIG1lc3NhZ2VzIGFyZSBhcHByb3ByaWF0ZSFcIlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0bGV0IGFkZGl0aW9uYWxUZXh0ID0gXCJcIjtcblx0XHQvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNvbnRleHQgd2UgbmVlZCB0aGUgaWRlbnRpZmllci4gVGhpcyB3b3VsZCBmaXggaWYgdGhlIGFjdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIHRhYmxlIGNoZXZyb25cblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMudGFibGVBUEk/LmdldElkZW50aWZpZXJDb2x1bW4oKTtcblx0XHRcdGlmICh0eXBlb2YgY29sdW1uID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGFkZGl0aW9uYWxUZXh0ID0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Q29udGV4dCgpPy5nZXRPYmplY3QoY29sdW1uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gc2V0IHR5cGUgYW5kIHN1YnRpdGxlIGZvciBhbGwgd2FybmluZyBtZXNzYWdlc1xuXHRcdGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlczQxMikge1xuXHRcdFx0bWVzc2FnZS5zZXRBZGRpdGlvbmFsVGV4dChhZGRpdGlvbmFsVGV4dCk7XG5cdFx0XHR0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cdFx0fVxuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUmVzcG9uc2U/LihtZXNzYWdlczQxMik7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU/LigpO1xuXHRcdHRoaXMub25Db250ZXh0VmFsaWRhdGlvbihzdHJpY3RIYW5kbGluZ1Byb21pc2UsIG9uQ29udGV4dFZhbGlkYXRpb24pO1xuXHRcdHJldHVybiBzdHJpY3RIYW5kbGluZ1Byb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIG9uQ29udGV4dFZhbGlkYXRpb24oc3RyaWN0SGFuZGxpbmdQcm9taXNlOiBQcm9taXNlPGJvb2xlYW4+LCBvblZhbGlkYXRpb246IEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNWYWxpZGF0ZWQgPSBhd2FpdCBzdHJpY3RIYW5kbGluZ1Byb21pc2U7XG5cdFx0aWYgKGlzVmFsaWRhdGVkKSB7XG5cdFx0XHRvblZhbGlkYXRpb24oKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgaXNDYW5jZWxlZCA9ICgpOiBib29sZWFuID0+IHtcblx0XHRyZXR1cm4gdGhpcy5jYW5jZWxlZDtcblx0fTtcblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgc3RyaWN0IGhhbmRsaW5nIGZhaWxzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgc3RyaWN0IGhhbmRsaW5nXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgbWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzLmxlbmd0aCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghbWVzc2FnZUhhbmRsaW5nLmhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkgfHxcblx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgIT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQpICYmXG5cdFx0XHRcdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcy5sZW5ndGhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5kaXNwbGF5TWVzc2FnZXMoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHJlc29sdmUgb2YgdGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpO1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VzSW5Nb2RlbCA9IG1lc3NhZ2VNb2RlbC5nZXREYXRhKCk7XG5cdFx0XHRcdFx0bWVzc2FnZU1vZGVsLnNldERhdGEobWVzc2FnZXNJbk1vZGVsLmNvbmNhdCh0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJSZS10cmlnZ2VyaW5nIG9mIHN0cmljdCBoYW5kbGluZyBvcGVyYXRpb25zIGZhaWxlZFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3BsYXlNZXNzYWdlcygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM7XG5cdFx0aWYgKCFtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0TG9jYWxpemVkVGV4dCh0aGlzLnBhcmFtZXRlcnMubGFiZWwsIHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHJldHVybiBtZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgIShtZXNzYWdlc1swXS5nZXREZXNjcmlwdGlvbigpPy5sZW5ndGggfHwgbWVzc2FnZXNbMF0uZ2V0RGVzY3JpcHRpb25VcmwoKT8ubGVuZ3RoKVxuXHRcdFx0PyB0aGlzLmRpc3BsYXlNZXNzYWdlT25NZXNzYWdlQm94KG1lc3NhZ2VzWzBdLCBhY3Rpb25OYW1lKVxuXHRcdFx0OiB0aGlzLmRpc3BsYXlNZXNzYWdlc09uRGlhbG9nKG1lc3NhZ2VzLCBhY3Rpb25OYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGxheU1lc3NhZ2VPbk1lc3NhZ2VCb3gobWVzc2FnZTogTWVzc2FnZSwgYWN0aW9uTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG1lc3NhZ2VSZXNvbHZlITogRnVuY3Rpb247XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRtZXNzYWdlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHRjb25zdCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UuZ2V0TWVzc2FnZSgpO1xuXHRcdGNvbnN0IGlkZW50aWZpZXJUZXh0ID0gbWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpO1xuXHRcdGNvbnN0IGlzTXVsdGlDb250ZXh0NDEyID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDE7XG5cdFx0Y29uc3QgZ2VuZXJpY0NoYW5nZXNldE1lc3NhZ2UgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX1NJTkdMRV9NRVNTQUdFX1RFWFRcIik7XG5cdFx0Y29uc3Qgd2FybmluZ01lc3NhZ2VUZXh0ID1cblx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX01FU1NBR0VfVEVYVFwiLCBbYWN0aW9uTmFtZV0pXG5cdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX1NLSVBfU0lOR0xFX01FU1NBR0VfVEVYVFwiKTtcblx0XHRsZXQgY2FuY2VsQnV0dG9uVHh0OiBzdHJpbmcgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMXCIpO1xuXHRcdGxldCBkaXNwbGF5ZWRNZXNzYWdlID0gXCJcIjtcblx0XHRpZiAoIWlzTXVsdGlDb250ZXh0NDEyKSB7XG5cdFx0XHRkaXNwbGF5ZWRNZXNzYWdlID0gYCR7bWVzc2FnZVRleHR9XFxuJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJQUk9DRUVEXCIpfWA7XG5cdFx0fSBlbHNlIGlmIChpZGVudGlmaWVyVGV4dCAhPT0gdW5kZWZpbmVkICYmIGlkZW50aWZpZXJUZXh0ICE9PSBcIlwiKSB7XG5cdFx0XHRjYW5jZWxCdXR0b25UeHQgPVxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyBjYW5jZWxCdXR0b25UeHRcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19TS0lQXCIpO1xuXHRcdFx0Y29uc3QgdGFibGVUeXBlTmFtZSA9IHRoaXMudGFibGVBUEk/LmdldFRhYmxlRGVmaW5pdGlvbigpLmhlYWRlckluZm9UeXBlTmFtZTtcblx0XHRcdGNvbnN0IGhlYWRlckluZm9UeXBlTmFtZSA9XG5cdFx0XHRcdHRoaXMudGFibGVBUEkgJiYgdHlwZW9mIHRhYmxlVHlwZU5hbWUgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHQ/IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcodGFibGVUeXBlTmFtZSwgdGhpcy50YWJsZUFQSSlcblx0XHRcdFx0XHQ6IHRhYmxlVHlwZU5hbWU7XG5cdFx0XHRpZiAoaGVhZGVySW5mb1R5cGVOYW1lKSB7XG5cdFx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHtoZWFkZXJJbmZvVHlwZU5hbWUudG9TdHJpbmcoKX0gJHtpZGVudGlmaWVyVGV4dH06ICR7bWVzc2FnZVRleHR9XFxuXFxuJHt3YXJuaW5nTWVzc2FnZVRleHR9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHtpZGVudGlmaWVyVGV4dH06ICR7bWVzc2FnZVRleHR9XFxuXFxuJHt3YXJuaW5nTWVzc2FnZVRleHR9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FuY2VsQnV0dG9uVHh0ID1cblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHRcdD8gY2FuY2VsQnV0dG9uVHh0XG5cdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfU0tJUFwiKTtcblx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHttZXNzYWdlVGV4dH1cXG5cXG4ke3dhcm5pbmdNZXNzYWdlVGV4dH1gO1xuXHRcdH1cblx0XHRpZiAoaXNNdWx0aUNvbnRleHQ0MTIgJiYgdGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldCkge1xuXHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke2dlbmVyaWNDaGFuZ2VzZXRNZXNzYWdlfVxcblxcbiR7ZGlzcGxheWVkTWVzc2FnZX1gO1xuXHRcdH1cblx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZGlzcGxheWVkTWVzc2FnZSwge1xuXHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIldBUk5JTkdcIiksXG5cdFx0XHRhY3Rpb25zOiBbYWN0aW9uTmFtZSwgY2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IGFjdGlvbk5hbWUsXG5cdFx0XHRvbkNsb3NlOiAoYWN0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0dGhpc1thY3Rpb24gPT09IGFjdGlvbk5hbWUgPyBcImhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb25cIiA6IFwiaGFuZGxlTWVzc2FnZU9uQ2FuY2VsXCJdKCk7XG5cdFx0XHRcdG1lc3NhZ2VSZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3BsYXlNZXNzYWdlc09uRGlhbG9nKG1lc3NhZ2VzOiBNZXNzYWdlW10sIGFjdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBtZXNzYWdlUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRcdGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0bWVzc2FnZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG1lc3NhZ2VEaWFsb2dNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IGlzTXVsdGlDb250ZXh0NDEyID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDE7XG5cdFx0bGV0IHdhcm5pbmdNZXNzYWdlID0gXCJcIjtcblx0XHRsZXQgd2FybmluZ0Rlc2MgPSBcIlwiO1xuXHRcdGxldCBjYW5jZWxCdXR0b25UeHQ6IHN0cmluZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIik7XG5cdFx0aWYgKGlzTXVsdGlDb250ZXh0NDEyKSB7XG5cdFx0XHRjYW5jZWxCdXR0b25UeHQgPVxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyBjYW5jZWxCdXR0b25UeHRcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19TS0lQXCIpO1xuXHRcdFx0d2FybmluZ01lc3NhZ2UgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19XQVJOSU5HXCJcblx0XHRcdFx0XHQ6IFwiQ19DT01NT05fRElBTE9HX1NLSVBfTUVTU0FHRVNfV0FSTklOR1wiXG5cdFx0XHQpO1xuXHRcdFx0d2FybmluZ0Rlc2MgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19URVhUXCJcblx0XHRcdFx0XHQ6IFwiQ19DT01NT05fRElBTE9HX1NLSVBfTUVTU0FHRVNfVEVYVFwiLFxuXHRcdFx0XHRbYWN0aW9uTmFtZV1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdhcm5pbmdNZXNzYWdlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9NRVNTQUdFU19HRU5FUklDX0FDVElPTl9XQVJOSU5HXCIsIFthY3Rpb25OYW1lXSk7XG5cdFx0fVxuXHRcdGNvbnN0IGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0bWVzc2FnZTogd2FybmluZ01lc3NhZ2UsXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdHRhcmdldDogdW5kZWZpbmVkLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGRlc2NyaXB0aW9uOiB3YXJuaW5nRGVzYy5sZW5ndGggPyB3YXJuaW5nRGVzYyA6IHVuZGVmaW5lZFxuXHRcdH0pO1xuXHRcdG1lc3NhZ2VzID0gW2dlbmVyaWNNZXNzYWdlXS5jb25jYXQobWVzc2FnZXMpO1xuXHRcdG1lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKG1lc3NhZ2VzKTtcblx0XHRuZXcgU3RyaWN0RGlhbG9nKHtcblx0XHRcdG1lc3NhZ2VPYmplY3Q6IG1lc3NhZ2VIYW5kbGluZy5wcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cobWVzc2FnZURpYWxvZ01vZGVsLCB0cnVlLCBpc011bHRpQ29udGV4dDQxMiksXG5cdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0bWVzc2FnZURpYWxvZ01vZGVsLFxuXHRcdFx0Y2FuY2VsQnV0dG9uVHh0LFxuXHRcdFx0b25CZWdpbkJ1dHRvblByZXNzOiB0aGlzLmhhbmRsZU1lc3NhZ2VPblZhbGlkYXRpb24uYmluZCh0aGlzKSxcblx0XHRcdG9uRW5kQnV0dG9uUHJlc3M6IHRoaXMuaGFuZGxlTWVzc2FnZU9uQ2FuY2VsLmJpbmQodGhpcyksXG5cdFx0XHRvbkNsb3NlOiBtZXNzYWdlUmVzb2x2ZVxuXHRcdH0pLm9wZW4oKTtcblx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlc29sdmUgb2YgdGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzKSB7XG5cdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdH1cblx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblZhbGlkYXRpb24/LigpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVNZXNzYWdlT25DYW5jZWwoKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHR0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzID0gW107XG5cdFx0dGhpcy5jYW5jZWxlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCByZXNvbHZlIG9mIHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcykge1xuXHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdSZXNvbHZlcyA9IFtdO1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fQ0hBTkdFU0VUX0NBTkNFTF9NRVNTQUdFU1wiKSwge1xuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMTUwcHhcIlxuXHRcdFx0fSBhcyBvYmplY3QpO1xuXHRc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
|
|
217
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YVN0cmljdEhhbmRsaW5nIiwicGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nUmVzb2x2ZXMiLCJzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyIsImNhbmNlbGVkIiwiaXNDYW5jZWxlZCIsImNvbnRleHRzIiwibGVuZ3RoIiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0EiLCJ0YWJsZUFQSSIsIkVsZW1lbnRSZWdpc3RyeSIsImZpbHRlciIsImVsZW1lbnQiLCJnZXRDb250ZW50IiwiZ2V0Um93QmluZGluZyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaGFuZGxlT2RhdGFTdHJpY3RIYW5kbGluZyIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUiLCJvbkNvbnRleHRWYWxpZGF0aW9uIiwibWVzc2FnZXM0MTIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJoYW5kbGluZ1Jlc29sdmUiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJtZXNzYWdlIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJMb2ciLCJ3YXJuaW5nIiwiYWRkaXRpb25hbFRleHQiLCJjb2x1bW4iLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwiZ2V0Q29udGV4dCIsImdldE9iamVjdCIsInNldEFkZGl0aW9uYWxUZXh0IiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uVmFsaWRhdGlvbiIsImlzVmFsaWRhdGVkIiwibWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscyIsIm1lc3NhZ2VIYW5kbGluZyIsImhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0IiwiZGlzcGxheU1lc3NhZ2VzIiwibWVzc2FnZU1vZGVsIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwibWVzc2FnZXNJbk1vZGVsIiwiZ2V0RGF0YSIsInNldERhdGEiLCJjb25jYXQiLCJlcnJvciIsIm1lc3NhZ2VzIiwiYWN0aW9uTmFtZSIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRMb2NhbGl6ZWRUZXh0IiwibGFiZWwiLCJhcHBDb21wb25lbnQiLCJnZXREZXNjcmlwdGlvbiIsImdldERlc2NyaXB0aW9uVXJsIiwiZGlzcGxheU1lc3NhZ2VPbk1lc3NhZ2VCb3giLCJkaXNwbGF5TWVzc2FnZXNPbkRpYWxvZyIsIm1lc3NhZ2VSZXNvbHZlIiwicHJvbWlzZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWVzc2FnZVRleHQiLCJnZXRNZXNzYWdlIiwiaWRlbnRpZmllclRleHQiLCJnZXRBZGRpdGlvbmFsVGV4dCIsImlzTXVsdGlDb250ZXh0NDEyIiwiZ2VuZXJpY0NoYW5nZXNldE1lc3NhZ2UiLCJnZXRUZXh0Iiwid2FybmluZ01lc3NhZ2VUZXh0IiwiY2FuY2VsQnV0dG9uVHh0IiwiZGlzcGxheWVkTWVzc2FnZSIsInRhYmxlVHlwZU5hbWUiLCJnZXRUYWJsZURlZmluaXRpb24iLCJoZWFkZXJJbmZvVHlwZU5hbWUiLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJ0b1N0cmluZyIsIk1lc3NhZ2VCb3giLCJ0aXRsZSIsImFjdGlvbnMiLCJlbXBoYXNpemVkQWN0aW9uIiwib25DbG9zZSIsImFjdGlvbiIsIm1lc3NhZ2VEaWFsb2dNb2RlbCIsIkpTT05Nb2RlbCIsIndhcm5pbmdNZXNzYWdlIiwid2FybmluZ0Rlc2MiLCJnZW5lcmljTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0eXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJwZXJzaXN0ZW50IiwiZGVzY3JpcHRpb24iLCJTdHJpY3REaWFsb2ciLCJtZXNzYWdlT2JqZWN0IiwicHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nIiwib25CZWdpbkJ1dHRvblByZXNzIiwiaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvbiIsImJpbmQiLCJvbkVuZEJ1dHRvblByZXNzIiwiaGFuZGxlTWVzc2FnZU9uQ2FuY2VsIiwib3BlbiIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImluZm9ybWF0aW9uIiwiY29udGVudFdpZHRoIiwib25DYW5jZWwiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9EYXRhU3RyaWN0SGFuZGxpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgRWxlbWVudFJlZ2lzdHJ5IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50UmVnaXN0cnlcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IFN0cmljdERpYWxvZyBmcm9tIFwiLi4vLi4vZGlhbG9nL09EYXRhU3RyaWN0RGlhbG9nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCIuLi8uLi9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmNvbnN0IEludm9jYXRpb25Hcm91cGluZyA9IEZFTGlicmFyeS5JbnZvY2F0aW9uR3JvdXBpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9EYXRhU3RyaWN0SGFuZGxpbmcge1xuXHRwcml2YXRlIHN0cmljdEhhbmRsaW5nUmVzb2x2ZXM6ICgodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQpW10gPSBbXTtcblxuXHRwcml2YXRlIHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuXHRwcml2YXRlIGNhbmNlbGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZWFkb25seSB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgT0RhdGFTdHJpY3RIYW5kbGluZy5cblx0ICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGhhbmRsZSBzdHJpY3QgaGFuZGxpbmcgb3BlcmF0aW9ucyBpbiBPRGF0YSBWNC5cblx0ICogSXQgbWFuYWdlcyB0aGUgcmVzcG9uc2VzIGZyb20gdGhlIE9EYXRhIHNlcnZpY2Ugd2hlbiBzdHJpY3QgaGFuZGxpbmcgaXMgZW5hYmxlZCxcblx0ICogYW5kIHByb3ZpZGVzIGEgd2F5IHRvIGRpc3BsYXkgbWVzc2FnZXMgdG8gdGhlIHVzZXIgd2hlbiBvcGVyYXRpb25zIGZhaWwgZHVlIHRvIHN0cmljdCBoYW5kbGluZy5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBzdHJpY3QgaGFuZGxpbmcuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50IGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5jb250ZXh0cyBBbiBhcnJheSBvZiBDb250ZXh0IGluc3RhbmNlcyB1c2VkIGZvciB0aGUgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5sYWJlbCBBIGxhYmVsIGZvciB0aGUgb3BlcmF0aW9uLCB1c2VkIGluIG1lc3NhZ2VzLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGdyb3VwaW5nIG9mIHRoZSBpbnZvY2F0aW9uIChlLmcuLCBDaGFuZ2VTZXQpLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMgVGhlIGV2ZW50cyBmb3IgdGhlIHN0cmljdCBoYW5kbGluZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5ldmVudHMub25SZXNwb25zZSBUaGUgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIGJhY2tlbmQgcmV0dXJucyA0MTIgbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vbkNhbmNlbCBUaGUgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHN0cmljdCBoYW5kbGluZyBpcyBjYW5jZWxlZCBieSB0aGUgZW5kIHVzZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmV2ZW50cy5vblZhbGlkYXRpb24gVGhlIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgdmFsaWRhdGVkIGJ5IHRoZSBlbmQgdXNlci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogQ29udGV4dFtdO1xuXHRcdFx0bGFiZWw6IHN0cmluZztcblx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25SZXNwb25zZT86IChtZXNzYWdlczogTWVzc2FnZVtdKSA9PiB2b2lkO1xuXHRcdFx0XHRvbkNhbmNlbD86ICgpID0+IHZvaWQ7XG5cdFx0XHRcdG9uVmFsaWRhdGlvbj86ICgpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdH1cblx0KSB7XG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0uZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKGJpbmRpbmc/LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkgPSBFbGVtZW50UmVnaXN0cnkuZmlsdGVyKFxuXHRcdFx0XHRcdChlbGVtZW50KSA9PiBlbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpICYmIGVsZW1lbnQuZ2V0Q29udGVudCgpPy5nZXRSb3dCaW5kaW5nKCkgPT09IGJpbmRpbmdcblx0XHRcdFx0KVswXSBhcyBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBoYW5kbGVPZGF0YVN0cmljdEhhbmRsaW5nKFxuXHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nOiBPRGF0YUNvbnRleHRCaW5kaW5nLFxuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBGdW5jdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvbkNvbnRleHRWYWxpZGF0aW9uOiBGdW5jdGlvbixcblx0XHRtZXNzYWdlczQxMjogTWVzc2FnZVtdID0gW11cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bGV0IGhhbmRsaW5nUmVzb2x2ZSE6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTxib29sZWFuPihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0aGFuZGxpbmdSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHR0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMucHVzaChoYW5kbGluZ1Jlc29sdmUpO1xuXHRcdC8vIEZpbmQgZXJyb3IgbWVzc2FnZSBpbiB0aGUgNDEyIHJlc3BvbnNlIGFuZCByYWlzZSB3YXJuaW5nLlxuXHRcdGlmIChtZXNzYWdlczQxMi5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5FcnJvcikubGVuZ3RoKSB7XG5cdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XCJXYXJuaW5nOiA0MTIgKCdQcmUtY29uZGl0aW9uIENoZWNrIEZhaWxlZCBkdWUgdG8gc3RyaWN0LWhhbmRsaW5nJykgcmV0dXJucyBtZXNzYWdlcyBvZiB0eXBlIGVycm9yIGJ1dCBvbmx5IHdhcm5pbmcgbWVzc2FnZXMgYXJlIGFwcHJvcHJpYXRlIVwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRsZXQgYWRkaXRpb25hbFRleHQgPSBcIlwiO1xuXHRcdC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY29udGV4dCB3ZSBuZWVkIHRoZSBpZGVudGlmaWVyLiBUaGlzIHdvdWxkIGZpeCBpZiB0aGUgYWN0aW9uIGlzIHRyaWdnZXJlZCB2aWEgdGFibGUgY2hldnJvblxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy50YWJsZUFQST8uZ2V0SWRlbnRpZmllckNvbHVtbigpO1xuXHRcdFx0aWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0YWRkaXRpb25hbFRleHQgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCk/LmdldE9iamVjdChjb2x1bW4pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBzZXQgdHlwZSBhbmQgc3VidGl0bGUgZm9yIGFsbCB3YXJuaW5nIG1lc3NhZ2VzXG5cdFx0Zm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzNDEyKSB7XG5cdFx0XHRtZXNzYWdlLnNldEFkZGl0aW9uYWxUZXh0KGFkZGl0aW9uYWxUZXh0KTtcblx0XHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25SZXNwb25zZT8uKG1lc3NhZ2VzNDEyKTtcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZT8uKCk7XG5cdFx0dGhpcy5vbkNvbnRleHRWYWxpZGF0aW9uKHN0cmljdEhhbmRsaW5nUHJvbWlzZSwgb25Db250ZXh0VmFsaWRhdGlvbik7XG5cdFx0cmV0dXJuIHN0cmljdEhhbmRsaW5nUHJvbWlzZTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgb25Db250ZXh0VmFsaWRhdGlvbihzdHJpY3RIYW5kbGluZ1Byb21pc2U6IFByb21pc2U8Ym9vbGVhbj4sIG9uVmFsaWRhdGlvbjogRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpc1ZhbGlkYXRlZCA9IGF3YWl0IHN0cmljdEhhbmRsaW5nUHJvbWlzZTtcblx0XHRpZiAoaXNWYWxpZGF0ZWQpIHtcblx0XHRcdG9uVmFsaWRhdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBpc0NhbmNlbGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiB0aGlzLmNhbmNlbGVkO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBzdHJpY3QgaGFuZGxpbmcgZmFpbHMuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBzdHJpY3QgaGFuZGxpbmdcblx0ICovXG5cdHB1YmxpYyBhc3luYyBtYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMubGVuZ3RoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFtZXNzYWdlSGFuZGxpbmcuaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKSB8fFxuXHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyAhPT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldCkgJiZcblx0XHRcdFx0XHR0aGlzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmRpc3BsYXlNZXNzYWdlcygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgcmVzb2x2ZSBvZiB0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlTW9kZWwgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCk7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gbWVzc2FnZU1vZGVsLmdldERhdGEoKTtcblx0XHRcdFx0XHRtZXNzYWdlTW9kZWwuc2V0RGF0YShtZXNzYWdlc0luTW9kZWwuY29uY2F0KHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdExvZy5lcnJvcihcIlJlLXRyaWdnZXJpbmcgb2Ygc3RyaWN0IGhhbmRsaW5nIG9wZXJhdGlvbnMgZmFpbGVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGxheU1lc3NhZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcztcblx0XHRpZiAoIW1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBhY3Rpb25OYW1lID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRMb2NhbGl6ZWRUZXh0KHRoaXMucGFyYW1ldGVycy5sYWJlbCwgdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCk7XG5cdFx0cmV0dXJuIG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiAhKG1lc3NhZ2VzWzBdLmdldERlc2NyaXB0aW9uKCk/Lmxlbmd0aCB8fCBtZXNzYWdlc1swXS5nZXREZXNjcmlwdGlvblVybCgpPy5sZW5ndGgpXG5cdFx0XHQ/IHRoaXMuZGlzcGxheU1lc3NhZ2VPbk1lc3NhZ2VCb3gobWVzc2FnZXNbMF0sIGFjdGlvbk5hbWUpXG5cdFx0XHQ6IHRoaXMuZGlzcGxheU1lc3NhZ2VzT25EaWFsb2cobWVzc2FnZXMsIGFjdGlvbk5hbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwbGF5TWVzc2FnZU9uTWVzc2FnZUJveChtZXNzYWdlOiBNZXNzYWdlLCBhY3Rpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgbWVzc2FnZVJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdG1lc3NhZ2VSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID0gbWVzc2FnZS5nZXRNZXNzYWdlKCk7XG5cdFx0Y29uc3QgaWRlbnRpZmllclRleHQgPSBtZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCk7XG5cdFx0Y29uc3QgaXNNdWx0aUNvbnRleHQ0MTIgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMTtcblx0XHRjb25zdCBnZW5lcmljQ2hhbmdlc2V0TWVzc2FnZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX01FU1NBR0VfVEVYVFwiKTtcblx0XHRjb25zdCB3YXJuaW5nTWVzc2FnZVRleHQgPVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHQ/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfTUVTU0FHRV9URVhUXCIsIFthY3Rpb25OYW1lXSlcblx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfU0tJUF9TSU5HTEVfTUVTU0FHRV9URVhUXCIpO1xuXHRcdGxldCBjYW5jZWxCdXR0b25UeHQ6IHN0cmluZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIik7XG5cdFx0bGV0IGRpc3BsYXllZE1lc3NhZ2UgPSBcIlwiO1xuXHRcdGlmICghaXNNdWx0aUNvbnRleHQ0MTIpIHtcblx0XHRcdGRpc3BsYXllZE1lc3NhZ2UgPSBgJHttZXNzYWdlVGV4dH1cXG4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlBST0NFRURcIil9YDtcblx0XHR9IGVsc2UgaWYgKGlkZW50aWZpZXJUZXh0ICE9PSB1bmRlZmluZWQgJiYgaWRlbnRpZmllclRleHQgIT09IFwiXCIpIHtcblx0XHRcdGNhbmNlbEJ1dHRvblR4dCA9XG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IGNhbmNlbEJ1dHRvblR4dFxuXHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX1NLSVBcIik7XG5cdFx0XHRjb25zdCB0YWJsZVR5cGVOYW1lID0gdGhpcy50YWJsZUFQST8uZ2V0VGFibGVEZWZpbml0aW9uKCkuaGVhZGVySW5mb1R5cGVOYW1lO1xuXHRcdFx0Y29uc3QgaGVhZGVySW5mb1R5cGVOYW1lID1cblx0XHRcdFx0dGhpcy50YWJsZUFQSSAmJiB0eXBlb2YgdGFibGVUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyh0YWJsZVR5cGVOYW1lLCB0aGlzLnRhYmxlQVBJKVxuXHRcdFx0XHRcdDogdGFibGVUeXBlTmFtZTtcblx0XHRcdGlmIChoZWFkZXJJbmZvVHlwZU5hbWUpIHtcblx0XHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke2hlYWRlckluZm9UeXBlTmFtZS50b1N0cmluZygpfSAke2lkZW50aWZpZXJUZXh0fTogJHttZXNzYWdlVGV4dH1cXG5cXG4ke3dhcm5pbmdNZXNzYWdlVGV4dH1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke2lkZW50aWZpZXJUZXh0fTogJHttZXNzYWdlVGV4dH1cXG5cXG4ke3dhcm5pbmdNZXNzYWdlVGV4dH1gO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjYW5jZWxCdXR0b25UeHQgPVxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0PyBjYW5jZWxCdXR0b25UeHRcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19TS0lQXCIpO1xuXHRcdFx0ZGlzcGxheWVkTWVzc2FnZSA9IGAke21lc3NhZ2VUZXh0fVxcblxcbiR7d2FybmluZ01lc3NhZ2VUZXh0fWA7XG5cdFx0fVxuXHRcdGlmIChpc011bHRpQ29udGV4dDQxMiAmJiB0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRkaXNwbGF5ZWRNZXNzYWdlID0gYCR7Z2VuZXJpY0NoYW5nZXNldE1lc3NhZ2V9XFxuXFxuJHtkaXNwbGF5ZWRNZXNzYWdlfWA7XG5cdFx0fVxuXHRcdE1lc3NhZ2VCb3gud2FybmluZyhkaXNwbGF5ZWRNZXNzYWdlLCB7XG5cdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiV0FSTklOR1wiKSxcblx0XHRcdGFjdGlvbnM6IFthY3Rpb25OYW1lLCBjYW5jZWxCdXR0b25UeHRdLFxuXHRcdFx0ZW1waGFzaXplZEFjdGlvbjogYWN0aW9uTmFtZSxcblx0XHRcdG9uQ2xvc2U6IChhY3Rpb246IHN0cmluZykgPT4ge1xuXHRcdFx0XHR0aGlzW2FjdGlvbiA9PT0gYWN0aW9uTmFtZSA/IFwiaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvblwiIDogXCJoYW5kbGVNZXNzYWdlT25DYW5jZWxcIl0oKTtcblx0XHRcdFx0bWVzc2FnZVJlc29sdmUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGxheU1lc3NhZ2VzT25EaWFsb2cobWVzc2FnZXM6IE1lc3NhZ2VbXSwgYWN0aW9uTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG1lc3NhZ2VSZXNvbHZlITogRnVuY3Rpb247XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRtZXNzYWdlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVzc2FnZURpYWxvZ01vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwodGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCk7XG5cdFx0Y29uc3QgaXNNdWx0aUNvbnRleHQ0MTIgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMTtcblx0XHRsZXQgd2FybmluZ01lc3NhZ2UgPSBcIlwiO1xuXHRcdGxldCB3YXJuaW5nRGVzYyA9IFwiXCI7XG5cdFx0bGV0IGNhbmNlbEJ1dHRvblR4dDogc3RyaW5nID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKTtcblx0XHRpZiAoaXNNdWx0aUNvbnRleHQ0MTIpIHtcblx0XHRcdGNhbmNlbEJ1dHRvblR4dCA9XG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IGNhbmNlbEJ1dHRvblR4dFxuXHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX1NLSVBcIik7XG5cdFx0XHR3YXJuaW5nTWVzc2FnZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHRcdD8gXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX01FU1NBR0VTX1dBUk5JTkdcIlxuXHRcdFx0XHRcdDogXCJDX0NPTU1PTl9ESUFMT0dfU0tJUF9NRVNTQUdFU19XQVJOSU5HXCJcblx0XHRcdCk7XG5cdFx0XHR3YXJuaW5nRGVzYyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldFxuXHRcdFx0XHRcdD8gXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX01FU1NBR0VTX1RFWFRcIlxuXHRcdFx0XHRcdDogXCJDX0NPTU1PTl9ESUFMT0dfU0tJUF9NRVNTQUdFU19URVhUXCIsXG5cdFx0XHRcdFthY3Rpb25OYW1lXVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2FybmluZ01lc3NhZ2UgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX01FU1NBR0VTX0dFTkVSSUNfQUNUSU9OX1dBUk5JTkdcIiwgW2FjdGlvbk5hbWVdKTtcblx0XHR9XG5cdFx0Y29uc3QgZ2VuZXJpY01lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRtZXNzYWdlOiB3YXJuaW5nTWVzc2FnZSxcblx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uLFxuXHRcdFx0dGFyZ2V0OiB1bmRlZmluZWQsXG5cdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0ZGVzY3JpcHRpb246IHdhcm5pbmdEZXNjLmxlbmd0aCA/IHdhcm5pbmdEZXNjIDogdW5kZWZpbmVkXG5cdFx0fSk7XG5cdFx0bWVzc2FnZXMgPSBbZ2VuZXJpY01lc3NhZ2VdLmNvbmNhdChtZXNzYWdlcyk7XG5cdFx0bWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEobWVzc2FnZXMpO1xuXHRcdG5ldyBTdHJpY3REaWFsb2coe1xuXHRcdFx0bWVzc2FnZU9iamVjdDogbWVzc2FnZUhhbmRsaW5nLnByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhtZXNzYWdlRGlhbG9nTW9kZWwsIHRydWUsIGlzTXVsdGlDb250ZXh0NDEyKSxcblx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHRtZXNzYWdlRGlhbG9nTW9kZWwsXG5cdFx0XHRjYW5jZWxCdXR0b25UeHQsXG5cdFx0XHRvbkJlZ2luQnV0dG9uUHJlc3M6IHRoaXMuaGFuZGxlTWVzc2FnZU9uVmFsaWRhdGlvbi5iaW5kKHRoaXMpLFxuXHRcdFx0b25FbmRCdXR0b25QcmVzczogdGhpcy5oYW5kbGVNZXNzYWdlT25DYW5jZWwuYmluZCh0aGlzKSxcblx0XHRcdG9uQ2xvc2U6IG1lc3NhZ2VSZXNvbHZlXG5cdFx0fSkub3BlbigpO1xuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVNZXNzYWdlT25WYWxpZGF0aW9uKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgcmVzb2x2ZSBvZiB0aGlzLnN0cmljdEhhbmRsaW5nUmVzb2x2ZXMpIHtcblx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyA9IFtdO1xuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uVmFsaWRhdGlvbj8uKCk7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZU1lc3NhZ2VPbkNhbmNlbCgpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHRoaXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0XHR0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcblx0XHRmb3IgKGNvbnN0IHJlc29sdmUgb2YgdGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzKSB7XG5cdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cdFx0dGhpcy5zdHJpY3RIYW5kbGluZ1Jlc29sdmVzID0gW107XG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQpIHtcblx0XHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24ocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9DSEFOR0VTRVRfQ0FOQ0VMX01FU1NBR0VTXCIpLCB7XG5cdFx0XHRcdGNvbnRlbnRXaWR0aDogXCIxNTBweFwiXG5cdFx0XHR9IGFzIG9iamVjdCk7XG5cdFx0fVxuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uQ2FuY2VsPy4oKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQWdCQSxNQUFNQSxrQkFBa0IsR0FBR0MsU0FBUyxDQUFDRCxrQkFBa0I7RUFBQyxJQUVuQ0UsbUJBQW1CO0lBU3ZDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDLFNBQUFBLG9CQUNrQkMsVUFVaEIsRUFDQTtNQUFBLEtBbkNNQyxzQkFBc0IsR0FBaUMsRUFBRTtNQUFBLEtBRXpEQyw2QkFBNkIsR0FBYyxFQUFFO01BQUEsS0FFN0NDLFFBQVEsR0FBRyxLQUFLO01BQUEsS0FxRmpCQyxVQUFVLEdBQUcsTUFBZTtRQUNsQyxPQUFPLElBQUksQ0FBQ0QsUUFBUTtNQUNyQixDQUFDO01BQUEsS0FuRWlCSCxVQVVoQixHQVZnQkEsVUFVaEI7TUFFRCxJQUFJLElBQUksQ0FBQ0EsVUFBVSxDQUFDSyxRQUFRLENBQUNDLE1BQU0sRUFBRTtRQUNwQyxNQUFNQyxPQUFPLEdBQUcsSUFBSSxDQUFDUCxVQUFVLENBQUNLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSUQsT0FBTyxFQUFFRSxHQUFHLENBQUMsd0NBQXdDLENBQUMsRUFBRTtVQUMzRCxJQUFJLENBQUNDLFFBQVEsR0FBR0MsZUFBZSxDQUFD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
|