occam-nominal 1.0.577 → 1.0.580
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.
- package/lib/context/file/nominal.js +3 -3
- package/lib/context/krasic.js +4 -4
- package/lib/context/liminal.js +92 -92
- package/lib/context/mnemic.js +2 -2
- package/lib/context.js +16 -16
- package/lib/element/claim.js +2 -2
- package/lib/element/metavariable.js +9 -9
- package/lib/element/procedureReference.js +2 -2
- package/lib/element/rule.js +2 -2
- package/lib/element/signature.js +12 -11
- package/lib/element/substitution/statement.js +5 -5
- package/lib/element/variable.js +9 -9
- package/lib/utilities/substitutions.js +12 -12
- package/package.json +12 -12
- package/src/context/file/nominal.js +2 -2
- package/src/context/krasic.js +3 -3
- package/src/context/liminal.js +106 -106
- package/src/context/mnemic.js +1 -1
- package/src/context.js +15 -15
- package/src/element/claim.js +1 -1
- package/src/element/metavariable.js +10 -10
- package/src/element/procedureReference.js +2 -2
- package/src/element/rule.js +1 -1
- package/src/element/signature.js +11 -10
- package/src/element/substitution/statement.js +5 -5
- package/src/element/variable.js +8 -8
- package/src/utilities/substitutions.js +9 -9
package/lib/context/liminal.js
CHANGED
|
@@ -19,173 +19,173 @@ function _interop_require_default(obj) {
|
|
|
19
19
|
}
|
|
20
20
|
const { forEach } = _occamlanguages.continuationUtilities, { push, find, first } = _necessary.arrayUtilities;
|
|
21
21
|
class LiminalContext extends _context.default {
|
|
22
|
-
constructor(context,
|
|
22
|
+
constructor(context, derivedSubstitutions){
|
|
23
23
|
super(context);
|
|
24
|
-
this.
|
|
24
|
+
this.derivedSubstitutions = derivedSubstitutions;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
getDerivedSubstitutions(derivedSubstitutions = []) {
|
|
27
27
|
const context = this.getContext();
|
|
28
|
-
push(
|
|
29
|
-
context.
|
|
30
|
-
return
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
let
|
|
34
|
-
const
|
|
35
|
-
if (
|
|
36
|
-
const
|
|
37
|
-
|
|
28
|
+
push(derivedSubstitutions, this.derivedSubstitutions);
|
|
29
|
+
context.getDerivedSubstitutions(derivedSubstitutions);
|
|
30
|
+
return derivedSubstitutions;
|
|
31
|
+
}
|
|
32
|
+
getSoleDerivedSubstitution() {
|
|
33
|
+
let soleDerivedSubstitution = null;
|
|
34
|
+
const derivedSubstitutionsLength = this.derivedSubstitutions.length;
|
|
35
|
+
if (derivedSubstitutionsLength === 1) {
|
|
36
|
+
const firstDerivedSubstitution = first(this.derivedSubstitutions);
|
|
37
|
+
soleDerivedSubstitution = firstDerivedSubstitution; ///
|
|
38
38
|
}
|
|
39
|
-
return
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
let
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
45
|
-
const
|
|
46
|
-
if (
|
|
47
|
-
|
|
39
|
+
return soleDerivedSubstitution;
|
|
40
|
+
}
|
|
41
|
+
getSingularNonTrivialDerivedSubstitution() {
|
|
42
|
+
let singularNonTrivialDerivedSubstitution = null;
|
|
43
|
+
const soleDerivedSubstitution = this.getSoleDerivedSubstitution();
|
|
44
|
+
if (soleDerivedSubstitution !== null) {
|
|
45
|
+
const soleDerivedSubstitutionNonTrivial = soleDerivedSubstitution.isNonTrivial();
|
|
46
|
+
if (soleDerivedSubstitutionNonTrivial) {
|
|
47
|
+
singularNonTrivialDerivedSubstitution = soleDerivedSubstitution; ///
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
return
|
|
50
|
+
return singularNonTrivialDerivedSubstitution;
|
|
51
51
|
}
|
|
52
52
|
addSubstitution(substitution) {
|
|
53
53
|
///
|
|
54
54
|
}
|
|
55
|
-
|
|
56
|
-
const context = this,
|
|
57
|
-
context.trace(`Adding the '${
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
if (
|
|
55
|
+
addDerivedSubstitution(derivedSubstitution) {
|
|
56
|
+
const context = this, derivedSubstitutionA = derivedSubstitution, derivedSubstitutionString = derivedSubstitution.getString();
|
|
57
|
+
context.trace(`Adding the '${derivedSubstitutionString}' derived substitution to the liminal context...`);
|
|
58
|
+
const derivedSubstitutionB = this.derivedSubstitutions.find((derivedSubstitution)=>{
|
|
59
|
+
const derivedSubstitutionB = derivedSubstitution, derivedSubstitutionAEqualToDerivedSubstitutionB = derivedSubstitutionA.isEqualTo(derivedSubstitutionB);
|
|
60
|
+
if (derivedSubstitutionAEqualToDerivedSubstitutionB) {
|
|
61
61
|
return true;
|
|
62
62
|
}
|
|
63
63
|
}) || null;
|
|
64
|
-
if (
|
|
65
|
-
context.debug(`The '${
|
|
64
|
+
if (derivedSubstitutionB !== null) {
|
|
65
|
+
context.debug(`The '${derivedSubstitutionString}' derived substitution has already been added to the liminal context.`);
|
|
66
66
|
} else {
|
|
67
|
-
this.
|
|
67
|
+
this.derivedSubstitutions.push(derivedSubstitution);
|
|
68
68
|
}
|
|
69
|
-
context.debug(`...added the '${
|
|
69
|
+
context.debug(`...added the '${derivedSubstitutionString}' derived substitution to the liminal context.`);
|
|
70
70
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this.
|
|
71
|
+
addDerivedSubstitutions(derivedSubstitutions) {
|
|
72
|
+
derivedSubstitutions.forEach((derivedSubstitution)=>{
|
|
73
|
+
this.addDerivedSubstitution(derivedSubstitution);
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
const
|
|
76
|
+
solveDerivedSubstitutions(forward, back) {
|
|
77
|
+
const derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions);
|
|
78
78
|
return forEach(metavariableNodes, (metavariableNode, forward, back)=>{
|
|
79
|
-
const
|
|
80
|
-
return forEach(
|
|
81
|
-
const
|
|
79
|
+
const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode);
|
|
80
|
+
return forEach(complexDerivedSubstitutions, (complexDerivedSubstitution, forward, back)=>{
|
|
81
|
+
const derivedSubstitution = complexDerivedSubstitution, solved = derivedSubstitution.isSolved();
|
|
82
82
|
if (solved) {
|
|
83
83
|
return forward(back);
|
|
84
84
|
}
|
|
85
85
|
const context = this; ///
|
|
86
|
-
return
|
|
86
|
+
return derivedSubstitution.solve(context, (context, back)=>{
|
|
87
87
|
return forward(back);
|
|
88
88
|
}, back);
|
|
89
89
|
}, forward, back);
|
|
90
90
|
}, forward, back);
|
|
91
91
|
}
|
|
92
92
|
areComplexSubstitutionsUnsolved() {
|
|
93
|
-
const
|
|
93
|
+
const derivedSubstitutionsSolved = this.areDerivedSubstitutionsSolved(), complexSubstitutionsUnsolved = !derivedSubstitutionsSolved;
|
|
94
94
|
return complexSubstitutionsUnsolved;
|
|
95
95
|
}
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
if (
|
|
96
|
+
areDerivedSubstitutionsSolved() {
|
|
97
|
+
const derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions), derivedSubstitutionsSolved = metavariableNodes.every((metavariableNode)=>{
|
|
98
|
+
const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode), complexDerivedSubstitutionsSolved = complexDerivedSubstitutions.every((complexDerivedSubstitution)=>{
|
|
99
|
+
const complexDerivedSubstitutionSolved = complexDerivedSubstitution.isSolved();
|
|
100
|
+
if (complexDerivedSubstitutionSolved) {
|
|
101
101
|
return true;
|
|
102
102
|
}
|
|
103
103
|
});
|
|
104
|
-
if (
|
|
104
|
+
if (complexDerivedSubstitutionsSolved) {
|
|
105
105
|
return true;
|
|
106
106
|
}
|
|
107
107
|
});
|
|
108
|
-
return
|
|
108
|
+
return derivedSubstitutionsSolved;
|
|
109
109
|
}
|
|
110
110
|
isEmpty() {
|
|
111
|
-
const
|
|
111
|
+
const derivedSubstitutionsLength = this.derivedSubstitutions.length, empty = derivedSubstitutionsLength === 0;
|
|
112
112
|
return empty;
|
|
113
113
|
}
|
|
114
114
|
merge(context) {
|
|
115
115
|
context.debug(`Merging the liminal context`);
|
|
116
|
-
context.
|
|
116
|
+
context.addDerivedSubstitutions(this.derivedSubstitutions);
|
|
117
117
|
}
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
return
|
|
118
|
+
findDerivedSubstitution(callback) {
|
|
119
|
+
const derivedSubstitutions = this.getDerivedSubstitutions(), derivedSubstitution = derivedSubstitutions.find(callback);
|
|
120
|
+
return derivedSubstitution;
|
|
121
121
|
}
|
|
122
|
-
|
|
123
|
-
let
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return
|
|
122
|
+
findDerivedSubstitutions(callback) {
|
|
123
|
+
let derivedSubstitutions;
|
|
124
|
+
derivedSubstitutions = this.getDerivedSubstitutions();
|
|
125
|
+
derivedSubstitutions = find(derivedSubstitutions, callback); ///
|
|
126
|
+
return derivedSubstitutions;
|
|
127
127
|
}
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
const variableNodeMatches =
|
|
128
|
+
findDerivedSubstitutionByVariableNode(variableNode) {
|
|
129
|
+
const derivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
|
|
130
|
+
const variableNodeMatches = derivedSubstitution.matchVariableNode(variableNode);
|
|
131
131
|
if (variableNodeMatches) {
|
|
132
132
|
return true;
|
|
133
133
|
}
|
|
134
134
|
}) || null;
|
|
135
|
-
return
|
|
135
|
+
return derivedSubstitution;
|
|
136
136
|
}
|
|
137
|
-
|
|
138
|
-
const
|
|
139
|
-
return
|
|
137
|
+
findDerivedSubstitutionByMetavariableNode(metavariableNode) {
|
|
138
|
+
const simpleDerivedSubstitution = this.findSimpleDerivedSubstitutionByMetavariableNode(metavariableNode), derivedSubstitution = simpleDerivedSubstitution; ///
|
|
139
|
+
return derivedSubstitution;
|
|
140
140
|
}
|
|
141
|
-
|
|
142
|
-
const
|
|
143
|
-
const
|
|
144
|
-
if (
|
|
145
|
-
const
|
|
141
|
+
findSimpleDerivedSubstitutionByMetavariableNode(metavariableNode) {
|
|
142
|
+
const simpleDerivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
|
|
143
|
+
const derivedSubstitutionSimple = derivedSubstitution.isSimple();
|
|
144
|
+
if (derivedSubstitutionSimple) {
|
|
145
|
+
const simpleDerivedSubstitution = derivedSubstitution, metavariableNodeMatches = simpleDerivedSubstitution.matchMetavariableNode(metavariableNode);
|
|
146
146
|
if (metavariableNodeMatches) {
|
|
147
147
|
return true;
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
}) || null;
|
|
151
|
-
return
|
|
151
|
+
return simpleDerivedSubstitution;
|
|
152
152
|
}
|
|
153
|
-
|
|
154
|
-
const
|
|
155
|
-
const
|
|
156
|
-
if (
|
|
157
|
-
const
|
|
153
|
+
findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode) {
|
|
154
|
+
const complexDerivedSubstitution = this.findDerivedSubstitutions((derivedSubstitution)=>{
|
|
155
|
+
const derivedSubstitutionComplex = derivedSubstitution.isComplex();
|
|
156
|
+
if (derivedSubstitutionComplex) {
|
|
157
|
+
const complexDerivedSubstitution = derivedSubstitution, metavariableNodeMatches = complexDerivedSubstitution.matchMetavariableNode(metavariableNode);
|
|
158
158
|
if (metavariableNodeMatches) {
|
|
159
159
|
return true;
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
}) || null;
|
|
163
|
-
return
|
|
163
|
+
return complexDerivedSubstitution;
|
|
164
164
|
}
|
|
165
|
-
|
|
166
|
-
const
|
|
167
|
-
const metavariableNodeMatches =
|
|
165
|
+
findDerivedSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
|
|
166
|
+
const derivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
|
|
167
|
+
const metavariableNodeMatches = derivedSubstitution.matchMetavariableNode(metavariableNode);
|
|
168
168
|
if (metavariableNodeMatches) {
|
|
169
|
-
const substitutionNodeMatches =
|
|
169
|
+
const substitutionNodeMatches = derivedSubstitution.matchSubstitutionNode(substitutionNode);
|
|
170
170
|
if (substitutionNodeMatches) {
|
|
171
171
|
return true;
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
}) || null;
|
|
175
|
-
return
|
|
175
|
+
return derivedSubstitution;
|
|
176
176
|
}
|
|
177
|
-
|
|
178
|
-
const
|
|
179
|
-
return
|
|
177
|
+
isDerivedSubstitutionPresentByMetavariableNode(metavariableNode) {
|
|
178
|
+
const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNode(metavariableNode), derivedSubstitutionPresent = derivedSubstitution !== null;
|
|
179
|
+
return derivedSubstitutionPresent;
|
|
180
180
|
}
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
return
|
|
181
|
+
isDerivedSubstitutionPresentByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
|
|
182
|
+
const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode), derivedSubstitutionPresent = derivedSubstitution !== null;
|
|
183
|
+
return derivedSubstitutionPresent;
|
|
184
184
|
}
|
|
185
185
|
static fromNothing(context) {
|
|
186
|
-
const
|
|
186
|
+
const derivedSubstitutions = [], liminalContext = new LiminalContext(context, derivedSubstitutions);
|
|
187
187
|
return liminalContext;
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOb2Rlc0Zyb21JbmZlcnJlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyA9IGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goaW5mZXJyZWRTdWJzdGl0dXRpb25zLCB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb24gPSBmaXJzdCh0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb247IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTaW5ndWxhck5vblRyaXZpYWxJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc2luZ3VsYXJOb25Ucml2aWFsSW5mZXJyZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24oKTtcblxuICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwgPSBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24uaXNOb25Ucml2aWFsKCk7XG5cbiAgICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uID0gc29sZUluZmVycmVkU3Vic3RpdHV0aW9uOyAgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkSW5mZXJyZWRTdWJzdGl0dXRpb24oaW5mZXJyZWRTdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25BID0gaW5mZXJyZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nID0gaW5mZXJyZWRTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uQiA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZpbmQoKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkIgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbkFFcXVhbFRvSW5mZXJyZWRTdWJzdGl0dXRpb25CID0gaW5mZXJyZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhpbmZlcnJlZFN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25BRXF1YWxUb0luZmVycmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZlcnJlZFN1YnN0aXR1dGlvbnMucHVzaChpbmZlcnJlZFN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZvckVhY2goKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEluZmVycmVkU3Vic3RpdHV0aW9uKGluZmVycmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zKGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldEluZmVycmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tSW5mZXJyZWRTdWJzdGl0dXRpb25zKGluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZm9yRWFjaChtZXRhdmFyaWFibGVOb2RlcywgKG1ldGF2YXJpYWJsZU5vZGUsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICByZXR1cm4gZm9yRWFjaChjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zLCAoY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uID0gY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgc29sdmVkID0gaW5mZXJyZWRTdWJzdGl0dXRpb24uaXNTb2x2ZWQoKTtcblxuICAgICAgICBpZiAoc29sdmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uLnNvbHZlKGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICBhcmVDb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkKCkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uc1NvbHZlZCA9IHRoaXMuYXJlSW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkKCksXG4gICAgICAgICAgY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCA9ICFpbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQ7XG5cbiAgICByZXR1cm4gY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZDtcbiAgfVxuXG4gIGFyZUluZmVycmVkU3Vic3RpdHV0aW9uc1NvbHZlZCgpIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldEluZmVycmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tSW5mZXJyZWRTdWJzdGl0dXRpb25zKGluZmVycmVkU3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkID0gbWV0YXZhcmlhYmxlTm9kZXMuZXZlcnkoKG1ldGF2YXJpYWJsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc1NvbHZlZCA9IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnMuZXZlcnkoKGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25Tb2x2ZWQgPSBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24uaXNTb2x2ZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uU29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc1NvbHZlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQ7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9IChpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgbWVyZ2UoY29udGV4dCkge1xuICAgIGNvbnRleHQuZGVidWcoYE1lcmdpbmcgdGhlIGxpbWluYWwgY29udGV4dGApO1xuXG4gICAgY29udGV4dC5hZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnModGhpcy5pbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuICB9XG5cbiAgZmluZEluZmVycmVkU3Vic3RpdHV0aW9uKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGluZmVycmVkU3Vic3RpdHV0aW9ucy5maW5kKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoY2FsbGJhY2spIHtcbiAgICBsZXQgaW5mZXJyZWRTdWJzdGl0dXRpb25zO1xuXG4gICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKTtcblxuICAgIGluZmVycmVkU3Vic3RpdHV0aW9ucyA9IGZpbmQoaW5mZXJyZWRTdWJzdGl0dXRpb25zLCBjYWxsYmFjayk7ICAvLy9cblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZEluZmVycmVkU3Vic3RpdHV0aW9uKChpbmZlcnJlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGluZmVycmVkU3Vic3RpdHV0aW9uLm1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmICh2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZFNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZEluZmVycmVkU3Vic3RpdHV0aW9uKChpbmZlcnJlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25TaW1wbGUgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5pc1NpbXBsZSgpO1xuXG4gICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25TaW1wbGUpIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSBpbmZlcnJlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb25zKChpbmZlcnJlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25Db21wbGV4ID0gaW5mZXJyZWRTdWJzdGl0dXRpb24uaXNDb21wbGV4KCk7XG5cbiAgICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBsZXgpIHtcbiAgICAgICAgY29uc3QgY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uID0gaW5mZXJyZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZEluZmVycmVkU3Vic3RpdHV0aW9uKChpbmZlcnJlZFN1YnN0aXR1dGlvbikgPT4geyAgLy8vXG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGluZmVycmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gaW5mZXJyZWRTdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGlzSW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IChpbmZlcnJlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNJbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSxcbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoaW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbGltaW5hbENvbnRleHQgPSBuZXcgTGltaW5hbENvbnRleHQoY29udGV4dCwgaW5mZXJyZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBsaW1pbmFsQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkxpbWluYWxDb250ZXh0IiwiZm9yRWFjaCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsInB1c2giLCJmaW5kIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwiaW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiZ2V0SW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiZ2V0Q29udGV4dCIsImdldFNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiIsInNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImluZmVycmVkU3Vic3RpdHV0aW9uc0xlbmd0aCIsImxlbmd0aCIsImZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb24iLCJnZXRTaW5ndWxhck5vblRyaXZpYWxJbmZlcnJlZFN1YnN0aXR1dGlvbiIsInNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uIiwic29sZUluZmVycmVkU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCIsImlzTm9uVHJpdmlhbCIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsImFkZEluZmVycmVkU3Vic3RpdHV0aW9uIiwiaW5mZXJyZWRTdWJzdGl0dXRpb24iLCJpbmZlcnJlZFN1YnN0aXR1dGlvbkEiLCJpbmZlcnJlZFN1YnN0aXR1dGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25CIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25BRXF1YWxUb0luZmVycmVkU3Vic3RpdHV0aW9uQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwic29sdmVJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJmb3J3YXJkIiwiYmFjayIsIm1ldGF2YXJpYWJsZU5vZGVzIiwibWV0YXZhcmlhYmxlTm9kZXNGcm9tSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJmaW5kQ29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsImlzU29sdmVkIiwic29sdmUiLCJhcmVDb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiYXJlSW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCIsImV2ZXJ5IiwiY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc1NvbHZlZCIsImNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvblNvbHZlZCIsImlzRW1wdHkiLCJlbXB0eSIsIm1lcmdlIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9uIiwiY2FsbGJhY2siLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImZpbmRTaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uU2ltcGxlIiwiaXNTaW1wbGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGxleCIsImlzQ29tcGxleCIsImZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc0luZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudCIsImlzSW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBcUJBOzs7MkJBVlU7Z0NBQ087Z0VBRWxCOytCQUV1Qzs7Ozs7O0FBRTNELE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHFDQUFxQixFQUNuQyxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1OLHVCQUF1Qk8sZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxxQkFBcUIsQ0FBRTtRQUMx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
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuXG5jb25zdCB7IGZvckVhY2ggfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgcHVzaCwgZmluZCwgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW1pbmFsQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZGVyaXZlZFN1YnN0aXR1dGlvbnMsIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uID0gZmlyc3QodGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZURlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTaW5ndWxhck5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uKCkge1xuICAgIGxldCBzaW5ndWxhck5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbigpO1xuXG4gICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwgPSBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbi5pc05vblRyaXZpYWwoKTtcblxuICAgICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCkge1xuICAgICAgICBzaW5ndWxhck5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uID0gc29sZURlcml2ZWRTdWJzdGl0dXRpb247ICAvLy9cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2luZ3VsYXJOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICAvLy9cbiAgfVxuXG4gIGFkZERlcml2ZWRTdWJzdGl0dXRpb24oZGVyaXZlZFN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQSA9IGRlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmcgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkIgPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmZpbmQoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25CID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQiA9IGRlcml2ZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhkZXJpdmVkU3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWQgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5wdXNoKGRlcml2ZWRTdWJzdGl0dXRpb24pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMuZm9yRWFjaCgoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGREZXJpdmVkU3Vic3RpdHV0aW9uKGRlcml2ZWRTdWJzdGl0dXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucyhmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZm9yRWFjaChtZXRhdmFyaWFibGVOb2RlcywgKG1ldGF2YXJpYWJsZU5vZGUsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgcmV0dXJuIGZvckVhY2goY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zLCAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24sIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgc29sdmVkID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5pc1NvbHZlZCgpO1xuXG4gICAgICAgIGlmIChzb2x2ZWQpIHtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgICAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbi5zb2x2ZShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGZvcndhcmQsIGJhY2spO1xuICB9XG5cbiAgYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCgpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc1NvbHZlZCA9IHRoaXMuYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNTb2x2ZWQoKSxcbiAgICAgICAgICBjb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkID0gIWRlcml2ZWRTdWJzdGl0dXRpb25zU29sdmVkO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQ7XG4gIH1cblxuICBhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1NvbHZlZCgpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uc1NvbHZlZCA9IG1ldGF2YXJpYWJsZU5vZGVzLmV2ZXJ5KChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICAgICAgICBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNTb2x2ZWQgPSBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMuZXZlcnkoKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uU29sdmVkID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24uaXNTb2x2ZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25Tb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNTb2x2ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnNTb2x2ZWQ7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZW1wdHkgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgbWVyZ2UoY29udGV4dCkge1xuICAgIGNvbnRleHQuZGVidWcoYE1lcmdpbmcgdGhlIGxpbWluYWwgY29udGV4dGApO1xuXG4gICAgY29udGV4dC5hZGREZXJpdmVkU3Vic3RpdHV0aW9ucyh0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb25zLmZpbmQoY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbnMoY2FsbGJhY2spIHtcbiAgICBsZXQgZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG5cbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKTtcblxuICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zID0gZmluZChkZXJpdmVkU3Vic3RpdHV0aW9ucywgY2FsbGJhY2spOyAgLy8vXG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGVNYXRjaGVzID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAodmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZFNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uU2ltcGxlID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5pc1NpbXBsZSgpO1xuXG4gICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSkge1xuICAgICAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucygoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBsZXggPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmlzQ29tcGxleCgpO1xuXG4gICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBsZXgpIHtcbiAgICAgICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHsgIC8vL1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IChkZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbGltaW5hbENvbnRleHQgPSBuZXcgTGltaW5hbENvbnRleHQoY29udGV4dCwgZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGxpbWluYWxDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTGltaW5hbENvbnRleHQiLCJmb3JFYWNoIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwicHVzaCIsImZpbmQiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJkZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZ2V0Q29udGV4dCIsImdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCIsImxlbmd0aCIsImZpcnN0RGVyaXZlZFN1YnN0aXR1dGlvbiIsImdldFNpbmd1bGFyTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24iLCJzaW5ndWxhck5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsIiwiaXNOb25Ucml2aWFsIiwiYWRkU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb24iLCJkZXJpdmVkU3Vic3RpdHV0aW9uQSIsImRlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlcml2ZWRTdWJzdGl0dXRpb25CIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkFFcXVhbFRvRGVyaXZlZFN1YnN0aXR1dGlvbkIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsImFkZERlcml2ZWRTdWJzdGl0dXRpb25zIiwic29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZvcndhcmQiLCJiYWNrIiwibWV0YXZhcmlhYmxlTm9kZXMiLCJtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJmaW5kQ29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2x2ZWQiLCJpc1NvbHZlZCIsInNvbHZlIiwiYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCIsImRlcml2ZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNTb2x2ZWQiLCJjb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkIiwiZXZlcnkiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNTb2x2ZWQiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblNvbHZlZCIsImlzRW1wdHkiLCJlbXB0eSIsIm1lcmdlIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb24iLCJjYWxsYmFjayIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsInNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUiLCJpc1NpbXBsZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBcUJBOzs7MkJBVlU7Z0NBQ087Z0VBRWxCOytCQUVzQzs7Ozs7O0FBRTFELE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHFDQUFxQixFQUNuQyxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1OLHVCQUF1Qk8sZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUN6QyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsd0JBQXdCRCx1QkFBdUIsRUFBRSxFQUFFO1FBQ2pELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CUixLQUFLTSxzQkFBc0IsSUFBSSxDQUFDQSxvQkFBb0I7UUFFcERELFFBQVFFLHVCQUF1QixDQUFDRDtRQUVoQyxPQUFPQTtJQUNUO0lBRUFHLDZCQUE2QjtR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
|