@sapui5/sap.fe.base 1.131.0 → 1.133.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/base/.library +1 -1
- package/src/sap/fe/base/BindingToolkit.js +51 -50
- package/src/sap/fe/base/BindingToolkit.ts +21 -4
- package/src/sap/fe/base/BuildingBlockBase.js +18 -27
- package/src/sap/fe/base/BuildingBlockBase.ts +1 -1
- package/src/sap/fe/base/ClassSupport.js +135 -91
- package/src/sap/fe/base/ClassSupport.ts +150 -76
- package/src/sap/fe/base/EventDelegateHook.js +6 -7
- package/src/sap/fe/base/HookSupport.js +44 -14
- package/src/sap/fe/base/HookSupport.ts +52 -14
- package/src/sap/fe/base/jsx-runtime/ViewLoader.js +9 -13
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +100 -42
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +112 -29
- package/src/sap/fe/base/jsx-runtime/jsx-xml.js +7 -10
- package/src/sap/fe/base/library.js +1 -1
|
@@ -12,6 +12,7 @@ import type { ControlProperties, JSXContext, NonControlProperties, Ref } from "s
|
|
|
12
12
|
import type BuildingBlockTemplatingBase from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase";
|
|
13
13
|
import type RuntimeBuildingBlock from "sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock";
|
|
14
14
|
import Text from "sap/m/Text";
|
|
15
|
+
import BindingParser from "sap/ui/base/BindingParser";
|
|
15
16
|
import DataType from "sap/ui/base/DataType";
|
|
16
17
|
import { bindingParser } from "sap/ui/base/ManagedObject";
|
|
17
18
|
import type ManagedObjectMetadata from "sap/ui/base/ManagedObjectMetadata";
|
|
@@ -66,9 +67,17 @@ function processAggregations(metadata: ManagedObjectMetadata, mSettings: Record<
|
|
|
66
67
|
if (aggregationChildren[aggregationName] !== undefined) {
|
|
67
68
|
if (mSettings.hasOwnProperty(aggregationName)) {
|
|
68
69
|
if (typeof mSettings[aggregationName] === "string") {
|
|
69
|
-
mSettings[aggregationName]
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
const resultingParse = BindingParser.complexParser(mSettings[aggregationName]);
|
|
71
|
+
if (resultingParse) {
|
|
72
|
+
mSettings[aggregationName] = {
|
|
73
|
+
path: resultingParse.path,
|
|
74
|
+
model: resultingParse.model
|
|
75
|
+
};
|
|
76
|
+
} else {
|
|
77
|
+
mSettings[aggregationName] = {
|
|
78
|
+
path: mSettings[aggregationName]
|
|
79
|
+
};
|
|
80
|
+
}
|
|
72
81
|
}
|
|
73
82
|
if (typeof aggregationChildren[aggregationName] === "function") {
|
|
74
83
|
(mSettings[aggregationName] as { factory: Function }).factory = aggregationChildren[
|
|
@@ -84,6 +93,92 @@ function processAggregations(metadata: ManagedObjectMetadata, mSettings: Record<
|
|
|
84
93
|
});
|
|
85
94
|
}
|
|
86
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Processes a binding toolkit expression property for function processProperties
|
|
98
|
+
*
|
|
99
|
+
* If the property is a constant, it compiles it as a constant. If the property is an aggregation,
|
|
100
|
+
* it compiles the expression as an object. Otherwise, it compiles the expression normally.
|
|
101
|
+
* @param settings The settings of the control
|
|
102
|
+
* @param settingsKey The key of the setting being processed
|
|
103
|
+
* @param bindingToolkitExpression The binding toolkit expression to process
|
|
104
|
+
* @param allProperties All properties of the control
|
|
105
|
+
*/
|
|
106
|
+
function processBindingToolkitExpression(
|
|
107
|
+
settings: Record<string, unknown>,
|
|
108
|
+
settingsKey: keyof typeof settings,
|
|
109
|
+
bindingToolkitExpression: BindingToolkitExpression<unknown>,
|
|
110
|
+
allProperties: Record<string, unknown>
|
|
111
|
+
): void {
|
|
112
|
+
if (isConstant(bindingToolkitExpression)) {
|
|
113
|
+
settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
|
|
114
|
+
} else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
|
|
115
|
+
// Aggregation case - we need to compile the expression but as an object
|
|
116
|
+
if (isPathInModelExpression(bindingToolkitExpression)) {
|
|
117
|
+
settings[settingsKey] = { path: bindingToolkitExpression.path, model: bindingToolkitExpression.modelName };
|
|
118
|
+
}
|
|
119
|
+
} else {
|
|
120
|
+
settings[settingsKey] = compileExpression(bindingToolkitExpression);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Processes a string property for function processProperties
|
|
126
|
+
*
|
|
127
|
+
* If the property is not a binding expression and does not match the expected format,
|
|
128
|
+
* it parses the value to provide the expected format. If the property is an event handler,
|
|
129
|
+
* it logs an error.
|
|
130
|
+
* @param settings The settings of the control
|
|
131
|
+
* @param settingsKey The key of the setting being processed
|
|
132
|
+
* @param value The string value to process
|
|
133
|
+
* @param allEvents All events of the control
|
|
134
|
+
* @param allProperties All properties of the control
|
|
135
|
+
* @param metadata Metadata of the control
|
|
136
|
+
*/
|
|
137
|
+
function processStringProperty(
|
|
138
|
+
settings: Record<string, unknown>,
|
|
139
|
+
settingsKey: keyof typeof settings,
|
|
140
|
+
value: string,
|
|
141
|
+
allEvents: Record<string, unknown>,
|
|
142
|
+
allProperties: Record<string, unknown>,
|
|
143
|
+
metadata: ManagedObjectMetadata
|
|
144
|
+
): void {
|
|
145
|
+
if (!value.startsWith("{")) {
|
|
146
|
+
if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
|
|
147
|
+
Log.error(`Event handlers cannot be set as string in JSX, ${settingsKey} in ${metadata.getName()}`);
|
|
148
|
+
}
|
|
149
|
+
const propertyType = (allProperties[settingsKey] as { getType?: Function })?.getType?.();
|
|
150
|
+
if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
|
|
151
|
+
settings[settingsKey] = propertyType.parseValue(value);
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
settings[settingsKey] = value;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Processes an object property for function processProperties.
|
|
160
|
+
*
|
|
161
|
+
* If the property is a promise, it adds it to the late properties map. If the property is a binding info holder,
|
|
162
|
+
* it sets the binding info to the settings.
|
|
163
|
+
* @param settings The settings of the control
|
|
164
|
+
* @param settingsKey The key of the setting being processed
|
|
165
|
+
* @param value The object value to process
|
|
166
|
+
* @param lateProperties A map of the control's late properties
|
|
167
|
+
*/
|
|
168
|
+
function processObjectProperty(
|
|
169
|
+
settings: Record<string, unknown>,
|
|
170
|
+
settingsKey: keyof typeof settings,
|
|
171
|
+
value: unknown,
|
|
172
|
+
lateProperties: Record<string, Promise<unknown>>
|
|
173
|
+
): void {
|
|
174
|
+
if ((value as Promise<unknown>).then) {
|
|
175
|
+
lateProperties[settingsKey] = value as Promise<unknown>;
|
|
176
|
+
delete settings[settingsKey];
|
|
177
|
+
} else if ((value as BindingInfoHolder<unknown>).__bindingInfo) {
|
|
178
|
+
settings[settingsKey] = (value as BindingInfoHolder<unknown>).__bindingInfo;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
87
182
|
/**
|
|
88
183
|
* Processes the properties.
|
|
89
184
|
*
|
|
@@ -99,34 +194,17 @@ function processProperties(metadata: ManagedObjectMetadata, settings: Record<str
|
|
|
99
194
|
const lateProperties: Record<string, Promise<unknown>> = {};
|
|
100
195
|
const allEvents = metadata.getAllEvents();
|
|
101
196
|
const allProperties = metadata.getAllProperties();
|
|
197
|
+
|
|
102
198
|
for (settingsKey in settings) {
|
|
103
199
|
const value = settings[settingsKey];
|
|
104
200
|
if (isBindingToolkitExpression(value)) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (isPathInModelExpression(bindingToolkitExpression)) {
|
|
111
|
-
settings[settingsKey] = { path: bindingToolkitExpression.path, model: bindingToolkitExpression.modelName };
|
|
112
|
-
}
|
|
113
|
-
} else {
|
|
114
|
-
settings[settingsKey] = compileExpression(bindingToolkitExpression);
|
|
115
|
-
}
|
|
116
|
-
} else if (value !== null && typeof value === "object" && (value as Promise<unknown>).then) {
|
|
117
|
-
lateProperties[settingsKey] = value as Promise<unknown>;
|
|
118
|
-
delete settings[settingsKey];
|
|
119
|
-
} else if (typeof value === "string" && !value.startsWith("{")) {
|
|
120
|
-
const propertyType = (allProperties[settingsKey] as { getType?: Function })?.getType?.();
|
|
121
|
-
if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
|
|
122
|
-
settings[settingsKey] = propertyType.parseValue(value);
|
|
123
|
-
}
|
|
124
|
-
} else if (typeof value === "object" && (value as BindingInfoHolder<unknown>).__bindingInfo) {
|
|
125
|
-
settings[settingsKey] = (value as BindingInfoHolder<unknown>).__bindingInfo;
|
|
201
|
+
processBindingToolkitExpression(settings, settingsKey, value, allProperties);
|
|
202
|
+
} else if (value !== null && typeof value === "object") {
|
|
203
|
+
processObjectProperty(settings, settingsKey, value, lateProperties);
|
|
204
|
+
} else if (typeof value === "string") {
|
|
205
|
+
processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata);
|
|
126
206
|
} else if (value === undefined) {
|
|
127
|
-
|
|
128
|
-
delete settings[settingsKey];
|
|
129
|
-
}
|
|
207
|
+
delete settings[settingsKey];
|
|
130
208
|
}
|
|
131
209
|
}
|
|
132
210
|
return lateProperties;
|
|
@@ -217,9 +295,14 @@ const jsxControl = function <T extends Element>(
|
|
|
217
295
|
if (typeof bindingDef === "string") {
|
|
218
296
|
const bindingInfo = bindingParser(bindingDef);
|
|
219
297
|
if (bindingInfo) {
|
|
220
|
-
targetControlInstance.bindElement({
|
|
298
|
+
targetControlInstance.bindElement({
|
|
299
|
+
model: bindingInfo.model ?? undefined,
|
|
300
|
+
path: bindingInfo.path,
|
|
301
|
+
parameters: bindingInfo.parameters ?? undefined
|
|
302
|
+
});
|
|
303
|
+
} else {
|
|
304
|
+
targetControlInstance.bindElement(bindingDef);
|
|
221
305
|
}
|
|
222
|
-
targetControlInstance.bindElement(bindingDef);
|
|
223
306
|
} else {
|
|
224
307
|
// We consider it's an object
|
|
225
308
|
Object.keys(bindingDef).forEach((bindingDefKey) => {
|
|
@@ -7,7 +7,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
7
7
|
|
|
8
8
|
var compileExpression = BindingToolkit.compileExpression;
|
|
9
9
|
function isBindingToolkitExpression(expression) {
|
|
10
|
-
return
|
|
10
|
+
return expression?._type !== undefined;
|
|
11
11
|
}
|
|
12
12
|
const writeChildren = function (val) {
|
|
13
13
|
if (Array.isArray(val)) {
|
|
@@ -23,7 +23,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
23
23
|
* @returns The escaped xml attribute
|
|
24
24
|
*/
|
|
25
25
|
function escapeXMLAttributeValue(value) {
|
|
26
|
-
return value
|
|
26
|
+
return value?.replace(/&/g, "&").replace(/</g, "<").replace(/"/g, """).replace(/'/g, "'");
|
|
27
27
|
}
|
|
28
28
|
const addChildAggregation = function (aggregationChildren, aggregationName, child) {
|
|
29
29
|
if (child === undefined) {
|
|
@@ -47,7 +47,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
const isAControl = function (children) {
|
|
50
|
-
return !!
|
|
50
|
+
return !!children?.getMetadata;
|
|
51
51
|
};
|
|
52
52
|
const FL_DELEGATE = "fl:delegate";
|
|
53
53
|
const DT_DESIGNTIME = "dt:designtime";
|
|
@@ -84,7 +84,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
84
84
|
}
|
|
85
85
|
function processProperties(mSettings, metadataProperties, namespaceAlias, propertiesString, aggregationString, isControl) {
|
|
86
86
|
Object.keys(metadataProperties).forEach(propertyName => {
|
|
87
|
-
var _mSettings$children, _mSettings$children2;
|
|
88
87
|
if (mSettings.hasOwnProperty(propertyName) && mSettings[propertyName] !== undefined) {
|
|
89
88
|
const propertyValue = mSettings[propertyName];
|
|
90
89
|
if (propertyName === CORE_REQUIRE) {
|
|
@@ -112,8 +111,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
112
111
|
const outValue = typeof propertyValue[0] === "string" ? propertyValue[0] : JSON.stringify(propertyValue[0]);
|
|
113
112
|
propertiesString.push(`${propertyName}='${outValue}'`);
|
|
114
113
|
} else {
|
|
115
|
-
|
|
116
|
-
const separator = (_metadataProperties$p = metadataProperties[propertyName].type) !== null && _metadataProperties$p !== void 0 && _metadataProperties$p.endsWith("[]") ? "," : " ";
|
|
114
|
+
const separator = metadataProperties[propertyName].type?.endsWith("[]") ? "," : " ";
|
|
117
115
|
const outValue = propertyValue.every(val => typeof val === "string") ? propertyValue.join(separator) : JSON.stringify(propertyValue);
|
|
118
116
|
propertiesString.push(`${propertyName}='${outValue}'`);
|
|
119
117
|
}
|
|
@@ -130,10 +128,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
130
128
|
const prop = propertyValue;
|
|
131
129
|
propertiesString.push(`${propertyName}='${escapeXMLAttributeValue(prop.toString())}'`);
|
|
132
130
|
}
|
|
133
|
-
} else if (
|
|
134
|
-
var _mSettings$children3;
|
|
131
|
+
} else if (mSettings.children?.hasOwnProperty(propertyName) && Object.keys(mSettings.children?.[propertyName] ?? {}).length > 0) {
|
|
135
132
|
// Object / Array properties are part of the `children` aggregation and as such still need to be processed as properties
|
|
136
|
-
const childrenObject =
|
|
133
|
+
const childrenObject = mSettings.children?.[propertyName];
|
|
137
134
|
aggregationString.push(processObjectPropertyValue(childrenObject, namespaceAlias, propertyName));
|
|
138
135
|
}
|
|
139
136
|
});
|
|
@@ -290,4 +287,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
290
287
|
};
|
|
291
288
|
return jsxXml;
|
|
292
289
|
}, false);
|
|
293
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJfdHlwZSIsInVuZGVmaW5lZCIsIndyaXRlQ2hpbGRyZW4iLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJ2YWx1ZSIsInJlcGxhY2UiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidHJpbSIsImxlbmd0aCIsInB1c2giLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJjaGlsZEtleSIsIk9iamVjdCIsImtleXMiLCJpc0FDb250cm9sIiwiY2hpbGRyZW4iLCJnZXRNZXRhZGF0YSIsIkZMX0RFTEVHQVRFIiwiRFRfREVTSUdOVElNRSIsIkNPUkVfUkVRVUlSRSIsIkxPR19TT1VSQ0VQQVRIIiwiQ1VTVE9NX0VOVElUWVRZUEUiLCJwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZSIsImNoaWxkcmVuT2JqZWN0IiwibmFtZXNwYWNlQWxpYXMiLCJwcm9wZXJ0eU5hbWUiLCJhZ2dyZWdhdGlvblByb3BlcnRpZXMiLCJzdWJQcm9wTmFtZSIsImNoaWxkVmFsdWUiLCJjaGlsZHJlbk9iamVjdEVsZW1lbnQiLCJ0b1N0cmluZyIsIm5hbWVzcGFjZWRQcm9wZXJ0eSIsInByb2Nlc3NQcm9wZXJ0aWVzIiwibVNldHRpbmdzIiwibWV0YWRhdGFQcm9wZXJ0aWVzIiwicHJvcGVydGllc1N0cmluZyIsImFnZ3JlZ2F0aW9uU3RyaW5nIiwiaXNDb250cm9sIiwiX21TZXR0aW5ncyRjaGlsZHJlbiIsIl9tU2V0dGluZ3MkY2hpbGRyZW4yIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wZXJ0eVZhbHVlIiwidHlwZSIsImdldFBhdGgiLCJjb21waWxlRXhwcmVzc2lvbiIsIm91dFZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9tZXRhZGF0YVByb3BlcnRpZXMkcCIsInNlcGFyYXRvciIsImVuZHNXaXRoIiwiZXZlcnkiLCJwcm9wQXNVSTVPYmplY3QiLCJ1aTVvYmplY3QiLCJwcm9wIiwiX21TZXR0aW5ncyRjaGlsZHJlbjMiLCJwcm9jZXNzQ29tbWFuZCIsInNldHRpbmdzIiwibWV0YWRhdGFFdmVudHMiLCJjb21tYW5kUHJvcGVydHkiLCJjb21tYW5kIiwiZXZlbnROYW1lIiwic3BsaXQiLCJldmVudCIsInN0YXJ0c1dpdGgiLCJuYW1lIiwicHJvY2Vzc0FnZ3JlZ2F0aW9ucyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImFnZ3JlZ2F0aW9uQ2hpbGRLZXlzIiwid3JpdGVPbmx5RGVmYXVsdEFnZ3JlZ2F0aW9uIiwianN4WG1sIiwia2V5IiwieG1sTmFtZXNwYWNlTWFwIiwib3ZlcnJpZGVOb2RlTmFtZSIsIm1ldGFkYXRhIiwiY29udHJvbE5hbWUiLCJnZXRBbGxQcm9wZXJ0aWVzIiwiZ2V0QWxsRXZlbnRzIiwiZ2V0QWxsQXNzb2NpYXRpb25zIiwiZ2V0TmFtZSIsImdldEFsbEFnZ3JlZ2F0aW9ucyIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJwcm9wZXJ0aWVzIiwiZGVwZW5kZW50cyIsImN1c3RvbURhdGEiLCJhZ2dyZWdhdGlvbnMiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJuYW1lc3BhY2UiLCJuYW1lc1NwbGl0Iiwic2xpY2UiLCJ0YWdOYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJqc3gteG1sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sUHJvcGVydGllcywgTm9uQ29udHJvbFByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuXG5mdW5jdGlvbiBpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5rbm93blxuKTogZXhwcmVzc2lvbiBpcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+KT8uX3R5cGUgIT09IHVuZGVmaW5lZDtcbn1cblxuY29uc3Qgd3JpdGVDaGlsZHJlbiA9IGZ1bmN0aW9uICh2YWw6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdHJldHVybiB2YWwuam9pbihcIlwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59O1xuXG4vKipcbiAqIFNvbWUgY2hhcmFjdGVycyBuZWVkcyB0byBiZSBlc2NhcGVkIHdoZW4gdXNlZCBhcyBYTUwgYXR0cmlidXRlIHZhbHVlLCBvdGhlcndpc2UgdGhpcyByZXN1bHQgaW4gaW5jb3JyZWN0IFhNTC5cbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgeG1sIGF0dHJpYnV0ZVxuICovXG5mdW5jdGlvbiBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSh2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiB2YWx1ZT8ucmVwbGFjZSgvJi9nLCBcIiZhbXA7XCIpLnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpLnJlcGxhY2UoLycvZywgXCImYXBvcztcIik7XG59XG5cbmNvbnN0IGFkZENoaWxkQWdncmVnYXRpb24gPSBmdW5jdGlvbiAoXG5cdGFnZ3JlZ2F0aW9uQ2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIChDb250cm9sIHwgc3RyaW5nKVtdPixcblx0YWdncmVnYXRpb25OYW1lOiBzdHJpbmcsXG5cdGNoaWxkOiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pOiB2b2lkIHtcblx0aWYgKGNoaWxkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKCFhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0pIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gPSBbXTtcblx0fVxuXHRpZiAodHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKGNoaWxkLnRyaW0oKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0ucHVzaChjaGlsZCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG5cdFx0Y2hpbGQuZm9yRWFjaCgoc3ViQ2hpbGQpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgYWdncmVnYXRpb25OYW1lLCBzdWJDaGlsZCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZEtleSBvZiBPYmplY3Qua2V5cyhjaGlsZCkpIHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgY2hpbGRLZXksIGNoaWxkW2NoaWxkS2V5XSk7XG5cdFx0fVxuXHR9XG59O1xuXG5jb25zdCBpc0FDb250cm9sID0gZnVuY3Rpb24gKGNoaWxkcmVuPzogdHlwZW9mIENvbnRyb2wgfCBGdW5jdGlvbik6IGNoaWxkcmVuIGlzIHR5cGVvZiBDb250cm9sIHtcblx0cmV0dXJuICEhKGNoaWxkcmVuIGFzIHR5cGVvZiBDb250cm9sKT8uZ2V0TWV0YWRhdGE7XG59O1xuXG5jb25zdCBGTF9ERUxFR0FURSA9IFwiZmw6ZGVsZWdhdGVcIjtcbmNvbnN0IERUX0RFU0lHTlRJTUUgPSBcImR0OmRlc2lnbnRpbWVcIjtcbmNvbnN0IENPUkVfUkVRVUlSRSA9IFwiY29yZTpyZXF1aXJlXCI7XG5jb25zdCBMT0dfU09VUkNFUEFUSCA9IFwibG9nOnNvdXJjZVBhdGhcIjtcbmNvbnN0IENVU1RPTV9FTlRJVFlUWVBFID0gXCJjdXN0b21EYXRhOmVudGl0eVR5cGVcIjtcblxuZnVuY3Rpb24gcHJvY2Vzc09iamVjdFByb3BlcnR5VmFsdWUoXG5cdGNoaWxkcmVuT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0bmFtZXNwYWNlQWxpYXM6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0cHJvcGVydHlOYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG5cdC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNoaWxkIGlzXG5cdGNvbnN0IGFnZ3JlZ2F0aW9uUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgYWdncmVnYXRpb25DaGlsZHJlbjogc3RyaW5nW10gPSBbXTtcblx0T2JqZWN0LmtleXMoY2hpbGRyZW5PYmplY3QpLmZvckVhY2goKHN1YlByb3BOYW1lKSA9PiB7XG5cdFx0Y29uc3QgY2hpbGRWYWx1ZSA9IGNoaWxkcmVuT2JqZWN0W3N1YlByb3BOYW1lXTtcblx0XHRpZiAoY2hpbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNoaWxkVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoY2hpbGRWYWx1ZSkpIHtcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuLnB1c2goYDwke3N1YlByb3BOYW1lfT5gKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkcmVuT2JqZWN0RWxlbWVudCBvZiBjaGlsZFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuLnB1c2goXG5cdFx0XHRcdFx0XHRcdHByb2Nlc3NPYmplY3RQcm9wZXJ0eVZhbHVlKGNoaWxkcmVuT2JqZWN0RWxlbWVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbmFtZXNwYWNlQWxpYXMsIHN1YlByb3BOYW1lKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YWdncmVnYXRpb25DaGlsZHJlbi5wdXNoKGA8LyR7c3ViUHJvcE5hbWV9PmApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBhIHZhbHVlIGl0IG5lZWRzIHRvIGJlIHNlcmlhbGl6ZWQgYXMgYSBjaGlsZHJlblxuXHRcdFx0XHRcdC8vIDxteU9iamVjdFByb3AgcHJvcDE9J3h4eCcsIHByb3AyPSd4eHQnLz5cblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuLnB1c2goXG5cdFx0XHRcdFx0XHRwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZShjaGlsZFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lc3BhY2VBbGlhcywgc3ViUHJvcE5hbWUpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGl0J3MgcGFydCBvZiB0aGUgbWFpbiBvYmplY3QganVzdCBhcyBhbm90aGVyIHByb3BlcnR5XG5cdFx0XHRcdGFnZ3JlZ2F0aW9uUHJvcGVydGllcy5wdXNoKGAke3N1YlByb3BOYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShjaGlsZFZhbHVlLnRvU3RyaW5nKCkpfSdgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IG5hbWVzcGFjZWRQcm9wZXJ0eSA9IG5hbWVzcGFjZUFsaWFzID8gYCR7bmFtZXNwYWNlQWxpYXN9OiR7cHJvcGVydHlOYW1lfWAgOiBwcm9wZXJ0eU5hbWU7XG5cdHJldHVybiBgPCR7bmFtZXNwYWNlZFByb3BlcnR5fSAke2FnZ3JlZ2F0aW9uUHJvcGVydGllcy5qb2luKFwiIFwiKX0+JHthZ2dyZWdhdGlvbkNoaWxkcmVuLmpvaW4oXCJcXG5cIil9PC8ke25hbWVzcGFjZWRQcm9wZXJ0eX0+YDtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXM8VD4oXG5cdG1TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG1ldGFkYXRhUHJvcGVydGllczogUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdFx0dHlwZT86IHN0cmluZztcblx0XHR9XG5cdD4sXG5cdG5hbWVzcGFjZUFsaWFzOiBzdHJpbmcsXG5cdHByb3BlcnRpZXNTdHJpbmc6IHN0cmluZ1tdLFxuXHRhZ2dyZWdhdGlvblN0cmluZzogc3RyaW5nW10sXG5cdGlzQ29udHJvbDogYm9vbGVhblxuKTogdm9pZCB7XG5cdE9iamVjdC5rZXlzKG1ldGFkYXRhUHJvcGVydGllcykuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0aWYgKG1TZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpICYmIG1TZXR0aW5nc1twcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBtU2V0dGluZ3NbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IENPUkVfUkVRVUlSRSkge1xuXHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lID09PSBGTF9ERUxFR0FURSkge1xuXHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYHhtbG5zOmZsPVwic2FwLnVpLmZsXCJgKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IERUX0RFU0lHTlRJTUUpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGB4bWxuczpkdD1cInNhcC51aS5kdFwiYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lID09PSBMT0dfU09VUkNFUEFUSCkge1xuXHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYHhtbG5zOmxvZz1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcImApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gQ1VTVE9NX0VOVElUWVRZUEUpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGB4bWxuczpjdXN0b21EYXRhPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAmJiB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRpZiAobWV0YWRhdGFQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0udHlwZSA9PT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiKSB7XG5cdFx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGAke3Byb3BlcnR5TmFtZX09JyR7KHByb3BlcnR5VmFsdWUgYXMgQ29udGV4dCkuZ2V0UGF0aCgpfSdgKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihwcm9wZXJ0eVZhbHVlKSkge1xuXHRcdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PScke2VzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKGNvbXBpbGVFeHByZXNzaW9uKHByb3BlcnR5VmFsdWUpKX0nYCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eVZhbHVlKSkge1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eVZhbHVlLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb3V0VmFsdWUgPSB0eXBlb2YgcHJvcGVydHlWYWx1ZVswXSA9PT0gXCJzdHJpbmdcIiA/IHByb3BlcnR5VmFsdWVbMF0gOiBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlWzBdKTtcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PScke291dFZhbHVlfSdgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VwYXJhdG9yID0gbWV0YWRhdGFQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0udHlwZT8uZW5kc1dpdGgoXCJbXVwiKSA/IFwiLFwiIDogXCIgXCI7XG5cdFx0XHRcdFx0XHRjb25zdCBvdXRWYWx1ZSA9IHByb3BlcnR5VmFsdWUuZXZlcnkoKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdFx0PyBwcm9wZXJ0eVZhbHVlLmpvaW4oc2VwYXJhdG9yKVxuXHRcdFx0XHRcdFx0XHQ6IEpTT04uc3RyaW5naWZ5KHByb3BlcnR5VmFsdWUpO1xuXHRcdFx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGAke3Byb3BlcnR5TmFtZX09JyR7b3V0VmFsdWV9J2ApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChpc0NvbnRyb2wpIHtcblx0XHRcdFx0XHRjb25zdCBwcm9wQXNVSTVPYmplY3QgPSB7IHVpNW9iamVjdDogdHJ1ZSwgLi4ucHJvcGVydHlWYWx1ZSB9O1xuXHRcdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PScke2VzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKEpTT04uc3RyaW5naWZ5KHByb3BBc1VJNU9iamVjdCkpfSdgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZ2dyZWdhdGlvblN0cmluZy5wdXNoKHByb2Nlc3NPYmplY3RQcm9wZXJ0eVZhbHVlKHByb3BlcnR5VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgdW5kZWZpbmVkLCBwcm9wZXJ0eU5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eVZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IHByb3AgPSBwcm9wZXJ0eVZhbHVlIGFzIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PScke2VzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHByb3AudG9TdHJpbmcoKSl9J2ApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRtU2V0dGluZ3MuY2hpbGRyZW4/Lmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkgJiZcblx0XHRcdE9iamVjdC5rZXlzKChtU2V0dGluZ3MuY2hpbGRyZW4gYXMgQ29udHJvbFByb3BlcnRpZXM8VD4pPy5bcHJvcGVydHlOYW1lXSA/PyB7fSkubGVuZ3RoID4gMFxuXHRcdCkge1xuXHRcdFx0Ly8gT2JqZWN0IC8gQXJyYXkgcHJvcGVydGllcyBhcmUgcGFydCBvZiB0aGUgYGNoaWxkcmVuYCBhZ2dyZWdhdGlvbiBhbmQgYXMgc3VjaCBzdGlsbCBuZWVkIHRvIGJlIHByb2Nlc3NlZCBhcyBwcm9wZXJ0aWVzXG5cdFx0XHRjb25zdCBjaGlsZHJlbk9iamVjdCA9IChtU2V0dGluZ3MuY2hpbGRyZW4gYXMgQ29udHJvbFByb3BlcnRpZXM8VD4pPy5bcHJvcGVydHlOYW1lXSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRhZ2dyZWdhdGlvblN0cmluZy5wdXNoKHByb2Nlc3NPYmplY3RQcm9wZXJ0eVZhbHVlKGNoaWxkcmVuT2JqZWN0LCBuYW1lc3BhY2VBbGlhcywgcHJvcGVydHlOYW1lKSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGNvbW1hbmQuXG4gKlxuICogUmVzb2x2ZXMgdGhlIGNvbW1hbmQgc2V0IG9uIHRoZSBjb250cm9sIHZpYSB0aGUgaW50cmluc2ljIGNsYXNzIGF0dHJpYnV0ZSBcImpzeDpjb21tYW5kXCIuXG4gKiBJZiBubyBjb21tYW5kIGhhcyBiZWVuIHNldCBvciB0aGUgdGFyZ2V0ZWQgZXZlbnQgZG9lc24ndCBleGlzdCwgbm8gY29uZmlndXJhdGlvbiBpcyBzZXQuXG4gKiBAcGFyYW0gc2V0dGluZ3MgTWV0YWRhdGEgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBtZXRhZGF0YUV2ZW50cyBTZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29tbWFuZChcblx0c2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRtZXRhZGF0YUV2ZW50czogUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0fVxuXHQ+XG4pOiB2b2lkIHtcblx0Y29uc3QgY29tbWFuZFByb3BlcnR5ID0gc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcblx0aWYgKGNvbW1hbmRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IFtjb21tYW5kLCBldmVudE5hbWVdID0gKGNvbW1hbmRQcm9wZXJ0eSBhcyBzdHJpbmcpLnNwbGl0KFwifFwiKTtcblx0XHRjb25zdCBldmVudCA9IG1ldGFkYXRhRXZlbnRzW2V2ZW50TmFtZV07XG5cdFx0aWYgKGV2ZW50ICYmIGNvbW1hbmQuc3RhcnRzV2l0aChcImNtZDpcIikpIHtcblx0XHRcdHNldHRpbmdzW2V2ZW50Lm5hbWVdID0gY29tbWFuZDtcblx0XHR9XG5cdH1cblx0ZGVsZXRlIHNldHRpbmdzW1wianN4OmNvbW1hbmRcIl07XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBZ2dyZWdhdGlvbnMoXG5cdG1TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG1ldGFkYXRhQWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+LFxuXHRuYW1lc3BhY2VBbGlhczogc3RyaW5nLFxuXHRkZWZhdWx0QWdncmVnYXRpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHByb3BlcnRpZXNTdHJpbmc6IHN0cmluZ1tdLFxuXHRhZ2dyZWdhdGlvblN0cmluZzogc3RyaW5nW11cbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uQ2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUgPz8gXCJjdXN0b21EYXRhXCIsIG1TZXR0aW5ncy5jaGlsZHJlbiBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcblx0Y29uc3QgYWdncmVnYXRpb25DaGlsZEtleXMgPSBPYmplY3Qua2V5cyhhZ2dyZWdhdGlvbkNoaWxkcmVuKTtcblx0bGV0IHdyaXRlT25seURlZmF1bHRBZ2dyZWdhdGlvbiA9IGZhbHNlO1xuXHRpZiAoYWdncmVnYXRpb25DaGlsZEtleXMubGVuZ3RoID09PSAxICYmIGFnZ3JlZ2F0aW9uQ2hpbGRLZXlzWzBdID09PSBkZWZhdWx0QWdncmVnYXRpb25OYW1lKSB7XG5cdFx0d3JpdGVPbmx5RGVmYXVsdEFnZ3JlZ2F0aW9uID0gdHJ1ZTtcblx0fVxuXHRPYmplY3Qua2V5cyhtZXRhZGF0YUFnZ3JlZ2F0aW9ucykuZm9yRWFjaCgoYWdncmVnYXRpb25OYW1lKSA9PiB7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4uaGFzT3duUHJvcGVydHkoYWdncmVnYXRpb25OYW1lKSAmJiBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0ubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGFnZ3JlZ2F0aW9uTmFtZSA9PT0gZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSAmJiB3cml0ZU9ubHlEZWZhdWx0QWdncmVnYXRpb24pIHtcblx0XHRcdFx0YWdncmVnYXRpb25TdHJpbmcucHVzaChgJHt3cml0ZUNoaWxkcmVuKGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSl9YCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZ2dyZWdhdGlvblN0cmluZy5wdXNoKFxuXHRcdFx0XHRcdGA8JHtuYW1lc3BhY2VBbGlhc306JHthZ2dyZWdhdGlvbk5hbWV9PlxuXHRcdFx0XHRcdFx0JHt3cml0ZUNoaWxkcmVuKGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSl9XG5cdFx0XHRcdFx0PC8ke25hbWVzcGFjZUFsaWFzfToke2FnZ3JlZ2F0aW9uTmFtZX0+YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAobVNldHRpbmdzLmhhc093blByb3BlcnR5KGFnZ3JlZ2F0aW9uTmFtZSkgJiYgbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7YWdncmVnYXRpb25OYW1lfT0nJHtKU09OLnN0cmluZ2lmeShtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSl9J2ApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSW4gc29tZSBjYXNlIHRoZSBhZ2dyZWdhdGlvbiBleHBlY3QgYSBzdHJpbmcgdmFsdWUgKGxpa2UgZm9yIHRoZSB0b29sdGlwKSwgaW4gdGhpcyBjYXNlIHdlIHNldCBpdCBkaXJlY3RseSBhcyBhIHByb3BlcnR5XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHthZ2dyZWdhdGlvbk5hbWV9PScke2VzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdIGFzIHN0cmluZyl9J2ApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhZ2dyZWdhdGlvbkNoaWxkcmVuO1xufVxuXG5jb25zdCBqc3hYbWwgPSBmdW5jdGlvbiA8VD4oXG5cdHR5cGU6IHR5cGVvZiBDb250cm9sIHwgdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSB8IFwic2xvdFwiLFxuXHRtU2V0dGluZ3M6IE5vbkNvbnRyb2xQcm9wZXJ0aWVzPFQ+ICYgeyBrZXk/OiBzdHJpbmc7IGNoaWxkcmVuPzogVUk1RWxlbWVudCB8IENvbnRyb2xQcm9wZXJ0aWVzPFQ+OyBuYW1lPzogc3RyaW5nIH0sXG5cdGtleTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR4bWxOYW1lc3BhY2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdG92ZXJyaWRlTm9kZU5hbWU/OiBzdHJpbmdcbik6IHN0cmluZyB7XG5cdGxldCBtZXRhZGF0YTtcblx0bGV0IG1ldGFkYXRhUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgeyBuYW1lPzogc3RyaW5nOyB0eXBlPzogc3RyaW5nIH0+O1xuXHRsZXQgbWV0YWRhdGFFdmVudHM6IFJlY29yZDxzdHJpbmcsIHsgbmFtZTogc3RyaW5nIH0+O1xuXHRsZXQgY29udHJvbE5hbWU7XG5cdGxldCBtZXRhZGF0YUFnZ3JlZ2F0aW9ucztcblx0bGV0IGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IGlzQ29udHJvbCA9IGZhbHNlO1xuXHRpZiAodHlwZSA9PT0gXCJzbG90XCIpIHtcblx0XHRyZXR1cm4gYDxzbG90IG5hbWU9XCIke21TZXR0aW5ncy5uYW1lfVwiLz5gO1xuXHR9IGVsc2UgaWYgKGlzQUNvbnRyb2wodHlwZSkpIHtcblx0XHRtZXRhZGF0YSA9IHR5cGUuZ2V0TWV0YWRhdGEoKTtcblx0XHRtZXRhZGF0YVByb3BlcnRpZXMgPSBtZXRhZGF0YS5nZXRBbGxQcm9wZXJ0aWVzKCk7XG5cdFx0bWV0YWRhdGFQcm9wZXJ0aWVzID0geyAuLi5tZXRhZGF0YVByb3BlcnRpZXMsIC4uLm1ldGFkYXRhLmdldEFsbEV2ZW50cygpLCAuLi5tZXRhZGF0YS5nZXRBbGxBc3NvY2lhdGlvbnMoKSB9O1xuXHRcdG1ldGFkYXRhRXZlbnRzID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKCk7XG5cdFx0Y29udHJvbE5hbWUgPSBtZXRhZGF0YS5nZXROYW1lKCk7XG5cdFx0bWV0YWRhdGFBZ2dyZWdhdGlvbnMgPSBtZXRhZGF0YS5nZXRBbGxBZ2dyZWdhdGlvbnMoKTtcblx0XHRkZWZhdWx0QWdncmVnYXRpb25OYW1lID0gbWV0YWRhdGEuZ2V0RGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSgpO1xuXHRcdGlzQ29udHJvbCA9IHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0bWV0YWRhdGEgPSB0eXBlLm1ldGFkYXRhO1xuXHRcdG1ldGFkYXRhUHJvcGVydGllcyA9IHsgLi4ubWV0YWRhdGEucHJvcGVydGllcyB9O1xuXHRcdG1ldGFkYXRhQWdncmVnYXRpb25zID0geyAuLi57IGRlcGVuZGVudHM6IHt9LCBjdXN0b21EYXRhOiB7fSB9LCAuLi5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMgfTtcblx0XHRtZXRhZGF0YUV2ZW50cyA9IHt9O1xuXHRcdGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUgPSBtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb247XG5cdFx0Y29udHJvbE5hbWUgPSBtZXRhZGF0YS5uYW1lc3BhY2UgKyBcIi5cIiArIG1ldGFkYXRhLm5hbWU7XG5cdH1cblx0Y29uc3QgbmFtZXNTcGxpdCA9IGNvbnRyb2xOYW1lLnNwbGl0KFwiLlwiKTtcblx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0bVNldHRpbmdzW1wia2V5XCJdID0ga2V5O1xuXHR9XG5cblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wiY2xhc3NcIl0gPSB7IG5hbWU6IFwiY2xhc3NcIiB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbXCJpZFwiXSA9IHsgbmFtZTogXCJpZFwiIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tcImJpbmRpbmdcIl0gPSB7IG5hbWU6IFwiYmluZGluZ1wiIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tGTF9ERUxFR0FURV0gPSB7IG5hbWU6IEZMX0RFTEVHQVRFIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tEVF9ERVNJR05USU1FXSA9IHsgbmFtZTogRFRfREVTSUdOVElNRSB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbQ09SRV9SRVFVSVJFXSA9IHsgbmFtZTogQ09SRV9SRVFVSVJFIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tMT0dfU09VUkNFUEFUSF0gPSB7IG5hbWU6IExPR19TT1VSQ0VQQVRIIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tDVVNUT01fRU5USVRZVFlQRV0gPSB7IG5hbWU6IENVU1RPTV9FTlRJVFlUWVBFIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tcInhtbG5zOmZsXCJdID0geyBuYW1lOiBGTF9ERUxFR0FURSB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbXCJ4bWxuczpkdFwiXSA9IHsgbmFtZTogRFRfREVTSUdOVElNRSB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbXCJ4bWxuczpjb3JlXCJdID0geyBuYW1lOiBDT1JFX1JFUVVJUkUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wieG1sbnM6bG9nXCJdID0geyBuYW1lOiBMT0dfU09VUkNFUEFUSCB9O1xuXHRpZiAoY29udHJvbE5hbWUgPT09IFwic2FwLnVpLmNvcmUuRnJhZ21lbnRcIikge1xuXHRcdG1ldGFkYXRhUHJvcGVydGllc1tcImZyYWdtZW50TmFtZVwiXSA9IHsgbmFtZTogXCJmcmFnbWVudE5hbWVcIiB9O1xuXHR9XG5cdGNvbnN0IG5hbWVzcGFjZSA9IG5hbWVzU3BsaXQuc2xpY2UoMCwgLTEpO1xuXHRjb25zdCBuYW1lID0gbmFtZXNTcGxpdFtuYW1lc1NwbGl0Lmxlbmd0aCAtIDFdO1xuXHRsZXQgbmFtZXNwYWNlQWxpYXMgPSBuYW1lc3BhY2VbbmFtZXNwYWNlLmxlbmd0aCAtIDFdO1xuXHRpZiAoeG1sTmFtZXNwYWNlTWFwW25hbWVzcGFjZS5qb2luKFwiLlwiKV0pIHtcblx0XHRuYW1lc3BhY2VBbGlhcyA9IHhtbE5hbWVzcGFjZU1hcFtuYW1lc3BhY2Uuam9pbihcIi5cIildO1xuXHR9XG5cdGxldCB0YWdOYW1lID0gYCR7bmFtZXNwYWNlQWxpYXN9OiR7bmFtZX1gO1xuXHRjb25zdCBwcm9wZXJ0aWVzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBhZ2dyZWdhdGlvblN0cmluZzogc3RyaW5nW10gPSBbXTtcblx0cHJvY2Vzc0NvbW1hbmQobVNldHRpbmdzLCBtZXRhZGF0YUV2ZW50cyk7XG5cdHByb2Nlc3NQcm9wZXJ0aWVzKG1TZXR0aW5ncywgbWV0YWRhdGFQcm9wZXJ0aWVzLCBuYW1lc3BhY2VBbGlhcywgcHJvcGVydGllc1N0cmluZywgYWdncmVnYXRpb25TdHJpbmcsIGlzQ29udHJvbCk7XG5cdHByb2Nlc3NBZ2dyZWdhdGlvbnMobVNldHRpbmdzLCBtZXRhZGF0YUFnZ3JlZ2F0aW9ucywgbmFtZXNwYWNlQWxpYXMsIGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUsIHByb3BlcnRpZXNTdHJpbmcsIGFnZ3JlZ2F0aW9uU3RyaW5nKTtcblx0aWYgKG92ZXJyaWRlTm9kZU5hbWUpIHtcblx0XHR0YWdOYW1lID0gb3ZlcnJpZGVOb2RlTmFtZTtcblx0fVxuXHRyZXR1cm4gYDwke3RhZ05hbWV9IHhtbG5zOiR7bmFtZXNwYWNlQWxpYXN9PVwiJHtuYW1lc3BhY2Uuam9pbihcIi5cIil9XCIgJHtwcm9wZXJ0aWVzU3RyaW5nLmpvaW4oXCIgXCIpfT4ke2FnZ3JlZ2F0aW9uU3RyaW5nLmpvaW4oXG5cdFx0XCJcIlxuXHQpfTwvJHt0YWdOYW1lfT5gO1xufTtcbmV4cG9ydCBkZWZhdWx0IGpzeFhtbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUFRQSxTQUFTQSwwQkFBMEJBLENBQ2xDQyxVQUF1RCxFQUNMO0lBQ2xELE9BQU8sQ0FBQ0EsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQXdDQyxLQUFLLE1BQUtDLFNBQVM7RUFDOUU7RUFFQSxNQUFNQyxhQUFhLEdBQUcsU0FBQUEsQ0FBVUMsR0FBc0IsRUFBVTtJQUMvRCxJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsR0FBRyxDQUFDLEVBQUU7TUFDdkIsT0FBT0EsR0FBRyxDQUFDRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3BCLENBQUMsTUFBTTtNQUNOLE9BQU9ILEdBQUc7SUFDWDtFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNJLHVCQUF1QkEsQ0FBQ0MsS0FBYyxFQUFzQjtJQUNwRSxPQUFPQSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQ0EsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQ0EsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQ0EsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7RUFDM0c7RUFFQSxNQUFNQyxtQkFBbUIsR0FBRyxTQUFBQSxDQUMzQkMsbUJBQXlELEVBQ3pEQyxlQUF1QixFQUN2QkMsS0FBc0MsRUFDL0I7SUFDUCxJQUFJQSxLQUFLLEtBQUtaLFNBQVMsRUFBRTtNQUN4QjtJQUNEO0lBQ0EsSUFBSSxDQUFDVSxtQkFBbUIsQ0FBQ0MsZUFBZSxDQUFDLEVBQUU7TUFDMUNELG1CQUFtQixDQUFDQyxlQUFlLENBQUMsR0FBRyxFQUFFO0lBQzFDO0lBQ0EsSUFBSSxPQUFP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
|
|
290
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJfdHlwZSIsInVuZGVmaW5lZCIsIndyaXRlQ2hpbGRyZW4iLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJ2YWx1ZSIsInJlcGxhY2UiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidHJpbSIsImxlbmd0aCIsInB1c2giLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJjaGlsZEtleSIsIk9iamVjdCIsImtleXMiLCJpc0FDb250cm9sIiwiY2hpbGRyZW4iLCJnZXRNZXRhZGF0YSIsIkZMX0RFTEVHQVRFIiwiRFRfREVTSUdOVElNRSIsIkNPUkVfUkVRVUlSRSIsIkxPR19TT1VSQ0VQQVRIIiwiQ1VTVE9NX0VOVElUWVRZUEUiLCJwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZSIsImNoaWxkcmVuT2JqZWN0IiwibmFtZXNwYWNlQWxpYXMiLCJwcm9wZXJ0eU5hbWUiLCJhZ2dyZWdhdGlvblByb3BlcnRpZXMiLCJzdWJQcm9wTmFtZSIsImNoaWxkVmFsdWUiLCJjaGlsZHJlbk9iamVjdEVsZW1lbnQiLCJ0b1N0cmluZyIsIm5hbWVzcGFjZWRQcm9wZXJ0eSIsInByb2Nlc3NQcm9wZXJ0aWVzIiwibVNldHRpbmdzIiwibWV0YWRhdGFQcm9wZXJ0aWVzIiwicHJvcGVydGllc1N0cmluZyIsImFnZ3JlZ2F0aW9uU3RyaW5nIiwiaXNDb250cm9sIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wZXJ0eVZhbHVlIiwidHlwZSIsImdldFBhdGgiLCJjb21waWxlRXhwcmVzc2lvbiIsIm91dFZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsInNlcGFyYXRvciIsImVuZHNXaXRoIiwiZXZlcnkiLCJwcm9wQXNVSTVPYmplY3QiLCJ1aTVvYmplY3QiLCJwcm9wIiwicHJvY2Vzc0NvbW1hbmQiLCJzZXR0aW5ncyIsIm1ldGFkYXRhRXZlbnRzIiwiY29tbWFuZFByb3BlcnR5IiwiY29tbWFuZCIsImV2ZW50TmFtZSIsInNwbGl0IiwiZXZlbnQiLCJzdGFydHNXaXRoIiwibmFtZSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YUFnZ3JlZ2F0aW9ucyIsImRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJhZ2dyZWdhdGlvbkNoaWxkS2V5cyIsIndyaXRlT25seURlZmF1bHRBZ2dyZWdhdGlvbiIsImpzeFhtbCIsImtleSIsInhtbE5hbWVzcGFjZU1hcCIsIm92ZXJyaWRlTm9kZU5hbWUiLCJtZXRhZGF0YSIsImNvbnRyb2xOYW1lIiwiZ2V0QWxsUHJvcGVydGllcyIsImdldEFsbEV2ZW50cyIsImdldEFsbEFzc29jaWF0aW9ucyIsImdldE5hbWUiLCJnZXRBbGxBZ2dyZWdhdGlvbnMiLCJnZXREZWZhdWx0QWdncmVnYXRpb25OYW1lIiwicHJvcGVydGllcyIsImRlcGVuZGVudHMiLCJjdXN0b21EYXRhIiwiYWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwibmFtZXNwYWNlIiwibmFtZXNTcGxpdCIsInNsaWNlIiwidGFnTmFtZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsianN4LXhtbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFByb3BlcnRpZXMsIE5vbkNvbnRyb2xQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuZnVuY3Rpb24gaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24oXG5cdGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVua25vd25cbik6IGV4cHJlc3Npb24gaXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik/Ll90eXBlICE9PSB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IHdyaXRlQ2hpbGRyZW4gPSBmdW5jdGlvbiAodmFsOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRyZXR1cm4gdmFsLmpvaW4oXCJcIik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufTtcblxuLyoqXG4gKiBTb21lIGNoYXJhY3RlcnMgbmVlZHMgdG8gYmUgZXNjYXBlZCB3aGVuIHVzZWQgYXMgWE1MIGF0dHJpYnV0ZSB2YWx1ZSwgb3RoZXJ3aXNlIHRoaXMgcmVzdWx0IGluIGluY29ycmVjdCBYTUwuXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHhtbCBhdHRyaWJ1dGVcbiAqL1xuZnVuY3Rpb24gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUodmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gdmFsdWU/LnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKS5yZXBsYWNlKC88L2csIFwiJmx0O1wiKS5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKS5yZXBsYWNlKC8nL2csIFwiJmFwb3M7XCIpO1xufVxuXG5jb25zdCBhZGRDaGlsZEFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCAoQ29udHJvbCB8IHN0cmluZylbXT4sXG5cdGFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLFxuXHRjaGlsZDogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKTogdm9pZCB7XG5cdGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID0gW107XG5cdH1cblx0aWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChjaGlsZC50cmltKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdLnB1c2goY2hpbGQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuXHRcdGNoaWxkLmZvckVhY2goKHN1YkNoaWxkKSA9PiB7XG5cdFx0XHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGFnZ3JlZ2F0aW9uTmFtZSwgc3ViQ2hpbGQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZvciAoY29uc3QgY2hpbGRLZXkgb2YgT2JqZWN0LmtleXMoY2hpbGQpKSB7XG5cdFx0XHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGNoaWxkS2V5LCBjaGlsZFtjaGlsZEtleV0pO1xuXHRcdH1cblx0fVxufTtcblxuY29uc3QgaXNBQ29udHJvbCA9IGZ1bmN0aW9uIChjaGlsZHJlbj86IHR5cGVvZiBDb250cm9sIHwgRnVuY3Rpb24pOiBjaGlsZHJlbiBpcyB0eXBlb2YgQ29udHJvbCB7XG5cdHJldHVybiAhIShjaGlsZHJlbiBhcyB0eXBlb2YgQ29udHJvbCk/LmdldE1ldGFkYXRhO1xufTtcblxuY29uc3QgRkxfREVMRUdBVEUgPSBcImZsOmRlbGVnYXRlXCI7XG5jb25zdCBEVF9ERVNJR05USU1FID0gXCJkdDpkZXNpZ250aW1lXCI7XG5jb25zdCBDT1JFX1JFUVVJUkUgPSBcImNvcmU6cmVxdWlyZVwiO1xuY29uc3QgTE9HX1NPVVJDRVBBVEggPSBcImxvZzpzb3VyY2VQYXRoXCI7XG5jb25zdCBDVVNUT01fRU5USVRZVFlQRSA9IFwiY3VzdG9tRGF0YTplbnRpdHlUeXBlXCI7XG5cbmZ1bmN0aW9uIHByb2Nlc3NPYmplY3RQcm9wZXJ0eVZhbHVlKFxuXHRjaGlsZHJlbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG5hbWVzcGFjZUFsaWFzOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHByb3BlcnR5TmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHQvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjaGlsZCBpc1xuXHRjb25zdCBhZ2dyZWdhdGlvblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uQ2hpbGRyZW46IHN0cmluZ1tdID0gW107XG5cdE9iamVjdC5rZXlzKGNoaWxkcmVuT2JqZWN0KS5mb3JFYWNoKChzdWJQcm9wTmFtZSkgPT4ge1xuXHRcdGNvbnN0IGNoaWxkVmFsdWUgPSBjaGlsZHJlbk9iamVjdFtzdWJQcm9wTmFtZV07XG5cdFx0aWYgKGNoaWxkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBjaGlsZFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNoaWxkVmFsdWUpKSB7XG5cdFx0XHRcdFx0YWdncmVnYXRpb25DaGlsZHJlbi5wdXNoKGA8JHtzdWJQcm9wTmFtZX0+YCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZHJlbk9iamVjdEVsZW1lbnQgb2YgY2hpbGRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25DaGlsZHJlbi5wdXNoKFxuXHRcdFx0XHRcdFx0XHRwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZShjaGlsZHJlbk9iamVjdEVsZW1lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG5hbWVzcGFjZUFsaWFzLCBzdWJQcm9wTmFtZSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW4ucHVzaChgPC8ke3N1YlByb3BOYW1lfT5gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgYSB2YWx1ZSBpdCBuZWVkcyB0byBiZSBzZXJpYWxpemVkIGFzIGEgY2hpbGRyZW5cblx0XHRcdFx0XHQvLyA8bXlPYmplY3RQcm9wIHByb3AxPSd4eHgnLCBwcm9wMj0neHh0Jy8+XG5cdFx0XHRcdFx0YWdncmVnYXRpb25DaGlsZHJlbi5wdXNoKFxuXHRcdFx0XHRcdFx0cHJvY2Vzc09iamVjdFByb3BlcnR5VmFsdWUoY2hpbGRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbmFtZXNwYWNlQWxpYXMsIHN1YlByb3BOYW1lKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIE90aGVyd2lzZSBpdCdzIHBhcnQgb2YgdGhlIG1haW4gb2JqZWN0IGp1c3QgYXMgYW5vdGhlciBwcm9wZXJ0eVxuXHRcdFx0XHRhZ2dyZWdhdGlvblByb3BlcnRpZXMucHVzaChgJHtzdWJQcm9wTmFtZX09JyR7ZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUoY2hpbGRWYWx1ZS50b1N0cmluZygpKX0nYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBuYW1lc3BhY2VkUHJvcGVydHkgPSBuYW1lc3BhY2VBbGlhcyA/IGAke25hbWVzcGFjZUFsaWFzfToke3Byb3BlcnR5TmFtZX1gIDogcHJvcGVydHlOYW1lO1xuXHRyZXR1cm4gYDwke25hbWVzcGFjZWRQcm9wZXJ0eX0gJHthZ2dyZWdhdGlvblByb3BlcnRpZXMuam9pbihcIiBcIil9PiR7YWdncmVnYXRpb25DaGlsZHJlbi5qb2luKFwiXFxuXCIpfTwvJHtuYW1lc3BhY2VkUHJvcGVydHl9PmA7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzPFQ+KFxuXHRtU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRtZXRhZGF0YVByb3BlcnRpZXM6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0bmFtZT86IHN0cmluZztcblx0XHRcdHR5cGU/OiBzdHJpbmc7XG5cdFx0fVxuXHQ+LFxuXHRuYW1lc3BhY2VBbGlhczogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzU3RyaW5nOiBzdHJpbmdbXSxcblx0YWdncmVnYXRpb25TdHJpbmc6IHN0cmluZ1tdLFxuXHRpc0NvbnRyb2w6IGJvb2xlYW5cbik6IHZvaWQge1xuXHRPYmplY3Qua2V5cyhtZXRhZGF0YVByb3BlcnRpZXMpLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdGlmIChtU2V0dGluZ3MuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSAmJiBtU2V0dGluZ3NbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlID0gbVNldHRpbmdzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lID09PSBDT1JFX1JFUVVJUkUpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcImApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gRkxfREVMRUdBVEUpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGB4bWxuczpmbD1cInNhcC51aS5mbFwiYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lID09PSBEVF9ERVNJR05USU1FKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgeG1sbnM6ZHQ9XCJzYXAudWkuZHRcImApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gTE9HX1NPVVJDRVBBVEgpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGB4bWxuczpsb2c9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCJgKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IENVU1RPTV9FTlRJVFlUWVBFKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgeG1sbnM6Y3VzdG9tRGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcImApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0aWYgKG1ldGFkYXRhUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIikge1xuXHRcdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PSckeyhwcm9wZXJ0eVZhbHVlIGFzIENvbnRleHQpLmdldFBhdGgoKX0nYCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShjb21waWxlRXhwcmVzc2lvbihwcm9wZXJ0eVZhbHVlKSl9J2ApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG91dFZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWVbMF0gPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlWzBdIDogSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZVswXSk7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtvdXRWYWx1ZX0nYCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNlcGFyYXRvciA9IG1ldGFkYXRhUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnR5cGU/LmVuZHNXaXRoKFwiW11cIikgPyBcIixcIiA6IFwiIFwiO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb3V0VmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmV2ZXJ5KCh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdFx0XHRcdD8gcHJvcGVydHlWYWx1ZS5qb2luKHNlcGFyYXRvcilcblx0XHRcdFx0XHRcdFx0OiBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKTtcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PScke291dFZhbHVlfSdgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNDb250cm9sKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcEFzVUk1T2JqZWN0ID0geyB1aTVvYmplY3Q6IHRydWUsIC4uLnByb3BlcnR5VmFsdWUgfTtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShKU09OLnN0cmluZ2lmeShwcm9wQXNVSTVPYmplY3QpKX0nYCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWdncmVnYXRpb25TdHJpbmcucHVzaChwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHVuZGVmaW5lZCwgcHJvcGVydHlOYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlWYWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBwcm9wID0gcHJvcGVydHlWYWx1ZSBhcyBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuXHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShwcm9wLnRvU3RyaW5nKCkpfSdgKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0bVNldHRpbmdzLmNoaWxkcmVuPy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpICYmXG5cdFx0XHRPYmplY3Qua2V5cygobVNldHRpbmdzLmNoaWxkcmVuIGFzIENvbnRyb2xQcm9wZXJ0aWVzPFQ+KT8uW3Byb3BlcnR5TmFtZV0gPz8ge30pLmxlbmd0aCA+IDBcblx0XHQpIHtcblx0XHRcdC8vIE9iamVjdCAvIEFycmF5IHByb3BlcnRpZXMgYXJlIHBhcnQgb2YgdGhlIGBjaGlsZHJlbmAgYWdncmVnYXRpb24gYW5kIGFzIHN1Y2ggc3RpbGwgbmVlZCB0byBiZSBwcm9jZXNzZWQgYXMgcHJvcGVydGllc1xuXHRcdFx0Y29uc3QgY2hpbGRyZW5PYmplY3QgPSAobVNldHRpbmdzLmNoaWxkcmVuIGFzIENvbnRyb2xQcm9wZXJ0aWVzPFQ+KT8uW3Byb3BlcnR5TmFtZV0gYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXHRcdFx0YWdncmVnYXRpb25TdHJpbmcucHVzaChwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZShjaGlsZHJlbk9iamVjdCwgbmFtZXNwYWNlQWxpYXMsIHByb3BlcnR5TmFtZSkpO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSBjb21tYW5kLlxuICpcbiAqIFJlc29sdmVzIHRoZSBjb21tYW5kIHNldCBvbiB0aGUgY29udHJvbCB2aWEgdGhlIGludHJpbnNpYyBjbGFzcyBhdHRyaWJ1dGUgXCJqc3g6Y29tbWFuZFwiLlxuICogSWYgbm8gY29tbWFuZCBoYXMgYmVlbiBzZXQgb3IgdGhlIHRhcmdldGVkIGV2ZW50IGRvZXNuJ3QgZXhpc3QsIG5vIGNvbmZpZ3VyYXRpb24gaXMgc2V0LlxuICogQHBhcmFtIHNldHRpbmdzIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gbWV0YWRhdGFFdmVudHMgU2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0NvbW1hbmQoXG5cdHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0bWV0YWRhdGFFdmVudHM6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdH1cblx0PlxuKTogdm9pZCB7XG5cdGNvbnN0IGNvbW1hbmRQcm9wZXJ0eSA9IHNldHRpbmdzW1wianN4OmNvbW1hbmRcIl07XG5cdGlmIChjb21tYW5kUHJvcGVydHkpIHtcblx0XHRjb25zdCBbY29tbWFuZCwgZXZlbnROYW1lXSA9IChjb21tYW5kUHJvcGVydHkgYXMgc3RyaW5nKS5zcGxpdChcInxcIik7XG5cdFx0Y29uc3QgZXZlbnQgPSBtZXRhZGF0YUV2ZW50c1tldmVudE5hbWVdO1xuXHRcdGlmIChldmVudCAmJiBjb21tYW5kLnN0YXJ0c1dpdGgoXCJjbWQ6XCIpKSB7XG5cdFx0XHRzZXR0aW5nc1tldmVudC5uYW1lXSA9IGNvbW1hbmQ7XG5cdFx0fVxuXHR9XG5cdGRlbGV0ZSBzZXR0aW5nc1tcImpzeDpjb21tYW5kXCJdO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzQWdncmVnYXRpb25zKFxuXHRtU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRtZXRhZGF0YUFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgb2JqZWN0Pixcblx0bmFtZXNwYWNlQWxpYXM6IHN0cmluZyxcblx0ZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRwcm9wZXJ0aWVzU3RyaW5nOiBzdHJpbmdbXSxcblx0YWdncmVnYXRpb25TdHJpbmc6IHN0cmluZ1tdXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRjb25zdCBhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBkZWZhdWx0QWdncmVnYXRpb25OYW1lID8/IFwiY3VzdG9tRGF0YVwiLCBtU2V0dGluZ3MuY2hpbGRyZW4gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uQ2hpbGRLZXlzID0gT2JqZWN0LmtleXMoYWdncmVnYXRpb25DaGlsZHJlbik7XG5cdGxldCB3cml0ZU9ubHlEZWZhdWx0QWdncmVnYXRpb24gPSBmYWxzZTtcblx0aWYgKGFnZ3JlZ2F0aW9uQ2hpbGRLZXlzLmxlbmd0aCA9PT0gMSAmJiBhZ2dyZWdhdGlvbkNoaWxkS2V5c1swXSA9PT0gZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdHdyaXRlT25seURlZmF1bHRBZ2dyZWdhdGlvbiA9IHRydWU7XG5cdH1cblx0T2JqZWN0LmtleXMobWV0YWRhdGFBZ2dyZWdhdGlvbnMpLmZvckVhY2goKGFnZ3JlZ2F0aW9uTmFtZSkgPT4ge1xuXHRcdGlmIChhZ2dyZWdhdGlvbkNoaWxkcmVuLmhhc093blByb3BlcnR5KGFnZ3JlZ2F0aW9uTmFtZSkgJiYgYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhZ2dyZWdhdGlvbk5hbWUgPT09IGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUgJiYgd3JpdGVPbmx5RGVmYXVsdEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGFnZ3JlZ2F0aW9uU3RyaW5nLnB1c2goYCR7d3JpdGVDaGlsZHJlbihhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0pfWApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWdncmVnYXRpb25TdHJpbmcucHVzaChcblx0XHRcdFx0XHRgPCR7bmFtZXNwYWNlQWxpYXN9OiR7YWdncmVnYXRpb25OYW1lfT5cblx0XHRcdFx0XHRcdCR7d3JpdGVDaGlsZHJlbihhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0pfVxuXHRcdFx0XHRcdDwvJHtuYW1lc3BhY2VBbGlhc306JHthZ2dyZWdhdGlvbk5hbWV9PmBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG1TZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShhZ2dyZWdhdGlvbk5hbWUpICYmIG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh0eXBlb2YgbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGAke2FnZ3JlZ2F0aW9uTmFtZX09JyR7SlNPTi5zdHJpbmdpZnkobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0pfSdgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEluIHNvbWUgY2FzZSB0aGUgYWdncmVnYXRpb24gZXhwZWN0IGEgc3RyaW5nIHZhbHVlIChsaWtlIGZvciB0aGUgdG9vbHRpcCksIGluIHRoaXMgY2FzZSB3ZSBzZXQgaXQgZGlyZWN0bHkgYXMgYSBwcm9wZXJ0eVxuXHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7YWdncmVnYXRpb25OYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSBhcyBzdHJpbmcpfSdgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYWdncmVnYXRpb25DaGlsZHJlbjtcbn1cblxuY29uc3QganN4WG1sID0gZnVuY3Rpb24gPFQ+KFxuXHR0eXBlOiB0eXBlb2YgQ29udHJvbCB8IHR5cGVvZiBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgfCBcInNsb3RcIixcblx0bVNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHsga2V5Pzogc3RyaW5nOyBjaGlsZHJlbj86IFVJNUVsZW1lbnQgfCBDb250cm9sUHJvcGVydGllczxUPjsgbmFtZT86IHN0cmluZyB9LFxuXHRrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0eG1sTmFtZXNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRvdmVycmlkZU5vZGVOYW1lPzogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHRsZXQgbWV0YWRhdGE7XG5cdGxldCBtZXRhZGF0YVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHsgbmFtZT86IHN0cmluZzsgdHlwZT86IHN0cmluZyB9Pjtcblx0bGV0IG1ldGFkYXRhRXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU6IHN0cmluZyB9Pjtcblx0bGV0IGNvbnRyb2xOYW1lO1xuXHRsZXQgbWV0YWRhdGFBZ2dyZWdhdGlvbnM7XG5cdGxldCBkZWZhdWx0QWdncmVnYXRpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGxldCBpc0NvbnRyb2wgPSBmYWxzZTtcblx0aWYgKHR5cGUgPT09IFwic2xvdFwiKSB7XG5cdFx0cmV0dXJuIGA8c2xvdCBuYW1lPVwiJHttU2V0dGluZ3MubmFtZX1cIi8+YDtcblx0fSBlbHNlIGlmIChpc0FDb250cm9sKHR5cGUpKSB7XG5cdFx0bWV0YWRhdGEgPSB0eXBlLmdldE1ldGFkYXRhKCk7XG5cdFx0bWV0YWRhdGFQcm9wZXJ0aWVzID0gbWV0YWRhdGEuZ2V0QWxsUHJvcGVydGllcygpO1xuXHRcdG1ldGFkYXRhUHJvcGVydGllcyA9IHsgLi4ubWV0YWRhdGFQcm9wZXJ0aWVzLCAuLi5tZXRhZGF0YS5nZXRBbGxFdmVudHMoKSwgLi4ubWV0YWRhdGEuZ2V0QWxsQXNzb2NpYXRpb25zKCkgfTtcblx0XHRtZXRhZGF0YUV2ZW50cyA9IG1ldGFkYXRhLmdldEFsbEV2ZW50cygpO1xuXHRcdGNvbnRyb2xOYW1lID0gbWV0YWRhdGEuZ2V0TmFtZSgpO1xuXHRcdG1ldGFkYXRhQWdncmVnYXRpb25zID0gbWV0YWRhdGEuZ2V0QWxsQWdncmVnYXRpb25zKCk7XG5cdFx0ZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSA9IG1ldGFkYXRhLmdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUoKTtcblx0XHRpc0NvbnRyb2wgPSB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdG1ldGFkYXRhID0gdHlwZS5tZXRhZGF0YTtcblx0XHRtZXRhZGF0YVByb3BlcnRpZXMgPSB7IC4uLm1ldGFkYXRhLnByb3BlcnRpZXMgfTtcblx0XHRtZXRhZGF0YUFnZ3JlZ2F0aW9ucyA9IHsgLi4ueyBkZXBlbmRlbnRzOiB7fSwgY3VzdG9tRGF0YToge30gfSwgLi4ubWV0YWRhdGEuYWdncmVnYXRpb25zIH07XG5cdFx0bWV0YWRhdGFFdmVudHMgPSB7fTtcblx0XHRkZWZhdWx0QWdncmVnYXRpb25OYW1lID0gbWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uO1xuXHRcdGNvbnRyb2xOYW1lID0gbWV0YWRhdGEubmFtZXNwYWNlICsgXCIuXCIgKyBtZXRhZGF0YS5uYW1lO1xuXHR9XG5cdGNvbnN0IG5hbWVzU3BsaXQgPSBjb250cm9sTmFtZS5zcGxpdChcIi5cIik7XG5cdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdG1TZXR0aW5nc1tcImtleVwiXSA9IGtleTtcblx0fVxuXG5cdG1ldGFkYXRhUHJvcGVydGllc1tcImNsYXNzXCJdID0geyBuYW1lOiBcImNsYXNzXCIgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wiaWRcIl0gPSB7IG5hbWU6IFwiaWRcIiB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbXCJiaW5kaW5nXCJdID0geyBuYW1lOiBcImJpbmRpbmdcIiB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbRkxfREVMRUdBVEVdID0geyBuYW1lOiBGTF9ERUxFR0FURSB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbRFRfREVTSUdOVElNRV0gPSB7IG5hbWU6IERUX0RFU0lHTlRJTUUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW0NPUkVfUkVRVUlSRV0gPSB7IG5hbWU6IENPUkVfUkVRVUlSRSB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbTE9HX1NPVVJDRVBBVEhdID0geyBuYW1lOiBMT0dfU09VUkNFUEFUSCB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbQ1VTVE9NX0VOVElUWVRZUEVdID0geyBuYW1lOiBDVVNUT01fRU5USVRZVFlQRSB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbXCJ4bWxuczpmbFwiXSA9IHsgbmFtZTogRkxfREVMRUdBVEUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wieG1sbnM6ZHRcIl0gPSB7IG5hbWU6IERUX0RFU0lHTlRJTUUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wieG1sbnM6Y29yZVwiXSA9IHsgbmFtZTogQ09SRV9SRVFVSVJFIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tcInhtbG5zOmxvZ1wiXSA9IHsgbmFtZTogTE9HX1NPVVJDRVBBVEggfTtcblx0aWYgKGNvbnRyb2xOYW1lID09PSBcInNhcC51aS5jb3JlLkZyYWdtZW50XCIpIHtcblx0XHRtZXRhZGF0YVByb3BlcnRpZXNbXCJmcmFnbWVudE5hbWVcIl0gPSB7IG5hbWU6IFwiZnJhZ21lbnROYW1lXCIgfTtcblx0fVxuXHRjb25zdCBuYW1lc3BhY2UgPSBuYW1lc1NwbGl0LnNsaWNlKDAsIC0xKTtcblx0Y29uc3QgbmFtZSA9IG5hbWVzU3BsaXRbbmFtZXNTcGxpdC5sZW5ndGggLSAxXTtcblx0bGV0IG5hbWVzcGFjZUFsaWFzID0gbmFtZXNwYWNlW25hbWVzcGFjZS5sZW5ndGggLSAxXTtcblx0aWYgKHhtbE5hbWVzcGFjZU1hcFtuYW1lc3BhY2Uuam9pbihcIi5cIildKSB7XG5cdFx0bmFtZXNwYWNlQWxpYXMgPSB4bWxOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXTtcblx0fVxuXHRsZXQgdGFnTmFtZSA9IGAke25hbWVzcGFjZUFsaWFzfToke25hbWV9YDtcblx0Y29uc3QgcHJvcGVydGllc1N0cmluZzogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgYWdncmVnYXRpb25TdHJpbmc6IHN0cmluZ1tdID0gW107XG5cdHByb2Nlc3NDb21tYW5kKG1TZXR0aW5ncywgbWV0YWRhdGFFdmVudHMpO1xuXHRwcm9jZXNzUHJvcGVydGllcyhtU2V0dGluZ3MsIG1ldGFkYXRhUHJvcGVydGllcywgbmFtZXNwYWNlQWxpYXMsIHByb3BlcnRpZXNTdHJpbmcsIGFnZ3JlZ2F0aW9uU3RyaW5nLCBpc0NvbnRyb2wpO1xuXHRwcm9jZXNzQWdncmVnYXRpb25zKG1TZXR0aW5ncywgbWV0YWRhdGFBZ2dyZWdhdGlvbnMsIG5hbWVzcGFjZUFsaWFzLCBkZWZhdWx0QWdncmVnYXRpb25OYW1lLCBwcm9wZXJ0aWVzU3RyaW5nLCBhZ2dyZWdhdGlvblN0cmluZyk7XG5cdGlmIChvdmVycmlkZU5vZGVOYW1lKSB7XG5cdFx0dGFnTmFtZSA9IG92ZXJyaWRlTm9kZU5hbWU7XG5cdH1cblx0cmV0dXJuIGA8JHt0YWdOYW1lfSB4bWxuczoke25hbWVzcGFjZUFsaWFzfT1cIiR7bmFtZXNwYWNlLmpvaW4oXCIuXCIpfVwiICR7cHJvcGVydGllc1N0cmluZy5qb2luKFwiIFwiKX0+JHthZ2dyZWdhdGlvblN0cmluZy5qb2luKFxuXHRcdFwiXCJcblx0KX08LyR7dGFnTmFtZX0+YDtcbn07XG5leHBvcnQg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
|
|
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib"], function (Library) {
|
|
|
22
22
|
controls: [],
|
|
23
23
|
elements: [],
|
|
24
24
|
// eslint-disable-next-line no-template-curly-in-string
|
|
25
|
-
version: "1.
|
|
25
|
+
version: "1.133.0",
|
|
26
26
|
noLibraryCSS: true
|
|
27
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
28
|
});
|