propagate-cli 1.12.7 → 1.12.9

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 (78) hide show
  1. package/lib/abbreviations.js +10 -10
  2. package/lib/action/addDirectory.js +9 -9
  3. package/lib/action/addForcedDependencyRelation.js +13 -13
  4. package/lib/action/addIgnoredDependency.js +8 -8
  5. package/lib/action/help.js +51 -2
  6. package/lib/action/initialise.js +4 -4
  7. package/lib/action/listDirectories.js +12 -36
  8. package/lib/action/listForcedDependencyRelations.js +8 -8
  9. package/lib/action/listIgnoredDependencies.js +11 -34
  10. package/lib/action/propagate.js +19 -19
  11. package/lib/action/removeDirectory.js +11 -11
  12. package/lib/action/removeForcedDependencyRelation.js +11 -11
  13. package/lib/action/removeIgnoredDependency.js +11 -11
  14. package/lib/action/setShellCommands.js +13 -13
  15. package/lib/action/version.js +6 -6
  16. package/lib/changeDirectory.js +9 -9
  17. package/lib/commands.js +15 -15
  18. package/lib/configuration/version_1_10.js +6 -6
  19. package/lib/configuration/version_1_11.js +22 -22
  20. package/lib/configuration/version_1_3.js +5 -5
  21. package/lib/configuration/version_1_7.js +5 -5
  22. package/lib/configuration/version_1_9.js +9 -9
  23. package/lib/configuration.js +37 -75
  24. package/lib/constants.js +13 -13
  25. package/lib/defaults.js +12 -12
  26. package/lib/descriptions.js +20 -20
  27. package/lib/diff/map.js +62 -116
  28. package/lib/diff/semver.js +33 -78
  29. package/lib/diff/version.js +34 -76
  30. package/lib/diff.js +106 -196
  31. package/lib/main.js +20 -20
  32. package/lib/messages.js +45 -45
  33. package/lib/operation/checkDevDependencies.js +9 -9
  34. package/lib/operation/createDiffs.js +14 -37
  35. package/lib/operation/createReleaseGraph.js +9 -9
  36. package/lib/operation/createReleaseMap.js +5 -5
  37. package/lib/operation/createSubDirectoryMap.js +17 -41
  38. package/lib/operation/createSubDirectoryPath.js +6 -6
  39. package/lib/operation/dryRun.js +4 -4
  40. package/lib/operation/prompt/addDirectory.js +15 -15
  41. package/lib/operation/prompt/addForcedDependency.js +15 -15
  42. package/lib/operation/prompt/addForcedDependent.js +15 -15
  43. package/lib/operation/prompt/addIgnoredDependency.js +15 -15
  44. package/lib/operation/prompt/build.js +18 -18
  45. package/lib/operation/prompt/git.js +18 -18
  46. package/lib/operation/prompt/install.js +18 -18
  47. package/lib/operation/prompt/poll.js +18 -18
  48. package/lib/operation/prompt/publish.js +21 -21
  49. package/lib/operation/prompt/removeDirectory.js +14 -14
  50. package/lib/operation/prompt/removeForcedDependencyRelation.js +14 -14
  51. package/lib/operation/prompt/removeIgnoredDependency.js +14 -14
  52. package/lib/operation/prompt/save.js +21 -21
  53. package/lib/operation/prompt/setBuildShellCommands.js +15 -15
  54. package/lib/operation/prompt/setGitShellCommands.js +15 -15
  55. package/lib/operation/prompt/setInstallShellCommands.js +15 -15
  56. package/lib/operation/prompt/setPollShellCommands.js +15 -15
  57. package/lib/operation/prompt/setPublishShellCommands.js +15 -15
  58. package/lib/operation/propagateRelease.js +25 -25
  59. package/lib/operation/retrieveRelease.js +5 -5
  60. package/lib/operation/saveAndApplyDiff.js +14 -14
  61. package/lib/operation/saveAndApplyDiffs.js +4 -4
  62. package/lib/options.js +6 -6
  63. package/lib/prepare.js +6 -6
  64. package/lib/release.js +153 -234
  65. package/lib/releaseGraph.js +91 -148
  66. package/lib/releaseMap.js +52 -95
  67. package/lib/utilities/console.js +14 -38
  68. package/lib/utilities/dependency.js +4 -4
  69. package/lib/utilities/operation.js +10 -10
  70. package/lib/utilities/packageJSON.js +11 -11
  71. package/lib/utilities/path.js +3 -3
  72. package/lib/utilities/propagate.js +19 -19
  73. package/lib/utilities/shell.js +33 -33
  74. package/lib/utilities/terminal.js +2 -2
  75. package/lib/version.js +57 -114
  76. package/lib/versions.js +7 -7
  77. package/package.json +9 -4
  78. package/.swcrc +0 -5
@@ -8,159 +8,102 @@ Object.defineProperty(exports, "default", {
8
8
  return ReleaseGraph;
9
9
  }
10
10
  });
