occam-verify-cli 1.0.125 → 1.0.127

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/context/file.js +4 -4
  2. package/lib/context/local.js +4 -4
  3. package/lib/dom/assertion/contained.js +22 -12
  4. package/lib/dom/assertion/defined.js +22 -12
  5. package/lib/dom/assertion/property.js +3 -3
  6. package/lib/dom/assertion/subproof.js +3 -26
  7. package/lib/dom/assertion/type.js +4 -8
  8. package/lib/dom/axiom.js +13 -5
  9. package/lib/dom/combinator.js +2 -10
  10. package/lib/dom/conjecture.js +4 -4
  11. package/lib/dom/constructor/bracketed.js +3 -3
  12. package/lib/dom/constructor.js +17 -21
  13. package/lib/dom/declaration.js +14 -8
  14. package/lib/dom/derivation.js +10 -2
  15. package/lib/dom/frame.js +29 -25
  16. package/lib/dom/judgement.js +9 -11
  17. package/lib/dom/lemma.js +4 -4
  18. package/lib/dom/metaLemma.js +4 -4
  19. package/lib/dom/metaType.js +14 -4
  20. package/lib/dom/metatheorem.js +4 -4
  21. package/lib/dom/metavariable.js +39 -7
  22. package/lib/dom/procedureCall.js +9 -5
  23. package/lib/dom/property.js +30 -18
  24. package/lib/dom/propertyRelation.js +212 -0
  25. package/lib/dom/reference.js +8 -8
  26. package/lib/dom/statement.js +40 -16
  27. package/lib/dom/term.js +52 -14
  28. package/lib/dom/theorem.js +4 -4
  29. package/lib/dom/type.js +33 -29
  30. package/lib/dom/variable.js +19 -8
  31. package/lib/index.js +3 -3
  32. package/lib/verifier/topLevel.js +6 -6
  33. package/package.json +1 -1
  34. package/src/context/file.js +4 -3
  35. package/src/context/local.js +4 -3
  36. package/src/dom/assertion/contained.js +23 -11
  37. package/src/dom/assertion/defined.js +23 -11
  38. package/src/dom/assertion/property.js +3 -7
  39. package/src/dom/assertion/subproof.js +3 -44
  40. package/src/dom/assertion/type.js +6 -17
  41. package/src/dom/axiom.js +3 -3
  42. package/src/dom/combinator.js +1 -8
  43. package/src/dom/conjecture.js +1 -1
  44. package/src/dom/constructor/bracketed.js +3 -4
  45. package/src/dom/constructor.js +17 -17
  46. package/src/dom/declaration.js +20 -14
  47. package/src/dom/derivation.js +12 -3
  48. package/src/dom/frame.js +33 -36
  49. package/src/dom/judgement.js +7 -22
  50. package/src/dom/lemma.js +1 -1
  51. package/src/dom/metaLemma.js +1 -1
  52. package/src/dom/metaType.js +16 -6
  53. package/src/dom/metatheorem.js +1 -1
  54. package/src/dom/metavariable.js +35 -15
  55. package/src/dom/procedureCall.js +15 -13
  56. package/src/dom/property.js +49 -32
  57. package/src/dom/{relation/property.js → propertyRelation.js} +9 -10
  58. package/src/dom/reference.js +6 -6
  59. package/src/dom/statement.js +50 -15
  60. package/src/dom/term.js +69 -24
  61. package/src/dom/theorem.js +1 -1
  62. package/src/dom/type.js +48 -51
  63. package/src/dom/variable.js +33 -35
  64. package/src/index.js +1 -1
  65. package/src/verifier/topLevel.js +10 -5
  66. package/lib/dom/relation/property.js +0 -212
