occam-verify-cli 0.0.1092 → 0.0.1094

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 (66) hide show
  1. package/lib/assertion/contained.js +18 -16
  2. package/lib/combinator/bracketed.js +12 -5
  3. package/lib/constructor/bracketed.js +12 -5
  4. package/lib/index.js +2 -2
  5. package/lib/metavariable.js +9 -9
  6. package/lib/mixins/statement/qualified/unify.js +4 -4
  7. package/lib/mixins/statement/resolve.js +3 -3
  8. package/lib/nodeAndTokens/metavariable.js +193 -0
  9. package/lib/nodeAndTokens/statement.js +193 -0
  10. package/lib/nodeAndTokens/substitution/frame.js +159 -0
  11. package/lib/nodeAndTokens/substitution/statement.js +159 -0
  12. package/lib/nodeAndTokens/substitution/term.js +159 -0
  13. package/lib/nodeAndTokens/term.js +193 -0
  14. package/lib/nodeAndTokens/variable.js +193 -0
  15. package/lib/nodeAndTokens.js +93 -0
  16. package/lib/statement/unqualified.js +4 -4
  17. package/lib/statement.js +3 -4
  18. package/lib/substitution/frame.js +208 -0
  19. package/lib/substitution/statement.js +318 -0
  20. package/lib/substitution/term.js +202 -0
  21. package/lib/substitution.js +1 -8
  22. package/lib/substitutions.js +1 -13
  23. package/lib/term.js +3 -3
  24. package/lib/unifier/metaLevel.js +4 -4
  25. package/lib/unifier/termWithConstructor.js +6 -6
  26. package/lib/utilities/json.js +2 -2
  27. package/lib/utilities/substitutions.js +6 -21
  28. package/lib/variable.js +5 -5
  29. package/package.json +3 -1
  30. package/src/assertion/contained.js +17 -15
  31. package/src/combinator/bracketed.js +18 -13
  32. package/src/constructor/bracketed.js +19 -14
  33. package/src/index.js +1 -1
  34. package/src/metavariable.js +10 -11
  35. package/src/mixins/statement/qualified/unify.js +5 -5
  36. package/src/mixins/statement/resolve.js +4 -4
  37. package/src/nodeAndTokens/metavariable.js +49 -0
  38. package/src/nodeAndTokens/statement.js +49 -0
  39. package/src/nodeAndTokens/substitution/frame.js +23 -0
  40. package/src/nodeAndTokens/substitution/statement.js +23 -0
  41. package/src/nodeAndTokens/substitution/term.js +23 -0
  42. package/src/nodeAndTokens/term.js +49 -0
  43. package/src/nodeAndTokens/variable.js +49 -0
  44. package/src/nodeAndTokens.js +78 -0
  45. package/src/statement/unqualified.js +6 -3
  46. package/src/statement.js +5 -13
  47. package/src/substitution/{frameForMetavariable.js → frame.js} +21 -31
  48. package/src/substitution/{statementForMetavariable.js → statement.js} +59 -65
  49. package/src/substitution/{termForVariable.js → term.js} +21 -31
  50. package/src/substitution.js +0 -6
  51. package/src/substitutions.js +0 -12
  52. package/src/term.js +3 -4
  53. package/src/unifier/metaLevel.js +5 -5
  54. package/src/unifier/termWithConstructor.js +5 -5
  55. package/src/utilities/json.js +3 -2
  56. package/src/utilities/substitutions.js +7 -23
  57. package/src/variable.js +7 -8
  58. package/lib/ruleNames.js +0 -30
  59. package/lib/substitution/frameForMetavariable.js +0 -209
  60. package/lib/substitution/statementForMetavariable.js +0 -314
  61. package/lib/substitution/termForVariable.js +0 -203
  62. package/lib/utilities/node.js +0 -113
  63. package/lib/utilities/tokens.js +0 -69
  64. package/src/ruleNames.js +0 -6
  65. package/src/utilities/node.js +0 -114
  66. package/src/utilities/tokens.js +0 -63
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return FrameSubstitution;
9
+ }
10
+ });
11
+ var _shim = /*#__PURE__*/ _interop_require_default(require("../shim"));
12
+ var _substitution = /*#__PURE__*/ _interop_require_default(require("../substitution"));
13
+ var _frame = /*#__PURE__*/ _interop_require_default(require("../nodeAndTokens/substitution/frame"));
14
+ var _query = require("../utilities/query");
15
+ function _assert_this_initialized(self) {
16
+ if (self === void 0) {
17
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
18
+ }
19
+ return self;
20
+ }
21
+ function _call_super(_this, derived, args) {
22
+ derived = _get_prototype_of(derived);
23
+ return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
24
+ }
25
+ function _class_call_check(instance, Constructor) {
26
+ if (!(instance instanceof Constructor)) {
27
+ throw new TypeError("Cannot call a class as a function");
28
+ }
29
+ }
30
+ function _defineProperties(target, props) {
31
+ for(var i = 0; i < props.length; i++){
32
+ var descriptor = props[i];
33
+ descriptor.enumerable = descriptor.enumerable || false;
34
+ descriptor.configurable = true;
35
+ if ("value" in descriptor) descriptor.writable = true;
36
+ Object.defineProperty(target, descriptor.key, descriptor);
37
+ }
38
+ }
39
+ function _create_class(Constructor, protoProps, staticProps) {
40
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
41
+ if (staticProps) _defineProperties(Constructor, staticProps);
42
+ return Constructor;
43
+ }
44
+ function _get_prototype_of(o) {
45
+ _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
46
+ return o.__proto__ || Object.getPrototypeOf(o);
47
+ };
48
+ return _get_prototype_of(o);
49
+ }
50
+ function _inherits(subClass, superClass) {
51
+ if (typeof superClass !== "function" && superClass !== null) {
52
+ throw new TypeError("Super expression must either be null or a function");
53
+ }
54
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
55
+ constructor: {
56
+ value: subClass,
57
+ writable: true,
58
+ configurable: true
59
+ }
60
+ });
61
+ if (superClass) _set_prototype_of(subClass, superClass);
62
+ }
63
+ function _interop_require_default(obj) {
64
+ return obj && obj.__esModule ? obj : {
65
+ default: obj
66
+ };
67
+ }
68
+ function _possible_constructor_return(self, call) {
69
+ if (call && (_type_of(call) === "object" || typeof call === "function")) {
70
+ return call;
71
+ }
72
+ return _assert_this_initialized(self);
73
+ }
74
+ function _set_prototype_of(o, p) {
75
+ _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
76
+ o.__proto__ = p;
77
+ return o;
78
+ };
79
+ return _set_prototype_of(o, p);
80
+ }
81
+ function _type_of(obj) {
82
+ "@swc/helpers - typeof";
83
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
84
+ }
85
+ function _is_native_reflect_construct() {
86
+ try {
87
+ var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
88
+ } catch (_) {}
89
+ return (_is_native_reflect_construct = function() {
90
+ return !!result;
91
+ })();
92
+ }
93
+ var frameNodeQuery = (0, _query.nodeQuery)("/frameSubstitution/frame[0]"), metavariableNodeQuery = (0, _query.nodeQuery)("/frameSubstitution/frame[1]/metavariable!"), frameSubstitutionNodeQuery = (0, _query.nodeQuery)("/statement/frameSubstitution");
94
+ var FrameSubstitution = /*#__PURE__*/ function(Substitution) {
95
+ _inherits(FrameSubstitution, Substitution);
96
+ function FrameSubstitution(string, node, tokens, frame, metavariable) {
97
+ _class_call_check(this, FrameSubstitution);
98
+ var _this;
99
+ _this = _call_super(this, FrameSubstitution, [
100
+ string,
101
+ node,
102
+ tokens
103
+ ]);
104
+ _this.frame = frame;
105
+ _this.metavariable = metavariable;
106
+ return _this;
107
+ }
108
+ _create_class(FrameSubstitution, [
109
+ {
110
+ key: "getFrame",
111
+ value: function getFrame() {
112
+ return this.frame;
113
+ }
114
+ },
115
+ {
116
+ key: "getMetavariable",
117
+ value: function getMetavariable() {
118
+ return this.metavariable;
119
+ }
120
+ },
121
+ {
122
+ key: "getMetavariableName",
123
+ value: function getMetavariableName() {
124
+ var metavariableName = this.metavariable.getName();
125
+ return metavariableName;
126
+ }
127
+ },
128
+ {
129
+ key: "getSubstitutionString",
130
+ value: function getSubstitutionString() {
131
+ var frameString = this.frame.getString(), metavariableString = this.metavariable.getString(), substitutionString = "[".concat(frameString, " for [").concat(metavariableString, "]]");
132
+ return substitutionString;
133
+ }
134
+ },
135
+ {
136
+ key: "isEqualTo",
137
+ value: function isEqualTo(substitution) {
138
+ var equalTo = false;
139
+ var frameNode = substitution.getFrameNode(), metavariableName = substitution.getMetavariableName();
140
+ if (frameNode !== null && metavariableName !== null) {
141
+ var frameNodeMatches = this.matchFrameNode(frameNode), metavariableNameMatches = this.matchMetavariableName(metavariableName);
142
+ equalTo = frameNodeMatches && metavariableNameMatches;
143
+ }
144
+ return equalTo;
145
+ }
146
+ },
147
+ {
148
+ key: "matchFrameNode",
149
+ value: function matchFrameNode(frameNode) {
150
+ return this.frame.matchFrameNode(frameNode);
151
+ }
152
+ },
153
+ {
154
+ key: "matchMetavariableNode",
155
+ value: function matchMetavariableNode(metavariableNode) {
156
+ return this.metavariable.matchMetavariableNode(metavariableNode);
157
+ }
158
+ },
159
+ {
160
+ key: "matchMetavariableName",
161
+ value: function matchMetavariableName(metavariableName) {
162
+ var metavariableNameMatches;
163
+ var generalMetavariableName = metavariableName; ///
164
+ metavariableName = this.metavariable.getName();
165
+ var specificMetavariableName = metavariableName; ///
166
+ metavariableNameMatches = generalMetavariableName === specificMetavariableName;
167
+ return metavariableNameMatches;
168
+ }
169
+ },
170
+ {
171
+ key: "matchMetavariableNameAndSubstitutionNode",
172
+ value: function matchMetavariableNameAndSubstitutionNode(metavariableName, substitutionNode) {
173
+ var metavariableNameMatches = this.matchMetavariableName(metavariableName), substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode), metavariableNameAndSubstitutionNodeMatches = metavariableNameMatches && substitutionNodeMatches;
174
+ return metavariableNameAndSubstitutionNodeMatches;
175
+ }
176
+ }
177
+ ], [
178
+ {
179
+ key: "fromStatementNode",
180
+ value: function fromStatementNode(statementNode, context) {
181
+ var frameSubstitution = null;
182
+ var frameSubstitutionNode = frameSubstitutionNodeQuery(statementNode);
183
+ if (frameSubstitutionNode !== null) {
184
+ var frameNode = frameNodeQuery(frameSubstitutionNode), metavariableNode = metavariableNodeQuery(frameSubstitutionNode);
185
+ if (frameNode !== null && metavariableNode !== null) {
186
+ var Frame = _shim.default.Frame, Metavariable = _shim.default.Metavariable, frame = Frame.fromFrameNode(frameNode, context), metavariable = Metavariable.fromMetavariableNode(metavariableNode, context), node = frameSubstitutionNode, tokens = context.nodeAsTokens(node), string = stringFromFrameAndMetavariable(frame, metavariable);
187
+ frameSubstitution = new FrameSubstitution(string, node, tokens, frame, metavariable);
188
+ }
189
+ }
190
+ return frameSubstitution;
191
+ }
192
+ },
193
+ {
194
+ key: "fromFrameAndMetavariable",
195
+ value: function fromFrameAndMetavariable(frame, metavariable, context) {
196
+ var string = stringFromFrameAndMetavariable(frame, metavariable), frameSubstitutionString = string, frameSubstitutionNodeAndTokens = _frame.default.fromFrameSubstitutionString(frameSubstitutionString, context), node = frameSubstitutionNodeAndTokens.getNode(), tokens = frameSubstitutionNodeAndTokens.getTokens(), frameSubstitution = new FrameSubstitution(string, node, tokens, frame, metavariable);
197
+ return frameSubstitution;
198
+ }
199
+ }
200
+ ]);
201
+ return FrameSubstitution;
202
+ }(_substitution.default);
203
+ function stringFromFrameAndMetavariable(frame, metavariable) {
204
+ var frameString = frame.getString(), metavariableString = metavariable.getString(), string = "[".concat(frameString, " for [").concat(metavariableString, "]]");
205
+ return string;
206
+ }
207
+
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJzdGl0dXRpb24vZnJhbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBzaGltIGZyb20gXCIuLi9zaGltXCI7XG5pbXBvcnQgU3Vic3RpdHV0aW9uIGZyb20gXCIuLi9zdWJzdGl0dXRpb25cIjtcbmltcG9ydCBGcmFtZVN1YnN0aXR1dGlvbk5vZGVBbmRUb2tlbnMgZnJvbSBcIi4uL25vZGVBbmRUb2tlbnMvc3Vic3RpdHV0aW9uL2ZyYW1lXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWVTdWJzdGl0dXRpb24vZnJhbWVbMF1cIiksXG4gICAgICBtZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWVTdWJzdGl0dXRpb24vZnJhbWVbMV0vbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIGZyYW1lU3Vic3RpdHV0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9mcmFtZVN1YnN0aXR1dGlvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJhbWVTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24ge1xuICBjb25zdHJ1Y3RvcihzdHJpbmcsIG5vZGUsIHRva2VucywgZnJhbWUsIG1ldGF2YXJpYWJsZSkge1xuICAgIHN1cGVyKHN0cmluZywgbm9kZSwgdG9rZW5zKTtcblxuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGdldEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5hbWUoKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubWV0YXZhcmlhYmxlLmdldE5hbWUoKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOYW1lO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9uU3RyaW5nKCkge1xuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5mcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7ZnJhbWVTdHJpbmd9IGZvciBbJHttZXRhdmFyaWFibGVTdHJpbmd9XV1gO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblN0cmluZztcbiAgfVxuXG4gIGlzRXF1YWxUbyhzdWJzdGl0dXRpb24pIHtcbiAgICBsZXQgZXF1YWxUbyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZnJhbWVOb2RlID0gc3Vic3RpdHV0aW9uLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBzdWJzdGl0dXRpb24uZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgaWYgKChmcmFtZU5vZGUgIT09IG51bGwpICYmIChtZXRhdmFyaWFibGVOYW1lICE9PSBudWxsKSkge1xuICAgICAgY29uc3QgZnJhbWVOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzID0gdGhpcy5tYXRjaE1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgIGVxdWFsVG8gPSAoZnJhbWVOb2RlTWF0Y2hlcyAmJiBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpIHsgcmV0dXJuIHRoaXMuZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTsgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGxldCBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcztcblxuICAgIGNvbnN0IGdlbmVyYWxNZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZTsgLy8vXG5cbiAgICBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TmFtZSgpO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNNZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZTsgLy8vXG5cbiAgICBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyA9IChnZW5lcmFsTWV0YXZhcmlhYmxlTmFtZSA9PT0gc3BlY2lmaWNNZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTmFtZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzID0gdGhpcy5tYXRjaE1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSAobWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgJiYgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gICAgaWYgKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVOb2RlID0gZnJhbWVOb2RlUXVlcnkoZnJhbWVTdWJzdGl0dXRpb25Ob2RlKSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkoZnJhbWVTdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgaWYgKChmcmFtZU5vZGUgIT09IG51bGwpICYmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICBjb25zdCB7IEZyYW1lLCBNZXRhdmFyaWFibGUgfSA9IHNoaW0sXG4gICAgICAgICAgICAgIGZyYW1lID0gRnJhbWUuZnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5ub2RlQXNUb2tlbnMobm9kZSksXG4gICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlKTtcblxuICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZVN1YnN0aXR1dGlvbihzdHJpbmcsIG5vZGUsIHRva2VucywgZnJhbWUsIG1ldGF2YXJpYWJsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUpLFxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nID0gc3RyaW5nLCAgLy8vXG4gICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zID0gRnJhbWVTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zLmZyb21GcmFtZVN1YnN0aXR1dGlvblN0cmluZyhmcmFtZVN1YnN0aXR1dGlvblN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZUFuZFRva2Vucy5nZXROb2RlKCksXG4gICAgICAgICAgdG9rZW5zID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zLmdldFRva2VucygpLFxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKHN0cmluZywgbm9kZSwgdG9rZW5zLCBmcmFtZSwgbWV0YXZhcmlhYmxlKTtcblxuICAgIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0cmluZyA9IGBbJHtmcmFtZVN0cmluZ30gZm9yIFske21ldGF2YXJpYWJsZVN0cmluZ31dXWA7XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cbiJdLCJuYW1lcyI6WyJGcmFtZVN1YnN0aXR1dGlvbiIsImZyYW1lTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlUXVlcnkiLCJzdHJpbmciLCJub2RlIiwidG9rZW5zIiwiZnJhbWUiLCJtZXRhdmFyaWFibGUiLCJnZXRGcmFtZSIsImdldE1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TmFtZSIsImdldFN1YnN0aXR1dGlvblN0cmluZyIsImZyYW1lU3RyaW5nIiwiZ2V0U3RyaW5nIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwic3Vic3RpdHV0aW9uU3RyaW5nIiwiaXNFcXVhbFRvIiwic3Vic3RpdHV0aW9uIiwiZXF1YWxUbyIsImZyYW1lTm9kZSIsImdldEZyYW1lTm9kZSIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdlbmVyYWxNZXRhdmFyaWFibGVOYW1lIiwic3BlY2lmaWNNZXRhdmFyaWFibGVOYW1lIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsImZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsImNvbnRleHQiLCJmcmFtZVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsIkZyYW1lIiwic2hpbSIsIk1ldGF2YXJpYWJsZSIsImZyb21GcmFtZU5vZGUiLCJmcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm5vZGVBc1Rva2VucyIsInN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsImZyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsImZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zIiwiRnJhbWVTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zIiwiZnJvbUZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nIiwiZ2V0Tm9kZSIsImdldFRva2VucyIsIlN1YnN0aXR1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFZcUJBOzs7MkRBVko7bUVBQ1E7NERBQ2tCO3FCQUVqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUxQixJQUFNQyxpQkFBaUJDLElBQUFBLGdCQUFTLEVBQUMsZ0NBQzNCQyx3QkFBd0JELElBQUFBLGdCQUFTLEVBQUMsOENBQ2xDRSw2QkFBNkJGLElBQUFBLGdCQUFTLEVBQUM7QUFFOUIsSUFBQSxBQUFNRixrQ0FBTjtjQUFNQTthQUFBQSxrQkFDUEssTUFBTSxFQUFFQyxJQUFJLEVBQUVDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxZQUFZO2dDQURsQ1Q7O2dCQUVqQixrQkFGaUJBO1lBRVhLO1lBQVFDO1lBQU1DOztRQUVwQixNQUFLQyxLQUFLLEdBQUdBO1FBQ2IsTUFBS0MsWUFBWSxHQUFHQTs7O2tCQUxIVDs7WUFRbkJVLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsS0FBSztZQUNuQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsWUFBWTtZQUMxQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFN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
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return _default;
9
+ }
10
+ });
11
+ var _shim = /*#__PURE__*/ _interop_require_default(require("../shim"));
12
+ var _substitution = /*#__PURE__*/ _interop_require_default(require("../substitution"));
13
+ var _local = /*#__PURE__*/ _interop_require_default(require("../context/local"));
14
+ var _metaLevel = /*#__PURE__*/ _interop_require_default(require("../unifier/metaLevel"));
15
+ var _statement = /*#__PURE__*/ _interop_require_default(require("../nodeAndTokens/substitution/statement"));
16
+ var _brackets = require("../utilities/brackets");
17
+ var _json = require("../utilities/json");
18
+ function _assert_this_initialized(self) {
19
+ if (self === void 0) {
20
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
21
+ }
22
+ return self;
23
+ }
24
+ function _call_super(_this, derived, args) {
25
+ derived = _get_prototype_of(derived);
26
+ return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
27
+ }
28
+ function _class_call_check(instance, Constructor) {
29
+ if (!(instance instanceof Constructor)) {
30
+ throw new TypeError("Cannot call a class as a function");
31
+ }
32
+ }
33
+ function _defineProperties(target, props) {
34
+ for(var i = 0; i < props.length; i++){
35
+ var descriptor = props[i];
36
+ descriptor.enumerable = descriptor.enumerable || false;
37
+ descriptor.configurable = true;
38
+ if ("value" in descriptor) descriptor.writable = true;
39
+ Object.defineProperty(target, descriptor.key, descriptor);
40
+ }
41
+ }
42
+ function _create_class(Constructor, protoProps, staticProps) {
43
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
44
+ if (staticProps) _defineProperties(Constructor, staticProps);
45
+ return Constructor;
46
+ }
47
+ function _get_prototype_of(o) {
48
+ _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
49
+ return o.__proto__ || Object.getPrototypeOf(o);
50
+ };
51
+ return _get_prototype_of(o);
52
+ }
53
+ function _inherits(subClass, superClass) {
54
+ if (typeof superClass !== "function" && superClass !== null) {
55
+ throw new TypeError("Super expression must either be null or a function");
56
+ }
57
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
58
+ constructor: {
59
+ value: subClass,
60
+ writable: true,
61
+ configurable: true
62
+ }
63
+ });
64
+ if (superClass) _set_prototype_of(subClass, superClass);
65
+ }
66
+ function _interop_require_default(obj) {
67
+ return obj && obj.__esModule ? obj : {
68
+ default: obj
69
+ };
70
+ }
71
+ function _possible_constructor_return(self, call) {
72
+ if (call && (_type_of(call) === "object" || typeof call === "function")) {
73
+ return call;
74
+ }
75
+ return _assert_this_initialized(self);
76
+ }
77
+ function _set_prototype_of(o, p) {
78
+ _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
79
+ o.__proto__ = p;
80
+ return o;
81
+ };
82
+ return _set_prototype_of(o, p);
83
+ }
84
+ function _type_of(obj) {
85
+ "@swc/helpers - typeof";
86
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
87
+ }
88
+ function _is_native_reflect_construct() {
89
+ try {
90
+ var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
91
+ } catch (_) {}
92
+ return (_is_native_reflect_construct = function() {
93
+ return !!result;
94
+ })();
95
+ }
96
+ var StatementSubstitution = /*#__PURE__*/ function(Substitution) {
97
+ _inherits(StatementSubstitution, Substitution);
98
+ function StatementSubstitution(string, node, tokens, resolved, statement, metavariable, substitution) {
99
+ _class_call_check(this, StatementSubstitution);
100
+ var _this;
101
+ _this = _call_super(this, StatementSubstitution, [
102
+ string,
103
+ node,
104
+ tokens
105
+ ]);
106
+ _this.resolved = resolved;
107
+ _this.statement = statement;
108
+ _this.metavariable = metavariable;
109
+ _this.substitution = substitution;
110
+ return _this;
111
+ }
112
+ _create_class(StatementSubstitution, [
113
+ {
114
+ key: "isResolved",
115
+ value: function isResolved() {
116
+ return this.resolved;
117
+ }
118
+ },
119
+ {
120
+ key: "getStatement",
121
+ value: function getStatement() {
122
+ return this.statement;
123
+ }
124
+ },
125
+ {
126
+ key: "getMetavariable",
127
+ value: function getMetavariable() {
128
+ return this.metavariable;
129
+ }
130
+ },
131
+ {
132
+ key: "getSubstitution",
133
+ value: function getSubstitution() {
134
+ return this.substitution;
135
+ }
136
+ },
137
+ {
138
+ key: "getMetavariableNode",
139
+ value: function getMetavariableNode() {
140
+ var metavariableNode = this.metavariable.getNode();
141
+ return metavariableNode;
142
+ }
143
+ },
144
+ {
145
+ key: "isSimple",
146
+ value: function isSimple() {
147
+ var simple = this.substitution === null;
148
+ return simple;
149
+ }
150
+ },
151
+ {
152
+ key: "matchStatementNode",
153
+ value: function matchStatementNode(statementNode) {
154
+ statementNode = (0, _brackets.stripBracketsFromStatementNode)(statementNode); ///
155
+ var statementNodeMatches = this.statement.matchStatementNode(statementNode);
156
+ return statementNodeMatches;
157
+ }
158
+ },
159
+ {
160
+ key: "matchMetavariableNode",
161
+ value: function matchMetavariableNode(metavariableNode) {
162
+ return this.metavariable.matchMetavariableNode(metavariableNode);
163
+ }
164
+ },
165
+ {
166
+ key: "matchSubstitutionNode",
167
+ value: function matchSubstitutionNode(substitutionNode) {
168
+ var substitutionNodeMatches;
169
+ if (substitutionNode === null && this.substitution === null) {
170
+ substitutionNodeMatches = true;
171
+ } else if (substitutionNode === null && this.substitution !== null) {
172
+ substitutionNodeMatches = false;
173
+ } else if (substitutionNode !== null && this.substitution === null) {
174
+ substitutionNodeMatches = false;
175
+ } else {
176
+ substitutionNodeMatches = this.substitution.matchSubstitutionNode(substitutionNode);
177
+ }
178
+ return substitutionNodeMatches;
179
+ }
180
+ },
181
+ {
182
+ key: "matchMetavariableNodeAndSubstitutionNode",
183
+ value: function matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
184
+ var metavariableNodeMatches = this.matchMetavariableNode(metavariableNode), substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode), metavariableNodeAndSubstitutionNodeMatches = metavariableNodeMatches && substitutionNodeMatches;
185
+ return metavariableNodeAndSubstitutionNodeMatches;
186
+ }
187
+ },
188
+ {
189
+ key: "resolve",
190
+ value: function resolve(substitutions, generalContext, specificContext) {
191
+ var substitutionString = this.string;
192
+ var metavariableNode = this.getMetavariableNode(), simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableNode(metavariableNode);
193
+ if (simpleSubstitution !== null) {
194
+ specificContext.trace("Resolving the ".concat(substitutionString, " substitution..."));
195
+ var context = generalContext, localContext = _local.default.fromContextAndTokens(context, this.tokens);
196
+ generalContext = localContext; ///
197
+ var substitution = simpleSubstitution, substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions, generalContext, specificContext);
198
+ this.resolved = substitutionResolved; ///
199
+ if (this.resolved) {
200
+ specificContext.debug("...resolved the ".concat(substitutionString, " substitution."));
201
+ }
202
+ }
203
+ }
204
+ },
205
+ {
206
+ key: "resolveSubstitution",
207
+ value: function resolveSubstitution(substitution, statement, substitutions, generalContext, specificContext) {
208
+ var substitutionResolved = false;
209
+ var substitutionString = substitution.getString();
210
+ specificContext.trace("Resolving the ".concat(substitutionString, " substitution..."));
211
+ var generalSubstitution = substitution, specificSubstitution = this.unifyStatement(statement, specificContext, specificContext); ///
212
+ if (specificSubstitution !== null) {
213
+ substitutions.snapshot();
214
+ var generalSubstitutionString = generalSubstitution.getString(), specificSubstitutionString = specificSubstitution.getString();
215
+ specificContext.trace("Unifying the '".concat(specificSubstitutionString, "' substitution with the '").concat(generalSubstitutionString, "' substitution..."));
216
+ var generalSubstitutionNode = generalSubstitution.getNode(), specificSubstitutionNode = specificSubstitution.getNode(), generalSubstitutionTokens = generalSubstitution.getTokens(), specificSubstitutionTokens = specificSubstitution.getTokens();
217
+ var tokens, context, localContext;
218
+ tokens = generalSubstitutionTokens; ///
219
+ context = generalContext; ///
220
+ localContext = _local.default.fromContextAndTokens(context, tokens);
221
+ generalContext = localContext; ///
222
+ tokens = specificSubstitutionTokens; ///
223
+ context = specificContext; ///
224
+ localContext = _local.default.fromContextAndTokens(context, tokens);
225
+ specificContext = localContext; ///
226
+ var generalNode = generalSubstitutionNode, specificNode = specificSubstitutionNode, unifiedAtMetaLevel = _metaLevel.default.unify(generalNode, specificNode, substitutions, generalContext, specificContext);
227
+ if (unifiedAtMetaLevel) {
228
+ specificContext.trace("...unified the '".concat(specificSubstitutionString, "' substitution with the '").concat(generalSubstitutionString, "' substitution."));
229
+ }
230
+ unifiedAtMetaLevel ? substitutions.continue() : substitutions.rollback(specificContext);
231
+ substitutionResolved = unifiedAtMetaLevel; ///
232
+ }
233
+ if (substitutionResolved) {
234
+ specificContext.debug("...resolved the ".concat(substitutionString, " substitution."));
235
+ }
236
+ return substitutionResolved;
237
+ }
238
+ },
239
+ {
240
+ key: "unifyStatement",
241
+ value: function unifyStatement(statement, generalContext, specificContext) {
242
+ var specificSubstitution = null;
243
+ var Substitutions = _shim.default.Substitutions, substitutions = Substitutions.fromNothing(), statementUnified = this.statement.unifyStatement(statement, substitutions, generalContext, specificContext);
244
+ if (statementUnified) {
245
+ var substitutionsLength = substitutions.getLength();
246
+ if (substitutionsLength === 1) {
247
+ var firstSubstitution = substitutions.getFirstSubstitution();
248
+ specificSubstitution = firstSubstitution; ///
249
+ }
250
+ }
251
+ return specificSubstitution;
252
+ }
253
+ },
254
+ {
255
+ key: "toJSON",
256
+ value: function toJSON() {
257
+ var metavariableJSON = (0, _json.metavariableToMetavariableJSON)(this.metavariable), statementJSON = (0, _json.statementToStatementJSON)(this.statement), metavariable = metavariableJSON, statement = statementJSON, string = this.string, json = {
258
+ string: string,
259
+ statement: statement,
260
+ metavariable: metavariable
261
+ };
262
+ return json;
263
+ }
264
+ }
265
+ ], [
266
+ {
267
+ key: "fromJSON",
268
+ value: function fromJSON(json, fileContext) {
269
+ var string = json.string, context = fileContext, statementSubstitutionString = string, statementSubstitutionNodeAndTokens = _statement.default.fromStatementSubstitutionString(statementSubstitutionString, context), node = statementSubstitutionNodeAndTokens.getNode(), tokens = statementSubstitutionNodeAndTokens.getTokens(), resolved = true, statement = (0, _json.statementFromJSON)(json, fileContext), metavariable = (0, _json.metavariableFromJSON)(json, fileContext), substitution = null, statementSubstitution = new StatementSubstitution(string, node, tokens, resolved, statement, metavariable, substitution);
270
+ return statementSubstitution;
271
+ }
272
+ },
273
+ {
274
+ key: "fromStatementAndMetavariable",
275
+ value: function fromStatementAndMetavariable(statement, metavariable, context) {
276
+ var statementNode = statement.getNode();
277
+ statementNode = (0, _brackets.stripBracketsFromStatementNode)(statementNode); ///
278
+ var Statement = _shim.default.Statement;
279
+ statement = Statement.fromStatementNode(statementNode, context);
280
+ var string = stringFromStatementAndMetavariable(statement, metavariable), statementSubstitutionString = string, statementSubstitutionNodeAndTokens = _statement.default.fromStatementSubstitutionString(statementSubstitutionString, context), node = statementSubstitutionNodeAndTokens.getNode(), tokens = statementSubstitutionNodeAndTokens.getTokens(), resolved = true, substitution = null, statementSubstitution = new StatementSubstitution(string, node, tokens, resolved, statement, metavariable, substitution);
281
+ return statementSubstitution;
282
+ }
283
+ },
284
+ {
285
+ key: "fromStatementMetavariableAndSubstitution",
286
+ value: function fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context) {
287
+ var statementNode = statement.getNode();
288
+ statementNode = (0, _brackets.stripBracketsFromStatementNode)(statementNode); ///
289
+ var Statement = _shim.default.Statement;
290
+ statement = Statement.fromStatementNode(statementNode, context);
291
+ var string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context), statementSubstitutionString = string, statementSubstitutionNodeAndTokens = _statement.default.fromStatementSubstitutionString(statementSubstitutionString, context), node = statementSubstitutionNodeAndTokens.getNode(), tokens = statementSubstitutionNodeAndTokens.getTokens(), resolved = false, statementSubstitution = new StatementSubstitution(string, node, tokens, resolved, statement, metavariable, substitution);
292
+ return statementSubstitution;
293
+ }
294
+ }
295
+ ]);
296
+ return StatementSubstitution;
297
+ }(_substitution.default);
298
+ Object.assign(_shim.default, {
299
+ StatementSubstitution: StatementSubstitution
300
+ });
301
+ var _default = StatementSubstitution;
302
+ function stringFromStatementAndMetavariable(statement, metavariable) {
303
+ var statementString = statement.getString(), metavariableString = metavariable.getString(), string = "[".concat(statementString, " for ").concat(metavariableString, "]");
304
+ return string;
305
+ }
306
+ function stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution) {
307
+ var string;
308
+ var statementString = statement.getString(), metavariableString = metavariable.getString();
309
+ if (substitution === null) {
310
+ string = "[".concat(statementString, " for ").concat(metavariableString, "]");
311
+ } else {
312
+ var substitutionString = substitution.getString();
313
+ string = "[".concat(statementString, " for ").concat(metavariableString).concat(substitutionString, "]");
314
+ }
315
+ return string;
316
+ }
317
+
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJzdGl0dXRpb24vc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc2hpbSBmcm9tIFwiLi4vc2hpbVwiO1xuaW1wb3J0IFN1YnN0aXR1dGlvbiBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uXCI7XG5pbXBvcnQgTG9jYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xvY2FsXCI7XG5pbXBvcnQgbWV0YUxldmVsVW5pZmllciBmcm9tIFwiLi4vdW5pZmllci9tZXRhTGV2ZWxcIjtcbmltcG9ydCBTdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zIGZyb20gXCIuLi9ub2RlQW5kVG9rZW5zL3N1YnN0aXR1dGlvbi9zdGF0ZW1lbnRcIjtcblxuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmFja2V0c1wiO1xuaW1wb3J0IHsgc3RhdGVtZW50RnJvbUpTT04sIHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTiwgbWV0YXZhcmlhYmxlRnJvbUpTT04sIG1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jbGFzcyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24ge1xuICBjb25zdHJ1Y3RvcihzdHJpbmcsIG5vZGUsIHRva2VucywgcmVzb2x2ZWQsIHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24pIHtcbiAgICBzdXBlcihzdHJpbmcsIG5vZGUsIHRva2Vucyk7XG5cbiAgICB0aGlzLnJlc29sdmVkID0gcmVzb2x2ZWQ7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gICAgdGhpcy5zdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb247XG4gIH1cblxuICBpc1Jlc29sdmVkKCkge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5tZXRhdmFyaWFibGUuZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGU7XG4gIH1cblxuICBpc1NpbXBsZSgpIHtcbiAgICBjb25zdCBzaW1wbGUgPSAodGhpcy5zdWJzdGl0dXRpb24gPT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHNpbXBsZTtcbiAgfVxuXG4gIG1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgc3RhdGVtZW50Tm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTsgLy8vXG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHRoaXMuc3RhdGVtZW50Lm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBtYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGxldCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcztcblxuICAgIGlmICgoc3Vic3RpdHV0aW9uTm9kZSA9PT0gbnVsbCkgJiYgKHRoaXMuc3Vic3RpdHV0aW9uID09PSBudWxsKSkge1xuICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoKHN1YnN0aXR1dGlvbk5vZGUgPT09IG51bGwpICYmICh0aGlzLnN1YnN0aXR1dGlvbiAhPT0gbnVsbCkpIHtcbiAgICAgIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICgoc3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkgJiYgKHRoaXMuc3Vic3RpdHV0aW9uID09PSBudWxsKSkge1xuICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLnN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyAmJiBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgcmVzb2x2ZShzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5zdHJpbmc7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgc2ltcGxlU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kU2ltcGxlU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgaWYgKHNpbXBsZVN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3BlY2lmaWNDb250ZXh0LnRyYWNlKGBSZXNvbHZpbmcgdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgICAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgICAgIGxvY2FsQ29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tQ29udGV4dEFuZFRva2Vucyhjb250ZXh0LCB0aGlzLnRva2Vucyk7XG5cbiAgICAgIGdlbmVyYWxDb250ZXh0ID0gbG9jYWxDb250ZXh0OyAgLy8vXG5cbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHNpbXBsZVN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9uUmVzb2x2ZWQgPSBzdWJzdGl0dXRpb24ucmVzb2x2ZVN1YnN0aXR1dGlvbih0aGlzLnN1YnN0aXR1dGlvbiwgdGhpcy5zdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICB0aGlzLnJlc29sdmVkID0gc3Vic3RpdHV0aW9uUmVzb2x2ZWQ7IC8vL1xuXG4gICAgICBpZiAodGhpcy5yZXNvbHZlZCkge1xuICAgICAgICBzcGVjaWZpY0NvbnRleHQuZGVidWcoYC4uLnJlc29sdmVkIHRoZSAke3N1YnN0aXR1dGlvblN0cmluZ30gc3Vic3RpdHV0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgc3Vic3RpdHV0aW9uUmVzb2x2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dC50cmFjZShgUmVzb2x2aW5nIHRoZSAke3N1YnN0aXR1dGlvblN0cmluZ30gc3Vic3RpdHV0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzcGVjaWZpY0NvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7ICAvLy9cblxuICAgIGlmIChzcGVjaWZpY1N1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3Vic3RpdHV0aW9ucy5zbmFwc2hvdCgpO1xuXG4gICAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgIHNwZWNpZmljQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbk5vZGUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uTm9kZSA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25Ub2tlbnMgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFRva2VucygpLFxuICAgICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25Ub2tlbnMgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRUb2tlbnMoKTtcblxuICAgICAgbGV0IHRva2VucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGxvY2FsQ29udGV4dDtcblxuICAgICAgdG9rZW5zID0gZ2VuZXJhbFN1YnN0aXR1dGlvblRva2VuczsgLy8vXG5cbiAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgIGxvY2FsQ29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tQ29udGV4dEFuZFRva2Vucyhjb250ZXh0LCB0b2tlbnMpO1xuXG4gICAgICBnZW5lcmFsQ29udGV4dCA9IGxvY2FsQ29udGV4dDsgIC8vL1xuXG4gICAgICB0b2tlbnMgPSBzcGVjaWZpY1N1YnN0aXR1dGlvblRva2VuczsgIC8vL1xuXG4gICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgIGxvY2FsQ29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tQ29udGV4dEFuZFRva2Vucyhjb250ZXh0LCB0b2tlbnMpO1xuXG4gICAgICBzcGVjaWZpY0NvbnRleHQgPSBsb2NhbENvbnRleHQ7IC8vL1xuXG4gICAgICBjb25zdCBnZW5lcmFsTm9kZSA9IGdlbmVyYWxTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbk5vZGUsICAvLy8sXG4gICAgICAgICAgICB1bmlmaWVkQXRNZXRhTGV2ZWwgPSBtZXRhTGV2ZWxVbmlmaWVyLnVuaWZ5KGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAodW5pZmllZEF0TWV0YUxldmVsKSB7XG4gICAgICAgIHNwZWNpZmljQ29udGV4dC50cmFjZShgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbi5gKTtcbiAgICAgIH1cblxuICAgICAgdW5pZmllZEF0TWV0YUxldmVsID9cbiAgICAgICAgc3Vic3RpdHV0aW9ucy5jb250aW51ZSgpIDpcbiAgICAgICAgICBzdWJzdGl0dXRpb25zLnJvbGxiYWNrKHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIHN1YnN0aXR1dGlvblJlc29sdmVkID0gdW5pZmllZEF0TWV0YUxldmVsOyAgLy8vXG4gICAgfVxuXG4gICAgaWYgKHN1YnN0aXR1dGlvblJlc29sdmVkKSB7XG4gICAgICBzcGVjaWZpY0NvbnRleHQuZGVidWcoYC4uLnJlc29sdmVkIHRoZSAke3N1YnN0aXR1dGlvblN0cmluZ30gc3Vic3RpdHV0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25SZXNvbHZlZDtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IFN1YnN0aXR1dGlvbnMgfSA9IHNoaW0sXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFN1YnN0aXR1dGlvbnMuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVkKSB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25zTGVuZ3RoID0gc3Vic3RpdHV0aW9ucy5nZXRMZW5ndGgoKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgZmlyc3RTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmdldEZpcnN0U3Vic3RpdHV0aW9uKCk7XG5cbiAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb24gPSBmaXJzdFN1YnN0aXR1dGlvbjsgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwZWNpZmljU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04odGhpcy5tZXRhdmFyaWFibGUpLFxuICAgICAgICAgIHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04odGhpcy5zdGF0ZW1lbnQpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRKU09OLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5zdHJpbmcsXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHN0YXRlbWVudCxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZVxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgIGNvbnRleHQgPSBmaWxlQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGVBbmRUb2tlbnMgPSBTdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zLmZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcoc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICBub2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZUFuZFRva2Vucy5nZXROb2RlKCksXG4gICAgICAgICAgdG9rZW5zID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZUFuZFRva2Vucy5nZXRUb2tlbnMoKSxcbiAgICAgICAgICByZXNvbHZlZCA9IHRydWUsXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBudWxsLCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihzdHJpbmcsIG5vZGUsIHRva2VucywgcmVzb2x2ZWQsIHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24pO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBjb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpO1xuXG4gICAgc3RhdGVtZW50Tm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTsgLy8vXG5cbiAgICBjb25zdCB7IFN0YXRlbWVudCB9ID0gc2hpbTtcblxuICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIGNvbnN0IHN0cmluZyA9IHN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUpLFxuICAgICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGVBbmRUb2tlbnMgPSBTdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zLmZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcoc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICBub2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZUFuZFRva2Vucy5nZXROb2RlKCksXG4gICAgICAgICAgdG9rZW5zID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZUFuZFRva2Vucy5nZXRUb2tlbnMoKSxcbiAgICAgICAgICByZXNvbHZlZCA9IHRydWUsXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gbnVsbCxcbiAgICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBuZXcgU3RhdGVtZW50U3Vic3RpdHV0aW9uKHN0cmluZywgbm9kZSwgdG9rZW5zLCByZXNvbHZlZCwgc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbik7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbiwgY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKTtcblxuICAgIHN0YXRlbWVudE5vZGUgPSBzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7IC8vL1xuXG4gICAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IHNoaW07XG5cbiAgICBzdGF0ZW1lbnQgPSBTdGF0ZW1lbnQuZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24sIGNvbnRleHQpLFxuICAgICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGVBbmRUb2tlbnMgPSBTdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zLmZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcoc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICBub2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZUFuZFRva2Vucy5nZXROb2RlKCksXG4gICAgICAgICAgdG9rZW5zID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZUFuZFRva2Vucy5nZXRUb2tlbnMoKSxcbiAgICAgICAgICByZXNvbHZlZCA9IGZhbHNlLFxuICAgICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oc3RyaW5nLCBub2RlLCB0b2tlbnMsIHJlc29sdmVkLCBzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihzaGltLCB7XG4gIFN0YXRlbWVudFN1YnN0aXR1dGlvblxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFN0YXRlbWVudFN1YnN0aXR1dGlvbjtcblxuZnVuY3Rpb24gc3RyaW5nRnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbikge1xuICBsZXQgc3RyaW5nO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gIGlmIChzdWJzdGl0dXRpb24gPT09IG51bGwpIHtcbiAgICBzdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgc3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfSR7c3Vic3RpdHV0aW9uU3RyaW5nfV1gO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cbiJdLCJuYW1lcyI6WyJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJzdHJpbmciLCJub2RlIiwidG9rZW5zIiwicmVzb2x2ZWQiLCJzdGF0ZW1lbnQiLCJtZXRhdmFyaWFibGUiLCJzdWJzdGl0dXRpb24iLCJpc1Jlc29sdmVkIiwiZ2V0U3RhdGVtZW50IiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0U3Vic3RpdHV0aW9uIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXROb2RlIiwiaXNTaW1wbGUiLCJzaW1wbGUiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJyZXNvbHZlIiwic3Vic3RpdHV0aW9ucyIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3Vic3RpdHV0aW9uU3RyaW5nIiwic2ltcGxlU3Vic3RpdHV0aW9uIiwiZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsInRyYWNlIiwiY29udGV4dCIsImxvY2FsQ29udGV4dCIsIkxvY2FsQ29udGV4dCIsImZyb21Db250ZXh0QW5kVG9rZW5zIiwic3Vic3RpdHV0aW9uUmVzb2x2ZWQiLCJyZXNvbHZlU3Vic3RpdHV0aW9uIiwiZGVidWciLCJnZXRTdHJpbmciLCJnZW5lcmFsU3Vic3RpdHV0aW9uIiwic3BlY2lmaWNTdWJzdGl0dXRpb24iLCJ1bmlmeVN0YXRlbWVudCIsInNuYXBzaG90IiwiZ2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZyIsInNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbk5vZGUiLCJzcGVjaWZpY1N1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsU3Vic3RpdHV0aW9uVG9rZW5zIiwiZ2V0VG9rZW5zIiwic3BlY2lmaWNTdWJzdGl0dXRpb25Ub2tlbnMiLCJnZW5lcmFsTm9kZSIsInNwZWNpZmljTm9kZSIsInVuaWZpZWRBdE1ldGFMZXZlbCIsIm1ldGFMZXZlbFVuaWZpZXIiLCJ1bmlmeSIsImNvbnRpbnVlIiwicm9sbGJhY2siLCJTdWJzdGl0dXRpb25zIiwic2hpbSIsImZyb21Ob3RoaW5nIiwic3RhdGVtZW50VW5pZmllZCIsInN1YnN0aXR1dGlvbnNMZW5ndGgiLCJnZXRMZW5ndGgiLCJmaXJzdFN1YnN0aXR1dGlvbiIsImdldEZpcnN0U3Vic3RpdHV0aW9uIiwidG9KU09OIiwibWV0YXZhcmlhYmxlSlNPTiIsIm1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTiIsInN0YXRlbWVudEpTT04iLCJzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJmaWxlQ29udGV4dCIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyIsInN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGVBbmRUb2tlbnMiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zIiwiZnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyIsInN0YXRlbWVudEZyb21KU09OIiwibWV0YXZhcmlhYmxlRnJvbUpTT04iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJmcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlIiwiU3RhdGVtZW50IiwiZnJvbVN0YXRlbWVudE5vZGUiLCJzdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlIiwiZnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJTdWJzdGl0dXRpb24iLCJPYmplY3QiLCJhc3NpZ24iLCJzdGF0ZW1lbnRTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQThRQTs7O2VBQUE7OzsyREE1UWlCO21FQUNROzREQUNBO2dFQUNJO2dFQUNrQjt3QkFFQTtvQkFDbUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbEgsSUFBQSxBQUFNQSxzQ0FBTjtjQUFNQTthQUFBQSxzQkFDUUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUVDLFlBQVksRUFBRUMsWUFBWTtnQ0FEN0VQOztnQkFFRixrQkFGRUE7WUFFSUM7WUFBUUM7WUFBTUM7O1FBRXBCLE1BQUtDLFFBQVEsR0FBR0E7UUFDaEIsTUFBS0MsU0FBUyxHQUFHQTtRQUNqQixNQUFLQyxZQUFZLEdBQUdBO1FBQ3BCLE1BQUtDLFlBQVksR0FBR0E7OztrQkFQbEJQOztZQVVKUSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNKLFFBQVE7WUFDdEI7OztZQUVBSyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNKLFNBQVM7WUFDdkI7OztZQUVBSyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNKLFlBQVk7WUFDMUI7OztZQUVBSyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNKLFlBQVk7WUFDMUI7OztZQUVBSyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsbUJBQW1CLElBQUksQ0FBQ1AsWUFBWSxDQUFDUSxPQUFPO2dCQUVsRCxPQUFPRDtZQUNUOzs7WUFFQUUsS0FBQUE7bUJBQUFB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