occam-nominal 1.0.209 → 1.0.215

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 (41) hide show
  1. package/lib/element/declaration/cotype.js +180 -0
  2. package/lib/element/declaration/generator.js +93 -0
  3. package/lib/element/declaration/type.js +148 -0
  4. package/lib/element/generator.js +129 -0
  5. package/lib/element/type.js +5 -1
  6. package/lib/node/declaration/cotype.js +72 -0
  7. package/lib/node/declaration/generator.js +47 -0
  8. package/lib/node/declaration/type.js +72 -0
  9. package/lib/node/generator.js +23 -0
  10. package/lib/nonTerminalNodeMap.js +11 -7
  11. package/lib/preamble.js +5 -3
  12. package/lib/process/instantiate.js +9 -3
  13. package/lib/process/unify.js +38 -2
  14. package/lib/process/validate.js +52 -2
  15. package/lib/process/verify.js +21 -21
  16. package/lib/ruleNames.js +17 -9
  17. package/lib/utilities/element.js +99 -83
  18. package/lib/utilities/string.js +8 -8
  19. package/package.json +5 -5
  20. package/src/element/declaration/{complexType.js → cotype.js} +24 -24
  21. package/src/element/declaration/generator.js +122 -0
  22. package/src/element/declaration/{simpleType.js → type.js} +21 -21
  23. package/src/element/generator.js +188 -0
  24. package/src/element/type.js +8 -0
  25. package/src/node/declaration/{complexType.js → cotype.js} +2 -2
  26. package/src/node/declaration/generator.js +46 -0
  27. package/src/node/declaration/{simpleType.js → type.js} +2 -2
  28. package/src/node/generator.js +16 -0
  29. package/src/nonTerminalNodeMap.js +14 -8
  30. package/src/preamble.js +4 -2
  31. package/src/process/instantiate.js +6 -2
  32. package/src/process/unify.js +54 -0
  33. package/src/process/validate.js +72 -2
  34. package/src/process/verify.js +29 -29
  35. package/src/ruleNames.js +4 -2
  36. package/src/utilities/element.js +128 -111
  37. package/src/utilities/string.js +9 -9
  38. package/lib/element/declaration/complexType.js +0 -180
  39. package/lib/element/declaration/simpleType.js +0 -148
  40. package/lib/node/declaration/complexType.js +0 -72
  41. package/lib/node/declaration/simpleType.js +0 -72
