@kontur.candy/tools 2.109.0 → 2.113.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +5 -1
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +10 -30
  4. package/distr/Common/CandyApiClient/CandyApiClientContext.js +26 -0
  5. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +60 -0
  6. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +51 -0
  7. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +50 -0
  8. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +90 -0
  9. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +56 -0
  10. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +12 -0
  11. package/distr/Common/CandyApiClient/{Types/CandyApiAuthentication.js → DigestApiClient/IDigestApiClient.js} +0 -0
  12. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +26 -0
  13. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +25 -0
  14. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +24 -0
  15. package/distr/Common/CandyApiClient/{Types/Picklist → DigestApiClient/Types}/DigestRequest.js +0 -0
  16. package/distr/Common/CandyApiClient/{Types/Picklist/PicklistServerResponses.js → DigestApiClient/Types/DigestResponse.js} +0 -0
  17. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +8 -50
  18. package/distr/Common/EndPoints.js +20 -0
  19. package/distr/Common/FormActionHandlers/ContextualActionNames.js +16 -0
  20. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +6 -0
  21. package/distr/Common/HttpClient/AuthenticationMode.js +35 -0
  22. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +27 -3
  23. package/distr/Common/HttpClient/HttpClient.js +66 -9
  24. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +6 -0
  25. package/distr/Common/IntRangeUtils.js +3 -12
  26. package/distr/Common/IterableUtils.js +17 -11
  27. package/distr/Common/ModelPath/ModelPath.js +16 -1
  28. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +41 -0
  29. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +6 -0
  30. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +13 -0
  31. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +82 -0
  32. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +137 -0
  33. package/distr/Common/NidusClient/INidusClient.js +16 -0
  34. package/distr/Common/NidusClient/NidusClientContext.js +47 -0
  35. package/distr/Common/NidusClient/NidusClientImpl.js +72 -0
  36. package/distr/Common/TypingUtils.js +24 -2
  37. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +4 -4
  38. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +15 -4
  39. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +12 -6
  40. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +2 -20
  41. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +19 -49
  42. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +29 -45
  43. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +11 -12
  44. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +7 -7
  45. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +20 -2
  46. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.map +1 -1
  47. package/distr/Tools/src/LocalServerFrontEndDist/index.js +3093 -387
  48. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  49. package/package.json +1 -1
  50. package/distr/Common/CandyApiClient/Types/Picklist/PicklistQueryFilter.js +0 -24
  51. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/ResourcesDirectory.js +0 -66
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kontur.candy/tools",
3
- "version": "2.109.0",
3
+ "version": "2.113.0",
4
4
  "description": "",
