@sapui5/sap.fe.test 1.119.0 → 1.120.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/test/.library +1 -1
- package/src/sap/fe/test/BaseAssertions.js +1 -0
- package/src/sap/fe/test/FeMocks.js +3 -2
- package/src/sap/fe/test/FeMocks.ts +4 -1
- package/src/sap/fe/test/JestFlexibilityHelper.js +102 -99
- package/src/sap/fe/test/JestFlexibilityHelper.ts +107 -103
- package/src/sap/fe/test/JestTemplatingHelper.js +99 -38
- package/src/sap/fe/test/JestTemplatingHelper.ts +120 -50
- package/src/sap/fe/test/ListReport.js +12 -19
- package/src/sap/fe/test/UI5MockHelper.js +4 -3
- package/src/sap/fe/test/UI5MockHelper.ts +6 -1
- package/src/sap/fe/test/Utils.js +4 -0
- package/src/sap/fe/test/api/DialogValueHelpActions.js +1 -1
- package/src/sap/fe/test/api/EditState.js +1 -1
- package/src/sap/fe/test/api/FilterBarActions.js +1 -1
- package/src/sap/fe/test/api/FilterBarAssertions.js +1 -1
- package/src/sap/fe/test/builder/MdcTableBuilder.js +14 -1
- package/src/sap/fe/test/internal/ConsoleErrorChecker.js +4 -2
- package/src/sap/fe/test/internal/ConsoleErrorChecker.ts +2 -1
- package/src/sap/fe/test/library.js +1 -1
- package/ui5.yaml +1 -1
- package/src/sap/fe/test/library-preload.js +0 -18247
- package/src/sap/fe/test/library-preload.js.map +0 -1
- package/src/sap/fe/test/manifest.json +0 -35
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
import type { AnyAnnotation, ConvertedMetadata, EntitySet, Property } from "@sap-ux/vocabularies-types";
|
|
2
2
|
import compiler from "@sap/cds-compiler";
|
|
3
3
|
import * as fs from "fs";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import * as plugin from "@prettier/plugin-xml";
|
|
4
|
+
import type { Range, Ranges } from "htmljs-parser";
|
|
5
|
+
import { createParser } from "htmljs-parser";
|
|
7
6
|
import * as path from "path";
|
|
8
|
-
import type { Options } from "prettier";
|
|
9
|
-
import { format } from "prettier";
|
|
10
7
|
import Log from "sap/base/Log";
|
|
11
8
|
import LoaderExtensions from "sap/base/util/LoaderExtensions";
|
|
12
9
|
import merge from "sap/base/util/merge";
|
|
13
10
|
import AppComponent from "sap/fe/core/AppComponent";
|
|
11
|
+
import TemplateModel from "sap/fe/core/TemplateModel";
|
|
14
12
|
import { parseXMLString } from "sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor";
|
|
15
13
|
import ConverterContext from "sap/fe/core/converters/ConverterContext";
|
|
16
|
-
import type { IssueCategory, IssueSeverity } from "sap/fe/core/converters/helpers/IssueManager";
|
|
17
14
|
import type { ListReportManifestSettings, ObjectPageManifestSettings } from "sap/fe/core/converters/ManifestSettings";
|
|
18
15
|
import type { IDiagnostics } from "sap/fe/core/converters/TemplateConverter";
|
|
16
|
+
import type { IssueCategory, IssueSeverity } from "sap/fe/core/converters/helpers/IssueManager";
|
|
17
|
+
import type { SideEffectsService } from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
19
18
|
import SideEffectsFactory from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
20
|
-
import TemplateModel from "sap/fe/core/TemplateModel";
|
|
21
19
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
22
20
|
import { createMockResourceModel } from "sap/fe/test/UI5MockHelper";
|
|
23
21
|
import BindingParser from "sap/ui/base/BindingParser";
|
|
@@ -26,21 +24,21 @@ import ManagedObjectMetadata from "sap/ui/base/ManagedObjectMetadata";
|
|
|
26
24
|
import Component from "sap/ui/core/Component";
|
|
27
25
|
import type UI5Element from "sap/ui/core/Element";
|
|
28
26
|
import InvisibleText from "sap/ui/core/InvisibleText";
|
|
29
|
-
import Serializer from "sap/ui/core/util/serializer/Serializer";
|
|
30
|
-
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
31
27
|
import XMLTemplateProcessor from "sap/ui/core/XMLTemplateProcessor";
|
|
28
|
+
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
29
|
+
import Serializer from "sap/ui/core/util/serializer/Serializer";
|
|
30
|
+
import Utils from "sap/ui/fl/Utils";
|
|
32
31
|
import FlexState from "sap/ui/fl/apply/_internal/flexState/FlexState";
|
|
32
|
+
import Loader from "sap/ui/fl/apply/_internal/flexState/Loader";
|
|
33
33
|
import XmlPreprocessor from "sap/ui/fl/apply/_internal/preprocessors/XmlPreprocessor";
|
|
34
34
|
import AppStorage from "sap/ui/fl/initial/_internal/Storage";
|
|
35
|
-
import Utils from "sap/ui/fl/Utils";
|
|
36
35
|
import type Control from "sap/ui/mdc/Control";
|
|
37
36
|
import type Context from "sap/ui/model/Context";
|
|
38
|
-
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
39
37
|
import MetaModel from "sap/ui/model/MetaModel";
|
|
40
38
|
import type Model from "sap/ui/model/Model";
|
|
41
|
-
import
|
|
39
|
+
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
42
40
|
import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
43
|
-
import
|
|
41
|
+
import _MetadataRequestor from "sap/ui/model/odata/v4/lib/_MetadataRequestor";
|
|
44
42
|
import xpath from "xpath";
|
|
45
43
|
import type { ManagedObjectEx } from "../../../../../../types/extension_types";
|
|
46
44
|
import { createFlexibilityChangesObject } from "./JestFlexibilityHelper";
|
|
@@ -63,9 +61,6 @@ type JestTemplatedView = {
|
|
|
63
61
|
asString: string;
|
|
64
62
|
};
|
|
65
63
|
|
|
66
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
67
|
-
const formatXml = require("xml-formatter");
|
|
68
|
-
|
|
69
64
|
Log.setLevel(1 as any, "sap.ui.core.util.XMLPreprocessor");
|
|
70
65
|
jest.setTimeout(40000);
|
|
71
66
|
|
|
@@ -149,12 +144,6 @@ async function _buildPreProcessorSettings(
|
|
|
149
144
|
return settings;
|
|
150
145
|
}
|
|
151
146
|
|
|
152
|
-
function _removeCommentFromXml(xml: string): string {
|
|
153
|
-
return formatXml(xml, {
|
|
154
|
-
filter: (node: any) => node.type !== "Comment"
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
|
|
158
147
|
function _loadResourceView(viewName: string): Element {
|
|
159
148
|
const name = viewName.replace(/\./g, "/") + ".view.xml";
|
|
160
149
|
const view = LoaderExtensions.loadResource(name);
|
|
@@ -219,13 +208,11 @@ expect.extend({
|
|
|
219
208
|
}
|
|
220
209
|
});
|
|
221
210
|
|
|
222
|
-
export const formatBuildingBlockXML = function (xmlString: string | string[]) {
|
|
211
|
+
export const formatBuildingBlockXML = function (xmlString: string | string[]): string {
|
|
223
212
|
if (Array.isArray(xmlString)) {
|
|
224
213
|
xmlString = xmlString.join("");
|
|
225
214
|
}
|
|
226
|
-
|
|
227
|
-
xmlFormatted = xmlFormatted.replace(/uid--id-[0-9]{13}-[0-9]{1,3}/g, "uid--id");
|
|
228
|
-
return xmlFormatted;
|
|
215
|
+
return formatXML(xmlString);
|
|
229
216
|
};
|
|
230
217
|
|
|
231
218
|
export const getControlAttribute = function (controlSelector: string, attributeName: string, xmlDom: Node) {
|
|
@@ -252,12 +239,90 @@ export const serializeXML = function (xmlDom: Node, selector?: string) {
|
|
|
252
239
|
return formatXML(xmlString);
|
|
253
240
|
};
|
|
254
241
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
242
|
+
/**
|
|
243
|
+
* Formats a string containing an XML document.
|
|
244
|
+
*
|
|
245
|
+
* This function only considers XML tags and attributes, ignoring everything else (text, comments). Additionally,
|
|
246
|
+
* attribute values containing a varying UID are replaced with a constant value.
|
|
247
|
+
*
|
|
248
|
+
* An "XML" string containing multiple root elements can be.
|
|
249
|
+
*
|
|
250
|
+
* @param xmlString The input XML string. This function also accepts "XML" strings with multiple root elements.
|
|
251
|
+
* @returns The formatted XML string.
|
|
252
|
+
*/
|
|
253
|
+
export const formatXML = function (xmlString: string): string {
|
|
254
|
+
const START = "<__XML__>",
|
|
255
|
+
END = "</__XML__>",
|
|
256
|
+
UID = /uid--id-\d{13}-\d{1,3}/,
|
|
257
|
+
lines: string[] = [];
|
|
258
|
+
|
|
259
|
+
let currentLine = "",
|
|
260
|
+
level = -1,
|
|
261
|
+
attributes: { name: string; value?: string }[] = [];
|
|
262
|
+
|
|
263
|
+
function newline() {
|
|
264
|
+
if (currentLine && currentLine !== START) {
|
|
265
|
+
lines.push(currentLine);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
currentLine = level > 0 ? " ".repeat(level) : "";
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function appendAttributes() {
|
|
272
|
+
if (attributes.length > 0) {
|
|
273
|
+
// attributes = attributes.sort((a, b) => a.name.localeCompare(b.name));
|
|
274
|
+
attributes = attributes.reverse();
|
|
275
|
+
|
|
276
|
+
level++;
|
|
277
|
+
for (const attribute of attributes) {
|
|
278
|
+
newline();
|
|
279
|
+
currentLine += attribute.name;
|
|
280
|
+
if (attribute.value) currentLine += attribute.value;
|
|
281
|
+
}
|
|
282
|
+
level--;
|
|
283
|
+
attributes = [];
|
|
284
|
+
newline();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
function append(data: Range) {
|
|
289
|
+
currentLine += parser.read(data);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
const parser = createParser({
|
|
293
|
+
onOpenTagStart(data: Range) {
|
|
294
|
+
newline();
|
|
295
|
+
append(data);
|
|
296
|
+
},
|
|
297
|
+
|
|
298
|
+
onOpenTagName: append,
|
|
299
|
+
|
|
300
|
+
onAttrName(data: Range) {
|
|
301
|
+
attributes.unshift({ name: parser.read(data) });
|
|
302
|
+
},
|
|
303
|
+
|
|
304
|
+
onAttrValue(data: Ranges.AttrValue) {
|
|
305
|
+
attributes[0].value = parser.read(data).replace(UID, "uid--id"); // replace varying UIDs with a constant value
|
|
306
|
+
},
|
|
307
|
+
|
|
308
|
+
onOpenTagEnd(data: Ranges.OpenTagEnd) {
|
|
309
|
+
appendAttributes();
|
|
310
|
+
append(data);
|
|
311
|
+
if (!data.selfClosed) level++;
|
|
312
|
+
},
|
|
313
|
+
|
|
314
|
+
onCloseTagStart(data: Range) {
|
|
315
|
+
level--;
|
|
316
|
+
newline();
|
|
317
|
+
append(data);
|
|
318
|
+
},
|
|
319
|
+
|
|
320
|
+
onCloseTagName: append,
|
|
321
|
+
onCloseTagEnd: append
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
parser.parse(START + xmlString + END);
|
|
325
|
+
return lines.join("\n").trim();
|
|
261
326
|
};
|
|
262
327
|
|
|
263
328
|
/**
|
|
@@ -325,25 +390,27 @@ export function cds2edmx(cds: string, service = "sap.fe.test.JestService", optio
|
|
|
325
390
|
return edmx;
|
|
326
391
|
}
|
|
327
392
|
|
|
328
|
-
export const getFakeSideEffectsService = async function (
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
393
|
+
export const getFakeSideEffectsService = async function (
|
|
394
|
+
metaModel: ODataMetaModel,
|
|
395
|
+
classNameODataModel = "sap.ui.model.odata.v4.ODataModel"
|
|
396
|
+
): Promise<SideEffectsService> {
|
|
397
|
+
const scopeObject = {
|
|
398
|
+
getModel: () => {
|
|
333
399
|
return {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
getMetaModel: function () {
|
|
338
|
-
return oMetaModel;
|
|
339
|
-
}
|
|
340
|
-
};
|
|
341
|
-
}
|
|
400
|
+
isA: () => classNameODataModel === "sap.ui.model.odata.v4.ODataModel",
|
|
401
|
+
getMetaModel: () => {
|
|
402
|
+
return metaModel;
|
|
342
403
|
}
|
|
343
404
|
};
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
|
|
405
|
+
},
|
|
406
|
+
getService: () => {
|
|
407
|
+
return {
|
|
408
|
+
getCapabilities: () => undefined
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
const serviceInstance = await new SideEffectsFactory().createInstance({ scopeObject, scopeType: "", settings: {} });
|
|
413
|
+
return serviceInstance.getInterface();
|
|
347
414
|
};
|
|
348
415
|
|
|
349
416
|
export const getFakeDiagnostics = function (): IDiagnostics {
|
|
@@ -478,7 +545,10 @@ const applyFlexChanges = async function (flexChanges: { [x: string]: object[] },
|
|
|
478
545
|
} as unknown as AppComponent;
|
|
479
546
|
//fake changes
|
|
480
547
|
jest.spyOn(AppStorage, "loadFlexData").mockReturnValue(Promise.resolve(changes));
|
|
548
|
+
jest.spyOn(Loader, "loadFlexData").mockReturnValue(Promise.resolve(changes));
|
|
549
|
+
|
|
481
550
|
jest.spyOn(Component, "get").mockReturnValue(oAppComponent);
|
|
551
|
+
jest.spyOn(Component as unknown as { getComponentById: () => AppComponent }, "getComponentById").mockReturnValue(oAppComponent);
|
|
482
552
|
jest.spyOn(Utils, "getAppComponentForControl").mockReturnValue(oAppComponent);
|
|
483
553
|
await FlexState.initialize({
|
|
484
554
|
componentId: appId
|
|
@@ -571,7 +641,7 @@ export async function processView(
|
|
|
571
641
|
}
|
|
572
642
|
return {
|
|
573
643
|
asElement: oPreprocessedView,
|
|
574
|
-
asString:
|
|
644
|
+
asString: formatXML(oPreprocessedView?.outerHTML || "")
|
|
575
645
|
};
|
|
576
646
|
}
|
|
577
647
|
|
|
@@ -615,7 +685,7 @@ export async function processFragment(name: string, testData: { [model: string]:
|
|
|
615
685
|
// Keep the fragment result as child of root node when fragment generates multiple root controls
|
|
616
686
|
const xmlResult = resultDoc.children.length > 1 ? resultDoc.outerHTML : resultDoc.innerHTML;
|
|
617
687
|
|
|
618
|
-
return
|
|
688
|
+
return formatXML(xmlResult);
|
|
619
689
|
}
|
|
620
690
|
|
|
621
691
|
export function serializeControl(controlToSerialize: UI5Element | UI5Element[]) {
|
|
@@ -88,6 +88,16 @@ sap.ui.define(
|
|
|
88
88
|
PageId = "fe::ListReport",
|
|
89
89
|
aAdditionalPageDefinitions = Array.isArray(arguments[1]) ? arguments[1] : Array.prototype.slice.call(arguments, 1);
|
|
90
90
|
|
|
91
|
+
function _complementTableIdentifier(tableIdentifier) {
|
|
92
|
+
if (!tableIdentifier) {
|
|
93
|
+
tableIdentifier = { id: SingleTableId };
|
|
94
|
+
} else {
|
|
95
|
+
var sTableProperty = !Utils.isOfType(tableIdentifier, String) ? tableIdentifier.property : tableIdentifier;
|
|
96
|
+
tableIdentifier = { id: getTableId(sTableProperty) };
|
|
97
|
+
}
|
|
98
|
+
return tableIdentifier;
|
|
99
|
+
}
|
|
100
|
+
|
|
91
101
|
return TemplatePage.apply(
|
|
92
102
|
TemplatePage,
|
|
93
103
|
[
|
|
@@ -111,15 +121,7 @@ sap.ui.define(
|
|
|
111
121
|
* @public
|
|
112
122
|
*/
|
|
113
123
|
onTable: function (vTableIdentifier) {
|
|
114
|
-
|
|
115
|
-
if (vTableIdentifier) {
|
|
116
|
-
sTableId = !Utils.isOfType(vTableIdentifier, String)
|
|
117
|
-
? getTableId(vTableIdentifier.property)
|
|
118
|
-
: vTableIdentifier;
|
|
119
|
-
} else {
|
|
120
|
-
sTableId = SingleTableId;
|
|
121
|
-
}
|
|
122
|
-
return this._onTable({ id: sTableId });
|
|
124
|
+
return this._onTable(_complementTableIdentifier(vTableIdentifier));
|
|
123
125
|
},
|
|
124
126
|
onChart: function (vChartIdentifier) {
|
|
125
127
|
var sChartId;
|
|
@@ -317,16 +319,7 @@ sap.ui.define(
|
|
|
317
319
|
* @public
|
|
318
320
|
*/
|
|
319
321
|
onTable: function (vTableIdentifier) {
|
|
320
|
-
|
|
321
|
-
vTableIdentifier = { id: SingleTableId };
|
|
322
|
-
} else {
|
|
323
|
-
var sTableProperty = !Utils.isOfType(vTableIdentifier, String)
|
|
324
|
-
? vTableIdentifier.property
|
|
325
|
-
: vTableIdentifier;
|
|
326
|
-
vTableIdentifier = { id: getTableId(sTableProperty) };
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
return this._onTable(vTableIdentifier);
|
|
322
|
+
return this._onTable(_complementTableIdentifier(vTableIdentifier));
|
|
330
323
|
},
|
|
331
324
|
onChart: function (vChartIdentifier) {
|
|
332
325
|
var sChartId;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerextensions/EditFlow", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/ResourceModel", "sap/ui/base/Event", "sap/ui/core/mvc/Controller", "sap/ui/core/mvc/View", "sap/ui/model/CompositeBinding", "sap/ui/model/odata/v4/Context", "sap/ui/model/odata/v4/ODataContextBinding", "sap/ui/model/odata/v4/ODataListBinding", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/model/odata/v4/ODataModel", "sap/ui/model/odata/v4/ODataPropertyBinding"], function (generic, EditFlow, InternalRouting, Share, SideEffects, ResourceModel, Event, Controller, View, CompositeBinding, Context, ODataContextBinding, ODataListBinding, ODataMetaModel, ODataModel, ODataPropertyBinding) {
|
|
5
|
+
sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/AppComponent", "sap/fe/core/controllerextensions/EditFlow", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/Recommendations", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/ResourceModel", "sap/ui/base/Event", "sap/ui/core/mvc/Controller", "sap/ui/core/mvc/View", "sap/ui/model/CompositeBinding", "sap/ui/model/odata/v4/Context", "sap/ui/model/odata/v4/ODataContextBinding", "sap/ui/model/odata/v4/ODataListBinding", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/model/odata/v4/ODataModel", "sap/ui/model/odata/v4/ODataPropertyBinding"], function (generic, AppComponent, EditFlow, InternalRouting, Recommendations, Share, SideEffects, ResourceModel, Event, Controller, View, CompositeBinding, Context, ODataContextBinding, ODataListBinding, ODataMetaModel, ODataModel, ODataPropertyBinding) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -410,7 +410,8 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
|
|
|
410
410
|
mocked._sideEffects = mock(SideEffects);
|
|
411
411
|
mocked.editFlow = mock(EditFlow);
|
|
412
412
|
mocked.share = mock(Share);
|
|
413
|
-
|
|
413
|
+
mocked.recommendations = mock(Recommendations);
|
|
414
|
+
mocked.getAppComponent = jest.fn().mockReturnValue(mock(AppComponent));
|
|
414
415
|
// Default Behavior
|
|
415
416
|
mocked.mock.getView.mockReturnValue(createMockView());
|
|
416
417
|
mocked.mock.isA.mockReturnValue(false);
|
|
@@ -481,4 +482,4 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
|
|
|
481
482
|
_exports.createMockResourceModel = createMockResourceModel;
|
|
482
483
|
return _exports;
|
|
483
484
|
}, false);
|
|
484
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJrZXlPcktleXMiLCJBcnJheSIsImlzQXJyYXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsImdldFBhcmFtZXRlcnMiLCJNb2NrRXZlbnQiLCJjcmVhdGVNb2NrTGlzdEJpbmRpbmciLCJhQ29udGV4dERhdGEiLCJvTW9ja01vZGVsIiwiT0RhdGFMaXN0QmluZGluZyIsIl9hTW9ja0NvbnRleHRzIiwiY29udGV4dERhdGEiLCJfbW9ja01vZGVsIiwic2V0TW9kZWwiLCJtb2RlbCIsInJlcXVlc3RDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImdldENvbnRleHRzIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIm1vY2tSZXR1cm5WYWx1ZSIsIk1vY2tMaXN0QmluZGluZyIsImNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmciLCJPRGF0YVByb3BlcnR5QmluZGluZyIsIl92YWx1ZSIsIl9wYXRoIiwiZ2V0VmFsdWUiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJhQmluZGluZ3MiLCJDb21wb3NpdGVCaW5kaW5nIiwiX2FCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb21wb3NpdGVCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJPRGF0YUNvbnRleHRCaW5kaW5nIiwibW9ja01vZGVsIiwib01vY2tDb250ZXh0IiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIm9Nb2RlbCIsImdldEJvdW5kQ29udGV4dCIsImV4ZWN1dGUiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIk1vY2tDb250ZXh0QmluZGluZyIsImNyZWF0ZU1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJPRGF0YU1ldGFNb2RlbCIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0Iiwic1BhdGgiLCIkcGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJtZXRhbW9kZWwiLCJNb2NrTWV0YU1vZGVsIiwiY3JlYXRlTW9ja01vZGVsIiwib01vY2tMaXN0QmluZGluZyIsIm9Nb2NrQ29udGV4dEJpbmRpbmciLCJPRGF0YU1vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwic2V0TWV0YU1vZGVsIiwib01ldGFNb2RlbCIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJNb2NrTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWxGcm9tTGlzdEJpbmRpbmciLCJjcmVhdGVNb2NrTW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJjcmVhdGVNb2NrVmlldyIsIlZpZXciLCJNb2NrVmlldyIsImNyZWF0ZU1vY2tDb250cm9sbGVyIiwiQ29udHJvbGxlciIsIl9yb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nIiwiX3NpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHMiLCJlZGl0RmxvdyIsIkVkaXRGbG93Iiwic2hhcmUiLCJTaGFyZSIsImdldFZpZXciLCJNb2NrQ29udHJvbGxlciIsIm1vY2tNVkMiLCJleGlzdGluZyIsInZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImdldFRleHQiLCJ0ZXh0SUQiLCJwYXJhbWV0ZXJzIiwibWV0YVBhdGgiLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbCIsImJ1bmRsZU5hbWUiLCJlbmhhbmNlV2l0aCIsImFzeW5jIiwiY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwiLCJqZXN0IiwiZm4iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBXaXRoTW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgeyBtb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFxuICovXG5leHBvcnQgdHlwZSBNb2NrQ29udGV4dCA9IFdpdGhNb2NrPENvbnRleHQ+ICYge1xuXHRfaXNLZXB0QWxpdmU6IGJvb2xlYW47XG5cdF9jb250ZXh0RGF0YTogYW55O1xuXHRfb0JpbmRpbmc6IGFueTtcblx0X2lzSW5hY3RpdmU6IGJvb2xlYW47XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrQ29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHREYXRhIEEgbWFwIG9mIHRoZSBkaWZmZXJlbnQgcHJvcGVydGllcyBvZiB0aGUgY29udGV4dC4gVGhlIHZhbHVlIGZvciB0aGUga2V5ICckcGF0aCcgd2lsbCBiZSByZXR1cm5lZCBieSB0aGUgJ2dldFBhdGgnIG1ldGhvZFxuICogQHBhcmFtIG9CaW5kaW5nIFRoZSBiaW5kaW5nIG9mIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0gaXNJbmFjdGl2ZSBJcyB0aGUgY29udGV4dCBpbmlhY3RpdmUgb3Igbm90XG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrQ29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHQob0NvbnRleHREYXRhPzogYW55LCBvQmluZGluZz86IGFueSwgaXNJbmFjdGl2ZT86IGJvb2xlYW4pOiBNb2NrQ29udGV4dCB7XG5cdC8vIFVnbHkgd29ya2Fyb3VuZCB0byBnZXQgYSBwcm9wZXIgbW9jayBwYmplY3QsIGFzIENvbnRleHQgaXNuJ3QgcHJvcGVybHkgZXhwb3J0ZWQgZnJvbSBVSTVcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPYmplY3QuZ2V0UHJvdG90eXBlT2YoKENvbnRleHQgYXMgYW55KS5jcmVhdGVOZXdDb250ZXh0KG51bGwsIG51bGwsIFwiL2VcIikpKSBhcyBNb2NrQ29udGV4dDtcblx0bW9ja2VkLl9pc0tlcHRBbGl2ZSA9IGZhbHNlO1xuXHRtb2NrZWQuX2NvbnRleHREYXRhID0gb0NvbnRleHREYXRhIHx8IHt9O1xuXHRtb2NrZWQuX29CaW5kaW5nID0gb0JpbmRpbmc7XG5cdG1vY2tlZC5faXNJbmFjdGl2ZSA9ICEhaXNJbmFjdGl2ZTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRQcm9wZXJ0eS5tb2NrSW1wbGVtZW50YXRpb24oKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fY29udGV4dERhdGFba2V5XTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLnJlcXVlc3RQcm9wZXJ0eS5tb2NrSW1wbGVtZW50YXRpb24oKGtleU9yS2V5czogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShrZXlPcktleXMpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGtleU9yS2V5cy5tYXAoKGtleSkgPT4gbW9ja2VkLl9jb250ZXh0RGF0YVtrZXldKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja2VkLl9jb250ZXh0RGF0YVtrZXlPcktleXNdKTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLnJlcXVlc3RPYmplY3QubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja2VkLl9jb250ZXh0RGF0YVtrZXldKTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLnNldFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHRtb2NrZWQuX2NvbnRleHREYXRhW2tleV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gbW9ja2VkLl9jb250ZXh0RGF0YVtrZXldO1xuXHR9KTtcblxuXHRtb2NrZWQubW9jay5nZXRPYmplY3QubW9ja0ltcGxlbWVudGF0aW9uKChwYXRoOiBzdHJpbmcpID0+IHtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IG1vY2tlZC5fY29udGV4dERhdGFbcGF0aF0gOiBtb2NrZWQuX2NvbnRleHREYXRhO1xuXG5cdFx0aWYgKCFyZXN1bHQgJiYgcGF0aCAmJiBwYXRoLmluZGV4T2YoXCIvXCIpID4gLTEpIHtcblx0XHRcdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRyZXN1bHQgPSBwYXJ0cy5yZWR1Y2UoKHN1bSwgcGFydDogYW55KSA9PiB7XG5cdFx0XHRcdHN1bSA9IHBhcnQgPyBzdW1bcGFydF0gOiBzdW07XG5cdFx0XHRcdHJldHVybiBzdW07XG5cdFx0XHR9LCBtb2NrZWQuX2NvbnRleHREYXRhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblxuXHRtb2NrZWQubW9jay5nZXRQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX2NvbnRleHREYXRhW1wiJHBhdGhcIl0pO1xuXHRtb2NrZWQubW9jay5nZXRCaW5kaW5nLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX29CaW5kaW5nKTtcblx0bW9ja2VkLm1vY2suZ2V0TW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fb0JpbmRpbmc/LmdldE1vZGVsKCkpO1xuXHRtb2NrZWQubW9jay5zZXRLZWVwQWxpdmUubW9ja0ltcGxlbWVudGF0aW9uKChib29sOiBib29sZWFuLCBfZm5PbkJlZm9yZURlc3Ryb3k/OiBhbnksIF9iUmVxdWVzdE1lc3NhZ2VzPzogYm9vbGVhbikgPT4ge1xuXHRcdG1vY2tlZC5faXNLZXB0QWxpdmUgPSBib29sO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suaXNLZWVwQWxpdmUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5faXNLZXB0QWxpdmUpO1xuXHRtb2NrZWQubW9jay5pc0luYWN0aXZlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX2lzSW5hY3RpdmUpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbnRleHQ6IG5ldyAob1ZhbHVlcz86IGFueSwgb0JpbmRpbmc/OiBhbnksIGlzSW5hY3RpdmU/OiBib29sZWFuKSA9PiBNb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5iYXNlLkV2ZW50XG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tFdmVudCA9IFdpdGhNb2NrPEV2ZW50PiAmIHtcblx0X3BhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tFdmVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBldmVudFxuICogQHJldHVybnMgQSBuZXcgTW9ja0V2ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrRXZlbnQocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IE1vY2tFdmVudCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soRXZlbnQpIGFzIE1vY2tFdmVudDtcblx0bW9ja2VkLl9wYXJhbXMgPSBwYXJhbXMgfHwge307XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5nZXRQYXJhbWV0ZXIubW9ja0ltcGxlbWVudGF0aW9uKChuYW1lKSA9PiBtb2NrZWQuX3BhcmFtc1tuYW1lXSk7XG5cdG1vY2tlZC5tb2NrLmdldFBhcmFtZXRlcnMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9wYXJhbXM7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrRXZlbnQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tFdmVudDogbmV3IChwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBNb2NrRXZlbnQgPSBjcmVhdGVNb2NrRXZlbnQgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0xpc3RCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFMaXN0QmluZGluZz4gJiB7XG5cdF9hTW9ja0NvbnRleHRzOiBNb2NrQ29udGV4dFtdO1xuXHRfbW9ja01vZGVsPzogTW9ja01vZGVsO1xuXG5cdC8qKlxuXHQgKiBVdGlsaXR5IG1ldGhvZCB0byBzZXQgdGhlIG1vZGVsIG9mIHRoZSBMaXN0QmluZGluZ1xuXHQgKi9cblx0c2V0TW9kZWw6IChtb2RlbDogTW9ja01vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0xpc3RCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBhQ29udGV4dERhdGEgQW4gYXJyYXkgb2Ygb2JqZWN0cyBob2xkaW5nIHRoZSBkaWZmZXJlbnQgcHJvcGVydGllcyBvZiB0aGUgY29udGV4dHMgcmVmZXJlbmNlZCBieSB0aGUgTGlzdEJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgTGlzdEJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tMaXN0QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0xpc3RCaW5kaW5nKGFDb250ZXh0RGF0YT86IGFueVtdLCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja0xpc3RCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YUxpc3RCaW5kaW5nKSBhcyBNb2NrTGlzdEJpbmRpbmc7XG5cdGFDb250ZXh0RGF0YSA9IGFDb250ZXh0RGF0YSB8fCBbXTtcblx0bW9ja2VkLl9hTW9ja0NvbnRleHRzID0gYUNvbnRleHREYXRhLm1hcCgoY29udGV4dERhdGEpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoY29udGV4dERhdGEsIG1vY2tlZCk7XG5cdH0pO1xuXHRtb2NrZWQuX21vY2tNb2RlbCA9IG9Nb2NrTW9kZWw7XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLnNldE1vZGVsID0gKG1vZGVsOiBNb2NrTW9kZWwpID0+IHtcblx0XHRtb2NrZWQuX21vY2tNb2RlbCA9IG1vZGVsO1xuXHR9O1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLnJlcXVlc3RDb250ZXh0cy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja2VkLl9hTW9ja0NvbnRleHRzKTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldEN1cnJlbnRDb250ZXh0cy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FNb2NrQ29udGV4dHM7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRBbGxDdXJyZW50Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9tb2NrTW9kZWw7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRVcGRhdGVHcm91cElkLm1vY2tSZXR1cm5WYWx1ZShcImF1dG9cIik7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tMaXN0QmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0xpc3RCaW5kaW5nOiBuZXcgKGFDb250ZXh0cz86IGFueVtdLCBtb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tMaXN0QmluZGluZyA9IGNyZWF0ZU1vY2tMaXN0QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFQcm9wZXJ0eUJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja1Byb3BlcnR5QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhUHJvcGVydHlCaW5kaW5nPiAmIHtcblx0X3ZhbHVlPzogYW55O1xuXHRfcGF0aD86IHN0cmluZztcblx0X21vY2tNb2RlbD86IE1vY2tNb2RlbDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tQcm9wZXJ0eUJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSByZXR1cm5kIGJ5IHRoZSBQcm9wZXJ0eUJpbmRpbmdcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBQcm9wZXJ0eUJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrUHJvcGVydHlCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrUHJvcGVydHlCaW5kaW5nKHZhbHVlOiBhbnksIHBhdGg/OiBzdHJpbmcsIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpOiBNb2NrUHJvcGVydHlCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YVByb3BlcnR5QmluZGluZykgYXMgTW9ja1Byb3BlcnR5QmluZGluZztcblx0bW9ja2VkLl9tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXHRtb2NrZWQuX3ZhbHVlID0gdmFsdWU7XG5cdG1vY2tlZC5fcGF0aCA9IHBhdGg7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fbW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VmFsdWUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl92YWx1ZTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFBhdGgubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9wYXRoO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja1Byb3BlcnR5QmluZGluZzogbmV3ICh2YWx1ZTogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrUHJvcGVydHlCaW5kaW5nID0gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1xuICovXG5leHBvcnQgdHlwZSBNb2NrQ29tcG9zaXRlQmluZGluZyA9IFdpdGhNb2NrPENvbXBvc2l0ZUJpbmRpbmc+ICYge1xuXHRfYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW107XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrQ29tcG9zaXRlQmluZGluZy5cbiAqXG4gKiBAcGFyYW0gYUJpbmRpbmdzIFRoZSBiaW5kaW5ncyBvZiB0aGUgQ29tcG9zaXRlQmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbXBvc2l0ZUJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb21wb3NpdGVCaW5kaW5nKGFCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdKTogTW9ja0NvbXBvc2l0ZUJpbmRpbmcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKENvbXBvc2l0ZUJpbmRpbmcpIGFzIE1vY2tDb21wb3NpdGVCaW5kaW5nO1xuXHRtb2NrZWQuX2FCaW5kaW5ncyA9IGFCaW5kaW5ncztcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRCaW5kaW5ncy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FCaW5kaW5ncztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFZhbHVlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYUJpbmRpbmdzLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5nZXRWYWx1ZSgpKTtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb21wb3NpdGVCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29tcG9zaXRlQmluZGluZzogbmV3IChhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXSkgPT4gTW9ja0NvbXBvc2l0ZUJpbmRpbmcgPSBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1xuICovXG5leHBvcnQgdHlwZSBNb2NrQ29udGV4dEJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YUNvbnRleHRCaW5kaW5nPiAmIHtcblx0b01vY2tDb250ZXh0OiBNb2NrQ29udGV4dDtcblx0aXNLZXB0QWxpdmU6IGJvb2xlYW47XG5cdG1vY2tNb2RlbD86IE1vY2tNb2RlbDtcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gYWNjZXNzIHRoZSBpbnRlcm5hbCBNb2NrQ29udGV4dCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcblx0ICovXG5cdGdldEludGVybmFsTW9ja0NvbnRleHQ6ICgpID0+IE1vY2tDb250ZXh0O1xuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtb2RlbCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcblx0ICovXG5cdHNldE1vZGVsOiAob01vZGVsOiBNb2NrTW9kZWwpID0+IHZvaWQ7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrQ29udGV4dEJpbmRpbmcuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBDb250ZXh0QmluZGluZ1xuICogQHBhcmFtIG9Nb2NrTW9kZWwgVGhlIG1vZGVsIG9mIHRoZSBDb250ZXh0QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRleHRCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dEJpbmRpbmcob0NvbnRleHQ/OiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpOiBNb2NrQ29udGV4dEJpbmRpbmcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhQ29udGV4dEJpbmRpbmcpIGFzIE1vY2tDb250ZXh0QmluZGluZztcblx0bW9ja2VkLm1vY2tNb2RlbCA9IG9Nb2NrTW9kZWw7XG5cdG1vY2tlZC5vTW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dChvQ29udGV4dCB8fCB7fSwgbW9ja2VkKTtcblxuXHQvLyBVdGlsaXR5IEFQSVxuXHRtb2NrZWQuZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCA9ICgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9Nb2NrQ29udGV4dDtcblx0fTtcblx0bW9ja2VkLnNldE1vZGVsID0gKG9Nb2RlbDogTW9ja01vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRCb3VuZENvbnRleHQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9Nb2NrQ29udGV4dDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrTW9kZWw7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5leGVjdXRlLm1vY2tSZXNvbHZlZFZhbHVlKHRydWUpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dEJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tDb250ZXh0QmluZGluZzogbmV3IChvQ29udGV4dD86IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja0NvbnRleHRCaW5kaW5nID0gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFxuICovXG5leHBvcnQgdHlwZSBNb2NrTWV0YU1vZGVsID0gV2l0aE1vY2s8T0RhdGFNZXRhTW9kZWw+ICYge1xuXHRvTWV0YUNvbnRleHQ6IE1vY2tDb250ZXh0O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01ldGFNb2RlbC5cbiAqXG4gKiBAcGFyYW0gb01ldGFEYXRhIEEgbWFwIG9mIHRoZSBkaWZmZXJlbnQgbWV0YWRhdGEgcHJvcGVydGllcyBvZiB0aGUgTWV0YU1vZGVsIChwYXRoIC0+IHZhbHVlKS5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNZXRhTW9kZWwob01ldGFEYXRhPzogYW55KTogTW9ja01ldGFNb2RlbCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFNZXRhTW9kZWwpIGFzIE1vY2tNZXRhTW9kZWw7XG5cdG1vY2tlZC5vTWV0YUNvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dChvTWV0YURhdGEgfHwge30pO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0TWV0YUNvbnRleHQubW9ja0ltcGxlbWVudGF0aW9uKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KHsgJHBhdGg6IHNQYXRoIH0pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0T2JqZWN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQub01ldGFDb250ZXh0LmdldFByb3BlcnR5KHNQYXRoKTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmNyZWF0ZUJpbmRpbmdDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1ldGFQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IG1ldGFtb2RlbCA9IG5ldyBPRGF0YU1ldGFNb2RlbCgpO1xuXHRcdHJldHVybiBzUGF0aCA/IG1ldGFtb2RlbC5nZXRNZXRhUGF0aChzUGF0aCkgOiBzUGF0aDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNZXRhTW9kZWwgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tNZXRhTW9kZWw6IG5ldyAob01ldGFEYXRhPzogYW55KSA9PiBNb2NrTWV0YU1vZGVsID0gY3JlYXRlTW9ja01ldGFNb2RlbCBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFxuICovXG5leHBvcnQgdHlwZSBNb2NrTW9kZWwgPSBXaXRoTW9jazxPRGF0YU1vZGVsPiAmIHtcblx0b01ldGFNb2RlbD86IE1vY2tNZXRhTW9kZWw7XG5cdG1vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZztcblx0bW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nO1xuXG5cdC8qKlxuXHQgKiBVdGlsaXR5IG1ldGhvZCB0byBzZXQgdGhlIG1ldGFtb2RlbCBvZiB0aGUgTW9ja01vZGVsXG5cdCAqL1xuXHRzZXRNZXRhTW9kZWw6IChvTWV0YU1vZGVsOiBNb2NrTWV0YU1vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsLlxuICpcbiAqIEBwYXJhbSBvTW9ja0xpc3RCaW5kaW5nIEEgbGlzdCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZExpc3QuXG4gKiBAcGFyYW0gb01vY2tDb250ZXh0QmluZGluZyBBIGNvbnRleHQgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRDb250ZXh0LlxuICogQHJldHVybnMgQSBuZXcgTW9ja01vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTW9kZWwob01vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgb01vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFNb2RlbCkgYXMgTW9ja01vZGVsO1xuXHRtb2NrZWQubW9ja0xpc3RCaW5kaW5nID0gb01vY2tMaXN0QmluZGluZztcblx0bW9ja2VkLm1vY2tDb250ZXh0QmluZGluZyA9IG9Nb2NrQ29udGV4dEJpbmRpbmc7XG5cdGlmIChvTW9ja0xpc3RCaW5kaW5nKSB7XG5cdFx0b01vY2tMaXN0QmluZGluZy5zZXRNb2RlbChtb2NrZWQpO1xuXHR9XG5cdGlmIChvTW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0b01vY2tDb250ZXh0QmluZGluZy5zZXRNb2RlbChtb2NrZWQpO1xuXHR9XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLnNldE1ldGFNb2RlbCA9IChvTWV0YU1vZGVsOiBNb2NrTWV0YU1vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9O1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suYmluZExpc3QubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm1vY2tMaXN0QmluZGluZztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmJpbmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrQ29udGV4dEJpbmRpbmc7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhTW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhTW9kZWw7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTW9kZWwgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tNb2RlbDogbmV3IChvTW9ja0xpc3RCaW5kaW5nPzogTW9ja0xpc3RCaW5kaW5nLCBvTW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nKSA9PiBNb2NrTW9kZWwgPVxuXHRjcmVhdGVNb2NrTW9kZWwgYXMgYW55O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrTW9kZWwgdXNlZCB3aXRoIGEgbGlzdEJpbmRpbmcuXG4gKlxuICogQHBhcmFtIG9Nb2NrTGlzdEJpbmRpbmcgQSBsaXN0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kTGlzdC5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsRnJvbUxpc3RCaW5kaW5nKG9Nb2NrTGlzdEJpbmRpbmc6IE1vY2tMaXN0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdHJldHVybiBjcmVhdGVNb2NrTW9kZWwob01vY2tMaXN0QmluZGluZyk7XG59XG4vKipcbiAqICBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrTW9kZWwgdXNlZCB3aXRoIGEgY29udGV4dEJpbmRpbmcuXG4gKlxuICogQHBhcmFtIG9Nb2NrQ29udGV4dEJpbmRpbmcgQSBjb250ZXh0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kQ29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsRnJvbUNvbnRleHRCaW5kaW5nKG9Nb2NrQ29udGV4dEJpbmRpbmc6IE1vY2tDb250ZXh0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdHJldHVybiBjcmVhdGVNb2NrTW9kZWwodW5kZWZpbmVkLCBvTW9ja0NvbnRleHRCaW5kaW5nKTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5jb3JlLm12Yy5WaWV3XG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tWaWV3ID0gV2l0aE1vY2s8Vmlldz47XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tWaWV3LlxuICpcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tWaWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrVmlldygpOiBNb2NrVmlldyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soVmlldyk7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkuY29yZS5tdmMuVmlld1wiO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja1ZpZXcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tWaWV3OiBuZXcgKCkgPT4gTW9ja1ZpZXcgPSBjcmVhdGVNb2NrVmlldyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAuZmUuY29yZS5QYWdlQ29udHJvbGxlclxuICovXG5leHBvcnQgdHlwZSBNb2NrQ29udHJvbGxlciA9IFdpdGhNb2NrPENvbnRyb2xsZXI+ICYge1xuXHRfcm91dGluZzogV2l0aE1vY2s8SW50ZXJuYWxSb3V0aW5nPjtcblx0X3NpZGVFZmZlY3RzOiBXaXRoTW9jazxTaWRlRWZmZWN0cz47XG5cdGVkaXRGbG93OiBXaXRoTW9jazxFZGl0Rmxvdz47XG5cdHNoYXJlOiBXaXRoTW9jazxTaGFyZT47XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrQ29udHJvbGxlci5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrQ29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRyb2xsZXIoKTogTW9ja0NvbnRyb2xsZXIge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKENvbnRyb2xsZXIpIGFzIE1vY2tDb250cm9sbGVyO1xuXHRtb2NrZWQuX3JvdXRpbmcgPSBtb2NrKEludGVybmFsUm91dGluZyk7XG5cdG1vY2tlZC5fc2lkZUVmZmVjdHMgPSBtb2NrKFNpZGVFZmZlY3RzKTtcblx0bW9ja2VkLmVkaXRGbG93ID0gbW9jayhFZGl0Rmxvdyk7XG5cdG1vY2tlZC5zaGFyZSA9IG1vY2soU2hhcmUpO1xuXG5cdC8vIERlZmF1bHQgQmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUoY3JlYXRlTW9ja1ZpZXcoKSk7XG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBtb2NrQ29udHJvbGxlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbnRyb2xsZXI6IG5ldyAoKSA9PiBNb2NrQ29udHJvbGxlciA9IGNyZWF0ZU1vY2tDb250cm9sbGVyIGFzIGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBNVkNNb2NrIHtcblx0bW9kZWw6IE1vY2tNb2RlbDtcblx0dmlldzogTW9ja1ZpZXc7XG5cdGNvbnRyb2xsZXI6IE1vY2tDb250cm9sbGVyO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBtb2NrcyB0aGF0IHJlZmVyIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGV4aXN0aW5nIE9wdGlvbmFsIGV4aXN0aW5nIG1vY2tlZCBpbnN0YW5jZXMgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogQHJldHVybnMgTW9ja2VkIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIGluc3RhbmNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja01WQyhleGlzdGluZz86IFBhcnRpYWw8TVZDTW9jaz4pOiBNVkNNb2NrIHtcblx0Y29uc3QgbW9kZWwgPSBleGlzdGluZz8ubW9kZWwgfHwgY3JlYXRlTW9ja01vZGVsKCk7XG5cdGNvbnN0IHZpZXcgPSBleGlzdGluZz8udmlldyB8fCBjcmVhdGVNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgY3JlYXRlTW9ja0NvbnRyb2xsZXIoKTtcblxuXHR2aWV3Lm1vY2suZ2V0Q29udHJvbGxlci5tb2NrUmV0dXJuVmFsdWUoY29udHJvbGxlcik7XG5cdHZpZXcubW9jay5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLm1vY2suZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUodmlldyk7XG5cblx0cmV0dXJuIHsgbW9kZWwsIHZpZXcsIGNvbnRyb2xsZXIgfTtcbn1cblxuLyoqXG4gKiBUbyBiZSB1c2VkIHRvIGxvYWQgbWVzc2FnZXMgYnVuZGxlcyBmb3IgdGVzdHMgd2l0aG91dCBhcHAvcGFnZSBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHRleHRJRCBJRCBvZiB0aGUgVGV4dFxuICogQHBhcmFtIHBhcmFtZXRlcnMgQXJyYXkgb2YgcGFyYW1ldGVycyB0aGF0IGFyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dFxuICogQHBhcmFtIG1ldGFQYXRoIEVudGl0eSBzZXQgbmFtZSBvciBhY3Rpb24gbmFtZSB0byBvdmVybG9hZCBhIHRleHRcbiAqIEByZXR1cm5zIERldGVybWluZWQgdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dCh0ZXh0SUQ6IHN0cmluZywgcGFyYW1ldGVycz86IGFueVtdLCBtZXRhUGF0aD86IHN0cmluZykge1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gbmV3IFJlc291cmNlTW9kZWwoe1xuXHRcdGJ1bmRsZU5hbWU6IFwic2FwLmZlLmNvcmUubWVzc2FnZWJ1bmRsZVwiLFxuXHRcdGVuaGFuY2VXaXRoOiBbeyBidW5kbGVOYW1lOiBcInNhcC5mZS5tYWNyb3MubWVzc2FnZWJ1bmRsZVwiIH0sIHsgYnVuZGxlTmFtZTogXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIiB9XSxcblx0XHRhc3luYzogZmFsc2Vcblx0fSk7XG5cdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQodGV4dElELCBwYXJhbWV0ZXJzLCBtZXRhUGF0aCk7XG59XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgUmVzb3VyY2VNb2RlbFxuICovXG5leHBvcnQgdHlwZSBNb2NrUmVzb3VyY2VNb2RlbCA9IFdpdGhNb2NrPFJlc291cmNlTW9kZWw+O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrVmlldy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrVmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTogTW9ja1Jlc291cmNlTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKFJlc291cmNlTW9kZWwpO1xuXHRtb2NrZWQuZ2V0VGV4dCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oZ2V0VGV4dCk7XG5cdHJldHVybiBtb2NrZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0EsaUJBQWlCLENBQUNDLFlBQWtCLEVBQUVDLFFBQWMsRUFBRUMsVUFBb0IsRUFBZTtJQUN4RztJQUNBLE1BQU1DLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxNQUFNLENBQUNDLGNBQWMsQ0FBRUMsT0FBTyxDQUFTQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQWdCO0lBQzlHTCxNQUFNLENBQUNNLFlBQVksR0FBRyxLQUFLO0lBQzNCTixNQUFNLENBQUNPLFlBQVksR0FBR1YsWUFBWSxJQUFJLENBQUMsQ0FB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
|
|
485
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJrZXlPcktleXMiLCJBcnJheSIsImlzQXJyYXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsImdldFBhcmFtZXRlcnMiLCJNb2NrRXZlbnQiLCJjcmVhdGVNb2NrTGlzdEJpbmRpbmciLCJhQ29udGV4dERhdGEiLCJvTW9ja01vZGVsIiwiT0RhdGFMaXN0QmluZGluZyIsIl9hTW9ja0NvbnRleHRzIiwiY29udGV4dERhdGEiLCJfbW9ja01vZGVsIiwic2V0TW9kZWwiLCJtb2RlbCIsInJlcXVlc3RDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImdldENvbnRleHRzIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIm1vY2tSZXR1cm5WYWx1ZSIsIk1vY2tMaXN0QmluZGluZyIsImNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmciLCJPRGF0YVByb3BlcnR5QmluZGluZyIsIl92YWx1ZSIsIl9wYXRoIiwiZ2V0VmFsdWUiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJhQmluZGluZ3MiLCJDb21wb3NpdGVCaW5kaW5nIiwiX2FCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb21wb3NpdGVCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJPRGF0YUNvbnRleHRCaW5kaW5nIiwibW9ja01vZGVsIiwib01vY2tDb250ZXh0IiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIm9Nb2RlbCIsImdldEJvdW5kQ29udGV4dCIsImV4ZWN1dGUiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIk1vY2tDb250ZXh0QmluZGluZyIsImNyZWF0ZU1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJPRGF0YU1ldGFNb2RlbCIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0Iiwic1BhdGgiLCIkcGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJtZXRhbW9kZWwiLCJNb2NrTWV0YU1vZGVsIiwiY3JlYXRlTW9ja01vZGVsIiwib01vY2tMaXN0QmluZGluZyIsIm9Nb2NrQ29udGV4dEJpbmRpbmciLCJPRGF0YU1vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwic2V0TWV0YU1vZGVsIiwib01ldGFNb2RlbCIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJNb2NrTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWxGcm9tTGlzdEJpbmRpbmciLCJjcmVhdGVNb2NrTW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJjcmVhdGVNb2NrVmlldyIsIlZpZXciLCJNb2NrVmlldyIsImNyZWF0ZU1vY2tDb250cm9sbGVyIiwiQ29udHJvbGxlciIsIl9yb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nIiwiX3NpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHMiLCJlZGl0RmxvdyIsIkVkaXRGbG93Iiwic2hhcmUiLCJTaGFyZSIsInJlY29tbWVuZGF0aW9ucyIsIlJlY29tbWVuZGF0aW9ucyIsImdldEFwcENvbXBvbmVudCIsImplc3QiLCJmbiIsIkFwcENvbXBvbmVudCIsImdldFZpZXciLCJNb2NrQ29udHJvbGxlciIsIm1vY2tNVkMiLCJleGlzdGluZyIsInZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImdldFRleHQiLCJ0ZXh0SUQiLCJwYXJhbWV0ZXJzIiwibWV0YVBhdGgiLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbCIsImJ1bmRsZU5hbWUiLCJlbmhhbmNlV2l0aCIsImFzeW5jIiwiY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBXaXRoTW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgeyBtb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgUmVjb21tZW5kYXRpb25zIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9SZWNvbW1lbmRhdGlvbnNcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBTaWRlRWZmZWN0cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IENvbXBvc2l0ZUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Db21wb3NpdGVCaW5kaW5nXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHQgPSBXaXRoTW9jazxDb250ZXh0PiAmIHtcblx0X2lzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRfY29udGV4dERhdGE6IGFueTtcblx0X29CaW5kaW5nOiBhbnk7XG5cdF9pc0luYWN0aXZlOiBib29sZWFuO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0RGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHQuIFRoZSB2YWx1ZSBmb3IgdGhlIGtleSAnJHBhdGgnIHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhlICdnZXRQYXRoJyBtZXRob2RcbiAqIEBwYXJhbSBvQmluZGluZyBUaGUgYmluZGluZyBvZiB0aGUgY29udGV4dFxuICogQHBhcmFtIGlzSW5hY3RpdmUgSXMgdGhlIGNvbnRleHQgaW5pYWN0aXZlIG9yIG5vdFxuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0KG9Db250ZXh0RGF0YT86IGFueSwgb0JpbmRpbmc/OiBhbnksIGlzSW5hY3RpdmU/OiBib29sZWFuKTogTW9ja0NvbnRleHQge1xuXHQvLyBVZ2x5IHdvcmthcm91bmQgdG8gZ2V0IGEgcHJvcGVyIG1vY2sgcGJqZWN0LCBhcyBDb250ZXh0IGlzbid0IHByb3Blcmx5IGV4cG9ydGVkIGZyb20gVUk1XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT2JqZWN0LmdldFByb3RvdHlwZU9mKChDb250ZXh0IGFzIGFueSkuY3JlYXRlTmV3Q29udGV4dChudWxsLCBudWxsLCBcIi9lXCIpKSkgYXMgTW9ja0NvbnRleHQ7XG5cdG1vY2tlZC5faXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0bW9ja2VkLl9jb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YSB8fCB7fTtcblx0bW9ja2VkLl9vQmluZGluZyA9IG9CaW5kaW5nO1xuXHRtb2NrZWQuX2lzSW5hY3RpdmUgPSAhIWlzSW5hY3RpdmU7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV07XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXlPcktleXM6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoa2V5T3JLZXlzKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXlPcktleXMubWFwKChrZXkpID0+IG1vY2tlZC5fY29udGV4dERhdGFba2V5XSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fY29udGV4dERhdGFba2V5T3JLZXlzXSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0T2JqZWN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fY29udGV4dERhdGFba2V5XSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5zZXRQcm9wZXJ0eS5tb2NrSW1wbGVtZW50YXRpb24oKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG5cdFx0bW9ja2VkLl9jb250ZXh0RGF0YVtrZXldID0gdmFsdWU7XG5cdFx0cmV0dXJuIG1vY2tlZC5fY29udGV4dERhdGFba2V5XTtcblx0fSk7XG5cblx0bW9ja2VkLm1vY2suZ2V0T2JqZWN0Lm1vY2tJbXBsZW1lbnRhdGlvbigocGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0bGV0IHJlc3VsdCA9IHBhdGggPyBtb2NrZWQuX2NvbnRleHREYXRhW3BhdGhdIDogbW9ja2VkLl9jb250ZXh0RGF0YTtcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgbW9ja2VkLl9jb250ZXh0RGF0YSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSk7XG5cblx0bW9ja2VkLm1vY2suZ2V0UGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9jb250ZXh0RGF0YVtcIiRwYXRoXCJdKTtcblx0bW9ja2VkLm1vY2suZ2V0QmluZGluZy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9vQmluZGluZyk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX29CaW5kaW5nPy5nZXRNb2RlbCgpKTtcblx0bW9ja2VkLm1vY2suc2V0S2VlcEFsaXZlLm1vY2tJbXBsZW1lbnRhdGlvbigoYm9vbDogYm9vbGVhbiwgX2ZuT25CZWZvcmVEZXN0cm95PzogYW55LCBfYlJlcXVlc3RNZXNzYWdlcz86IGJvb2xlYW4pID0+IHtcblx0XHRtb2NrZWQuX2lzS2VwdEFsaXZlID0gYm9vbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmlzS2VlcEFsaXZlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX2lzS2VwdEFsaXZlKTtcblx0bW9ja2VkLm1vY2suaXNJbmFjdGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9pc0luYWN0aXZlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tDb250ZXh0OiBuZXcgKG9WYWx1ZXM/OiBhbnksIG9CaW5kaW5nPzogYW55LCBpc0luYWN0aXZlPzogYm9vbGVhbikgPT4gTW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dCBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkuYmFzZS5FdmVudFxuICovXG5leHBvcnQgdHlwZSBNb2NrRXZlbnQgPSBXaXRoTW9jazxFdmVudD4gJiB7XG5cdF9wYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrRXZlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyBUaGUgcGFyYW1ldGVycyBvZiB0aGUgZXZlbnRcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tFdmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0V2ZW50KHBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBNb2NrRXZlbnQge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKEV2ZW50KSBhcyBNb2NrRXZlbnQ7XG5cdG1vY2tlZC5fcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0UGFyYW1ldGVyLm1vY2tJbXBsZW1lbnRhdGlvbigobmFtZSkgPT4gbW9ja2VkLl9wYXJhbXNbbmFtZV0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXJhbWV0ZXJzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGFyYW1zO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0V2ZW50IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrRXZlbnQ6IG5ldyAocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gTW9ja0V2ZW50ID0gY3JlYXRlTW9ja0V2ZW50IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tMaXN0QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhTGlzdEJpbmRpbmc+ICYge1xuXHRfYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblx0X21vY2tNb2RlbD86IE1vY2tNb2RlbDtcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtb2RlbCBvZiB0aGUgTGlzdEJpbmRpbmdcblx0ICovXG5cdHNldE1vZGVsOiAobW9kZWw6IE1vY2tNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tMaXN0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gYUNvbnRleHREYXRhIEFuIGFycmF5IG9mIG9iamVjdHMgaG9sZGluZyB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHRzIHJlZmVyZW5jZWQgYnkgdGhlIExpc3RCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIExpc3RCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tMaXN0QmluZGluZyhhQ29udGV4dERhdGE/OiBhbnlbXSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCk6IE1vY2tMaXN0QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFMaXN0QmluZGluZykgYXMgTW9ja0xpc3RCaW5kaW5nO1xuXHRhQ29udGV4dERhdGEgPSBhQ29udGV4dERhdGEgfHwgW107XG5cdG1vY2tlZC5fYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0RGF0YS5tYXAoKGNvbnRleHREYXRhKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KGNvbnRleHREYXRhLCBtb2NrZWQpO1xuXHR9KTtcblx0bW9ja2VkLl9tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNb2RlbCA9IChtb2RlbDogTW9ja01vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLl9tb2NrTW9kZWwgPSBtb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fYU1vY2tDb250ZXh0cyk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRDdXJyZW50Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QWxsQ3VycmVudENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fbW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VXBkYXRlR3JvdXBJZC5tb2NrUmV0dXJuVmFsdWUoXCJhdXRvXCIpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tMaXN0QmluZGluZzogbmV3IChhQ29udGV4dHM/OiBhbnlbXSwgbW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrTGlzdEJpbmRpbmcgPSBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tQcm9wZXJ0eUJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YVByb3BlcnR5QmluZGluZz4gJiB7XG5cdF92YWx1ZT86IGFueTtcblx0X3BhdGg/OiBzdHJpbmc7XG5cdF9tb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrUHJvcGVydHlCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgcmV0dXJuZCBieSB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIFByb3BlcnR5QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja1Byb3BlcnR5QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyh2YWx1ZTogYW55LCBwYXRoPzogc3RyaW5nLCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja1Byb3BlcnR5QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFQcm9wZXJ0eUJpbmRpbmcpIGFzIE1vY2tQcm9wZXJ0eUJpbmRpbmc7XG5cdG1vY2tlZC5fbW9ja01vZGVsID0gb01vY2tNb2RlbDtcblx0bW9ja2VkLl92YWx1ZSA9IHZhbHVlO1xuXHRtb2NrZWQuX3BhdGggPSBwYXRoO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX21vY2tNb2RlbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFZhbHVlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fdmFsdWU7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGF0aDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tQcm9wZXJ0eUJpbmRpbmc6IG5ldyAodmFsdWU6IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja1Byb3BlcnR5QmluZGluZyA9IGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgPSBXaXRoTW9jazxDb21wb3NpdGVCaW5kaW5nPiAmIHtcblx0X2FCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbXBvc2l0ZUJpbmRpbmcuXG4gKlxuICogQHBhcmFtIGFCaW5kaW5ncyBUaGUgYmluZGluZ3Mgb2YgdGhlIENvbXBvc2l0ZUJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb21wb3NpdGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyhhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXSk6IE1vY2tDb21wb3NpdGVCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb21wb3NpdGVCaW5kaW5nKSBhcyBNb2NrQ29tcG9zaXRlQmluZGluZztcblx0bW9ja2VkLl9hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QmluZGluZ3MubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hQmluZGluZ3M7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRWYWx1ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbXBvc2l0ZUJpbmRpbmc6IG5ldyAoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pID0+IE1vY2tDb21wb3NpdGVCaW5kaW5nID0gY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHRCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFDb250ZXh0QmluZGluZz4gJiB7XG5cdG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdGlzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRtb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIGFjY2VzcyB0aGUgaW50ZXJuYWwgTW9ja0NvbnRleHQgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRnZXRJbnRlcm5hbE1vY2tDb250ZXh0OiAoKSA9PiBNb2NrQ29udGV4dDtcblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbW9kZWwgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRzZXRNb2RlbDogKG9Nb2RlbDogTW9ja01vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nKG9Db250ZXh0PzogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja0NvbnRleHRCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YUNvbnRleHRCaW5kaW5nKSBhcyBNb2NrQ29udGV4dEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXHRtb2NrZWQub01vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob0NvbnRleHQgfHwge30sIG1vY2tlZCk7XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLmdldEludGVybmFsTW9ja0NvbnRleHQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH07XG5cdG1vY2tlZC5zZXRNb2RlbCA9IChvTW9kZWw6IE1vY2tNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH07XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0Qm91bmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZXhlY3V0ZS5tb2NrUmVzb2x2ZWRWYWx1ZSh0cnVlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dEJpbmRpbmc6IG5ldyAob0NvbnRleHQ/OiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tDb250ZXh0QmluZGluZyA9IGNyZWF0ZU1vY2tDb250ZXh0QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01ldGFNb2RlbCA9IFdpdGhNb2NrPE9EYXRhTWV0YU1vZGVsPiAmIHtcblx0b01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNZXRhTW9kZWwuXG4gKlxuICogQHBhcmFtIG9NZXRhRGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIHByb3BlcnRpZXMgb2YgdGhlIE1ldGFNb2RlbCAocGF0aCAtPiB2YWx1ZSkuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsKG9NZXRhRGF0YT86IGFueSk6IE1vY2tNZXRhTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTWV0YU1vZGVsKSBhcyBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrZWQub01ldGFDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldE1ldGFDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5jcmVhdGVCaW5kaW5nQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhUGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBtZXRhbW9kZWwgPSBuZXcgT0RhdGFNZXRhTW9kZWwoKTtcblx0XHRyZXR1cm4gc1BhdGggPyBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpIDogc1BhdGg7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTWV0YU1vZGVsOiBuZXcgKG9NZXRhRGF0YT86IGFueSkgPT4gTW9ja01ldGFNb2RlbCA9IGNyZWF0ZU1vY2tNZXRhTW9kZWwgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01vZGVsID0gV2l0aE1vY2s8T0RhdGFNb2RlbD4gJiB7XG5cdG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZztcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtZXRhbW9kZWwgb2YgdGhlIE1vY2tNb2RlbFxuXHQgKi9cblx0c2V0TWV0YU1vZGVsOiAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNb2RlbC5cbiAqXG4gKiBAcGFyYW0gb01vY2tMaXN0QmluZGluZyBBIGxpc3QgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRMaXN0LlxuICogQHBhcmFtIG9Nb2NrQ29udGV4dEJpbmRpbmcgQSBjb250ZXh0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kQ29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIG9Nb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTW9kZWwpIGFzIE1vY2tNb2RlbDtcblx0bW9ja2VkLm1vY2tMaXN0QmluZGluZyA9IG9Nb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrQ29udGV4dEJpbmRpbmcgPSBvTW9ja0NvbnRleHRCaW5kaW5nO1xuXHRpZiAob01vY2tMaXN0QmluZGluZykge1xuXHRcdG9Nb2NrTGlzdEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXHRpZiAob01vY2tDb250ZXh0QmluZGluZykge1xuXHRcdG9Nb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNZXRhTW9kZWwgPSAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmJpbmRMaXN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrTGlzdEJpbmRpbmc7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5iaW5kQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja0NvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TWV0YU1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTWV0YU1vZGVsO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTW9kZWw6IG5ldyAob01vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgb01vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZykgPT4gTW9ja01vZGVsID1cblx0Y3JlYXRlTW9ja01vZGVsIGFzIGFueTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGxpc3RCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0xpc3RCaW5kaW5nIEEgbGlzdCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZExpc3QuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21MaXN0QmluZGluZyhvTW9ja0xpc3RCaW5kaW5nOiBNb2NrTGlzdEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmcpO1xufVxuLyoqXG4gKiAgRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGNvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0NvbnRleHRCaW5kaW5nIEEgY29udGV4dCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZENvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21Db250ZXh0QmluZGluZyhvTW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKHVuZGVmaW5lZCwgb01vY2tDb250ZXh0QmluZGluZyk7XG59XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkuY29yZS5tdmMuVmlld1xuICovXG5leHBvcnQgdHlwZSBNb2NrVmlldyA9IFdpdGhNb2NrPFZpZXc+O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrVmlldy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrVmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1ZpZXcoKTogTW9ja1ZpZXcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKFZpZXcpO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tWaWV3IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrVmlldzogbmV3ICgpID0+IE1vY2tWaWV3ID0gY3JlYXRlTW9ja1ZpZXcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRyb2xsZXIgPSBXaXRoTW9jazxDb250cm9sbGVyPiAmIHtcblx0X3JvdXRpbmc6IFdpdGhNb2NrPEludGVybmFsUm91dGluZz47XG5cdF9zaWRlRWZmZWN0czogV2l0aE1vY2s8U2lkZUVmZmVjdHM+O1xuXHRlZGl0RmxvdzogV2l0aE1vY2s8RWRpdEZsb3c+O1xuXHRzaGFyZTogV2l0aE1vY2s8U2hhcmU+O1xuXHRyZWNvbW1lbmRhdGlvbnM6IFdpdGhNb2NrPFJlY29tbWVuZGF0aW9ucz47XG5cdGdldEFwcENvbXBvbmVudDogKCkgPT4gV2l0aE1vY2s8QXBwQ29tcG9uZW50Pjtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tDb250cm9sbGVyLlxuICpcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udHJvbGxlcigpOiBNb2NrQ29udHJvbGxlciB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soQ29udHJvbGxlcikgYXMgTW9ja0NvbnRyb2xsZXI7XG5cdG1vY2tlZC5fcm91dGluZyA9IG1vY2soSW50ZXJuYWxSb3V0aW5nKTtcblx0bW9ja2VkLl9zaWRlRWZmZWN0cyA9IG1vY2soU2lkZUVmZmVjdHMpO1xuXHRtb2NrZWQuZWRpdEZsb3cgPSBtb2NrKEVkaXRGbG93KTtcblx0bW9ja2VkLnNoYXJlID0gbW9jayhTaGFyZSk7XG5cdG1vY2tlZC5yZWNvbW1lbmRhdGlvbnMgPSBtb2NrKFJlY29tbWVuZGF0aW9ucyk7XG5cdG1vY2tlZC5nZXRBcHBDb21wb25lbnQgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG1vY2soQXBwQ29tcG9uZW50KSk7XG5cdC8vIERlZmF1bHQgQmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUoY3JlYXRlTW9ja1ZpZXcoKSk7XG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBtb2NrQ29udHJvbGxlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbnRyb2xsZXI6IG5ldyAoKSA9PiBNb2NrQ29udHJvbGxlciA9IGNyZWF0ZU1vY2tDb250cm9sbGVyIGFzIGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBNVkNNb2NrIHtcblx0bW9kZWw6IE1vY2tNb2RlbDtcblx0dmlldzogTW9ja1ZpZXc7XG5cdGNvbnRyb2xsZXI6IE1vY2tDb250cm9sbGVyO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBtb2NrcyB0aGF0IHJlZmVyIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGV4aXN0aW5nIE9wdGlvbmFsIGV4aXN0aW5nIG1vY2tlZCBpbnN0YW5jZXMgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogQHJldHVybnMgTW9ja2VkIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIGluc3RhbmNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja01WQyhleGlzdGluZz86IFBhcnRpYWw8TVZDTW9jaz4pOiBNVkNNb2NrIHtcblx0Y29uc3QgbW9kZWwgPSBleGlzdGluZz8ubW9kZWwgfHwgY3JlYXRlTW9ja01vZGVsKCk7XG5cdGNvbnN0IHZpZXcgPSBleGlzdGluZz8udmlldyB8fCBjcmVhdGVNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgY3JlYXRlTW9ja0NvbnRyb2xsZXIoKTtcblxuXHR2aWV3Lm1vY2suZ2V0Q29udHJvbGxlci5tb2NrUmV0dXJuVmFsdWUoY29udHJvbGxlcik7XG5cdHZpZXcubW9jay5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLm1vY2suZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUodmlldyk7XG5cblx0cmV0dXJuIHsgbW9kZWwsIHZpZXcsIGNvbnRyb2xsZXIgfTtcbn1cblxuLyoqXG4gKiBUbyBiZSB1c2VkIHRvIGxvYWQgbWVzc2FnZXMgYnVuZGxlcyBmb3IgdGVzdHMgd2l0aG91dCBhcHAvcGFnZSBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHRleHRJRCBJRCBvZiB0aGUgVGV4dFxuICogQHBhcmFtIHBhcmFtZXRlcnMgQXJyYXkgb2YgcGFyYW1ldGVycyB0aGF0IGFyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dFxuICogQHBhcmFtIG1ldGFQYXRoIEVudGl0eSBzZXQgbmFtZSBvciBhY3Rpb24gbmFtZSB0byBvdmVybG9hZCBhIHRleHRcbiAqIEByZXR1cm5zIERldGVybWluZWQgdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dCh0ZXh0SUQ6IHN0cmluZywgcGFyYW1ldGVycz86IGFueVtdLCBtZXRhUGF0aD86IHN0cmluZykge1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gbmV3IFJlc291cmNlTW9kZWwoe1xuXHRcdGJ1bmRsZU5hbWU6IFwic2FwLmZlLmNvcmUubWVzc2FnZWJ1bmRsZVwiLFxuXHRcdGVuaGFuY2VXaXRoOiBbeyBidW5kbGVOYW1lOiBcInNhcC5mZS5tYWNyb3MubWVzc2FnZWJ1bmRsZVwiIH0sIHsgYnVuZGxlTmFtZTogXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIiB9XSxcblx0XHRhc3luYzogZmFsc2Vcblx0fSk7XG5cdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQodGV4dElELCBwYXJhbWV0ZXJzLCBtZXRhUGF0aCk7XG59XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgUmVzb3VyY2VNb2RlbFxuICovXG5leHBvcnQgdHlwZSBNb2NrUmVzb3VyY2VNb2RlbCA9IFdpdGhNb2NrPFJlc291cmNlTW9kZWw+O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrVmlldy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrVmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTogTW9ja1Jlc291cmNlTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKFJlc291cmNlTW9kZWwpO1xuXHRtb2NrZWQuZ2V0VGV4dCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oZ2V0VGV4dCk7XG5cdHJldHVybiBtb2NrZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0EsaUJBQWlCLENBQUNDLFlBQWtCLEVBQUVDLFFBQWMsRUFBRUMsVUFBb0IsRUFBZTtJQUN4RztJQUNBLE1BQU1DLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxNQUFNLENBQUNDLGNBQWMsQ0FBRUMsT0FBTyxDQUFTQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQWdCO0lBQzlHTCxNQUFNLENBQUNNLFlBQVksR0FBRyxLQUFLO0lBQzNCTixNQUFNLENBQUNPLFlBQVksR0FBR1YsWUFBWSxJQUFJLENBQUMsQ0FBQztJQUN4Q0csTUFBTSxDQUFDUSxTQUFTLEdBQUdWLFFBQVE7SUFDM0JFLE1BQU0sQ0FBQ1MsV0FBVyxHQUFHLENBQUMsQ0FBQ1YsVUFBVTs7SUFFakM7SUFDQUMsTUFBTSxDQUFDQyxJQUFJLENBQUNTLEdBQUcsQ0FBQ0Msa0JBQWtCLENBQUVDLFVBQWtCLElBQUs7TUFDMUQsT0FBT0EsVUFBVSxLQUFLLCtCQUErQjtJQUN0RCxDQUFDLENBQUM7SUFDRlosTUFBTSxDQUFDQyxJQUFJLENBQUNZLFdBQVcsQ0FBQ0Ysa0JBQWtCLENBQUVHLEdBQVcsSUFBSztNQUMzRCxPQUFPZCxNQUFNLENBQUNPLFlBQVksQ0FBQ08sR0FBRyxDQUFDO0lBQ2hDLENBQUMsQ0FBQztJQUNGZCxNQUFNLENBQUNDLElBQUksQ0FBQ2MsZUFBZSxDQUFDSixrQkFBa0IsQ0FBRUssU0FBNEIsSUFBSztNQUNoRixJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsU0FBUyxDQUFDLEVBQUU7UUFDN0IsT0FBT0csT0FBTyxDQUFDQyxPQUFPLENBQUNKLFNBQVMsQ0FB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
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { WithMock } from "@sap-ux/jest-mock-ui5/dist/generic";
|
|
2
2
|
import { mock } from "@sap-ux/jest-mock-ui5/dist/generic";
|
|
3
|
+
import AppComponent from "sap/fe/core/AppComponent";
|
|
3
4
|
import EditFlow from "sap/fe/core/controllerextensions/EditFlow";
|
|
4
5
|
import InternalRouting from "sap/fe/core/controllerextensions/InternalRouting";
|
|
6
|
+
import Recommendations from "sap/fe/core/controllerextensions/Recommendations";
|
|
5
7
|
import Share from "sap/fe/core/controllerextensions/Share";
|
|
6
8
|
import SideEffects from "sap/fe/core/controllerextensions/SideEffects";
|
|
7
9
|
import ResourceModel from "sap/fe/core/ResourceModel";
|
|
@@ -457,6 +459,8 @@ export type MockController = WithMock<Controller> & {
|
|
|
457
459
|
_sideEffects: WithMock<SideEffects>;
|
|
458
460
|
editFlow: WithMock<EditFlow>;
|
|
459
461
|
share: WithMock<Share>;
|
|
462
|
+
recommendations: WithMock<Recommendations>;
|
|
463
|
+
getAppComponent: () => WithMock<AppComponent>;
|
|
460
464
|
};
|
|
461
465
|
/**
|
|
462
466
|
* Factory function to create a new MockController.
|
|
@@ -469,7 +473,8 @@ export function createMockController(): MockController {
|
|
|
469
473
|
mocked._sideEffects = mock(SideEffects);
|
|
470
474
|
mocked.editFlow = mock(EditFlow);
|
|
471
475
|
mocked.share = mock(Share);
|
|
472
|
-
|
|
476
|
+
mocked.recommendations = mock(Recommendations);
|
|
477
|
+
mocked.getAppComponent = jest.fn().mockReturnValue(mock(AppComponent));
|
|
473
478
|
// Default Behavior
|
|
474
479
|
mocked.mock.getView.mockReturnValue(createMockView());
|
|
475
480
|
mocked.mock.isA.mockReturnValue(false);
|
package/src/sap/fe/test/Utils.js
CHANGED
|
@@ -111,6 +111,10 @@ sap.ui.define(
|
|
|
111
111
|
appName: "ManageItems",
|
|
112
112
|
appPath: "/apps/manage-items/webapp"
|
|
113
113
|
},
|
|
114
|
+
"Manage-dpp-items": {
|
|
115
|
+
appName: "ManageDPPItems",
|
|
116
|
+
appPath: "/apps/manage-dpp-items/webapp"
|
|
117
|
+
},
|
|
114
118
|
"Drafts-manage": {
|
|
115
119
|
appName: "ManageDrafts",
|
|
116
120
|
appPath: "/apps/manage-drafts/webapp"
|
|
@@ -191,7 +191,7 @@ sap.ui.define(
|
|
|
191
191
|
oTableBuilder = TableBuilder.createWrapper(this.getOpaInstance(), "sap.ui.table.Table").isDialogElement();
|
|
192
192
|
return this.prepareResult(
|
|
193
193
|
oTableBuilder
|
|
194
|
-
.
|
|
194
|
+
.doSelectValueHelpTableRows(TableAPI.createRowMatchers(aArguments[0], aArguments[1]))
|
|
195
195
|
.description(
|
|
196
196
|
Utils.formatMessage(
|
|
197
197
|
"Selecting rows of table in value help dialog '{0}' with values='{1}' and state='{2}'",
|
|
@@ -10,7 +10,7 @@ sap.ui.define(
|
|
|
10
10
|
"sap/fe/test/Utils",
|
|
11
11
|
"sap/fe/test/builder/FEBuilder",
|
|
12
12
|
"sap/ui/test/OpaBuilder",
|
|
13
|
-
"sap/fe/
|
|
13
|
+
"sap/fe/core/helpers/DraftEditState"
|
|
14
14
|
],
|
|
15
15
|
function (FilterBarAPI, Utils, FEBuilder, OpaBuilder, EditState) {
|
|
16
16
|
"use strict";
|