@@ -54,6 +54,10 @@ export default domAssigned(class Variable {
54
54
  this.type = type;
55
55
  }
56
56
 
57
+ setProvisional(provisional) {
58
+ this.provisional = provisional;
59
+ }
60
+
57
61
  isEqualTo(variable) {
58
62
  const variableString = variable.getString(),
59
63
  equalTo = (variableString === this.string);
@@ -224,16 +228,9 @@ export default domAssigned(class Variable {
224
228
  const termVariableNode = termVariableNodeQuery(termNode);
225
229
 
226
230
  if (termVariableNode !== null) {
227
- const variableNode = termVariableNode, ///
228
- variableName = variableNameFromVariableNode(variableNode),
229
- node = variableNode, ///
230
- string = context.nodeAsString(node),
231
- name = variableName, ///
232
- type = null,
233
- provisional = null,
234
- propertyRelations = [];
235
-
236
- variable = new Variable(string, node, name, type, provisional, propertyRelations);
231
+ const variableNode = termVariableNode; ///
232
+
233
+ variable = variableFromVariableNode(variableNode, context);
237
234
  }
238
235
 
239
236
  return variable;
@@ -243,15 +240,7 @@ export default domAssigned(class Variable {
243
240
  let variable = null;
244
241
 
245
242
  if (variableNode !== null) {
246
- const node = variableNode, ///
247
- variableName = variableNameFromVariableNode(variableNode),
248
- string = context.nodeAsString(node),
249
- name = variableName, ///
250
- type = null,
251
- provisional = null,
252
- propertyRelations = [];
253
-
254
- variable = new Variable(string, node, name, type, provisional, propertyRelations);
243
+ variable = variableFromVariableNode(variableNode, context);
255
244
  }
256
245
 
257
246
  return variable;
@@ -261,14 +250,9 @@ export default domAssigned(class Variable {
261
250
  let variable = null;
262
251
 
263
252
  if (variableNode !== null) {
264
- const node = variableNode, ///
265
- variableName = variableNameFromVariableNode(variableNode),
266
- string = context.nodeAsString(node),
267
- name = variableName, ///
268
- provisional = null,
269
- propertyRelations = [];
270
-
271
- variable = new Variable(string, node, name, type, provisional, propertyRelations);
253
+ variable = variableFromVariableNode(variableNode, context);
254
+
255
+ variable.setType(type);
272
256
  }
273
257
 
274
258
  return variable;
@@ -278,15 +262,15 @@ export default domAssigned(class Variable {
278
262
  const { Type } = dom,
279
263
  variableDeclarationVariableNode = variableDeclarationVariableNodeQuery(variableDeclarationNode),
280
264
  variableNode = variableDeclarationVariableNode, ///
281
- variableName = variableNameFromVariableNode(variableNode),
282
- variableString = fileContext.nodeAsString(variableNode),
283
- string = variableString, ///
284
- node = variableNode, ///
285
- name = variableName, ///
265
+ localContext = LocalContext.fromFileContext(fileContext),
266
+ context = localContext, ///
267
+ variable = variableFromVariableNode(variableNode, context),
286
268
  type = Type.fromVariableDeclarationNode(variableDeclarationNode, fileContext),
287
- provisional = provisionalFromVariableDeclarationNode(variableDeclarationNode, fileContext),
288
- propertyRelations = [],
289
- variable = new Variable(string, node, name, type, provisional, propertyRelations);
269
+ provisional = provisionalFromVariableDeclarationNode(variableDeclarationNode, fileContext);
270
+
271
+ variable.setType(type);
272
+
273
+ variable.setProvisional(provisional);
290
274
 
291
275
  return variable;
292
276
  }
@@ -314,6 +298,20 @@ export default domAssigned(class Variable {
314
298
  }
315
299
  });
316
300
 
301
+ function variableFromVariableNode(variableNode, context) {
302
+ const { Variable } = dom,
303
+ node = variableNode, ///
304
+ variableName = variableNameFromVariableNode(variableNode),
305
+ string = context.nodeAsString(node),
306
+ name = variableName, ///
307
+ type = null,
308
+ provisional = null,
309
+ propertyRelations = [],
310
+ variable = new Variable(string, node, name, type, provisional, propertyRelations);
311
+
312
+ return variable;
313
+ }
314
+
317
315
  function stringFromNameAndPropertyRelations(name, propertyRelations) {
318
316
  const propertyRelationsString = propertyRelations.reduce((propertyRelationsString, propertyRelation) => {
319
317
  const propertyRelationString = propertyRelation.getString();
package/src/index.js CHANGED
@@ -37,7 +37,7 @@ import SubDerivation from "./dom/subDerivation";
37
37
  import TypeAssertion from "./dom/assertion/type";
38
38
  import TypeDeclaration from "./dom/declaration/type";
39
39
  import DefinedAssertion from "./dom/assertion/defined";
40
- import PropertyRelation from "./dom/relation/property";
40
+ import PropertyRelation from "./dom/propertyRelation";
41
41
  import SubproofAssertion from "./dom/assertion/subproof";
42
42
  import PropertyAssertion from "./dom/assertion/property";
43
43
  import ContainedAssertion from "./dom/assertion/contained";
@@ -67,7 +67,8 @@ class TopLevelVerifier extends Verifier {
67
67
  nodeQuery: lemmaNodeQuery,
68
68
  verify: (lemmaNode, fileContext) => {
69
69
  const { Lemma } = dom,
70
- lemma = Lemma.fromLemmaNode(lemmaNode, fileContext),
70
+ node = lemmaNode, ///
71
+ lemma = Lemma.fromNode(node, fileContext),
71
72
  lemmaVerified = lemma.verify();
72
73
 
73
74
  return lemmaVerified;
@@ -77,7 +78,8 @@ class TopLevelVerifier extends Verifier {
77
78
  nodeQuery: theoremNodeQuery,
78
79
  verify: (theoremNode, fileContext) => {
79
80
  const { Theorem } = dom,
80
- theorem = Theorem.fromTheoremNode(theoremNode, fileContext),
81
+ node = theoremNode, ///
82
+ theorem = Theorem.fromNode(node, fileContext),
81
83
  theoremVerified = theorem.verify();
82
84
 
83
85
  return theoremVerified;
@@ -87,7 +89,8 @@ class TopLevelVerifier extends Verifier {
87
89
  nodeQuery: metaLemmaNodeQuery,
88
90
  verify: (metaLemmaNode, fileContext) => {
89
91
  const { MetaLemma } = dom,
90
- metaLemma = MetaLemma.fromMetaLemmaNode(metaLemmaNode, fileContext),
92
+ node = metaLemmaNode, ///
93
+ metaLemma = MetaLemma.fromNode(node, fileContext),
91
94
  metaLemmaVerified = metaLemma.verify();
92
95
 
93
96
  return metaLemmaVerified;
@@ -97,7 +100,8 @@ class TopLevelVerifier extends Verifier {
97
100
  nodeQuery: conjectureNodeQuery,
98
101
  verify: (conjectureNode, fileContext) => {
99
102
  const { Conjecture } = dom,
100
- conjecture = Conjecture.fromConjectureNode(conjectureNode, fileContext),
103
+ node = conjectureNode, ///
104
+ conjecture = Conjecture.fromNode(node, fileContext),
101
105
  conjectureVerified = conjecture.verify();
102
106
 
103
107
  return conjectureVerified;
@@ -107,7 +111,8 @@ class TopLevelVerifier extends Verifier {
107
111
  nodeQuery: metatheoremNodeQuery,
108
112
  verify: (metatheoremNode, fileContext) => {
109
113
  const { Metatheorem } = dom,
110
- metatheorem = Metatheorem.fromMetatheoremNode(metatheoremNode, fileContext),
114
+ node = metatheoremNode, ///
115
+ metatheorem = Metatheorem.fromNode(node, fileContext),
111
116
  metatheoremVerified = metatheorem.verify();
112
117
 
113
118
  return metatheoremVerified;
@@ -1,212 +0,0 @@
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 _dom = /*#__PURE__*/ _interop_require_wildcard(require("../../dom"));
12
- var _query = require("../../utilities/query");
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
- }
32
- function _define_property(obj, key, value) {
33
- if (key in obj) {
34
- Object.defineProperty(obj, key, {
35
- value: value,
36
- enumerable: true,
37
- configurable: true,
38
- writable: true
39
- });
40
- } else {
41
- obj[key] = value;
42
- }
43
- return obj;
44
- }
45
- function _getRequireWildcardCache(nodeInterop) {
46
- if (typeof WeakMap !== "function") return null;
47
- var cacheBabelInterop = new WeakMap();
48
- var cacheNodeInterop = new WeakMap();
49
- return (_getRequireWildcardCache = function(nodeInterop) {
50
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
51
- })(nodeInterop);
52
- }
53
- function _interop_require_wildcard(obj, nodeInterop) {
54
- if (!nodeInterop && obj && obj.__esModule) {
55
- return obj;
56
- }
57
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
58
- return {
59
- default: obj
60
- };
61
- }
62
- var cache = _getRequireWildcardCache(nodeInterop);
63
- if (cache && cache.has(obj)) {
64
- return cache.get(obj);
65
- }
66
- var newObj = {
67
- __proto__: null
68
- };
69
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
70
- for(var key in obj){
71
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
72
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
73
- if (desc && (desc.get || desc.set)) {
74
- Object.defineProperty(newObj, key, desc);
75
- } else {
76
- newObj[key] = obj[key];
77
- }
78
- }
79
- }
80
- newObj.default = obj;
81
- if (cache) {
82
- cache.set(obj, newObj);
83
- }
84
- return newObj;
85
- }
86
- var _PropertyRelation;
87
- var termNodeQuery = (0, _query.nodeQuery)("/propertyRelation/term"), propertyNodeQuery = (0, _query.nodeQuery)("/propertyRelation/property");
88
- var _default = (0, _dom.domAssigned)((_PropertyRelation = /*#__PURE__*/ function() {
89
- function PropertyRelation(string, node, tokens, property, term) {
90
- _class_call_check(this, PropertyRelation);
91
- this.string = string;
92
- this.node = node;
93
- this.tokens = tokens;
94
- this.property = property;
95
- this.term = term;
96
- }
97
- _create_class(PropertyRelation, [
98
- {
99
- key: "getString",
100
- value: function getString() {
101
- return this.string;
102
- }
103
- },
104
- {
105
- key: "getNode",
106
- value: function getNode() {
107
- return this.node;
108
- }
109
- },
110
- {
111
- key: "getTokens",
112
- value: function getTokens() {
113
- return this.tokens;
114
- }
115
- },
116
- {
117
- key: "getProperty",
118
- value: function getProperty() {
119
- return this.property;
120
- }
121
- },
122
- {
123
- key: "getTerm",
124
- value: function getTerm() {
125
- return this.term;
126
- }
127
- },
128
- {
129
- key: "getType",
130
- value: function getType() {
131
- return this.property.getType();
132
- }
133
- },
134
- {
135
- key: "isEqualTo",
136
- value: function isEqualTo(propertyRelation) {
137
- var propertyRelationString = propertyRelation.getString(), equalTo = propertyRelationString === this.string;
138
- return equalTo;
139
- }
140
- },
141
- {
142
- key: "verify",
143
- value: function verify(context) {
144
- var verified = false;
145
- var propertyRelationString = this.string; ///
146
- context.trace("Verifying the '".concat(propertyRelationString, "' property relation..."));
147
- var termVerified = this.verifyTerm(context);
148
- if (termVerified) {
149
- var propertyVerified = this.verifyProperty(context);
150
- verified = propertyVerified;
151
- }
152
- if (verified) {
153
- context.debug("...verified the '".concat(propertyRelationString, "' property relation."));
154
- }
155
- return verified;
156
- }
157
- },
158
- {
159
- key: "verifyTerm",
160
- value: function verifyTerm(context) {
161
- var termVerified;
162
- var termString = this.term.getString(), propertyRelationString = this.string; ///
163
- context.trace("Verifying the '".concat(propertyRelationString, "' property relation's '").concat(termString, "' term..."));
164
- termVerified = this.term.verify(context, function() {
165
- var verifiedAhead = true;
166
- return verifiedAhead;
167
- });
168
- if (termVerified) {
169
- context.debug("...verified the '".concat(propertyRelationString, "' property relation's '").concat(termString, "' term."));
170
- }
171
- return termVerified;
172
- }
173
- },
174
- {
175
- key: "verifyProperty",
176
- value: function verifyProperty(context) {
177
- var propertyVerified;
178
- var propertyString = this.property.getString(), propertyRelationString = this.string; ///
179
- context.trace("Verifying the '".concat(propertyRelationString, "' property relation's '").concat(propertyString, "' property..."));
180
- var variableType = this.term.getType(), propertyNames = this.property.getNames(), variableTypeProperties = variableType.getProperties(), variableTypeProperty = variableTypeProperties.find(function(variableTypeProperty) {
181
- var propertyNamesMatch = variableTypeProperty.matchPropertyNames(propertyNames);
182
- if (propertyNamesMatch) {
183
- return true;
184
- }
185
- }) || null;
186
- if (variableTypeProperty === null) {
187
- var variableString = this.term.getString(), variableTypeName = variableType.getName();
188
- context.debug("The '".concat(propertyNames, "' property is not a property of the '").concat(variableString, "' variable's '").concat(variableTypeName, "' type."));
189
- } else {
190
- var type = variableType;
191
- this.property.setType(type);
192
- propertyVerified = true;
193
- }
194
- if (propertyVerified) {
195
- context.debug("...verified the '".concat(propertyRelationString, "' property relation's '").concat(propertyString, "' property."));
196
- }
197
- return propertyVerified;
198
- }
199
- }
200
- ], [
201
- {
202
- key: "fromPropertyRelationNode",
203
- value: function fromPropertyRelationNode(propertyRelationNode, context) {
204
- var Term = _dom.default.Term, Property = _dom.default.Property, node = propertyRelationNode, string = context.nodeAsString(node), tokens = context.nodeAsTokens(node), propertyNode = propertyNodeQuery(propertyRelationNode), termNode = termNodeQuery(propertyRelationNode), property = Property.fromPropertyNode(propertyNode, context), term = Term.fromTermNode(termNode, context), propertyRelation = new PropertyRelation(string, node, tokens, property, term);
205
- return propertyRelation;
206
- }
207
- }
208
- ]);
209
- return PropertyRelation;
210
- }(), _define_property(_PropertyRelation, "name", "PropertyRelation"), _PropertyRelation));
211
-
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb20vcmVsYXRpb24vcHJvcGVydHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBkb20gZnJvbSBcIi4uLy4uL2RvbVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBkb21Bc3NpZ25lZCB9IGZyb20gXCIuLi8uLi9kb21cIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9wcm9wZXJ0eVJlbGF0aW9uL3Rlcm1cIiksXG4gICAgICBwcm9wZXJ0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9wcm9wZXJ0eVJlbGF0aW9uL3Byb3BlcnR5XCIpO1xuXG5leHBvcnQgZGVmYXVsdCBkb21Bc3NpZ25lZChjbGFzcyBQcm9wZXJ0eVJlbGF0aW9uIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nLCBub2RlLCB0b2tlbnMsIHByb3BlcnR5LCB0ZXJtKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy5wcm9wZXJ0eS5nZXRUeXBlKCk7IH1cblxuICBpc0VxdWFsVG8ocHJvcGVydHlSZWxhdGlvbikge1xuICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25TdHJpbmcgPSBwcm9wZXJ0eVJlbGF0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGVxdWFsVG8gPSAocHJvcGVydHlSZWxhdGlvblN0cmluZyA9PT0gdGhpcy5zdHJpbmcpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJvcGVydHlSZWxhdGlvblN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVRlcm0oY29udGV4dCk7XG5cbiAgICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVZlcmlmaWVkID0gdGhpcy52ZXJpZnlQcm9wZXJ0eShjb250ZXh0KTtcblxuICAgICAgdmVyaWZpZWQgPSBwcm9wZXJ0eVZlcmlmaWVkO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3Byb3BlcnR5UmVsYXRpb25TdHJpbmd9JyBwcm9wZXJ0eSByZWxhdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlUZXJtKGNvbnRleHQpIHtcbiAgICBsZXQgdGVybVZlcmlmaWVkO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMudGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nfScgcHJvcGVydHkgcmVsYXRpb24ncyAnJHt0ZXJtU3RyaW5nfScgdGVybS4uLmApO1xuXG4gICAgdGVybVZlcmlmaWVkID0gdGhpcy50ZXJtLnZlcmlmeShjb250ZXh0LCAoKSA9PiB7XG4gICAgICBjb25zdCB2ZXJpZmllZEFoZWFkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZlcmlmaWVkQWhlYWQ7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WZXJpZmllZDtcbiAgfVxuXG4gIHZlcmlmeVByb3BlcnR5KGNvbnRleHQpIHtcbiAgICBsZXQgcHJvcGVydHlWZXJpZmllZDtcblxuICAgIGNvbnN0IHByb3BlcnR5U3RyaW5nID0gdGhpcy5wcm9wZXJ0eS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nfScgcHJvcGVydHkgcmVsYXRpb24ncyAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5Li4uYCk7XG5cbiAgICBjb25zdCB2YXJpYWJsZVR5cGUgPSB0aGlzLnRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHByb3BlcnR5TmFtZXMgPSB0aGlzLnByb3BlcnR5LmdldE5hbWVzKCksXG4gICAgICAgICAgdmFyaWFibGVUeXBlUHJvcGVydGllcyA9IHZhcmlhYmxlVHlwZS5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgdmFyaWFibGVUeXBlUHJvcGVydHkgPSB2YXJpYWJsZVR5cGVQcm9wZXJ0aWVzLmZpbmQoKHZhcmlhYmxlVHlwZVByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWVzTWF0Y2ggPSB2YXJpYWJsZVR5cGVQcm9wZXJ0eS5tYXRjaFByb3BlcnR5TmFtZXMocHJvcGVydHlOYW1lcyk7XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWVzTWF0Y2gpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIGlmICh2YXJpYWJsZVR5cGVQcm9wZXJ0eSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgdmFyaWFibGVTdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB2YXJpYWJsZVR5cGVOYW1lID0gdmFyaWFibGVUeXBlLmdldE5hbWUoKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Byb3BlcnR5TmFtZXN9JyBwcm9wZXJ0eSBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZSdzICcke3ZhcmlhYmxlVHlwZU5hbWV9JyB0eXBlLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlID0gdmFyaWFibGVUeXBlO1xuXG4gICAgICB0aGlzLnByb3BlcnR5LnNldFR5cGUodHlwZSk7XG5cbiAgICAgIHByb3BlcnR5VmVyaWZpZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0eVZlcmlmaWVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uJ3MgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHlWZXJpZmllZDtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJQcm9wZXJ0eVJlbGF0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgVGVybSwgUHJvcGVydHkgfSA9IGRvbSxcbiAgICAgICAgICBub2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0Lm5vZGVBc1Rva2Vucyhub2RlKSxcbiAgICAgICAgICBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eU5vZGVRdWVyeShwcm9wZXJ0eVJlbGF0aW9uTm9kZSksXG4gICAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHByb3BlcnR5UmVsYXRpb25Ob2RlKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IFByb3BlcnR5LmZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0ZXJtID0gVGVybS5mcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBuZXcgUHJvcGVydHlSZWxhdGlvbihzdHJpbmcsIG5vZGUsIHRva2VucywgcHJvcGVydHksIHRlcm0pO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbInRlcm1Ob2RlUXVlcnkiLCJub2RlUXVlcnkiLCJwcm9wZXJ0eU5vZGVRdWVyeSIsImRvbUFzc2lnbmVkIiwiUHJvcGVydHlSZWxhdGlvbiIsInN0cmluZyIsIm5vZGUiLCJ0b2tlbnMiLCJwcm9wZXJ0eSIsInRlcm0iLCJnZXRTdHJpbmciLCJnZXROb2RlIiwiZ2V0VG9rZW5zIiwiZ2V0UHJvcGVydHkiLCJnZXRUZXJtIiwiZ2V0VHlwZSIsImlzRXF1YWxUbyIsInByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nIiwiZXF1YWxUbyIsInZlcmlmeSIsImNvbnRleHQiLCJ2ZXJpZmllZCIsInRyYWNlIiwidGVybVZlcmlmaWVkIiwidmVyaWZ5VGVybSIsInByb3BlcnR5VmVyaWZpZWQiLCJ2ZXJpZnlQcm9wZXJ0eSIsImRlYnVnIiwidGVybVN0cmluZyIsInZlcmlmaWVkQWhlYWQiLCJwcm9wZXJ0eVN0cmluZyIsInZhcmlhYmxlVHlwZSIsInByb3BlcnR5TmFtZXMiLCJnZXROYW1lcyIsInZhcmlhYmxlVHlwZVByb3BlcnRpZXMiLCJnZXRQcm9wZXJ0aWVzIiwidmFyaWFibGVUeXBlUHJvcGVydHkiLCJmaW5kIiwicHJvcGVydHlOYW1lc01hdGNoIiwibWF0Y2hQcm9wZXJ0eU5hbWVzIiwidmFyaWFibGVTdHJpbmciLCJ2YXJpYWJsZVR5cGVOYW1lIiwiZ2V0TmFtZSIsInR5cGUiLCJzZXRUeXBlIiwiZnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJUZXJtIiwiZG9tIiwiUHJvcGVydHkiLCJub2RlQXNTdHJpbmciLCJub2RlQXNUb2tlbnMiLCJwcm9wZXJ0eU5vZGUiLCJ0ZXJtTm9kZSIsImZyb21Qcm9wZXJ0eU5vZGUiLCJmcm9tVGVybU5vZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFVQTs7O2VBQUE7OzsyREFSZ0I7cUJBRVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUcxQixJQUFNQSxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsMkJBQzFCQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUM7SUFFcEMsV0FBZUUsSUFBQUEsZ0JBQVcscUNBQUM7YUFBTUMsaUJBQ25CQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLElBQUk7Z0NBRGpCTDtRQUU3QixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLElBQUksR0FB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