@sapui5/sap.fe.test 1.102.0 → 1.102.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/JestTemplatingHelper.js +34 -23
- package/src/sap/fe/test/JestTemplatingHelper.ts +33 -19
- package/src/sap/fe/test/TemplatePage.js +8 -0
- package/src/sap/fe/test/UI5MockHelper.js +3 -2
- package/src/sap/fe/test/UI5MockHelper.ts +3 -1
- package/src/sap/fe/test/api/DialogMassEditActions.js +115 -0
- package/src/sap/fe/test/api/DialogMassEditAssertions.js +174 -0
- package/src/sap/fe/test/api/DialogType.js +11 -2
- package/src/sap/fe/test/library.js +1 -1
- package/src/sap/fe/test/massEdit.js +0 -62
package/package.json
CHANGED
package/src/sap/fe/test/.library
CHANGED
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "sap/base/util/merge", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/converters/ConverterContext", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/core/TemplateModel", "sap/ui/base/BindingParser", "sap/ui/core/InvisibleText", "sap/ui/core/util/XMLPreprocessor", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "sap/ui/model/odata/v4/ODataMetaModel", "xpath"], function (
|
|
5
|
+
sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "sap/base/util/merge", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/converters/ConverterContext", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/core/TemplateModel", "sap/ui/base/BindingParser", "sap/ui/core/InvisibleText", "sap/ui/core/util/XMLPreprocessor", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "sap/ui/model/odata/v4/ODataMetaModel", "xpath"], function (compiler, fs, path, prettier, Log, merge, BuildingBlockRuntime, ConverterContext, SideEffectsFactory, TemplateModel, BindingParser, InvisibleText, XMLPreprocessor, JSONModel, _MetadataRequestor, ODataMetaModel, xpath) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var registerBuildingBlock = BuildingBlockRuntime.registerBuildingBlock;
|
|
10
10
|
var format = prettier.format;
|
|
11
|
-
var to = cds_compiler.to;
|
|
12
|
-
var compileSources = cds_compiler.compileSources;
|
|
13
11
|
|
|
14
12
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
15
13
|
|
|
@@ -25,6 +23,12 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
25
23
|
|
|
26
24
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
27
25
|
|
|
26
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
27
|
+
|
|
28
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
29
|
+
|
|
30
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
31
|
+
|
|
28
32
|
/**
|
|
29
33
|
* Process the requested XML fragment with the provided data.
|
|
30
34
|
*
|
|
@@ -195,32 +199,34 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
195
199
|
/**
|
|
196
200
|
* Compile a CDS file into an EDMX file.
|
|
197
201
|
*
|
|
198
|
-
* @param
|
|
199
|
-
*
|
|
200
|
-
* @
|
|
202
|
+
* @param cdsUrl The path to the file containing the CDS definition. This file must declare the namespace sap.fe.test and a service JestService
|
|
203
|
+
* @param options Options for creating the EDMX output
|
|
204
|
+
* @param edmxFileName Allows you to override the name of the compiled EDMX metadata file
|
|
205
|
+
* @returns The path of the generated EDMX
|
|
201
206
|
*/
|
|
202
207
|
|
|
203
208
|
|
|
204
209
|
_exports.formatXML = formatXML;
|
|
205
210
|
|
|
206
|
-
var compileCDS = function (
|
|
207
|
-
var
|
|
208
|
-
var
|
|
209
|
-
var
|
|
210
|
-
var
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
fs.writeFileSync(
|
|
217
|
-
return
|
|
211
|
+
var compileCDS = function (cdsUrl) {
|
|
212
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
213
|
+
var edmxFileName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : path.basename(cdsUrl).replace(".cds", ".xml");
|
|
214
|
+
var cdsString = fs.readFileSync(cdsUrl, "utf-8");
|
|
215
|
+
var edmxContent = cds2edmx(cdsString, "sap.fe.test.JestService", options);
|
|
216
|
+
var dir = path.resolve(cdsUrl, "..", "gen");
|
|
217
|
+
var edmxFilePath = path.resolve(dir, edmxFileName);
|
|
218
|
+
fs.mkdirSync(dir, {
|
|
219
|
+
recursive: true
|
|
220
|
+
});
|
|
221
|
+
fs.writeFileSync(edmxFilePath, edmxContent);
|
|
222
|
+
return edmxFilePath;
|
|
218
223
|
};
|
|
219
224
|
/**
|
|
220
225
|
* Compile CDS to EDMX.
|
|
221
226
|
*
|
|
222
227
|
* @param cds The CDS model. It must define at least one service.
|
|
223
|
-
* @param service The fully-qualified name of the service to
|
|
228
|
+
* @param service The fully-qualified name of the service to be compiled. Defaults to "sap.fe.test.JestService".
|
|
229
|
+
* @param options Options for creating the EDMX output
|
|
224
230
|
* @returns The compiled service model as EDMX.
|
|
225
231
|
*/
|
|
226
232
|
|
|
@@ -229,16 +235,21 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
229
235
|
|
|
230
236
|
function cds2edmx(cds) {
|
|
231
237
|
var service = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "sap.fe.test.JestService";
|
|
232
|
-
var
|
|
238
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
239
|
+
var csn = compiler.compileSources({
|
|
233
240
|
"string.cds": cds
|
|
234
241
|
}, {});
|
|
235
|
-
|
|
236
|
-
|
|
242
|
+
|
|
243
|
+
var edmxOptions = _objectSpread(_objectSpread({
|
|
237
244
|
odataForeignKeys: true,
|
|
238
245
|
odataFormat: "structured",
|
|
239
246
|
odataContainment: false
|
|
247
|
+
}, options), {}, {
|
|
248
|
+
service: service
|
|
240
249
|
});
|
|
241
250
|
|
|
251
|
+
var edmx = compiler.to.edmx(csn, edmxOptions);
|
|
252
|
+
|
|
242
253
|
if (!edmx) {
|
|
243
254
|
throw new Error("Compilation failed. Hint: Make sure that the CDS model defines service ".concat(service, "."));
|
|
244
255
|
}
|
|
@@ -462,4 +473,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
462
473
|
_exports.getTemplatedXML = getTemplatedXML;
|
|
463
474
|
return _exports;
|
|
464
475
|
}, false);
|
|
465
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sIm5hbWVzIjpbInByb2Nlc3NGcmFnbWVudCIsIm5hbWUiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwicGFyc2VyIiwid2luZG93IiwiRE9NUGFyc2VyIiwiaW5wdXREb2MiLCJwYXJzZUZyb21TdHJpbmciLCJzZXR0aW5ncyIsIm1vZGVscyIsImJpbmRpbmdDb250ZXh0cyIsIm1vZGVsIiwianNvbk1vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImZpcnN0RWxlbWVudENoaWxkIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwib3V0ZXJIVE1MIiwiZm9ybWF0WG1sIiwiZmlsdGVyIiwibm9kZSIsInR5cGUiLCJyZXF1aXJlIiwiTG9nIiwic2V0TGV2ZWwiLCJqZXN0Iiwic2V0VGltZW91dCIsIm5hbWVTcGFjZU1hcCIsInNlbGVjdCIsInhwYXRoIiwidXNlTmFtZXNwYWNlcyIsInJlZ2lzdGVyTWFjcm8iLCJtYWNyb01ldGFkYXRhIiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwidW5yZWdpc3Rlck1hY3JvIiwicGx1Z0luIiwibmFtZXNwYWNlIiwicHVibGljTmFtZXNwYWNlIiwicnVuWFBhdGhRdWVyeSIsInNlbGVjdG9yIiwieG1sZG9tIiwiZXhwZWN0IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJ0b05vdEhhdmVDb250cm9sIiwiZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCIsInhtbFN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJ4bWxGb3JtYXR0ZWQiLCJmb3JtYXRYTUwiLCJyZXBsYWNlIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwiWE1MU2VyaWFsaXplciIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiZm9ybWF0IiwieG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5IiwiY29tcGlsZUNEUyIsInNDRFNVcmwiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJwYXRoIiwicmVzb2x2ZSIsImVkbXhVcmwiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiY2RzIiwic2VydmljZSIsImNzbiIsImNvbXBpbGVTb3VyY2VzIiwiZWRteCIsInRvIiwib2RhdGFGb3JlaWduS2V5cyIsIm9kYXRhRm9ybWF0Iiwib2RhdGFDb250YWlubWVudCIsIkVycm9yIiwiZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwic01ldGFkYXRhVXJsIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwidW5kZWZpbmVkIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJwcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJldmFsdWF0ZUJpbmRpbmciLCJiaW5kaW5nU3RyaW5nIiwiYmluZGluZ0VsZW1lbnQiLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsImFyZ3MiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsIk9iamVjdCIsImVudHJpZXMiLCJjb250ZW50IiwiZ2V0VGV4dCIsImdldFRlbXBsYXRpbmdSZXN1bHQiLCJ4bWxJbnB1dCIsIm1CaW5kaW5nQ29udGV4dHMiLCJtTW9kZWxzIiwidGVtcGxhdGVkWG1sIiwieG1sRG9jIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJUZW1wbGF0ZU1vZGVsIiwia2V5cyIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm1ldGFNb2RlbCIsInNLZXkiLCJnZXRPYmplY3QiLCJ0b0JlRGVm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QTFELENBQWhEO0FBQ0E7O0FBRUQsZUFBT0MsZUFBZSxDQUFDQyxPQUFoQixDQUF3Qm1LLE1BQU0sQ0FBQ2xLLGlCQUEvQixFQUFtRDtBQUFFbEIsVUFBQUEsSUFBSSxFQUFFO0FBQVIsU0FBbkQsRUFBOEU2TCxxQkFBOUUsQ0FBUDtBQTFDQztBQTJDRCxLQWhEK0I7QUFBQTtBQUFBO0FBQUEsR0FBekI7Ozs7QUFrREEsTUFBTU0sZUFBZSxhQUMzQm5CLFFBRDJCLEVBRTNCdEMsWUFGMkIsRUFHM0J1QyxnQkFIMkIsRUFJM0JDLE9BSjJCO0FBQUEsUUFLMUI7QUFBQSw2QkFDMEJILG1CQUFtQixDQUFDQyxRQUFELEVBQVd0QyxZQUFYLEVBQXlCdUMsZ0JBQXpCLEVBQTJDQyxPQUEzQyxDQUQ3QyxPQUVNekgsWUFGTjtBQUdELEtBUjJCO0FBQUE7QUFBQTtBQUFBLEdBQXJCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbnlBbm5vdGF0aW9uLCBDb252ZXJ0ZXJPdXRwdXQsIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29tcGlsZVNvdXJjZXMsIHRvIH0gZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCwgUmVxdWlyZWRPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBmb3JtYXRYbWwgPSByZXF1aXJlKFwieG1sLWZvcm1hdHRlclwiKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRcIm1hY3Jvc1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcImludGVybmFsTWFjcm9cIjogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY2F0XCI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdFwibWRjRmllbGRcIjogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFwibWRjVGFibGVcIjogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdFwidVwiOiBcInNhcC51aS51bmlmaWVkXCIsXG5cdFwibWFjcm9NaWNyb0NoYXJ0XCI6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdFwibWljcm9DaGFydFwiOiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdFwibWFjcm9UYWJsZVwiOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbiAobWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEubmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHRpZiAobWFjcm9NZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdGxldCB4bWxGb3JtYXR0ZWQgPSBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcblx0eG1sRm9ybWF0dGVkID0geG1sRm9ybWF0dGVkLnJlcGxhY2UoL3VpZC0taWQtWzAtOV17MTN9LVswLTldL2csIFwidWlkLS1pZFwiKTtcblx0cmV0dXJuIHhtbEZvcm1hdHRlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoL3Jvb3Qke2NvbnRyb2xTZWxlY3Rvcn0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG5jb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0Y29uc3QgeG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKSB7XG5cdHJldHVybiBmb3JtYXQoXG5cdFx0eG1sU3RyaW5nLFxuXHRcdHsgcGFyc2VyOiBcInhtbFwiLCB4bWxXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk6IFwiaWdub3JlXCIgfSBhcyBQYXJ0aWFsPFJlcXVpcmVkT3B0aW9ucz4gLyogb3B0aW9ucyBieSB0aGUgUHJldHRpZXIgWE1MIHBsdWdpbiAqL1xuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNDRFNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBNVVNUIGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKHNDRFNVcmw6IHN0cmluZykge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc0NEU1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIik7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShzQ0RTVXJsLCBcIi4uXCIsIFwiZ2VuXCIpO1xuXHRjb25zdCBlZG14VXJsID0gcGF0aC5yZXNvbHZlKGRpciwgcGF0aC5iYXNlbmFtZShzQ0RTVXJsKS5yZXBsYWNlKFwiLmNkc1wiLCBcIi54bWxcIikpO1xuXG5cdGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG5cdFx0ZnMubWtkaXJTeW5jKGRpcik7XG5cdH1cblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhVcmwsIGVkbXhDb250ZW50KTtcblx0cmV0dXJuIGVkbXhVcmw7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgQ0RTIHRvIEVETVguXG4gKlxuICogQHBhcmFtIGNkcyBUaGUgQ0RTIG1vZGVsLiBJdCBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VydmljZS5cbiAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2VydmljZSB0byBjb21waWxlLiBEZWZhdWx0cyB0byBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIuXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc2VydmljZSBtb2RlbCBhcyBFRE1YLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2RzMmVkbXgoY2RzOiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZyA9IFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIikge1xuXHRjb25zdCBjc24gPSBjb21waWxlU291cmNlcyh7IFwic3RyaW5nLmNkc1wiOiBjZHMgfSwge30pO1xuXHRjb25zdCBlZG14ID0gdG8uZWRteChjc24sIHsgc2VydmljZTogc2VydmljZSwgb2RhdGFGb3JlaWduS2V5czogdHJ1ZSwgb2RhdGFGb3JtYXQ6IFwic3RydWN0dXJlZFwiLCBvZGF0YUNvbnRhaW5tZW50OiBmYWxzZSB9KTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogUHJvbWlzZTxhbnk+IHtcblx0Y29uc3Qgb1NlcnZpY2VDb250ZXh0ID0geyBzY29wZU9iamVjdDoge30sIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH07XG5cdHJldHVybiBuZXcgU2lkZUVmZmVjdHNGYWN0b3J5KCkuY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0KS50aGVuKGZ1bmN0aW9uIChvU2VydmljZUluc3RhbmNlOiBhbnkpIHtcblx0XHRjb25zdCBvSmVzdFNpZGVFZmZlY3RzU2VydmljZSA9IG9TZXJ2aWNlSW5zdGFuY2UuZ2V0SW50ZXJmYWNlKCk7XG5cdFx0b0plc3RTaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNjb3BlT2JqZWN0OiB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHJldHVybiBvSmVzdFNpZGVFZmZlY3RzU2VydmljZTtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmFrZURpYWdub3N0aWNzID0gZnVuY3Rpb24gKCk6IElEaWFnbm9zdGljcyB7XG5cdGNvbnN0IGlzc3VlczogYW55W10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlzc3Vlcy5wdXNoKHtcblx0XHRcdFx0aXNzdWVDYXRlZ29yeSxcblx0XHRcdFx0aXNzdWVTZXZlcml0eSxcblx0XHRcdFx0ZGV0YWlsc1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRnZXRJc3N1ZXMoKTogYW55W10ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcztcblx0XHR9LFxuXHRcdGNoZWNrSWZJc3N1ZUV4aXN0cyhpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpc3N1ZXMuZmluZCgoaXNzdWUpID0+IHtcblx0XHRcdFx0aXNzdWUuaXNzdWVDYXRlZ29yeSA9PT0gaXNzdWVDYXRlZ29yeSAmJiBpc3N1ZS5pc3N1ZVNldmVyaXR5ID09PSBpc3N1ZVNldmVyaXR5ICYmIGlzc3VlLmRldGFpbHMgPT09IGRldGFpbHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZXJPdXRwdXQsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZWRUeXBlcy5lbnRpdHlTZXRzLmZpbmQoKGVzKSA9PiBlcy5uYW1lID09PSBtYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkoZW50aXR5U2V0IGFzIEVudGl0eVNldCwgY29udmVydGVkVHlwZXMsIGVudGl0eVNldCk7XG5cdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZWRUeXBlcywgbWFuaWZlc3RTZXR0aW5ncywgZ2V0RmFrZURpYWdub3N0aWNzKCksIG1lcmdlLCBkYXRhTW9kZWxQYXRoKTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB7fSk7XG5cdGlmICghbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBuZXcgKE9EYXRhTWV0YU1vZGVsIGFzIGFueSkob1JlcXVlc3Rvciwgc01ldGFkYXRhVXJsLCB1bmRlZmluZWQsIG51bGwpO1xuXHRcdGF3YWl0IG9NZXRhTW9kZWwuZmV0Y2hFbnRpdHlDb250YWluZXIoKTtcblx0XHRtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdHJldHVybiBtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50aXR5U2V0OiBFbnRpdHlTZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZXJPdXRwdXQsXG5cdHByb3BlcnR5PzogUHJvcGVydHkgfCBFbnRpdHlTZXQgfCBBbnlBbm5vdGF0aW9uXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3QgdGFyZ2V0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHR0YXJnZXRPYmplY3Q6IHByb3BlcnR5LFxuXHRcdHRhcmdldEVudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHR0YXJnZXRQYXRoLmNvbnRleHRMb2NhdGlvbiA9IHRhcmdldFBhdGg7XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRyZXR1cm4gYmluZGluZ0VsZW1lbnQuZm9ybWF0dGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG59O1xuXG50eXBlIE1vZGVsQ29udGVudCA9IHtcblx0W25hbWU6IHN0cmluZ106IGFueTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgYSBiaW5kaW5nIGFnYWluc3QgYSBtb2RlbC5cbiAqXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cblx0Y29uc3QgZGVmYXVsdE1vZGVsID0gbmV3IEpTT05Nb2RlbChtb2RlbENvbnRlbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGRlZmF1bHRNb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoZGVmYXVsdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0KTtcblxuXHRpZiAobmFtZWRNb2RlbHNDb250ZW50KSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMobmFtZWRNb2RlbHNDb250ZW50KSkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBuZXcgSlNPTk1vZGVsKGNvbnRlbnQpO1xuXHRcdFx0dGV4dC5zZXRNb2RlbChtb2RlbCwgbmFtZSk7XG5cdFx0XHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0LCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH1cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYbWwgPSBgPHJvb3Q+JHt4bWxJbnB1dH08L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZW1wbGF0ZWRYbWwsIFwidGV4dC94bWxcIik7XG5cdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblxuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdGlmICghbU1vZGVscy5oYXNPd25Qcm9wZXJ0eShcImNvbnZlcnRlckNvbnRleHRcIikpIHtcblx0XHRtTW9kZWxzID0gT2JqZWN0LmFzc2lnbihtTW9kZWxzLCB7IFwiY29udmVydGVyQ29udGV4dFwiOiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCkgfSk7XG5cdH1cblxuXHRPYmplY3Qua2V5cyhtTW9kZWxzKS5mb3JFYWNoKGZ1bmN0aW9uIChzTW9kZWxOYW1lKSB7XG5cdFx0aWYgKG1Nb2RlbHNbc01vZGVsTmFtZV0gJiYgbU1vZGVsc1tzTW9kZWxOYW1lXS5pc1RlbXBsYXRlTW9kZWwpIHtcblx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwpO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9XG5cdH07XG5cblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsLmdldE9iamVjdChtQmluZGluZ0NvbnRleHRzW3NLZXldKSkudG9CZURlZmluZWQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSBtTW9kZWxzW3NLZXldIHx8IG9NZXRhTW9kZWw7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXG5cdC8vVGhpcyBjb250ZXh0IGZvciBtYWNybyB0ZXN0aW5nXG5cdGlmIChvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXSkge1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbXCJ0aGlzXCJdID0gb1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0cmV0dXJuIFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKHhtbERvYy5maXJzdEVsZW1lbnRDaGlsZCEsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0ZWRYTUwgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBhbnk7IGVudGl0eVNldD86IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfVxuKSB7XG5cdGNvbnN0IHRlbXBsYXRlZFhNTCA9IGF3YWl0IGdldFRlbXBsYXRpbmdSZXN1bHQoeG1sSW5wdXQsIHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscyk7XG5cdHJldHVybiBzZXJpYWxpemVYTUwodGVtcGxhdGVkWE1MKTtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gdGVzdERhdGEgVGVzdCBkYXRhIGNvbnNpc3RpbmdcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCBmcmFnbWVudCBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGcmFnbWVudChuYW1lOiBzdHJpbmcsIHRlc3REYXRhOiB7IFttb2RlbDogc3RyaW5nXTogb2JqZWN0IH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBpbnB1dFhtbCA9IGA8cm9vdD48Y29yZTpGcmFnbWVudCBmcmFnbWVudE5hbWU9XCIke25hbWV9XCIgdHlwZT1cIlhNTFwiIHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiIC8+PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IGlucHV0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhpbnB1dFhtbCwgXCJ0ZXh0L3htbFwiKTtcblxuXHQvLyBidWlsZCBtb2RlbCBhbmQgYmluZGluZ3MgZm9yIGdpdmVuIHRlc3QgZGF0YVxuXHRjb25zdCBzZXR0aW5ncyA9IHtcblx0XHRtb2RlbHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB9LFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogb2JqZWN0IH1cblx0fTtcblx0Zm9yIChjb25zdCBtb2RlbCBpbiB0ZXN0RGF0YSkge1xuXHRcdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRqc29uTW9kZWwuc2V0RGF0YSh0ZXN0RGF0YVttb2RlbF0pO1xuXHRcdHNldHRpbmdzLm1vZGVsc1ttb2RlbF0gPSBqc29uTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW21vZGVsXSA9IHNldHRpbmdzLm1vZGVsc1ttb2RlbF0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQ7XG5cdH1cblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIik7XG5cdGlmIChmcmFnbWVudHM/Lmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0ZnJhZ21lbnQuaW5uZXJIVE1MID0gXCJcIjtcblx0XHR9XG5cdH1cblxuXHQvLyBLZWVwIHRoZSBmcmFnbWVudCByZXN1bHQgYXMgY2hpbGQgb2Ygcm9vdCBub2RlIHdoZW4gZnJhZ21lbnQgZ2VuZXJhdGVzIG11bHRpcGxlIHJvb3QgY29udHJvbHNcblx0Y29uc3QgeG1sUmVzdWx0ID0gcmVzdWx0RG9jLmNoaWxkcmVuLmxlbmd0aCA+IDEgPyByZXN1bHREb2Mub3V0ZXJIVE1MIDogcmVzdWx0RG9jLmlubmVySFRNTDtcblxuXHRyZXR1cm4gZm9ybWF0WG1sKHhtbFJlc3VsdCwge1xuXHRcdGZpbHRlcjogKG5vZGU6IGFueSkgPT4gbm9kZS50eXBlICE9PSBcIkNvbW1lbnRcIlxuXHR9KTtcbn1cbiJdfQ==
|
|
476
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sIm5hbWVzIjpbInByb2Nlc3NGcmFnbWVudCIsIm5hbWUiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwicGFyc2VyIiwid2luZG93IiwiRE9NUGFyc2VyIiwiaW5wdXREb2MiLCJwYXJzZUZyb21TdHJpbmciLCJzZXR0aW5ncyIsIm1vZGVscyIsImJpbmRpbmdDb250ZXh0cyIsIm1vZGVsIiwianNvbk1vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImZpcnN0RWxlbWVudENoaWxkIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwib3V0ZXJIVE1MIiwiZm9ybWF0WG1sIiwiZmlsdGVyIiwibm9kZSIsInR5cGUiLCJyZXF1aXJlIiwiTG9nIiwic2V0TGV2ZWwiLCJqZXN0Iiwic2V0VGltZW91dCIsIm5hbWVTcGFjZU1hcCIsInNlbGVjdCIsInhwYXRoIiwidXNlTmFtZXNwYWNlcyIsInJlZ2lzdGVyTWFjcm8iLCJtYWNyb01ldGFkYXRhIiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwidW5yZWdpc3Rlck1hY3JvIiwicGx1Z0luIiwibmFtZXNwYWNlIiwicHVibGljTmFtZXNwYWNlIiwicnVuWFBhdGhRdWVyeSIsInNlbGVjdG9yIiwieG1sZG9tIiwiZXhwZWN0IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJ0b05vdEhhdmVDb250cm9sIiwiZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCIsInhtbFN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJ4bWxGb3JtYXR0ZWQiLCJmb3JtYXRYTUwiLCJyZXBsYWNlIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwiWE1MU2VyaWFsaXplciIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiZm9ybWF0IiwieG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5IiwiY29tcGlsZUNEUyIsImNkc1VybCIsIm9wdGlvbnMiLCJlZG14RmlsZU5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJyZXNvbHZlIiwiZWRteEZpbGVQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwid3JpdGVGaWxlU3luYyIsImNkcyIsInNlcnZpY2UiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwib01ldGFNb2RlbCIsIm9TZXJ2aWNlQ29udGV4dCIsInNjb3BlT2JqZWN0Iiwic2NvcGVUeXBlIiwiU2lkZUVmZmVjdHNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJ0aGVuIiwib1NlcnZpY2VJbnN0YW5jZSIsIm9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0Q29udGV4dCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJwdXNoIiwiZ2V0SXNzdWVzIiwiY2hlY2tJZklzc3VlRXhpc3RzIiwiZmluZCIsImlzc3VlIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QiLCJjb252ZXJ0ZWRUeXBlcyIsIm1hbmlmZXN0U2V0dGluZ3MiLCJlbnRpdHlTZXQiLCJlbnRpdHlTZXRzIiwiZXMiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwiQ29udmVydGVyQ29udGV4dCIsIm1lcmdlIiwibWV0YU1vZGVsQ2FjaGUiLCJzTWV0YWRhdGFVcmwiLCJvUmVxdWVzdG9yIiwiX01ldGFkYXRhUmVxdWVzdG9yIiwiY3JlYXRlIiwiT0RhdGFNZXRhTW9kZWwiLCJ1bmRlZmluZWQiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsInByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImNvbnRleHRMb2NhdGlvbiIsImV2YWx1YXRlQmluZGluZyIsImJpbmRpbmdTdHJpbmciLCJiaW5kaW5nRWxlbWVudCIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiYXJncyIsImZvcm1hdHRlciIsImFwcGx5IiwiZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsIiwibW9kZWxDb250ZW50IiwibmFtZWRNb2RlbHNDb250ZW50IiwidGV4dCIsIkludmlzaWJsZVRleHQiLCJiaW5kUHJvcGVydHkiLCJkZWZhdWx0TW9kZWwiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwiT2JqZWN0IiwiZW50cmllcyIsImNvbnRlbnQiLCJnZXRUZXh0IiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJ0ZW1wbGF0ZWRYbWwiLCJ4bWxEb2MiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsIlRlbXBsYXRlTW9kZWwiLCJrZXlzIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwibWV0YU1vZGVsIiwic0tleSIsImdldE9iamVjdCIsInRvQmVEZWZpbmVkIiwib01vZGVsIiwiZ2V0VGVtcGxhdGVkWE1MIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ3NCQSxlLGFBQWdCQyxJLEVBQWNDLFE7UUFBd0Q7QUFDM0csVUFBTUMsUUFBUSxpREFBeUNGLElBQXpDLHlEQUFkO0FBQ0EsVUFBTUcsTUFBTSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0MsU0FBWCxFQUFmO0FBQ0EsVUFBTUMsUUFBUSxHQUFHSCxNQUFNLENBQUNJLGVBQVAsQ0FBdUJMLFFBQXZCLEVBQWlDLFVBQWpDLENBQWpCLENBSDJHLENBSzNHOztBQUNBLFVBQU1NLFFBQVEsR0FBRztBQUNoQkMsUUFBQUEsTUFBTSxFQUFFLEVBRFE7QUFFaEJDLFFBQUFBLGVBQWUsRUFBRTtBQUZELE9BQWpCOztBQUlBLFdBQUssSUFBTUMsT0FBWCxJQUFvQlYsUUFBcEIsRUFBOEI7QUFDN0IsWUFBTVcsU0FBUyxHQUFHLElBQUlDLFNBQUosRUFBbEI7QUFDQUQsUUFBQUEsU0FBUyxDQUFDRSxPQUFWLENBQWtCYixRQUFRLENBQUNVLE9BQUQsQ0FBMUI7QUFDQUgsUUFBQUEsUUFBUSxDQUFDQyxNQUFULENBQWdCRSxPQUFoQixJQUF5QkMsU0FBekI7QUFDQUosUUFBQUEsUUFBUSxDQUFDRSxlQUFULENBQXlCQyxPQUF6QixJQUFrQ0gsUUFBUSxDQUFDQyxNQUFULENBQWdCRSxPQUFoQixFQUF1Qkksb0JBQXZCLENBQTRDLEdBQTVDLENBQWxDO0FBQ0EsT0FmMEcsQ0FpQjNHOzs7QUFqQjJHLDZCQWtCbkZDLGVBQWUsQ0FBQ0MsT0FBaEIsQ0FBd0JYLFFBQVEsQ0FBQ1ksaUJBQWpDLEVBQW9EO0FBQUVsQixRQUFBQSxJQUFJLEVBQUpBO0FBQUYsT0FBcEQsRUFBOERRLFFBQTlELENBbEJtRixp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TUFBdEIsQ0FBNkIwTCxJQUE3QixJQUFxQ0csTUFBckM7QUFDQSxTQU5ELEVBN0JDLENBcUNEOztBQUNBLFlBQUlMLHFCQUFxQixDQUFDeEwsTUFBdEIsQ0FBNkIsTUFBN0IsQ0FBSixFQUEwQztBQUN6Q3dMLFVBQUFBLHFCQUFxQixDQUFDdkwsZUFBdEIsQ0FBc0MsTUFBdEMsSUFBZ0R1TCxxQkFBcUIsQ0FBQ3hMLE1BQXRCLENBQTZCLE1BQTdCLEVBQXFDTSxvQkFBckMsQ0FBMEQsR0FBMUQsQ0FBaEQ7QUFDQTs7QUFFRCxlQUFPQyxlQUFlLENBQUNDLE9BQWhCLENBQXdCdUssTUFBTSxDQUFDdEssaUJBQS9CLEVBQW1EO0FBQUVsQixVQUFBQSxJQUFJLEVBQUU7QUFBUixTQUFuRCxFQUE4RWlNLHFCQUE5RSxDQUFQO0FBMUNDO0FBMkNELEtBaEQrQjtBQUFBO0FBQUE7QUFBQSxHQUF6Qjs7OztBQWtEQSxNQUFNTSxlQUFlLGFBQzNCbkIsUUFEMkIsRUFFM0J0QyxZQUYyQixFQUczQnVDLGdCQUgyQixFQUkzQkMsT0FKMkI7QUFBQSxRQUsxQjtBQUFBLDZCQUMwQkgsbUJBQW1CLENBQUNDLFFBQUQsRUFBV3RDLFlBQVgsRUFBeUJ1QyxnQkFBekIsRUFBMkNDLE9BQTNDLENBRDdDLE9BRU03SCxZQUZOO0FBR0QsS0FSMkI7QUFBQTtBQUFBO0FBQUEsR0FBckIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFueUFubm90YXRpb24sIENvbnZlcnRlck91dHB1dCwgRW50aXR5U2V0LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCwgUmVxdWlyZWRPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBmb3JtYXRYbWwgPSByZXF1aXJlKFwieG1sLWZvcm1hdHRlclwiKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRcIm1hY3Jvc1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcImludGVybmFsTWFjcm9cIjogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY2F0XCI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdFwibWRjRmllbGRcIjogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFwibWRjVGFibGVcIjogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdFwidVwiOiBcInNhcC51aS51bmlmaWVkXCIsXG5cdFwibWFjcm9NaWNyb0NoYXJ0XCI6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdFwibWljcm9DaGFydFwiOiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdFwibWFjcm9UYWJsZVwiOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbiAobWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEubmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHRpZiAobWFjcm9NZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdGxldCB4bWxGb3JtYXR0ZWQgPSBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcblx0eG1sRm9ybWF0dGVkID0geG1sRm9ybWF0dGVkLnJlcGxhY2UoL3VpZC0taWQtWzAtOV17MTN9LVswLTldL2csIFwidWlkLS1pZFwiKTtcblx0cmV0dXJuIHhtbEZvcm1hdHRlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoL3Jvb3Qke2NvbnRyb2xTZWxlY3Rvcn0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG5jb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0Y29uc3QgeG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKSB7XG5cdHJldHVybiBmb3JtYXQoXG5cdFx0eG1sU3RyaW5nLFxuXHRcdHsgcGFyc2VyOiBcInhtbFwiLCB4bWxXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk6IFwiaWdub3JlXCIgfSBhcyBQYXJ0aWFsPFJlcXVpcmVkT3B0aW9ucz4gLyogb3B0aW9ucyBieSB0aGUgUHJldHRpZXIgWE1MIHBsdWdpbiAqL1xuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKlxuICogQHBhcmFtIGNkc1VybCBUaGUgcGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDRFMgZGVmaW5pdGlvbi4gVGhpcyBmaWxlIG11c3QgZGVjbGFyZSB0aGUgbmFtZXNwYWNlIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHBhcmFtIGVkbXhGaWxlTmFtZSBBbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZSBuYW1lIG9mIHRoZSBjb21waWxlZCBFRE1YIG1ldGFkYXRhIGZpbGVcbiAqIEByZXR1cm5zIFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChcblx0Y2RzVXJsOiBzdHJpbmcsXG5cdG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9LFxuXHRlZG14RmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNkc1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCIueG1sXCIpXG4pIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNkc1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9ucyk7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShjZHNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cblx0Y29uc3QgZWRteEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGRpciwgZWRteEZpbGVOYW1lKTtcblxuXHRmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhGaWxlUGF0aCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteEZpbGVQYXRoO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICpcbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyh7IFwic3RyaW5nLmNkc1wiOiBjZHMgfSwge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogZmFsc2UsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IG9TZXJ2aWNlQ29udGV4dCA9IHsgc2NvcGVPYmplY3Q6IHt9LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9O1xuXHRyZXR1cm4gbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dCkudGhlbihmdW5jdGlvbiAob1NlcnZpY2VJbnN0YW5jZTogYW55KSB7XG5cdFx0Y29uc3Qgb0plc3RTaWRlRWZmZWN0c1NlcnZpY2UgPSBvU2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xuXHRcdG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzY29wZU9iamVjdDoge1xuXHRcdFx0XHRcdGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb01ldGFNb2RlbDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblx0XHRyZXR1cm4gb0plc3RTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVyT3V0cHV0LFxuXHRtYW5pZmVzdFNldHRpbmdzOiBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzXG4pIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVkVHlwZXMuZW50aXR5U2V0cy5maW5kKChlcykgPT4gZXMubmFtZSA9PT0gbWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KGVudGl0eVNldCBhcyBFbnRpdHlTZXQsIGNvbnZlcnRlZFR5cGVzLCBlbnRpdHlTZXQpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQoY29udmVydGVkVHlwZXMsIG1hbmlmZXN0U2V0dGluZ3MsIGdldEZha2VEaWFnbm9zdGljcygpLCBtZXJnZSwgZGF0YU1vZGVsUGF0aCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwge30pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCBudWxsKTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVyT3V0cHV0LFxuXHRwcm9wZXJ0eT86IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvblxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoO1xuXHRyZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCwgbmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRleHQuZ2V0VGV4dCgpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGluZ1Jlc3VsdCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9XG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWG1sID0gYDxyb290PiR7eG1sSW5wdXR9PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGVtcGxhdGVkWG1sLCBcInRleHQveG1sXCIpO1xuXHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBcImNvbnZlcnRlckNvbnRleHRcIjogbmV3IFRlbXBsYXRlTW9kZWwoe30sIG9NZXRhTW9kZWwpIH0pO1xuXHR9XG5cblx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRtTW9kZWxzW3NNb2RlbE5hbWVdID0gbmV3IFRlbXBsYXRlTW9kZWwobU1vZGVsc1tzTW9kZWxOYW1lXS5kYXRhLCBvTWV0YU1vZGVsKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fVxuXHR9O1xuXG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbC5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW3NLZXldID0gb01vZGVsO1xuXHR9KTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyh4bWxEb2MuZmlyc3RFbGVtZW50Q2hpbGQhLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH1cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KHhtbElucHV0LCBzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMpO1xuXHRyZXR1cm4gc2VyaWFsaXplWE1MKHRlbXBsYXRlZFhNTCk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0O1xuXHR9XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpO1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhtbCh4bWxSZXN1bHQsIHtcblx0XHRmaWx0ZXI6IChub2RlOiBhbnkpID0+IG5vZGUudHlwZSAhPT0gXCJDb21tZW50XCJcblx0fSk7XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AnyAnnotation, ConverterOutput, EntitySet, Property } from "@sap-ux/annotation-converter";
|
|
2
|
-
import
|
|
2
|
+
import compiler from "@sap/cds-compiler";
|
|
3
3
|
import * as fs from "fs";
|
|
4
4
|
import * as path from "path";
|
|
5
5
|
import { format, RequiredOptions } from "prettier";
|
|
@@ -115,34 +115,48 @@ export const formatXML = function (xmlString: string) {
|
|
|
115
115
|
/**
|
|
116
116
|
* Compile a CDS file into an EDMX file.
|
|
117
117
|
*
|
|
118
|
-
* @param
|
|
119
|
-
*
|
|
120
|
-
* @
|
|
118
|
+
* @param cdsUrl The path to the file containing the CDS definition. This file must declare the namespace sap.fe.test and a service JestService
|
|
119
|
+
* @param options Options for creating the EDMX output
|
|
120
|
+
* @param edmxFileName Allows you to override the name of the compiled EDMX metadata file
|
|
121
|
+
* @returns The path of the generated EDMX
|
|
121
122
|
*/
|
|
122
|
-
export const compileCDS = function (
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
123
|
+
export const compileCDS = function (
|
|
124
|
+
cdsUrl: string,
|
|
125
|
+
options: compiler.ODataOptions = {},
|
|
126
|
+
edmxFileName = path.basename(cdsUrl).replace(".cds", ".xml")
|
|
127
|
+
) {
|
|
128
|
+
const cdsString = fs.readFileSync(cdsUrl, "utf-8");
|
|
129
|
+
const edmxContent = cds2edmx(cdsString, "sap.fe.test.JestService", options);
|
|
130
|
+
const dir = path.resolve(cdsUrl, "..", "gen");
|
|
131
|
+
|
|
132
|
+
const edmxFilePath = path.resolve(dir, edmxFileName);
|
|
131
133
|
|
|
132
|
-
fs.
|
|
133
|
-
|
|
134
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
135
|
+
|
|
136
|
+
fs.writeFileSync(edmxFilePath, edmxContent);
|
|
137
|
+
return edmxFilePath;
|
|
134
138
|
};
|
|
135
139
|
|
|
136
140
|
/**
|
|
137
141
|
* Compile CDS to EDMX.
|
|
138
142
|
*
|
|
139
143
|
* @param cds The CDS model. It must define at least one service.
|
|
140
|
-
* @param service The fully-qualified name of the service to
|
|
144
|
+
* @param service The fully-qualified name of the service to be compiled. Defaults to "sap.fe.test.JestService".
|
|
145
|
+
* @param options Options for creating the EDMX output
|
|
141
146
|
* @returns The compiled service model as EDMX.
|
|
142
147
|
*/
|
|
143
|
-
export function cds2edmx(cds: string, service
|
|
144
|
-
const csn = compileSources({ "string.cds": cds }, {});
|
|
145
|
-
|
|
148
|
+
export function cds2edmx(cds: string, service = "sap.fe.test.JestService", options: compiler.ODataOptions = {}) {
|
|
149
|
+
const csn = compiler.compileSources({ "string.cds": cds }, {});
|
|
150
|
+
|
|
151
|
+
const edmxOptions: compiler.ODataOptions = {
|
|
152
|
+
odataForeignKeys: true,
|
|
153
|
+
odataFormat: "structured",
|
|
154
|
+
odataContainment: false,
|
|
155
|
+
...options,
|
|
156
|
+
service: service
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const edmx = compiler.to.edmx(csn, edmxOptions);
|
|
146
160
|
if (!edmx) {
|
|
147
161
|
throw new Error(`Compilation failed. Hint: Make sure that the CDS model defines service ${service}.`);
|
|
148
162
|
}
|
|
@@ -23,6 +23,8 @@ sap.ui.define(
|
|
|
23
23
|
"sap/fe/test/api/DialogValueHelpAssertions",
|
|
24
24
|
"sap/fe/test/api/DialogCreateActions",
|
|
25
25
|
"sap/fe/test/api/DialogCreateAssertions",
|
|
26
|
+
"sap/fe/test/api/DialogMassEditActions",
|
|
27
|
+
"sap/fe/test/api/DialogMassEditAssertions",
|
|
26
28
|
"sap/fe/test/api/TableAssertions",
|
|
27
29
|
"sap/fe/test/api/TableActions",
|
|
28
30
|
"sap/fe/test/api/ChartAssertions",
|
|
@@ -52,6 +54,8 @@ sap.ui.define(
|
|
|
52
54
|
DialogValueHelpAssertions,
|
|
53
55
|
DialogCreateActions,
|
|
54
56
|
DialogCreateAssertions,
|
|
57
|
+
DialogMassEditActions,
|
|
58
|
+
DialogMassEditAssertions,
|
|
55
59
|
TableAssertions,
|
|
56
60
|
TableActions,
|
|
57
61
|
ChartAssertions,
|
|
@@ -116,6 +120,10 @@ sap.ui.define(
|
|
|
116
120
|
return bAction
|
|
117
121
|
? new DialogCreateActions(oDialogBuilder, vDialogIdentifier)
|
|
118
122
|
: new DialogCreateAssertions(oDialogBuilder, vDialogIdentifier);
|
|
123
|
+
case DialogType.MassEdit:
|
|
124
|
+
return bAction
|
|
125
|
+
? new DialogMassEditActions(oDialogBuilder, vDialogIdentifier)
|
|
126
|
+
: new DialogMassEditAssertions(oDialogBuilder, vDialogIdentifier);
|
|
119
127
|
default:
|
|
120
128
|
return bAction
|
|
121
129
|
? new DialogActions(oDialogBuilder, vDialogIdentifier)
|
|
@@ -55,13 +55,14 @@ sap.ui.define([], function () {
|
|
|
55
55
|
return (_this$oBinding = _this.oBinding) === null || _this$oBinding === void 0 ? void 0 : _this$oBinding.getModel();
|
|
56
56
|
});
|
|
57
57
|
this.isTransient = jest.fn();
|
|
58
|
-
this.setKeepAlive = jest.fn(function (bool) {
|
|
58
|
+
this.setKeepAlive = jest.fn(function (bool, _fnOnBeforeDestroy, _bRequestMessages) {
|
|
59
59
|
_this.isKeptAlive = bool;
|
|
60
60
|
});
|
|
61
61
|
this.isKeepAlive = jest.fn(function () {
|
|
62
62
|
return _this.isKeptAlive;
|
|
63
63
|
});
|
|
64
64
|
this.requestSideEffects = jest.fn();
|
|
65
|
+
this.requestObject = jest.fn();
|
|
65
66
|
this.oValues = oValues;
|
|
66
67
|
this.oBinding = oBinding;
|
|
67
68
|
}
|
|
@@ -428,4 +429,4 @@ sap.ui.define([], function () {
|
|
|
428
429
|
_exports.mockMVC = mockMVC;
|
|
429
430
|
return _exports;
|
|
430
431
|
}, false);
|
|
431
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJpc0tlcHRBbGl2ZSIsImdldFByb3BlcnR5IiwiamVzdCIsImZuIiwia2V5IiwicmVxdWVzdFByb3BlcnR5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInRoYXQiLCJyZXN1bHQiLCJpbmRleE9mIiwicGFydHMiLCJzcGxpdCIsInJlZHVjZSIsInN1bSIsInBhcnQiLCJnZXRQYXRoIiwiZ2V0QmluZGluZyIsImdldE1vZGVsIiwiaXNUcmFuc2llbnQiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiaXNLZWVwQWxpdmUiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJpc0EiLCJzQ2xhc3NOYW1lIiwiTW9ja1VJNUVsZW1lbnQiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwibW9ja1JldHVyblZhbHVlIiwiZ2V0QmluZGluZ0luZm8iLCJkYXRhIiwiZ2V0UGFyZW50IiwiTW9ja0NvbnRyb2wiLCJNb2NrRXZlbnQiLCJwYXJhbXMiLCJzb3VyY2UiLCJnZXRQYXJhbWV0ZXIiLCJuYW1lIiwiZ2V0U291cmNlIiwiTW9ja0xpc3RCaW5kaW5nIiwiYUNvbnRleHRzIiwibW9ja01vZGVsIiwic2V0QWdncmVnYXRpb24iLCJmaWx0ZXIiLCJzb3J0IiwicmVxdWVzdENvbnRleHRzIiwiYU1vY2tDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldFVwZGF0ZUdyb3VwSWQiLCJtYXAiLCJjb250ZXh0Iiwic2V0TW9kZWwiLCJvTW9kZWwiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwibW9ja1BhdGgiLCJnZXRWYWx1ZSIsInNldFBhdGgiLCJNb2NrQ29tcG9zaXRlQmluZGluZyIsImFCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb250ZXh0QmluZGluZyIsIm9Db250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01vY2tDb250ZXh0IiwiYXR0YWNoRXZlbnRPbmNlIiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIk1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJnZXRNZXRhQ29udGV4dCIsInNQYXRoIiwiJHBhdGgiLCJvTWV0YUNvbnRleHQiLCJyZXF1ZXN0T2JqZWN0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRNZXRhUGF0aCIsImdldENvbnRleHQiLCJNb2NrTW9kZWwiLCJtb2NrTGlzdEJpbmRpbmciLCJtb2NrQ29udGV4dEJpbmRpbmciLCJiaW5kTGlzdCIsImJpbmRDb250ZXh0IiwiZ2V0TWV0YU1vZGVsIiwib01ldGFNb2RlbCIsImdldEtlZXBBbGl2ZUNvbnRleHQiLCJtb2RlbEZyb21MaXN0QmluZGluZyIsIm1vZGVsRnJvbUNvbnRleHRCaW5kaW5nIiwidW5kZWZpbmVkIiwic2V0TWV0YU1vZGVsIiwiTW9ja1ZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0Vmlld0RhdGEiLCJnZXRJZCIsIk1vY2tDb250cm9sbGVyIiwiZ2V0VmlldyIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb1RhcmdldCIsIl9lZGl0RmxvdyIsInN5bmNUYXNrIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJtb2NrTVZDIiwiZXhpc3RpbmciLCJtb2RlbCIsInZpZXciLCJjb250cm9sbGVyIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBRkE7QUFDQTtBQUNBO01BZWFBLFc7QUFFWix5QkFBMkJDLE9BQTNCLEVBQWtEQyxRQUFsRCxFQUFrRTtBQUFBOztBQUFBLFdBRDFEQyxXQUMwRCxHQUQ1QyxLQUM0QztBQUFBLFdBTTNEQyxXQU4yRCxHQU03Q0MsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQ0MsR0FBRCxFQUFpQjtBQUM3QyxlQUFPLEtBQUksQ0FBQ04sT0FBTCxDQUFhTSxHQUFiLENBQVA7QUFDQSxPQUZv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LFlBQUFBLFFBQVEsQ0FBRUcsVUFBVixLQUF3QixJQUFJWixjQUFKLEVBQTNDO0FBRUFXLElBQUFBLElBQUksQ0FBQ2QsYUFBTCxDQUFtQjlELGVBQW5CLENBQW1DNkUsVUFBbkM7QUFDQUQsSUFBQUEsSUFBSSxDQUFDdkYsUUFBTCxDQUFjVyxlQUFkLENBQThCMkUsS0FBOUI7QUFDQUUsSUFBQUEsVUFBVSxDQUFDWCxPQUFYLENBQW1CbEUsZUFBbkIsQ0FBbUM0RSxJQUFuQztBQUVBLFdBQU87QUFBRUQsTUFBQUEsS0FBSyxFQUFMQSxLQUFGO0FBQVNDLE1BQUFBLElBQUksRUFBSkEsSUFBVDtBQUFlQyxNQUFBQSxVQUFVLEVBQVZBO0FBQWYsS0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vY2sgY2xhc3MgZm9yIGEgVjQgQ29udGV4dFxuICovXG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0IGltcGxlbWVudHMgUGFydGlhbDxDb250ZXh0PiB7XG5cdHByaXZhdGUgaXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlcz86IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vVmFsdWVzW2tleV0pO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzIGFzIGFueTtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IHRoYXQub1ZhbHVlc1twYXRoXSA6IHRoYXQub1ZhbHVlcztcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgdGhhdC5vVmFsdWVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW1wiJHBhdGhcIl07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub0JpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vQmluZGluZz8uZ2V0TW9kZWwoKSBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cdHB1YmxpYyBpc1RyYW5zaWVudCA9IGplc3QuZm4oKTtcblx0cHVibGljIHNldEtlZXBBbGl2ZSA9IGplc3QuZm4oKGJvb2w6IGJvb2xlYW4pID0+IHtcblx0XHR0aGlzLmlzS2VwdEFsaXZlID0gYm9vbDtcblx0fSk7XG5cdHB1YmxpYyBpc0tlZXBBbGl2ZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5pc0tlcHRBbGl2ZSk7XG5cdHB1YmxpYyByZXF1ZXN0U2lkZUVmZmVjdHMgPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrVUk1RWxlbWVudCBpbXBsZW1lbnRzIFBhcnRpYWw8VUk1RWxlbWVudD4ge1xuXHRba2V5OiBzdHJpbmddOiBhbnk7XG5cdHB1YmxpYyBiaW5kaW5nQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dCh7fSk7XG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0QmluZGluZ0NvbnRleHQgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHRoaXMuYmluZGluZ0NvbnRleHQpO1xuXHRwdWJsaWMgZ2V0QmluZGluZ0luZm8gPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBkYXRhID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRQYXJlbnQgPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrQ29udHJvbCBleHRlbmRzIE1vY2tVSTVFbGVtZW50IGltcGxlbWVudHMgUGFydGlhbDxDb250cm9sPiB7XG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dDogamVzdC5Nb2NrPGFueSwgYW55PiA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsOiBqZXN0Lk1vY2s8YW55LCBhbnk+ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0V2ZW50IGltcGxlbWVudHMgUGFydGlhbDxFdmVudD4ge1xuXHRwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9LCBwdWJsaWMgc291cmNlOiBNb2NrVUk1RWxlbWVudCA9IG5ldyBNb2NrVUk1RWxlbWVudCgpKSB7fVxuXG5cdHB1YmxpYyBnZXRQYXJhbWV0ZXIgPSBqZXN0LmZuKChuYW1lKSA9PiB0aGlzLnBhcmFtc1tuYW1lXSk7XG5cblx0cHVibGljIGdldFNvdXJjZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5zb3VyY2UgYXMgYW55KTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBMaXN0QmluZGluZ1xuICovXG5leHBvcnQgY2xhc3MgTW9ja0xpc3RCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUxpc3RCaW5kaW5nPiB7XG5cdHByaXZhdGUgYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYUNvbnRleHRzPzogYW55W10sIHByaXZhdGUgbW9ja01vZGVsPzogTW9ja01vZGVsKSB7XG5cdFx0YUNvbnRleHRzID0gYUNvbnRleHRzIHx8IFtdO1xuXG5cdFx0dGhpcy5hTW9ja0NvbnRleHRzID0gYUNvbnRleHRzLm1hcCgoY29udGV4dCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dChjb250ZXh0LCB0aGlzKTtcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHRwdWJsaWMgc2V0QWdncmVnYXRpb24gPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBmaWx0ZXIgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBzb3J0ID0gamVzdC5mbigpO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIHJlcXVlc3RDb250ZXh0cyA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkgYXMgQ29udGV4dFtdKTtcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGdldEN1cnJlbnRDb250ZXh0cyA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5hTW9ja0NvbnRleHRzIGFzIGFueSBhcyBDb250ZXh0W107XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5tb2NrTW9kZWwgYXMgYW55IGFzIE9EYXRhTW9kZWw7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0VXBkYXRlR3JvdXBJZCA9IGplc3QuZm4oKCkgPT4gXCJhdXRvXCIpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1Byb3BlcnR5QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFQcm9wZXJ0eUJpbmRpbmc+IHtcblx0cHJpdmF0ZSBtb2NrTW9kZWwhOiBKU09OTW9kZWw7XG5cdHByaXZhdGUgbW9ja1BhdGghOiBzdHJpbmc7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG1vY2tNb2RlbDogSlNPTk1vZGVsLCBtb2NrUGF0aDogc3RyaW5nKSB7XG5cdFx0dGhpcy5zZXRNb2RlbChtb2NrTW9kZWwpO1xuXHRcdHRoaXMuc2V0UGF0aChtb2NrUGF0aCk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuXHR9XG5cblx0cHVibGljIHNldE1vZGVsKG9Nb2RlbDogSlNPTk1vZGVsKSB7XG5cdFx0dGhpcy5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH1cblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja01vZGVsIGFzIGFueSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcblxuXHRwdWJsaWMgc2V0UGF0aChwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHR0aGlzLm1vY2tQYXRoID0gcGF0aCA/IHBhdGggOiBcIlwiO1xuXHR9XG5cdHB1YmxpYyBnZXRQYXRoID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja1BhdGg7XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRWYWx1ZSA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzPy5tb2NrTW9kZWw/LmdldFByb3BlcnR5KFwiL1wiICsgdGhpcy5tb2NrUGF0aCk7XG5cdH0pO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPENvbXBvc2l0ZUJpbmRpbmc+IHtcblx0cHJpdmF0ZSBhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pIHtcblx0XHR0aGlzLmFCaW5kaW5ncyA9IGFCaW5kaW5ncztcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBnZXRCaW5kaW5ncyA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLmFCaW5kaW5ncztcblx0fSk7XG5cblx0cHVibGljIGdldFZhbHVlID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuYUJpbmRpbmdzLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5nZXRWYWx1ZSgpKTtcblx0fSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrQ29udGV4dEJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0cHJpdmF0ZSBvTW9ja0NvbnRleHQ6IE1vY2tDb250ZXh0O1xuXHRwcml2YXRlIGlzS2VwdEFsaXZlOiBib29sZWFuID0gZmFsc2U7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9Db250ZXh0PzogYW55LCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMub01vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KG9Db250ZXh0IHx8IHt9LCB0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIjtcblx0fVxuXHRwdWJsaWMgZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCgpOiBNb2NrQ29udGV4dCB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0O1xuXHR9XG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHRwdWJsaWMgZ2V0Qm91bmRDb250ZXh0ID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0IGFzIGFueSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGF0dGFjaEV2ZW50T25jZSA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja01vZGVsIGFzIGFueSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tNZXRhTW9kZWwgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhTWV0YU1vZGVsPiB7XG5cdHByaXZhdGUgb01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcblx0cmVxdWVzdFZhbHVlTGlzdEluZm8hOiBqZXN0Lk1vY2s8YW55LCBhbnk+O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvTWV0YURhdGE/OiBhbnkpIHtcblx0XHR0aGlzLm9NZXRhQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dChvTWV0YURhdGEgfHwge30pO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBnZXRNZXRhQ29udGV4dCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbmV3IE1vY2tDb250ZXh0KHsgJHBhdGg6IHNQYXRoIH0pIGFzIGFueSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoc1BhdGgpO1xuXHR9KTtcblx0cHVibGljIHJlcXVlc3RPYmplY3QgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBjcmVhdGVCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbmV3IE1vY2tDb250ZXh0KHsgJHBhdGg6IHNQYXRoIH0pIGFzIGFueSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGdldE1ldGFQYXRoID0gamVzdC5mbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzUGF0aDtcblx0fSk7XG5cdHB1YmxpYyBnZXRDb250ZXh0ID0gamVzdC5mbigpO1xufVxuXG4vKipcbiAqIE1vY2sgY2xhc3MgZm9yIE9EYXRhIFY0IE1vZGVsXG4gKi9cblxuZXhwb3J0IGNsYXNzIE1vY2tNb2RlbCBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgcHJpdmF0ZSBtb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpIHtcblx0XHRpZiAobW9ja0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRtb2NrTGlzdEJpbmRpbmcuc2V0TW9kZWwodGhpcyk7XG5cdFx0fVxuXHRcdGlmIChtb2NrQ29udGV4dEJpbmRpbmcpIHtcblx0XHRcdG1vY2tDb250ZXh0QmluZGluZy5zZXRNb2RlbCh0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvLyBGYWN0b3JpZXNcblx0c3RhdGljIG1vZGVsRnJvbUxpc3RCaW5kaW5nKG1vY2tMaXN0QmluZGluZzogTW9ja0xpc3RCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0XHRyZXR1cm4gbmV3IE1vY2tNb2RlbChtb2NrTGlzdEJpbmRpbmcpO1xuXHR9XG5cdHN0YXRpYyBtb2RlbEZyb21Db250ZXh0QmluZGluZyhtb2NrQ29udGV4dEJpbmRpbmc6IE1vY2tDb250ZXh0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrTW9kZWwodW5kZWZpbmVkLCBtb2NrQ29udGV4dEJpbmRpbmcpO1xuXHR9XG5cblx0cHVibGljIHNldE1ldGFNb2RlbChvTWV0YU1vZGVsOiBNb2NrTWV0YU1vZGVsKSB7XG5cdFx0dGhpcy5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgYmluZExpc3QgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja0xpc3RCaW5kaW5nIGFzIGFueSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHR9KTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgYmluZENvbnRleHQgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja0NvbnRleHRCaW5kaW5nIGFzIGFueSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0cHVibGljIGdldE1ldGFNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9NZXRhTW9kZWwgYXMgYW55IGFzIE9EYXRhTWV0YU1vZGVsO1xuXHR9KTtcblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBzZXRQcm9wZXJ0eSA9IGplc3QuZm4oKTtcblx0cHVibGljIHJlcXVlc3RPYmplY3QgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRLZWVwQWxpdmVDb250ZXh0ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1ZpZXcgaW1wbGVtZW50cyBQYXJ0aWFsPFZpZXc+IHtcblx0cHVibGljIGdldENvbnRyb2xsZXIgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldEJpbmRpbmdDb250ZXh0ID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0Vmlld0RhdGEgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGlzQShzQ2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkuY29yZS5tdmMuVmlld1wiO1xuXHR9XG5cblx0cHVibGljIGdldElkID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRyb2xsZXIgaW1wbGVtZW50cyBQYXJ0aWFsPENvbnRyb2xsZXI+IHtcblx0cHVibGljIGdldFZpZXcgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG5ldyBNb2NrVmlldygpKTtcblxuXHRwdWJsaWMgX3JvdXRpbmcgPSB7XG5cdFx0bmF2aWdhdGVUb1RhcmdldDogamVzdC5mbigpXG5cdH07XG5cblx0cHVibGljIF9lZGl0RmxvdyA9IHtcblx0XHRzeW5jVGFzazogamVzdC5mbigpXG5cdH07XG5cblx0cHVibGljIF9zaWRlRWZmZWN0cyA9IHtcblx0XHRoYW5kbGVGaWVsZENoYW5nZTogamVzdC5mbigpXG5cdH07XG5cblx0aXNBID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTVZDTW9jayB7XG5cdG1vZGVsOiBNb2NrTW9kZWw7XG5cdHZpZXc6IE1vY2tWaWV3O1xuXHRjb250cm9sbGVyOiBNb2NrQ29udHJvbGxlcjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBtb2NrcyB0aGF0IHJlZmVyIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGV4aXN0aW5nIE9wdGlvbmFsIGV4aXN0aW5nIG1vY2tlZCBpbnN0YW5jZXMgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogQHJldHVybnMgTW9ja2VkIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIGluc3RhbmNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja01WQyhleGlzdGluZz86IFBhcnRpYWw8TVZDTW9jaz4pOiBNVkNNb2NrIHtcblx0Y29uc3QgbW9kZWwgPSBleGlzdGluZz8ubW9kZWwgfHwgbmV3IE1vY2tNb2RlbCgpO1xuXHRjb25zdCB2aWV3ID0gZXhpc3Rpbmc/LnZpZXcgfHwgbmV3IE1vY2tWaWV3KCk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSBleGlzdGluZz8uY29udHJvbGxlciB8fCBuZXcgTW9ja0NvbnRyb2xsZXIoKTtcblxuXHR2aWV3LmdldENvbnRyb2xsZXIubW9ja1JldHVyblZhbHVlKGNvbnRyb2xsZXIpO1xuXHR2aWV3LmdldE1vZGVsLm1vY2tSZXR1cm5WYWx1ZShtb2RlbCk7XG5cdGNvbnRyb2xsZXIuZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUodmlldyk7XG5cblx0cmV0dXJuIHsgbW9kZWwsIHZpZXcsIGNvbnRyb2xsZXIgfTtcbn1cbiJdfQ==
|
|
432
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJpc0tlcHRBbGl2ZSIsImdldFByb3BlcnR5IiwiamVzdCIsImZuIiwia2V5IiwicmVxdWVzdFByb3BlcnR5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInRoYXQiLCJyZXN1bHQiLCJpbmRleE9mIiwicGFydHMiLCJzcGxpdCIsInJlZHVjZSIsInN1bSIsInBhcnQiLCJnZXRQYXRoIiwiZ2V0QmluZGluZyIsImdldE1vZGVsIiwiaXNUcmFuc2llbnQiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInJlcXVlc3RPYmplY3QiLCJpc0EiLCJzQ2xhc3NOYW1lIiwiTW9ja1VJNUVsZW1lbnQiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwibW9ja1JldHVyblZhbHVlIiwiZ2V0QmluZGluZ0luZm8iLCJkYXRhIiwiZ2V0UGFyZW50IiwiTW9ja0NvbnRyb2wiLCJNb2NrRXZlbnQiLCJwYXJhbXMiLCJzb3VyY2UiLCJnZXRQYXJhbWV0ZXIiLCJuYW1lIiwiZ2V0U291cmNlIiwiTW9ja0xpc3RCaW5kaW5nIiwiYUNvbnRleHRzIiwibW9ja01vZGVsIiwic2V0QWdncmVnYXRpb24iLCJmaWx0ZXIiLCJzb3J0IiwicmVxdWVzdENvbnRleHRzIiwiYU1vY2tDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldFVwZGF0ZUdyb3VwSWQiLCJtYXAiLCJjb250ZXh0Iiwic2V0TW9kZWwiLCJvTW9kZWwiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwibW9ja1BhdGgiLCJnZXRWYWx1ZSIsInNldFBhdGgiLCJNb2NrQ29tcG9zaXRlQmluZGluZyIsImFCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb250ZXh0QmluZGluZyIsIm9Db250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01vY2tDb250ZXh0IiwiYXR0YWNoRXZlbnRPbmNlIiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIk1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJnZXRNZXRhQ29udGV4dCIsInNQYXRoIiwiJHBhdGgiLCJvTWV0YUNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE1ldGFQYXRoIiwiZ2V0Q29udGV4dCIsIk1vY2tNb2RlbCIsIm1vY2tMaXN0QmluZGluZyIsIm1vY2tDb250ZXh0QmluZGluZyIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0S2VlcEFsaXZlQ29udGV4dCIsIm1vZGVsRnJvbUxpc3RCaW5kaW5nIiwibW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJzZXRNZXRhTW9kZWwiLCJNb2NrVmlldyIsImdldENvbnRyb2xsZXIiLCJnZXRWaWV3RGF0YSIsImdldElkIiwiTW9ja0NvbnRyb2xsZXIiLCJnZXRWaWV3IiwiX3JvdXRpbmciLCJuYXZpZ2F0ZVRvVGFyZ2V0IiwiX2VkaXRGbG93Iiwic3luY1Rhc2siLCJfc2lkZUVmZmVjdHMiLCJoYW5kbGVGaWVsZENoYW5nZSIsIm1vY2tNVkMiLCJleGlzdGluZyIsIm1vZGVsIiwidmlldyIsImNvbnRyb2xsZXIiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFGQTtBQUNBO0FBQ0E7TUFlYUEsVztBQUVaLHlCQUEyQkMsT0FBM0IsRUFBa0RDLFFBQWxELEVBQWtFO0FBQUE7O0FBQUEsV0FEMURDLFdBQzBELEdBRDVDLEtBQzRDO0FBQUEsV0FNM0RDLFdBTjJELEdBTTdDQyxJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWlCO0FBQzdDLGVBQU8s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QUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUUsSUFBVixLQUFrQixJQUFJZixRQUFKLEVBQS9CO0FBQ0EsUUFBTWdCLFVBQVUsR0FBRyxDQUFBSCxRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUcsVUFBVixLQUF3QixJQUFJWixjQUFKLEVBQTNDO0FBRUFXLElBQUFBLElBQUksQ0FBQ2QsYUFBTCxDQUFtQjdELGVBQW5CLENBQW1DNEUsVUFBbkM7QUFDQUQsSUFBQUEsSUFBSSxDQUFDekYsUUFBTCxDQUFjYyxlQUFkLENBQThCMEUsS0FBOUI7QUFDQUUsSUFBQUEsVUFBVSxDQUFDWCxPQUFYLENBQW1CakUsZUFBbkIsQ0FBbUMyRSxJQUFuQztBQUVBLFdBQU87QUFBRUQsTUFBQUEsS0FBSyxFQUFMQSxLQUFGO0FBQVNDLE1BQUFBLElBQUksRUFBSkEsSUFBVDtBQUFlQyxNQUFBQSxVQUFVLEVBQVZBO0FBQWYsS0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vY2sgY2xhc3MgZm9yIGEgVjQgQ29udGV4dFxuICovXG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0IGltcGxlbWVudHMgUGFydGlhbDxDb250ZXh0PiB7XG5cdHByaXZhdGUgaXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlcz86IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vVmFsdWVzW2tleV0pO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzIGFzIGFueTtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IHRoYXQub1ZhbHVlc1twYXRoXSA6IHRoYXQub1ZhbHVlcztcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgdGhhdC5vVmFsdWVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW1wiJHBhdGhcIl07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub0JpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vQmluZGluZz8uZ2V0TW9kZWwoKSBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cdHB1YmxpYyBpc1RyYW5zaWVudCA9IGplc3QuZm4oKTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgc2V0S2VlcEFsaXZlID0gamVzdC5mbigoYm9vbDogYm9vbGVhbiwgX2ZuT25CZWZvcmVEZXN0cm95PzogYW55LCBfYlJlcXVlc3RNZXNzYWdlcz86IGJvb2xlYW4pID0+IHtcblx0XHR0aGlzLmlzS2VwdEFsaXZlID0gYm9vbDtcblx0fSk7XG5cdHB1YmxpYyBpc0tlZXBBbGl2ZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5pc0tlcHRBbGl2ZSk7XG5cdHB1YmxpYyByZXF1ZXN0U2lkZUVmZmVjdHMgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1VJNUVsZW1lbnQgaW1wbGVtZW50cyBQYXJ0aWFsPFVJNUVsZW1lbnQ+IHtcblx0W2tleTogc3RyaW5nXTogYW55O1xuXHRwdWJsaWMgYmluZGluZ0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoe30pO1xuXHRwdWJsaWMgZ2V0QmluZGluZyA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldEJpbmRpbmdDb250ZXh0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh0aGlzLmJpbmRpbmdDb250ZXh0KTtcblx0cHVibGljIGdldEJpbmRpbmdJbmZvID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZGF0YSA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0UGFyZW50ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRyb2wgZXh0ZW5kcyBNb2NrVUk1RWxlbWVudCBpbXBsZW1lbnRzIFBhcnRpYWw8Q29udHJvbD4ge1xuXHRwdWJsaWMgZ2V0QmluZGluZ0NvbnRleHQ6IGplc3QuTW9jazxhbnksIGFueT4gPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbDogamVzdC5Nb2NrPGFueSwgYW55PiA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tFdmVudCBpbXBsZW1lbnRzIFBhcnRpYWw8RXZlbnQ+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSwgcHVibGljIHNvdXJjZTogTW9ja1VJNUVsZW1lbnQgPSBuZXcgTW9ja1VJNUVsZW1lbnQoKSkge31cblxuXHRwdWJsaWMgZ2V0UGFyYW1ldGVyID0gamVzdC5mbigobmFtZSkgPT4gdGhpcy5wYXJhbXNbbmFtZV0pO1xuXG5cdHB1YmxpYyBnZXRTb3VyY2UgPSBqZXN0LmZuKCgpID0+IHRoaXMuc291cmNlIGFzIGFueSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tMaXN0QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFMaXN0QmluZGluZz4ge1xuXHRwcml2YXRlIGFNb2NrQ29udGV4dHM6IE1vY2tDb250ZXh0W107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKGFDb250ZXh0cz86IGFueVtdLCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdGFDb250ZXh0cyA9IGFDb250ZXh0cyB8fCBbXTtcblxuXHRcdHRoaXMuYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0cy5tYXAoKGNvbnRleHQpID0+IHtcblx0XHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoY29udGV4dCwgdGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIHNldEFnZ3JlZ2F0aW9uID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZmlsdGVyID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc29ydCA9IGplc3QuZm4oKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmFNb2NrQ29udGV4dHMgYXMgYW55IGFzIENvbnRleHRbXSk7XG5cdH0pO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBnZXRDdXJyZW50Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkgYXMgQ29udGV4dFtdO1xuXHR9KTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja01vZGVsIGFzIGFueSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcblx0cHVibGljIGdldFVwZGF0ZUdyb3VwSWQgPSBqZXN0LmZuKCgpID0+IFwiYXV0b1wiKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tQcm9wZXJ0eUJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhUHJvcGVydHlCaW5kaW5nPiB7XG5cdHByaXZhdGUgbW9ja01vZGVsITogSlNPTk1vZGVsO1xuXHRwcml2YXRlIG1vY2tQYXRoITogc3RyaW5nO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2NrTW9kZWw6IEpTT05Nb2RlbCwgbW9ja1BhdGg6IHN0cmluZykge1xuXHRcdHRoaXMuc2V0TW9kZWwobW9ja01vZGVsKTtcblx0XHR0aGlzLnNldFBhdGgobW9ja1BhdGgpO1xuXHR9XG5cblx0cHVibGljIGlzQShzQ2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tNb2RlbCBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cblx0cHVibGljIHNldFBhdGgocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5tb2NrUGF0aCA9IHBhdGggPyBwYXRoIDogXCJcIjtcblx0fVxuXHRwdWJsaWMgZ2V0UGF0aCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tQYXRoO1xuXHR9KTtcblxuXHRwdWJsaWMgZ2V0VmFsdWUgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcz8ubW9ja01vZGVsPy5nZXRQcm9wZXJ0eShcIi9cIiArIHRoaXMubW9ja1BhdGgpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb21wb3NpdGVCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxDb21wb3NpdGVCaW5kaW5nPiB7XG5cdHByaXZhdGUgYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKGFCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdKSB7XG5cdFx0dGhpcy5hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmluZGluZ3MgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5hQmluZGluZ3M7XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRWYWx1ZSA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLmFCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRleHRCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdHByaXZhdGUgb01vY2tDb250ZXh0OiBNb2NrQ29udGV4dDtcblx0cHJpdmF0ZSBpc0tlcHRBbGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvQ29udGV4dD86IGFueSwgcHJpdmF0ZSBtb2NrTW9kZWw/OiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm9Nb2NrQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dChvQ29udGV4dCB8fCB7fSwgdGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5cdH1cblx0cHVibGljIGdldEludGVybmFsTW9ja0NvbnRleHQoKTogTW9ja0NvbnRleHQge1xuXHRcdHJldHVybiB0aGlzLm9Nb2NrQ29udGV4dDtcblx0fVxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIGdldEJvdW5kQ29udGV4dCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9Nb2NrQ29udGV4dCBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBhdHRhY2hFdmVudE9uY2UgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tNb2RlbCBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2NrTWV0YU1vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1ldGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdHJlcXVlc3RWYWx1ZUxpc3RJbmZvITogamVzdC5Nb2NrPGFueSwgYW55PjtcblxuXHRwdWJsaWMgY29uc3RydWN0b3Iob01ldGFEYXRhPzogYW55KSB7XG5cdFx0dGhpcy5vTWV0YUNvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgZ2V0TWV0YUNvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBnZXRPYmplY3QgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub01ldGFDb250ZXh0LmdldFByb3BlcnR5KHNQYXRoKTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgY3JlYXRlQmluZGluZ0NvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBnZXRNZXRhUGF0aCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc1BhdGg7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0Q29udGV4dCA9IGplc3QuZm4oKTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBNb2RlbFxuICovXG5cbmV4cG9ydCBjbGFzcyBNb2NrTW9kZWwgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhTW9kZWw+IHtcblx0cHJpdmF0ZSBvTWV0YU1vZGVsPzogTW9ja01ldGFNb2RlbDtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBtb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIHByaXZhdGUgbW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0aWYgKG1vY2tMaXN0QmluZGluZykge1xuXHRcdFx0bW9ja0xpc3RCaW5kaW5nLnNldE1vZGVsKHRoaXMpO1xuXHRcdH1cblx0XHRpZiAobW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0XHRtb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwodGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gRmFjdG9yaWVzXG5cdHN0YXRpYyBtb2RlbEZyb21MaXN0QmluZGluZyhtb2NrTGlzdEJpbmRpbmc6IE1vY2tMaXN0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrTW9kZWwobW9ja0xpc3RCaW5kaW5nKTtcblx0fVxuXHRzdGF0aWMgbW9kZWxGcm9tQ29udGV4dEJpbmRpbmcobW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRcdHJldHVybiBuZXcgTW9ja01vZGVsKHVuZGVmaW5lZCwgbW9ja0NvbnRleHRCaW5kaW5nKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRNZXRhTW9kZWwob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRMaXN0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tMaXN0QmluZGluZyBhcyBhbnkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRDb250ZXh0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tDb250ZXh0QmluZGluZyBhcyBhbnkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0fSk7XG5cdHB1YmxpYyBnZXRNZXRhTW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsIGFzIGFueSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0fSk7XG5cblx0cHVibGljIGdldFByb3BlcnR5ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc2V0UHJvcGVydHkgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0S2VlcEFsaXZlQ29udGV4dCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tWaWV3IGltcGxlbWVudHMgUGFydGlhbDxWaWV3PiB7XG5cdHB1YmxpYyBnZXRDb250cm9sbGVyID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldFZpZXdEYXRhID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fVxuXG5cdHB1YmxpYyBnZXRJZCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250cm9sbGVyIGltcGxlbWVudHMgUGFydGlhbDxDb250cm9sbGVyPiB7XG5cdHB1YmxpYyBnZXRWaWV3ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShuZXcgTW9ja1ZpZXcoKSk7XG5cblx0cHVibGljIF9yb3V0aW5nID0ge1xuXHRcdG5hdmlnYXRlVG9UYXJnZXQ6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfZWRpdEZsb3cgPSB7XG5cdFx0c3luY1Rhc2s6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfc2lkZUVmZmVjdHMgPSB7XG5cdFx0aGFuZGxlRmllbGRDaGFuZ2U6IGplc3QuZm4oKVxuXHR9O1xuXG5cdGlzQSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1WQ01vY2sge1xuXHRtb2RlbDogTW9ja01vZGVsO1xuXHR2aWV3OiBNb2NrVmlldztcblx0Y29udHJvbGxlcjogTW9ja0NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgbW9ja3MgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyBPcHRpb25hbCBleGlzdGluZyBtb2NrZWQgaW5zdGFuY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqIEByZXR1cm5zIE1vY2tlZCBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tNVkMoZXhpc3Rpbmc/OiBQYXJ0aWFsPE1WQ01vY2s+KTogTVZDTW9jayB7XG5cdGNvbnN0IG1vZGVsID0gZXhpc3Rpbmc/Lm1vZGVsIHx8IG5ldyBNb2NrTW9kZWwoKTtcblx0Y29uc3QgdmlldyA9IGV4aXN0aW5nPy52aWV3IHx8IG5ldyBNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgbmV3IE1vY2tDb250cm9sbGVyKCk7XG5cblx0dmlldy5nZXRDb250cm9sbGVyLm1vY2tSZXR1cm5WYWx1ZShjb250cm9sbGVyKTtcblx0dmlldy5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLmdldFZpZXcubW9ja1JldHVyblZhbHVlKHZpZXcpO1xuXG5cdHJldHVybiB7IG1vZGVsLCB2aWV3LCBjb250cm9sbGVyIH07XG59XG4iXX0=
|
|
@@ -59,11 +59,13 @@ export class MockContext implements Partial<Context> {
|
|
|
59
59
|
return this.oBinding?.getModel() as any as ODataModel;
|
|
60
60
|
});
|
|
61
61
|
public isTransient = jest.fn();
|
|
62
|
-
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
63
|
+
public setKeepAlive = jest.fn((bool: boolean, _fnOnBeforeDestroy?: any, _bRequestMessages?: boolean) => {
|
|
63
64
|
this.isKeptAlive = bool;
|
|
64
65
|
});
|
|
65
66
|
public isKeepAlive = jest.fn(() => this.isKeptAlive);
|
|
66
67
|
public requestSideEffects = jest.fn();
|
|
68
|
+
public requestObject = jest.fn();
|
|
67
69
|
}
|
|
68
70
|
|
|
69
71
|
export class MockUI5Element implements Partial<UI5Element> {
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ! SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
5
|
+
*/
|
|
6
|
+
sap.ui.define(
|
|
7
|
+
["./DialogActions", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder", "sap/fe/test/builder/FEBuilder"],
|
|
8
|
+
function (DialogActions, Utils, OpaBuilder, FEBuilder) {
|
|
9
|
+
"use strict";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new DialogMassEditActions instance.
|
|
13
|
+
*
|
|
14
|
+
* @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
|
|
15
|
+
* @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
|
|
16
|
+
* @returns {sap.fe.test.api.DialogMassEditActions} The new instance
|
|
17
|
+
* @extends sap.fe.test.api.DialogActions
|
|
18
|
+
* @alias sap.fe.test.api.DialogMassEditActions
|
|
19
|
+
* @class
|
|
20
|
+
* @hideconstructor
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
var DialogMassEditActions = function (oDialogBuilder, vDialogDescription) {
|
|
24
|
+
return DialogActions.call(this, oDialogBuilder, vDialogDescription, 0);
|
|
25
|
+
};
|
|
26
|
+
DialogMassEditActions.prototype = Object.create(DialogActions.prototype);
|
|
27
|
+
DialogMassEditActions.prototype.constructor = DialogMassEditActions;
|
|
28
|
+
DialogMassEditActions.prototype.isAction = true;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A mass edit field identifier
|
|
32
|
+
*
|
|
33
|
+
* @typedef {object} MassEditFieldIdentifier
|
|
34
|
+
* @property {string} property The name of the property
|
|
35
|
+
* @name sap.fe.test.api.MassEditFieldIdentifier
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A mass edit field value
|
|
41
|
+
*
|
|
42
|
+
* @typedef {object} MassEditValue
|
|
43
|
+
* @property {string} dropDownText The dropdown text for the selection
|
|
44
|
+
* @property {string} rawText The raw text for the selection
|
|
45
|
+
* @name sap.fe.test.api.MassEditValue
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Changes the value of the defined filter field.
|
|
51
|
+
*
|
|
52
|
+
* @param {string | sap.fe.test.api.MassEditFieldIdentifier} vMassEditFieldIdentifier The identifier for the mass edit field
|
|
53
|
+
* @param {string | sap.fe.test.api.MassEditValue} vMassEditValue The new target value
|
|
54
|
+
* @param {object} [mState] The state of the mass edit field
|
|
55
|
+
* @param {object} [mProperties] The Properties of the mass edit field
|
|
56
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
57
|
+
* @private
|
|
58
|
+
*/
|
|
59
|
+
DialogMassEditActions.prototype.iChangeField = function (vMassEditFieldIdentifier, vMassEditValue, mState, mProperties) {
|
|
60
|
+
var that = this,
|
|
61
|
+
sProperty = Utils.isOfType(vMassEditFieldIdentifier, String) ? vMassEditFieldIdentifier : vMassEditFieldIdentifier.property,
|
|
62
|
+
vValue = vMassEditValue && (Utils.isOfType(vMassEditValue, String) ? { rawText: vMassEditValue } : vMassEditValue),
|
|
63
|
+
fieldRegEx = new RegExp("^MED(.*)" + sProperty + "$", "gi");
|
|
64
|
+
|
|
65
|
+
return that.prepareResult(
|
|
66
|
+
FEBuilder.create(this.getOpaInstance())
|
|
67
|
+
.isDialogElement()
|
|
68
|
+
.has(FEBuilder.Matchers.id(fieldRegEx))
|
|
69
|
+
.hasState(mState)
|
|
70
|
+
.hasProperties(mProperties)
|
|
71
|
+
.doPress()
|
|
72
|
+
.success(function (aSelect) {
|
|
73
|
+
var oRet,
|
|
74
|
+
oSelect = aSelect[0],
|
|
75
|
+
sControlType = oSelect.getMetadata().getName();
|
|
76
|
+
if (vValue.dropDownText) {
|
|
77
|
+
oRet = OpaBuilder.create()
|
|
78
|
+
.hasType("sap.ui.core.Item")
|
|
79
|
+
.has(OpaBuilder.Matchers.ancestor(oSelect[0], false))
|
|
80
|
+
.hasProperties({ text: vValue.dropDownText })
|
|
81
|
+
.doPress()
|
|
82
|
+
.description(
|
|
83
|
+
Utils.formatMessage(
|
|
84
|
+
"Value '{3}' selected for '{0}' in mass edit dialog '{1}'",
|
|
85
|
+
sProperty,
|
|
86
|
+
that.getIdentifier(),
|
|
87
|
+
vValue.dropDownText
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
.execute();
|
|
91
|
+
} else if (vValue.rawText && sControlType === "sap.m.ComboBox") {
|
|
92
|
+
oRet = OpaBuilder.create()
|
|
93
|
+
.hasId(oSelect.getId())
|
|
94
|
+
.doEnterText(vValue.rawText)
|
|
95
|
+
.description(
|
|
96
|
+
Utils.formatMessage(
|
|
97
|
+
"Value '{3}' entered for '{0}' in mass edit dialog '{1}'",
|
|
98
|
+
sProperty,
|
|
99
|
+
that.getIdentifier(),
|
|
100
|
+
vValue.rawText
|
|
101
|
+
)
|
|
102
|
+
)
|
|
103
|
+
.execute();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return oRet;
|
|
107
|
+
})
|
|
108
|
+
.description(Utils.formatMessage("Mass edit dropdown for '{0}' found in dialog '{1}'", sProperty, that.getIdentifier()))
|
|
109
|
+
.execute()
|
|
110
|
+
);
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
return DialogMassEditActions;
|
|
114
|
+
}
|
|
115
|
+
);
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ! SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
5
|
+
*/
|
|
6
|
+
sap.ui.define(
|
|
7
|
+
["./DialogAssertions", "sap/ui/test/OpaBuilder", "sap/fe/test/builder/FEBuilder", "sap/fe/test/Utils"],
|
|
8
|
+
function (DialogAssertions, OpaBuilder, FEBuilder, Utils) {
|
|
9
|
+
"use strict";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new DialogMassEditAssertions instance.
|
|
13
|
+
*
|
|
14
|
+
* @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
|
|
15
|
+
* @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
|
|
16
|
+
* @returns {sap.fe.test.api.DialogMassEditAssertions} The new instance
|
|
17
|
+
* @extends sap.fe.test.api.DialogAssertions
|
|
18
|
+
* @alias sap.fe.test.api.DialogMassEditAssertions
|
|
19
|
+
* @class
|
|
20
|
+
* @hideconstructor
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
var DialogMassEditAssertions = function (oDialogBuilder, vDialogDescription) {
|
|
24
|
+
return DialogAssertions.call(this, oDialogBuilder, vDialogDescription, 0);
|
|
25
|
+
};
|
|
26
|
+
DialogMassEditAssertions.prototype = Object.create(DialogAssertions.prototype);
|
|
27
|
+
DialogMassEditAssertions.prototype.constructor = DialogMassEditAssertions;
|
|
28
|
+
DialogMassEditAssertions.prototype.isAction = false;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A mass edit field identifier
|
|
32
|
+
*
|
|
33
|
+
* @typedef {object} MassEditFieldIdentifier
|
|
34
|
+
* @property {string} property The name of the property
|
|
35
|
+
* @name sap.fe.test.api.MassEditFieldIdentifier
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A mass edit field value
|
|
41
|
+
*
|
|
42
|
+
* @typedef {object} MassEditValue
|
|
43
|
+
* @property {string} dropDownText The dropdown text for the selection
|
|
44
|
+
* @property {string} rawText The raw text for the selection
|
|
45
|
+
* @name sap.fe.test.api.MassEditValue
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Check the value of the defined filter field.
|
|
51
|
+
*
|
|
52
|
+
* @param {string | sap.fe.test.api.MassEditFieldIdentifier} vMassEditFieldIdentifier The identifier for the mass edit field
|
|
53
|
+
* @param {string | sap.fe.test.api.MassEditValue} vMassEditValue The new target value
|
|
54
|
+
* @param {object} [mState] The state of the mass edit field
|
|
55
|
+
* @param {object} [mProperties] The Properties of the mass edit field
|
|
56
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
57
|
+
* @private
|
|
58
|
+
*/
|
|
59
|
+
DialogMassEditAssertions.prototype.iCheckField = function (vMassEditFieldIdentifier, vMassEditValue, mState, mProperties) {
|
|
60
|
+
var that = this,
|
|
61
|
+
sProperty = Utils.isOfType(vMassEditFieldIdentifier, String) ? vMassEditFieldIdentifier : vMassEditFieldIdentifier.property,
|
|
62
|
+
vValue =
|
|
63
|
+
vMassEditValue &&
|
|
64
|
+
(Utils.isOfType(vMassEditValue, String) ? vMassEditValue : vMassEditValue.rawText || vMassEditValue.dropDownText),
|
|
65
|
+
fieldRegEx = new RegExp("^MED(.*)" + sProperty + "$", "gi");
|
|
66
|
+
var sControlType;
|
|
67
|
+
|
|
68
|
+
var vTest = FEBuilder.create(this.getOpaInstance()).isDialogElement();
|
|
69
|
+
var vIdMatcher = FEBuilder.Matchers.id(fieldRegEx);
|
|
70
|
+
var vMatcher = [FEBuilder.Matchers.states(mState), vIdMatcher];
|
|
71
|
+
if (mState && mState.visible === false) {
|
|
72
|
+
// two possibilities for non-visible action: either visible property is false, or the control wasn't rendered at all
|
|
73
|
+
vMatcher = OpaBuilder.Matchers.some(vMatcher, OpaBuilder.Matchers.not(vIdMatcher));
|
|
74
|
+
vTest = vTest.has(vMatcher);
|
|
75
|
+
} else {
|
|
76
|
+
vTest = vTest
|
|
77
|
+
.has(vMatcher)
|
|
78
|
+
.hasProperties(mProperties)
|
|
79
|
+
.check(function (aSelect) {
|
|
80
|
+
sControlType = aSelect && aSelect[0] && aSelect[0].getMetadata().getName();
|
|
81
|
+
return (
|
|
82
|
+
aSelect.length === 1 &&
|
|
83
|
+
(sControlType === "sap.m.ComboBox" || sControlType === "sap.fe.core.controls.MassEditSelect")
|
|
84
|
+
);
|
|
85
|
+
})
|
|
86
|
+
.success(function (aSelect) {
|
|
87
|
+
var oSelect = aSelect[0],
|
|
88
|
+
oRet = OpaBuilder.create().hasId(oSelect.getId());
|
|
89
|
+
|
|
90
|
+
if (sControlType === "sap.m.ComboBox") {
|
|
91
|
+
oRet = oRet.hasProperties({ value: vValue });
|
|
92
|
+
} else if (sControlType === "sap.fe.core.controls.MassEditSelect") {
|
|
93
|
+
oRet = oRet.has(function (oSelectControl) {
|
|
94
|
+
return oSelectControl.getSelectedItem() ? oSelectControl.getSelectedItem().getText() === vValue : false;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return oRet
|
|
99
|
+
.description(
|
|
100
|
+
Utils.formatMessage(
|
|
101
|
+
"Value selection '{3}' found for '{0}' in mass edit dialog '{1}'",
|
|
102
|
+
sProperty,
|
|
103
|
+
that.getIdentifier(),
|
|
104
|
+
vValue.toString()
|
|
105
|
+
)
|
|
106
|
+
)
|
|
107
|
+
.execute();
|
|
108
|
+
})
|
|
109
|
+
.description(
|
|
110
|
+
Utils.formatMessage("Mass edit dropdown for '{0}' found in dialog '{1}'", sProperty, that.getIdentifier())
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return that.prepareResult(vTest.execute());
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Check the suggestions of the defined filter field.
|
|
119
|
+
*
|
|
120
|
+
* @param {string | sap.fe.test.api.MassEditFieldIdentifier} vMassEditFieldIdentifier The identifier for the mass edit field
|
|
121
|
+
* @param {string | sap.fe.test.api.MassEditValue} vMassEditValue The new target value
|
|
122
|
+
* @param {object} [mState] The state of the mass edit field
|
|
123
|
+
* @param {object} [mProperties] The Properties of the mass edit field
|
|
124
|
+
* @param {boolean} [bExists] Should the suggestion exist. Default is true
|
|
125
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
126
|
+
* @private
|
|
127
|
+
*/
|
|
128
|
+
DialogMassEditAssertions.prototype.iCheckFieldSuggestions = function (
|
|
129
|
+
vMassEditFieldIdentifier,
|
|
130
|
+
vMassEditValue,
|
|
131
|
+
mState,
|
|
132
|
+
mProperties,
|
|
133
|
+
bExists
|
|
134
|
+
) {
|
|
135
|
+
var that = this,
|
|
136
|
+
sProperty = Utils.isOfType(vMassEditFieldIdentifier, String) ? vMassEditFieldIdentifier : vMassEditFieldIdentifier.property,
|
|
137
|
+
vValue =
|
|
138
|
+
vMassEditValue &&
|
|
139
|
+
(Utils.isOfType(vMassEditValue, String) ? vMassEditValue : vMassEditValue.dropDownText || vMassEditValue.rawText),
|
|
140
|
+
fieldRegEx = new RegExp("^MED(.*)" + sProperty + "$", "gi");
|
|
141
|
+
|
|
142
|
+
return that.prepareResult(
|
|
143
|
+
FEBuilder.create(this.getOpaInstance())
|
|
144
|
+
.isDialogElement()
|
|
145
|
+
.hasId(fieldRegEx)
|
|
146
|
+
.hasState(mState)
|
|
147
|
+
.hasProperties(mProperties)
|
|
148
|
+
.check(function (aSelect) {
|
|
149
|
+
var oRet = false,
|
|
150
|
+
oSelect = aSelect && aSelect[0],
|
|
151
|
+
sControlType = aSelect && aSelect[0] && aSelect[0].getMetadata().getName();
|
|
152
|
+
|
|
153
|
+
if (
|
|
154
|
+
aSelect.length === 1 &&
|
|
155
|
+
(sControlType === "sap.m.ComboBox" || sControlType === "sap.fe.core.controls.MassEditSelect")
|
|
156
|
+
) {
|
|
157
|
+
var aItems = oSelect.getItems(),
|
|
158
|
+
iIndex = (aItems || []).findIndex(function (oItem) {
|
|
159
|
+
return oItem.getText() === vValue;
|
|
160
|
+
}),
|
|
161
|
+
bFound = iIndex != -1;
|
|
162
|
+
|
|
163
|
+
oRet = (bExists !== false) === bFound;
|
|
164
|
+
}
|
|
165
|
+
return oRet;
|
|
166
|
+
})
|
|
167
|
+
.description(Utils.formatMessage("Mass edit dropdown for '{0}' found in dialog '{1}'", sProperty, that.getIdentifier()))
|
|
168
|
+
.execute()
|
|
169
|
+
);
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
return DialogMassEditAssertions;
|
|
173
|
+
}
|
|
174
|
+
);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
sap.ui.define(
|
|
7
7
|
[],
|
|
8
|
-
function() {
|
|
8
|
+
function () {
|
|
9
9
|
"use strict";
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -69,7 +69,16 @@ sap.ui.define(
|
|
|
69
69
|
* @type {string}
|
|
70
70
|
* @public
|
|
71
71
|
*/
|
|
72
|
-
Create: "Create"
|
|
72
|
+
Create: "Create",
|
|
73
|
+
/**
|
|
74
|
+
* A dialog used for mass edit
|
|
75
|
+
*
|
|
76
|
+
* @name sap.fe.test.api.DialogType.MassEdit
|
|
77
|
+
* @constant
|
|
78
|
+
* @type {string}
|
|
79
|
+
* @private
|
|
80
|
+
*/
|
|
81
|
+
MassEdit: "MassEdit"
|
|
73
82
|
};
|
|
74
83
|
},
|
|
75
84
|
true
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ! SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
-
|
|
5
|
-
*/
|
|
6
|
-
sap.ui.define(
|
|
7
|
-
[],
|
|
8
|
-
function() {
|
|
9
|
-
"use strict";
|
|
10
|
-
|
|
11
|
-
var MassEditRuntime = {
|
|
12
|
-
handleMassEditChange: function(oSource, value) {
|
|
13
|
-
var aParams = oSource && oSource.getSelectedKey() && oSource.getSelectedKey().split("/");
|
|
14
|
-
var oDialog =
|
|
15
|
-
oSource &&
|
|
16
|
-
oSource
|
|
17
|
-
.getParent()
|
|
18
|
-
.getParent()
|
|
19
|
-
.getParent()
|
|
20
|
-
.getParent();
|
|
21
|
-
var oFieldsInfoData = oDialog && oDialog.getModel("fieldsInfo").getData();
|
|
22
|
-
var oDataObject;
|
|
23
|
-
if (aParams[0] === "Default") {
|
|
24
|
-
oDataObject = { keyValue: aParams[1], value: aParams[0] };
|
|
25
|
-
} else if (aParams[0] === "ClearFieldValue") {
|
|
26
|
-
oDataObject = { keyValue: aParams[1], value: "" };
|
|
27
|
-
} else if (!aParams) {
|
|
28
|
-
var sPropertyName = oSource.getId().substring(oSource.getId().lastIndexOf(":") + 1);
|
|
29
|
-
oDataObject = {
|
|
30
|
-
keyValue: sPropertyName,
|
|
31
|
-
value: value
|
|
32
|
-
};
|
|
33
|
-
} else {
|
|
34
|
-
var aRelatedField =
|
|
35
|
-
aParams[0] &&
|
|
36
|
-
oFieldsInfoData.values &&
|
|
37
|
-
oFieldsInfoData.values[aParams[0]].filter(function(oFieldData) {
|
|
38
|
-
return oFieldData.text === oSource.getValue();
|
|
39
|
-
});
|
|
40
|
-
oDataObject =
|
|
41
|
-
aRelatedField && aRelatedField[0] && aRelatedField[0].textInfo
|
|
42
|
-
? { keyValue: aParams[0], value: aRelatedField[0].textInfo.value }
|
|
43
|
-
: { keyValue: aParams[0], value: oSource.getValue() };
|
|
44
|
-
}
|
|
45
|
-
var bExistingElementindex = false;
|
|
46
|
-
for (var i = 0; i < oFieldsInfoData.results.length; i++) {
|
|
47
|
-
if (oFieldsInfoData.results[i].keyValue === oDataObject.keyValue) {
|
|
48
|
-
bExistingElementindex = i;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
if (bExistingElementindex !== false) {
|
|
52
|
-
oFieldsInfoData.results[bExistingElementindex] = oDataObject;
|
|
53
|
-
} else {
|
|
54
|
-
oFieldsInfoData.results.push(oDataObject);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
return MassEditRuntime;
|
|
60
|
-
},
|
|
61
|
-
/* bExport= */ true
|
|
62
|
-
);
|