@sapui5/sap.fe.templates 1.141.1 → 1.142.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/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +1 -1
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +1 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +10 -12
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +95 -60
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +92 -53
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/overrides/MessageHandler.js +25 -0
- package/src/sap/fe/templates/ListReport/overrides/MessageHandler.ts +20 -0
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +180 -13
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +209 -13
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +4 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +136 -24
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +178 -26
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +3 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +2 -1
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +7 -4
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +2 -2
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle.properties +8 -7
- package/src/sap/fe/templates/messagebundle_ar.properties +5 -5
- package/src/sap/fe/templates/messagebundle_bg.properties +6 -6
- package/src/sap/fe/templates/messagebundle_ca.properties +4 -4
- package/src/sap/fe/templates/messagebundle_cnr.properties +5 -5
- package/src/sap/fe/templates/messagebundle_cs.properties +6 -6
- package/src/sap/fe/templates/messagebundle_cy.properties +5 -5
- package/src/sap/fe/templates/messagebundle_da.properties +6 -6
- package/src/sap/fe/templates/messagebundle_de.properties +7 -7
- package/src/sap/fe/templates/messagebundle_el.properties +5 -5
- package/src/sap/fe/templates/messagebundle_en.properties +6 -6
- package/src/sap/fe/templates/messagebundle_en_GB.properties +6 -6
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +3 -3
- package/src/sap/fe/templates/messagebundle_es.properties +4 -4
- package/src/sap/fe/templates/messagebundle_es_MX.properties +4 -4
- package/src/sap/fe/templates/messagebundle_et.properties +4 -4
- package/src/sap/fe/templates/messagebundle_fi.properties +4 -4
- package/src/sap/fe/templates/messagebundle_fr.properties +4 -4
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +5 -5
- package/src/sap/fe/templates/messagebundle_hi.properties +6 -6
- package/src/sap/fe/templates/messagebundle_hr.properties +4 -4
- package/src/sap/fe/templates/messagebundle_hu.properties +6 -6
- package/src/sap/fe/templates/messagebundle_id.properties +7 -7
- package/src/sap/fe/templates/messagebundle_it.properties +4 -4
- package/src/sap/fe/templates/messagebundle_iw.properties +6 -6
- package/src/sap/fe/templates/messagebundle_ja.properties +4 -4
- package/src/sap/fe/templates/messagebundle_kk.properties +4 -4
- package/src/sap/fe/templates/messagebundle_ko.properties +4 -4
- package/src/sap/fe/templates/messagebundle_lt.properties +4 -4
- package/src/sap/fe/templates/messagebundle_lv.properties +6 -6
- package/src/sap/fe/templates/messagebundle_mk.properties +4 -4
- package/src/sap/fe/templates/messagebundle_ms.properties +5 -5
- package/src/sap/fe/templates/messagebundle_nl.properties +4 -4
- package/src/sap/fe/templates/messagebundle_no.properties +4 -4
- package/src/sap/fe/templates/messagebundle_pl.properties +4 -4
- package/src/sap/fe/templates/messagebundle_pt.properties +5 -5
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +6 -6
- package/src/sap/fe/templates/messagebundle_ro.properties +4 -4
- package/src/sap/fe/templates/messagebundle_ru.properties +4 -4
- package/src/sap/fe/templates/messagebundle_sh.properties +5 -5
- package/src/sap/fe/templates/messagebundle_sk.properties +4 -4
- package/src/sap/fe/templates/messagebundle_sl.properties +6 -6
- package/src/sap/fe/templates/messagebundle_sr.properties +5 -5
- package/src/sap/fe/templates/messagebundle_sv.properties +4 -4
- package/src/sap/fe/templates/messagebundle_th.properties +4 -4
- package/src/sap/fe/templates/messagebundle_tr.properties +4 -4
- package/src/sap/fe/templates/messagebundle_uk.properties +4 -4
- package/src/sap/fe/templates/messagebundle_vi.properties +6 -6
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +4 -4
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +4 -4
- package/src/sap/fe/templates/types/sap.fe.templates-auto-ext.d.js +10 -0
- package/src/sap/fe/templates/types/sap.fe.templates-auto-ext.d.ts +49 -0
|
@@ -2,10 +2,10 @@
|
|
|
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/ObjectPath", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/KPIManagement", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/MessageStrip", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ListReport/ExtensionAPI", "sap/fe/templates/ListReport/overrides/SideEffects", "sap/fe/templates/TableScroller", "sap/ui/Device", "sap/ui/core/Element", "sap/ui/core/InvisibleMessage", "sap/ui/core/library", "sap/ui/core/mvc/OverrideExecution", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/hasher", "./ListReportTemplating", "./overrides/IntentBasedNavigation", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, ClassSupport, CommonUtils, PageController, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, Placeholder, Share, SideEffects, ViewState, EditState, MessageStrip, ResourceModelHelper, StableIdHelper, CoreLibrary, ChartUtils, FilterUtils, SelectionVariant, ExtensionAPI, SideEffectsOverride, TableScroller, Device, UI5Element, InvisibleMessage, library, OverrideExecution, StateUtil, hasher, ListReportTemplating, IntentBasedNavigationOverride, ShareOverrides, ViewStateOverrides) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/KPIManagement", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/MessageStrip", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ListReport/ExtensionAPI", "sap/fe/templates/ListReport/overrides/SideEffects", "sap/fe/templates/TableScroller", "sap/ui/Device", "sap/ui/core/Element", "sap/ui/core/InvisibleMessage", "sap/ui/core/library", "sap/ui/core/mvc/OverrideExecution", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/hasher", "./ListReportTemplating", "./overrides/IntentBasedNavigation", "./overrides/MessageHandler", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, ClassSupport, CommonUtils, PageController, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, MessageHandler, Placeholder, Share, SideEffects, ViewState, EditState, MessageStrip, ResourceModelHelper, StableIdHelper, CoreLibrary, ChartUtils, FilterUtils, SelectionVariant, ExtensionAPI, SideEffectsOverride, TableScroller, Device, UI5Element, InvisibleMessage, library, OverrideExecution, StateUtil, hasher, ListReportTemplating, IntentBasedNavigationOverride, MessageHandlerOverride, ShareOverrides, ViewStateOverrides) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;
|
|
9
9
|
var InvisibleMessageMode = library.InvisibleMessageMode;
|
|
10
10
|
var generate = StableIdHelper.generate;
|
|
11
11
|
var getResourceModel = ResourceModelHelper.getResourceModel;
|
|
@@ -36,7 +36,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
36
36
|
getEntitySet: function () {
|
|
37
37
|
return this.base.getCurrentEntitySet();
|
|
38
38
|
}
|
|
39
|
-
})), _dec4 = usingExtension(SideEffects.override(SideEffectsOverride)), _dec5 = usingExtension(IntentBasedNavigation.override(IntentBasedNavigationOverride)), _dec6 = usingExtension(Share.override(ShareOverrides)), _dec7 = usingExtension(ViewState.override(ViewStateOverrides)), _dec8 = usingExtension(KPIManagement), _dec9 = usingExtension(Placeholder), _dec10 =
|
|
39
|
+
})), _dec4 = usingExtension(SideEffects.override(SideEffectsOverride)), _dec5 = usingExtension(IntentBasedNavigation.override(IntentBasedNavigationOverride)), _dec6 = usingExtension(Share.override(ShareOverrides)), _dec7 = usingExtension(ViewState.override(ViewStateOverrides)), _dec8 = usingExtension(KPIManagement), _dec9 = usingExtension(Placeholder), _dec10 = usingExtension(MessageHandler.override(MessageHandlerOverride)), _dec11 = publicExtension(), _dec12 = finalExtension(), _dec13 = privateExtension(), _dec14 = extensible("After"), _dec15 = publicExtension(), _dec16 = extensible(OverrideExecution.After), _dec17 = publicExtension(), _dec18 = extensible(OverrideExecution.After), _dec19 = publicExtension(), _dec20 = extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_PageController) {
|
|
40
40
|
function ListReportController() {
|
|
41
41
|
var _this;
|
|
42
42
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
@@ -51,6 +51,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
51
51
|
_initializerDefineProperty(_this, "viewState", _descriptor6, _this);
|
|
52
52
|
_initializerDefineProperty(_this, "kpiManagement", _descriptor7, _this);
|
|
53
53
|
_initializerDefineProperty(_this, "placeholder", _descriptor8, _this);
|
|
54
|
+
_initializerDefineProperty(_this, "messageHandler", _descriptor9, _this);
|
|
54
55
|
_this.formatters = {
|
|
55
56
|
setALPControlMessageStrip(aIgnoredFields, bIsChart, oApplySupported) {
|
|
56
57
|
let sText = "";
|
|
@@ -65,6 +66,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
65
66
|
}
|
|
66
67
|
};
|
|
67
68
|
_this.handlers = {
|
|
69
|
+
onFilterLayoutSwitch(oEvent) {
|
|
70
|
+
const currentKey = oEvent.getSource().selectedKey;
|
|
71
|
+
const variantManagement = this._getControlFromPageModelProperty("/variantManagement/pageId");
|
|
72
|
+
if (variantManagement) {
|
|
73
|
+
if (currentKey === "ai") {
|
|
74
|
+
variantManagement.setVisible(false);
|
|
75
|
+
} else {
|
|
76
|
+
variantManagement.setVisible(true);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
},
|
|
68
80
|
onInlineEditSave() {
|
|
69
81
|
this.inlineEditFlow.inlineEditSave();
|
|
70
82
|
},
|
|
@@ -261,7 +273,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
261
273
|
};
|
|
262
274
|
_proto.onInit = function onInit() {
|
|
263
275
|
PageController.prototype.onInit.apply(this);
|
|
264
|
-
const oInternalModelContext = this.
|
|
276
|
+
const oInternalModelContext = this.getOwnerComponent().getBindingContext("internal");
|
|
277
|
+
const uiModelContext = this.getOwnerComponent().getBindingContext("ui");
|
|
265
278
|
const filterBar = this._getFilterBarControl();
|
|
266
279
|
if (filterBar) {
|
|
267
280
|
this._storeFilterBarSelectionVariant(filterBar, oInternalModelContext);
|
|
@@ -291,16 +304,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
291
304
|
|
|
292
305
|
// Configure the initial load settings
|
|
293
306
|
this._setInitLoad();
|
|
294
|
-
|
|
295
|
-
const uiModel = view.getModel("ui");
|
|
296
|
-
const path = `/${view.getId()}`;
|
|
297
|
-
uiModel.setProperty(path, {
|
|
307
|
+
uiModelContext.setProperty("", {
|
|
298
308
|
isEditable: false
|
|
299
309
|
});
|
|
300
|
-
view.bindElement({
|
|
301
|
-
path,
|
|
302
|
-
model: "ui"
|
|
303
|
-
});
|
|
304
310
|
};
|
|
305
311
|
_proto.onBeforeRendering = function onBeforeRendering() {
|
|
306
312
|
PageController.prototype.onBeforeRendering.apply(this);
|
|
@@ -318,7 +324,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
318
324
|
}
|
|
319
325
|
delete this.extensionAPI;
|
|
320
326
|
};
|
|
321
|
-
_proto._onAfterBinding = function _onAfterBinding() {
|
|
327
|
+
_proto._onAfterBinding = async function _onAfterBinding() {
|
|
328
|
+
const internalModelContext = this.getView().getBindingContext("internal");
|
|
329
|
+
if (!internalModelContext.getProperty("initialVariantApplied")) {
|
|
330
|
+
this.pageReady.waitFor(this._applyAppState());
|
|
331
|
+
internalModelContext.setProperty("initialVariantApplied", true);
|
|
332
|
+
}
|
|
333
|
+
await CommonUtils.getAppComponent(this.getView()).isAppComponentBusy();
|
|
322
334
|
const aTables = this._getControls("table");
|
|
323
335
|
let updateActions = true;
|
|
324
336
|
if (EditState.isEditStateDirty()) {
|
|
@@ -328,10 +340,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
328
340
|
if (oTableBinding) {
|
|
329
341
|
updateActions = false;
|
|
330
342
|
const tableAPI = table?.getParent();
|
|
331
|
-
|
|
332
343
|
// Update the table content using side effects (listBinding.refresh doesn't keep expansion states in a TreeTable)
|
|
333
|
-
CommonUtils.getAppComponent(this.getView()).getRoutingService().waitForBindingCleanup().then(
|
|
334
|
-
await CommonUtils.getAppComponent(this.getView()).isAppComponentBusy();
|
|
344
|
+
CommonUtils.getAppComponent(this.getView()).getRoutingService().waitForBindingCleanup().then(() => {
|
|
335
345
|
oTableBinding.attachEventOnce("dataReceived", () => {
|
|
336
346
|
this._updateTableActions(aTables);
|
|
337
347
|
});
|
|
@@ -351,12 +361,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
351
361
|
if (updateActions) {
|
|
352
362
|
this._updateTableActions(aTables);
|
|
353
363
|
}
|
|
354
|
-
const internalModelContext = this.getView().getBindingContext("internal");
|
|
355
|
-
if (!internalModelContext.getProperty("initialVariantApplied")) {
|
|
356
|
-
const viewId = this.getView().getId();
|
|
357
|
-
this.pageReady.waitFor(this._applyAppState(viewId));
|
|
358
|
-
internalModelContext.setProperty("initialVariantApplied", true);
|
|
359
|
-
}
|
|
360
364
|
const environmentCapabilities = CommonUtils.getAppComponent(this.getView()).getEnvironmentCapabilities();
|
|
361
365
|
environmentCapabilities.isInsightsEnabled().then(isInsightsEnabled => {
|
|
362
366
|
internalModelContext.setProperty("isInsightsSupported", isInsightsEnabled);
|
|
@@ -378,10 +382,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
378
382
|
* This happens either when there is a change on the FilterBar and the search is triggered,
|
|
379
383
|
* or when a tab with custom content is selected,
|
|
380
384
|
* or when the view is forced to be refreshed through the Extension API for the list report's public method setTabContentToBeRefreshedOnNextOpening.
|
|
381
|
-
* This method can be overwritten by the controller extension
|
|
382
|
-
* @param mParameters Map containing the filter conditions of the FilterBar, the currentTabID
|
|
383
|
-
* and the view refresh cause
|
|
384
|
-
*
|
|
385
|
+
* This method can be overwritten by the controller extension for customization.
|
|
386
|
+
* @param mParameters Map containing the filter conditions of the FilterBar, the currentTabID,
|
|
387
|
+
* and the view refresh cause such as tabChanged, search, or forcedRefresh.
|
|
388
|
+
* See the following example of a map:
|
|
385
389
|
* <code><pre>
|
|
386
390
|
* {
|
|
387
391
|
* filterConditions: {
|
|
@@ -409,9 +413,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
409
413
|
|
|
410
414
|
/**
|
|
411
415
|
* Method called when a filter or search value has been changed in the FilterBar,
|
|
412
|
-
* but has not been validated yet by the end user
|
|
416
|
+
* but has not been validated yet by the end user with the 'Go' or 'Search' button.
|
|
413
417
|
* Typically, the content of the current tab is greyed out until the filters are validated.
|
|
414
|
-
* This method can be overwritten by the controller extension
|
|
418
|
+
* This method can be overwritten by the controller extension for customization.
|
|
415
419
|
* @public
|
|
416
420
|
*/;
|
|
417
421
|
_proto.onPendingFilters = function onPendingFilters() {
|
|
@@ -464,11 +468,43 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
464
468
|
filterField.focus(focusInfo);
|
|
465
469
|
}
|
|
466
470
|
|
|
471
|
+
/**
|
|
472
|
+
* Sets the focus when the header is expanded.
|
|
473
|
+
* The priorities are: (1) first empty mandatory filter field, (2) search field if focusable or first filter field, and (3) Go button.
|
|
474
|
+
* @param filterBar The filter bar control.
|
|
475
|
+
*/;
|
|
476
|
+
_proto._focusWhenHeaderExpanded = function _focusWhenHeaderExpanded(filterBar) {
|
|
477
|
+
const firstEmptyMandatoryField = filterBar.getFilterItems().find(function (oFilterItem) {
|
|
478
|
+
return oFilterItem.getRequired() && oFilterItem.getConditions().length === 0;
|
|
479
|
+
});
|
|
480
|
+
//Focusing on the first empty mandatory filter field, or on the first filter field if the table data is loaded
|
|
481
|
+
// Do a "silent" focus for FilterField, by adding the silent attribute. The silent attribute suppresses typeahead opening.
|
|
482
|
+
if (firstEmptyMandatoryField) {
|
|
483
|
+
if (firstEmptyMandatoryField.isA("sap.ui.mdc.FilterField")) {
|
|
484
|
+
this._focusSilent(firstEmptyMandatoryField);
|
|
485
|
+
} else {
|
|
486
|
+
firstEmptyMandatoryField.focus();
|
|
487
|
+
}
|
|
488
|
+
} else if (this._isInitLoadEnabled() && filterBar.getFilterItems().length > 0) {
|
|
489
|
+
// If there is no empty mandatory filter field, set silent focus on search field (if focusable), otherwise on first filter field
|
|
490
|
+
const basicSearchField = filterBar.getBasicSearchField();
|
|
491
|
+
const fieldToFocus = basicSearchField?.isFocusable() ? basicSearchField : filterBar.getFilterItems()[0];
|
|
492
|
+
if (fieldToFocus.isA("sap.ui.mdc.FilterField")) {
|
|
493
|
+
this._focusSilent(fieldToFocus);
|
|
494
|
+
} else {
|
|
495
|
+
fieldToFocus.focus();
|
|
496
|
+
}
|
|
497
|
+
} else {
|
|
498
|
+
//Focusing on the Go button
|
|
499
|
+
this.getView().byId(`${this._getFilterBarControlId()}-btnSearch`)?.focus();
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
|
|
467
503
|
/**
|
|
468
504
|
* This method sets the initial focus in a list report based on the User Experience guidelines.
|
|
469
505
|
*
|
|
470
506
|
*/;
|
|
471
|
-
_proto._setInitialFocus = function _setInitialFocus() {
|
|
507
|
+
_proto._setInitialFocus = async function _setInitialFocus() {
|
|
472
508
|
const dynamicPage = this._getDynamicListReportControl(),
|
|
473
509
|
isHeaderExpanded = dynamicPage.getHeaderExpanded(),
|
|
474
510
|
filterBar = this._getFilterBarControl();
|
|
@@ -478,39 +514,33 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
478
514
|
filterBar.setShowMessages(true);
|
|
479
515
|
}
|
|
480
516
|
if (isHeaderExpanded) {
|
|
481
|
-
|
|
482
|
-
return oFilterItem.getRequired() && oFilterItem.getConditions().length === 0;
|
|
483
|
-
});
|
|
484
|
-
//Focusing on the first empty mandatory filter field, or on the first filter field if the table data is loaded
|
|
485
|
-
// Do a "silent" focus for FilterField, by adding the silent attribute. The silent attribute suppresses typeahead opening.
|
|
486
|
-
if (firstEmptyMandatoryField) {
|
|
487
|
-
if (firstEmptyMandatoryField.isA("sap.ui.mdc.FilterField")) {
|
|
488
|
-
this._focusSilent(firstEmptyMandatoryField);
|
|
489
|
-
} else {
|
|
490
|
-
firstEmptyMandatoryField.focus();
|
|
491
|
-
}
|
|
492
|
-
} else if (this._isInitLoadEnabled() && filterBar.getFilterItems().length > 0) {
|
|
493
|
-
// Add check for available filterItems
|
|
494
|
-
const fieldToFocus = filterBar.getFilterItems()[0];
|
|
495
|
-
if (fieldToFocus.isA("sap.ui.mdc.FilterField")) {
|
|
496
|
-
this._focusSilent(fieldToFocus);
|
|
497
|
-
} else {
|
|
498
|
-
fieldToFocus.focus();
|
|
499
|
-
}
|
|
500
|
-
} else {
|
|
501
|
-
//Focusing on the Go button
|
|
502
|
-
this.getView().byId(`${this._getFilterBarControlId()}-btnSearch`)?.focus();
|
|
503
|
-
}
|
|
517
|
+
this._focusWhenHeaderExpanded(filterBar);
|
|
504
518
|
} else if (this._isInitLoadEnabled()) {
|
|
505
|
-
this._getTable()?.focusRow(0).catch(function (error) {
|
|
506
|
-
|
|
519
|
+
await this._getTable()?.focusRow(0).catch(function (error) {
|
|
520
|
+
if (error) {
|
|
521
|
+
// if there is no error it can just be that there are no lines to focus
|
|
522
|
+
Log.info("Error while setting initial focus on the table ", error);
|
|
523
|
+
}
|
|
507
524
|
});
|
|
508
525
|
}
|
|
509
526
|
} else {
|
|
510
|
-
this._getTable()?.focusRow(0).catch(function (error) {
|
|
511
|
-
|
|
527
|
+
await this._getTable()?.focusRow(0).catch(function (error) {
|
|
528
|
+
if (error) {
|
|
529
|
+
// if there is no error it can just be that there are no lines to focus
|
|
530
|
+
Log.info("Error while setting initial focus on the table ", error);
|
|
531
|
+
}
|
|
512
532
|
});
|
|
513
533
|
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Override to get the browser title of the LR page.
|
|
538
|
+
* @param _pageTitleInformation Present page title information
|
|
539
|
+
* @returns Title information to be used by shell services for browser title
|
|
540
|
+
*/;
|
|
541
|
+
_proto._getBrowserTitle = async function _getBrowserTitle(_pageTitleInformation) {
|
|
542
|
+
// We shall fallback to defaul app title in case of list report.
|
|
543
|
+
return Promise.resolve(undefined);
|
|
514
544
|
};
|
|
515
545
|
_proto._getPageTitleInformation = async function _getPageTitleInformation() {
|
|
516
546
|
const oManifestEntry = this.getAppComponent().getManifestEntry("sap.app");
|
|
@@ -533,8 +563,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
533
563
|
const adaptationFilterBar = this._getFilterBarControl().getInbuiltFilter?.();
|
|
534
564
|
return adaptationFilterBar?.getParent() ? adaptationFilterBar : undefined;
|
|
535
565
|
};
|
|
536
|
-
_proto._applyAppState = async function _applyAppState(
|
|
537
|
-
await this.getAppComponent().getAppStateHandler().applyAppState(
|
|
566
|
+
_proto._applyAppState = async function _applyAppState() {
|
|
567
|
+
await this.getAppComponent().getAppStateHandler().applyAppState(this.getView());
|
|
538
568
|
const oFilterBar = this._getFilterBarControl();
|
|
539
569
|
if (oFilterBar) {
|
|
540
570
|
oFilterBar.enableRequests(true);
|
|
@@ -913,7 +943,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
|
|
|
913
943
|
enumerable: true,
|
|
914
944
|
writable: true,
|
|
915
945
|
initializer: null
|
|
916
|
-
}),
|
|
946
|
+
}), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "messageHandler", [_dec10], {
|
|
947
|
+
configurable: true,
|
|
948
|
+
enumerable: true,
|
|
949
|
+
writable: true,
|
|
950
|
+
initializer: null
|
|
951
|
+
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterClear", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterClear"), _class2.prototype), _class2)) || _class);
|
|
917
952
|
return ListReportController;
|
|
918
953
|
}, false);
|
|
919
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTEiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMiIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTMiLCJleHRlbnNpYmxlIiwiX2RlYzE0IiwiX2RlYzE1IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbklubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdEZsb3ciLCJpbmxpbmVFZGl0U2F2ZSIsIm9uRmlsdGVyU2VhcmNoIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidHJpZ2dlclNlYXJjaCIsIm9uRmlsdGVyc0NoYW5nZWQiLCJvRXZlbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uUGVuZGluZ0ZpbHRlcnMiLCJnZXRQYXJhbWV0ZXIiLCJzZXRQcm9wZXJ0eSIsIl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJvblZhcmlhbnRTZWxlY3RlZCIsInBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJvcmlnaW5hbFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5IiwibXVsdGlNb2RlQ29udHJvbCIsIl9nZXRNdWx0aU1vZGVDb250cm9sIiwiaXNBIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwic2V0VGltZW91dCIsImZpbHRlckJhciIsImR5bmFtaWNQYWdlIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCIsImZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZmluZCIsImZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsImdldENvbmRpdGlvbnMiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsImdldEhlYWRlckV4cGFuZGVkIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJwaG9uZSIsIm9EeW5hbWljUGFnZSIsIl9pc0luaXRMb2FkRW5hYmxlZCIsInNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkiLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJvQ29udHJvbGxlciIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJnZXRTb3VyY2UiLCJnZXRDb250ZW50Iiwib1RhYmxlIiwiX2dldFRhYmxlIiwiYURhdGEiLCJDaGFydFV0aWxzIiwic2V0Q2hhcnRGaWx0ZXJzIiwicmViaW5kIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwic2VsZWN0ZWRLZXkiLCJrZXkiLCJvQ2hhcnQiLCJfdXBkYXRlVGFibGUiLCJfdXBkYXRlQ2hhcnQiLCJIeWJyaWQiLCJmb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZXZlbnQiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5Iiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiX3NldEluaXRMb2FkIiwidmlldyIsInVpTW9kZWwiLCJnZXRNb2RlbCIsInBhdGgiLCJnZXRJZCIsImlzRWRpdGFibGUiLCJiaW5kRWxlbWVudCIsIm1vZGVsIiwib25CZWZvcmVSZW5kZXJpbmciLCJkeW5taWNQYWdlSGVhZGVyVGl0bGUiLCJnZXRUaXRsZSIsImJyZWFkY3J1bWJzQkIiLCJnZXRCcmVhZGNydW1icyIsInNldEJyZWFkY3J1bWJMaW5rcyIsIm9uRXhpdCIsImRlc3Ryb3kiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwidXBkYXRlQWN0aW9ucyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJ0YWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwidGFibGVBUEkiLCJDb21tb25VdGlscyIsImdldFJvdXRpbmdTZXJ2aWNlIiwid2FpdEZvckJpbmRpbmdDbGVhbnVwIiwiaXNBcHBDb21wb25lbnRCdXN5IiwiYXR0YWNoRXZlbnRPbmNlIiwiX3VwZGF0ZVRhYmxlQWN0aW9ucyIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbnRyb2wiLCJ0eXBlIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsImUiLCJ3YXJuaW5nIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJ2aWV3SWQiLCJwYWdlUmVhZHkiLCJ3YWl0Rm9yIiwiX2FwcGx5QXBwU3RhdGUiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJvblBhZ2VSZWFkeSIsIm1QYXJhbWV0ZXJzIiwiZm9yY2VGb2N1cyIsIl9zZXRJbml0aWFsRm9jdXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ1bmRlZmluZWQiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJzbGljZSIsIm9uQWZ0ZXJDbGVhciIsImFJQk5BY3Rpb25zIiwiZm9yRWFjaCIsImdldElCTkFjdGlvbnMiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsInVwZGF0ZU1lbnVCdXR0b25WaXNpYmxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX2ZvY3VzU2lsZW50IiwiZmlsdGVyRmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJpc0hlYWRlckV4cGFuZGVkIiwiX2lzRmlsdGVyQmFySGlkZGVuVXNlZCIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsIm9GaWx0ZXJJdGVtIiwiZmllbGRUb0ZvY3VzIiwiYnlJZCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sSWQiLCJmb2N1c1JvdyIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGl0bGUiLCJzdWJ0aXRsZSIsInN1YlRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCIsIl9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCIsImFkYXB0YXRpb25GaWx0ZXJCYXIiLCJnZXRJbmJ1aWx0RmlsdGVyIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiYXBwbHlBcHBTdGF0ZSIsImVuYWJsZVJlcXVlc3RzIiwiX2lzRmlsdGVyQmFySGlkZGVuIiwiX2lzTXVsdGlNb2RlIiwic2V0Q291bnRzT3V0RGF0ZWQiLCJfZ2V0U2VnbWVudGVkQnV0dG9uIiwic0NvbnRyb2wiLCJzU2VnbWVudGVkQnV0dG9uSWQiLCJfZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eSIsInNQYXRoIiwiY29udHJvbElkIiwiX2dldFBhZ2VNb2RlbCIsIl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sIiwic1Zpc3VhbEZpbHRlckJhcklkIiwiU3RhYmxlSWRIZWxwZXIiLCJnZW5lcmF0ZSIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsIl9nZXRJY29uVGFiQmFyIiwib0NvbnRyb2wiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJzS2V5IiwiYUNvbnRyb2xzIiwib1RhYk11bHRpTW9kZSIsImdldEl0ZW1zIiwib0l0ZW0iLCJnZXRLZXkiLCJpbmNsdWRlcyIsInB1c2giLCJkZWZhdWx0UGF0aCIsIkxpc3RSZXBvcnRUZW1wbGF0aW5nIiwiZ2V0RGVmYXVsdFBhdGgiLCJpbml0TG9hZE1vZGUiLCJnZXRWaWV3RGF0YSIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9kaXNhYmxlSW5pdExvYWQiLCJfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQiLCJ2YXJpYW50TWFuYWdlbWVudElkIiwiZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJnZXREYXRhIiwicmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsImJpbmQiLCJfc2V0U2hhcmVNb2RlbCIsImZuR2V0VXNlciIsIk9iamVjdFBhdGgiLCJnZXQiLCJvU2hhcmVJbmZvIiwiYm9va21hcmtUaXRsZSIsImRvY3VtZW50IiwiYm9va21hcmtDdXN0b21VcmwiLCJzSGFzaCIsImhhc2hlciIsImdldEhhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJpc1NoYXJlSW5KYW1BY3RpdmUiLCJpc0phbUFjdGl2ZSIsIm9UZW1wbGF0ZVByaXZhdGVNb2RlbCIsImdldE93bmVyQ29tcG9uZW50IiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImFDaGFydHMiLCJzQ2hhcnRFbnRpdHlQYXRoIiwic0NoYXJ0RW50aXR5U2V0Iiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwidmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudCIsIm9WTSIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImdldEV4ZWN1dGVPblNlbGVjdCIsImlzVGFibGVCb3VuZCIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiaXNCb3VuZCIsImdldEJpbmRpbmdJbmZvIiwiYnV0dG9uVmlzaWJsZSIsImdldFNlZ21lbnRlZEJ1dHRvbiIsInNldFZpc2libGUiLCJzZWdtZW50ZWRCdXR0b25JZCIsImFkZEZvY3VzRGVsZWdhdGUiLCJzZWdtZW50ZWRCdXR0b24iLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJldmVudERlbGVnYXRlIiwib25BZnRlclJlbmRlcmluZyIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJhZGRFdmVudERlbGVnYXRlIiwic3YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiZ2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljUGFnZSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VcIjtcbmltcG9ydCB0eXBlIHsgRHluYW1pY1BhZ2VUaXRsZSRTdGF0ZUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlVGl0bGVcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgS1BJTWFuYWdlbWVudCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvS1BJTWFuYWdlbWVudFwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnREZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvdGVtcGxhdGVzL0xpc3RSZXBvcnRDb252ZXJ0ZXJcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSWRIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBDb3JlTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQnJlYWRjcnVtYnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvQnJlYWRjcnVtYnNcIjtcbmltcG9ydCB0eXBlIENoYXJ0VHlwZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIENoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCBTaWRlRWZmZWN0c092ZXJyaWRlIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvb3ZlcnJpZGVzL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJDb250YWluZXJJdGVtIGZyb20gXCJzYXAvbS9UYWJDb250YWluZXJJdGVtXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBoYXNoZXIgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2hhc2hlclwiO1xuaW1wb3J0ICogYXMgTGlzdFJlcG9ydFRlbXBsYXRpbmcgZnJvbSBcIi4vTGlzdFJlcG9ydFRlbXBsYXRpbmdcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuY29uc3QgVGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcblxuLyoqXG4gKiBDb250cm9sbGVyIGNsYXNzIGZvciB0aGUgbGlzdCByZXBvcnQgcGFnZSwgdXNlZCBpbnNpZGUgYW4gU0FQIEZpb3JpIGVsZW1lbnRzIGFwcGxpY2F0aW9uLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXJcIilcbmNsYXNzIExpc3RSZXBvcnRDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKHtcblx0XHRcdG9uQWZ0ZXJCaW5kaW5nOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxSb3V0aW5nKSB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9vbkFmdGVyQmluZGluZygpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5iYXNlIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5nZXRDdXJyZW50RW50aXR5U2V0KCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNpZGVFZmZlY3RzLm92ZXJyaWRlKFNpZGVFZmZlY3RzT3ZlcnJpZGUpKVxuXHRfc2lkZUVmZmVjdHMhOiBTaWRlRWZmZWN0cztcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEtQSU1hbmFnZW1lbnQpXG5cdGtwaU1hbmFnZW1lbnQhOiBLUElNYW5hZ2VtZW50O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgZmlsdGVyQmFyQ29uZGl0aW9ucz86IHVua25vd247XG5cblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGV4dGVuc2lvbiBBUEkgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUEkuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgZmFsc2UpO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IHVpTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwidWlcIik7XG5cdFx0Y29uc3QgcGF0aCA9IGAvJHt2aWV3LmdldElkKCl9YDtcblx0XHR1aU1vZGVsLnNldFByb3BlcnR5KHBhdGgsIHsgaXNFZGl0YWJsZTogZmFsc2UgfSk7XG5cdFx0dmlldy5iaW5kRWxlbWVudCh7IHBhdGgsIG1vZGVsOiBcInVpXCIgfSk7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRjb25zdCBkeW5taWNQYWdlSGVhZGVyVGl0bGUgPSBkeW5hbWljUGFnZT8uZ2V0VGl0bGUoKTtcblx0XHRjb25zdCBicmVhZGNydW1ic0JCID0gZHlubWljUGFnZUhlYWRlclRpdGxlLmdldEJyZWFkY3J1bWJzKCkgYXMgQnJlYWRjcnVtYnMgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGJyZWFkY3J1bWJzQkIpIHtcblx0XHRcdGJyZWFkY3J1bWJzQkIuc2V0QnJlYWRjcnVtYkxpbmtzKFwiXCIpO1xuXHRcdH1cblx0fVxuXG5cdG9uRXhpdCgpOiB2b2lkIHtcblx0XHRkZWxldGUgdGhpcy5maWx0ZXJCYXJDb25kaXRpb25zO1xuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRfb25BZnRlckJpbmRpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikgYXMgVGFibGVbXTtcblx0XHRsZXQgdXBkYXRlQWN0aW9ucyA9IHRydWU7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0YWJsZT8uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0dXBkYXRlQWN0aW9ucyA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblxuXHRcdFx0XHQvLyBVcGRhdGUgdGhlIHRhYmxlIGNvbnRlbnQgdXNpbmcgc2lkZSBlZmZlY3RzIChsaXN0QmluZGluZy5yZWZyZXNoIGRvZXNuJ3Qga2VlcCBleHBhbnNpb24gc3RhdGVzIGluIGEgVHJlZVRhYmxlKVxuXHRcdFx0XHRDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpXG5cdFx0XHRcdFx0LmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0XHQud2FpdEZvckJpbmRpbmdDbGVhbnVwKClcblx0XHRcdFx0XHQudGhlbihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRhd2FpdCBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLmlzQXBwQ29tcG9uZW50QnVzeSgpO1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKCFpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiKSkge1xuXHRcdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRcdHRoaXMucGFnZVJlYWR5LndhaXRGb3IodGhpcy5fYXBwbHlBcHBTdGF0ZSh2aWV3SWQpKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaW5pdGlhbFZhcmlhbnRBcHBsaWVkXCIsIHRydWUpO1xuXHRcdH1cblx0XHRjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllc1xuXHRcdFx0LmlzSW5zaWdodHNFbmFibGVkKClcblx0XHRcdC50aGVuKChpc0luc2lnaHRzRW5hYmxlZDogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgaXNJbnNpZ2h0c0VuYWJsZWQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjaGVja2luZyBpZiBpbnNpZ2h0cyBhcmUgZW5hYmxlZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRmb3JtYXR0ZXJzID0ge1xuXHRcdHNldEFMUENvbnRyb2xNZXNzYWdlU3RyaXAoXG5cdFx0XHR0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGFJZ25vcmVkRmllbGRzOiBzdHJpbmdbXSxcblx0XHRcdGJJc0NoYXJ0OiBib29sZWFuIHwgc3RyaW5nLFxuXHRcdFx0b0FwcGx5U3VwcG9ydGVkPzogeyBlbmFibGVTZWFyY2g6IGJvb2xlYW4gfVxuXHRcdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdFx0YklzQ2hhcnQgPSBiSXNDaGFydCA9PT0gXCJ0cnVlXCIgfHwgYklzQ2hhcnQgPT09IHRydWU7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBiSXNDaGFydCkge1xuXHRcdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0b0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLFxuXHRcdFx0XHRcdGdldFJlc291cmNlTW9kZWwob0ZpbHRlckJhcilcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYklzU2VhcmNoSWdub3JlZCA9ICFvQXBwbHlTdXBwb3J0ZWQ/LmVuYWJsZVNlYXJjaDtcblx0XHRcdFx0c1RleHQgPSBiSXNDaGFydFxuXHRcdFx0XHRcdD8gTWVzc2FnZVN0cmlwLmdldEFMUFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIGJJc1NlYXJjaElnbm9yZWQpXG5cdFx0XHRcdFx0OiBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgXCJcIik7XG5cdFx0XHRcdHJldHVybiBzVGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyXCIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0dGhpcy5fc2V0SW5pdGlhbEZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vIFJlbW92ZSB0aGUgaGFuZGxlciBvbiBiYWNrIG5hdmlnYXRpb24gdGhhdCBkaXNwbGF5cyBEcmFmdCBjb25maXJtYXRpb25cblx0XHRhd2FpdCB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgY29udGVudCBvZiBhIGN1c3RvbSB2aWV3IHVzZWQgaW4gYSBsaXN0IHJlcG9ydCBuZWVkcyB0byBiZSByZWZyZXNoZWQuXG5cdCAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBvbiB0aGUgRmlsdGVyQmFyIGFuZCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCxcblx0ICogb3Igd2hlbiBhIHRhYiB3aXRoIGN1c3RvbSBjb250ZW50IGlzIHNlbGVjdGVkLFxuXHQgKiBvciB3aGVuIHRoZSB2aWV3IGlzIGZvcmNlZCB0byBiZSByZWZyZXNoZWQgdGhyb3VnaCB0aGUgRXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGxpc3QgcmVwb3J0J3MgcHVibGljIG1ldGhvZCBzZXRUYWJDb250ZW50VG9CZVJlZnJlc2hlZE9uTmV4dE9wZW5pbmcuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSURcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2UgKHRhYkNoYW5nZWQsIHNlYXJjaCBvciBmb3JjZWRSZWZyZXNoKS5cblx0ICogVGhlIG1hcCBsb29rcyBsaWtlIHRoaXM6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCIgfCBcImZvcmNlZFJlZnJlc2hcIlxuXHQgKlx0fVxuXHQgKiA8L3ByZT48L2NvZGU+XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvblZpZXdOZWVkc1JlZnJlc2gobVBhcmFtZXRlcnM6IHVua25vd24pOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciAod2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24pLlxuXHQgKiBUeXBpY2FsbHksIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IHRhYiBpcyBncmV5ZWQgb3V0IHVudGlsIHRoZSBmaWx0ZXJzIGFyZSB2YWxpZGF0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKS5zbGljZSgxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIgaXMgcHJlc3NlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQ2xlYXIoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaW5pdGlhdGVzIHRoZSB1cGRhdGUgb2YgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgdGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvcklCTiBidXR0b25zLlxuXHQgKiBAcGFyYW0gYVRhYmxlcyBBcnJheSBvZiB0YWJsZXMgaW4gdGhlIGxpc3QgcmVwb3J0XG5cdCAqL1xuXHRfdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXM6IFRhYmxlW10pOiB2b2lkIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlKSB7XG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5KGFJQk5BY3Rpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICogQHBhcmFtIHNSb3dQYXRoIFRoZSBwYXRoIG9mIHRoZSB0YWJsZSByb3cgY29udGV4dCB0byBiZSBzY3JvbGxlZCB0b1xuXHQgKi9cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogQ29udHJvbCkge1xuXHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KG9UYWJsZSBhcyBUYWJsZSwgc1Jvd1BhdGgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBzaWxlbnQgZm9jdXMgb24gdGhlIGZpbHRlciBmaWVsZC4gU3VwcHJlc3NlcyB0aGUgb3BlbmluZyBvZiB0aGUgdHlwZS1haGVhZCBwb3B1cC5cblx0ICogQHBhcmFtIGZpbHRlckZpZWxkIFRoZSBmaWVsZCB3aGVyZSB0aGUgZm9jdXMgc2hvdWxkIGJlIHNldCBhZnRlciB0aGUgaW5pdGlhbCBsb2FkXG5cdCAqL1xuXHRfZm9jdXNTaWxlbnQoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlsdGVyRmllbGQuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0ZmlsdGVyRmllbGQuZm9jdXMoZm9jdXNJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBpbml0aWFsIGZvY3VzIGluIGEgbGlzdCByZXBvcnQgYmFzZWQgb24gdGhlIFVzZXIgRXhwZXJpZW5jZSBndWlkZWxpbmVzLlxuXHQgKlxuXHQgKi9cblx0X3NldEluaXRpYWxGb2N1cygpOiB2b2lkIHtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpLFxuXHRcdFx0aXNIZWFkZXJFeHBhbmRlZCA9IGR5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKCksXG5cdFx0XHRmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyO1xuXHRcdGlmIChmaWx0ZXJCYXIgJiYgIXRoaXMuX2lzRmlsdGVyQmFySGlkZGVuVXNlZCgpKSB7XG5cdFx0XHQvL0VuYWJsaW5nIG1hbmRhdG9yeSBmaWx0ZXIgZmllbGRzIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRpZiAoIWZpbHRlckJhci5nZXRTaG93TWVzc2FnZXMoKSkge1xuXHRcdFx0XHRmaWx0ZXJCYXIuc2V0U2hvd01lc3NhZ2VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzSGVhZGVyRXhwYW5kZWQpIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAob0ZpbHRlckl0ZW06IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIGZpcnN0IGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIG9yIG9uIHRoZSBmaXJzdCBmaWx0ZXIgZmllbGQgaWYgdGhlIHRhYmxlIGRhdGEgaXMgbG9hZGVkXG5cdFx0XHRcdC8vIERvIGEgXCJzaWxlbnRcIiBmb2N1cyBmb3IgRmlsdGVyRmllbGQsIGJ5IGFkZGluZyB0aGUgc2lsZW50IGF0dHJpYnV0ZS4gVGhlIHNpbGVudCBhdHRyaWJ1dGUgc3VwcHJlc3NlcyB0eXBlYWhlYWQgb3BlbmluZy5cblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSAmJiBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gQWRkIGNoZWNrIGZvciBhdmFpbGFibGUgZmlsdGVySXRlbXNcblx0XHRcdFx0XHRjb25zdCBmaWVsZFRvRm9jdXMgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKVswXTtcblx0XHRcdFx0XHRpZiAoZmllbGRUb0ZvY3VzLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9mb2N1c1NpbGVudChmaWVsZFRvRm9jdXMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQoZmllbGRUb0ZvY3VzIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpLmJ5SWQoYCR7dGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCl9LWJ0blNlYXJjaGApPy5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGluaXRpYWwgZm9jdXMgb24gdGhlIHRhYmxlIFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9nZXRUYWJsZSgpXG5cdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiBQcm9taXNlPHsgdGl0bGU/OiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmcgfT4ge1xuXHRcdGNvbnN0IG9NYW5pZmVzdEVudHJ5ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdHRpdGxlOiBvTWFuaWZlc3RFbnRyeS50aXRsZSxcblx0XHRcdHN1YnRpdGxlOiBvTWFuaWZlc3RFbnRyeS5zdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH0pO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2woKTogRmlsdGVyQmFyIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpOiBEeW5hbWljUGFnZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKSkgYXMgRHluYW1pY1BhZ2U7XG5cdH1cblxuXHRfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2woKTogQ29udHJvbCB7XG5cdFx0Ly8gSWYgdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBpcyBwYXJ0IG9mIHRoZSBET00gdHJlZSwgdGhlIFwiQWRhcHQgRmlsdGVyXCIgZGlhbG9nIGlzIG9wZW4sXG5cdFx0Ly8gYW5kIHdlIHJldHVybiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGFzIGFuIGFjdGl2ZSBjb250cm9sICh2aXNpYmxlIGZvciB0aGUgdXNlcilcblx0XHRjb25zdCBhZGFwdGF0aW9uRmlsdGVyQmFyID0gKHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyB7IGdldEluYnVpbHRGaWx0ZXI/OiBGdW5jdGlvbiB9KS5nZXRJbmJ1aWx0RmlsdGVyPy4oKTtcblx0XHRyZXR1cm4gYWRhcHRhdGlvbkZpbHRlckJhcj8uZ2V0UGFyZW50KCkgPyBhZGFwdGF0aW9uRmlsdGVyQmFyIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX2FwcGx5QXBwU3RhdGUodmlld0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlld0lkLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzRmlsdGVyQmFySGlkZGVuKCkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbihzQ29udHJvbDogc3RyaW5nKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1NlZ21lbnRlZEJ1dHRvbklkID0gKHNDb250cm9sID09PSBcIkNoYXJ0XCIgPyB0aGlzLmdldENoYXJ0Q29udHJvbCgpIDogdGhpcy5fZ2V0VGFibGUoKSk/LmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChzU2VnbWVudGVkQnV0dG9uSWQpO1xuXHR9XG5cblx0X2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoc1BhdGg6IHN0cmluZyk6IENvbnRyb2wgfCBNYWNyb0FQSSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KHNQYXRoKTtcblx0XHRyZXR1cm4gY29udHJvbElkID8gKHRoaXMuZ2V0VmlldygpLmJ5SWQoY29udHJvbElkKSBhcyBDb250cm9sKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZHluYW1pY0xpc3RSZXBvcnRJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZmlsdGVyQmFySWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVDaGFydElkXCIpIGFzIENoYXJ0VHlwZTtcblx0fVxuXG5cdF9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNWaXN1YWxGaWx0ZXJCYXJJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtcInZpc3VhbEZpbHRlclwiLCB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKV0pO1xuXHRcdHJldHVybiBzVmlzdWFsRmlsdGVyQmFySWQgPyB0aGlzLmdldFZpZXcoKS5ieUlkKHNWaXN1YWxGaWx0ZXJCYXJJZCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTogVmFyaWFudE1hbmFnZW1lbnQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L2lkXCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKTogTXVsdGlwbGVNb2RlQ29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0SWNvblRhYkJhcigpOiBJY29uVGFiQmFyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGVcIikgYXMgSWNvblRhYkJhcjtcblx0fVxuXG5cdF9nZXRUYWJsZSgpOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50O1xuXHRcdFx0cmV0dXJuIG9Db250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gKG9Db250cm9sIGFzIFRhYmxlKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlVGFibGVJZFwiKSBhcyBUYWJsZSB8IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Q29udHJvbHMoc0tleT86IHN0cmluZyk6IENvbnRyb2xbXSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogQ29udHJvbFtdID0gW107XG5cdFx0XHRjb25zdCBvVGFiTXVsdGlNb2RlID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLmNvbnRlbnQ7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IHVua25vd24pID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKSkgYXMgQ29udHJvbDtcblx0XHRcdFx0aWYgKG9Db250cm9sICYmIHNLZXkpIHtcblx0XHRcdFx0XHRpZiAoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpLmluY2x1ZGVzKGBmZTo6JHtzS2V5fWApKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2wgIT09IG51bGwpIHtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVmYXVsdFBhdGggPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXREZWZhdWx0UGF0aCh0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmlld3NcIikgfHwgW10pO1xuXHRcdHN3aXRjaCAoZGVmYXVsdFBhdGgpIHtcblx0XHRcdGNhc2UgXCJwcmltYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0Y2FzZSBcInNlY29uZGFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTtcblx0XHRcdGNhc2UgXCJib3RoXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB3aXRoIE11bHRpcGxlIFRhYmxlIG1vZGUuXG5cdCAqIEByZXR1cm5zIElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9tdWx0aVZpZXdzQ29udHJvbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBkYXRhIGF0IHN0YXJ0IHVwLlxuXHQgKiBAcmV0dXJucyBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2hhc011bHRpVmlzdWFsaXphdGlvbnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN1c3BlbmQgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLiBUaGUgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gSW5pdExvYWQgLSBEaXNhYmxlZC9BdXRvLlxuXHQgKiBJdCBpcyBlbmFibGVkIGxhdGVyIHdoZW4gdGhlIHZpZXcgc3RhdGUgaXMgc2V0LCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVycy5cblx0ICovXG5cdF9kaXNhYmxlSW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdC8vIGNoZWNrIGZvciBmaWx0ZXIgYmFyIGhpZGRlblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgYnkgZmxleCB0byBkZXRlcm1pbmUgaWYgdGhlIGFwcGx5QXV0b21hdGljYWxseSBzZXR0aW5nIG9uIHRoZSB2YXJpYW50IGlzIHZhbGlkLlxuXHQgKiBDYWxsZWQgb25seSBmb3IgU3RhbmRhcmQgVmFyaWFudCBhbmQgb25seSB3aGVuIHRoZXJlIGlzIGRpc3BsYXkgdGV4dCBzZXQgZm9yIGFwcGx5QXV0b21hdGljYWxseSAoRkUgb25seSBzZXRzIGl0IGZvciBBdXRvKS5cblx0ICogQHJldHVybnMgQm9vbGVhbiB0cnVlIGlmIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCgpOiBib29sZWFuIHtcblx0XHQvLyBXZSBhbHdheXMgcmV0dXJuIGZhbHNlIGFuZCB0YWtlIGNhcmUgb2YgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmUgdGhlIHNldHRpbmdzIGZvciBpbml0aWFsIGxvYWQgYmFzZWQgb25cblx0ICogLSBtYW5pZmVzdCBzZXR0aW5nIGluaXRMb2FkIC0gRW5hYmxlZC9EaXNhYmxlZC9BdXRvXG5cdCAqIC0gdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHZhcmlhbnRcblx0ICogLSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzXG5cdCAqIFdlIGRpc2FibGUgdGhlIGZpbHRlciBiYXIgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuYWJsZSBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0LlxuXHQgKi9cblx0X3NldEluaXRMb2FkKCk6IHZvaWQge1xuXHRcdC8vIGlmIGluaXRMb2FkIGlzIERpc2FibGVkIG9yIEF1dG8sIHN3aXRjaCBvZmYgZmlsdGVyIGJhciBzZWFyY2ggdGVtcG9yYXJpbHkgYXQgc3RhcnRcblx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVJbml0TG9hZCgpO1xuXHRcdH1cblx0XHQvLyBzZXQgaG9vayBmb3IgZmxleCBmb3Igd2hlbiBzdGFuZGFyZCB2YXJpYW50IGlzIHNldCAoYXQgc3RhcnQgb3IgYnkgdXNlciBhdCBydW50aW1lKVxuXHRcdC8vIHJlcXVpcmVkIHRvIG92ZXJyaWRlIHRoZSB1c2VyIHNldHRpbmcgJ2FwcGx5IGF1dG9tYXRpY2FsbHknIGJlaGF2aW91ciBpZiB0aGVyZSBhcmUgbm8gZmlsdGVyc1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50SWQgPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXRWYXJpYW50QmFja1JlZmVyZW5jZShcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0RGF0YSgpIGFzIExpc3RSZXBvcnREZWZpbml0aW9uXG5cdFx0KTtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHZhcmlhbnRNYW5hZ2VtZW50SWQgJiYgKHRoaXMuZ2V0VmlldygpLmJ5SWQodmFyaWFudE1hbmFnZW1lbnRJZCkgYXMgVmFyaWFudE1hbmFnZW1lbnQpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0KFxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCBhcyB7IHJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/OiBGdW5jdGlvbiB9XG5cdFx0XHQpPy5yZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50Py4odGhpcy5fYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFNoYXJlTW9kZWwoKTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogZGVhY3RpdmF0ZWQgZm9yIG5vdyAtIGN1cnJlbnRseSB0aGVyZSBpcyBubyBfdGVtcGxQcml2IGFueW1vcmUsIHRvIGJlIGRpc2N1c3NlZFxuXHRcdC8vIHRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseSBub3QgY2FsbGVkIGFueW1vcmUgZnJvbSB0aGUgaW5pdCBtZXRob2RcblxuXHRcdGNvbnN0IGZuR2V0VXNlciA9IE9iamVjdFBhdGguZ2V0KFwic2FwLnVzaGVsbC5Db250YWluZXIuZ2V0VXNlclwiKTtcblx0XHQvL3ZhciBvTWFuaWZlc3QgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpXCIpO1xuXHRcdC8vdmFyIHNCb29rbWFya0ljb24gPSAob01hbmlmZXN0ICYmIG9NYW5pZmVzdC5pY29ucyAmJiBvTWFuaWZlc3QuaWNvbnMuaWNvbikgfHwgXCJcIjtcblxuXHRcdC8vc2hhcmVNb2RlbDogSG9sZHMgYWxsIHRoZSBzaGFyaW5nIHJlbGV2YW50IGluZm9ybWF0aW9uIGFuZCBpbmZvIHVzZWQgaW4gWE1MIHZpZXdcblx0XHRjb25zdCBvU2hhcmVJbmZvID0ge1xuXHRcdFx0Ym9va21hcmtUaXRsZTogZG9jdW1lbnQudGl0bGUsIC8vVG8gbmFtZSB0aGUgYm9va21hcmsgYWNjb3JkaW5nIHRvIHRoZSBhcHAgdGl0bGUuXG5cdFx0XHRib29rbWFya0N1c3RvbVVybDogZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gYCMke3NIYXNofWAgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdH0sXG5cdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRUbyBiZSBhY3RpdmF0ZWQgb25jZSB0aGUgRkxQIHNob3dzIHRoZSBjb3VudCAtIHNlZSBjb21tZW50IGFib3ZlXG5cdFx0XHRcdFx0XHRcdGJvb2ttYXJrU2VydmljZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly92YXIgb1RhYmxlID0gb1RhYmxlLmdldElubmVyVGFibGUoKTsgb1RhYmxlIGlzIGFscmVhZHkgdGhlIHNhcC5mZSB0YWJsZSAoYnV0IG5vdCB0aGUgaW5uZXIgb25lKVxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB1c2UgdGFibGUuZ2V0TGlzdEJpbmRpbmdJbmZvIGluc3RlYWQgb2YgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHR2YXIgb0JpbmRpbmcgPSBvVGFibGUuZ2V0QmluZGluZyhcInJvd3NcIikgfHwgb1RhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBmbkdldERvd25sb2FkVXJsKG9CaW5kaW5nKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0sKi9cblx0XHRcdGlzU2hhcmVJbkphbUFjdGl2ZTogISFmbkdldFVzZXIgJiYgZm5HZXRVc2VyKCkuaXNKYW1BY3RpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCBvVGVtcGxhdGVQcml2YXRlTW9kZWwgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJfdGVtcGxQcml2XCIpIGFzIEpTT05Nb2RlbDtcblx0XHRvVGVtcGxhdGVQcml2YXRlTW9kZWwuc2V0UHJvcGVydHkoXCIvbGlzdFJlcG9ydC9zaGFyZVwiLCBvU2hhcmVJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIEFMUCBzY2VuYXJpbykuXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IG1DYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydCkge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNDYWNoZUtleSA9IGAke3NDaGFydEVudGl0eVNldH1DaGFydGA7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc0NhY2hlS2V5XSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRyb2xzL2lnbm9yZWRGaWVsZHNcIiwgaWdub3JlZEZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHNldHRpbmcgd2hldGhlciBGaWx0ZXJCYXIgaXMgaGlkZGVuIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICdoaWRlRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIGFzIGl0IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhpcyBzZXR0aW5nLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaGlkZUZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYnV0IHN0aWxsIGV4aXN0cyBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZyAndXNlSGlkZGVuRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW4gYXMgaXQgY2FuIGFsc28gaGlkZSB0aGUgRmlsdGVyQmFyLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnVzZUhpZGRlbkZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdF9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBCb29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50IHx8ICFrZXkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudHMgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRWYXJpYW50cygpO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdmFyaWFudHMuZmluZChmdW5jdGlvbiAodmFyaWFudCkge1xuXHRcdFx0cmV0dXJuIHZhcmlhbnQgJiYgdmFyaWFudC5nZXRLZXkoKSA9PT0ga2V5O1xuXHRcdH0pO1xuXHRcdHJldHVybiAoY3VycmVudFZhcmlhbnQgJiYgY3VycmVudFZhcmlhbnQuZ2V0UHJvcGVydHkoXCJleGVjdXRlT25TZWxlY3RcIikpIHx8IGZhbHNlO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogVmFyaWFudE1hbmFnZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKG9WTSAmJiAhc0tleS5zdGFydHNXaXRoKFwiJFwiKSAmJiBBcnJheS5pc0FycmF5KG9Db25kaXRpb25zW3NLZXldKSAmJiBvQ29uZGl0aW9uc1tzS2V5XS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIGxvYWQgZGF0YSBhcyBwZXIgdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHRoZSB2YXJpYW50XG5cdFx0XHRcdFx0XHRjb25zdCBzdGFuZGFyZFZhcmlhbnQgPSBvVk0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YXJpYW50LmdldEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN0YW5kYXJkVmFyaWFudCAmJiBzdGFuZGFyZFZhcmlhbnQuZ2V0RXhlY3V0ZU9uU2VsZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF91cGRhdGVUYWJsZShvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBDaGFydCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gKG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuX2dldENoYXJ0KG9DaGFydCk7XG5cdFx0aWYgKCEob0lubmVyQ2hhcnQgJiYgb0lubmVyQ2hhcnQuaXNCb3VuZChcImRhdGFcIikpIHx8IHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcykge1xuXHRcdFx0KG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZpbHRlciB0b2dnbGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gYnV0dG9uVmlzaWJsZSBGaWx0ZXIgdG9nZ2xlIGJ1dHRvbiB2aXNpYmlsaXR5XG5cdCAqL1xuXHRzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGJ1dHRvblZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0ZmlsdGVyQmFyPy5nZXRTZWdtZW50ZWRCdXR0b24oKT8uc2V0VmlzaWJsZShidXR0b25WaXNpYmxlKTtcblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uSW5saW5lRWRpdFNhdmUodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdHRoaXMuaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdFNhdmUoKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyU2VhcmNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkhLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlcnNDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIFBlbmRpbmcgZmlsdGVycyBpbnRvIEZpbHRlckJhciB0byBiZSB1c2VkIGZvciBjdXN0b20gdmlld3Ncblx0XHRcdFx0dGhpcy5vblBlbmRpbmdGaWx0ZXJzKCk7XG5cblx0XHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZGl0aW9uc0Jhc2VkXCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChvRmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IChvRXZlbnQgYXMgVUk1RXZlbnQpLmdldFBhcmFtZXRlcnMoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gcGFyYW1ldGVycy5vcmlnaW5hbFNvdXJjZSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50S2V5ID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImtleVwiKTtcblx0XHRcdGNvbnN0IG11bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cblx0XHRcdGlmIChtdWx0aU1vZGVDb250cm9sICYmICF2YXJpYW50TWFuYWdlbWVudD8uZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuQWN0aW9uVG9vbGJhclwiKSkge1xuXHRcdFx0XHQvL05vdCBhIENvbnRyb2wgVmFyaWFudFxuXHRcdFx0XHRtdWx0aU1vZGVDb250cm9sPy5pbnZhbGlkYXRlQ29udGVudCgpO1xuXHRcdFx0XHRtdWx0aU1vZGVDb250cm9sPy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzZXRUaW1lb3V0IGNhdXNlIHRoZSB2YXJpYW50IG5lZWRzIHRvIGJlIGFwcGxpZWQgYmVmb3JlIGp1ZGdpbmcgdGhlIGF1dG8gc2VhcmNoIG9yIHVwZGF0aW5nIHRoZSBhcHAgc3RhdGVcblx0XHRcdHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhcj8uZ2V0RmlsdGVySXRlbXMoKS5maW5kKGZ1bmN0aW9uIChmaWx0ZXJJdGVtKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZpbHRlckl0ZW0uZ2V0UmVxdWlyZWQoKSAmJiBmaWx0ZXJJdGVtLmdldENvbmRpdGlvbnMoKS5sZW5ndGggPT09IDA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRcdFx0ZHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKHZhcmlhbnRNYW5hZ2VtZW50KSkge1xuXHRcdFx0XHRcdC8vIHRoZSBhcHAgc3RhdGUgd2lsbCBiZSB1cGRhdGVkIHZpYSBvblNlYXJjaCBoYW5kbGVyXG5cdFx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIS5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyQVBJLnRyaWdnZXJTZWFyY2goKTtcblx0XHRcdFx0fSBlbHNlIGlmICghdGhpcy5fZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KHZhcmlhbnRNYW5hZ2VtZW50LCBjdXJyZW50VmFyaWFudEtleSkpIHtcblx0XHRcdFx0XHRtdWx0aU1vZGVDb250cm9sPy5zZXRGcmVlemVDb250ZW50KGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHRcdFx0ZHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDApO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmUhISFcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCAxMDAwKTtcblx0XHR9LFxuXHRcdG9uU2VhcmNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcjsgLy8gb25zZWFyY2ggaXMgY2FsbGVkIG9ubHkgaWYgdGhlIGZpbHRlcmJhciBleGlzdHNcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgYkhpZGVEcmFmdCA9IEZpbHRlclV0aWxzLmdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0KG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgYkhpZGVEcmFmdCk7XG5cdFx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0aWYgKCF0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9NZGNDaGFydCkge1xuXHRcdFx0XHQvLyBkaXNhYmxlIGJvdW5kIGFjdGlvbnMgVE9ETzogdGhpcyBjbGVhcnMgZXZlcnl0aGluZyBmb3IgdGhlIGNoYXJ0P1xuXHRcdFx0XHQob01kY0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFwiXCIsIHt9KTtcblxuXHRcdFx0XHRjb25zdCBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0ID0gb01kY0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwicGFnZUludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvL2xvZ2ljIGZvciBleHBhbnNpb24gb3IgY29sbGFwc2Ugb2YgZmlsdGVyIGJhciBzdGFydHNcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKGR5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKCkgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0ZHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vc2V0dGluZyBpdCB0byBmYWxzZSBzbyB0aGF0IGZ1cnRoZXIgc2VhcmNoIG9yICdHbycgdHJpZ2dlcnMgd29uJ3QgY29sbGFwc2UgdGhlIGZpbHRlciBiYXJcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZFwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHN0b3JlIGZpbHRlciBiYXIgY29uZGl0aW9ucyB0byB1c2UgbGF0ZXIgd2hpbGUgbmF2aWdhdGlvblxuXHRcdFx0U3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKVxuXHRcdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGUpID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpbHRlckJhckNvbmRpdGlvbnMgPSBvRXh0ZXJuYWxTdGF0ZS5maWx0ZXI7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0aWYgKERldmljZS5zeXN0ZW0ucGhvbmUpIHtcblx0XHRcdFx0Y29uc3Qgb0R5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuc2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdFx0b0NvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8eyBkYXRhOiB1bmtub3duIH0sIENoYXJ0VHlwZT4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRDb250ZW50KCkgYXMgQ2hhcnQsXG5cdFx0XHRcdG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCksXG5cdFx0XHRcdGFEYXRhID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImRhdGFcIiksXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoYURhdGEpIHtcblx0XHRcdFx0Q2hhcnRVdGlscy5zZXRDaGFydEZpbHRlcnMob01kY0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAob1RhYmxlKSB7XG5cdFx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkS2V5OiBzdHJpbmcgPVxuXHRcdFx0XHQob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSkuc2VsZWN0ZWRLZXkgfHwgKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgeyBrZXk6IHN0cmluZyB9KS5rZXk7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgc2VsZWN0ZWRLZXkpO1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cblx0XHRcdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRcdGlmIChvVGFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ6XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHQvLyBzZXRUaW1lb3V0IGNhdXNlIHRoZSB2YXJpYW50IG5lZWRzIHRvIGJlIGFwcGxpZWQgYmVmb3JlIGp1ZGdpbmcgdGhlIGF1dG8gc2VhcmNoIG9yIHVwZGF0aW5nIHRoZSBhcHAgc3RhdGVcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0ZvclNlZ21lbnRlZEJ1dHRvbihzZWxlY3RlZEtleSk7XG5cdFx0fSxcblx0XHRvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGV2ZW50OiBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KCEhZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSk7XG5cdFx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKS5hbm5vdW5jZShcblx0XHRcdFx0XHRcdGZpbHRlckJhci5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCkuZmlsdGVyc1RleHQgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogSGFuZGxlcyBmb2N1cyBmb3IgdGhlIHNlZ21lbnRlZCBidXR0b24gYmFzZWQgb24gdGhlIHNlbGVjdGVkIGtleS5cblx0ICogQHBhcmFtIHNlbGVjdGVkS2V5IFRoZSBrZXkgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RlZCB0ZW1wbGF0ZSBjb250ZW50IHZpZXdcblx0ICovXG5cdGZvY3VzSGFuZGxpbmdGb3JTZWdtZW50ZWRCdXR0b24oc2VsZWN0ZWRLZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRsZXQgc2VnbWVudGVkQnV0dG9uSWQ6IHN0cmluZztcblx0XHRzd2l0Y2ggKHNlbGVjdGVkS2V5KSB7XG5cdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU6XG5cdFx0XHRcdHNlZ21lbnRlZEJ1dHRvbklkID0gZ2VuZXJhdGUoW29UYWJsZT8uZ2V0SWQoKSwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKTtcblx0XHRcdFx0dGhpcy5hZGRGb2N1c0RlbGVnYXRlKHNlZ21lbnRlZEJ1dHRvbklkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ6XG5cdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkOlxuXHRcdFx0XHRzZWdtZW50ZWRCdXR0b25JZCA9IGdlbmVyYXRlKFtvQ2hhcnQ/LmdldElkKCksIFwiU2VnbWVudGVkQnV0dG9uXCIsIFwiVGVtcGxhdGVDb250ZW50Vmlld1wiXSk7XG5cdFx0XHRcdHRoaXMuYWRkRm9jdXNEZWxlZ2F0ZShzZWdtZW50ZWRCdXR0b25JZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gZXZlbnQgZGVsZWdhdGUgdG8gYSBjb250cm9sIGFuZCBzZXRzIGZvY3VzIG9uIGl0LlxuXHQgKiBAcGFyYW0gc2VnbWVudGVkQnV0dG9uSWQgVGhlIGNvbnRyb2wgdG8gd2hpY2ggdGhlIGV2ZW50IGRlbGVnYXRlIHdpbGwgYmUgYWRkZWQuXG5cdCAqL1xuXHRhZGRGb2N1c0RlbGVnYXRlKHNlZ21lbnRlZEJ1dHRvbklkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBzZWdtZW50ZWRCdXR0b24gPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNlZ21lbnRlZEJ1dHRvbklkKTtcblx0XHRpZiAoc2VnbWVudGVkQnV0dG9uKSB7XG5cdFx0XHRjb25zdCBldmVudERlbGVnYXRlID0ge1xuXHRcdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0c2VnbWVudGVkQnV0dG9uLmZvY3VzKCk7XG5cdFx0XHRcdFx0c2VnbWVudGVkQnV0dG9uLnJlbW92ZUV2ZW50RGVsZWdhdGUoZXZlbnREZWxlZ2F0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRzZWdtZW50ZWRCdXR0b24uYWRkRXZlbnREZWxlZ2F0ZShldmVudERlbGVnYXRlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqL1xuXHRhc3luYyBfc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KGZpbHRlckJhcjogRmlsdGVyQmFyLCBpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdGNvbnN0IHN2ID0gYXdhaXQgZmlsdGVyQmFyQVBJLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudFwiLCBzdik7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEVycm9yIGZldGNoaW5nIHNlbGVjdGlvbiB2YXJpYW50IG9uIGZpbHRlciBjaGFuZ2U6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQgZnJvbSBpbnRlcm5hbCBtb2RlbC5cblx0ICogQHJldHVybnMgU2VsZWN0aW9uVmFyaWFudFxuXHQgKi9cblx0Z2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCgpOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIpIGFzIFNlbGVjdGlvblZhcmlhbnQpIHx8IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2REEsTUFBTUEsbUJBQW1CLEdBQUdDLFdBQVcsQ0FBQ0QsbUJBQW1CO0lBQzFERSxlQUFlLEdBQUdELFdBQVcsQ0FBQ0MsZUFBZTs7RUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBLElBTU1DLG9CQUFvQixJQUFBQyxJQUFBLEdBRHpCQyxjQUFjLENBQUMsa0RBQWtELENBQUMsRUFBQUMsS0FBQSxHQUVqRUMsY0FBYyxDQUNkQyxlQUFlLENBQUNDLFFBQVEsQ0FBQztJQUN4QkMsY0FBYyxFQUFFLFNBQUFBLENBQUEsRUFBaUM7TUFDL0MsSUFBSSxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUEwQkMsZUFBZSxDQUFDLENBQUM7SUFDM0U7RUFDRCxDQUFDLENBQ0YsQ0FBQyxFQUFBQyxLQUFBLEdBR0FQLGNBQWMsQ0FDZFEsNkJBQTZCLENBQUNOLFFBQVEsQ0FBQztJQUN0Q08sWUFBWSxFQUFFLFNBQUFBLENBQUEsRUFBK0M7TUFDNUQsT0FBUSxJQUFJLENBQUNDLElBQUksQ0FBMEJDLG1CQUFtQixDQUFDLENBQUM7SUFDakU7RUFDRCxDQUFDLENBQ0YsQ0FBQyxFQUFBQyxLQUFBLEdBR0FaLGNBQWMsQ0FBQ2EsV0FBVyxDQUFDWCxRQUFRLENBQUNZLG1CQUFtQixDQUFDLENBQUMsRUFB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
|
|
954
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjMTEiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTIiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTQiLCJleHRlbnNpYmxlIiwiX2RlYzE1IiwiX2RlYzE2IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbkZpbHRlckxheW91dFN3aXRjaCIsIm9FdmVudCIsImN1cnJlbnRLZXkiLCJnZXRTb3VyY2UiLCJzZWxlY3RlZEtleSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzZXRWaXNpYmxlIiwib25JbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXRGbG93IiwiaW5saW5lRWRpdFNhdmUiLCJvbkZpbHRlclNlYXJjaCIsImZpbHRlckJhckFQSSIsImdldFBhcmVudCIsInRyaWdnZXJTZWFyY2giLCJvbkZpbHRlcnNDaGFuZ2VkIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvblBlbmRpbmdGaWx0ZXJzIiwiZ2V0UGFyYW1ldGVyIiwic2V0UHJvcGVydHkiLCJfc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50Iiwib25WYXJpYW50U2VsZWN0ZWQiLCJwYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsIm9yaWdpbmFsU291cmNlIiwiY3VycmVudFZhcmlhbnRLZXkiLCJtdWx0aU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJpc0EiLCJpbnZhbGlkYXRlQ29udGVudCIsInNldEZyZWV6ZUNvbnRlbnQiLCJzZXRUaW1lb3V0IiwiZmlsdGVyQmFyIiwiZHluYW1pY1BhZ2UiLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sIiwiZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIiwiZ2V0RmlsdGVySXRlbXMiLCJmaW5kIiwiZmlsdGVySXRlbSIsImdldFJlcXVpcmVkIiwiZ2V0Q29uZGl0aW9ucyIsInNldEhlYWRlckV4cGFuZGVkIiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwib25WYXJpYW50U2F2ZWQiLCJvblNlYXJjaCIsIm9NZGNDaGFydCIsImdldENoYXJ0Q29udHJvbCIsImJIaWRlRHJhZnQiLCJGaWx0ZXJVdGlscyIsImdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0IiwiX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUGFnZUludGVybmFsTW9kZWxDb250ZXh0Iiwic1RlbXBsYXRlQ29udGVudFZpZXciLCJnZXRQcm9wZXJ0eSIsImdldFBhdGgiLCJDaGFydCIsImhhc1BlbmRpbmdDaGFydENoYW5nZXMiLCJUYWJsZSIsImhhc1BlbmRpbmdUYWJsZUNoYW5nZXMiLCJEZXZpY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwiZ2V0SGVhZGVyRXhwYW5kZWQiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJ0aGVuIiwib0V4dGVybmFsU3RhdGUiLCJmaWx0ZXJCYXJDb25kaXRpb25zIiwiZmlsdGVyIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsInBob25lIiwib0R5bmFtaWNQYWdlIiwiX2lzSW5pdExvYWRFbmFibGVkIiwic2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eSIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsIm9Db250cm9sbGVyIiwic091dGJvdW5kVGFyZ2V0Iiwib0NvbnRleHQiLCJzQ3JlYXRlUGF0aCIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCIsImdldENvbnRlbnQiLCJvVGFibGUiLCJfZ2V0VGFibGUiLCJhRGF0YSIsIkNoYXJ0VXRpbHMiLCJzZXRDaGFydEZpbHRlcnMiLCJyZWJpbmQiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJrZXkiLCJvQ2hhcnQiLCJfdXBkYXRlVGFibGUiLCJfdXBkYXRlQ2hhcnQiLCJIeWJyaWQiLCJmb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZXZlbnQiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwiZ2V0T3duZXJDb21wb25lbnQiLCJ1aU1vZGVsQ29udGV4dCIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiYWxwQ29udGVudFZpZXciLCJfZ2V0RGVmYXVsdFBhdGgiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsIndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbiIsIl9zZXRJbml0TG9hZCIsImlzRWRpdGFibGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImR5bm1pY1BhZ2VIZWFkZXJUaXRsZSIsImdldFRpdGxlIiwiYnJlYWRjcnVtYnNCQiIsImdldEJyZWFkY3J1bWJzIiwic2V0QnJlYWRjcnVtYkxpbmtzIiwib25FeGl0IiwiZGVzdHJveSIsImludGVybmFsTW9kZWxDb250ZXh0IiwicGFnZVJlYWR5Iiwid2FpdEZvciIsIl9hcHBseUFwcFN0YXRlIiwiQ29tbW9uVXRpbHMiLCJpc0FwcENvbXBvbmVudEJ1c3kiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwidXBkYXRlQWN0aW9ucyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJ0YWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwidGFibGVBUEkiLCJnZXRSb3V0aW5nU2VydmljZSIsIndhaXRGb3JCaW5kaW5nQ2xlYW51cCIsImF0dGFjaEV2ZW50T25jZSIsIl91cGRhdGVUYWJsZUFjdGlvbnMiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsImdldE1vZGVsIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsImUiLCJ3YXJuaW5nIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImlzSW5zaWdodHNFbmFibGVkIiwib25QYWdlUmVhZHkiLCJtUGFyYW1ldGVycyIsImZvcmNlRm9jdXMiLCJfc2V0SW5pdGlhbEZvY3VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwidW5kZWZpbmVkIiwib25WaWV3TmVlZHNSZWZyZXNoIiwic2xpY2UiLCJvbkFmdGVyQ2xlYXIiLCJhSUJOQWN0aW9ucyIsImZvckVhY2giLCJnZXRJQk5BY3Rpb25zIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJ1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5IiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9mb2N1c1NpbGVudCIsImZpbHRlckZpZWxkIiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiX2ZvY3VzV2hlbkhlYWRlckV4cGFuZGVkIiwib0ZpbHRlckl0ZW0iLCJiYXNpY1NlYXJjaEZpZWxkIiwiZ2V0QmFzaWNTZWFyY2hGaWVsZCIsImZpZWxkVG9Gb2N1cyIsImlzRm9jdXNhYmxlIiwiYnlJZCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sSWQiLCJpc0hlYWRlckV4cGFuZGVkIiwiX2lzRmlsdGVyQmFySGlkZGVuVXNlZCIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsImZvY3VzUm93IiwiaW5mbyIsIl9nZXRCcm93c2VyVGl0bGUiLCJfcGFnZVRpdGxlSW5mb3JtYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInRpdGxlIiwic3VidGl0bGUiLCJzdWJUaXRsZSIsImludGVudCIsImljb24iLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhZGFwdGF0aW9uRmlsdGVyQmFyIiwiZ2V0SW5idWlsdEZpbHRlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJlbmFibGVSZXF1ZXN0cyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIl9pc011bHRpTW9kZSIsInNldENvdW50c091dERhdGVkIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsInNDb250cm9sIiwic1NlZ21lbnRlZEJ1dHRvbklkIiwic1BhdGgiLCJjb250cm9sSWQiLCJfZ2V0UGFnZU1vZGVsIiwiX2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2wiLCJzVmlzdWFsRmlsdGVyQmFySWQiLCJTdGFibGVJZEhlbHBlciIsImdlbmVyYXRlIiwiX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sIiwiX2dldEljb25UYWJCYXIiLCJvQ29udHJvbCIsImdldFNlbGVjdGVkSW5uZXJDb250cm9sIiwiY29udGVudCIsInNLZXkiLCJhQ29udHJvbHMiLCJvVGFiTXVsdGlNb2RlIiwiZ2V0SXRlbXMiLCJvSXRlbSIsImdldEtleSIsImluY2x1ZGVzIiwicHVzaCIsImRlZmF1bHRQYXRoIiwiTGlzdFJlcG9ydFRlbXBsYXRpbmciLCJnZXREZWZhdWx0UGF0aCIsImluaXRMb2FkTW9kZSIsImdldFZpZXdEYXRhIiwiaW5pdGlhbExvYWQiLCJFbmFibGVkIiwiX2Rpc2FibGVJbml0TG9hZCIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsImdldERhdGEiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImFDaGFydHMiLCJzQ2hhcnRFbnRpdHlQYXRoIiwic0NoYXJ0RW50aXR5U2V0Iiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwidmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudCIsIm9WTSIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImdldEV4ZWN1dGVPblNlbGVjdCIsImlzVGFibGVCb3VuZCIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiaXNCb3VuZCIsImdldEJpbmRpbmdJbmZvIiwiYnV0dG9uVmlzaWJsZSIsImdldFNlZ21lbnRlZEJ1dHRvbiIsInNlZ21lbnRlZEJ1dHRvbklkIiwiZ2V0SWQiLCJhZGRGb2N1c0RlbGVnYXRlIiwic2VnbWVudGVkQnV0dG9uIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZXZlbnREZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInN2IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImVyciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsImdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgdHlwZSB7IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVRpdGxlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IEtQSU1hbmFnZW1lbnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0tQSU1hbmFnZW1lbnRcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBTaWRlRWZmZWN0cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL3RlbXBsYXRlcy9MaXN0UmVwb3J0Q29udmVydGVyXCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlkSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgVGl0bGVJbmZvcm1hdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCcmVhZGNydW1icyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9CcmVhZGNydW1ic1wiO1xuaW1wb3J0IHR5cGUgQ2hhcnRUeXBlIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnREZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydERlbGVnYXRlXCI7XG5pbXBvcnQgQ2hhcnRVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFV0aWxzXCI7XG5pbXBvcnQgdHlwZSBDb250ZW50U3dpdGNoZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udGVudFN3aXRjaGVyL0NvbnRlbnRTd2l0Y2hlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCBTaWRlRWZmZWN0c092ZXJyaWRlIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvb3ZlcnJpZGVzL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJDb250YWluZXJJdGVtIGZyb20gXCJzYXAvbS9UYWJDb250YWluZXJJdGVtXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBoYXNoZXIgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2hhc2hlclwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUFkZGl0aW9uYWxJbmZvIH0gZnJvbSBcInNhcC91c2hlbGwvdWk1c2VydmljZS9TaGVsbFVJU2VydmljZVwiO1xuaW1wb3J0ICogYXMgTGlzdFJlcG9ydFRlbXBsYXRpbmcgZnJvbSBcIi4vTGlzdFJlcG9ydFRlbXBsYXRpbmdcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5jb25zdCBUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gQ29yZUxpYnJhcnkuVGVtcGxhdGVDb250ZW50Vmlldyxcblx0SW5pdGlhbExvYWRNb2RlID0gQ29yZUxpYnJhcnkuSW5pdGlhbExvYWRNb2RlO1xuXG4vKipcbiAqIENvbnRyb2xsZXIgY2xhc3MgZm9yIHRoZSBsaXN0IHJlcG9ydCBwYWdlLCB1c2VkIGluc2lkZSBhbiBTQVAgRmlvcmkgZWxlbWVudHMgYXBwbGljYXRpb24uXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiKVxuY2xhc3MgTGlzdFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoe1xuXHRcdFx0b25BZnRlckJpbmRpbmc6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbFJvdXRpbmcpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX29uQWZ0ZXJCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2lkZUVmZmVjdHMub3ZlcnJpZGUoU2lkZUVmZmVjdHNPdmVycmlkZSkpXG5cdF9zaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgZmlsdGVyQmFyQ29uZGl0aW9ucz86IHVua25vd247XG5cblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGV4dGVuc2lvbiBBUEkgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUEkuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCB1aU1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgZmFsc2UpO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdFx0dWlNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgeyBpc0VkaXRhYmxlOiBmYWxzZSB9KTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGR5bm1pY1BhZ2VIZWFkZXJUaXRsZSA9IGR5bmFtaWNQYWdlPy5nZXRUaXRsZSgpO1xuXHRcdGNvbnN0IGJyZWFkY3J1bWJzQkIgPSBkeW5taWNQYWdlSGVhZGVyVGl0bGUuZ2V0QnJlYWRjcnVtYnMoKSBhcyBCcmVhZGNydW1icyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYnJlYWRjcnVtYnNCQikge1xuXHRcdFx0YnJlYWRjcnVtYnNCQi5zZXRCcmVhZGNydW1iTGlua3MoXCJcIik7XG5cdFx0fVxuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLmZpbHRlckJhckNvbmRpdGlvbnM7XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdGFzeW5jIF9vbkFmdGVyQmluZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKCFpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiKSkge1xuXHRcdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLl9hcHBseUFwcFN0YXRlKCkpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGF3YWl0IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuaXNBcHBDb21wb25lbnRCdXN5KCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikgYXMgVGFibGVbXTtcblx0XHRsZXQgdXBkYXRlQWN0aW9ucyA9IHRydWU7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0YWJsZT8uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0dXBkYXRlQWN0aW9ucyA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSB0YWJsZSBjb250ZW50IHVzaW5nIHNpZGUgZWZmZWN0cyAobGlzdEJpbmRpbmcucmVmcmVzaCBkb2Vzbid0IGtlZXAgZXhwYW5zaW9uIHN0YXRlcyBpbiBhIFRyZWVUYWJsZSlcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKVxuXHRcdFx0XHRcdC5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdFx0LndhaXRGb3JCaW5kaW5nQ2xlYW51cCgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cdFx0Y29uc3QgZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk7XG5cdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcblx0XHRcdC5pc0luc2lnaHRzRW5hYmxlZCgpXG5cdFx0XHQudGhlbigoaXNJbnNpZ2h0c0VuYWJsZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzU3VwcG9ydGVkXCIsIGlzSW5zaWdodHNFbmFibGVkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgaW5zaWdodHMgYXJlIGVuYWJsZWRcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Zm9ybWF0dGVycyA9IHtcblx0XHRzZXRBTFBDb250cm9sTWVzc2FnZVN0cmlwKFxuXHRcdFx0dGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRhSWdub3JlZEZpZWxkczogc3RyaW5nW10sXG5cdFx0XHRiSXNDaGFydDogYm9vbGVhbiB8IHN0cmluZyxcblx0XHRcdG9BcHBseVN1cHBvcnRlZD86IHsgZW5hYmxlU2VhcmNoOiBib29sZWFuIH1cblx0XHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRcdGJJc0NoYXJ0ID0gYklzQ2hhcnQgPT09IFwidHJ1ZVwiIHx8IGJJc0NoYXJ0ID09PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgYklzQ2hhcnQpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdFx0XHRnZXRSZXNvdXJjZU1vZGVsKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlYXJjaElnbm9yZWQgPSAhb0FwcGx5U3VwcG9ydGVkPy5lbmFibGVTZWFyY2g7XG5cdFx0XHRcdHNUZXh0ID0gYklzQ2hhcnRcblx0XHRcdFx0XHQ/IE1lc3NhZ2VTdHJpcC5nZXRBTFBUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBiSXNTZWFyY2hJZ25vcmVkKVxuXHRcdFx0XHRcdDogTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIFwiXCIpO1xuXHRcdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlclwiKVxuXHRhc3luYyBvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogeyBmb3JjZUZvY3VzPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdHRoaXMuX3NldEluaXRpYWxGb2N1cygpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBjdXN0b20gdmlldyB1c2VkIGluIGEgbGlzdCByZXBvcnQgbmVlZHMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBUaGlzIGhhcHBlbnMgZWl0aGVyIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2Ugb24gdGhlIEZpbHRlckJhciBhbmQgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQsXG5cdCAqIG9yIHdoZW4gYSB0YWIgd2l0aCBjdXN0b20gY29udGVudCBpcyBzZWxlY3RlZCxcblx0ICogb3Igd2hlbiB0aGUgdmlldyBpcyBmb3JjZWQgdG8gYmUgcmVmcmVzaGVkIHRocm91Z2ggdGhlIEV4dGVuc2lvbiBBUEkgZm9yIHRoZSBsaXN0IHJlcG9ydCdzIHB1YmxpYyBtZXRob2Qgc2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBjdXN0b21pemF0aW9uLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSUQsXG5cdCAqIGFuZCB0aGUgdmlldyByZWZyZXNoIGNhdXNlIHN1Y2ggYXMgdGFiQ2hhbmdlZCwgc2VhcmNoLCBvciBmb3JjZWRSZWZyZXNoLlxuXHQgKiBTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlIG9mIGEgbWFwOlxuXHQgKiA8Y29kZT48cHJlPlxuXHQgKiBcdHtcblx0ICogXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0ICogXHRcdFx0Q291bnRyeTogW1xuXHQgKiBcdFx0XHRcdHtcblx0ICogXHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCJcblx0ICpcdFx0XHRcdFx0dmFsaWRhdGVkOiBcIk5vdFZhbGlkYXRlZFwiXG5cdCAqXHRcdFx0XHRcdHZhbHVlczogW1wiR2VybWFueVwiLCAuLi5dXG5cdCAqIFx0XHRcdFx0fSxcblx0ICogXHRcdFx0XHQuLi5cblx0ICogXHRcdFx0XVxuXHQgKiBcdFx0XHQuLi5cblx0ICogXHRcdH0sXG5cdCAqXHRcdGN1cnJlbnRUYWJJZDogXCJmZTo6Q3VzdG9tVGFiOjp0YWIxXCIsXG5cdCAqXHRcdHJlZnJlc2hDYXVzZTogXCJ0YWJDaGFuZ2VkXCIgfCBcInNlYXJjaFwiIHwgXCJmb3JjZWRSZWZyZXNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiB1bmtub3duKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsdGVyIG9yIHNlYXJjaCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSBGaWx0ZXJCYXIsXG5cdCAqIGJ1dCBoYXMgbm90IGJlZW4gdmFsaWRhdGVkIHlldCBieSB0aGUgZW5kIHVzZXIgd2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24uXG5cdCAqIFR5cGljYWxseSwgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgdGFiIGlzIGdyZXllZCBvdXQgdW50aWwgdGhlIGZpbHRlcnMgYXJlIHZhbGlkYXRlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgY3VzdG9taXphdGlvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBlbmRpbmdGaWx0ZXJzKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0Z2V0Q3VycmVudEVudGl0eVNldCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYWJsZSgpPy5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBvbiB0aGUgRmlsdGVyQmFyIGlzIHByZXNzZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25BZnRlckNsZWFyKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBUYWJsZVtdKTogdm9pZCB7XG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlTWVudUJ1dHRvblZpc2libGl0eShhSUJOQWN0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2Nyb2xscyB0byBhIHNwZWNpZmljIHJvdyBvbiBhbGwgdGhlIGF2YWlsYWJsZSB0YWJsZXMuXG5cdCAqIEBwYXJhbSBzUm93UGF0aCBUaGUgcGF0aCBvZiB0aGUgdGFibGUgcm93IGNvbnRleHQgdG8gYmUgc2Nyb2xsZWQgdG9cblx0ICovXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKS5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IENvbnRyb2wpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUgYXMgVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgc2lsZW50IGZvY3VzIG9uIHRoZSBmaWx0ZXIgZmllbGQuIFN1cHByZXNzZXMgdGhlIG9wZW5pbmcgb2YgdGhlIHR5cGUtYWhlYWQgcG9wdXAuXG5cdCAqIEBwYXJhbSBmaWx0ZXJGaWVsZCBUaGUgZmllbGQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZSBzZXQgYWZ0ZXIgdGhlIGluaXRpYWwgbG9hZFxuXHQgKi9cblx0X2ZvY3VzU2lsZW50KGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpbHRlckZpZWxkLmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0Zm9jdXNJbmZvLnRhcmdldEluZm8gPSB7IHNpbGVudDogdHJ1ZSB9O1xuXHRcdGZpbHRlckZpZWxkLmZvY3VzKGZvY3VzSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZm9jdXMgd2hlbiB0aGUgaGVhZGVyIGlzIGV4cGFuZGVkLlxuXHQgKiBUaGUgcHJpb3JpdGllcyBhcmU6ICgxKSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCAoMikgc2VhcmNoIGZpZWxkIGlmIGZvY3VzYWJsZSBvciBmaXJzdCBmaWx0ZXIgZmllbGQsIGFuZCAoMykgR28gYnV0dG9uLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIF9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKG9GaWx0ZXJJdGVtOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHR9KTtcblx0XHQvL0ZvY3VzaW5nIG9uIHRoZSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCBvciBvbiB0aGUgZmlyc3QgZmlsdGVyIGZpZWxkIGlmIHRoZSB0YWJsZSBkYXRhIGlzIGxvYWRlZFxuXHRcdC8vIERvIGEgXCJzaWxlbnRcIiBmb2N1cyBmb3IgRmlsdGVyRmllbGQsIGJ5IGFkZGluZyB0aGUgc2lsZW50IGF0dHJpYnV0ZS4gVGhlIHNpbGVudCBhdHRyaWJ1dGUgc3VwcHJlc3NlcyB0eXBlYWhlYWQgb3BlbmluZy5cblx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpICYmIGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIElmIHRoZXJlIGlzIG5vIGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIHNldCBzaWxlbnQgZm9jdXMgb24gc2VhcmNoIGZpZWxkIChpZiBmb2N1c2FibGUpLCBvdGhlcndpc2Ugb24gZmlyc3QgZmlsdGVyIGZpZWxkXG5cdFx0XHRjb25zdCBiYXNpY1NlYXJjaEZpZWxkID0gZmlsdGVyQmFyLmdldEJhc2ljU2VhcmNoRmllbGQoKTtcblx0XHRcdGNvbnN0IGZpZWxkVG9Gb2N1cyA9IGJhc2ljU2VhcmNoRmllbGQ/LmlzRm9jdXNhYmxlKCkgPyBiYXNpY1NlYXJjaEZpZWxkIDogZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKClbMF07XG5cdFx0XHRpZiAoZmllbGRUb0ZvY3VzLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpZWxkVG9Gb2N1cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmllbGRUb0ZvY3VzIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuYnlJZChgJHt0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKX0tYnRuU2VhcmNoYCk/LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGluaXRpYWwgZm9jdXMgaW4gYSBsaXN0IHJlcG9ydCBiYXNlZCBvbiB0aGUgVXNlciBFeHBlcmllbmNlIGd1aWRlbGluZXMuXG5cdCAqXG5cdCAqL1xuXHRhc3luYyBfc2V0SW5pdGlhbEZvY3VzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCksXG5cdFx0XHRpc0hlYWRlckV4cGFuZGVkID0gZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSxcblx0XHRcdGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7XG5cdFx0aWYgKGZpbHRlckJhciAmJiAhdGhpcy5faXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCkpIHtcblx0XHRcdC8vRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2dcblx0XHRcdGlmICghZmlsdGVyQmFyLmdldFNob3dNZXNzYWdlcygpKSB7XG5cdFx0XHRcdGZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNIZWFkZXJFeHBhbmRlZCkge1xuXHRcdFx0XHR0aGlzLl9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXIpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX2dldFRhYmxlKClcblx0XHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgdGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3ZlcnJpZGUgdG8gZ2V0IHRoZSBicm93c2VyIHRpdGxlIG9mIHRoZSBMUiBwYWdlLlxuXHQgKiBAcGFyYW0gX3BhZ2VUaXRsZUluZm9ybWF0aW9uIFByZXNlbnQgcGFnZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKiBAcmV0dXJucyBUaXRsZSBpbmZvcm1hdGlvbiB0byBiZSB1c2VkIGJ5IHNoZWxsIHNlcnZpY2VzIGZvciBicm93c2VyIHRpdGxlXG5cdCAqL1xuXHRhc3luYyBfZ2V0QnJvd3NlclRpdGxlKF9wYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbik6IFByb21pc2U8VGl0bGVBZGRpdGlvbmFsSW5mbyB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vIFdlIHNoYWxsIGZhbGxiYWNrIHRvIGRlZmF1bCBhcHAgdGl0bGUgaW4gY2FzZSBvZiBsaXN0IHJlcG9ydC5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlPzogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHR0aXRsZTogb01hbmlmZXN0RW50cnkudGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogb01hbmlmZXN0RW50cnkuc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTogRHluYW1pY1BhZ2Uge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCkpIGFzIER5bmFtaWNQYWdlO1xuXHR9XG5cblx0X2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sKCk6IENvbnRyb2wge1xuXHRcdC8vIElmIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgaXMgcGFydCBvZiB0aGUgRE9NIHRyZWUsIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZyBpcyBvcGVuLFxuXHRcdC8vIGFuZCB3ZSByZXR1cm4gdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBhcyBhbiBhY3RpdmUgY29udHJvbCAodmlzaWJsZSBmb3IgdGhlIHVzZXIpXG5cdFx0Y29uc3QgYWRhcHRhdGlvbkZpbHRlckJhciA9ICh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgeyBnZXRJbmJ1aWx0RmlsdGVyPzogRnVuY3Rpb24gfSkuZ2V0SW5idWlsdEZpbHRlcj8uKCk7XG5cdFx0cmV0dXJuIGFkYXB0YXRpb25GaWx0ZXJCYXI/LmdldFBhcmVudCgpID8gYWRhcHRhdGlvbkZpbHRlckJhciA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF9hcHBseUFwcFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzRmlsdGVyQmFySGlkZGVuKCkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbihzQ29udHJvbDogc3RyaW5nKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1NlZ21lbnRlZEJ1dHRvbklkID0gKHNDb250cm9sID09PSBcIkNoYXJ0XCIgPyB0aGlzLmdldENoYXJ0Q29udHJvbCgpIDogdGhpcy5fZ2V0VGFibGUoKSk/LmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChzU2VnbWVudGVkQnV0dG9uSWQpO1xuXHR9XG5cblx0X2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoc1BhdGg6IHN0cmluZyk6IENvbnRyb2wgfCBNYWNyb0FQSSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KHNQYXRoKTtcblx0XHRyZXR1cm4gY29udHJvbElkID8gKHRoaXMuZ2V0VmlldygpLmJ5SWQoY29udHJvbElkKSBhcyBDb250cm9sKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZHluYW1pY0xpc3RSZXBvcnRJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZmlsdGVyQmFySWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVDaGFydElkXCIpIGFzIENoYXJ0VHlwZTtcblx0fVxuXG5cdF9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNWaXN1YWxGaWx0ZXJCYXJJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtcInZpc3VhbEZpbHRlclwiLCB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKV0pO1xuXHRcdHJldHVybiBzVmlzdWFsRmlsdGVyQmFySWQgPyB0aGlzLmdldFZpZXcoKS5ieUlkKHNWaXN1YWxGaWx0ZXJCYXJJZCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTogVmFyaWFudE1hbmFnZW1lbnQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L2lkXCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKTogTXVsdGlwbGVNb2RlQ29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0SWNvblRhYkJhcigpOiBJY29uVGFiQmFyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGVcIikgYXMgSWNvblRhYkJhcjtcblx0fVxuXG5cdF9nZXRUYWJsZSgpOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50O1xuXHRcdFx0cmV0dXJuIG9Db250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gKG9Db250cm9sIGFzIFRhYmxlKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlVGFibGVJZFwiKSBhcyBUYWJsZSB8IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Q29udHJvbHMoc0tleT86IHN0cmluZyk6IENvbnRyb2xbXSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogQ29udHJvbFtdID0gW107XG5cdFx0XHRjb25zdCBvVGFiTXVsdGlNb2RlID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLmNvbnRlbnQ7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IHVua25vd24pID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKSkgYXMgQ29udHJvbDtcblx0XHRcdFx0aWYgKG9Db250cm9sICYmIHNLZXkpIHtcblx0XHRcdFx0XHRpZiAoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpLmluY2x1ZGVzKGBmZTo6JHtzS2V5fWApKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2wgIT09IG51bGwpIHtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVmYXVsdFBhdGggPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXREZWZhdWx0UGF0aCh0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmlld3NcIikgfHwgW10pO1xuXHRcdHN3aXRjaCAoZGVmYXVsdFBhdGgpIHtcblx0XHRcdGNhc2UgXCJwcmltYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0Y2FzZSBcInNlY29uZGFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTtcblx0XHRcdGNhc2UgXCJib3RoXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB3aXRoIE11bHRpcGxlIFRhYmxlIG1vZGUuXG5cdCAqIEByZXR1cm5zIElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9tdWx0aVZpZXdzQ29udHJvbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBkYXRhIGF0IHN0YXJ0IHVwLlxuXHQgKiBAcmV0dXJucyBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2hhc011bHRpVmlzdWFsaXphdGlvbnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN1c3BlbmQgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLiBUaGUgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gSW5pdExvYWQgLSBEaXNhYmxlZC9BdXRvLlxuXHQgKiBJdCBpcyBlbmFibGVkIGxhdGVyIHdoZW4gdGhlIHZpZXcgc3RhdGUgaXMgc2V0LCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVycy5cblx0ICovXG5cdF9kaXNhYmxlSW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdC8vIGNoZWNrIGZvciBmaWx0ZXIgYmFyIGhpZGRlblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgYnkgZmxleCB0byBkZXRlcm1pbmUgaWYgdGhlIGFwcGx5QXV0b21hdGljYWxseSBzZXR0aW5nIG9uIHRoZSB2YXJpYW50IGlzIHZhbGlkLlxuXHQgKiBDYWxsZWQgb25seSBmb3IgU3RhbmRhcmQgVmFyaWFudCBhbmQgb25seSB3aGVuIHRoZXJlIGlzIGRpc3BsYXkgdGV4dCBzZXQgZm9yIGFwcGx5QXV0b21hdGljYWxseSAoRkUgb25seSBzZXRzIGl0IGZvciBBdXRvKS5cblx0ICogQHJldHVybnMgQm9vbGVhbiB0cnVlIGlmIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCgpOiBib29sZWFuIHtcblx0XHQvLyBXZSBhbHdheXMgcmV0dXJuIGZhbHNlIGFuZCB0YWtlIGNhcmUgb2YgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmUgdGhlIHNldHRpbmdzIGZvciBpbml0aWFsIGxvYWQgYmFzZWQgb25cblx0ICogLSBtYW5pZmVzdCBzZXR0aW5nIGluaXRMb2FkIC0gRW5hYmxlZC9EaXNhYmxlZC9BdXRvXG5cdCAqIC0gdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHZhcmlhbnRcblx0ICogLSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzXG5cdCAqIFdlIGRpc2FibGUgdGhlIGZpbHRlciBiYXIgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuYWJsZSBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0LlxuXHQgKi9cblx0X3NldEluaXRMb2FkKCk6IHZvaWQge1xuXHRcdC8vIGlmIGluaXRMb2FkIGlzIERpc2FibGVkIG9yIEF1dG8sIHN3aXRjaCBvZmYgZmlsdGVyIGJhciBzZWFyY2ggdGVtcG9yYXJpbHkgYXQgc3RhcnRcblx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVJbml0TG9hZCgpO1xuXHRcdH1cblx0XHQvLyBzZXQgaG9vayBmb3IgZmxleCBmb3Igd2hlbiBzdGFuZGFyZCB2YXJpYW50IGlzIHNldCAoYXQgc3RhcnQgb3IgYnkgdXNlciBhdCBydW50aW1lKVxuXHRcdC8vIHJlcXVpcmVkIHRvIG92ZXJyaWRlIHRoZSB1c2VyIHNldHRpbmcgJ2FwcGx5IGF1dG9tYXRpY2FsbHknIGJlaGF2aW91ciBpZiB0aGVyZSBhcmUgbm8gZmlsdGVyc1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50SWQgPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXRWYXJpYW50QmFja1JlZmVyZW5jZShcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0RGF0YSgpIGFzIExpc3RSZXBvcnREZWZpbml0aW9uXG5cdFx0KTtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHZhcmlhbnRNYW5hZ2VtZW50SWQgJiYgKHRoaXMuZ2V0VmlldygpLmJ5SWQodmFyaWFudE1hbmFnZW1lbnRJZCkgYXMgVmFyaWFudE1hbmFnZW1lbnQpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0KFxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCBhcyB7IHJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/OiBGdW5jdGlvbiB9XG5cdFx0XHQpPy5yZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50Py4odGhpcy5fYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFNoYXJlTW9kZWwoKTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogZGVhY3RpdmF0ZWQgZm9yIG5vdyAtIGN1cnJlbnRseSB0aGVyZSBpcyBubyBfdGVtcGxQcml2IGFueW1vcmUsIHRvIGJlIGRpc2N1c3NlZFxuXHRcdC8vIHRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseSBub3QgY2FsbGVkIGFueW1vcmUgZnJvbSB0aGUgaW5pdCBtZXRob2RcblxuXHRcdGNvbnN0IGZuR2V0VXNlciA9IE9iamVjdFBhdGguZ2V0KFwic2FwLnVzaGVsbC5Db250YWluZXIuZ2V0VXNlclwiKTtcblx0XHQvL3ZhciBvTWFuaWZlc3QgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpXCIpO1xuXHRcdC8vdmFyIHNCb29rbWFya0ljb24gPSAob01hbmlmZXN0ICYmIG9NYW5pZmVzdC5pY29ucyAmJiBvTWFuaWZlc3QuaWNvbnMuaWNvbikgfHwgXCJcIjtcblxuXHRcdC8vc2hhcmVNb2RlbDogSG9sZHMgYWxsIHRoZSBzaGFyaW5nIHJlbGV2YW50IGluZm9ybWF0aW9uIGFuZCBpbmZvIHVzZWQgaW4gWE1MIHZpZXdcblx0XHRjb25zdCBvU2hhcmVJbmZvID0ge1xuXHRcdFx0Ym9va21hcmtUaXRsZTogZG9jdW1lbnQudGl0bGUsIC8vVG8gbmFtZSB0aGUgYm9va21hcmsgYWNjb3JkaW5nIHRvIHRoZSBhcHAgdGl0bGUuXG5cdFx0XHRib29rbWFya0N1c3RvbVVybDogZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gYCMke3NIYXNofWAgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdH0sXG5cdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRUbyBiZSBhY3RpdmF0ZWQgb25jZSB0aGUgRkxQIHNob3dzIHRoZSBjb3VudCAtIHNlZSBjb21tZW50IGFib3ZlXG5cdFx0XHRcdFx0XHRcdGJvb2ttYXJrU2VydmljZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly92YXIgb1RhYmxlID0gb1RhYmxlLmdldElubmVyVGFibGUoKTsgb1RhYmxlIGlzIGFscmVhZHkgdGhlIHNhcC5mZSB0YWJsZSAoYnV0IG5vdCB0aGUgaW5uZXIgb25lKVxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB1c2UgdGFibGUuZ2V0TGlzdEJpbmRpbmdJbmZvIGluc3RlYWQgb2YgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHR2YXIgb0JpbmRpbmcgPSBvVGFibGUuZ2V0QmluZGluZyhcInJvd3NcIikgfHwgb1RhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBmbkdldERvd25sb2FkVXJsKG9CaW5kaW5nKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0sKi9cblx0XHRcdGlzU2hhcmVJbkphbUFjdGl2ZTogISFmbkdldFVzZXIgJiYgZm5HZXRVc2VyKCkuaXNKYW1BY3RpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCBvVGVtcGxhdGVQcml2YXRlTW9kZWwgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJfdGVtcGxQcml2XCIpIGFzIEpTT05Nb2RlbDtcblx0XHRvVGVtcGxhdGVQcml2YXRlTW9kZWwuc2V0UHJvcGVydHkoXCIvbGlzdFJlcG9ydC9zaGFyZVwiLCBvU2hhcmVJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIEFMUCBzY2VuYXJpbykuXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IG1DYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydCkge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNDYWNoZUtleSA9IGAke3NDaGFydEVudGl0eVNldH1DaGFydGA7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc0NhY2hlS2V5XSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRyb2xzL2lnbm9yZWRGaWVsZHNcIiwgaWdub3JlZEZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHNldHRpbmcgd2hldGhlciBGaWx0ZXJCYXIgaXMgaGlkZGVuIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICdoaWRlRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIGFzIGl0IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhpcyBzZXR0aW5nLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaGlkZUZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYnV0IHN0aWxsIGV4aXN0cyBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZyAndXNlSGlkZGVuRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW4gYXMgaXQgY2FuIGFsc28gaGlkZSB0aGUgRmlsdGVyQmFyLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnVzZUhpZGRlbkZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdF9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBCb29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50IHx8ICFrZXkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudHMgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRWYXJpYW50cygpO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdmFyaWFudHMuZmluZChmdW5jdGlvbiAodmFyaWFudCkge1xuXHRcdFx0cmV0dXJuIHZhcmlhbnQgJiYgdmFyaWFudC5nZXRLZXkoKSA9PT0ga2V5O1xuXHRcdH0pO1xuXHRcdHJldHVybiAoY3VycmVudFZhcmlhbnQgJiYgY3VycmVudFZhcmlhbnQuZ2V0UHJvcGVydHkoXCJleGVjdXRlT25TZWxlY3RcIikpIHx8IGZhbHNlO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogVmFyaWFudE1hbmFnZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKG9WTSAmJiAhc0tleS5zdGFydHNXaXRoKFwiJFwiKSAmJiBBcnJheS5pc0FycmF5KG9Db25kaXRpb25zW3NLZXldKSAmJiBvQ29uZGl0aW9uc1tzS2V5XS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIGxvYWQgZGF0YSBhcyBwZXIgdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHRoZSB2YXJpYW50XG5cdFx0XHRcdFx0XHRjb25zdCBzdGFuZGFyZFZhcmlhbnQgPSBvVk0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YXJpYW50LmdldEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN0YW5kYXJkVmFyaWFudCAmJiBzdGFuZGFyZFZhcmlhbnQuZ2V0RXhlY3V0ZU9uU2VsZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF91cGRhdGVUYWJsZShvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBDaGFydCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gKG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuX2dldENoYXJ0KG9DaGFydCk7XG5cdFx0aWYgKCEob0lubmVyQ2hhcnQgJiYgb0lubmVyQ2hhcnQuaXNCb3VuZChcImRhdGFcIikpIHx8IHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcykge1xuXHRcdFx0KG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZpbHRlciB0b2dnbGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gYnV0dG9uVmlzaWJsZSBGaWx0ZXIgdG9nZ2xlIGJ1dHRvbiB2aXNpYmlsaXR5XG5cdCAqL1xuXHRzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGJ1dHRvblZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0ZmlsdGVyQmFyPy5nZXRTZWdtZW50ZWRCdXR0b24oKT8uc2V0VmlzaWJsZShidXR0b25WaXNpYmxlKTtcblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uRmlsdGVyTGF5b3V0U3dpdGNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHt9LCBDb250ZW50U3dpdGNoZXI+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBjdXJyZW50S2V5ID0gb0V2ZW50LmdldFNvdXJjZSgpLnNlbGVjdGVkS2V5O1xuXHRcdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L3BhZ2VJZFwiKTtcblx0XHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0XHRpZiAoY3VycmVudEtleSA9PT0gXCJhaVwiKSB7XG5cdFx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25JbmxpbmVFZGl0U2F2ZSh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0Rmxvdy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJTZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0ZmlsdGVyQmFyQVBJLnRyaWdnZXJTZWFyY2goKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc0NoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSB2aWV3c1xuXHRcdFx0XHR0aGlzLm9uUGVuZGluZ0ZpbHRlcnMoKTtcblxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KG9GaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gKG9FdmVudCBhcyBVSTVFdmVudCkuZ2V0UGFyYW1ldGVycygpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBwYXJhbWV0ZXJzLm9yaWdpbmFsU291cmNlIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdFx0Y29uc3QgbXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG11bHRpTW9kZUNvbnRyb2wgJiYgIXZhcmlhbnRNYW5hZ2VtZW50Py5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdC8vTm90IGEgQ29udHJvbCBWYXJpYW50XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyPy5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKGZpbHRlckl0ZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gZmlsdGVySXRlbS5nZXRSZXF1aXJlZCgpICYmIGZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godmFyaWFudE1hbmFnZW1lbnQpKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkhLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQsIGN1cnJlbnRWYXJpYW50S2V5KSkge1xuXHRcdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZSEhIVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH0sXG5cdFx0b25TZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyOyAvLyBvbnNlYXJjaCBpcyBjYWxsZWQgb25seSBpZiB0aGUgZmlsdGVyYmFyIGV4aXN0c1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBiSGlkZURyYWZ0ID0gRmlsdGVyVXRpbHMuZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQob0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCkpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBiSGlkZURyYWZ0KTtcblx0XHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRpZiAoIXRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01kY0NoYXJ0KSB7XG5cdFx0XHRcdC8vIGRpc2FibGUgYm91bmQgYWN0aW9ucyBUT0RPOiB0aGlzIGNsZWFycyBldmVyeXRoaW5nIGZvciB0aGUgY2hhcnQ/XG5cdFx0XHRcdChvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXCJcIiwge30pO1xuXG5cdFx0XHRcdGNvbnN0IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGUpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vbG9naWMgZm9yIGV4cGFuc2lvbiBvciBjb2xsYXBzZSBvZiBmaWx0ZXIgYmFyIHN0YXJ0c1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAoZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9zZXR0aW5nIGl0IHRvIGZhbHNlIHNvIHRoYXQgZnVydGhlciBzZWFyY2ggb3IgJ0dvJyB0cmlnZ2VycyB3b24ndCBjb2xsYXBzZSB0aGUgZmlsdGVyIGJhclxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3RvcmUgZmlsdGVyIGJhciBjb25kaXRpb25zIHRvIHVzZSBsYXRlciB3aGlsZSBuYXZpZ2F0aW9uXG5cdFx0XHRTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdC50aGVuKChvRXh0ZXJuYWxTdGF0ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgZXh0ZXJuYWwgc3RhdGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoRGV2aWNlLnN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdFx0c0NyZWF0ZVBhdGg6IHN0cmluZ1xuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudDx7IGRhdGE6IHVua25vd24gfSwgQ2hhcnRUeXBlPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldENvbnRlbnQoKSBhcyBDaGFydCxcblx0XHRcdFx0b1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKSxcblx0XHRcdFx0YURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChhRGF0YSkge1xuXHRcdFx0XHRDaGFydFV0aWxzLnNldENoYXJ0RmlsdGVycyhvTWRjQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGUpIHtcblx0XHRcdFx0b1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRLZXk6IHN0cmluZyA9XG5cdFx0XHRcdChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KS5zZWxlY3RlZEtleSB8fCAob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IGtleTogc3RyaW5nIH0pLmtleTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBzZWxlY3RlZEtleSk7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblxuXHRcdFx0c3dpdGNoIChzZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDpcblx0XHRcdFx0XHRpZiAob1RhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob0NoYXJ0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQgYXMgQ2hhcnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uKHNlbGVjdGVkS2V5KTtcblx0XHR9LFxuXHRcdG9uRHluYW1pY1BhZ2VUaXRsZVN0YXRlQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgZXZlbnQ6IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHR0aGlzLnNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoISFldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpKTtcblx0XHRcdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcImlzRXhwYW5kZWRcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZS5nZXRJbnN0YW5jZSgpLmFubm91bmNlKFxuXHRcdFx0XHRcdFx0ZmlsdGVyQmFyLmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKS5maWx0ZXJzVGV4dCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRJbnZpc2libGVNZXNzYWdlTW9kZS5Bc3NlcnRpdmVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGZvY3VzIGZvciB0aGUgc2VnbWVudGVkIGJ1dHRvbiBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQga2V5LlxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRLZXkgVGhlIGtleSByZXByZXNlbnRpbmcgdGhlIHNlbGVjdGVkIHRlbXBsYXRlIGNvbnRlbnQgdmlld1xuXHQgKi9cblx0Zm9jdXNIYW5kbGluZ0ZvclNlZ21lbnRlZEJ1dHRvbihzZWxlY3RlZEtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdGxldCBzZWdtZW50ZWRCdXR0b25JZDogc3RyaW5nO1xuXHRcdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTpcblx0XHRcdFx0c2VnbWVudGVkQnV0dG9uSWQgPSBnZW5lcmF0ZShbb1RhYmxlPy5nZXRJZCgpLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pO1xuXHRcdFx0XHR0aGlzLmFkZEZvY3VzRGVsZWdhdGUoc2VnbWVudGVkQnV0dG9uSWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ6XG5cdFx0XHRcdHNlZ21lbnRlZEJ1dHRvbklkID0gZ2VuZXJhdGUoW29DaGFydD8uZ2V0SWQoKSwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKTtcblx0XHRcdFx0dGhpcy5hZGRGb2N1c0RlbGVnYXRlKHNlZ21lbnRlZEJ1dHRvbklkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhbiBldmVudCBkZWxlZ2F0ZSB0byBhIGNvbnRyb2wgYW5kIHNldHMgZm9jdXMgb24gaXQuXG5cdCAqIEBwYXJhbSBzZWdtZW50ZWRCdXR0b25JZCBUaGUgY29udHJvbCB0byB3aGljaCB0aGUgZXZlbnQgZGVsZWdhdGUgd2lsbCBiZSBhZGRlZC5cblx0ICovXG5cdGFkZEZvY3VzRGVsZWdhdGUoc2VnbWVudGVkQnV0dG9uSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHNlZ21lbnRlZEJ1dHRvbiA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VnbWVudGVkQnV0dG9uSWQpO1xuXHRcdGlmIChzZWdtZW50ZWRCdXR0b24pIHtcblx0XHRcdGNvbnN0IGV2ZW50RGVsZWdhdGUgPSB7XG5cdFx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRzZWdtZW50ZWRCdXR0b24uZm9jdXMoKTtcblx0XHRcdFx0XHRzZWdtZW50ZWRCdXR0b24ucmVtb3ZlRXZlbnREZWxlZ2F0ZShldmVudERlbGVnYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5hZGRFdmVudERlbGVnYXRlKGV2ZW50RGVsZWdhdGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBTZWxlY3Rpb24gVmFyaWFudC5cblx0ICogQHBhcmFtIGZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICovXG5cdGFzeW5jIF9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0Y29uc3Qgc3YgPSBhd2FpdCBmaWx0ZXJCYXJBUEkuZ2V0U2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIsIHN2KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogRXJyb3IgZmV0Y2hpbmcgc2VsZWN0aW9uIHZhcmlhbnQgb24gZmlsdGVyIGNoYW5nZTogJHttZXNzYWdlfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBTZWxlY3Rpb24gVmFyaWFudCBmcm9tIGludGVybmFsIG1vZGVsLlxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb25WYXJpYW50XG5cdCAqL1xuXHRnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KCk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gKGludGVybmFsTW9kZWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImZpbHRlckJhclNlbGVjdGlvblZhcmlhbnRcIikgYXMgU2VsZWN0aW9uVmFyaWFudCkgfHwgbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0UmVwb3J0Q29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtFQSxNQUFNQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBbUI7SUFDMURFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUFlOztFQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNB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
|