11
- var _occamdirectedgraphs = require("occam-directed-graphs");
12
- function _class_call_check(instance, Constructor) {
13
- if (!(instance instanceof Constructor)) {
14
- throw new TypeError("Cannot call a class as a function");
15
- }
16
- }
17
- function _defineProperties(target, props) {
18
- for(var i = 0; i < props.length; i++){
19
- var descriptor = props[i];
20
- descriptor.enumerable = descriptor.enumerable || false;
21
- descriptor.configurable = true;
22
- if ("value" in descriptor) descriptor.writable = true;
23
- Object.defineProperty(target, descriptor.key, descriptor);
24
- }
25
- }
26
- function _create_class(Constructor, protoProps, staticProps) {
27
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
28
- if (staticProps) _defineProperties(Constructor, staticProps);
29
- return Constructor;
30
- }
31
- var ReleaseGraph = /*#__PURE__*/ function() {
32
- function ReleaseGraph(dependencyDirectedGraph, devDependencyDirectedGraph) {
33
- _class_call_check(this, ReleaseGraph);
11
+ const _occamdirectedgraphs = require("occam-directed-graphs");
12
+ class ReleaseGraph {
13
+ constructor(dependencyDirectedGraph, devDependencyDirectedGraph){
34
14
  this.dependencyDirectedGraph = dependencyDirectedGraph;
35
15
  this.devDependencyDirectedGraph = devDependencyDirectedGraph;
36
16
  }
37
- _create_class(ReleaseGraph, [
38
- {
39
- key: "getDependencyDirectedGraph",
40
- value: function getDependencyDirectedGraph() {
41
- return this.dependencyDirectedGraph;
42
- }
43
- },
44
- {
45
- key: "getDevDependencyDirectedGraph",
46
- value: function getDevDependencyDirectedGraph() {
47
- return this.devDependencyDirectedGraph;
48
- }
49
- },
50
- {
51
- key: "isCyclicDependencyPresent",
52
- value: function isCyclicDependencyPresent() {
53
- var cyclesPresent = this.dependencyDirectedGraph.areCyclesPresent(), cyclicDependencyPresent = cyclesPresent; ///
54
- return cyclicDependencyPresent;
55
- }
56
- },
57
- {
58
- key: "isCyclicDevDependencyPresent",
59
- value: function isCyclicDevDependencyPresent() {
60
- var cyclesPresent = this.devDependencyDirectedGraph.areCyclesPresent(), cyclicDevDependencyPresent = cyclesPresent; ///
61
- return cyclicDevDependencyPresent;
62
- }
63
- },
64
- {
65
- key: "getCyclicDependencySubDirectoryPaths",
66
- value: function getCyclicDependencySubDirectoryPaths() {
67
- var firstCycle = this.dependencyDirectedGraph.getFirstCycle(), vertexNames = firstCycle.getVertexNames(), cyclicDependencySubDirectoryPaths = vertexNames; ///
68
- return cyclicDependencySubDirectoryPaths;
69
- }
70
- },
71
- {
72
- key: "getCyclicDevDependencySubDirectoryPaths",
73
- value: function getCyclicDevDependencySubDirectoryPaths() {
74
- var firstCycle = this.devDependencyDirectedGraph.getFirstCycle(), vertexNames = firstCycle.getVertexNames(), cyclicDevDependencySubDirectoryPaths = vertexNames; ///
75
- return cyclicDevDependencySubDirectoryPaths;
76
- }
77
- },
78
- {
79
- key: "getOrderedDependencySubDirectoryPaths",
80
- value: function getOrderedDependencySubDirectoryPaths() {
81
- var dependencyDirectedGraphOrderedVertexNames = this.dependencyDirectedGraph.getOrderedVertexNames(), orderedDependencySubDirectoryPaths = dependencyDirectedGraphOrderedVertexNames; ///
82
- return orderedDependencySubDirectoryPaths;
83
- }
84
- },
85
- {
86
- key: "getOrderedDevDependencySubDirectoryPaths",
87
- value: function getOrderedDevDependencySubDirectoryPaths() {
88
- var dependencyDirectedGraphOrderedVertexNames = this.devDependencyDirectedGraph.getOrderedVertexNames(), orderedDevDependencySubDirectoryPaths = dependencyDirectedGraphOrderedVertexNames; ///
89
- return orderedDevDependencySubDirectoryPaths;
17
+ getDependencyDirectedGraph() {
18
+ return this.dependencyDirectedGraph;
19
+ }
20
+ getDevDependencyDirectedGraph() {
21
+ return this.devDependencyDirectedGraph;
22
+ }
23
+ isCyclicDependencyPresent() {
24
+ const cyclesPresent = this.dependencyDirectedGraph.areCyclesPresent(), cyclicDependencyPresent = cyclesPresent; ///
25
+ return cyclicDependencyPresent;
26
+ }
27
+ isCyclicDevDependencyPresent() {
28
+ const cyclesPresent = this.devDependencyDirectedGraph.areCyclesPresent(), cyclicDevDependencyPresent = cyclesPresent; ///
29
+ return cyclicDevDependencyPresent;
30
+ }
31
+ getCyclicDependencySubDirectoryPaths() {
32
+ const firstCycle = this.dependencyDirectedGraph.getFirstCycle(), vertexNames = firstCycle.getVertexNames(), cyclicDependencySubDirectoryPaths = vertexNames; ///
33
+ return cyclicDependencySubDirectoryPaths;
34
+ }
35
+ getCyclicDevDependencySubDirectoryPaths() {
36
+ const firstCycle = this.devDependencyDirectedGraph.getFirstCycle(), vertexNames = firstCycle.getVertexNames(), cyclicDevDependencySubDirectoryPaths = vertexNames; ///
37
+ return cyclicDevDependencySubDirectoryPaths;
38
+ }
39
+ getOrderedDependencySubDirectoryPaths() {
40
+ const dependencyDirectedGraphOrderedVertexNames = this.dependencyDirectedGraph.getOrderedVertexNames(), orderedDependencySubDirectoryPaths = dependencyDirectedGraphOrderedVertexNames; ///
41
+ return orderedDependencySubDirectoryPaths;
42
+ }
43
+ getOrderedDevDependencySubDirectoryPaths() {
44
+ const dependencyDirectedGraphOrderedVertexNames = this.devDependencyDirectedGraph.getOrderedVertexNames(), orderedDevDependencySubDirectoryPaths = dependencyDirectedGraphOrderedVertexNames; ///
45
+ return orderedDevDependencySubDirectoryPaths;
46
+ }
47
+ retrieveDependentReleases(release, releaseMap) {
48
+ const subDirectoryPath = release.getSubDirectoryPath(), vertexName = subDirectoryPath, immediateSuccessorVertexNames = this.dependencyDirectedGraph.getImmediateSuccessorVertexNamesByVertexName(vertexName), dependentSubDirectoryPaths = immediateSuccessorVertexNames, dependentReleases = dependentSubDirectoryPaths.map((dependentSubDirectoryPath)=>{
49
+ const dependentRelease = releaseMap.retrieveRelease(dependentSubDirectoryPath);
50
+ return dependentRelease;
51
+ });
52
+ return dependentReleases;
53
+ }
54
+ retrieveDevDependentReleases(release, releaseMap) {
55
+ const subDirectoryPath = release.getSubDirectoryPath(), vertexName = subDirectoryPath, immediateSuccessorVertexNames = this.devDependencyDirectedGraph.getImmediateSuccessorVertexNamesByVertexName(vertexName), devDependentSubDirectoryPaths = immediateSuccessorVertexNames, devDependentReleases = devDependentSubDirectoryPaths.map((devDependentSubDirectoryPath)=>{
56
+ const devDependentRelease = releaseMap.retrieveRelease(devDependentSubDirectoryPath);
57
+ return devDependentRelease;
58
+ });
59
+ return devDependentReleases;
60
+ }
61
+ static fromReleaseMapSubDirectoryMapAndForcedDependencyRelations(releaseMap, subDirectoryMap, forcedDependencyRelations) {
62
+ const dependencyDirectedGraph = _occamdirectedgraphs.DirectedGraph.fromNothing(), devDependencyDirectedGraph = _occamdirectedgraphs.DirectedGraph.fromNothing(), releaseNames = releaseMap.getNames(), subDirectoryPaths = releaseMap.getSubDirectoryPaths(), nameToSubDirectoryPathMap = releaseMap.getNameToSubDirectoryPathMap(), vertexNames = subDirectoryPaths; ///
63
+ dependencyDirectedGraph.addVertexesByVertexNames(vertexNames);
64
+ devDependencyDirectedGraph.addVertexesByVertexNames(vertexNames);
65
+ subDirectoryPaths.forEach((subDirectoryPath)=>{
66
+ const release = releaseMap.retrieveRelease(subDirectoryPath), releaseDependencyNames = release.getDependencyNames(), releaseDevDependencyNames = release.getDevDependencyNames();
67
+ releaseDependencyNames.forEach((releaseDependencyName)=>{
68
+ const releaseNamesIncludesReleaseDependencyName = releaseNames.includes(releaseDependencyName);
69
+ if (releaseNamesIncludesReleaseDependencyName) {
70
+ const dependencySubDirectoryPath = nameToSubDirectoryPathMap[releaseDependencyName], sourceVertexName = dependencySubDirectoryPath, targetVertexName = subDirectoryPath; ///
71
+ dependencyDirectedGraph.addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
72
+ }
73
+ });
74
+ releaseDevDependencyNames.forEach((releaseDevDependencyName)=>{
75
+ const releaseNamesIncludesReleaseDevDependencyName = releaseNames.includes(releaseDevDependencyName);
76
+ if (releaseNamesIncludesReleaseDevDependencyName) {
77
+ const devDependencySubDirectoryPath = nameToSubDirectoryPathMap[releaseDevDependencyName], sourceVertexName = devDependencySubDirectoryPath, targetVertexName = subDirectoryPath; ///
78
+ devDependencyDirectedGraph.addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
79
+ }
80
+ });
81
+ });
82
+ forcedDependencyRelations.forEach((forcedDependencyRelation)=>{
83
+ const { dependent } = forcedDependencyRelation, dependentSubDirectoryName = dependent, dependentSubDirectoryPath = subDirectoryMap[dependentSubDirectoryName], dependentRelease = releaseMap.retrieveRelease(dependentSubDirectoryPath);
84
+ if (dependentRelease === null) {
85
+ console.log(`The '${dependent}' forced dependent does not exist.`);
86
+ return;
90
87
  }
91
- },
92
- {
93
- key: "retrieveDependentReleases",
94
- value: function retrieveDependentReleases(release, releaseMap) {
95
- var subDirectoryPath = release.getSubDirectoryPath(), vertexName = subDirectoryPath, immediateSuccessorVertexNames = this.dependencyDirectedGraph.getImmediateSuccessorVertexNamesByVertexName(vertexName), dependentSubDirectoryPaths = immediateSuccessorVertexNames, dependentReleases = dependentSubDirectoryPaths.map(function(dependentSubDirectoryPath) {
96
- var dependentRelease = releaseMap.retrieveRelease(dependentSubDirectoryPath);
97
- return dependentRelease;
98
- });
99
- return dependentReleases;
88
+ const { dependency } = forcedDependencyRelation, dependencySubDirectoryName = dependency, dependencySubDirectoryPath = subDirectoryMap[dependencySubDirectoryName], dependencyRelease = releaseMap.retrieveRelease(dependencySubDirectoryPath);
89
+ if (dependencyRelease === null) {
90
+ console.log(`The '${dependency}' forced dependency does not exist.`);
91
+ return;
100
92
  }
101
- },
102
- {
103
- key: "retrieveDevDependentReleases",
104
- value: function retrieveDevDependentReleases(release, releaseMap) {
105
- var subDirectoryPath = release.getSubDirectoryPath(), vertexName = subDirectoryPath, immediateSuccessorVertexNames = this.devDependencyDirectedGraph.getImmediateSuccessorVertexNamesByVertexName(vertexName), devDependentSubDirectoryPaths = immediateSuccessorVertexNames, devDependentReleases = devDependentSubDirectoryPaths.map(function(devDependentSubDirectoryPath) {
106
- var devDependentRelease = releaseMap.retrieveRelease(devDependentSubDirectoryPath);
107
- return devDependentRelease;
108
- });
109
- return devDependentReleases;
93
+ const sourceVertexName = dependencySubDirectoryPath, targetVertexName = dependentSubDirectoryPath, devDependencyDirectedGraphEdgePresent = devDependencyDirectedGraph.isEdgePresentBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName), dependencyDirectedGraphEdgePresent = dependencyDirectedGraph.isEdgePresentBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName), devDependencyRelationPresent = devDependencyDirectedGraphEdgePresent, dependencyRelationPresent = dependencyDirectedGraphEdgePresent; ///
94
+ if (dependencyRelationPresent) {
95
+ console.log(`The '${dependency}' -> '${dependent}' dependency relation is present and therefore cannot be forced.`);
96
+ return;
110
97
  }
111
- }
112
- ], [
113
- {
114
- key: "fromReleaseMapSubDirectoryMapAndForcedDependencyRelations",
115
- value: function fromReleaseMapSubDirectoryMapAndForcedDependencyRelations(releaseMap, subDirectoryMap, forcedDependencyRelations) {
116
- var dependencyDirectedGraph = _occamdirectedgraphs.DirectedGraph.fromNothing(), devDependencyDirectedGraph = _occamdirectedgraphs.DirectedGraph.fromNothing(), releaseNames = releaseMap.getNames(), subDirectoryPaths = releaseMap.getSubDirectoryPaths(), nameToSubDirectoryPathMap = releaseMap.getNameToSubDirectoryPathMap(), vertexNames = subDirectoryPaths; ///
117
- dependencyDirectedGraph.addVertexesByVertexNames(vertexNames);
118
- devDependencyDirectedGraph.addVertexesByVertexNames(vertexNames);
119
- subDirectoryPaths.forEach(function(subDirectoryPath) {
120
- var release = releaseMap.retrieveRelease(subDirectoryPath), releaseDependencyNames = release.getDependencyNames(), releaseDevDependencyNames = release.getDevDependencyNames();
121
- releaseDependencyNames.forEach(function(releaseDependencyName) {
122
- var releaseNamesIncludesReleaseDependencyName = releaseNames.includes(releaseDependencyName);
123
- if (releaseNamesIncludesReleaseDependencyName) {
124
- var dependencySubDirectoryPath = nameToSubDirectoryPathMap[releaseDependencyName], sourceVertexName = dependencySubDirectoryPath, targetVertexName = subDirectoryPath; ///
125
- dependencyDirectedGraph.addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
126
- }
127
- });
128
- releaseDevDependencyNames.forEach(function(releaseDevDependencyName) {
129
- var releaseNamesIncludesReleaseDevDependencyName = releaseNames.includes(releaseDevDependencyName);
130
- if (releaseNamesIncludesReleaseDevDependencyName) {
131
- var devDependencySubDirectoryPath = nameToSubDirectoryPathMap[releaseDevDependencyName], sourceVertexName = devDependencySubDirectoryPath, targetVertexName = subDirectoryPath; ///
132
- devDependencyDirectedGraph.addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
133
- }
134
- });
135
- });
136
- forcedDependencyRelations.forEach(function(forcedDependencyRelation) {
137
- var dependent = forcedDependencyRelation.dependent, dependentSubDirectoryName = dependent, dependentSubDirectoryPath = subDirectoryMap[dependentSubDirectoryName], dependentRelease = releaseMap.retrieveRelease(dependentSubDirectoryPath);
138
- if (dependentRelease === null) {
139
- console.log("The '".concat(dependent, "' forced dependent does not exist."));
140
- return;
141
- }
142
- var dependency = forcedDependencyRelation.dependency, dependencySubDirectoryName = dependency, dependencySubDirectoryPath = subDirectoryMap[dependencySubDirectoryName], dependencyRelease = releaseMap.retrieveRelease(dependencySubDirectoryPath);
143
- if (dependencyRelease === null) {
144
- console.log("The '".concat(dependency, "' forced dependency does not exist."));
145
- return;
146
- }
147
- var sourceVertexName = dependencySubDirectoryPath, targetVertexName = dependentSubDirectoryPath, devDependencyDirectedGraphEdgePresent = devDependencyDirectedGraph.isEdgePresentBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName), dependencyDirectedGraphEdgePresent = dependencyDirectedGraph.isEdgePresentBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName), devDependencyRelationPresent = devDependencyDirectedGraphEdgePresent, dependencyRelationPresent = dependencyDirectedGraphEdgePresent; ///
148
- if (dependencyRelationPresent) {
149
- console.log("The '".concat(dependency, "' -> '").concat(dependent, "' dependency relation is present and therefore cannot be forced."));
150
- return;
151
- }
152
- if (!devDependencyRelationPresent) {
153
- console.log("The '".concat(dependency, "' -> '").concat(dependent, "' developer dependency relation is not present and therefore cannot be forced."));
154
- return;
155
- }
156
- dependencyDirectedGraph.addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
157
- });
158
- var releaseGraph = new ReleaseGraph(dependencyDirectedGraph, devDependencyDirectedGraph);
159
- return releaseGraph;
98
+ if (!devDependencyRelationPresent) {
99
+ console.log(`The '${dependency}' -> '${dependent}' developer dependency relation is not present and therefore cannot be forced.`);
100
+ return;
160
101
  }
161
- }
162
- ]);
163
- return ReleaseGraph;
164
- }();
102
+ dependencyDirectedGraph.addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
103
+ });
104
+ const releaseGraph = new ReleaseGraph(dependencyDirectedGraph, devDependencyDirectedGraph);
105
+ return releaseGraph;
106
+ }
107
+ }
165
108
 
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWxlYXNlR3JhcGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IERpcmVjdGVkR3JhcGggfSBmcm9tIFwib2NjYW0tZGlyZWN0ZWQtZ3JhcGhzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbGVhc2VHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLCBkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCkge1xuICAgIHRoaXMuZGVwZW5kZW5jeURpcmVjdGVkR3JhcGggPSBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaDtcbiAgICB0aGlzLmRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoID0gZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGg7XG4gIH1cblxuICBnZXREZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaDtcbiAgfVxuXG4gIGdldERldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoKCkge1xuICAgIHJldHVybiB0aGlzLmRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoO1xuICB9XG5cbiAgaXNDeWNsaWNEZXBlbmRlbmN5UHJlc2VudCgpIHtcbiAgICBjb25zdCBjeWNsZXNQcmVzZW50ID0gdGhpcy5kZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5hcmVDeWNsZXNQcmVzZW50KCksXG4gICAgICAgICAgY3ljbGljRGVwZW5kZW5jeVByZXNlbnQgPSBjeWNsZXNQcmVzZW50OyAgLy8vXG5cbiAgICByZXR1cm4gY3ljbGljRGVwZW5kZW5jeVByZXNlbnQ7XG4gIH1cblxuICBpc0N5Y2xpY0RldkRlcGVuZGVuY3lQcmVzZW50KCkge1xuICAgIGNvbnN0IGN5Y2xlc1ByZXNlbnQgPSB0aGlzLmRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLmFyZUN5Y2xlc1ByZXNlbnQoKSxcbiAgICAgICAgICBjeWNsaWNEZXZEZXBlbmRlbmN5UHJlc2VudCA9IGN5Y2xlc1ByZXNlbnQ7ICAvLy9cblxuICAgIHJldHVybiBjeWNsaWNEZXZEZXBlbmRlbmN5UHJlc2VudDtcbiAgfVxuXG4gIGdldEN5Y2xpY0RlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBmaXJzdEN5Y2xlID0gdGhpcy5kZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5nZXRGaXJzdEN5Y2xlKCksXG4gICAgICAgICAgdmVydGV4TmFtZXMgPSBmaXJzdEN5Y2xlLmdldFZlcnRleE5hbWVzKCksXG4gICAgICAgICAgY3ljbGljRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzID0gdmVydGV4TmFtZXM7ICAvLy9cblxuICAgIHJldHVybiBjeWNsaWNEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aHM7XG4gIH1cblxuICBnZXRDeWNsaWNEZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aHMoKSB7XG4gICAgY29uc3QgZmlyc3RDeWNsZSA9IHRoaXMuZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0Rmlyc3RDeWNsZSgpLFxuICAgICAgICAgIHZlcnRleE5hbWVzID0gZmlyc3RDeWNsZS5nZXRWZXJ0ZXhOYW1lcygpLFxuICAgICAgICAgIGN5Y2xpY0RldkRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyA9IHZlcnRleE5hbWVzOyAgLy8vXG5cbiAgICByZXR1cm4gY3ljbGljRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzO1xuICB9XG5cbiAgZ2V0T3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaE9yZGVyZWRWZXJ0ZXhOYW1lcyA9IHRoaXMuZGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0T3JkZXJlZFZlcnRleE5hbWVzKCksXG4gICAgICAgICAgb3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyA9IGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoT3JkZXJlZFZlcnRleE5hbWVzOyAvLy9cblxuICAgIHJldHVybiBvcmRlcmVkRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzO1xuICB9XG5cbiAgZ2V0T3JkZXJlZERldkRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaE9yZGVyZWRWZXJ0ZXhOYW1lcyA9IHRoaXMuZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0T3JkZXJlZFZlcnRleE5hbWVzKCksXG4gICAgICAgICAgb3JkZXJlZERldkRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyA9IGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoT3JkZXJlZFZlcnRleE5hbWVzOyAvLy9cblxuICAgIHJldHVybiBvcmRlcmVkRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzO1xuICB9XG5cbiAgcmV0cmlldmVEZXBlbmRlbnRSZWxlYXNlcyhyZWxlYXNlLCByZWxlYXNlTWFwKSB7XG4gICAgY29uc3Qgc3ViRGlyZWN0b3J5UGF0aCA9IHJlbGVhc2UuZ2V0U3ViRGlyZWN0b3J5UGF0aCgpLFxuICAgICAgICAgIHZlcnRleE5hbWUgPSBzdWJEaXJlY3RvcnlQYXRoLCAgLy8vXG4gICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMgPSB0aGlzLmRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLmdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpLFxuICAgICAgICAgIGRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGhzID0gaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMsXG4gICAgICAgICAgZGVwZW5kZW50UmVsZWFzZXMgPSBkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRocy5tYXAoKGRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVudFJlbGVhc2UgPSByZWxlYXNlTWFwLnJldHJpZXZlUmVsZWFzZShkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRoKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlcGVuZGVudFJlbGVhc2U7XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gZGVwZW5kZW50UmVsZWFzZXM7XG4gIH1cblxuICByZXRyaWV2ZURldkRlcGVuZGVudFJlbGVhc2VzKHJlbGVhc2UsIHJlbGVhc2VNYXApIHtcbiAgICBjb25zdCBzdWJEaXJlY3RvcnlQYXRoID0gcmVsZWFzZS5nZXRTdWJEaXJlY3RvcnlQYXRoKCksXG4gICAgICAgICAgdmVydGV4TmFtZSA9IHN1YkRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHRoaXMuZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgZGV2RGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aHMgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyxcbiAgICAgICAgICBkZXZEZXBlbmRlbnRSZWxlYXNlcyA9IGRldkRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGhzLm1hcCgoZGV2RGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGV2RGVwZW5kZW50UmVsZWFzZSA9IHJlbGVhc2VNYXAucmV0cmlldmVSZWxlYXNlKGRldkRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGV2RGVwZW5kZW50UmVsZWFzZTtcbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBkZXZEZXBlbmRlbnRSZWxlYXNlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUmVsZWFzZU1hcFN1YkRpcmVjdG9yeU1hcEFuZEZvcmNlZERlcGVuZGVuY3lSZWxhdGlvbnMocmVsZWFzZU1hcCwgc3ViRGlyZWN0b3J5TWFwLCBmb3JjZWREZXBlbmRlbmN5UmVsYXRpb25zKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jeURpcmVjdGVkR3JhcGggPSBEaXJlY3RlZEdyYXBoLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGggPSBEaXJlY3RlZEdyYXBoLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcmVsZWFzZU5hbWVzID0gcmVsZWFzZU1hcC5nZXROYW1lcygpLFxuICAgICAgICAgIHN1YkRpcmVjdG9yeVBhdGhzID0gcmVsZWFzZU1hcC5nZXRTdWJEaXJlY3RvcnlQYXRocygpLFxuICAgICAgICAgIG5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAgPSByZWxlYXNlTWFwLmdldE5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAoKSxcbiAgICAgICAgICB2ZXJ0ZXhOYW1lcyA9IHN1YkRpcmVjdG9yeVBhdGhzOyAgLy8vXG5cbiAgICBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5hZGRWZXJ0ZXhlc0J5VmVydGV4TmFtZXModmVydGV4TmFtZXMpO1xuXG4gICAgZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguYWRkVmVydGV4ZXNCeVZlcnRleE5hbWVzKHZlcnRleE5hbWVzKTtcblxuICAgIHN1YkRpcmVjdG9yeVBhdGhzLmZvckVhY2goKHN1YkRpcmVjdG9yeVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHJlbGVhc2UgPSByZWxlYXNlTWFwLnJldHJpZXZlUmVsZWFzZShzdWJEaXJlY3RvcnlQYXRoKSxcbiAgICAgICAgICAgIHJlbGVhc2VEZXBlbmRlbmN5TmFtZXMgPSByZWxlYXNlLmdldERlcGVuZGVuY3lOYW1lcygpLFxuICAgICAgICAgICAgcmVsZWFzZURldkRlcGVuZGVuY3lOYW1lcyA9IHJlbGVhc2UuZ2V0RGV2RGVwZW5kZW5jeU5hbWVzKCk7XG5cbiAgICAgIHJlbGVhc2VEZXBlbmRlbmN5TmFtZXMuZm9yRWFjaCgocmVsZWFzZURlcGVuZGVuY3lOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZURlcGVuZGVuY3lOYW1lID0gcmVsZWFzZU5hbWVzLmluY2x1ZGVzKHJlbGVhc2VEZXBlbmRlbmN5TmFtZSk7XG5cbiAgICAgICAgaWYgKHJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZURlcGVuZGVuY3lOYW1lKSB7XG4gICAgICAgICAgY29uc3QgZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGggPSBuYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwW3JlbGVhc2VEZXBlbmRlbmN5TmFtZV0sXG4gICAgICAgICAgICAgICAgc291cmNlVmVydGV4TmFtZSA9IGRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRoLCAgLy8vXG4gICAgICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IHN1YkRpcmVjdG9yeVBhdGg7ICAvLy9cblxuICAgICAgICAgIGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLmFkZEVkZ2VCeVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmVsZWFzZURldkRlcGVuZGVuY3lOYW1lcy5mb3JFYWNoKChyZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUgPSByZWxlYXNlTmFtZXMuaW5jbHVkZXMocmVsZWFzZURldkRlcGVuZGVuY3lOYW1lKTtcblxuICAgICAgICBpZiAocmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBkZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aCA9IG5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXBbcmVsZWFzZURldkRlcGVuZGVuY3lOYW1lXSxcbiAgICAgICAgICAgICAgICBzb3VyY2VWZXJ0ZXhOYW1lID0gZGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gc3ViRGlyZWN0b3J5UGF0aDsgIC8vL1xuXG4gICAgICAgICAgZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguYWRkRWRnZUJ5U291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZm9yY2VkRGVwZW5kZW5jeVJlbGF0aW9ucy5mb3JFYWNoKChmb3JjZWREZXBlbmRlbmN5UmVsYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHsgZGVwZW5kZW50IH0gPSBmb3JjZWREZXBlbmRlbmN5UmVsYXRpb24sXG4gICAgICAgICAgICBkZXBlbmRlbnRTdWJEaXJlY3RvcnlOYW1lID0gZGVwZW5kZW50LCAvL1xuICAgICAgICAgICAgZGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCA9IHN1YkRpcmVjdG9yeU1hcFtkZXBlbmRlbnRTdWJEaXJlY3RvcnlOYW1lXSwgLy8vXG4gICAgICAgICAgICBkZXBlbmRlbnRSZWxlYXNlID0gcmVsZWFzZU1hcC5yZXRyaWV2ZVJlbGVhc2UoZGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgIGlmIChkZXBlbmRlbnRSZWxlYXNlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUaGUgJyR7ZGVwZW5kZW50fScgZm9yY2VkIGRlcGVuZGVudCBkb2VzIG5vdCBleGlzdC5gKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZGVwZW5kZW5jeSB9ID0gZm9yY2VkRGVwZW5kZW5jeVJlbGF0aW9uLFxuICAgICAgICAgICAgZGVwZW5kZW5jeVN1YkRpcmVjdG9yeU5hbWUgPSBkZXBlbmRlbmN5LCAgLy8vXG4gICAgICAgICAgICBkZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aCA9IHN1YkRpcmVjdG9yeU1hcFtkZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZV0sICAvLy9cbiAgICAgICAgICAgIGRlcGVuZGVuY3lSZWxlYXNlID0gcmVsZWFzZU1hcC5yZXRyaWV2ZVJlbGVhc2UoZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICBpZiAoZGVwZW5kZW5jeVJlbGVhc2UgPT09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFRoZSAnJHtkZXBlbmRlbmN5fScgZm9yY2VkIGRlcGVuZGVuY3kgZG9lcyBub3QgZXhpc3QuYCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VWZXJ0ZXhOYW1lID0gZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICAgIHRhcmdldFZlcnRleE5hbWUgPSBkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRoLCAvLy9cbiAgICAgICAgICAgIGRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoRWRnZVByZXNlbnQgPSBkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5pc0VkZ2VQcmVzZW50QnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoRWRnZVByZXNlbnQgPSBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5pc0VkZ2VQcmVzZW50QnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIGRldkRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQgPSBkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50LCAvLy9cbiAgICAgICAgICAgIGRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQgPSBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50OyAvLy9cblxuICAgICAgaWYgKGRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFRoZSAnJHtkZXBlbmRlbmN5fScgLT4gJyR7ZGVwZW5kZW50fScgZGVwZW5kZW5jeSByZWxhdGlvbiBpcyBwcmVzZW50IGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGZvcmNlZC5gKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghZGV2RGVwZW5kZW5jeVJlbGF0aW9uUHJlc2VudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGhlICcke2RlcGVuZGVuY3l9JyAtPiAnJHtkZXBlbmRlbnR9JyBkZXZlbG9wZXIgZGVwZW5kZW5jeSByZWxhdGlvbiBpcyBub3QgcHJlc2VudCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBmb3JjZWQuYCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5hZGRFZGdlQnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlbGVhc2VHcmFwaCA9IG5ldyBSZWxlYXNlR3JhcGgoZGVwZW5kZW5jeURpcmVjdGVkR3JhcGgsIGRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoKTtcblxuICAgIHJldHVybiByZWxlYXNlR3JhcGg7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJSZWxlYXNlR3JhcGgiLCJkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCIsImRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoIiwiZ2V0RGVwZW5kZW5jeURpcmVjdGVkR3JhcGgiLCJnZXREZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCIsImlzQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQiLCJjeWNsZXNQcmVzZW50IiwiYXJlQ3ljbGVzUHJlc2VudCIsImN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50IiwiaXNDeWNsaWNEZXZEZXBlbmRlbmN5UHJlc2VudCIsImN5Y2xpY0RldkRlcGVuZGVuY3lQcmVzZW50IiwiZ2V0Q3ljbGljRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiZmlyc3RDeWNsZSIsImdldEZpcnN0Q3ljbGUiLCJ2ZXJ0ZXhOYW1lcyIsImdldFZlcnRleE5hbWVzIiwiY3ljbGljRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiZ2V0Q3ljbGljRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiY3ljbGljRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiZ2V0T3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyIsImRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoT3JkZXJlZFZlcnRleE5hbWVzIiwiZ2V0T3JkZXJlZFZlcnRleE5hbWVzIiwib3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyIsImdldE9yZGVyZWREZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aHMiLCJvcmRlcmVkRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwicmV0cmlldmVEZXBlbmRlbnRSZWxlYXNlcyIsInJlbGVhc2UiLCJyZWxlYXNlTWFwIiwic3ViRGlyZWN0b3J5UGF0aCIsImdldFN1YkRpcmVjdG9yeVBhdGgiLCJ2ZXJ0ZXhOYW1lIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsImRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGhzIiwiZGVwZW5kZW50UmVsZWFzZXMiLCJtYXAiLCJkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRoIiwiZGVwZW5kZW50UmVsZWFzZSIsInJldHJpZXZlUmVsZWFzZSIsInJldHJpZXZlRGV2RGVwZW5kZW50UmVsZWFzZXMiLCJkZXZEZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRocyIsImRldkRlcGVuZGVudFJlbGVhc2VzIiwiZGV2RGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCIsImRldkRlcGVuZGVudFJlbGVhc2UiLCJmcm9tUmVsZWFzZU1hcFN1YkRpcmVjdG9yeU1hcEFuZEZvcmNlZERlcGVuZGVuY3lSZWxhdGlvbnMiLCJzdWJEaXJlY3RvcnlNYXAiLCJmb3JjZWREZXBlbmRlbmN5UmVsYXRpb25zIiwiRGlyZWN0ZWRHcmFwaCIsImZyb21Ob3RoaW5nIiwicmVsZWFzZU5hbWVzIiwiZ2V0TmFtZXMiLCJzdWJEaXJlY3RvcnlQYXRocyIsImdldFN1YkRpcmVjdG9yeVBhdGhzIiwibmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcCIsImdldE5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAiLCJhZGRWZXJ0ZXhlc0J5VmVydGV4TmFtZXMiLCJmb3JFYWNoIiwicmVsZWFzZURlcGVuZGVuY3lOYW1lcyIsImdldERlcGVuZGVuY3lOYW1lcyIsInJlbGVhc2VEZXZEZXBlbmRlbmN5TmFtZXMiLCJnZXREZXZEZXBlbmRlbmN5TmFtZXMiLCJyZWxlYXNlRGVwZW5kZW5jeU5hbWUiLCJyZWxlYXNlTmFtZXNJbmNsdWRlc1JlbGVhc2VEZXBlbmRlbmN5TmFtZSIsImluY2x1ZGVzIiwiZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgiLCJzb3VyY2VWZXJ0ZXhOYW1lIiwidGFyZ2V0VmVydGV4TmFtZSIsImFkZEVkZ2VCeVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lIiwicmVsZWFzZURldkRlcGVuZGVuY3lOYW1lIiwicmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUiLCJkZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aCIsImZvcmNlZERlcGVuZGVuY3lSZWxhdGlvbiIsImRlcGVuZGVudCIsImRlcGVuZGVudFN1YkRpcmVjdG9yeU5hbWUiLCJjb25zb2xlIiwibG9nIiwiZGVwZW5kZW5jeSIsImRlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lIiwiZGVwZW5kZW5jeVJlbGVhc2UiLCJkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50IiwiaXNFZGdlUHJlc2VudEJ5U291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUiLCJkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50IiwiZGV2RGVwZW5kZW5jeVJlbGF0aW9uUHJlc2VudCIsImRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQiLCJyZWxlYXNlR3JhcGgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBSXFCQTs7O21DQUZTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVmLElBQUEsQUFBTUEsNkJBQU47YUFBTUEsYUFDUEMsdUJBQXVCLEVBQUVDLDBCQUEwQjtnQ0FENUNGO1FBRWpCLElBQUksQ0FBQ0MsdUJBQXVCLEdBQUdBO1FBQy9CLElBQUksQ0FBQ0MsMEJBQTBCLEdBQUdBOztrQkFIakJGOztZQU1uQkcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRix1QkFBdUI7WUFDckM7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNGLDBCQUEwQjtZQUN4Qzs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxnQkFBZ0IsSUFBSSxDQUFDTCx1QkFBdUIsQ0FBQ00sZ0JBQWdCLElBQzdEQywwQkFBMEJGLGVBQWdCLEdBQUc7Z0JBRW5ELE9BQU9FO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUgsZ0JBQWdCLElBQUksQ0FBQ0osMEJBQTBCLENBQUNLLGdCQUFnQixJQUNoRUcsNkJBQTZCSixlQUFnQixHQUFHO2dCQUV0RCxPQUFPSTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLGFBQWEsSUFBSSxDQUFDWCx1QkFBdUIsQ0FBQ1ksYUFBYSxJQUN2REMsY0FBY0Ys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
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWxlYXNlR3JhcGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IERpcmVjdGVkR3JhcGggfSBmcm9tIFwib2NjYW0tZGlyZWN0ZWQtZ3JhcGhzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbGVhc2VHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLCBkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCkge1xuICAgIHRoaXMuZGVwZW5kZW5jeURpcmVjdGVkR3JhcGggPSBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaDtcbiAgICB0aGlzLmRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoID0gZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGg7XG4gIH1cblxuICBnZXREZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaDtcbiAgfVxuXG4gIGdldERldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoKCkge1xuICAgIHJldHVybiB0aGlzLmRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoO1xuICB9XG5cbiAgaXNDeWNsaWNEZXBlbmRlbmN5UHJlc2VudCgpIHtcbiAgICBjb25zdCBjeWNsZXNQcmVzZW50ID0gdGhpcy5kZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5hcmVDeWNsZXNQcmVzZW50KCksXG4gICAgICAgICAgY3ljbGljRGVwZW5kZW5jeVByZXNlbnQgPSBjeWNsZXNQcmVzZW50OyAgLy8vXG5cbiAgICByZXR1cm4gY3ljbGljRGVwZW5kZW5jeVByZXNlbnQ7XG4gIH1cblxuICBpc0N5Y2xpY0RldkRlcGVuZGVuY3lQcmVzZW50KCkge1xuICAgIGNvbnN0IGN5Y2xlc1ByZXNlbnQgPSB0aGlzLmRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLmFyZUN5Y2xlc1ByZXNlbnQoKSxcbiAgICAgICAgICBjeWNsaWNEZXZEZXBlbmRlbmN5UHJlc2VudCA9IGN5Y2xlc1ByZXNlbnQ7ICAvLy9cblxuICAgIHJldHVybiBjeWNsaWNEZXZEZXBlbmRlbmN5UHJlc2VudDtcbiAgfVxuXG4gIGdldEN5Y2xpY0RlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBmaXJzdEN5Y2xlID0gdGhpcy5kZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5nZXRGaXJzdEN5Y2xlKCksXG4gICAgICAgICAgdmVydGV4TmFtZXMgPSBmaXJzdEN5Y2xlLmdldFZlcnRleE5hbWVzKCksXG4gICAgICAgICAgY3ljbGljRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzID0gdmVydGV4TmFtZXM7ICAvLy9cblxuICAgIHJldHVybiBjeWNsaWNEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aHM7XG4gIH1cblxuICBnZXRDeWNsaWNEZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aHMoKSB7XG4gICAgY29uc3QgZmlyc3RDeWNsZSA9IHRoaXMuZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0Rmlyc3RDeWNsZSgpLFxuICAgICAgICAgIHZlcnRleE5hbWVzID0gZmlyc3RDeWNsZS5nZXRWZXJ0ZXhOYW1lcygpLFxuICAgICAgICAgIGN5Y2xpY0RldkRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyA9IHZlcnRleE5hbWVzOyAgLy8vXG5cbiAgICByZXR1cm4gY3ljbGljRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzO1xuICB9XG5cbiAgZ2V0T3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaE9yZGVyZWRWZXJ0ZXhOYW1lcyA9IHRoaXMuZGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0T3JkZXJlZFZlcnRleE5hbWVzKCksXG4gICAgICAgICAgb3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyA9IGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoT3JkZXJlZFZlcnRleE5hbWVzOyAvLy9cblxuICAgIHJldHVybiBvcmRlcmVkRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzO1xuICB9XG5cbiAgZ2V0T3JkZXJlZERldkRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaE9yZGVyZWRWZXJ0ZXhOYW1lcyA9IHRoaXMuZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0T3JkZXJlZFZlcnRleE5hbWVzKCksXG4gICAgICAgICAgb3JkZXJlZERldkRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyA9IGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoT3JkZXJlZFZlcnRleE5hbWVzOyAvLy9cblxuICAgIHJldHVybiBvcmRlcmVkRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzO1xuICB9XG5cbiAgcmV0cmlldmVEZXBlbmRlbnRSZWxlYXNlcyhyZWxlYXNlLCByZWxlYXNlTWFwKSB7XG4gICAgY29uc3Qgc3ViRGlyZWN0b3J5UGF0aCA9IHJlbGVhc2UuZ2V0U3ViRGlyZWN0b3J5UGF0aCgpLFxuICAgICAgICAgIHZlcnRleE5hbWUgPSBzdWJEaXJlY3RvcnlQYXRoLCAgLy8vXG4gICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMgPSB0aGlzLmRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLmdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpLFxuICAgICAgICAgIGRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGhzID0gaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMsXG4gICAgICAgICAgZGVwZW5kZW50UmVsZWFzZXMgPSBkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRocy5tYXAoKGRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVudFJlbGVhc2UgPSByZWxlYXNlTWFwLnJldHJpZXZlUmVsZWFzZShkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRoKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlcGVuZGVudFJlbGVhc2U7XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gZGVwZW5kZW50UmVsZWFzZXM7XG4gIH1cblxuICByZXRyaWV2ZURldkRlcGVuZGVudFJlbGVhc2VzKHJlbGVhc2UsIHJlbGVhc2VNYXApIHtcbiAgICBjb25zdCBzdWJEaXJlY3RvcnlQYXRoID0gcmVsZWFzZS5nZXRTdWJEaXJlY3RvcnlQYXRoKCksXG4gICAgICAgICAgdmVydGV4TmFtZSA9IHN1YkRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHRoaXMuZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgZGV2RGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aHMgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyxcbiAgICAgICAgICBkZXZEZXBlbmRlbnRSZWxlYXNlcyA9IGRldkRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGhzLm1hcCgoZGV2RGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGV2RGVwZW5kZW50UmVsZWFzZSA9IHJlbGVhc2VNYXAucmV0cmlldmVSZWxlYXNlKGRldkRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGV2RGVwZW5kZW50UmVsZWFzZTtcbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBkZXZEZXBlbmRlbnRSZWxlYXNlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUmVsZWFzZU1hcFN1YkRpcmVjdG9yeU1hcEFuZEZvcmNlZERlcGVuZGVuY3lSZWxhdGlvbnMocmVsZWFzZU1hcCwgc3ViRGlyZWN0b3J5TWFwLCBmb3JjZWREZXBlbmRlbmN5UmVsYXRpb25zKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jeURpcmVjdGVkR3JhcGggPSBEaXJlY3RlZEdyYXBoLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGggPSBEaXJlY3RlZEdyYXBoLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcmVsZWFzZU5hbWVzID0gcmVsZWFzZU1hcC5nZXROYW1lcygpLFxuICAgICAgICAgIHN1YkRpcmVjdG9yeVBhdGhzID0gcmVsZWFzZU1hcC5nZXRTdWJEaXJlY3RvcnlQYXRocygpLFxuICAgICAgICAgIG5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAgPSByZWxlYXNlTWFwLmdldE5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAoKSxcbiAgICAgICAgICB2ZXJ0ZXhOYW1lcyA9IHN1YkRpcmVjdG9yeVBhdGhzOyAgLy8vXG5cbiAgICBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5hZGRWZXJ0ZXhlc0J5VmVydGV4TmFtZXModmVydGV4TmFtZXMpO1xuXG4gICAgZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguYWRkVmVydGV4ZXNCeVZlcnRleE5hbWVzKHZlcnRleE5hbWVzKTtcblxuICAgIHN1YkRpcmVjdG9yeVBhdGhzLmZvckVhY2goKHN1YkRpcmVjdG9yeVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHJlbGVhc2UgPSByZWxlYXNlTWFwLnJldHJpZXZlUmVsZWFzZShzdWJEaXJlY3RvcnlQYXRoKSxcbiAgICAgICAgICAgIHJlbGVhc2VEZXBlbmRlbmN5TmFtZXMgPSByZWxlYXNlLmdldERlcGVuZGVuY3lOYW1lcygpLFxuICAgICAgICAgICAgcmVsZWFzZURldkRlcGVuZGVuY3lOYW1lcyA9IHJlbGVhc2UuZ2V0RGV2RGVwZW5kZW5jeU5hbWVzKCk7XG5cbiAgICAgIHJlbGVhc2VEZXBlbmRlbmN5TmFtZXMuZm9yRWFjaCgocmVsZWFzZURlcGVuZGVuY3lOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZURlcGVuZGVuY3lOYW1lID0gcmVsZWFzZU5hbWVzLmluY2x1ZGVzKHJlbGVhc2VEZXBlbmRlbmN5TmFtZSk7XG5cbiAgICAgICAgaWYgKHJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZURlcGVuZGVuY3lOYW1lKSB7XG4gICAgICAgICAgY29uc3QgZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGggPSBuYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwW3JlbGVhc2VEZXBlbmRlbmN5TmFtZV0sXG4gICAgICAgICAgICAgICAgc291cmNlVmVydGV4TmFtZSA9IGRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRoLCAgLy8vXG4gICAgICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IHN1YkRpcmVjdG9yeVBhdGg7ICAvLy9cblxuICAgICAgICAgIGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLmFkZEVkZ2VCeVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmVsZWFzZURldkRlcGVuZGVuY3lOYW1lcy5mb3JFYWNoKChyZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUgPSByZWxlYXNlTmFtZXMuaW5jbHVkZXMocmVsZWFzZURldkRlcGVuZGVuY3lOYW1lKTtcblxuICAgICAgICBpZiAocmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBkZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aCA9IG5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXBbcmVsZWFzZURldkRlcGVuZGVuY3lOYW1lXSxcbiAgICAgICAgICAgICAgICBzb3VyY2VWZXJ0ZXhOYW1lID0gZGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gc3ViRGlyZWN0b3J5UGF0aDsgIC8vL1xuXG4gICAgICAgICAgZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguYWRkRWRnZUJ5U291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZm9yY2VkRGVwZW5kZW5jeVJlbGF0aW9ucy5mb3JFYWNoKChmb3JjZWREZXBlbmRlbmN5UmVsYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHsgZGVwZW5kZW50IH0gPSBmb3JjZWREZXBlbmRlbmN5UmVsYXRpb24sXG4gICAgICAgICAgICBkZXBlbmRlbnRTdWJEaXJlY3RvcnlOYW1lID0gZGVwZW5kZW50LCAvL1xuICAgICAgICAgICAgZGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCA9IHN1YkRpcmVjdG9yeU1hcFtkZXBlbmRlbnRTdWJEaXJlY3RvcnlOYW1lXSwgLy8vXG4gICAgICAgICAgICBkZXBlbmRlbnRSZWxlYXNlID0gcmVsZWFzZU1hcC5yZXRyaWV2ZVJlbGVhc2UoZGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgIGlmIChkZXBlbmRlbnRSZWxlYXNlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUaGUgJyR7ZGVwZW5kZW50fScgZm9yY2VkIGRlcGVuZGVudCBkb2VzIG5vdCBleGlzdC5gKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZGVwZW5kZW5jeSB9ID0gZm9yY2VkRGVwZW5kZW5jeVJlbGF0aW9uLFxuICAgICAgICAgICAgZGVwZW5kZW5jeVN1YkRpcmVjdG9yeU5hbWUgPSBkZXBlbmRlbmN5LCAgLy8vXG4gICAgICAgICAgICBkZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aCA9IHN1YkRpcmVjdG9yeU1hcFtkZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZV0sICAvLy9cbiAgICAgICAgICAgIGRlcGVuZGVuY3lSZWxlYXNlID0gcmVsZWFzZU1hcC5yZXRyaWV2ZVJlbGVhc2UoZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICBpZiAoZGVwZW5kZW5jeVJlbGVhc2UgPT09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFRoZSAnJHtkZXBlbmRlbmN5fScgZm9yY2VkIGRlcGVuZGVuY3kgZG9lcyBub3QgZXhpc3QuYCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VWZXJ0ZXhOYW1lID0gZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICAgIHRhcmdldFZlcnRleE5hbWUgPSBkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRoLCAvLy9cbiAgICAgICAgICAgIGRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoRWRnZVByZXNlbnQgPSBkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5pc0VkZ2VQcmVzZW50QnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoRWRnZVByZXNlbnQgPSBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5pc0VkZ2VQcmVzZW50QnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIGRldkRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQgPSBkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50LCAvLy9cbiAgICAgICAgICAgIGRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQgPSBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50OyAvLy9cblxuICAgICAgaWYgKGRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFRoZSAnJHtkZXBlbmRlbmN5fScgLT4gJyR7ZGVwZW5kZW50fScgZGVwZW5kZW5jeSByZWxhdGlvbiBpcyBwcmVzZW50IGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGZvcmNlZC5gKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghZGV2RGVwZW5kZW5jeVJlbGF0aW9uUHJlc2VudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGhlICcke2RlcGVuZGVuY3l9JyAtPiAnJHtkZXBlbmRlbnR9JyBkZXZlbG9wZXIgZGVwZW5kZW5jeSByZWxhdGlvbiBpcyBub3QgcHJlc2VudCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBmb3JjZWQuYCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5hZGRFZGdlQnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlbGVhc2VHcmFwaCA9IG5ldyBSZWxlYXNlR3JhcGgoZGVwZW5kZW5jeURpcmVjdGVkR3JhcGgsIGRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoKTtcblxuICAgIHJldHVybiByZWxlYXNlR3JhcGg7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJSZWxlYXNlR3JhcGgiLCJkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCIsImRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoIiwiZ2V0RGVwZW5kZW5jeURpcmVjdGVkR3JhcGgiLCJnZXREZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCIsImlzQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQiLCJjeWNsZXNQcmVzZW50IiwiYXJlQ3ljbGVzUHJlc2VudCIsImN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50IiwiaXNDeWNsaWNEZXZEZXBlbmRlbmN5UHJlc2VudCIsImN5Y2xpY0RldkRlcGVuZGVuY3lQcmVzZW50IiwiZ2V0Q3ljbGljRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiZmlyc3RDeWNsZSIsImdldEZpcnN0Q3ljbGUiLCJ2ZXJ0ZXhOYW1lcyIsImdldFZlcnRleE5hbWVzIiwiY3ljbGljRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiZ2V0Q3ljbGljRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiY3ljbGljRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiZ2V0T3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyIsImRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoT3JkZXJlZFZlcnRleE5hbWVzIiwiZ2V0T3JkZXJlZFZlcnRleE5hbWVzIiwib3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyIsImdldE9yZGVyZWREZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aHMiLCJvcmRlcmVkRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwicmV0cmlldmVEZXBlbmRlbnRSZWxlYXNlcyIsInJlbGVhc2UiLCJyZWxlYXNlTWFwIiwic3ViRGlyZWN0b3J5UGF0aCIsImdldFN1YkRpcmVjdG9yeVBhdGgiLCJ2ZXJ0ZXhOYW1lIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsImRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGhzIiwiZGVwZW5kZW50UmVsZWFzZXMiLCJtYXAiLCJkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRoIiwiZGVwZW5kZW50UmVsZWFzZSIsInJldHJpZXZlUmVsZWFzZSIsInJldHJpZXZlRGV2RGVwZW5kZW50UmVsZWFzZXMiLCJkZXZEZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRocyIsImRldkRlcGVuZGVudFJlbGVhc2VzIiwiZGV2RGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCIsImRldkRlcGVuZGVudFJlbGVhc2UiLCJmcm9tUmVsZWFzZU1hcFN1YkRpcmVjdG9yeU1hcEFuZEZvcmNlZERlcGVuZGVuY3lSZWxhdGlvbnMiLCJzdWJEaXJlY3RvcnlNYXAiLCJmb3JjZWREZXBlbmRlbmN5UmVsYXRpb25zIiwiRGlyZWN0ZWRHcmFwaCIsImZyb21Ob3RoaW5nIiwicmVsZWFzZU5hbWVzIiwiZ2V0TmFtZXMiLCJzdWJEaXJlY3RvcnlQYXRocyIsImdldFN1YkRpcmVjdG9yeVBhdGhzIiwibmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcCIsImdldE5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAiLCJhZGRWZXJ0ZXhlc0J5VmVydGV4TmFtZXMiLCJmb3JFYWNoIiwicmVsZWFzZURlcGVuZGVuY3lOYW1lcyIsImdldERlcGVuZGVuY3lOYW1lcyIsInJlbGVhc2VEZXZEZXBlbmRlbmN5TmFtZXMiLCJnZXREZXZEZXBlbmRlbmN5TmFtZXMiLCJyZWxlYXNlRGVwZW5kZW5jeU5hbWUiLCJyZWxlYXNlTmFtZXNJbmNsdWRlc1JlbGVhc2VEZXBlbmRlbmN5TmFtZSIsImluY2x1ZGVzIiwiZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgiLCJzb3VyY2VWZXJ0ZXhOYW1lIiwidGFyZ2V0VmVydGV4TmFtZSIsImFkZEVkZ2VCeVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lIiwicmVsZWFzZURldkRlcGVuZGVuY3lOYW1lIiwicmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUiLCJkZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aCIsImZvcmNlZERlcGVuZGVuY3lSZWxhdGlvbiIsImRlcGVuZGVudCIsImRlcGVuZGVudFN1YkRpcmVjdG9yeU5hbWUiLCJjb25zb2xlIiwibG9nIiwiZGVwZW5kZW5jeSIsImRlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lIiwiZGVwZW5kZW5jeVJlbGVhc2UiLCJkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50IiwiaXNFZGdlUHJlc2VudEJ5U291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUiLCJkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50IiwiZGV2RGVwZW5kZW5jeVJlbGF0aW9uUHJlc2VudCIsImRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQiLCJyZWxlYXNlR3JhcGgiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQUlBOzs7ZUFBcUJBOzs7cUNBRlM7QUFFZixNQUFNQTtJQUNuQixZQUFZQyx1QkFBdUIsRUFBRUMsMEJBQTBCLENBQUU7UUFDL0QsSUFBSSxDQUFDRCx1QkFBdUIsR0FBR0E7UUFDL0IsSUFBSSxDQUFDQywwQkFBMEIsR0FBR0E7SUFDcEM7SUFFQUMsNkJBQTZCO1FBQzNCLE9BQU8sSUFBSSxDQUFDRix1QkFBdUI7SUFDckM7SUFFQUcsZ0NBQWdDO1FBQzlCLE9BQU8sSUFBSSxDQUFDRiwwQkFBMEI7SUFDeEM7SUFFQUcsNEJBQTRCO1FBQzFCLE1BQU1DLGdCQUFnQixJQUFJLENBQUNMLHVCQUF1QixDQUFDTSxnQkFBZ0IsSUFDN0RDLDBCQUEwQkYsZUFBZ0IsR0FBRztRQUVuRCxPQUFPRTtJQUNUO0lBRUFDLCtCQUErQjtRQUM3QixNQUFNSCxnQkFBZ0IsSUFBSSxDQUFDSiwwQkFBMEIsQ0FBQ0ssZ0JBQWdCLElBQ2hFRyw2QkFBNkJKLGVBQWdCLEdBQUc7UUFFdEQsT0FBT0k7SUFDVDtJQUVBQyx1Q0FBdUM7UUFDckMsTUFBTUMsYUFBYSxJQUFJLENBQUNYLHVCQUF1QixDQUFDWSxhQUFhLElBQ3ZEQyxjQUFjRixXQUFXRyxjQUFjLElBQ3ZDQyxvQ0FBb0NGLGFBQWMsR0FBRztRQUUzRCxPQUFPRTtJQUNUO0lBRUFDLDBDQUEwQztRQUN4QyxNQUFNTCxhQUFhLElBQUksQ0FBQ1YsMEJBQTBCLENB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
package/lib/releaseMap.js CHANGED
@@ -8,120 +8,77 @@ Object.defineProperty(exports, "default", {
8
8
  return ReleaseMap;
9
9
  }
10
10
  });
