@sapui5/sap.fe.macros 1.140.0 → 1.141.1
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/macros/.library +1 -1
- package/src/sap/fe/macros/Chart.js +53 -2
- package/src/sap/fe/macros/Chart.tsx +55 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
- package/src/sap/fe/macros/CommonHelper.js +59 -15
- package/src/sap/fe/macros/CommonHelper.ts +65 -14
- package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
- package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
- package/src/sap/fe/macros/Field.js +14 -10
- package/src/sap/fe/macros/Field.ts +15 -12
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- package/src/sap/fe/macros/MultiValueField.js +10 -5
- package/src/sap/fe/macros/MultiValueField.tsx +7 -1
- package/src/sap/fe/macros/Page.js +5 -7
- package/src/sap/fe/macros/Page.tsx +4 -6
- package/src/sap/fe/macros/Paginator.js +9 -4
- package/src/sap/fe/macros/Paginator.tsx +12 -3
- package/src/sap/fe/macros/RichTextEditor.js +3 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
- package/src/sap/fe/macros/Status.js +38 -13
- package/src/sap/fe/macros/Status.tsx +26 -6
- package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
- package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
- package/src/sap/fe/macros/chart/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
- package/src/sap/fe/macros/controls/FilterBar.js +14 -5
- package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
- package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
- package/src/sap/fe/macros/controls/Section.js +4 -3
- package/src/sap/fe/macros/controls/Section.ts +3 -2
- package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
- package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
- package/src/sap/fe/macros/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
- package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
- package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
- package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
- package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
- package/src/sap/fe/macros/form/Form.block.js +7 -8
- package/src/sap/fe/macros/form/Form.block.ts +4 -6
- package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +6 -9
- package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
- package/src/sap/fe/macros/internal/DataPoint.js +3 -2
- package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
- package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
- package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
- package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
- package/src/sap/fe/macros/messagebundle.properties +20 -2
- package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
- package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
- package/src/sap/fe/macros/messagebundle_da.properties +1 -1
- package/src/sap/fe/macros/messagebundle_de.properties +4 -4
- package/src/sap/fe/macros/messagebundle_el.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_es.properties +2 -2
- package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/macros/messagebundle_et.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
- package/src/sap/fe/macros/messagebundle_id.properties +5 -5
- package/src/sap/fe/macros/messagebundle_it.properties +1 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_no.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_th.properties +1 -1
- package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
- package/src/sap/fe/macros/messages/MessageButton.js +1 -1
- package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
- package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
- package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
- package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
- package/src/sap/fe/macros/table/Column.js +14 -2
- package/src/sap/fe/macros/table/Column.ts +7 -0
- package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
- package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
- package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
- package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
- package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
- package/src/sap/fe/macros/table/Table.block.js +188 -147
- package/src/sap/fe/macros/table/Table.block.tsx +41 -11
- package/src/sap/fe/macros/table/Table.js +16 -10
- package/src/sap/fe/macros/table/Table.tsx +16 -10
- package/src/sap/fe/macros/table/TableAPI.js +224 -184
- package/src/sap/fe/macros/table/TableAPI.ts +63 -19
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
- package/src/sap/fe/macros/table/TableHelper.js +2 -2
- package/src/sap/fe/macros/table/TableHelper.ts +1 -1
- package/src/sap/fe/macros/table/TreeTable.js +16 -10
- package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
- package/src/sap/fe/macros/table/Utils.js +3 -2
- package/src/sap/fe/macros/table/Utils.ts +7 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
- package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
- package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
|
@@ -9,13 +9,19 @@ import type {
|
|
|
9
9
|
} from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
10
10
|
import Log from "sap/base/Log";
|
|
11
11
|
import deepClone from "sap/base/util/deepClone";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
compileExpression,
|
|
14
|
+
isPathInModelExpression,
|
|
15
|
+
resolveBindingString,
|
|
16
|
+
type CompiledBindingToolkitExpression
|
|
17
|
+
} from "sap/fe/base/BindingToolkit";
|
|
13
18
|
import type { PropertiesOf, XMLEventHolder } from "sap/fe/base/ClassSupport";
|
|
14
19
|
import { aggregation, defineUI5Class, event, implementInterface, mixin, property, xmlEventHandler } from "sap/fe/base/ClassSupport";
|
|
15
20
|
import jsx from "sap/fe/base/jsx-runtime/jsx";
|
|
16
21
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
17
22
|
import type IRowBindingInterface from "sap/fe/core/IRowBindingInterface";
|
|
18
23
|
import type PageController from "sap/fe/core/PageController";
|
|
24
|
+
import type ResourceModel from "sap/fe/core/ResourceModel";
|
|
19
25
|
import type BuildingBlock from "sap/fe/core/buildingBlocks/BuildingBlock";
|
|
20
26
|
import { parseXMLString, xml } from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor";
|
|
21
27
|
import NotApplicableContextDialog from "sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog";
|
|
@@ -35,6 +41,7 @@ import DeleteHelper from "sap/fe/core/helpers/DeleteHelper";
|
|
|
35
41
|
import FPMHelper from "sap/fe/core/helpers/FPMHelper";
|
|
36
42
|
import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
37
43
|
import PasteHelper from "sap/fe/core/helpers/PasteHelper";
|
|
44
|
+
import PromiseKeeper from "sap/fe/core/helpers/PromiseKeeper";
|
|
38
45
|
import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
|
|
39
46
|
import { generate } from "sap/fe/core/helpers/StableIdHelper";
|
|
40
47
|
import type { RecommendationContextsInfo } from "sap/fe/core/helpers/StandardRecommendationHelper";
|
|
@@ -412,6 +419,12 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
412
419
|
@property({ type: "boolean" })
|
|
413
420
|
enableExport?: boolean;
|
|
414
421
|
|
|
422
|
+
@property({ type: "string" })
|
|
423
|
+
exportFileName?: string;
|
|
424
|
+
|
|
425
|
+
@property({ type: "string" })
|
|
426
|
+
exportSheetName?: string;
|
|
427
|
+
|
|
415
428
|
@property({ type: "int" })
|
|
416
429
|
frozenColumnCount?: number;
|
|
417
430
|
|
|
@@ -1173,24 +1186,46 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
1173
1186
|
}
|
|
1174
1187
|
|
|
1175
1188
|
@xmlEventHandler()
|
|
1176
|
-
onOpenInNewTabPress(
|
|
1189
|
+
async onOpenInNewTabPress(
|
|
1177
1190
|
oEvent: UI5Event,
|
|
1178
1191
|
controller: PageController,
|
|
1179
|
-
|
|
1192
|
+
allContexts: Context[],
|
|
1193
|
+
navigableContexts: Context[],
|
|
1180
1194
|
parameters: RoutingNavigationParameters,
|
|
1181
1195
|
maxNumberofSelectedItems: number
|
|
1182
|
-
): void | boolean {
|
|
1183
|
-
if (
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1196
|
+
): Promise<void | boolean> {
|
|
1197
|
+
if (navigableContexts.length <= maxNumberofSelectedItems) {
|
|
1198
|
+
const promiseToWait = new PromiseKeeper<boolean>();
|
|
1199
|
+
if (navigableContexts.length < allContexts.length) {
|
|
1200
|
+
const textKey =
|
|
1201
|
+
navigableContexts.length === 1
|
|
1202
|
+
? "T_TABLE_NAVIGATION_NOT_ALL_ITEMS_NAVIGABLE_SINGULAR"
|
|
1203
|
+
: "T_TABLE_NAVIGATION_NOT_ALL_ITEMS_NAVIGABLE_PLURAL";
|
|
1204
|
+
MessageBox.confirm(
|
|
1205
|
+
this.getTranslatedText(textKey, [allContexts.length, navigableContexts.length, maxNumberofSelectedItems]),
|
|
1206
|
+
{
|
|
1207
|
+
onClose: (result: string): void => {
|
|
1208
|
+
if (result === "CANCEL") {
|
|
1209
|
+
promiseToWait.resolve(false);
|
|
1210
|
+
}
|
|
1211
|
+
promiseToWait.resolve(true);
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
);
|
|
1215
|
+
} else {
|
|
1216
|
+
promiseToWait.resolve(true);
|
|
1217
|
+
}
|
|
1218
|
+
const shouldProceed = await promiseToWait.promise;
|
|
1219
|
+
if (shouldProceed) {
|
|
1220
|
+
navigableContexts.forEach(async (context: Context) => {
|
|
1221
|
+
if (this.isTableRowNavigationPossible(context)) {
|
|
1222
|
+
parameters.editable = !context.getProperty("IsActiveEntity");
|
|
1223
|
+
await controller._routing.navigateForwardToContext(context, parameters);
|
|
1224
|
+
} else {
|
|
1225
|
+
return false;
|
|
1226
|
+
}
|
|
1227
|
+
});
|
|
1228
|
+
}
|
|
1194
1229
|
} else {
|
|
1195
1230
|
MessageBox.warning(
|
|
1196
1231
|
Library.getResourceBundleFor("sap.fe.macros")!.getText("T_TABLE_NAVIGATION_TOO_MANY_ITEMS_SELECTED", [
|
|
@@ -1524,6 +1559,13 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
1524
1559
|
}
|
|
1525
1560
|
): Promise<unknown> {
|
|
1526
1561
|
parameters.model = oEvent.getSource().getModel() as ODataModel;
|
|
1562
|
+
const labelExpression = resolveBindingString(parameters.label, "string");
|
|
1563
|
+
if (isPathInModelExpression(labelExpression) && (labelExpression.modelName === "i18n" || labelExpression.modelName === "@i18n")) {
|
|
1564
|
+
//resolveBindingString(parameters.label, "string")
|
|
1565
|
+
parameters.label =
|
|
1566
|
+
(oEvent.getSource().getModel(labelExpression.modelName) as ResourceModel).getProperty(labelExpression.path) ??
|
|
1567
|
+
parameters.label;
|
|
1568
|
+
}
|
|
1527
1569
|
let executeAction = true;
|
|
1528
1570
|
if (parameters.notApplicableContexts && parameters.notApplicableContexts.length > 0) {
|
|
1529
1571
|
// If we have non applicable contexts, we need to open a dialog to ask the user if he wants to continue
|
|
@@ -1913,7 +1955,7 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
1913
1955
|
* @param columnKeys The keys for the columns to show
|
|
1914
1956
|
* @returns Promise<void>
|
|
1915
1957
|
* @public
|
|
1916
|
-
* @experimental
|
|
1958
|
+
* @ui5-experimental-since 1.124.0
|
|
1917
1959
|
* @since 1.124.0
|
|
1918
1960
|
*/
|
|
1919
1961
|
async showColumns(columnKeys: string[]): Promise<void> {
|
|
@@ -1928,7 +1970,7 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
1928
1970
|
* @param columnKeys The keys for the columns to hide
|
|
1929
1971
|
* @returns Promise<void>
|
|
1930
1972
|
* @public
|
|
1931
|
-
* @experimental
|
|
1973
|
+
* @ui5-experimental-since 1.124.0
|
|
1932
1974
|
* @since 1.124.0
|
|
1933
1975
|
*/
|
|
1934
1976
|
async hideColumns(columnKeys: string[]): Promise<void> {
|
|
@@ -1942,7 +1984,7 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
1942
1984
|
* Sets the fields that should be ignored when generating the table.
|
|
1943
1985
|
* @param ignoredFields The fields to ignore
|
|
1944
1986
|
* @returns Reference to this in order to allow method chaining
|
|
1945
|
-
* @experimental
|
|
1987
|
+
* @ui5-experimental-since 1.124.0
|
|
1946
1988
|
* @since 1.124.0
|
|
1947
1989
|
* @public
|
|
1948
1990
|
*/
|
|
@@ -1953,7 +1995,7 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
1953
1995
|
/**
|
|
1954
1996
|
* Get the fields that should be ignored when generating the table.
|
|
1955
1997
|
* @returns The value of the ignoredFields property
|
|
1956
|
-
* @experimental
|
|
1998
|
+
* @ui5-experimental-since 1.124.0
|
|
1957
1999
|
* @since 1.124.0
|
|
1958
2000
|
* @public
|
|
1959
2001
|
*/
|
|
@@ -2218,6 +2260,8 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
2218
2260
|
const tableSettings: Record<string, unknown> = {};
|
|
2219
2261
|
TableAPI.addSetting(tableSettings, "enableExport", this.enableExport);
|
|
2220
2262
|
TableAPI.addSetting(tableSettings, "exportRequestSize", this.exportRequestSize);
|
|
2263
|
+
TableAPI.addSetting(tableSettings, "exportFileName", this.exportFileName);
|
|
2264
|
+
TableAPI.addSetting(tableSettings, "exportSheetName", this.exportSheetName);
|
|
2221
2265
|
TableAPI.addSetting(tableSettings, "frozenColumnCount", this.frozenColumnCount);
|
|
2222
2266
|
TableAPI.addSetting(tableSettings, "disableColumnFreeze", this.disableColumnFreeze);
|
|
2223
2267
|
TableAPI.addSetting(tableSettings, "widthIncludingColumnHeader", this.widthIncludingColumnHeader);
|
|
@@ -48,7 +48,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/helper
|
|
|
48
48
|
this.contextMenuOpenInNewTab = `.onOpenInNewTabNavigateOutBound('${rowNavigationInfo.navigationTarget}', %{internal>contextmenu/selectedContexts}, "", ${selectionLimitForOpenInNewTab})`;
|
|
49
49
|
} else {
|
|
50
50
|
this.contextMenuShareToCollaborationManager = `API.onShareToCollaborationManagerPress($event, $controller, %{internal>contextmenu/selectedContexts}, ${selectionLimitForShareToCollaborationManager})`;
|
|
51
|
-
this.contextMenuOpenInNewTab = `API.onOpenInNewTabPress($event, $controller,
|
|
51
|
+
this.contextMenuOpenInNewTab = `API.onOpenInNewTabPress($event, $controller, %{internal>contextmenu/selectedContexts}, %{internal>contextmenu/navigableContexts},{ callExtension: true, targetPath: '${rowNavigationInfo?.targetPath ?? ""}', navMode: 'openInNewTab' }, ${selectionLimitForOpenInNewTab})`;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
this.dataStateChange = "API.onDataStateChange";
|
|
@@ -88,8 +88,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/helper
|
|
|
88
88
|
} : undefined;
|
|
89
89
|
this.contextMenuItemSelected = TableRuntime.onContextMenuItemSelected.bind(TableRuntime);
|
|
90
90
|
const rowNavigationInfo = this.tableBlockProperties.tableDefinition?.annotation.row?.navigationInfo;
|
|
91
|
-
if (rowNavigationInfo !== undefined) {
|
|
92
|
-
if (rowNavigationInfo
|
|
91
|
+
if (rowNavigationInfo !== undefined || this.tableBlockProperties.overrideRowPress) {
|
|
92
|
+
if (rowNavigationInfo?.type === "Outbound") {
|
|
93
93
|
this.contextMenuOpenInNewTab = _e => {
|
|
94
94
|
const controller = tableAPI.getPageController();
|
|
95
95
|
const internalContext = tableAPI.getBindingContext("internal");
|
|
@@ -104,9 +104,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/helper
|
|
|
104
104
|
this.contextMenuOpenInNewTab = e => {
|
|
105
105
|
const controller = tableAPI.getPageController();
|
|
106
106
|
const internalContext = tableAPI.getBindingContext("internal");
|
|
107
|
-
tableAPI.onOpenInNewTabPress(e, controller, internalContext?.getProperty("contextmenu/selectedContexts"), {
|
|
107
|
+
tableAPI.onOpenInNewTabPress(e, controller, internalContext?.getProperty("contextmenu/selectedContexts"), internalContext?.getProperty("contextmenu/navigableContexts"), {
|
|
108
108
|
callExtension: true,
|
|
109
|
-
targetPath: rowNavigationInfo
|
|
109
|
+
targetPath: rowNavigationInfo?.targetPath ?? "",
|
|
110
110
|
navMode: "openInNewTab"
|
|
111
111
|
}, selectionLimitForOpenInNewTab);
|
|
112
112
|
};
|
|
@@ -457,4 +457,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/helper
|
|
|
457
457
|
_exports = TableEventHandlerProvider;
|
|
458
458
|
return _exports;
|
|
459
459
|
}, false);
|
|
460
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZWxlY3Rpb25MaW1pdEZvclNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsInRhYmxlQmxvY2tQcm9wZXJ0aWVzIiwic2V0dGluZ3MiLCJ0YWJsZUFQSSIsImNvbGxlY3Rpb25FbnRpdHkiLCJtZXRhTW9kZWwiLCJjb25zdHJ1Y3RvcldpdGhGdW5jdGlvbnMiLCJjb25zdHJ1Y3RvcldpdGhTdHJpbmdzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJ0YWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsImFkZENhcmRUb0luc2lnaHRzUHJlc3MiLCJiZWZvcmVFeHBvcnQiLCJiZWZvcmVPcGVuQ29udGV4dE1lbnUiLCJjb2xsYXBzZU5vZGUiLCJ1bmRlZmluZWQiLCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsInJvd05hdmlnYXRpb25JbmZvIiwiYW5ub3RhdGlvbiIsInJvdyIsIm5hdmlnYXRpb25JbmZvIiwib3ZlcnJpZGVSb3dQcmVzcyIsImNvbnRleHRNZW51T3BlbkluTmV3VGFiIiwibmF2aWdhdGlvblRhcmdldCIsImNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwidGFyZ2V0UGF0aCIsImRhdGFTdGF0ZUNoYW5nZSIsImhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRyYWdTdGFydERvY3VtZW50IiwiZHJhZ0VudGVyRG9jdW1lbnQiLCJkcm9wRG9jdW1lbnQiLCJleHBhbmROb2RlIiwiZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93IiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiZmllbGRMaXZlQ2hhbmdlIiwiY3JlYXRpb25Nb2RlIiwibmFtZSIsInJvd1ByZXNzIiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ0YWJsZUNvbnRleHRDaGFuZ2UiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJ1cGxvYWRDb21wbGV0ZWQiLCJ1cGxvYWRGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkIiwidXBsb2FkRmlsZVNpemVFeGNlZWRlZCIsInVwbG9hZEl0ZW1WYWxpZGF0aW9uSGFuZGxlciIsInVwbG9hZE1lZGlhVHlwZU1pc21hdGNoIiwidmFyaWFudFNhdmVkIiwidmFyaWFudFNlbGVjdGVkIiwib25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQiLCJiaW5kIiwib25CZWZvcmVFeHBvcnQiLCJvbkNvbnRleHRNZW51UHJlc3MiLCJlIiwib25Db2xsYXBzZUV4cGFuZE5vZGUiLCJUYWJsZVJ1bnRpbWUiLCJvbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwiX2UiLCJjb250cm9sbGVyIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uT3BlbkluTmV3VGFiTmF2aWdhdGVPdXRCb3VuZCIsImdldFByb3BlcnR5Iiwib25TaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJQcmVzcyIsIm9uT3BlbkluTmV3VGFiUHJlc3MiLCJjYWxsRXh0ZW5zaW9uIiwibmF2TW9kZSIsIm9uRGF0YVN0YXRlQ2hhbmdlIiwib25EcmFnU3RhcnREb2N1bWVudCIsIm9uRHJhZ0VudGVyRG9jdW1lbnQiLCJvbkRyb3BEb2N1bWVudCIsIm9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93Iiwib25GaWVsZExpdmVDaGFuZ2UiLCJvblRhYmxlUm93UHJlc3MiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJvblNlbGVjdGlvbkNoYW5nZWQiLCJvblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkIiwiVXBsb2FkVGFibGVSdW50aW1lIiwib25VcGxvYWRDb21wbGV0ZWQiLCJvbkZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQiLCJvbkZpbGVTaXplRXhjZWVkZWQiLCJ1cGxvYWRGaWxlIiwib25NZWRpYVR5cGVNaXNtYXRjaCIsIm9uVmFyaWFudFNhdmVkIiwib25WYXJpYW50U2VsZWN0ZWQiLCJnZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIiLCJmb3JDb250ZXh0TWVudSIsImZvckNyZWF0aW9uUm93Iiwib25DcmVhdGVCdXR0b25QcmVzcyIsInBhdGgiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImluZGV4Iiwib25DcmVhdGVNZW51SXRlbVByZXNzIiwiZ2V0Q3V0SGFuZGxlciIsIm9uQ3V0IiwiZ2V0Q29weUhhbmRsZXIiLCJvbkNvcHkiLCJnZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIiLCJkYXRhRmllbGQiLCJhY3Rpb24iLCJwYXJlbnRBY3Rpb24iLCJhY3Rpb25Db250ZXh0UGF0aCIsImFubm90YXRpb25QYXRoIiwiQ29tbW9uSGVscGVyIiwiZ2V0QWN0aW9uQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYWN0aW9uQ29udGV4dCIsImFjdGlvbk5hbWUiLCJBY3Rpb24iLCJ0YXJnZXRFbnRpdHlUeXBlTmFtZSIsImNvbnRleHRPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzU3RhdGljQWN0aW9uIiwiZ2V0T2JqZWN0IiwiVGFibGVIZWxwZXIiLCJfaXNTdGF0aWNBY3Rpb24iLCJfaXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZSIsInRvU3RyaW5nIiwiYXBwbGljYWJsZVByb3BlcnR5UGF0aCIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eVBhdGgiLCJjb250ZXh0TWVudVBhdGgiLCJwYXJhbXMiLCJjb250ZXh0cyIsImJTdGF0aWNBY3Rpb24iLCJlbnRpdHlTZXROYW1lIiwiYXBwbGljYWJsZUNvbnRleHRzIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwiaXNOYXZpZ2FibGUiLCJlbmFibGVBdXRvU2Nyb2xsIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiY29udHJvbElkIiwiY29udGVudElkIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwibGFiZWwiLCJMYWJlbCIsInZhbHVlT2YiLCJtb2RlbCIsImdldE1vZGVsIiwib25BY3Rpb25QcmVzcyIsInByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24iLCJnZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIiLCJkYXRhRmllbGRDb250ZXh0IiwibmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwiZW5hYmxlQW5hbHl0aWNzIiwibmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJhcHBsaWNhYmxlUHJvcGVydHkiLCJub3RBcHBsaWNhYmxlUHJvcGVydHkiLCJTZW1hbnRpY09iamVjdCIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIk1hcHBpbmciLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0U291cmNlIiwibmF2aWdhdGUiLCJnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4iLCJnZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUiLCJmdWxsQ29udGV4dFBhdGgiLCJ2YWx1ZSIsIlZhbHVlIiwiYWRkU2luZ2xlUXVvdGVzIiwiZXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImlzQ29uc3RhbnQiLCJpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiIsInZhbHVlRXhwcmVzc2lvbiIsImZvcm1hdFZhbHVlUmVjdXJzaXZlbHkiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsImhlYWRlckluZm8iLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFubm90YXRpb25zIiwiVUkiLCJIZWFkZXJJbmZvIiwiZGVsZXRhYmxlQ29udGV4dHNQYXRoIiwic2VsZWN0ZWRDb250ZXh0c1BhdGgiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRoIiwidW5TYXZlZENvbnRleHRzUGF0aCIsImxvY2tlZENvbnRleHRzUGF0aCIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVBhdGgiLCJ0aXRsZUV4cHJlc3Npb24iLCJUaXRsZSIsImRlc2NyaXB0aW9uRXhwcmVzc2lvbiIsIkRlc2NyaXB0aW9uIiwiaWQiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInNlbGVjdGVkQ29udGV4dHMiLCJlZGl0RmxvdyIsImRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsIm9iamVjdFRvU3RyaW5nIiwiZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIiLCJub1dyYXAiLCJyZWxhdGVkQWN0aW9uRWxlbWVudCIsImZpbmRTbG90QWN0aW9uRnJvbUtleSIsImtleSIsImludGVybmFsTW9kZWxQYXRoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIkxvZyIsImVycm9yIiwiRlBNSGVscGVyIiwiYWN0aW9uV3JhcHBlciIsImhhbmRsZXJNb2R1bGUiLCJoYW5kbGVyTWV0aG9kIiwiY2F0Y2giLCJlcnIiLCJwcmVzcyIsImJ1aWxkQWN0aW9uV3JhcHBlciIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwib25NYXNzRWRpdEJ1dHRvblByZXNzZWQiLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImZvck1vdmVVcCIsIm9uTW92ZVVwRG93biIsImdldFBhc3RlSGFuZGxlciIsIm9uUGFzdGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHtcblx0dHlwZSBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdHR5cGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHR0eXBlIERhdGFGaWVsZFR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaXNDb25zdGFudCwgaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IHR5cGUgQmFzZUFjdGlvbiwgdHlwZSBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHsgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwiLi4vQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgeyB0eXBlIFRhYmxlQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcIi4vVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwiLi9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBVcGxvYWRUYWJsZVJ1bnRpbWUgZnJvbSBcIi4vdXBsb2FkVGFibGUvVXBsb2FkVGFibGVSdW50aW1lXCI7XG5cbnR5cGUgRXZlbnRIYW5kbGVyVHlwZSA9IChlOiBVSTVFdmVudCkgPT4gdm9pZDtcblxuLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc2hhcmUgdG8gQ29sbGFib3JhdGlvbiBNYW5hZ2VyIHNpbXVsdGFub3VzbHlcbmNvbnN0IHNlbGVjdGlvbkxpbWl0Rm9yU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyID0gMTtcbi8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIG9wZW4gaW4gbmV3IHRhYnMgc2ltdWx0YW5vdXNseVxuY29uc3Qgc2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIgPSAxMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciB7XG5cdGFkZENhcmRUb0luc2lnaHRzUHJlc3MhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGJlZm9yZUV4cG9ydCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0YmVmb3JlT3BlbkNvbnRleHRNZW51ITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRjb2xsYXBzZU5vZGU/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGNvbnRleHRNZW51SXRlbVNlbGVjdGVkITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRjb250ZXh0TWVudU9wZW5Jbk5ld1RhYj86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0Y29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXI6IEV2ZW50SGFuZGxlclR5cGUgfCB1bmRlZmluZWQ7XG5cblx0ZGF0YVN0YXRlQ2hhbmdlITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI/OiAobWVzc2FnZTogTWVzc2FnZSwgY29udHJvbDogQ29udHJvbCkgPT4gYm9vbGVhbjtcblxuXHRkcmFnU3RhcnREb2N1bWVudD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZHJhZ0VudGVyRG9jdW1lbnQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGRyb3BEb2N1bWVudD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZXhwYW5kTm9kZT86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93PzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRmaWVsZExpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHJvd1ByZXNzPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRzZWdtZW50ZWRCdXR0b25QcmVzcz86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0c2VsZWN0aW9uQ2hhbmdlITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR0YWJsZUNvbnRleHRDaGFuZ2U/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHVwbG9hZENvbXBsZXRlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkRmlsZU5hbWVMZW5ndGhFeGNlZWRlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkRmlsZVNpemVFeGNlZWRlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkSXRlbVZhbGlkYXRpb25IYW5kbGVyITogRnVuY3Rpb247XG5cblx0dXBsb2FkTWVkaWFUeXBlTWlzbWF0Y2ghOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHZhcmlhbnRTYXZlZD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dmFyaWFudFNlbGVjdGVkPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRwcml2YXRlIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cblx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSB0YWJsZUJsb2NrUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdFx0c2V0dGluZ3M6IHsgY29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5OyBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsIH0sXG5cdFx0cHJpdmF0ZSB0YWJsZUFQST86IFRhYmxlQVBJXG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudGl0eSA9IHNldHRpbmdzLmNvbGxlY3Rpb25FbnRpdHk7XG5cdFx0dGhpcy5tZXRhTW9kZWwgPSBzZXR0aW5ncy5tZXRhTW9kZWw7XG5cblx0XHRpZiAodGFibGVBUEkpIHtcblx0XHRcdHRoaXMuY29uc3RydWN0b3JXaXRoRnVuY3Rpb25zKHRhYmxlQVBJKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb25zdHJ1Y3RvcldpdGhTdHJpbmdzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBldmVudCBoYW5kbGVyIHByb3BlcnRpZXMgd2l0aCBzdHJpbmcgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBjb25zdHJ1Y3RvcldpdGhTdHJpbmdzKCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlVHlwZSA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy50eXBlO1xuXG5cdFx0dGhpcy5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzID0gXCJBUEkub25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQoJGV2ZW50LCAkY29udHJvbGxlcilcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5iZWZvcmVFeHBvcnQgPSBcIkFQSS5vbkJlZm9yZUV4cG9ydCgkZXZlbnQpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuYmVmb3JlT3BlbkNvbnRleHRNZW51ID0gXCJBUEkub25Db250ZXh0TWVudVByZXNzKCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5jb2xsYXBzZU5vZGUgPVxuXHRcdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKCRldmVudCwgZmFsc2UpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkID0gXCJUYWJsZVJ1bnRpbWUub25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRcdGNvbnN0IHJvd05hdmlnYXRpb25JbmZvID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmFubm90YXRpb24ucm93Py5uYXZpZ2F0aW9uSW5mbztcblx0XHRpZiAocm93TmF2aWdhdGlvbkluZm8gIT09IHVuZGVmaW5lZCB8fCB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLm92ZXJyaWRlUm93UHJlc3MpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcm93IHByZXNzIGRlZmluZWQsIHRoZXJlIGlzIGEgb3BlbiBpbiBuZXcgdGFiIGluIHRoZSBjb250ZXh0dWFsIG1lbnUgYW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGhhbmRsZXIgaXMgc3RpbGwgZGVmaW5lZFxuXHRcdFx0Ly8gY3VzdG9tZXIgZm91bmQgY2xldmVyIHdheXMgdG8gdXNlIGl0IGxpa2UgaW4gQ1MyMDI1MDAxMDAzNTEyNVxuXHRcdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvPy50eXBlID09PSBcIk91dGJvdW5kXCIpIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9XG5cdFx0XHRcdFx0YC5vbk9wZW5Jbk5ld1RhYk5hdmlnYXRlT3V0Qm91bmQoJyR7cm93TmF2aWdhdGlvbkluZm8ubmF2aWdhdGlvblRhcmdldH0nLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCBcIlwiLCAke3NlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFifSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXIgPVxuXHRcdFx0XHRcdGBBUEkub25TaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCAke3NlbGVjdGlvbkxpbWl0Rm9yU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyfSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9XG5cdFx0XHRcdFx0YEFQSS5vbk9wZW5Jbk5ld1RhYlByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c30sIHsgY2FsbEV4dGVuc2lvbjogdHJ1ZSwgdGFyZ2V0UGF0aDogJyR7XG5cdFx0XHRcdFx0XHRyb3dOYXZpZ2F0aW9uSW5mbz8udGFyZ2V0UGF0aCA/PyBcIlwiXG5cdFx0XHRcdFx0fScsIG5hdk1vZGU6ICdvcGVuSW5OZXdUYWInIH0sICR7c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJ9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuZGF0YVN0YXRlQ2hhbmdlID0gXCJBUEkub25EYXRhU3RhdGVDaGFuZ2VcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cblx0XHRpZiAodGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmNvbnRyb2w/Lmhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlcikge1xuXHRcdFx0dGhpcy5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIgPSBcIlRhYmxlUnVudGltZS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJcIiBhcyB1bmtub3duIGFzIChcblx0XHRcdFx0bWVzc2FnZTogTWVzc2FnZSxcblx0XHRcdFx0Y29udHJvbDogQ29udHJvbFxuXHRcdFx0KSA9PiBib29sZWFuO1xuXHRcdH1cblxuXHRcdHRoaXMuZHJhZ1N0YXJ0RG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25EcmFnU3RhcnREb2N1bWVudFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcmFnRW50ZXJEb2N1bWVudCA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkRyYWdFbnRlckRvY3VtZW50XCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRyb3BEb2N1bWVudCA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkRyb3BEb2N1bWVudFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5leHBhbmROb2RlID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKCRldmVudCwgdHJ1ZSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93ID0gYFRhYmxlUnVudGltZS5vbkZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdygkZXZlbnQsICR7ISF0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvblxuXHRcdFx0LmNvbnRyb2wuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9ufSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLmZpZWxkTGl2ZUNoYW5nZSA9XG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIlxuXHRcdFx0XHQ/IChcIkFQSS5vbkZpZWxkTGl2ZUNoYW5nZSgkZXZlbnQpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR0aGlzLnJvd1ByZXNzID0gXCJBUEkub25UYWJsZVJvd1ByZXNzXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuc2VnbWVudGVkQnV0dG9uUHJlc3MgPSBcIkFQSS5vblNlZ21lbnRlZEJ1dHRvblByZXNzZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5zZWxlY3Rpb25DaGFuZ2UgPSBcIkFQSS5vblNlbGVjdGlvbkNoYW5nZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy50YWJsZUNvbnRleHRDaGFuZ2UgPVxuXHRcdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdFx0XHRcdD8gKGBUYWJsZVJ1bnRpbWUub25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZCgkZXZlbnQsICR7dGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmFubm90YXRpb24/LmluaXRpYWxFeHBhbnNpb25MZXZlbH0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0dGhpcy51cGxvYWRDb21wbGV0ZWQgPSBcIlVwbG9hZFRhYmxlUnVudGltZS5vblVwbG9hZENvbXBsZXRlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQgPSBcIlVwbG9hZFRhYmxlUnVudGltZS5vbkZpbGVOYW1lTGVuZ3RoRXhjZWVkZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRGaWxlU2l6ZUV4Y2VlZGVkID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlU2l6ZUV4Y2VlZGVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkSXRlbVZhbGlkYXRpb25IYW5kbGVyID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUudXBsb2FkRmlsZVwiIGFzIHVua25vd24gYXMgRnVuY3Rpb247XG5cdFx0dGhpcy51cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCA9IFwiVXBsb2FkVGFibGVSdW50aW1lLm9uTWVkaWFUeXBlTWlzbWF0Y2hcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy52YXJpYW50U2F2ZWQgPSBcIkFQSS5vblZhcmlhbnRTYXZlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnZhcmlhbnRTZWxlY3RlZCA9IFwiQVBJLm9uVmFyaWFudFNlbGVjdGVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBldmVudCBoYW5kbGVyIHByb3BlcnRpZXMgd2l0aCBmdW5jdGlvbnMuXG5cdCAqIEBwYXJhbSB0YWJsZUFQSVxuXHQgKi9cblx0cHJpdmF0ZSBjb25zdHJ1Y3RvcldpdGhGdW5jdGlvbnModGFibGVBUEk6IFRhYmxlQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVUeXBlID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmNvbnRyb2w/LnR5cGU7XG5cblx0XHR0aGlzLmFkZENhcmRUb0luc2lnaHRzUHJlc3MgPSB0YWJsZUFQSS5vbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLmJlZm9yZUV4cG9ydCA9IHRhYmxlQVBJLm9uQmVmb3JlRXhwb3J0LmJpbmQodGFibGVBUEkpO1xuXHRcdHRoaXMuYmVmb3JlT3BlbkNvbnRleHRNZW51ID0gdGFibGVBUEkub25Db250ZXh0TWVudVByZXNzLmJpbmQodGFibGVBUEkpO1xuXHRcdHRoaXMuY29sbGFwc2VOb2RlID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQ/IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGFibGVBUEkub25Db2xsYXBzZUV4cGFuZE5vZGUoZSwgZmFsc2UpO1xuXHRcdFx0XHQgIH1cblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCA9IFRhYmxlUnVudGltZS5vbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkLmJpbmQoVGFibGVSdW50aW1lKTtcblxuXHRcdGNvbnN0IHJvd05hdmlnYXRpb25JbmZvID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmFubm90YXRpb24ucm93Py5uYXZpZ2F0aW9uSW5mbztcblx0XHRpZiAocm93TmF2aWdhdGlvbkluZm8gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvLnR5cGUgPT09IFwiT3V0Ym91bmRcIikge1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID0gKF9lOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRhYmxlQVBJLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8ub25PcGVuSW5OZXdUYWJOYXZpZ2F0ZU91dEJvdW5kPy4oXG5cdFx0XHRcdFx0XHRyb3dOYXZpZ2F0aW9uSW5mby5uYXZpZ2F0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdFx0c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciA9IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpITtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZUFQSS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdHRhYmxlQVBJLm9uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MoXG5cdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcixcblx0XHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0c2VsZWN0aW9uTGltaXRGb3JTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID0gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkhO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRhYmxlQVBJLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdFx0dGFibGVBUEkub25PcGVuSW5OZXdUYWJQcmVzcyhcblx0XHRcdFx0XHRcdGUsXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHR7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6IHJvd05hdmlnYXRpb25JbmZvLnRhcmdldFBhdGgsIG5hdk1vZGU6IFwib3BlbkluTmV3VGFiXCIgfSxcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmRhdGFTdGF0ZUNoYW5nZSA9IHRhYmxlQVBJLm9uRGF0YVN0YXRlQ2hhbmdlLmJpbmQodGFibGVBUEkpO1xuXG5cdFx0aWYgKHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy5oYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIpIHtcblx0XHRcdHRoaXMuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID0gdGFibGVBUEkuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyLmJpbmQodGFibGVBUEkpO1xuXHRcdH1cblxuXHRcdHRoaXMuZHJhZ1N0YXJ0RG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAodGFibGVBUEkub25EcmFnU3RhcnREb2N1bWVudC5iaW5kKHRhYmxlQVBJKSBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRyYWdFbnRlckRvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKHRhYmxlQVBJLm9uRHJhZ0VudGVyRG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcm9wRG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAodGFibGVBUEkub25Ecm9wRG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5leHBhbmROb2RlID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQ/IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGFibGVBUEkub25Db2xsYXBzZUV4cGFuZE5vZGUoZSwgdHJ1ZSk7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93ID0gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUub25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3coXG5cdFx0XHRcdGUgYXMgRmllbGQkQ2hhbmdlRXZlbnQgJiBVSTVFdmVudDx7IGlzVmFsaWQ6IGJvb2xlYW4gfT4sXG5cdFx0XHRcdCEhdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25cblx0XHRcdCk7XG5cdFx0fTtcblx0XHR0aGlzLmZpZWxkTGl2ZUNoYW5nZSA9XG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIiA/IHRhYmxlQVBJLm9uRmllbGRMaXZlQ2hhbmdlLmJpbmQodGFibGVBUEkpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMucm93UHJlc3MgPSB0YWJsZUFQSS5vblRhYmxlUm93UHJlc3MuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5zZWdtZW50ZWRCdXR0b25QcmVzcyA9IHRhYmxlQVBJLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZSA9IHRhYmxlQVBJLm9uU2VsZWN0aW9uQ2hhbmdlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnRhYmxlQ29udGV4dENoYW5nZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkKFxuXHRcdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbj8uaW5pdGlhbEV4cGFuc2lvbkxldmVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHQgIH1cblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLnVwbG9hZENvbXBsZXRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vblVwbG9hZENvbXBsZXRlZC5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSkgYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQgPSBVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZVNpemVFeGNlZWRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbkZpbGVTaXplRXhjZWVkZWQuYmluZChVcGxvYWRUYWJsZVJ1bnRpbWUpIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIgPSBVcGxvYWRUYWJsZVJ1bnRpbWUudXBsb2FkRmlsZS5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSk7XG5cdFx0dGhpcy51cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbk1lZGlhVHlwZU1pc21hdGNoLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNhdmVkID0gdGFibGVBUEkub25WYXJpYW50U2F2ZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy52YXJpYW50U2VsZWN0ZWQgPSB0YWJsZUFQSS5vblZhcmlhbnRTZWxlY3RlZC5iaW5kKHRhYmxlQVBJKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgQ3JlYXRlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEBwYXJhbSBmb3JDcmVhdGlvblJvd1xuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbiwgZm9yQ3JlYXRpb25Sb3c6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIGZvckNyZWF0aW9uUm93XG5cdFx0XHRcdD8gVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MuYmluZChUYWJsZVJ1bnRpbWUpXG5cdFx0XHRcdDogKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKGUsIGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkocGF0aCkpO1xuXHRcdFx0XHQgIH07XG5cdFx0fSBlbHNlIGlmICghZm9yQ3JlYXRpb25Sb3cpIHtcblx0XHRcdHJldHVybiBmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQ/IChcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudCwgJHtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpXG5cdFx0XHRcdDogKFwiVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MoJGV2ZW50LCAke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDcmVhdGUgbWVudSBpdGVtLlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIoaW5kZXg6IG51bWJlciwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRjb25zdCBwYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZU1lbnVJdGVtUHJlc3MoZSwgaW5kZXgsIHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KHBhdGgpKTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgVGFibGVSdW50aW1lLm9uQ3JlYXRlTWVudUl0ZW1QcmVzcygkZXZlbnQsICR7aW5kZXh9LCBcXCR7aW50ZXJuYWw+JHtwYXRofX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDdXQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDdXRIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25DdXQoZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25DdXQoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIENvcHkgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDb3B5SGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uQ29weShlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYEFQSS5vbkNvcHkoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYW4gYWN0aW9uIGJ1dHRvbi5cblx0ICogQHBhcmFtIGRhdGFGaWVsZFxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBwYXJlbnRBY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdGFjdGlvbjogQmFzZUFjdGlvbixcblx0XHRwYXJlbnRBY3Rpb246IEJhc2VBY3Rpb24gfCB1bmRlZmluZWQsXG5cdFx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cblx0KTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQodGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0UGF0aCA/IHRoaXMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSA6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25OYW1lID0gZGF0YUZpZWxkLkFjdGlvbjtcblx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGVOYW1lID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IGlzU3RhdGljQWN0aW9uID1cblx0XHRcdFx0dHlwZW9mIGFjdGlvbkNvbnRleHQ/LmdldE9iamVjdCgpICE9PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdChUYWJsZUhlbHBlci5faXNTdGF0aWNBY3Rpb24oYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCksIGFjdGlvbk5hbWUpIHx8XG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUoYWN0aW9uTmFtZS50b1N0cmluZygpLCB0YXJnZXRFbnRpdHlUeXBlTmFtZSkpO1xuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZVByb3BlcnR5UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3QgY29udGV4dE1lbnVQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGhpcy50YWJsZUFQSSEuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSE7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogIWlzU3RhdGljQWN0aW9uID8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGAke2NvbnRleHRNZW51UGF0aH1zZWxlY3RlZENvbnRleHRzYCkgOiBudWxsLFxuXHRcdFx0XHRcdGJTdGF0aWNBY3Rpb246IGlzU3RhdGljQWN0aW9uID8gaXNTdGF0aWNBY3Rpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogdGhpcy5jb2xsZWN0aW9uRW50aXR5Lm5hbWUsXG5cdFx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzOiAhaXNTdGF0aWNBY3Rpb25cblx0XHRcdFx0XHRcdD8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5UGF0aH0vYClcblx0XHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM6ICFpc1N0YXRpY0FjdGlvblxuXHRcdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHlQYXRofS9gKVxuXHRcdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRcdGlzTmF2aWdhYmxlOiAocGFyZW50QWN0aW9uID8/IGFjdGlvbikuaXNOYXZpZ2FibGUsXG5cdFx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogYWN0aW9uLmVuYWJsZUF1dG9TY3JvbGwsXG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBhY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogZGF0YUZpZWxkPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0XHRjb250cm9sSWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWw/LnZhbHVlT2YoKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsOiB0aGlzLnRhYmxlQVBJIS5nZXRQYWdlQ29udHJvbGxlcigpIS5nZXRNb2RlbCgpXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMudGFibGVBUEk/Lm9uQWN0aW9uUHJlc3MoZSwgdGhpcy50YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpISwgZGF0YUZpZWxkLkFjdGlvbi52YWx1ZU9mKCksIHBhcmFtcyk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gVGFibGVIZWxwZXIucHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbihcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnRleHRPYmplY3RQYXRoOiB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLFxuXHRcdFx0XHRcdGNvbnRlbnRJZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWRcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRpdHkubmFtZSxcblx0XHRcdFx0dGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRhY3Rpb25Db250ZXh0Py5nZXRPYmplY3QoKSxcblx0XHRcdFx0KHBhcmVudEFjdGlvbiA/PyBhY3Rpb24pLmlzTmF2aWdhYmxlLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlQXV0b1Njcm9sbCxcblx0XHRcdFx0YWN0aW9uLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbixcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCkgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciBhbiBJQk4gYWN0aW9uLlxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihhY3Rpb246IEJhc2VBY3Rpb24sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhRmllbGRDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoKTtcblx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IG9iamVjdDtcblx0XHRcdFx0fSA9IHt9O1xuXG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0cyA9IGZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHRcdFx0OiBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpO1xuXG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmICFkYXRhRmllbGQuSW5saW5lICYmIG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZykge1xuXHRcdFx0XHRcdGNvbnN0IGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdGNvbnN0IG5vdEFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmFwcGxpY2FibGVDb250ZXh0cyA9IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdGBpYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vJHthcHBsaWNhYmxlUHJvcGVydHl9L2Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cyA9IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdGBpYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHl9L2Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmxhYmVsID0gZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBkYXRhRmllbGQuTWFwcGluZztcblx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0XHRcdGlmIChuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdFx0XHRjb250cm9sbGVyPy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyhcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdGUuZ2V0U291cmNlPENvbnRyb2w+KClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/Ll9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRlLmdldFNvdXJjZTxDb250cm9sPigpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4oXG5cdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnUgPyBcIiR7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c31cIiA6IFwiJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfVwiLFxuXHRcdFx0XHRuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2csXG5cdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEV4cHJlc3Npb25Gb3JEYXRhRmllbGRWYWx1ZShcblx0XHRkYXRhRmllbGQ6IERhdGFGaWVsZFR5cGVzIHwgdW5kZWZpbmVkLFxuXHRcdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuXHQpOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgdmFsdWUgPSBkYXRhRmllbGQ/LlZhbHVlO1xuXHRcdGlmICghdmFsdWUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMudGFibGVBUEkgPyB2YWx1ZSA6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXModmFsdWUsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBleHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHZhbHVlKTtcblx0XHRcdGlmIChpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoZXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHZhbHVlRXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBEZWxldGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXREZWxldGVCdXR0b25QcmVzc0hhbmRsZXIoZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvID0gKCh0aGlzLmNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KT8uZW50aXR5VHlwZSB8fCAodGhpcy5jb2xsZWN0aW9uRW50aXR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk/LnRhcmdldFR5cGUpXG5cdFx0XHQ/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblxuXHRcdGNvbnN0IGNvbnRleHRNZW51UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRcdGNvbnN0IGRlbGV0YWJsZUNvbnRleHRzUGF0aCA9IGAke2NvbnRleHRNZW51UGF0aH1kZWxldGFibGVDb250ZXh0c2A7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9c2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlYDtcblx0XHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNgXG5cdFx0XHQ6IGAke2NvbnRleHRNZW51UGF0aH1udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNGb3JEZWxldGVgO1xuXHRcdGNvbnN0IHVuU2F2ZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9dW5TYXZlZENvbnRleHRzYDtcblx0XHRjb25zdCBsb2NrZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9bG9ja2VkQ29udGV4dHNgO1xuXHRcdGNvbnN0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVgO1xuXHRcdGNvbnN0IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVgO1xuXG5cdFx0Y29uc3QgdGl0bGVFeHByZXNzaW9uID0gdGhpcy5nZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0XHRoZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyxcblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXG5cdFx0Y29uc3QgZGVzY3JpcHRpb25FeHByZXNzaW9uID0gdGhpcy5nZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0XHRoZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyxcblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoX2U6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRpZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQsXG5cdFx0XHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KG51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1BhdGgpIGFzIG51bWJlcixcblx0XHRcdFx0XHR1blNhdmVkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkodW5TYXZlZENvbnRleHRzUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0bG9ja2VkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkobG9ja2VkQ29udGV4dHNQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRjb250cm9sSWQ6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250cm9sSWRcIiksXG5cdFx0XHRcdFx0dGl0bGU6IHRpdGxlRXhwcmVzc2lvbixcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25FeHByZXNzaW9uLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoc2VsZWN0ZWRDb250ZXh0c1BhdGgpIGFzIFY0Q29udGV4dFtdXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCk/LmVkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoZGVsZXRhYmxlQ29udGV4dHNQYXRoKSxcblx0XHRcdFx0XHRwYXJhbXNcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0aWQ6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXModGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQpLFxuXHRcdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHR1blNhdmVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHt1blNhdmVkQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHRsb2NrZWRDb250ZXh0czogYFxcJHtpbnRlcm5hbD4ke2xvY2tlZENvbnRleHRzUGF0aH19YCxcblx0XHRcdFx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZTogYFxcJHtpbnRlcm5hbD4ke2RyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRofX1gLFxuXHRcdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBgXFwke2ludGVybmFsPiR7ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVBhdGh9fWAsXG5cdFx0XHRcdGNvbnRyb2xJZDogXCIke2ludGVybmFsPmNvbnRyb2xJZH1cIixcblx0XHRcdFx0dGl0bGU6IHRpdGxlRXhwcmVzc2lvbixcblx0XHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uRXhwcmVzc2lvbixcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0czogYFxcJHtpbnRlcm5hbD4ke3NlbGVjdGVkQ29udGV4dHNQYXRofX1gXG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXG5cdFx0XHRcdFwiLmVkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzXCIsXG5cdFx0XHRcdGBcXCR7aW50ZXJuYWw+JHtkZWxldGFibGVDb250ZXh0c1BhdGh9fWAsXG5cdFx0XHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhwYXJhbXMpXG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciBhIG1hbmlmZXN0IGFjdGlvbiBidXR0b24uXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uOiBDdXN0b21BY3Rpb24sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGlmIChhY3Rpb24ubm9XcmFwID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIElmIG5vV3JhcCA9IHRydWUsIHRoZW4gdGhlIGFjdGlvbiBpcyBhIHNsb3QgYWN0aW9uIChkZWZpbmVkIGluIHRoZSBYTUwgdmlldyBhcyBhbiBhZ2dyZWdhdGlvbiBvZiB0aGUgdGFibGUgYmxvY2spXG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRBY3Rpb25FbGVtZW50ID0gdGhpcy50YWJsZUFQSS5maW5kU2xvdEFjdGlvbkZyb21LZXkoYWN0aW9uLmtleSk7XG5cdFx0XHRcdGlmIChyZWxhdGVkQWN0aW9uRWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGhpcy50YWJsZUFQSSEuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSE7XG5cdFx0XHRcdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnMgPSB7IC4uLmUuZ2V0UGFyYW1ldGVycygpLCBjb250ZXh0czogaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGludGVybmFsTW9kZWxQYXRoKSB9O1xuXHRcdFx0XHRcdFx0cmVsYXRlZEFjdGlvbkVsZW1lbnQuZmlyZUV2ZW50KFwicHJlc3NcIiwgZXZlbnRQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkbid0IGZpbmQgYWN0aW9uIHdpdGgga2V5IFwiICsgYWN0aW9uLmtleSk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGUsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRcdFx0Y29udGV4dHM6IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShpbnRlcm5hbE1vZGVsUGF0aClcblx0XHRcdFx0XHR9KS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY3VzdG9tIGFjdGlvblwiLCBlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gKGFjdGlvbi5ub1dyYXAgPT09IHRydWVcblx0XHRcdFx0PyBhY3Rpb24ucHJlc3Ncblx0XHRcdFx0OiBDb21tb25IZWxwZXIuYnVpbGRBY3Rpb25XcmFwcGVyKFxuXHRcdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdFx0eyBpZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQgfSxcblx0XHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdCAgKSkgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBtYXNzIGVkaXQgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgQVBJLm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKCRldmVudCwgJHtmb3JDb250ZXh0TWVudX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgdGhlIG1vdmUgdXAgLyBtb3ZlIGRvd24gYnV0dG9ucy5cblx0ICogQHBhcmFtIGZvck1vdmVVcFxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRNb3ZlVXBEb3duSGFuZGxlcihmb3JNb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25Nb3ZlVXBEb3duKGUsIGZvck1vdmVVcCwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25Nb3ZlVXBEb3duKCRldmVudCwgJHtmb3JNb3ZlVXB9LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIFBhc3RlIGFjdGlvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0UGFzdGVIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLnRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uUGFzdGUoZSwgY29udHJvbGxlciwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25QYXN0ZSgkZXZlbnQsICRjb250cm9sbGVyLCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQTRCQTtFQUNBLE1BQU1BLDRDQUE0QyxHQUFHLENBQUM7RUFDdEQ7RUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxFQUFFO0VBQUMsSUFFcEJDLHlCQUF5QjtJQXlEN0MsU0FBQUEsMEJBQ1NDLG9CQUEwQyxFQUNsREMsUUFBeUYsRUFDakZDLFFBQW1CLEVBQzFCO01BQUEsS0FIT0Ysb0JBQTBDLEdBQTFDQSxvQkFBMEM7TUFBQSxLQUUxQ0UsUUFBbUIsR0FBbkJBLFFBQW1CO01BRTNCLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUdGLFFBQVEsQ0FBQ0UsZ0JBQWdCO01BQ2pELElBQUksQ0FBQ0MsU0FBUyxHQUFHSCxRQUFRLENBQUNHLFNBQVM7TUFFbkMsSUFBSUYsUUFBUSxFQUFFO1FBQ2IsSUFBSSxDQUFDRyx3QkFBd0IsQ0FBQ0gsUUFBUSxDQUFDO01BQ3hDLENBQUMsTUFBTTtRQUNOLElBQUksQ0FBQ0ksc0JBQXNCLENBQUMsQ0FBQztNQUM5QjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtJQUZDQyxRQUFBLEdBQUFSLHlCQUFBO0lBQUEsSUFBQVMsTUFBQSxHQUFBVCx5QkFBQSxDQUFBVSxTQUFBO0lBQUFELE1BQUEsQ0FHUUYsc0JBQXNCLEdBQTlCLFNBQVFBLHNCQUFzQkEsQ0FBQSxFQUFTO01BQ3RDLE1BQU1JLFNBQVMsR0FBRyxJQUFJLENBQUNWLG9CQUFvQixDQUFDVyxlQUFlLEVBQUVDLE9BQU8sRUFBRUMsSUFBSTtNQUUxRSxJQUFJLENBQUNDLHNCQUFzQixHQUFHLHFEQUFvRjtNQUNsSCxJQUFJLENBQUNDLFlBQVksR0FBRyw0QkFBMkQ7TUFDL0UsSUFBSSxDQUFDQyxxQkFBcUIsR0FBRyxnQ0FBK0Q7TUFDNUYsSUFBSSxDQUFD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
|
|
460
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZWxlY3Rpb25MaW1pdEZvclNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsInRhYmxlQmxvY2tQcm9wZXJ0aWVzIiwic2V0dGluZ3MiLCJ0YWJsZUFQSSIsImNvbGxlY3Rpb25FbnRpdHkiLCJtZXRhTW9kZWwiLCJjb25zdHJ1Y3RvcldpdGhGdW5jdGlvbnMiLCJjb25zdHJ1Y3RvcldpdGhTdHJpbmdzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJ0YWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsImFkZENhcmRUb0luc2lnaHRzUHJlc3MiLCJiZWZvcmVFeHBvcnQiLCJiZWZvcmVPcGVuQ29udGV4dE1lbnUiLCJjb2xsYXBzZU5vZGUiLCJ1bmRlZmluZWQiLCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsInJvd05hdmlnYXRpb25JbmZvIiwiYW5ub3RhdGlvbiIsInJvdyIsIm5hdmlnYXRpb25JbmZvIiwib3ZlcnJpZGVSb3dQcmVzcyIsImNvbnRleHRNZW51T3BlbkluTmV3VGFiIiwibmF2aWdhdGlvblRhcmdldCIsImNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwidGFyZ2V0UGF0aCIsImRhdGFTdGF0ZUNoYW5nZSIsImhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRyYWdTdGFydERvY3VtZW50IiwiZHJhZ0VudGVyRG9jdW1lbnQiLCJkcm9wRG9jdW1lbnQiLCJleHBhbmROb2RlIiwiZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93IiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiZmllbGRMaXZlQ2hhbmdlIiwiY3JlYXRpb25Nb2RlIiwibmFtZSIsInJvd1ByZXNzIiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ0YWJsZUNvbnRleHRDaGFuZ2UiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJ1cGxvYWRDb21wbGV0ZWQiLCJ1cGxvYWRGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkIiwidXBsb2FkRmlsZVNpemVFeGNlZWRlZCIsInVwbG9hZEl0ZW1WYWxpZGF0aW9uSGFuZGxlciIsInVwbG9hZE1lZGlhVHlwZU1pc21hdGNoIiwidmFyaWFudFNhdmVkIiwidmFyaWFudFNlbGVjdGVkIiwib25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQiLCJiaW5kIiwib25CZWZvcmVFeHBvcnQiLCJvbkNvbnRleHRNZW51UHJlc3MiLCJlIiwib25Db2xsYXBzZUV4cGFuZE5vZGUiLCJUYWJsZVJ1bnRpbWUiLCJvbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwiX2UiLCJjb250cm9sbGVyIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uT3BlbkluTmV3VGFiTmF2aWdhdGVPdXRCb3VuZCIsImdldFByb3BlcnR5Iiwib25TaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJQcmVzcyIsIm9uT3BlbkluTmV3VGFiUHJlc3MiLCJjYWxsRXh0ZW5zaW9uIiwibmF2TW9kZSIsIm9uRGF0YVN0YXRlQ2hhbmdlIiwib25EcmFnU3RhcnREb2N1bWVudCIsIm9uRHJhZ0VudGVyRG9jdW1lbnQiLCJvbkRyb3BEb2N1bWVudCIsIm9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93Iiwib25GaWVsZExpdmVDaGFuZ2UiLCJvblRhYmxlUm93UHJlc3MiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJvblNlbGVjdGlvbkNoYW5nZWQiLCJvblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkIiwiVXBsb2FkVGFibGVSdW50aW1lIiwib25VcGxvYWRDb21wbGV0ZWQiLCJvbkZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQiLCJvbkZpbGVTaXplRXhjZWVkZWQiLCJ1cGxvYWRGaWxlIiwib25NZWRpYVR5cGVNaXNtYXRjaCIsIm9uVmFyaWFudFNhdmVkIiwib25WYXJpYW50U2VsZWN0ZWQiLCJnZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIiLCJmb3JDb250ZXh0TWVudSIsImZvckNyZWF0aW9uUm93Iiwib25DcmVhdGVCdXR0b25QcmVzcyIsInBhdGgiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImluZGV4Iiwib25DcmVhdGVNZW51SXRlbVByZXNzIiwiZ2V0Q3V0SGFuZGxlciIsIm9uQ3V0IiwiZ2V0Q29weUhhbmRsZXIiLCJvbkNvcHkiLCJnZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIiLCJkYXRhRmllbGQiLCJhY3Rpb24iLCJwYXJlbnRBY3Rpb24iLCJhY3Rpb25Db250ZXh0UGF0aCIsImFubm90YXRpb25QYXRoIiwiQ29tbW9uSGVscGVyIiwiZ2V0QWN0aW9uQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYWN0aW9uQ29udGV4dCIsImFjdGlvbk5hbWUiLCJBY3Rpb24iLCJ0YXJnZXRFbnRpdHlUeXBlTmFtZSIsImNvbnRleHRPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzU3RhdGljQWN0aW9uIiwiZ2V0T2JqZWN0IiwiVGFibGVIZWxwZXIiLCJfaXNTdGF0aWNBY3Rpb24iLCJfaXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZSIsInRvU3RyaW5nIiwiYXBwbGljYWJsZVByb3BlcnR5UGF0aCIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eVBhdGgiLCJjb250ZXh0TWVudVBhdGgiLCJwYXJhbXMiLCJjb250ZXh0cyIsImJTdGF0aWNBY3Rpb24iLCJlbnRpdHlTZXROYW1lIiwiYXBwbGljYWJsZUNvbnRleHRzIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwiaXNOYXZpZ2FibGUiLCJlbmFibGVBdXRvU2Nyb2xsIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiY29udHJvbElkIiwiY29udGVudElkIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwibGFiZWwiLCJMYWJlbCIsInZhbHVlT2YiLCJtb2RlbCIsImdldE1vZGVsIiwib25BY3Rpb25QcmVzcyIsInByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24iLCJnZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIiLCJkYXRhRmllbGRDb250ZXh0IiwibmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwiZW5hYmxlQW5hbHl0aWNzIiwibmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJhcHBsaWNhYmxlUHJvcGVydHkiLCJub3RBcHBsaWNhYmxlUHJvcGVydHkiLCJTZW1hbnRpY09iamVjdCIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIk1hcHBpbmciLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0U291cmNlIiwibmF2aWdhdGUiLCJnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4iLCJnZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUiLCJmdWxsQ29udGV4dFBhdGgiLCJ2YWx1ZSIsIlZhbHVlIiwiYWRkU2luZ2xlUXVvdGVzIiwiZXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImlzQ29uc3RhbnQiLCJpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiIsInZhbHVlRXhwcmVzc2lvbiIsImZvcm1hdFZhbHVlUmVjdXJzaXZlbHkiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsImhlYWRlckluZm8iLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFubm90YXRpb25zIiwiVUkiLCJIZWFkZXJJbmZvIiwiZGVsZXRhYmxlQ29udGV4dHNQYXRoIiwic2VsZWN0ZWRDb250ZXh0c1BhdGgiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRoIiwidW5TYXZlZENvbnRleHRzUGF0aCIsImxvY2tlZENvbnRleHRzUGF0aCIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVBhdGgiLCJ0aXRsZUV4cHJlc3Npb24iLCJUaXRsZSIsImRlc2NyaXB0aW9uRXhwcmVzc2lvbiIsIkRlc2NyaXB0aW9uIiwiaWQiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInNlbGVjdGVkQ29udGV4dHMiLCJlZGl0RmxvdyIsImRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsIm9iamVjdFRvU3RyaW5nIiwiZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIiLCJub1dyYXAiLCJyZWxhdGVkQWN0aW9uRWxlbWVudCIsImZpbmRTbG90QWN0aW9uRnJvbUtleSIsImtleSIsImludGVybmFsTW9kZWxQYXRoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIkxvZyIsImVycm9yIiwiRlBNSGVscGVyIiwiYWN0aW9uV3JhcHBlciIsImhhbmRsZXJNb2R1bGUiLCJoYW5kbGVyTWV0aG9kIiwiY2F0Y2giLCJlcnIiLCJwcmVzcyIsImJ1aWxkQWN0aW9uV3JhcHBlciIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwib25NYXNzRWRpdEJ1dHRvblByZXNzZWQiLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImZvck1vdmVVcCIsIm9uTW92ZVVwRG93biIsImdldFBhc3RlSGFuZGxlciIsIm9uUGFzdGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHtcblx0dHlwZSBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdHR5cGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHR0eXBlIERhdGFGaWVsZFR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaXNDb25zdGFudCwgaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IHR5cGUgQmFzZUFjdGlvbiwgdHlwZSBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHsgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwiLi4vQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgeyB0eXBlIFRhYmxlQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcIi4vVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwiLi9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBVcGxvYWRUYWJsZVJ1bnRpbWUgZnJvbSBcIi4vdXBsb2FkVGFibGUvVXBsb2FkVGFibGVSdW50aW1lXCI7XG5cbnR5cGUgRXZlbnRIYW5kbGVyVHlwZSA9IChlOiBVSTVFdmVudCkgPT4gdm9pZDtcblxuLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc2hhcmUgdG8gQ29sbGFib3JhdGlvbiBNYW5hZ2VyIHNpbXVsdGFub3VzbHlcbmNvbnN0IHNlbGVjdGlvbkxpbWl0Rm9yU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyID0gMTtcbi8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIG9wZW4gaW4gbmV3IHRhYnMgc2ltdWx0YW5vdXNseVxuY29uc3Qgc2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIgPSAxMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciB7XG5cdGFkZENhcmRUb0luc2lnaHRzUHJlc3MhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGJlZm9yZUV4cG9ydCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0YmVmb3JlT3BlbkNvbnRleHRNZW51ITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRjb2xsYXBzZU5vZGU/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGNvbnRleHRNZW51SXRlbVNlbGVjdGVkITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRjb250ZXh0TWVudU9wZW5Jbk5ld1RhYj86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0Y29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXI6IEV2ZW50SGFuZGxlclR5cGUgfCB1bmRlZmluZWQ7XG5cblx0ZGF0YVN0YXRlQ2hhbmdlITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI/OiAobWVzc2FnZTogTWVzc2FnZSwgY29udHJvbDogQ29udHJvbCkgPT4gYm9vbGVhbjtcblxuXHRkcmFnU3RhcnREb2N1bWVudD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZHJhZ0VudGVyRG9jdW1lbnQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGRyb3BEb2N1bWVudD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZXhwYW5kTm9kZT86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93PzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRmaWVsZExpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHJvd1ByZXNzPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRzZWdtZW50ZWRCdXR0b25QcmVzcz86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0c2VsZWN0aW9uQ2hhbmdlITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR0YWJsZUNvbnRleHRDaGFuZ2U/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHVwbG9hZENvbXBsZXRlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkRmlsZU5hbWVMZW5ndGhFeGNlZWRlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkRmlsZVNpemVFeGNlZWRlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkSXRlbVZhbGlkYXRpb25IYW5kbGVyITogRnVuY3Rpb247XG5cblx0dXBsb2FkTWVkaWFUeXBlTWlzbWF0Y2ghOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHZhcmlhbnRTYXZlZD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dmFyaWFudFNlbGVjdGVkPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRwcml2YXRlIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cblx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSB0YWJsZUJsb2NrUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdFx0c2V0dGluZ3M6IHsgY29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5OyBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsIH0sXG5cdFx0cHJpdmF0ZSB0YWJsZUFQST86IFRhYmxlQVBJXG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudGl0eSA9IHNldHRpbmdzLmNvbGxlY3Rpb25FbnRpdHk7XG5cdFx0dGhpcy5tZXRhTW9kZWwgPSBzZXR0aW5ncy5tZXRhTW9kZWw7XG5cblx0XHRpZiAodGFibGVBUEkpIHtcblx0XHRcdHRoaXMuY29uc3RydWN0b3JXaXRoRnVuY3Rpb25zKHRhYmxlQVBJKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb25zdHJ1Y3RvcldpdGhTdHJpbmdzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBldmVudCBoYW5kbGVyIHByb3BlcnRpZXMgd2l0aCBzdHJpbmcgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBjb25zdHJ1Y3RvcldpdGhTdHJpbmdzKCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlVHlwZSA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy50eXBlO1xuXG5cdFx0dGhpcy5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzID0gXCJBUEkub25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQoJGV2ZW50LCAkY29udHJvbGxlcilcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5iZWZvcmVFeHBvcnQgPSBcIkFQSS5vbkJlZm9yZUV4cG9ydCgkZXZlbnQpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuYmVmb3JlT3BlbkNvbnRleHRNZW51ID0gXCJBUEkub25Db250ZXh0TWVudVByZXNzKCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5jb2xsYXBzZU5vZGUgPVxuXHRcdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKCRldmVudCwgZmFsc2UpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkID0gXCJUYWJsZVJ1bnRpbWUub25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRcdGNvbnN0IHJvd05hdmlnYXRpb25JbmZvID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmFubm90YXRpb24ucm93Py5uYXZpZ2F0aW9uSW5mbztcblx0XHRpZiAocm93TmF2aWdhdGlvbkluZm8gIT09IHVuZGVmaW5lZCB8fCB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLm92ZXJyaWRlUm93UHJlc3MpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcm93IHByZXNzIGRlZmluZWQsIHRoZXJlIGlzIGEgb3BlbiBpbiBuZXcgdGFiIGluIHRoZSBjb250ZXh0dWFsIG1lbnUgYW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGhhbmRsZXIgaXMgc3RpbGwgZGVmaW5lZFxuXHRcdFx0Ly8gY3VzdG9tZXIgZm91bmQgY2xldmVyIHdheXMgdG8gdXNlIGl0IGxpa2UgaW4gQ1MyMDI1MDAxMDAzNTEyNVxuXHRcdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvPy50eXBlID09PSBcIk91dGJvdW5kXCIpIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9XG5cdFx0XHRcdFx0YC5vbk9wZW5Jbk5ld1RhYk5hdmlnYXRlT3V0Qm91bmQoJyR7cm93TmF2aWdhdGlvbkluZm8ubmF2aWdhdGlvblRhcmdldH0nLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCBcIlwiLCAke3NlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFifSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXIgPVxuXHRcdFx0XHRcdGBBUEkub25TaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCAke3NlbGVjdGlvbkxpbWl0Rm9yU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyfSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9XG5cdFx0XHRcdFx0YEFQSS5vbk9wZW5Jbk5ld1RhYlByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsICAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCAle2ludGVybmFsPmNvbnRleHRtZW51L25hdmlnYWJsZUNvbnRleHRzfSx7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICcke1xuXHRcdFx0XHRcdFx0cm93TmF2aWdhdGlvbkluZm8/LnRhcmdldFBhdGggPz8gXCJcIlxuXHRcdFx0XHRcdH0nLCBuYXZNb2RlOiAnb3BlbkluTmV3VGFiJyB9LCAke3NlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFifSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmRhdGFTdGF0ZUNoYW5nZSA9IFwiQVBJLm9uRGF0YVN0YXRlQ2hhbmdlXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdFx0aWYgKHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy5oYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIpIHtcblx0XHRcdHRoaXMuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID0gXCJUYWJsZVJ1bnRpbWUuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyXCIgYXMgdW5rbm93biBhcyAoXG5cdFx0XHRcdG1lc3NhZ2U6IE1lc3NhZ2UsXG5cdFx0XHRcdGNvbnRyb2w6IENvbnRyb2xcblx0XHRcdCkgPT4gYm9vbGVhbjtcblx0XHR9XG5cblx0XHR0aGlzLmRyYWdTdGFydERvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uRHJhZ1N0YXJ0RG9jdW1lbnRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZHJhZ0VudGVyRG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25EcmFnRW50ZXJEb2N1bWVudFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcm9wRG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25Ecm9wRG9jdW1lbnRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZXhwYW5kTm9kZSA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkNvbGxhcHNlRXhwYW5kTm9kZSgkZXZlbnQsIHRydWUpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdyA9IGBUYWJsZVJ1bnRpbWUub25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3coJGV2ZW50LCAkeyEhdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb25cblx0XHRcdC5jb250cm9sLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbn0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5maWVsZExpdmVDaGFuZ2UgPVxuXHRcdFx0dGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0XHRcdFx0PyAoXCJBUEkub25GaWVsZExpdmVDaGFuZ2UoJGV2ZW50KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSlcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5yb3dQcmVzcyA9IFwiQVBJLm9uVGFibGVSb3dQcmVzc1wiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnNlZ21lbnRlZEJ1dHRvblByZXNzID0gXCJBUEkub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuc2VsZWN0aW9uQ2hhbmdlID0gXCJBUEkub25TZWxlY3Rpb25DaGFuZ2VkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudGFibGVDb250ZXh0Q2hhbmdlID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQ/IChgVGFibGVSdW50aW1lLm9uVHJlZVRhYmxlQ29udGV4dENoYW5nZWQoJGV2ZW50LCAke3RoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uPy5pbml0aWFsRXhwYW5zaW9uTGV2ZWx9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMudXBsb2FkQ29tcGxldGVkID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUub25VcGxvYWRDb21wbGV0ZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZVNpemVFeGNlZWRlZCA9IFwiVXBsb2FkVGFibGVSdW50aW1lLm9uRmlsZVNpemVFeGNlZWRlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEl0ZW1WYWxpZGF0aW9uSGFuZGxlciA9IFwiVXBsb2FkVGFibGVSdW50aW1lLnVwbG9hZEZpbGVcIiBhcyB1bmtub3duIGFzIEZ1bmN0aW9uO1xuXHRcdHRoaXMudXBsb2FkTWVkaWFUeXBlTWlzbWF0Y2ggPSBcIlVwbG9hZFRhYmxlUnVudGltZS5vbk1lZGlhVHlwZU1pc21hdGNoXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNhdmVkID0gXCJBUEkub25WYXJpYW50U2F2ZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy52YXJpYW50U2VsZWN0ZWQgPSBcIkFQSS5vblZhcmlhbnRTZWxlY3RlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgZXZlbnQgaGFuZGxlciBwcm9wZXJ0aWVzIHdpdGggZnVuY3Rpb25zLlxuXHQgKiBAcGFyYW0gdGFibGVBUElcblx0ICovXG5cdHByaXZhdGUgY29uc3RydWN0b3JXaXRoRnVuY3Rpb25zKHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlVHlwZSA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy50eXBlO1xuXG5cdFx0dGhpcy5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzID0gdGFibGVBUEkub25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5iZWZvcmVFeHBvcnQgPSB0YWJsZUFQSS5vbkJlZm9yZUV4cG9ydC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLmJlZm9yZU9wZW5Db250ZXh0TWVudSA9IHRhYmxlQVBJLm9uQ29udGV4dE1lbnVQcmVzcy5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLmNvbGxhcHNlTm9kZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRhYmxlQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKGUsIGZhbHNlKTtcblx0XHRcdFx0ICB9XG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQgPSBUYWJsZVJ1bnRpbWUub25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZC5iaW5kKFRhYmxlUnVudGltZSk7XG5cblx0XHRjb25zdCByb3dOYXZpZ2F0aW9uSW5mbyA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uLnJvdz8ubmF2aWdhdGlvbkluZm87XG5cdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvICE9PSB1bmRlZmluZWQgfHwgdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0XHRpZiAocm93TmF2aWdhdGlvbkluZm8/LnR5cGUgPT09IFwiT3V0Ym91bmRcIikge1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID0gKF9lOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRhYmxlQVBJLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8ub25PcGVuSW5OZXdUYWJOYXZpZ2F0ZU91dEJvdW5kPy4oXG5cdFx0XHRcdFx0XHRyb3dOYXZpZ2F0aW9uSW5mby5uYXZpZ2F0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdFx0c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciA9IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpITtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZUFQSS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdHRhYmxlQVBJLm9uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MoXG5cdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcixcblx0XHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0c2VsZWN0aW9uTGltaXRGb3JTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID0gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkhO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRhYmxlQVBJLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdFx0dGFibGVBUEkub25PcGVuSW5OZXdUYWJQcmVzcyhcblx0XHRcdFx0XHRcdGUsXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbmF2aWdhYmxlQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHR7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6IHJvd05hdmlnYXRpb25JbmZvPy50YXJnZXRQYXRoID8/IFwiXCIsIG5hdk1vZGU6IFwib3BlbkluTmV3VGFiXCIgfSxcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmRhdGFTdGF0ZUNoYW5nZSA9IHRhYmxlQVBJLm9uRGF0YVN0YXRlQ2hhbmdlLmJpbmQodGFibGVBUEkpO1xuXG5cdFx0aWYgKHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy5oYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIpIHtcblx0XHRcdHRoaXMuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID0gdGFibGVBUEkuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyLmJpbmQodGFibGVBUEkpO1xuXHRcdH1cblxuXHRcdHRoaXMuZHJhZ1N0YXJ0RG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAodGFibGVBUEkub25EcmFnU3RhcnREb2N1bWVudC5iaW5kKHRhYmxlQVBJKSBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRyYWdFbnRlckRvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKHRhYmxlQVBJLm9uRHJhZ0VudGVyRG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcm9wRG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAodGFibGVBUEkub25Ecm9wRG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5leHBhbmROb2RlID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQ/IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGFibGVBUEkub25Db2xsYXBzZUV4cGFuZE5vZGUoZSwgdHJ1ZSk7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93ID0gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUub25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3coXG5cdFx0XHRcdGUgYXMgRmllbGQkQ2hhbmdlRXZlbnQgJiBVSTVFdmVudDx7IGlzVmFsaWQ6IGJvb2xlYW4gfT4sXG5cdFx0XHRcdCEhdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25cblx0XHRcdCk7XG5cdFx0fTtcblx0XHR0aGlzLmZpZWxkTGl2ZUNoYW5nZSA9XG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIiA/IHRhYmxlQVBJLm9uRmllbGRMaXZlQ2hhbmdlLmJpbmQodGFibGVBUEkpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMucm93UHJlc3MgPSB0YWJsZUFQSS5vblRhYmxlUm93UHJlc3MuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5zZWdtZW50ZWRCdXR0b25QcmVzcyA9IHRhYmxlQVBJLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZSA9IHRhYmxlQVBJLm9uU2VsZWN0aW9uQ2hhbmdlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnRhYmxlQ29udGV4dENoYW5nZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkKFxuXHRcdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbj8uaW5pdGlhbEV4cGFuc2lvbkxldmVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHQgIH1cblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLnVwbG9hZENvbXBsZXRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vblVwbG9hZENvbXBsZXRlZC5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSkgYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQgPSBVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZVNpemVFeGNlZWRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbkZpbGVTaXplRXhjZWVkZWQuYmluZChVcGxvYWRUYWJsZVJ1bnRpbWUpIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIgPSBVcGxvYWRUYWJsZVJ1bnRpbWUudXBsb2FkRmlsZS5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSk7XG5cdFx0dGhpcy51cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbk1lZGlhVHlwZU1pc21hdGNoLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNhdmVkID0gdGFibGVBUEkub25WYXJpYW50U2F2ZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy52YXJpYW50U2VsZWN0ZWQgPSB0YWJsZUFQSS5vblZhcmlhbnRTZWxlY3RlZC5iaW5kKHRhYmxlQVBJKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgQ3JlYXRlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEBwYXJhbSBmb3JDcmVhdGlvblJvd1xuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbiwgZm9yQ3JlYXRpb25Sb3c6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIGZvckNyZWF0aW9uUm93XG5cdFx0XHRcdD8gVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MuYmluZChUYWJsZVJ1bnRpbWUpXG5cdFx0XHRcdDogKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKGUsIGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkocGF0aCkpO1xuXHRcdFx0XHQgIH07XG5cdFx0fSBlbHNlIGlmICghZm9yQ3JlYXRpb25Sb3cpIHtcblx0XHRcdHJldHVybiBmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQ/IChcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudCwgJHtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpXG5cdFx0XHRcdDogKFwiVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MoJGV2ZW50LCAke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDcmVhdGUgbWVudSBpdGVtLlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIoaW5kZXg6IG51bWJlciwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRjb25zdCBwYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZU1lbnVJdGVtUHJlc3MoZSwgaW5kZXgsIHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KHBhdGgpKTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgVGFibGVSdW50aW1lLm9uQ3JlYXRlTWVudUl0ZW1QcmVzcygkZXZlbnQsICR7aW5kZXh9LCBcXCR7aW50ZXJuYWw+JHtwYXRofX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDdXQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDdXRIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25DdXQoZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25DdXQoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIENvcHkgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDb3B5SGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uQ29weShlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYEFQSS5vbkNvcHkoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYW4gYWN0aW9uIGJ1dHRvbi5cblx0ICogQHBhcmFtIGRhdGFGaWVsZFxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBwYXJlbnRBY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdGFjdGlvbjogQmFzZUFjdGlvbixcblx0XHRwYXJlbnRBY3Rpb246IEJhc2VBY3Rpb24gfCB1bmRlZmluZWQsXG5cdFx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cblx0KTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQodGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0UGF0aCA/IHRoaXMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSA6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25OYW1lID0gZGF0YUZpZWxkLkFjdGlvbjtcblx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGVOYW1lID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IGlzU3RhdGljQWN0aW9uID1cblx0XHRcdFx0dHlwZW9mIGFjdGlvbkNvbnRleHQ/LmdldE9iamVjdCgpICE9PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdChUYWJsZUhlbHBlci5faXNTdGF0aWNBY3Rpb24oYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCksIGFjdGlvbk5hbWUpIHx8XG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUoYWN0aW9uTmFtZS50b1N0cmluZygpLCB0YXJnZXRFbnRpdHlUeXBlTmFtZSkpO1xuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZVByb3BlcnR5UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3QgY29udGV4dE1lbnVQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGhpcy50YWJsZUFQSSEuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSE7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogIWlzU3RhdGljQWN0aW9uID8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGAke2NvbnRleHRNZW51UGF0aH1zZWxlY3RlZENvbnRleHRzYCkgOiBudWxsLFxuXHRcdFx0XHRcdGJTdGF0aWNBY3Rpb246IGlzU3RhdGljQWN0aW9uID8gaXNTdGF0aWNBY3Rpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogdGhpcy5jb2xsZWN0aW9uRW50aXR5Lm5hbWUsXG5cdFx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzOiAhaXNTdGF0aWNBY3Rpb25cblx0XHRcdFx0XHRcdD8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5UGF0aH0vYClcblx0XHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM6ICFpc1N0YXRpY0FjdGlvblxuXHRcdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHlQYXRofS9gKVxuXHRcdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRcdGlzTmF2aWdhYmxlOiAocGFyZW50QWN0aW9uID8/IGFjdGlvbikuaXNOYXZpZ2FibGUsXG5cdFx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogYWN0aW9uLmVuYWJsZUF1dG9TY3JvbGwsXG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBhY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogZGF0YUZpZWxkPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0XHRjb250cm9sSWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWw/LnZhbHVlT2YoKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsOiB0aGlzLnRhYmxlQVBJIS5nZXRQYWdlQ29udHJvbGxlcigpIS5nZXRNb2RlbCgpXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMudGFibGVBUEk/Lm9uQWN0aW9uUHJlc3MoZSwgdGhpcy50YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpISwgZGF0YUZpZWxkLkFjdGlvbi52YWx1ZU9mKCksIHBhcmFtcyk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gVGFibGVIZWxwZXIucHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbihcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnRleHRPYmplY3RQYXRoOiB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLFxuXHRcdFx0XHRcdGNvbnRlbnRJZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWRcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRpdHkubmFtZSxcblx0XHRcdFx0dGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRhY3Rpb25Db250ZXh0Py5nZXRPYmplY3QoKSxcblx0XHRcdFx0KHBhcmVudEFjdGlvbiA/PyBhY3Rpb24pLmlzTmF2aWdhYmxlLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlQXV0b1Njcm9sbCxcblx0XHRcdFx0YWN0aW9uLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbixcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCkgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciBhbiBJQk4gYWN0aW9uLlxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihhY3Rpb246IEJhc2VBY3Rpb24sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhRmllbGRDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoKTtcblx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IG9iamVjdDtcblx0XHRcdFx0fSA9IHt9O1xuXG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0cyA9IGZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHRcdFx0OiBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpO1xuXG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmICFkYXRhRmllbGQuSW5saW5lICYmIG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZykge1xuXHRcdFx0XHRcdGNvbnN0IGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdGNvbnN0IG5vdEFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmFwcGxpY2FibGVDb250ZXh0cyA9IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdGBpYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vJHthcHBsaWNhYmxlUHJvcGVydHl9L2Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cyA9IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdGBpYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHl9L2Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmxhYmVsID0gZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBkYXRhRmllbGQuTWFwcGluZztcblx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0XHRcdGlmIChuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdFx0XHRjb250cm9sbGVyPy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyhcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdGUuZ2V0U291cmNlPENvbnRyb2w+KClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/Ll9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRlLmdldFNvdXJjZTxDb250cm9sPigpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4oXG5cdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnUgPyBcIiR7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c31cIiA6IFwiJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfVwiLFxuXHRcdFx0XHRuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2csXG5cdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEV4cHJlc3Npb25Gb3JEYXRhRmllbGRWYWx1ZShcblx0XHRkYXRhRmllbGQ6IERhdGFGaWVsZFR5cGVzIHwgdW5kZWZpbmVkLFxuXHRcdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuXHQpOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgdmFsdWUgPSBkYXRhRmllbGQ/LlZhbHVlO1xuXHRcdGlmICghdmFsdWUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMudGFibGVBUEkgPyB2YWx1ZSA6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXModmFsdWUsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBleHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHZhbHVlKTtcblx0XHRcdGlmIChpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoZXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHZhbHVlRXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBEZWxldGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXREZWxldGVCdXR0b25QcmVzc0hhbmRsZXIoZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvID0gKCh0aGlzLmNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KT8uZW50aXR5VHlwZSB8fCAodGhpcy5jb2xsZWN0aW9uRW50aXR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk/LnRhcmdldFR5cGUpXG5cdFx0XHQ/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblxuXHRcdGNvbnN0IGNvbnRleHRNZW51UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRcdGNvbnN0IGRlbGV0YWJsZUNvbnRleHRzUGF0aCA9IGAke2NvbnRleHRNZW51UGF0aH1kZWxldGFibGVDb250ZXh0c2A7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9c2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlYDtcblx0XHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNgXG5cdFx0XHQ6IGAke2NvbnRleHRNZW51UGF0aH1udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNGb3JEZWxldGVgO1xuXHRcdGNvbnN0IHVuU2F2ZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9dW5TYXZlZENvbnRleHRzYDtcblx0XHRjb25zdCBsb2NrZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9bG9ja2VkQ29udGV4dHNgO1xuXHRcdGNvbnN0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVgO1xuXHRcdGNvbnN0IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVgO1xuXG5cdFx0Y29uc3QgdGl0bGVFeHByZXNzaW9uID0gdGhpcy5nZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0XHRoZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyxcblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXG5cdFx0Y29uc3QgZGVzY3JpcHRpb25FeHByZXNzaW9uID0gdGhpcy5nZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0XHRoZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyxcblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoX2U6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRpZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQsXG5cdFx0XHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KG51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1BhdGgpIGFzIG51bWJlcixcblx0XHRcdFx0XHR1blNhdmVkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkodW5TYXZlZENvbnRleHRzUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0bG9ja2VkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkobG9ja2VkQ29udGV4dHNQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRjb250cm9sSWQ6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250cm9sSWRcIiksXG5cdFx0XHRcdFx0dGl0bGU6IHRpdGxlRXhwcmVzc2lvbixcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25FeHByZXNzaW9uLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoc2VsZWN0ZWRDb250ZXh0c1BhdGgpIGFzIFY0Q29udGV4dFtdXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCk/LmVkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoZGVsZXRhYmxlQ29udGV4dHNQYXRoKSxcblx0XHRcdFx0XHRwYXJhbXNcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0aWQ6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXModGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQpLFxuXHRcdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHR1blNhdmVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHt1blNhdmVkQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHRsb2NrZWRDb250ZXh0czogYFxcJHtpbnRlcm5hbD4ke2xvY2tlZENvbnRleHRzUGF0aH19YCxcblx0XHRcdFx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZTogYFxcJHtpbnRlcm5hbD4ke2RyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRofX1gLFxuXHRcdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBgXFwke2ludGVybmFsPiR7ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVBhdGh9fWAsXG5cdFx0XHRcdGNvbnRyb2xJZDogXCIke2ludGVybmFsPmNvbnRyb2xJZH1cIixcblx0XHRcdFx0dGl0bGU6IHRpdGxlRXhwcmVzc2lvbixcblx0XHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uRXhwcmVzc2lvbixcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0czogYFxcJHtpbnRlcm5hbD4ke3NlbGVjdGVkQ29udGV4dHNQYXRofX1gXG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXG5cdFx0XHRcdFwiLmVkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzXCIsXG5cdFx0XHRcdGBcXCR7aW50ZXJuYWw+JHtkZWxldGFibGVDb250ZXh0c1BhdGh9fWAsXG5cdFx0XHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhwYXJhbXMpXG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciBhIG1hbmlmZXN0IGFjdGlvbiBidXR0b24uXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uOiBDdXN0b21BY3Rpb24sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGlmIChhY3Rpb24ubm9XcmFwID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIElmIG5vV3JhcCA9IHRydWUsIHRoZW4gdGhlIGFjdGlvbiBpcyBhIHNsb3QgYWN0aW9uIChkZWZpbmVkIGluIHRoZSBYTUwgdmlldyBhcyBhbiBhZ2dyZWdhdGlvbiBvZiB0aGUgdGFibGUgYmxvY2spXG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRBY3Rpb25FbGVtZW50ID0gdGhpcy50YWJsZUFQSS5maW5kU2xvdEFjdGlvbkZyb21LZXkoYWN0aW9uLmtleSk7XG5cdFx0XHRcdGlmIChyZWxhdGVkQWN0aW9uRWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGhpcy50YWJsZUFQSSEuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSE7XG5cdFx0XHRcdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnMgPSB7IC4uLmUuZ2V0UGFyYW1ldGVycygpLCBjb250ZXh0czogaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGludGVybmFsTW9kZWxQYXRoKSB9O1xuXHRcdFx0XHRcdFx0cmVsYXRlZEFjdGlvbkVsZW1lbnQuZmlyZUV2ZW50KFwicHJlc3NcIiwgZXZlbnRQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkbid0IGZpbmQgYWN0aW9uIHdpdGgga2V5IFwiICsgYWN0aW9uLmtleSk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGUsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRcdFx0Y29udGV4dHM6IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShpbnRlcm5hbE1vZGVsUGF0aClcblx0XHRcdFx0XHR9KS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY3VzdG9tIGFjdGlvblwiLCBlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gKGFjdGlvbi5ub1dyYXAgPT09IHRydWVcblx0XHRcdFx0PyBhY3Rpb24ucHJlc3Ncblx0XHRcdFx0OiBDb21tb25IZWxwZXIuYnVpbGRBY3Rpb25XcmFwcGVyKFxuXHRcdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdFx0eyBpZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQgfSxcblx0XHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdCAgKSkgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBtYXNzIGVkaXQgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgQVBJLm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKCRldmVudCwgJHtmb3JDb250ZXh0TWVudX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgdGhlIG1vdmUgdXAgLyBtb3ZlIGRvd24gYnV0dG9ucy5cblx0ICogQHBhcmFtIGZvck1vdmVVcFxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRNb3ZlVXBEb3duSGFuZGxlcihmb3JNb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25Nb3ZlVXBEb3duKGUsIGZvck1vdmVVcCwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25Nb3ZlVXBEb3duKCRldmVudCwgJHtmb3JNb3ZlVXB9LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIFBhc3RlIGFjdGlvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0UGFzdGVIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLnRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uUGFzdGUoZSwgY29udHJvbGxlciwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25QYXN0ZSgkZXZlbnQsICRjb250cm9sbGVyLCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQTRCQTtFQUNBLE1BQU1BLDRDQUE0QyxHQUFHLENBQUM7RUFDdEQ7RUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxFQUFFO0VBQUMsSUFFcEJDLHlCQUF5QjtJQXlEN0MsU0FBQUEsMEJBQ1NDLG9CQUEwQyxFQUNsREMsUUFBeUYsRUFDakZDLFFBQW1CLEVBQzFCO01BQUEsS0FIT0Ysb0JBQTBDLEdBQTFDQSxvQkFBMEM7TUFBQSxLQUUxQ0UsUUFBbUIsR0FBbkJBLFFBQW1CO01BRTNCLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUdGLFFBQVEsQ0FBQ0UsZ0JBQWdCO01BQ2pELElBQUksQ0FBQ0MsU0FBUyxHQUFHSCxRQUFRLENBQUNHLFNBQVM7TUFFbkMsSUFBSUYsUUFBUSxFQUFFO1FBQ2IsSUFBSSxDQUFDRyx3QkFBd0IsQ0FBQ0gsUUFBUSxDQUFDO01BQ3hDLENBQUMsTUFBTTtRQUNOLElBQUksQ0FBQ0ksc0JBQXNCLENBQUMsQ0FBQztNQUM5QjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtJQUZDQyxRQUFBLEdBQUFSLHlCQUFBO0lBQUEsSUFBQVMsTUFBQSxHQUFBVCx5QkFBQSxDQUFBVSxTQUFBO0lBQUFELE1BQUEsQ0FHUUYsc0JBQXNCLEdBQTlCLFNBQVFBLHNCQUFzQkEsQ0FBQSxFQUFTO01BQ3RDLE1BQU1JLFNBQVMs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
|
|
@@ -127,7 +127,7 @@ export default class TableEventHandlerProvider {
|
|
|
127
127
|
this.contextMenuShareToCollaborationManager =
|
|
128
128
|
`API.onShareToCollaborationManagerPress($event, $controller, %{internal>contextmenu/selectedContexts}, ${selectionLimitForShareToCollaborationManager})` as unknown as EventHandlerType;
|
|
129
129
|
this.contextMenuOpenInNewTab =
|
|
130
|
-
`API.onOpenInNewTabPress($event, $controller,
|
|
130
|
+
`API.onOpenInNewTabPress($event, $controller, %{internal>contextmenu/selectedContexts}, %{internal>contextmenu/navigableContexts},{ callExtension: true, targetPath: '${
|
|
131
131
|
rowNavigationInfo?.targetPath ?? ""
|
|
132
132
|
}', navMode: 'openInNewTab' }, ${selectionLimitForOpenInNewTab})` as unknown as EventHandlerType;
|
|
133
133
|
}
|
|
@@ -188,8 +188,8 @@ export default class TableEventHandlerProvider {
|
|
|
188
188
|
this.contextMenuItemSelected = TableRuntime.onContextMenuItemSelected.bind(TableRuntime);
|
|
189
189
|
|
|
190
190
|
const rowNavigationInfo = this.tableBlockProperties.tableDefinition?.annotation.row?.navigationInfo;
|
|
191
|
-
if (rowNavigationInfo !== undefined) {
|
|
192
|
-
if (rowNavigationInfo
|
|
191
|
+
if (rowNavigationInfo !== undefined || this.tableBlockProperties.overrideRowPress) {
|
|
192
|
+
if (rowNavigationInfo?.type === "Outbound") {
|
|
193
193
|
this.contextMenuOpenInNewTab = (_e: UI5Event): void => {
|
|
194
194
|
const controller = tableAPI.getPageController();
|
|
195
195
|
const internalContext = tableAPI.getBindingContext("internal");
|
|
@@ -218,7 +218,8 @@ export default class TableEventHandlerProvider {
|
|
|
218
218
|
e,
|
|
219
219
|
controller,
|
|
220
220
|
internalContext?.getProperty("contextmenu/selectedContexts"),
|
|
221
|
-
|
|
221
|
+
internalContext?.getProperty("contextmenu/navigableContexts"),
|
|
222
|
+
{ callExtension: true, targetPath: rowNavigationInfo?.targetPath ?? "", navMode: "openInNewTab" },
|
|
222
223
|
selectionLimitForOpenInNewTab
|
|
223
224
|
);
|
|
224
225
|
};
|