@@ -0,0 +1,180 @@
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
+ const _declaration = /*#__PURE__*/ _interop_require_default(require("../declaration"));
12
+ const _occamlanguages = require("occam-languages");
13
+ const _elements = require("../../elements");
14
+ const _type = require("../../utilities/type");
15
+ function _interop_require_default(obj) {
16
+ return obj && obj.__esModule ? obj : {
17
+ default: obj
18
+ };
19
+ }
20
+ const { asyncEvery } = _occamlanguages.asynchronousUtilities;
21
+ const _default = (0, _elements.define)(class CotypeDeclaration extends _declaration.default {
22
+ constructor(context, string, node, breakPoint, type, superTypes, provisional, propertyDeclarations){
23
+ super(context, string, node, breakPoint);
24
+ this.type = type;
25
+ this.superTypes = superTypes;
26
+ this.provisional = provisional;
27
+ this.propertyDeclarations = propertyDeclarations;
28
+ }
29
+ getType() {
30
+ return this.type;
31
+ }
32
+ getSuperTypes() {
33
+ return this.superTypes;
34
+ }
35
+ isProvisional() {
36
+ return this.provisional;
37
+ }
38
+ getPropertyDeclarations() {
39
+ return this.propertyDeclarations;
40
+ }
41
+ getCotypeDeclarationNode() {
42
+ const node = this.getNode(), cotypeDeclarationNode = node; ///
43
+ return cotypeDeclarationNode;
44
+ }
45
+ getProperties() {
46
+ const properties = this.propertyDeclarations.reduce((properties, propertyDeclaration)=>{
47
+ const property = propertyDeclaration.getProperty();
48
+ if (property !== null) {
49
+ properties.push(property);
50
+ }
51
+ return properties;
52
+ }, []);
53
+ return properties;
54
+ }
55
+ async verify(context) {
56
+ let verifies = false;
57
+ await this.break(context);
58
+ const cotypeDeclarationString = this.getString(); ///
59
+ context.trace(`Verifying the '${cotypeDeclarationString}' cotype declaration...`);
60
+ const typeVerifies = this.verifyType(context);
61
+ if (typeVerifies) {
62
+ const superTypesVerify = this.verifySuperTypes(context);
63
+ if (superTypesVerify) {
64
+ const typePrefixVerifies = this.verifyTypePrefix(context);
65
+ if (typePrefixVerifies) {
66
+ const propertyDeclarationsVerify = await this.verifyPropertyDeclaratisons(context);
67
+ if (propertyDeclarationsVerify) {
68
+ const properties = this.getProperties(), typePrefix = context.getTypePrefix(), prefixName = typePrefix !== null ? typePrefix.getPrefixName() : null;
69
+ this.type.setProvisional(this.provisional);
70
+ this.type.setProperties(properties);
71
+ this.type.setPrefixName(prefixName);
72
+ context.addType(this.type);
73
+ verifies = true;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ if (verifies) {
79
+ context.debug(`...verified the '${cotypeDeclarationString}' cotype declaration.`);
80
+ }
81
+ return verifies;
82
+ }
83
+ verifyType(context) {
84
+ let typeVerifies = false;
85
+ const typeString = this.type.getString(), cotypeDeclarationString = this.getString(); ///
86
+ context.trace(`Verifying the '${cotypeDeclarationString}' cotype declaration's '${typeString}' type...`);
87
+ const typeName = this.type.getName(), includeRelease = false, typePresent = context.isTypePresentByTypeName(typeName, includeRelease);
88
+ if (!typePresent) {
89
+ const prefixedTypeName = typeName, typePresent = context.isTypePresentByPrefixedTypeName(prefixedTypeName);
90
+ if (!typePresent) {
91
+ this.type.setProvisional(this.provisional);
92
+ typeVerifies = true;
93
+ } else {
94
+ context.debug(`The '${typeString}' type is already present.`);
95
+ }
96
+ } else {
97
+ context.debug(`The '${typeString}' type is already present.`);
98
+ }
99
+ if (typeVerifies) {
100
+ context.debug(`...verified the '${cotypeDeclarationString}' cotype declaration's '${typeString}' type`);
101
+ }
102
+ return typeVerifies;
103
+ }
104
+ verifySuperType(superType, superTypes, context) {
105
+ let superTypeVerifies = false;
106
+ const superTypeString = superType.getString(), cotypeDeclarationString = this.getString(); ///
107
+ context.trace(`Verifying the '${cotypeDeclarationString}' cotype declaration's '${superTypeString}' super-type...`);
108
+ const nominalTypeName = superType.getNominalTypeName(), typeName = nominalTypeName, typeComparesToTypeName = this.type.compareTypeName(typeName);
109
+ if (!typeComparesToTypeName) {
110
+ superType = context.findTypeByNominalTypeName(nominalTypeName);
111
+ if (superType !== null) {
112
+ superTypes.push(superType);
113
+ superTypeVerifies = true;
114
+ } else {
115
+ context.debug(`The '${superTypeString}' super-type is not present.`);
116
+ }
117
+ } else {
118
+ context.debug(`The '${superTypeString}' super-type's name compares to the ${typeName}' type's name.`);
119
+ }
120
+ if (superTypeVerifies) {
121
+ context.debug(`...verified the '${cotypeDeclarationString}' cotype declaration's '${superTypeString}' super-type.`);
122
+ }
123
+ return superTypeVerifies;
124
+ }
125
+ verifySuperTypes(context) {
126
+ let superTypesVerify;
127
+ const superTypes = [], cotypeDeclarationString = this.getString(); ///
128
+ context.trace(`Verifying the '${cotypeDeclarationString}' cotype declaration's super-types...`);
129
+ superTypesVerify = this.superTypes.every((superType)=>{
130
+ const superTypeVerifies = this.verifySuperType(superType, superTypes, context);
131
+ if (superTypeVerifies) {
132
+ return true;
133
+ }
134
+ });
135
+ if (superTypesVerify) {
136
+ const superTypesLength = superTypes.length;
137
+ if (superTypesLength === 0) {
138
+ const baseType = (0, _type.baseTypeFromNothing)(), superTyupe = baseType; ///
139
+ superTypes.push(superTyupe);
140
+ }
141
+ this.type.setSuperTypes(superTypes);
142
+ context.debug(`...verified the '${cotypeDeclarationString}' cotype declaration's super-types.`);
143
+ }
144
+ return superTypesVerify;
145
+ }
146
+ verifyTypePrefix(context) {
147
+ let typePrefixVerifies = false;
148
+ const typeString = this.type.getString(), cotypeDeclarationString = this.getString(); ///
149
+ context.trace(`Verifying the '${cotypeDeclarationString}' cotype declaration's '${typeString}' type's prefix...`);
150
+ const typePrefixed = this.type.isPrefixed();
151
+ if (!typePrefixed) {
152
+ typePrefixVerifies = true;
153
+ } else {
154
+ context.debug(`The '${cotypeDeclarationString}' cotype declaration's '${typeString}' type is prefixed.`);
155
+ }
156
+ if (typePrefixVerifies) {
157
+ context.debug(`...verified the '${cotypeDeclarationString}' cotype declaration's '${typeString}' type's prefix.`);
158
+ }
159
+ return typePrefixVerifies;
160
+ }
161
+ async verifyPropertyDeclaratisons(context) {
162
+ let propertyDeclarationsVerify;
163
+ const typeString = this.type.getString(), cotypeDeclarationString = this.getString(); ///
164
+ context.trace(`Verifying the '${cotypeDeclarationString}' cotype declaration's '${typeString}' type's property declarations...`);
165
+ const properties = this.getProperties();
166
+ propertyDeclarationsVerify = await asyncEvery(this.propertyDeclarations, async (propertyDeclaration)=>{
167
+ const propertyVerifes = await propertyDeclaration.verify(properties, this.type, context);
168
+ if (propertyVerifes) {
169
+ return true;
170
+ }
171
+ });
172
+ if (propertyDeclarationsVerify) {
173
+ context.debug(`...verified the '${cotypeDeclarationString}' cotype declaration's '${typeString}' type's property declarations.`);
174
+ }
175
+ return propertyDeclarationsVerify;
176
+ }
177
+ static name = "CotypeDeclaration";
178
+ });
179
+
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL2NvdHlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYmFzZVR5cGVGcm9tTm90aGluZyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvdHlwZVwiO1xuXG5jb25zdCB7IGFzeW5jRXZlcnkgfSA9IGFzeW5jaHJvbm91c1V0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvdHlwZURlY2xhcmF0aW9uIGV4dGVuZHMgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXM7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICAgIHRoaXMucHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldFN1cGVyVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwZXJUeXBlcztcbiAgfVxuXG4gIGlzUHJvdmlzaW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRQcm9wZXJ0eURlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eURlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldENvdHlwZURlY2xhcmF0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY290eXBlRGVjbGFyYXRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gY290eXBlRGVjbGFyYXRpb25Ob2RlO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllcygpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0eURlY2xhcmF0aW9ucy5yZWR1Y2UoKHByb3BlcnRpZXMsIHByb3BlcnR5RGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydHlEZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpO1xuXG4gICAgICBpZiAocHJvcGVydHkgIT09IG51bGwpIHtcbiAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjb3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIGNvdHlwZSBkZWNsYXJhdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZVZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlKGNvbnRleHQpO1xuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlc1ZlcmlmeSA9IHRoaXMudmVyaWZ5U3VwZXJUeXBlcyhjb250ZXh0KTtcblxuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdHlwZVByZWZpeFZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlUHJlZml4KGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uc1ZlcmlmeSA9IGF3YWl0IHRoaXMudmVyaWZ5UHJvcGVydHlEZWNsYXJhdGlzb25zKGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHByb3BlcnR5RGVjbGFyYXRpb25zVmVyaWZ5KSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgICAgICAgICB0eXBlUHJlZml4ID0gY29udGV4dC5nZXRUeXBlUHJlZml4KCksXG4gICAgICAgICAgICAgICAgICBwcmVmaXhOYW1lID0gKHR5cGVQcmVmaXggIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVQcmVmaXguZ2V0UHJlZml4TmFtZSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICAgICAgICAgICAgdGhpcy50eXBlLnNldFByb3Zpc2lvbmFsKHRoaXMucHJvdmlzaW9uYWwpO1xuXG4gICAgICAgICAgICB0aGlzLnR5cGUuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgdGhpcy50eXBlLnNldFByZWZpeE5hbWUocHJlZml4TmFtZSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYWRkVHlwZSh0aGlzLnR5cGUpO1xuXG4gICAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y290eXBlRGVjbGFyYXRpb25TdHJpbmd9JyBjb3R5cGUgZGVjbGFyYXRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5VHlwZShjb250ZXh0KSB7XG4gICAgbGV0IHR5cGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZVN0cmluZyA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjb3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIGNvdHlwZSBkZWNsYXJhdGlvbidzICcke3R5cGVTdHJpbmd9JyB0eXBlLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMudHlwZS5nZXROYW1lKCksXG4gICAgICAgICAgaW5jbHVkZVJlbGVhc2UgPSBmYWxzZSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9IGNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIGlmICghdHlwZVByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHByZWZpeGVkVHlwZU5hbWUgPSB0eXBlTmFtZSwgLy8vXG4gICAgICAgICAgICB0eXBlUHJlc2VudCA9IGNvbnRleHQuaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lKTtcblxuICAgICAgaWYgKCF0eXBlUHJlc2VudCkge1xuICAgICAgICB0aGlzLnR5cGUuc2V0UHJvdmlzaW9uYWwodGhpcy5wcm92aXNpb25hbCk7XG5cbiAgICAgICAgdHlwZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvdHlwZURlY2xhcmF0aW9uU3RyaW5nfScgY290eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5U3VwZXJUeXBlKHN1cGVyVHlwZSwgc3VwZXJUeXBlcywgY29udGV4dCkge1xuICAgIGxldCBzdXBlclR5cGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlU3RyaW5nID0gc3VwZXJUeXBlLmdldFN0cmluZygpLFxuICAgICAgICAgIGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvdHlwZURlY2xhcmF0aW9uU3RyaW5nfScgY290eXBlIGRlY2xhcmF0aW9uJ3MgJyR7c3VwZXJUeXBlU3RyaW5nfScgc3VwZXItdHlwZS4uLmApO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gc3VwZXJUeXBlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGVOYW1lID0gbm9taW5hbFR5cGVOYW1lLCAvLy9cbiAgICAgICAgICB0eXBlQ29tcGFyZXNUb1R5cGVOYW1lID0gdGhpcy50eXBlLmNvbXBhcmVUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICBpZiAoIXR5cGVDb21wYXJlc1RvVHlwZU5hbWUpIHtcbiAgICAgIHN1cGVyVHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlICE9PSBudWxsKSB7XG4gICAgICAgIHN1cGVyVHlwZXMucHVzaChzdXBlclR5cGUpO1xuXG4gICAgICAgIHN1cGVyVHlwZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3VwZXJUeXBlU3RyaW5nfScgc3VwZXItdHlwZSdzIG5hbWUgY29tcGFyZXMgdG8gdGhlICR7dHlwZU5hbWV9JyB0eXBlJ3MgbmFtZS5gKTtcbiAgICB9XG5cbiAgICBpZiAoc3VwZXJUeXBlVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIGNvdHlwZSBkZWNsYXJhdGlvbidzICcke3N1cGVyVHlwZVN0cmluZ30nIHN1cGVyLXR5cGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyVHlwZVZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5U3VwZXJUeXBlcyhjb250ZXh0KSB7XG4gICAgbGV0IHN1cGVyVHlwZXNWZXJpZnk7XG5cbiAgICBjb25zdCBzdXBlclR5cGVzID0gW10sXG4gICAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y290eXBlRGVjbGFyYXRpb25TdHJpbmd9JyBjb3R5cGUgZGVjbGFyYXRpb24ncyBzdXBlci10eXBlcy4uLmApO1xuXG4gICAgc3VwZXJUeXBlc1ZlcmlmeSA9IHRoaXMuc3VwZXJUeXBlcy5ldmVyeSgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdXBlclR5cGVWZXJpZmllcyA9IHRoaXMudmVyaWZ5U3VwZXJUeXBlKHN1cGVyVHlwZSwgc3VwZXJUeXBlcywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdXBlclR5cGVWZXJpZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzdXBlclR5cGVzVmVyaWZ5KSB7XG4gICAgICBjb25zdCBzdXBlclR5cGVzTGVuZ3RoID0gc3VwZXJUeXBlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICAgICAgICBzdXBlclR5dXBlID0gYmFzZVR5cGU7ICAvLy9cblxuICAgICAgICBzdXBlclR5cGVzLnB1c2goc3VwZXJUeXVwZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHlwZS5zZXRTdXBlclR5cGVzKHN1cGVyVHlwZXMpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y290eXBlRGVjbGFyYXRpb25TdHJpbmd9JyBjb3R5cGUgZGVjbGFyYXRpb24ncyBzdXBlci10eXBlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1ZlcmlmeTtcbiAgfVxuXG4gIHZlcmlmeVR5cGVQcmVmaXgoY29udGV4dCkge1xuICAgIGxldCB0eXBlUHJlZml4VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y290eXBlRGVjbGFyYXRpb25TdHJpbmd9JyBjb3R5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSdzIHByZWZpeC4uLmApO1xuXG4gICAgY29uc3QgdHlwZVByZWZpeGVkID0gdGhpcy50eXBlLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghdHlwZVByZWZpeGVkKSB7XG4gICAgICB0eXBlUHJlZml4VmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7Y290eXBlRGVjbGFyYXRpb25TdHJpbmd9JyBjb3R5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBwcmVmaXhlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZVByZWZpeFZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y290eXBlRGVjbGFyYXRpb25TdHJpbmd9JyBjb3R5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSdzIHByZWZpeC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeFZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5UHJvcGVydHlEZWNsYXJhdGlzb25zKGNvbnRleHQpIHtcbiAgICBsZXQgcHJvcGVydHlEZWNsYXJhdGlvbnNWZXJpZnk7XG5cbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpLFxuICAgICAgICAgIGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvdHlwZURlY2xhcmF0aW9uU3RyaW5nfScgY290eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUncyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMuLi5gKTtcblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKTtcblxuICAgIHByb3BlcnR5RGVjbGFyYXRpb25zVmVyaWZ5ID0gYXdhaXQgYXN5bmNFdmVyeSh0aGlzLnByb3BlcnR5RGVjbGFyYXRpb25zLCBhc3luYyAocHJvcGVydHlEZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHlWZXJpZmVzID0gYXdhaXQgcHJvcGVydHlEZWNsYXJhdGlvbi52ZXJpZnkocHJvcGVydGllcywgdGhpcy50eXBlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHByb3BlcnR5VmVyaWZlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwcm9wZXJ0eURlY2xhcmF0aW9uc1ZlcmlmeSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvdHlwZURlY2xhcmF0aW9uU3RyaW5nfScgY290eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUncyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb25zVmVyaWZ5O1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvdHlwZURlY2xhcmF0aW9uXCI7XG59KTtcbiJdLCJuYW1lcyI6WyJhc3luY0V2ZXJ5IiwiYXN5bmNocm9ub3VzVXRpbGl0aWVzIiwiZGVmaW5lIiwiQ290eXBlRGVjbGFyYXRpb24iLCJEZWNsYXJhdGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInR5cGUiLCJzdXBlclR5cGVzIiwicHJvdmlzaW9uYWwiLCJwcm9wZXJ0eURlY2xhcmF0aW9ucyIsImdldFR5cGUiLCJnZXRTdXBlclR5cGVzIiwiaXNQcm92aXNpb25hbCIsImdldFByb3BlcnR5RGVjbGFyYXRpb25zIiwiZ2V0Q290eXBlRGVjbGFyYXRpb25Ob2RlIiwiZ2V0Tm9kZSIsImNvdHlwZURlY2xhcmF0aW9uTm9kZSIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwicmVkdWNlIiwicHJvcGVydHlEZWNsYXJhdGlvbiIsInByb3BlcnR5IiwiZ2V0UHJvcGVydHkiLCJwdXNoIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJicmVhayIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0eXBlVmVyaWZpZXMiLCJ2ZXJpZnlUeXBlIiwic3VwZXJUeXBlc1ZlcmlmeSIsInZlcmlmeVN1cGVyVHlwZXMiLCJ0eXBlUHJlZml4VmVyaWZpZXMiLCJ2ZXJpZnlUeXBlUHJlZml4IiwicHJvcGVydHlEZWNsYXJhdGlvbnNWZXJpZnkiLCJ2ZXJpZnlQcm9wZXJ0eURlY2xhcmF0aXNvbnMiLCJ0eXBlUHJlZml4IiwiZ2V0VHlwZVByZWZpeCIsInByZWZpeE5hbWUiLCJnZXRQcmVmaXhOYW1lIiwic2V0UHJvdmlzaW9uYWwiLCJzZXRQcm9wZXJ0aWVzIiwic2V0UHJlZml4TmFtZSIsImFkZFR5cGUiLCJkZWJ1ZyIsInR5cGVTdHJpbmciLCJ0eXBlTmFtZSIsImdldE5hbWUiLCJpbmNsdWRlUmVsZWFzZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwiaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZSIsInZlcmlmeVN1cGVyVHlwZSIsInN1cGVyVHlwZSIsInN1cGVyVHlwZVZlcmlmaWVzIiwic3VwZXJUeXBlU3RyaW5nIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwidHlwZUNvbXBhcmVzVG9UeXBlTmFtZSIsImNvbXBhcmVUeXBlTmFtZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJldmVyeSIsInN1cGVyVHlwZXNMZW5ndGgiLCJsZW5ndGgiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJzdXBlclR5dXBlIiwic2V0U3VwZXJUeXBlcyIsInR5cGVQcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJwcm9wZXJ0eVZlcmlmZXMiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFXQTs7O2VBQUE7OztvRUFUd0I7Z0NBRWM7MEJBRWY7c0JBQ2E7Ozs7OztBQUVwQyxNQUFNLEVBQUVBLFVBQVUsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFNUMsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQywwQkFBMEJDLG9CQUFXO0lBQy9ELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsb0JBQW9CLENBQUU7UUFDbEcsS0FBSyxDQUFDUCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0Msb0JBQW9CLEdBQUdBO0lBQzlCO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0osSUFBSTtJQUNsQjtJQUVBSyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0osVUFBVTtJQUN4QjtJQUVBSyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0osV0FBVztJQUN6QjtJQUVBSywwQkFBMEI7UUFDeEIsT0FBTyxJQUFJLENBQUNKLG9CQUFvQjtJQUNsQztJQUVBSywyQkFBMkI7UUFDekIsTUFBTVYsT0FBTyxJQUFJLENBQUNXLE9BQU8sSUFDbkJDLHdCQUF3QlosTUFBTSxHQUFHO1FBRXZDLE9BQU9ZO0lBQ1Q7SUFFQUMsZ0JBQWdCO1FBQ2QsTUFBTUMsYUFBYSxJQUFJLENBQUNULG9CQUFvQixDQUFDVSxNQUFNLENBQUMsQ0FBQ0QsWUFBWUU7WUFDL0QsTUFBTUMsV0FBV0Qsb0JBQW9CRSxXQUFXO1lBRWhELElBQUlELGFBQWEsTUFBTTtnQkFDckJILFdBQVdLLElBQUksQ0FBQ0Y7WUFDbEI7WUFFQSxPQUFPSDtRQUNULEdBQUcsRUFBRTtRQUVMLE9BQU9BO0lBQ1Q7SUFFQSxNQUFNTSxPQUFPdEIsT0FBTyxFQUFFO1FBQ3BCLElBQUl1QixXQUFXO1FBRWYsTUFBTSxJQUFJLENBQUNDLEtBQUssQ0FBQ3hCO1FBRWpCLE1BQU15QiwwQkFBMEIsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV0RDFCLFFBQVEyQixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLHdCQUF3Qix1QkFBdUIsQ0FBQztRQUVoRixNQUFNRyxlQUFlLElBQUksQ0FBQ0MsVUFBVSxDQUFDN0I7UUFFckMsSUFBSTRCLGNBQWM7WUFDaEIsTUFBTUUsbUJBQW1CLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMvQjtZQUUvQyxJQUFJOEIsa0JBQWtCO2dCQUNwQixNQUFNRSxxQkFBcUIsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ2pDO2dCQUVqRCxJQUFJZ0Msb0JBQW9CO29CQUN0QixNQUFNRSw2QkFBNkIsTUFBTSxJQUFJLENBQUNDLDJCQUEyQixDQUFDbkM7b0JBRTFFLElBQUlrQyw0QkFBNEI7d0JBQzlCLE1BQU1sQixhQUFhLElBQUksQ0FBQ0QsYUFBYSxJQUMvQnFCLGFBQWFwQyxRQUFRcUMsYUFBYSxJQUNsQ0MsYUFBYSxBQUFDRixlQUFlLE9BQ2RBLFdBQVdHLGFBQWEsS0FDdEI7d0JBRXZCLElBQUksQ0FBQ25DLElBQUksQ0FBQ29DLGNBQWMsQ0FBQyxJQUFJLENBQUNsQyxXQUFXO3dCQUV6QyxJQUFJLENBQUNGLElBQUksQ0FBQ3FDLGFBQWEsQ0FBQ3pCO3dCQUV4QixJQUFJLENBQUNaLElBQUksQ0FBQ3NDLGFBQWEsQ0FBQ0o7d0JBRXhCdEMsUUFBUTJDLE9BQU8sQ0FBQyxJQUFJLENBQUN2QyxJQUFJO3dCQUV6Qm1CLFdBQVc7b0JBQ2I7Z0JBQ0Y7WUFDRjtRQUNGO1FBRUEsSUFBSUEsVUFBVTtZQUNadkIsUUFBUTRDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFbkIsd0JBQXdCLHFCQUFxQixDQUFDO1FBQ2xGO1FBRUEsT0FBT0Y7SUFDVDtJQUVBTSxXQUFXN0IsT0FBTyxFQUFFO1FBQ2xCLElBQUk0QixlQUFlO1FBRW5CLE1BQU1pQixhQUFhLElBQUksQ0FBQ3pDLElBQUksQ0FBQ3NCLFNBQVMsSUFDaENELDBCQUEwQixJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRXJEMUIsUUFBUTJCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsd0JBQXdCLHdCQUF3QixFQUFFb0IsV0FBVyxTQUFTLENBQUM7UUFFdkcsTUFBTUMsV0FBVyxJQUFJLENBQUMxQyxJQUFJLENBQUMyQyxPQUFPLElBQzVCQyxpQkFBaUIsT0FDakJDLGNBQWNqRCxRQUFRa0QsdUJBQXVCLENBQUNKLFVBQVVFO1FBRTlELElBQUksQ0FBQ0MsYUFBYTtZQUNoQixNQUFNRSxtQkFBbUJMLFVBQ25CRyxjQUFjakQsUUFBUW9ELCtCQUErQixDQUFDRDtZQUU1RCxJQUFJLENBQUNGLGFBQWE7Z0JBQ2hCLElBQUksQ0FBQzdDLElBQUksQ0FBQ29DLGNBQWMsQ0FBQyxJQUFJLENBQUNsQyxXQUFXO2dCQUV6Q3NCLGVBQWU7WUFDakIsT0FBTztnQkFDTDVCLFFBQVE0QyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUVDLFdBQVcsMEJBQTBCLENBQUM7WUFDOUQ7UUFDRixPQUFPO1lBQ0w3QyxRQUFRNEMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFQyxXQUFXLDBCQUEwQixDQUFDO1FBQzlEO1FBRUEsSUFBSWpCLGNBQWM7WUFDaEI1QixRQUFRNEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVuQix3QkFBd0Isd0JBQXdCLEVBQUVvQixXQUFXLE1BQU0sQ0FBQztRQUN4RztRQUVBLE9BQU9qQjtJQUNUO0lBRUF5QixnQkFBZ0JDLFNBQVMsRUFBRWpELFVBQVUsRUFBRUwsT0FBTyxFQUFFO1FBQzlDLElBQUl1RCxvQkFBb0I7UUFFeEIsTUFBTUMsa0JBQWtCRixVQUFVNUIsU0FBUyxJQUNyQ0QsMEJBQTBCLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFckQxQixRQUFRMkIsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRix3QkFBd0Isd0JBQXdCLEVBQUUrQixnQkFBZ0IsZUFBZSxDQUFDO1FBRWxILE1BQU1DLGtCQUFrQkgsVUFBVUksa0JBQWtCLElBQzlDWixXQUFXVyxpQkFDWEUseUJBQXlCLElBQUksQ0FBQ3ZELElBQUksQ0FBQ3dELGVBQWUsQ0FBQ2Q7UUFFekQsSUFBSSxDQUFDYSx3QkFBd0I7WUFDM0JMLFlBQVl0RCxRQUFRNkQseUJBQXlCLENBQUNKO1lBRTlDLElBQUlILGNBQWMsTUFBTTtnQkFDdEJqRCxXQUFXZ0IsSUFBSSxDQUFDaUM7Z0JBRWhCQyxvQkFBb0I7WUFDdEIsT0FBTztnQkFDTHZELFFBQVE0QyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUVZLGdCQUFnQiw0QkFBNEIsQ0FBQztZQUNyRTtRQUNGLE9BQU87WUFDTHhELFFBQVE0QyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUVZLGdCQUFnQixvQ0FBb0MsRUFBRVYsU0FBUyxjQUFjLENBQUM7UUFDdEc7UUFFQSxJQUFJUyxtQkFBbUI7WUFDckJ2RCxRQUFRNEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVuQix3QkFBd0Isd0JBQXdCLEVBQUUrQixnQkFBZ0IsYUFBYSxDQUFDO1FBQ3BIO1FBRUEsT0FBT0Q7SUFDVDtJQUVBeEIsaUJBQWlCL0IsT0FBTyxFQUFFO1FBQ3hCLElBQUk4QjtRQUVKLE1BQU16QixhQUFhLEVBQUUsRUFDZm9CLDBCQUEwQixJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRXJEMUIsUUFBUTJCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsd0JBQXdCLHFDQUFxQyxDQUFDO1FBRTlGSyxtQkFBbUIsSUFBSSxDQUFDekIsVUFBVSxDQUFDeUQsS0FBSyxDQUFDLENBQUNSO1lBQ3hDLE1BQU1DLG9CQUFvQixJQUFJLENBQUNGLGVBQWUsQ0FBQ0MsV0FBV2pELFlBQVlMO1lBRXRFLElBQUl1RCxtQkFBbUI7Z0JBQ3JCLE9BQU87WUFDVDtRQUNGO1FBRUEsSUFBSXpCLGtCQUFrQjtZQUNwQixNQUFNaUMsbUJBQW1CMUQsV0FBVzJELE1BQU07WUFFMUMsSUFBSUQscUJBQXFCLEdBQUc7Z0JBQzFCLE1BQU1FLFdBQVdDLElBQUFBLHlCQUFtQixLQUM5QkMsYUFBYUYsVUFBVyxHQUFHO2dCQUVqQzVELFdBQVdnQixJQUFJLENBQUM4QztZQUNsQjtZQUVBLElBQUksQ0FBQy9ELElBQUksQ0FBQ2dFLGFBQWEsQ0FBQy9EO1lBRXhCTCxRQUFRNEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVuQix3QkFBd0IsbUNBQW1DLENBQUM7UUFDaEc7UUFFQSxPQUFPSztJQUNUO0lBRUFHLGlCQUFpQmpDLE9BQU8sRUFBRTtRQUN4QixJQUFJZ0MscUJBQXFCO1FBRXpCLE1BQU1hLGFBQWEsSUFBSSxDQUFDekMsSUFBSSxDQUFDc0IsU0FBUyxJQUNoQ0QsMEJBQTBCLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFckQxQixRQUFRMkIsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRix3QkFBd0Isd0JBQXdCLEVBQUVvQixXQUFXLGtCQUFrQixDQUFDO1FBRWhILE1BQU13QixlQUFlLElBQUksQ0FBQ2pFLElBQUksQ0FBQ2tFLFVBQVU7UUFFekMsSUFBSSxDQUFDRCxjQUFjO1lBQ2pCckMscUJBQXFCO1FBQ3ZCLE9BQU87WUFDTGhDLFFBQVE0QyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUVuQix3QkFBd0Isd0JBQXdCLEVBQUVvQixXQUFXLG1CQUFtQixDQUFDO1FBQ3pHO1FBRUEsSUFBSWIsb0JBQW9CO1lBQ3RCaEMsUUFBUTRDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFbkIsd0JBQXdCLHdCQUF3QixFQUFFb0IsV0FBVyxnQkFBZ0IsQ0FBQztRQUNsSDtRQUVBLE9BQU9iO0lBQ1Q7SUFFQSxNQUFNRyw0QkFBNEJuQyxPQUFPLEVBQUU7UUFDekMsSUFBSWtDO1FBRUosTUFBTVcsYUFBYSxJQUFJLENBQUN6QyxJQUFJLENBQUNzQixTQUFTLElBQ2hDRCwwQkFBMEIsSUFBSSxDQUFDQyxTQUFTLElBQUksR0FBRztRQUVyRDFCLFFBQVEyQixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLHdCQUF3Qix3QkFBd0IsRUFBRW9CLFdBQVcsaUNBQWlDLENBQUM7UUFFL0gsTUFBTTdCLGFBQWEsSUFBSSxDQUFDRCxhQUFhO1FBRXJDbUIsNkJBQTZCLE1BQU12QyxXQUFXLElBQUksQ0FBQ1ksb0JBQW9CLEVBQUUsT0FBT1c7WUFDOUUsTUFBTXFELGtCQUFrQixNQUFNckQsb0JBQW9CSSxNQUFNLENBQUNOLFlBQVksSUFBSSxDQUFDWixJQUFJLEVBQUVKO1lBRWhGLElBQUl1RSxpQkFBaUI7Z0JBQ25CLE9BQU87WUFDVDtRQUNGO1FBRUEsSUFBSXJDLDRCQUE0QjtZQUM5QmxDLFFBQVE0QyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRW5CLHdCQUF3Qix3QkFBd0IsRUFBRW9CLFdBQVcsK0JBQStCLENBQUM7UUFDakk7UUFFQSxPQUFPWDtJQUNUO0lBRUEsT0FBT3NDLE9BQU8sb0JBQW9CO0FBQ3BDIn0=
@@ -0,0 +1,93 @@
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
+ const _declaration = /*#__PURE__*/ _interop_require_default(require("../declaration"));
12
+ const _elements = require("../../elements");
13
+ function _interop_require_default(obj) {
14
+ return obj && obj.__esModule ? obj : {
15
+ default: obj
16
+ };
17
+ }
18
+ const _default = (0, _elements.define)(class GeneratorDeclaration extends _declaration.default {
19
+ constructor(context, string, node, breakPoint, type, provisional, generator){
20
+ super(context, string, node, breakPoint);
21
+ this.type = type;
22
+ this.provisional = provisional;
23
+ this.generator = generator;
24
+ }
25
+ getType() {
26
+ return this.type;
27
+ }
28
+ isProvisional() {
29
+ return this.provisional;
30
+ }
31
+ getGenerator() {
32
+ return this.generator;
33
+ }
34
+ getGeneratorDeclarationNode() {
35
+ const node = this.getNode(), generatorDeclarationNode = node; ///
36
+ return generatorDeclarationNode;
37
+ }
38
+ async verify(context) {
39
+ let verifies = false;
40
+ await this.break(context);
41
+ const generatorDeclarationString = this.getString(); ///
42
+ context.trace(`Verifying the '${generatorDeclarationString}' generator declaration...`);
43
+ const typeVerified = this.verifyType(context);
44
+ if (typeVerified) {
45
+ const generatorValidates = this.validateGenerator(context);
46
+ if (generatorValidates) {
47
+ this.generator.setType(this.type);
48
+ context.addGenerator(this.generator);
49
+ verifies = true;
50
+ }
51
+ }
52
+ if (verifies) {
53
+ context.debug(`...verified the '${generatorDeclarationString}' generator declaration.`);
54
+ }
55
+ return verifies;
56
+ }
57
+ verifyType(context) {
58
+ let typeVerifies = false;
59
+ const generatorDeclarationString = this.getString(); ///
60
+ context.trace(`Verifying the '${generatorDeclarationString}' generator declaration's type...`);
61
+ const nominalTypeName = this.type.getNominalTypeName(), type = context.findTypeByNominalTypeName(nominalTypeName);
62
+ if (type !== null) {
63
+ const provisional = this.isProvisional(), typeComparesToProvisional = type.compareProvisional(provisional);
64
+ if (!typeComparesToProvisional) {
65
+ const typeString = this.type.getString();
66
+ provisional ? context.debug(`The '${typeString}' type is present but not provisional.`) : context.debug(`The '${typeString}' type is present but provisional.`);
67
+ } else {
68
+ this.type = type;
69
+ typeVerifies = true;
70
+ }
71
+ } else {
72
+ const typeString = this.type.getString();
73
+ context.debug(`The '${typeString}' type is not present.`);
74
+ }
75
+ if (typeVerifies) {
76
+ context.debug(`...verified the '${generatorDeclarationString}' generator declaration's type.`);
77
+ }
78
+ return typeVerifies;
79
+ }
80
+ validateGenerator(context) {
81
+ let generatorValidates;
82
+ const includeType = false, generatorString = this.generator.getString(includeType), generatorDeclarationString = this.getString(); ///
83
+ context.trace(`Validating the '${generatorDeclarationString}' generator declaration's '${generatorString}' generator...`);
84
+ generatorValidates = this.generator.validate(context);
85
+ if (generatorValidates) {
86
+ context.debug(`...validated the '${generatorDeclarationString}' generator declaration's '${generatorString}' generator.`);
87
+ }
88
+ return generatorValidates;
89
+ }
90
+ static name = "GeneratorDeclaration";
91
+ });
92
+
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL2dlbmVyYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEdlbmVyYXRvckRlY2xhcmF0aW9uIGV4dGVuZHMgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBnZW5lcmF0b3IpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0R2VuZXJhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRvcjtcbiAgfVxuXG4gIGdldEdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5KGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGF3YWl0IHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCBnZW5lcmF0b3JEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Z2VuZXJhdG9yRGVjbGFyYXRpb25TdHJpbmd9JyBnZW5lcmF0b3IgZGVjbGFyYXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHR5cGVWZXJpZmllZCA9IHRoaXMudmVyaWZ5VHlwZShjb250ZXh0KTtcblxuICAgIGlmICh0eXBlVmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRvclZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVHZW5lcmF0b3IoY29udGV4dCk7XG5cbiAgICAgIGlmIChnZW5lcmF0b3JWYWxpZGF0ZXMpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0b3Iuc2V0VHlwZSh0aGlzLnR5cGUpO1xuXG4gICAgICAgIGNvbnRleHQuYWRkR2VuZXJhdG9yKHRoaXMuZ2VuZXJhdG9yKTtcblxuICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Z2VuZXJhdG9yRGVjbGFyYXRpb25TdHJpbmd9JyBnZW5lcmF0b3IgZGVjbGFyYXRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5VHlwZShjb250ZXh0KSB7XG4gICAgbGV0IHR5cGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhdG9yRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2dlbmVyYXRvckRlY2xhcmF0aW9uU3RyaW5nfScgZ2VuZXJhdG9yIGRlY2xhcmF0aW9uJ3MgdHlwZS4uLmApO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm92aXNpb25hbCA9IHRoaXMuaXNQcm92aXNpb25hbCgpLFxuICAgICAgICAgICAgdHlwZUNvbXBhcmVzVG9Qcm92aXNpb25hbCA9IHR5cGUuY29tcGFyZVByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgaWYgKCF0eXBlQ29tcGFyZXNUb1Byb3Zpc2lvbmFsKSB7XG4gICAgICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgcHJvdmlzaW9uYWwgP1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBwcmVzZW50IGJ1dCBub3QgcHJvdmlzaW9uYWwuYCkgOlxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIHByZXNlbnQgYnV0IHByb3Zpc2lvbmFsLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgICAgICB0eXBlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2dlbmVyYXRvckRlY2xhcmF0aW9uU3RyaW5nfScgZ2VuZXJhdG9yIGRlY2xhcmF0aW9uJ3MgdHlwZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVZlcmlmaWVzO1xuICB9XG5cbiAgdmFsaWRhdGVHZW5lcmF0b3IoY29udGV4dCkge1xuICAgIGxldCBnZW5lcmF0b3JWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBpbmNsdWRlVHlwZSA9IGZhbHNlLFxuICAgICAgICAgIGdlbmVyYXRvclN0cmluZyA9IHRoaXMuZ2VuZXJhdG9yLmdldFN0cmluZyhpbmNsdWRlVHlwZSksXG4gICAgICAgICAgZ2VuZXJhdG9yRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnZW5lcmF0b3JEZWNsYXJhdGlvblN0cmluZ30nIGdlbmVyYXRvciBkZWNsYXJhdGlvbidzICcke2dlbmVyYXRvclN0cmluZ30nIGdlbmVyYXRvci4uLmApO1xuXG4gICAgZ2VuZXJhdG9yVmFsaWRhdGVzID0gdGhpcy5nZW5lcmF0b3IudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICBpZiAoZ2VuZXJhdG9yVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dlbmVyYXRvckRlY2xhcmF0aW9uU3RyaW5nfScgZ2VuZXJhdG9yIGRlY2xhcmF0aW9uJ3MgJyR7Z2VuZXJhdG9yU3RyaW5nfScgZ2VuZXJhdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiBnZW5lcmF0b3JWYWxpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiR2VuZXJhdG9yRGVjbGFyYXRpb25cIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIkdlbmVyYXRvckRlY2xhcmF0aW9uIiwiRGVjbGFyYXRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0eXBlIiwicHJvdmlzaW9uYWwiLCJnZW5lcmF0b3IiLCJnZXRUeXBlIiwiaXNQcm92aXNpb25hbCIsImdldEdlbmVyYXRvciIsImdldEdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdldE5vZGUiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsImJyZWFrIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInR5cGVWZXJpZmllZCIsInZlcmlmeVR5cGUiLCJnZW5lcmF0b3JWYWxpZGF0ZXMiLCJ2YWxpZGF0ZUdlbmVyYXRvciIsInNldFR5cGUiLCJhZGRHZW5lcmF0b3IiLCJkZWJ1ZyIsInR5cGVWZXJpZmllcyIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb1Byb3Zpc2lvbmFsIiwiY29tcGFyZVByb3Zpc2lvbmFsIiwidHlwZVN0cmluZyIsImluY2x1ZGVUeXBlIiwiZ2VuZXJhdG9yU3RyaW5nIiwidmFsaWRhdGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFNQTs7O2VBQUE7OztvRUFKd0I7MEJBRUQ7Ozs7OztNQUV2QixXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDZCQUE2QkMsb0JBQVc7SUFDbEUsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLFdBQVcsRUFBRUMsU0FBUyxDQUFFO1FBQzNFLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtJQUNuQjtJQUVBQyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNILElBQUk7SUFDbEI7SUFFQUksZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNILFdBQVc7SUFDekI7SUFFQUksZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDSCxTQUFTO0lBQ3ZCO0lBRUFJLDhCQUE4QjtR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
@@ -0,0 +1,148 @@
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
+ const _declaration = /*#__PURE__*/ _interop_require_default(require("../declaration"));
12
+ const _elements = require("../../elements");
13
+ const _type = require("../../utilities/type");
14
+ function _interop_require_default(obj) {
15
+ return obj && obj.__esModule ? obj : {
16
+ default: obj
17
+ };
18
+ }
19
+ const _default = (0, _elements.define)(class TypeDeclaration extends _declaration.default {
20
+ constructor(context, string, node, breakPoint, type, superTypes, provisional){
21
+ super(context, string, node, breakPoint);
22
+ this.type = type;
23
+ this.superTypes = superTypes;
24
+ this.provisional = provisional;
25
+ }
26
+ getType() {
27
+ return this.type;
28
+ }
29
+ getSuperTypes() {
30
+ return this.superTypes;
31
+ }
32
+ isProvisional() {
33
+ return this.provisional;
34
+ }
35
+ gettypeDeclarationNode() {
36
+ const node = this.getNode(), typeDeclarationNode = node; ///
37
+ return typeDeclarationNode;
38
+ }
39
+ getProperties() {
40
+ const properties = [];
41
+ return properties;
42
+ }
43
+ async verify(context) {
44
+ let verifies = false;
45
+ await this.break(context);
46
+ const typeDeclarationString = this.getString(); ///
47
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration...`);
48
+ const typeVerifies = this.verifyType(context);
49
+ if (typeVerifies) {
50
+ const superTypesVerify = this.verifySuperTypes(context);
51
+ if (superTypesVerify) {
52
+ const typePrefixVerifies = this.verifyTypePrefix(context);
53
+ if (typePrefixVerifies) {
54
+ const properties = this.getProperties(), typePrefix = context.getTypePrefix(), prefixName = typePrefix !== null ? typePrefix.getPrefixName() : null;
55
+ this.type.setProvisional(this.provisional);
56
+ this.type.setProperties(properties);
57
+ this.type.setPrefixName(prefixName);
58
+ context.addType(this.type);
59
+ verifies = true;
60
+ }
61
+ }
62
+ }
63
+ if (verifies) {
64
+ context.debug(`...verified the '${typeDeclarationString}' type declaration.`);
65
+ }
66
+ return verifies;
67
+ }
68
+ verifyType(context) {
69
+ let typeVerifies = false;
70
+ const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
71
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type...`);
72
+ const typeName = this.type.getName(), typePresent = context.isTypePresentByTypeName(typeName);
73
+ if (!typePresent) {
74
+ const prefixedTypeName = typeName, typePresent = context.isTypePresentByPrefixedTypeName(prefixedTypeName);
75
+ if (!typePresent) {
76
+ typeVerifies = true;
77
+ } else {
78
+ context.debug(`The '${typeString}' type is already present.`);
79
+ }
80
+ } else {
81
+ context.debug(`The '${typeString}' type is already present.`);
82
+ }
83
+ if (typeVerifies) {
84
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type`);
85
+ }
86
+ return typeVerifies;
87
+ }
88
+ verifySuperType(superType, superTypes, context) {
89
+ let superTypeVerifies = false;
90
+ const superTypeString = superType.getString(), typeDeclarationString = this.getString(); ///
91
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type...`);
92
+ const nominalTypeName = superType.getNominalTypeName(), typeName = nominalTypeName, typeComparesToTypeName = this.type.compareTypeName(typeName);
93
+ if (!typeComparesToTypeName) {
94
+ superType = context.findTypeByNominalTypeName(nominalTypeName);
95
+ if (superType !== null) {
96
+ superTypes.push(superType);
97
+ superTypeVerifies = true;
98
+ } else {
99
+ context.debug(`The '${superTypeString}' super-type is not present.`);
100
+ }
101
+ } else {
102
+ context.debug(`The '${superTypeString}' super-type's name compares to the ${typeName}' type's name.`);
103
+ }
104
+ if (superTypeVerifies) {
105
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type.`);
106
+ }
107
+ return superTypeVerifies;
108
+ }
109
+ verifySuperTypes(context) {
110
+ let superTypesVerify;
111
+ const superTypes = [], typeDeclarationString = this.getString(); ///
112
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's super-types...`);
113
+ superTypesVerify = this.superTypes.every((superType)=>{
114
+ const superTypeVerifies = this.verifySuperType(superType, superTypes, context);
115
+ if (superTypeVerifies) {
116
+ return true;
117
+ }
118
+ });
119
+ if (superTypesVerify) {
120
+ const superTypesLength = superTypes.length;
121
+ if (superTypesLength === 0) {
122
+ const baseType = (0, _type.baseTypeFromNothing)(), superTyupe = baseType; ///
123
+ superTypes.push(superTyupe);
124
+ }
125
+ this.type.setSuperTypes(superTypes);
126
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
127
+ }
128
+ return superTypesVerify;
129
+ }
130
+ verifyTypePrefix(context) {
131
+ let typePrefixVerifies = false;
132
+ const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
133
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
134
+ const typePrefixed = this.type.isPrefixed();
135
+ if (!typePrefixed) {
136
+ typePrefixVerifies = true;
137
+ } else {
138
+ context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
139
+ }
140
+ if (typePrefixVerifies) {
141
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
142
+ }
143
+ return typePrefixVerifies;
144
+ }
145
+ static name = "TypeDeclaration";
146
+ });
147
+
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi4vZGVjbGFyYXRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBUeXBlRGVjbGFyYXRpb24gZXh0ZW5kcyBEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldFN1cGVyVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwZXJUeXBlcztcbiAgfVxuXG4gIGlzUHJvdmlzaW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXR0eXBlRGVjbGFyYXRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlRGVjbGFyYXRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gdHlwZURlY2xhcmF0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZVZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlKGNvbnRleHQpO1xuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlc1ZlcmlmeSA9IHRoaXMudmVyaWZ5U3VwZXJUeXBlcyhjb250ZXh0KTtcblxuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdHlwZVByZWZpeFZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlUHJlZml4KGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgICAgICAgdHlwZVByZWZpeCA9IGNvbnRleHQuZ2V0VHlwZVByZWZpeCgpLFxuICAgICAgICAgICAgICAgIHByZWZpeE5hbWUgPSAodHlwZVByZWZpeCAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVQcmVmaXguZ2V0UHJlZml4TmFtZSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICAgICAgICB0aGlzLnR5cGUuc2V0UHJvdmlzaW9uYWwodGhpcy5wcm92aXNpb25hbCk7XG5cbiAgICAgICAgICB0aGlzLnR5cGUuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgIHRoaXMudHlwZS5zZXRQcmVmaXhOYW1lKHByZWZpeE5hbWUpO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRUeXBlKHRoaXMudHlwZSk7XG5cbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeVR5cGUoY29udGV4dCkge1xuICAgIGxldCB0eXBlVmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZS4uLmApO1xuXG4gICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLnR5cGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICBpZiAoIXR5cGVQcmVzZW50KSB7XG4gICAgICBjb25zdCBwcmVmaXhlZFR5cGVOYW1lID0gdHlwZU5hbWUsIC8vL1xuICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7XG5cbiAgICAgIGlmICghdHlwZVByZXNlbnQpIHtcbiAgICAgICAgdHlwZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZWApO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlVmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlTdXBlclR5cGUoc3VwZXJUeXBlLCBzdXBlclR5cGVzLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1cGVyVHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLi4uYCk7XG5cbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWUsIC8vL1xuICAgICAgICAgIHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0aGlzLnR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgc3VwZXJUeXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgIGlmIChzdXBlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG5cbiAgICAgICAgc3VwZXJUeXBlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N1cGVyVHlwZVN0cmluZ30nIHN1cGVyLXR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlJ3MgbmFtZSBjb21wYXJlcyB0byB0aGUgJHt0eXBlTmFtZX0nIHR5cGUncyBuYW1lLmApO1xuICAgIH1cblxuICAgIGlmIChzdXBlclR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlclR5cGVWZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeVN1cGVyVHlwZXMoY29udGV4dCkge1xuICAgIGxldCBzdXBlclR5cGVzVmVyaWZ5O1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlcyA9IFtdLFxuICAgICAgICAgIHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3Mgc3VwZXItdHlwZXMuLi5gKTtcblxuICAgIHN1cGVyVHlwZXNWZXJpZnkgPSB0aGlzLnN1cGVyVHlwZXMuZXZlcnkoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlVmVyaWZpZXMgPSB0aGlzLnZlcmlmeVN1cGVyVHlwZShzdXBlclR5cGUsIHN1cGVyVHlwZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlVmVyaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc3VwZXJUeXBlc1ZlcmlmeSkge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICAgICAgc3VwZXJUeXVwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHl1cGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyBzdXBlci10eXBlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1ZlcmlmeTtcbiAgfVxuXG4gIHZlcmlmeVR5cGVQcmVmaXgoY29udGV4dCkge1xuICAgIGxldCB0eXBlUHJlZml4VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSdzIHByZWZpeC4uLmApO1xuXG4gICAgY29uc3QgdHlwZVByZWZpeGVkID0gdGhpcy50eXBlLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghdHlwZVByZWZpeGVkKSB7XG4gICAgICB0eXBlUHJlZml4VmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIHByZWZpeGVkLmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUncyBwcmVmaXguYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhWZXJpZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlRGVjbGFyYXRpb25cIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIlR5cGVEZWNsYXJhdGlvbiIsIkRlY2xhcmF0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidHlwZSIsInN1cGVyVHlwZXMiLCJwcm92aXNpb25hbCIsImdldFR5cGUiLCJnZXRTdXBlclR5cGVzIiwiaXNQcm92aXNpb25hbCIsImdldHR5cGVEZWNsYXJhdGlvbk5vZGUiLCJnZXROb2RlIiwidHlwZURlY2xhcmF0aW9uTm9kZSIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJicmVhayIsInR5cGVEZWNsYXJhdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidHlwZVZlcmlmaWVzIiwidmVyaWZ5VHlwZSIsInN1cGVyVHlwZXNWZXJpZnkiLCJ2ZXJpZnlTdXBlclR5cGVzIiwidHlwZVByZWZpeFZlcmlmaWVzIiwidmVyaWZ5VHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJnZXRUeXBlUHJlZml4IiwicHJlZml4TmFtZSIsImdldFByZWZpeE5hbWUiLCJzZXRQcm92aXNpb25hbCIsInNldFByb3BlcnRpZXMiLCJzZXRQcmVmaXhOYW1lIiwiYWRkVHlwZSIsImRlYnVnIiwidHlwZVN0cmluZyIsInR5cGVOYW1lIiwiZ2V0TmFtZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwiaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZSIsInZlcmlmeVN1cGVyVHlwZSIsInN1cGVyVHlwZSIsInN1cGVyVHlwZVZlcmlmaWVzIiwic3VwZXJUeXBlU3RyaW5nIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwidHlwZUNvbXBhcmVzVG9UeXBlTmFtZSIsImNvbXBhcmVUeXBlTmFtZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJwdXNoIiwiZXZlcnkiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXVwZSIsInNldFN1cGVyVHlwZXMiLCJ0eXBlUHJlZml4ZWQiLCJpc1ByZWZpeGVkIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBT0E7OztlQUFBOzs7b0VBTHdCOzBCQUVEO3NCQUNhOzs7Ozs7TUFFcEMsV0FBZUEsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyx3QkFBd0JDLG9CQUFXO0lBQzdELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsQ0FBRTtRQUM1RSxLQUFLLENBQUNOLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElB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