5
5
  "files": [
6
6
  "candy.js",
@@ -1,24 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.PicklistLogicalOperator = exports.PicklistFilterOperator = void 0;
7
- let PicklistFilterOperator;
8
- exports.PicklistFilterOperator = PicklistFilterOperator;
9
-
10
- (function (PicklistFilterOperator) {
11
- PicklistFilterOperator["Equal"] = "equal";
12
- PicklistFilterOperator["Substring"] = "substring";
13
- PicklistFilterOperator["Prefix"] = "prefix";
14
- PicklistFilterOperator["ContainsInList"] = "containsinlist";
15
- })(PicklistFilterOperator || (exports.PicklistFilterOperator = PicklistFilterOperator = {}));
16
-
17
- let PicklistLogicalOperator;
18
- exports.PicklistLogicalOperator = PicklistLogicalOperator;
19
-
20
- (function (PicklistLogicalOperator) {
21
- PicklistLogicalOperator["And"] = "and";
22
- PicklistLogicalOperator["Or"] = "or";
23
- })(PicklistLogicalOperator || (exports.PicklistLogicalOperator = PicklistLogicalOperator = {}));
24
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9QaWNrbGlzdC9QaWNrbGlzdFF1ZXJ5RmlsdGVyLnRzIl0sIm5hbWVzIjpbIlBpY2tsaXN0RmlsdGVyT3BlcmF0b3IiLCJQaWNrbGlzdExvZ2ljYWxPcGVyYXRvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBQVlBLHNCOzs7V0FBQUEsc0I7QUFBQUEsRUFBQUEsc0I7QUFBQUEsRUFBQUEsc0I7QUFBQUEsRUFBQUEsc0I7QUFBQUEsRUFBQUEsc0I7R0FBQUEsc0Isc0NBQUFBLHNCOztJQXVCQUMsdUI7OztXQUFBQSx1QjtBQUFBQSxFQUFBQSx1QjtBQUFBQSxFQUFBQSx1QjtHQUFBQSx1Qix1Q0FBQUEsdUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBQaWNrbGlzdEZpbHRlck9wZXJhdG9yIHtcbiAgICBFcXVhbCA9IFwiZXF1YWxcIixcbiAgICBTdWJzdHJpbmcgPSBcInN1YnN0cmluZ1wiLFxuICAgIFByZWZpeCA9IFwicHJlZml4XCIsXG4gICAgQ29udGFpbnNJbkxpc3QgPSBcImNvbnRhaW5zaW5saXN0XCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2xpc3RGaWx0ZXJDb2x1bW4ge1xuICAgIG9wZXJhdG9yOlxuICAgICAgICB8IFBpY2tsaXN0RmlsdGVyT3BlcmF0b3IuRXF1YWxcbiAgICAgICAgfCBQaWNrbGlzdEZpbHRlck9wZXJhdG9yLlN1YnN0cmluZ1xuICAgICAgICB8IFBpY2tsaXN0RmlsdGVyT3BlcmF0b3IuUHJlZml4XG4gICAgICAgIHwgUGlja2xpc3RGaWx0ZXJPcGVyYXRvci5Db250YWluc0luTGlzdDtcbiAgICBjb2x1bW46IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tsaXN0UXVlcnlGaWx0ZXIge1xuICAgIGZpbHRlcj86IFBpY2tsaXN0RmlsdGVyO1xuICAgIHNraXA/OiBudW1iZXI7XG4gICAgdGFrZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gUGlja2xpc3RMb2dpY2FsT3BlcmF0b3Ige1xuICAgIEFuZCA9IFwiYW5kXCIsXG4gICAgT3IgPSBcIm9yXCIsXG59XG5cbmV4cG9ydCB0eXBlIFBpY2tsaXN0RmlsdGVyID0gUGlja2xpc3RMb2dpY2FsRmlsdGVyIHwgUGlja2xpc3RGaWx0ZXJDb2x1bW47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2xpc3RMb2dpY2FsRmlsdGVyIHtcbiAgICBvcGVyYXRvcjogUGlja2xpc3RMb2dpY2FsT3BlcmF0b3I7XG4gICAgb3BlcmFuZHM6IFBpY2tsaXN0RmlsdGVyW107XG59XG4iXX0=
@@ -1,66 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ResourcesDirectory = void 0;
7
-
8
- var _fs = require("fs");
9
-
10
- var path = _interopRequireWildcard(require("path"));
11
-
12
- var _FsUtils = require("../../../../Commons/FsUtils");
13
-
14
- var _PathPattern = require("../../../../Commons/PathPattern");
15
-
16
- var _TypingUtils = require("../../../../../../Common/TypingUtils");
17
-
18
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
19
-
20
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
-
22
- class ResourcesDirectory {
23
- constructor(resourcesDirectory) {
24
- this.resourcesDirectory = void 0;
25
- this.resourcesDirectory = resourcesDirectory;
26
- }
27
-
28
- async getAllMetaFiles() {
29
- const pattern = new _PathPattern.PathPattern("metas/{gfv}.metas.json");
30
- const files = await (0, _FsUtils.globAsync)("metas/*.metas.json", {
31
- cwd: this.resourcesDirectory
32
- });
33
- return files.map(x => {
34
- var _pattern$execStrict$g;
35
-
36
- return {
37
- relativePath: x,
38
- gfv: (_pattern$execStrict$g = pattern.execStrict(x)["gfv"]) !== null && _pattern$execStrict$g !== void 0 ? _pattern$execStrict$g : (0, _TypingUtils.reject)()
39
- };
40
- });
41
- }
42
-
43
- getFLangNormalizeFile(gfv) {
44
- return (0, _fs.createReadStream)(path.join(this.resourcesDirectory, `normalize`, `${gfv}.normalize`), "utf-8");
45
- }
46
-
47
- getFormMetasPath(gfv) {
48
- return path.join(this.resourcesDirectory, "metas", `${gfv}.metas.json`);
49
- }
50
-
51
- getScriptContentAsStream(fileName) {
52
- return (0, _fs.createReadStream)(path.join(this.resourcesDirectory, `/public/scripts/${fileName}`), "utf-8");
53
- }
54
-
55
- getStyleContentAsStream(fileName) {
56
- return (0, _fs.createReadStream)(path.join(this.resourcesDirectory, `/public/styles/${fileName}`), "utf-8");
57
- }
58
-
59
- getImageContentAsStream(fileName) {
60
- return (0, _fs.createReadStream)(path.join(this.resourcesDirectory, `/public/images/${fileName}`));
61
- }
62
-
63
- }
64
-
65
- exports.ResourcesDirectory = ResourcesDirectory;
66
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9EaXJlY3Rvcmllcy9SZXNvdXJjZXNEaXJlY3RvcnkudHMiXSwibmFtZXMiOlsiUmVzb3VyY2VzRGlyZWN0b3J5IiwiY29uc3RydWN0b3IiLCJyZXNvdXJjZXNEaXJlY3RvcnkiLCJnZXRBbGxNZXRhRmlsZXMiLCJwYXR0ZXJuIiwiUGF0aFBhdHRlcm4iLCJmaWxlcyIsImN3ZCIsIm1hcCIsIngiLCJyZWxhdGl2ZVBhdGgiLCJnZnYiLCJleGVjU3RyaWN0IiwiZ2V0RkxhbmdOb3JtYWxpemVGaWxlIiwicGF0aCIsImpvaW4iLCJnZXRGb3JtTWV0YXNQYXRoIiwiZ2V0U2NyaXB0Q29udGVudEFzU3RyZWFtIiwiZmlsZU5hbWUiLCJnZXRTdHlsZUNvbnRlbnRBc1N0cmVhbSIsImdldEltYWdlQ29udGVudEFzU3RyZWFtIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7OztBQU9PLE1BQU1BLGtCQUFOLENBQXlCO0FBR3JCQyxFQUFBQSxXQUFXLENBQUNDLGtCQUFELEVBQTZCO0FBQUEsU0FGOUJBLGtCQUU4QjtBQUMzQyxTQUFLQSxrQkFBTCxHQUEwQkEsa0JBQTFCO0FBQ0g7O0FBRTJCLFFBQWZDLGVBQWUsR0FBZ0M7QUFDeEQsVUFBTUMsT0FBTyxHQUFHLElBQUlDLHdCQUFKLENBQWdCLHdCQUFoQixDQUFoQjtBQUNBLFVBQU1DLEtBQUssR0FBRyxNQUFNLHdCQUFVLG9CQUFWLEVBQWdDO0FBQUVDLE1BQUFBLEdBQUcsRUFBRSxLQUFLTDtBQUFaLEtBQWhDLENBQXBCO0FBQ0EsV0FBT0ksS0FBSyxDQUFDRSxHQUFOLENBQVVDLENBQUM7QUFBQTs7QUFBQSxhQUFLO0FBQ25CQyxRQUFBQSxZQUFZLEVBQUVELENBREs7QUFFbkJFLFFBQUFBLEdBQUcsMkJBQUVQLE9BQU8sQ0FBQ1EsVUFBUixDQUFtQkgsQ0FBbkIsRUFBc0IsS0FBdEIsQ0FBRix5RUFBa0M7QUFGbEIsT0FBTDtBQUFBLEtBQVgsQ0FBUDtBQUlIOztBQUVNSSxFQUFBQSxxQkFBcUIsQ0FBQ0YsR0FBRCxFQUFxQztBQUM3RCxXQUFPLDBCQUFpQkcsSUFBSSxDQUFDQyxJQUFMLENBQVUsS0FBS2Isa0JBQWYsRUFBb0MsV0FBcEMsRUFBaUQsR0FBRVMsR0FBSSxZQUF2RCxDQUFqQixFQUFzRixPQUF0RixDQUFQO0FBQ0g7O0FBRU1LLEVBQUFBLGdCQUFnQixDQUFDTCxHQUFELEVBQXNCO0FBQ3pDLFdBQU9HLElBQUksQ0FBQ0MsSUFBTCxDQUFVLEtBQUtiLGtCQUFmLEVBQW1DLE9BQW5DLEVBQTZDLEdBQUVTLEdBQUksYUFBbkQsQ0FBUDtBQUNIOztBQUVNTSxFQUFBQSx3QkFBd0IsQ0FBQ0MsUUFBRCxFQUEwQztBQUNyRSxXQUFPLDBCQUFpQkosSUFBSSxDQUFDQyxJQUFMLENBQVUsS0FBS2Isa0JBQWYsRUFBb0MsbUJBQWtCZ0IsUUFBUyxFQUEvRCxDQUFqQixFQUFvRixPQUFwRixDQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLHVCQUF1QixDQUFDRCxRQUFELEVBQTBDO0FBQ3BFLFdBQU8sMEJBQWlCSixJQUFJLENBQUNDLElBQUwsQ0FBVSxLQUFLYixrQkFBZixFQUFvQyxrQkFBaUJnQixRQUFTLEVBQTlELENBQWpCLEVBQW1GLE9BQW5GLENBQVA7QUFDSDs7QUFFTUUsRUFBQUEsdUJBQXVCLENBQUNGLFFBQUQsRUFBMEM7QUFDcEUsV0FBTywwQkFBaUJKLElBQUksQ0FBQ0MsSUFBTCxDQUFVLEtBQUtiLGtCQUFmLEVBQW9DLGtCQUFpQmdCLFFBQVMsRUFBOUQsQ0FBakIsQ0FBUDtBQUNIOztBQWxDMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL0ZzVXRpbHNcIjtcbmltcG9ydCB7IFBhdGhQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvUGF0aFBhdHRlcm5cIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcblxuaW50ZXJmYWNlIFJlc291cmNlRmlsZUluZm8ge1xuICAgIHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuICAgIGdmdjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VzRGlyZWN0b3J5IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHJlc291cmNlc0RpcmVjdG9yeTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucmVzb3VyY2VzRGlyZWN0b3J5ID0gcmVzb3VyY2VzRGlyZWN0b3J5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxNZXRhRmlsZXMoKTogUHJvbWlzZTxSZXNvdXJjZUZpbGVJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBQYXRoUGF0dGVybihcIm1ldGFzL3tnZnZ9Lm1ldGFzLmpzb25cIik7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYkFzeW5jKFwibWV0YXMvKi5tZXRhcy5qc29uXCIsIHsgY3dkOiB0aGlzLnJlc291cmNlc0RpcmVjdG9yeSB9KTtcbiAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCh4ID0+ICh7XG4gICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHgsXG4gICAgICAgICAgICBnZnY6IHBhdHRlcm4uZXhlY1N0cmljdCh4KVtcImdmdlwiXSA/PyByZWplY3QoKSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGTGFuZ05vcm1hbGl6ZUZpbGUoZ2Z2OiBzdHJpbmcpOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0ge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmVhZFN0cmVhbShwYXRoLmpvaW4odGhpcy5yZXNvdXJjZXNEaXJlY3RvcnksIGBub3JtYWxpemVgLCBgJHtnZnZ9Lm5vcm1hbGl6ZWApLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtTWV0YXNQYXRoKGdmdjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHBhdGguam9pbih0aGlzLnJlc291cmNlc0RpcmVjdG9yeSwgXCJtZXRhc1wiLCBgJHtnZnZ9Lm1ldGFzLmpzb25gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2NyaXB0Q29udGVudEFzU3RyZWFtKGZpbGVOYW1lOiBzdHJpbmcpOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0ge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmVhZFN0cmVhbShwYXRoLmpvaW4odGhpcy5yZXNvdXJjZXNEaXJlY3RvcnksIGAvcHVibGljL3NjcmlwdHMvJHtmaWxlTmFtZX1gKSwgXCJ1dGYtOFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3R5bGVDb250ZW50QXNTdHJlYW0oZmlsZU5hbWU6IHN0cmluZyk6IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSZWFkU3RyZWFtKHBhdGguam9pbih0aGlzLnJlc291cmNlc0RpcmVjdG9yeSwgYC9wdWJsaWMvc3R5bGVzLyR7ZmlsZU5hbWV9YCksIFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEltYWdlQ29udGVudEFzU3RyZWFtKGZpbGVOYW1lOiBzdHJpbmcpOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0ge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmVhZFN0cmVhbShwYXRoLmpvaW4odGhpcy5yZXNvdXJjZXNEaXJlY3RvcnksIGAvcHVibGljL2ltYWdlcy8ke2ZpbGVOYW1lfWApKTtcbiAgICB9XG59XG4iXX0=