11
- var _necessary = require("necessary");
12
- var _release = /*#__PURE__*/ _interop_require_default(require("./release"));
13
- function _class_call_check(instance, Constructor) {
14
- if (!(instance instanceof Constructor)) {
15
- throw new TypeError("Cannot call a class as a function");
16
- }
17
- }
18
- function _defineProperties(target, props) {
19
- for(var i = 0; i < props.length; i++){
20
- var descriptor = props[i];
21
- descriptor.enumerable = descriptor.enumerable || false;
22
- descriptor.configurable = true;
23
- if ("value" in descriptor) descriptor.writable = true;
24
- Object.defineProperty(target, descriptor.key, descriptor);
25
- }
26
- }
27
- function _create_class(Constructor, protoProps, staticProps) {
28
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
29
- if (staticProps) _defineProperties(Constructor, staticProps);
30
- return Constructor;
31
- }
11
+ const _necessary = require("necessary");
12
+ const _release = /*#__PURE__*/ _interop_require_default(require("./release"));
32
13
  function _interop_require_default(obj) {
33
14
  return obj && obj.__esModule ? obj : {
34
15
  default: obj
35
16
  };
36
17
  }
37
- var prune = _necessary.arrayUtilities.prune;
38
- var ReleaseMap = /*#__PURE__*/ function() {
39
- function ReleaseMap(map) {
40
- _class_call_check(this, ReleaseMap);
18
+ const { prune } = _necessary.arrayUtilities;
19
+ class ReleaseMap {
20
+ constructor(map){
41
21
  this.map = map;
42
22
  }
43
- _create_class(ReleaseMap, [
44
- {
45
- key: "getNames",
46
- value: function getNames() {
47
- var names = [], releases = this.getReleases();
48
- releases.forEach(function(release) {
49
- var name = release.getName();
50
- if (name !== null) {
51
- names.push(name);
52
- }
53
- });
54
- return names;
23
+ getNames() {
24
+ const names = [], releases = this.getReleases();
25
+ releases.forEach((release)=>{
26
+ const name = release.getName();
27
+ if (name !== null) {
28
+ names.push(name);
55
29
  }
56
- },
57
- {
58
- key: "getReleases",
59
- value: function getReleases() {
60
- var releases = Object.values(this.map);
61
- return releases;
62
- }
63
- },
64
- {
65
- key: "getSubDirectoryPaths",
66
- value: function getSubDirectoryPaths() {
67
- var subDirectoryPaths = Object.keys(this.map);
68
- return subDirectoryPaths;
69
- }
70
- },
71
- {
72
- key: "getNameToSubDirectoryPathMap",
73
- value: function getNameToSubDirectoryPathMap() {
74
- var _this = this;
75
- var nameToSubDirectoryPathMap = {}, subDirectoryPaths = this.getSubDirectoryPaths();
76
- subDirectoryPaths.forEach(function(subDirectoryPath) {
77
- var release = _this.retrieveRelease(subDirectoryPath), name = release.getName();
78
- if (name !== null) {
79
- nameToSubDirectoryPathMap[name] = subDirectoryPath;
80
- }
81
- });
82
- return nameToSubDirectoryPathMap;
83
- }
84
- },
85
- {
86
- key: "retrieveRelease",
87
- value: function retrieveRelease(subDirectoryPath) {
88
- var release = this.map[subDirectoryPath] || null; ///
89
- return release;
30
+ });
31
+ return names;
32
+ }
33
+ getReleases() {
34
+ const releases = Object.values(this.map);
35
+ return releases;
36
+ }
37
+ getSubDirectoryPaths() {
38
+ const subDirectoryPaths = Object.keys(this.map);
39
+ return subDirectoryPaths;
40
+ }
41
+ getNameToSubDirectoryPathMap() {
42
+ const nameToSubDirectoryPathMap = {}, subDirectoryPaths = this.getSubDirectoryPaths();
43
+ subDirectoryPaths.forEach((subDirectoryPath)=>{
44
+ const release = this.retrieveRelease(subDirectoryPath), name = release.getName();
45
+ if (name !== null) {
46
+ nameToSubDirectoryPathMap[name] = subDirectoryPath;
90
47
  }
91
- }
92
- ], [
93
- {
94
- key: "fromSubDirectoryMapSubDirectoryNameAndIgnoredDependencies",
95
- value: function fromSubDirectoryMapSubDirectoryNameAndIgnoredDependencies(subDirectoryMap, subDirectoryName, ignoredDependencies) {
96
- var map = {}, subDirectoryPaths = subDirectoryPathsFromSubDirectoryMapSubDirectoryNameAndIgnoredDependencies(subDirectoryMap, subDirectoryName, ignoredDependencies);
97
- subDirectoryPaths.forEach(function(subDirectoryPath) {
98
- var release = _release.default.fromSubDirectoryPath(subDirectoryPath);
99
- if (release !== null) {
100
- map[subDirectoryPath] = release;
101
- }
102
- });
103
- var releaseMap = new ReleaseMap(map);
104
- return releaseMap;
48
+ });
49
+ return nameToSubDirectoryPathMap;
50
+ }
51
+ retrieveRelease(subDirectoryPath) {
52
+ const release = this.map[subDirectoryPath] || null; ///
53
+ return release;
54
+ }
55
+ static fromSubDirectoryMapSubDirectoryNameAndIgnoredDependencies(subDirectoryMap, subDirectoryName, ignoredDependencies) {
56
+ const map = {}, subDirectoryPaths = subDirectoryPathsFromSubDirectoryMapSubDirectoryNameAndIgnoredDependencies(subDirectoryMap, subDirectoryName, ignoredDependencies);
57
+ subDirectoryPaths.forEach((subDirectoryPath)=>{
58
+ const release = _release.default.fromSubDirectoryPath(subDirectoryPath);
59
+ if (release !== null) {
60
+ map[subDirectoryPath] = release;
105
61
  }
106
- }
107
- ]);
108
- return ReleaseMap;
109
- }();
62
+ });
63
+ const releaseMap = new ReleaseMap(map);
64
+ return releaseMap;
65
+ }
66
+ }
110
67
  function subDirectoryPathsFromSubDirectoryMapSubDirectoryNameAndIgnoredDependencies(subDirectoryMap, subDirectoryName, ignoredDependencies) {
111
- var subDirectoryPaths = [], subDirectoryNames = Object.keys(subDirectoryMap), ignoredDependencySubDirectoryNames = ignoredDependencies; ///
112
- prune(ignoredDependencySubDirectoryNames, function(ignoredDependencySubDirectoryName) {
68
+ const subDirectoryPaths = [], subDirectoryNames = Object.keys(subDirectoryMap), ignoredDependencySubDirectoryNames = ignoredDependencies; ///
69
+ prune(ignoredDependencySubDirectoryNames, (ignoredDependencySubDirectoryName)=>{
113
70
  if (ignoredDependencySubDirectoryName !== subDirectoryName) {
114
71
  return true;
115
72
  }
116
73
  });
117
- subDirectoryNames.forEach(function(subDirectoryName) {
118
- var ignoredDependencySubDirectoryNamesIncludesSubDirectoryName = ignoredDependencySubDirectoryNames.includes(subDirectoryName);
74
+ subDirectoryNames.forEach((subDirectoryName)=>{
75
+ const ignoredDependencySubDirectoryNamesIncludesSubDirectoryName = ignoredDependencySubDirectoryNames.includes(subDirectoryName);
119
76
  if (!ignoredDependencySubDirectoryNamesIncludesSubDirectoryName) {
120
- var subDirectoryPath = subDirectoryMap[subDirectoryName]; ///
77
+ const subDirectoryPath = subDirectoryMap[subDirectoryName]; ///
121
78
  subDirectoryPaths.push(subDirectoryPath);
122
79
  }
123
80
  });
124
81
  return subDirectoryPaths;
125
82
  }
126
83
 
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWxlYXNlTWFwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFJlbGVhc2UgZnJvbSBcIi4vcmVsZWFzZVwiO1xuXG5jb25zdCB7IHBydW5lIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVsZWFzZU1hcCB7XG4gIGNvbnN0cnVjdG9yKG1hcCkge1xuICAgIHRoaXMubWFwID0gbWFwO1xuICB9XG5cbiAgZ2V0TmFtZXMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBbXSxcbiAgICAgICAgICByZWxlYXNlcyA9IHRoaXMuZ2V0UmVsZWFzZXMoKTtcblxuICAgIHJlbGVhc2VzLmZvckVhY2goKHJlbGVhc2UpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByZWxlYXNlLmdldE5hbWUoKTtcblxuICAgICAgaWYgKG5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuYW1lcztcbiAgfVxuXG4gIGdldFJlbGVhc2VzKCkge1xuICAgIGNvbnN0IHJlbGVhc2VzID0gT2JqZWN0LnZhbHVlcyh0aGlzLm1hcCk7XG5cbiAgICByZXR1cm4gcmVsZWFzZXM7XG4gIH1cblxuICBnZXRTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBzdWJEaXJlY3RvcnlQYXRocyA9IE9iamVjdC5rZXlzKHRoaXMubWFwKTtcblxuICAgIHJldHVybiBzdWJEaXJlY3RvcnlQYXRocztcbiAgfVxuXG4gIGdldE5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAoKSB7XG4gICAgY29uc3QgbmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcCA9IHt9LFxuICAgICAgICAgIHN1YkRpcmVjdG9yeVBhdGhzID0gdGhpcy5nZXRTdWJEaXJlY3RvcnlQYXRocygpO1xuXG4gICAgc3ViRGlyZWN0b3J5UGF0aHMuZm9yRWFjaCgoc3ViRGlyZWN0b3J5UGF0aCkgPT4ge1xuICAgICAgY29uc3QgcmVsZWFzZSA9IHRoaXMucmV0cmlldmVSZWxlYXNlKHN1YkRpcmVjdG9yeVBhdGgpLFxuICAgICAgICAgICAgbmFtZSA9IHJlbGVhc2UuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBuYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwW25hbWVdID0gc3ViRGlyZWN0b3J5UGF0aDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwO1xuICB9XG5cbiAgcmV0cmlldmVSZWxlYXNlKHN1YkRpcmVjdG9yeVBhdGgpIHtcbiAgICBjb25zdCByZWxlYXNlID0gdGhpcy5tYXBbc3ViRGlyZWN0b3J5UGF0aF0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJlbGVhc2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN1YkRpcmVjdG9yeU1hcFN1YkRpcmVjdG9yeU5hbWVBbmRJZ25vcmVkRGVwZW5kZW5jaWVzKHN1YkRpcmVjdG9yeU1hcCwgc3ViRGlyZWN0b3J5TmFtZSwgaWdub3JlZERlcGVuZGVuY2llcykge1xuICAgIGNvbnN0IG1hcCA9IHt9LFxuICAgICAgICAgIHN1YkRpcmVjdG9yeVBhdGhzID0gc3ViRGlyZWN0b3J5UGF0aHNGcm9tU3ViRGlyZWN0b3J5TWFwU3ViRGlyZWN0b3J5TmFtZUFuZElnbm9yZWREZXBlbmRlbmNpZXMoc3ViRGlyZWN0b3J5TWFwLCBzdWJEaXJlY3RvcnlOYW1lLCBpZ25vcmVkRGVwZW5kZW5jaWVzKTtcblxuICAgIHN1YkRpcmVjdG9yeVBhdGhzLmZvckVhY2goKHN1YkRpcmVjdG9yeVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHJlbGVhc2UgPSBSZWxlYXNlLmZyb21TdWJEaXJlY3RvcnlQYXRoKHN1YkRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICBpZiAocmVsZWFzZSAhPT0gbnVsbCkge1xuICAgICAgICBtYXBbc3ViRGlyZWN0b3J5UGF0aF0gPSByZWxlYXNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVsZWFzZU1hcCA9IG5ldyBSZWxlYXNlTWFwKG1hcCk7XG5cbiAgICByZXR1cm4gcmVsZWFzZU1hcDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdWJEaXJlY3RvcnlQYXRoc0Zyb21TdWJEaXJlY3RvcnlNYXBTdWJEaXJlY3RvcnlOYW1lQW5kSWdub3JlZERlcGVuZGVuY2llcyhzdWJEaXJlY3RvcnlNYXAsIHN1YkRpcmVjdG9yeU5hbWUsIGlnbm9yZWREZXBlbmRlbmNpZXMpIHtcbiAgY29uc3Qgc3ViRGlyZWN0b3J5UGF0aHMgPSBbXSxcbiAgICAgICAgc3ViRGlyZWN0b3J5TmFtZXMgPSBPYmplY3Qua2V5cyhzdWJEaXJlY3RvcnlNYXApLCAvLy9cbiAgICAgICAgaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lcyA9IGlnbm9yZWREZXBlbmRlbmNpZXM7IC8vL1xuXG4gIHBydW5lKGlnbm9yZWREZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZXMsIChpZ25vcmVkRGVwZW5kZW5jeVN1YkRpcmVjdG9yeU5hbWUpID0+IHtcbiAgICBpZiAoaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lICE9PSBzdWJEaXJlY3RvcnlOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHN1YkRpcmVjdG9yeU5hbWVzLmZvckVhY2goKHN1YkRpcmVjdG9yeU5hbWUpID0+IHtcbiAgICBjb25zdCBpZ25vcmVkRGVwZW5kZW5jeVN1YkRpcmVjdG9yeU5hbWVzSW5jbHVkZXNTdWJEaXJlY3RvcnlOYW1lID0gaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lcy5pbmNsdWRlcyhzdWJEaXJlY3RvcnlOYW1lKTtcblxuICAgIGlmICghaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lc0luY2x1ZGVzU3ViRGlyZWN0b3J5TmFtZSkge1xuICAgICAgY29uc3Qgc3ViRGlyZWN0b3J5UGF0aCA9IHN1YkRpcmVjdG9yeU1hcFtzdWJEaXJlY3RvcnlOYW1lXTsgLy8vXG5cbiAgICAgIHN1YkRpcmVjdG9yeVBhdGhzLnB1c2goc3ViRGlyZWN0b3J5UGF0aCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gc3ViRGlyZWN0b3J5UGF0aHM7XG59XG4iXSwibmFtZXMiOlsiUmVsZWFzZU1hcCIsInBydW5lIiwiYXJyYXlVdGlsaXRpZXMiLCJtYXAiLCJnZXROYW1lcyIsIm5hbWVzIiwicmVsZWFzZXMiLCJnZXRSZWxlYXNlcyIsImZvckVhY2giLCJyZWxlYXNlIiwibmFtZSIsImdldE5hbWUiLCJwdXNoIiwiT2JqZWN0IiwidmFsdWVzIiwiZ2V0U3ViRGlyZWN0b3J5UGF0aHMiLCJzdWJEaXJlY3RvcnlQYXRocyIsImtleXMiLCJnZXROYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwIiwibmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcCIsInN1YkRpcmVjdG9yeVBhdGgiLCJyZXRyaWV2ZVJlbGVhc2UiLCJmcm9tU3ViRGlyZWN0b3J5TWFwU3ViRGlyZWN0b3J5TmFtZUFuZElnbm9yZWREZXBlbmRlbmNpZXMiLCJzdWJEaXJlY3RvcnlNYXAiLCJzdWJEaXJlY3RvcnlOYW1lIiwiaWdub3JlZERlcGVuZGVuY2llcyIsInN1YkRpcmVjdG9yeVBhdGhzRnJvbVN1YkRpcmVjdG9yeU1hcFN1YkRpcmVjdG9yeU5hbWVBbmRJZ25vcmVkRGVwZW5kZW5jaWVzIiwiUmVsZWFzZSIsImZyb21TdWJEaXJlY3RvcnlQYXRoIiwicmVsZWFzZU1hcCIsInN1YkRpcmVjdG9yeU5hbWVzIiwiaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lcyIsImlnbm9yZWREZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZSIsImlnbm9yZWREZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZXNJbmNsdWRlc1N1YkRp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
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWxlYXNlTWFwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFJlbGVhc2UgZnJvbSBcIi4vcmVsZWFzZVwiO1xuXG5jb25zdCB7IHBydW5lIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVsZWFzZU1hcCB7XG4gIGNvbnN0cnVjdG9yKG1hcCkge1xuICAgIHRoaXMubWFwID0gbWFwO1xuICB9XG5cbiAgZ2V0TmFtZXMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBbXSxcbiAgICAgICAgICByZWxlYXNlcyA9IHRoaXMuZ2V0UmVsZWFzZXMoKTtcblxuICAgIHJlbGVhc2VzLmZvckVhY2goKHJlbGVhc2UpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByZWxlYXNlLmdldE5hbWUoKTtcblxuICAgICAgaWYgKG5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuYW1lcztcbiAgfVxuXG4gIGdldFJlbGVhc2VzKCkge1xuICAgIGNvbnN0IHJlbGVhc2VzID0gT2JqZWN0LnZhbHVlcyh0aGlzLm1hcCk7XG5cbiAgICByZXR1cm4gcmVsZWFzZXM7XG4gIH1cblxuICBnZXRTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBzdWJEaXJlY3RvcnlQYXRocyA9IE9iamVjdC5rZXlzKHRoaXMubWFwKTtcblxuICAgIHJldHVybiBzdWJEaXJlY3RvcnlQYXRocztcbiAgfVxuXG4gIGdldE5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAoKSB7XG4gICAgY29uc3QgbmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcCA9IHt9LFxuICAgICAgICAgIHN1YkRpcmVjdG9yeVBhdGhzID0gdGhpcy5nZXRTdWJEaXJlY3RvcnlQYXRocygpO1xuXG4gICAgc3ViRGlyZWN0b3J5UGF0aHMuZm9yRWFjaCgoc3ViRGlyZWN0b3J5UGF0aCkgPT4ge1xuICAgICAgY29uc3QgcmVsZWFzZSA9IHRoaXMucmV0cmlldmVSZWxlYXNlKHN1YkRpcmVjdG9yeVBhdGgpLFxuICAgICAgICAgICAgbmFtZSA9IHJlbGVhc2UuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBuYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwW25hbWVdID0gc3ViRGlyZWN0b3J5UGF0aDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwO1xuICB9XG5cbiAgcmV0cmlldmVSZWxlYXNlKHN1YkRpcmVjdG9yeVBhdGgpIHtcbiAgICBjb25zdCByZWxlYXNlID0gdGhpcy5tYXBbc3ViRGlyZWN0b3J5UGF0aF0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJlbGVhc2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN1YkRpcmVjdG9yeU1hcFN1YkRpcmVjdG9yeU5hbWVBbmRJZ25vcmVkRGVwZW5kZW5jaWVzKHN1YkRpcmVjdG9yeU1hcCwgc3ViRGlyZWN0b3J5TmFtZSwgaWdub3JlZERlcGVuZGVuY2llcykge1xuICAgIGNvbnN0IG1hcCA9IHt9LFxuICAgICAgICAgIHN1YkRpcmVjdG9yeVBhdGhzID0gc3ViRGlyZWN0b3J5UGF0aHNGcm9tU3ViRGlyZWN0b3J5TWFwU3ViRGlyZWN0b3J5TmFtZUFuZElnbm9yZWREZXBlbmRlbmNpZXMoc3ViRGlyZWN0b3J5TWFwLCBzdWJEaXJlY3RvcnlOYW1lLCBpZ25vcmVkRGVwZW5kZW5jaWVzKTtcblxuICAgIHN1YkRpcmVjdG9yeVBhdGhzLmZvckVhY2goKHN1YkRpcmVjdG9yeVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHJlbGVhc2UgPSBSZWxlYXNlLmZyb21TdWJEaXJlY3RvcnlQYXRoKHN1YkRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICBpZiAocmVsZWFzZSAhPT0gbnVsbCkge1xuICAgICAgICBtYXBbc3ViRGlyZWN0b3J5UGF0aF0gPSByZWxlYXNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVsZWFzZU1hcCA9IG5ldyBSZWxlYXNlTWFwKG1hcCk7XG5cbiAgICByZXR1cm4gcmVsZWFzZU1hcDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdWJEaXJlY3RvcnlQYXRoc0Zyb21TdWJEaXJlY3RvcnlNYXBTdWJEaXJlY3RvcnlOYW1lQW5kSWdub3JlZERlcGVuZGVuY2llcyhzdWJEaXJlY3RvcnlNYXAsIHN1YkRpcmVjdG9yeU5hbWUsIGlnbm9yZWREZXBlbmRlbmNpZXMpIHtcbiAgY29uc3Qgc3ViRGlyZWN0b3J5UGF0aHMgPSBbXSxcbiAgICAgICAgc3ViRGlyZWN0b3J5TmFtZXMgPSBPYmplY3Qua2V5cyhzdWJEaXJlY3RvcnlNYXApLCAvLy9cbiAgICAgICAgaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lcyA9IGlnbm9yZWREZXBlbmRlbmNpZXM7IC8vL1xuXG4gIHBydW5lKGlnbm9yZWREZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZXMsIChpZ25vcmVkRGVwZW5kZW5jeVN1YkRpcmVjdG9yeU5hbWUpID0+IHtcbiAgICBpZiAoaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lICE9PSBzdWJEaXJlY3RvcnlOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHN1YkRpcmVjdG9yeU5hbWVzLmZvckVhY2goKHN1YkRpcmVjdG9yeU5hbWUpID0+IHtcbiAgICBjb25zdCBpZ25vcmVkRGVwZW5kZW5jeVN1YkRpcmVjdG9yeU5hbWVzSW5jbHVkZXNTdWJEaXJlY3RvcnlOYW1lID0gaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lcy5pbmNsdWRlcyhzdWJEaXJlY3RvcnlOYW1lKTtcblxuICAgIGlmICghaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lc0luY2x1ZGVzU3ViRGlyZWN0b3J5TmFtZSkge1xuICAgICAgY29uc3Qgc3ViRGlyZWN0b3J5UGF0aCA9IHN1YkRpcmVjdG9yeU1hcFtzdWJEaXJlY3RvcnlOYW1lXTsgLy8vXG5cbiAgICAgIHN1YkRpcmVjdG9yeVBhdGhzLnB1c2goc3ViRGlyZWN0b3J5UGF0aCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gc3ViRGlyZWN0b3J5UGF0aHM7XG59XG4iXSwibmFtZXMiOlsiUmVsZWFzZU1hcCIsInBydW5lIiwiYXJyYXlVdGlsaXRpZXMiLCJtYXAiLCJnZXROYW1lcyIsIm5hbWVzIiwicmVsZWFzZXMiLCJnZXRSZWxlYXNlcyIsImZvckVhY2giLCJyZWxlYXNlIiwibmFtZSIsImdldE5hbWUiLCJwdXNoIiwiT2JqZWN0IiwidmFsdWVzIiwiZ2V0U3ViRGlyZWN0b3J5UGF0aHMiLCJzdWJEaXJlY3RvcnlQYXRocyIsImtleXMiLCJnZXROYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwIiwibmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcCIsInN1YkRpcmVjdG9yeVBhdGgiLCJyZXRyaWV2ZVJlbGVhc2UiLCJmcm9tU3ViRGlyZWN0b3J5TWFwU3ViRGlyZWN0b3J5TmFtZUFuZElnbm9yZWREZXBlbmRlbmNpZXMiLCJzdWJEaXJlY3RvcnlNYXAiLCJzdWJEaXJlY3RvcnlOYW1lIiwiaWdub3JlZERlcGVuZGVuY2llcyIsInN1YkRpcmVjdG9yeVBhdGhzRnJvbVN1YkRpcmVjdG9yeU1hcFN1YkRpcmVjdG9yeU5hbWVBbmRJZ25vcmVkRGVwZW5kZW5jaWVzIiwiUmVsZWFzZSIsImZyb21TdWJEaXJlY3RvcnlQYXRoIiwicmVsZWFzZU1hcCIsInN1YkRpcmVjdG9yeU5hbWVzIiwiaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lcyIsImlnbm9yZWREZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZSIsImlnbm9yZWREZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZXNJbmNsdWRlc1N1YkRpcmVjdG9yeU5hbWUiLCJpbmNsdWRlcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBUUE7OztlQUFxQkE7OzsyQkFOVTtnRUFFWDs7Ozs7O0FBRXBCLE1BQU0sRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRWpCLE1BQU1GO0lBQ25CLFlBQVlHLEdBQUcsQ0FBRTtRQUNmLElBQUksQ0FBQ0EsR0FBRyxHQUFHQTtJQUNiO0lBRUFDLFdBQVc7UUFDVCxNQUFNQyxRQUFRLEVBQUUsRUFDVkMsV0FBVyxJQUFJLENBQUNDLFdBQVc7UUFFakNELFNBQVNFLE9BQU8sQ0FBQyxDQUFDQztZQUNoQixNQUFNQyxPQUFPRCxRQUFRRSxPQUFPO1lBRTVCLElBQUlELFNBQVMsTUFBTTtnQkFDakJMLE1BQU1PLElBQUksQ0FBQ0Y7WUFDYjtRQUNGO1FBRUEsT0FBT0w7SUFDVDtJQUVBRSxjQUFjO1FBQ1osTUFBTUQsV0FBV08sT0FBT0MsTUFBTSxDQUFDLElBQUksQ0FBQ1gsR0FBRztRQUV2QyxPQUFPRztJQUNUO0lBRUFTLHVCQUF1QjtRQUNyQixNQUFNQyxvQkFBb0JILE9BQU9JLElBQUksQ0FBQyxJQUFJLENBQUNkLEdBQUc7UUFFOUMsT0FBT2E7SUFDVDtJQUVBRSwrQkFBK0I7UUFDN0IsTUFBTUMsNEJBQTRCLENBQUMsR0FDN0JILG9CQUFvQixJQUFJLENBQUNELG9CQUFvQjtRQUVuREMsa0JBQWtCUixPQUFPLENBQUMsQ0FBQ1k7WUFDekIsTUFBTVgsVUFBVSxJQUFJLENBQUNZLGVBQWUsQ0FBQ0QsbUJBQy9CVixPQUFPRCxRQUFRRSxPQUFPO1lBRTVCLElBQUlELFNBQVMsTUFBTTtnQkFDakJTLHlCQUF5QixDQUFDVCxLQUFLLEdBQUdVO1lBQ3BDO1FBQ0Y7UUFFQSxPQUFPRDtJQUNUO0lBRUFFLGdCQUFnQkQsZ0JBQWdCLEVBQUU7UUFDaEMsTUFBTVgsVUFBVSxJQUFJLENBQUNOLEdBQUcsQ0FBQ2lCLGlCQUFpQixJQUFJLE1BQU8sR0FBRztRQUV4RCxPQUFPWDtJQUNUO0lBRUEsT0FBT2EsMERBQTBEQyxlQUFlLEVBQUVDLGdCQUFnQixFQUFFQyxtQkFBbUIsRUFBRTtRQUN2SCxNQUFNdEIsTUFBTSxDQUFDLEdBQ1BhLG9CQUFvQlUsMkVBQTJFSCxpQkFBaUJDLGtCQUFrQkM7UUFFeElULGtCQUFrQlIsT0FBTyxDQUFDLENBQUNZO1lBQ3pCLE1BQU1YLFVBQVVrQixnQkFBTyxDQUFDQyxvQkFBb0IsQ0FBQ1I7WUFFN0MsSUFBSVgsWUFBWSxNQUFNO2dCQUNwQk4sR0FBRyxDQUFDaUIsaUJBQWlCLEdBQUdYO1lBQzFCO1FBQ0Y7UUFFQSxNQUFNb0IsYUFBYSxJQUFJN0IsV0FBV0c7UUFFbEMsT0FBTzBCO0lBQ1Q7QUFDRjtBQUVBLFNBQVNILDJFQUEyRUgsZUFBZSxFQUFFQyxnQkFBZ0IsRUFBRUMsbUJBQW1CO0lBQ3hJLE1BQU1ULG9CQUFvQixFQUFFLEVBQ3RCYyxvQkFBb0JqQixPQUFPSSxJQUFJLENBQUNNLGtCQUNoQ1EscUNBQXFDTixxQkFBcUIsR0FBRztJQUVuRXhCLE1BQU04QixvQ0FBb0MsQ0FBQ0M7UUFDekMsSUFBSUEsc0NBQXNDUixrQkFBa0I7WUFDMUQsT0FBTztRQUNUO0lBQ0Y7SUFFQU0sa0JBQWtCdEIsT0FBTyxDQUFDLENBQUNnQjtRQUN6QixNQUFNUyw2REFBNkRGLG1DQUFtQ0csUUFBUSxDQUFDVjtRQUUvRyxJQUFJLENBQUNTLDREQUE0RDtZQUMvRCxNQUFNYixtQkFBbUJHLGVBQWUsQ0FBQ0MsaUJBQWlCLEVBQUUsR0FBRztZQUUvRFIsa0JBQWtCSixJQUFJLENBQUNRO1FBQ3pCO0lBQ0Y7SUFFQSxPQUFPSjtBQUNUIn0=