@angular/language-service 11.1.0-next.4 → 11.1.1
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/bundles/ivy.js +2857 -2389
- package/bundles/language-service.js +2252 -2047
- package/ivy/adapters.d.ts +5 -0
- package/ivy/adapters.js +9 -1
- package/ivy/compiler_factory.js +9 -6
- package/ivy/completions.d.ts +2 -1
- package/ivy/completions.js +8 -2
- package/ivy/definitions.js +118 -54
- package/ivy/language_service.d.ts +2 -0
- package/ivy/language_service.js +59 -16
- package/ivy/references.js +92 -82
- package/ivy/template_target.d.ts +24 -6
- package/ivy/template_target.js +48 -43
- package/ivy/ts_plugin.js +14 -2
- package/ivy/utils.d.ts +11 -1
- package/ivy/utils.js +39 -3
- package/package.json +1 -1
- package/src/completions.js +2 -2
- package/src/definitions.js +4 -5
- package/src/diagnostics.js +3 -5
- package/src/typescript_host.d.ts +6 -1
- package/src/typescript_host.js +8 -3
- package/src/utils.d.ts +6 -0
- package/src/utils.js +14 -3
package/ivy/template_target.d.ts
CHANGED
|
@@ -17,9 +17,9 @@ export interface TemplateTarget {
|
|
|
17
17
|
*/
|
|
18
18
|
position: number;
|
|
19
19
|
/**
|
|
20
|
-
* The template
|
|
20
|
+
* The template (or AST expression) node or nodes closest to the search position.
|
|
21
21
|
*/
|
|
22
|
-
|
|
22
|
+
context: TargetContext;
|
|
23
23
|
/**
|
|
24
24
|
* The `t.Template` which contains the found node or expression (or `null` if in the root
|
|
25
25
|
* template).
|
|
@@ -31,14 +31,23 @@ export interface TemplateTarget {
|
|
|
31
31
|
parent: t.Node | e.AST | null;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
* A node targeted at a given position in the template, including potential contextual
|
|
35
|
-
* about the specific aspect of the node being referenced.
|
|
34
|
+
* A node or nodes targeted at a given position in the template, including potential contextual
|
|
35
|
+
* information about the specific aspect of the node being referenced.
|
|
36
36
|
*
|
|
37
37
|
* Some nodes have multiple interior contexts. For example, `t.Element` nodes have both a tag name
|
|
38
38
|
* as well as a body, and a given position definitively points to one or the other. `TargetNode`
|
|
39
39
|
* captures the node itself, as well as this additional contextual disambiguation.
|
|
40
40
|
*/
|
|
41
|
-
export declare type
|
|
41
|
+
export declare type TargetContext = SingleNodeTarget | MultiNodeTarget;
|
|
42
|
+
/** Contexts which logically target only a single node in the template AST. */
|
|
43
|
+
export declare type SingleNodeTarget = RawExpression | RawTemplateNode | ElementInBodyContext | ElementInTagContext | AttributeInKeyContext | AttributeInValueContext;
|
|
44
|
+
/**
|
|
45
|
+
* Contexts which logically target multiple nodes in the template AST, which cannot be
|
|
46
|
+
* disambiguated given a single position because they are all equally relavent. For example, in the
|
|
47
|
+
* banana-in-a-box syntax `[(ngModel)]="formValues.person"`, the position in the template for the
|
|
48
|
+
* key `ngModel` refers to both the bound event `ngModelChange` and the input `ngModel`.
|
|
49
|
+
*/
|
|
50
|
+
export declare type MultiNodeTarget = TwoWayBindingContext;
|
|
42
51
|
/**
|
|
43
52
|
* Differentiates the various kinds of `TargetNode`s.
|
|
44
53
|
*/
|
|
@@ -48,7 +57,8 @@ export declare enum TargetNodeKind {
|
|
|
48
57
|
ElementInTagContext = 2,
|
|
49
58
|
ElementInBodyContext = 3,
|
|
50
59
|
AttributeInKeyContext = 4,
|
|
51
|
-
AttributeInValueContext = 5
|
|
60
|
+
AttributeInValueContext = 5,
|
|
61
|
+
TwoWayBindingContext = 6
|
|
52
62
|
}
|
|
53
63
|
/**
|
|
54
64
|
* An `e.AST` expression that's targeted at a given position, with no additional context.
|
|
@@ -88,6 +98,14 @@ export interface AttributeInValueContext {
|
|
|
88
98
|
kind: TargetNodeKind.AttributeInValueContext;
|
|
89
99
|
node: t.TextAttribute | t.BoundAttribute | t.BoundEvent;
|
|
90
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* A `t.BoundAttribute` and `t.BoundEvent` pair that are targeted, where the given position is
|
|
103
|
+
* within the key span of both.
|
|
104
|
+
*/
|
|
105
|
+
export interface TwoWayBindingContext {
|
|
106
|
+
kind: TargetNodeKind.TwoWayBindingContext;
|
|
107
|
+
nodes: [t.BoundAttribute, t.BoundEvent];
|
|
108
|
+
}
|
|
91
109
|
/**
|
|
92
110
|
* Return the template AST node or expression AST node that most accurately
|
|
93
111
|
* represents the node at the specified cursor `position`.
|
package/ivy/template_target.js
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
TargetNodeKind[TargetNodeKind["ElementInBodyContext"] = 3] = "ElementInBodyContext";
|
|
34
34
|
TargetNodeKind[TargetNodeKind["AttributeInKeyContext"] = 4] = "AttributeInKeyContext";
|
|
35
35
|
TargetNodeKind[TargetNodeKind["AttributeInValueContext"] = 5] = "AttributeInValueContext";
|
|
36
|
+
TargetNodeKind[TargetNodeKind["TwoWayBindingContext"] = 6] = "TwoWayBindingContext";
|
|
36
37
|
})(TargetNodeKind = exports.TargetNodeKind || (exports.TargetNodeKind = {}));
|
|
37
38
|
/**
|
|
38
39
|
* This special marker is added to the path when the cursor is within the sourceSpan but not the key
|
|
@@ -61,10 +62,6 @@
|
|
|
61
62
|
break;
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
|
-
var parent = null;
|
|
65
|
-
if (path.length >= 2) {
|
|
66
|
-
parent = path[path.length - 2];
|
|
67
|
-
}
|
|
68
65
|
// Given the candidate node, determine the full targeted context.
|
|
69
66
|
var nodeInContext;
|
|
70
67
|
if (candidate instanceof e.AST) {
|
|
@@ -95,7 +92,17 @@
|
|
|
95
92
|
else if ((candidate instanceof t.BoundAttribute || candidate instanceof t.BoundEvent ||
|
|
96
93
|
candidate instanceof t.TextAttribute) &&
|
|
97
94
|
candidate.keySpan !== undefined) {
|
|
98
|
-
|
|
95
|
+
var previousCandidate = path[path.length - 2];
|
|
96
|
+
if (candidate instanceof t.BoundEvent && previousCandidate instanceof t.BoundAttribute &&
|
|
97
|
+
candidate.name === previousCandidate.name + 'Change') {
|
|
98
|
+
var boundAttribute = previousCandidate;
|
|
99
|
+
var boundEvent = candidate;
|
|
100
|
+
nodeInContext = {
|
|
101
|
+
kind: TargetNodeKind.TwoWayBindingContext,
|
|
102
|
+
nodes: [boundAttribute, boundEvent],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
else if (utils_1.isWithin(position, candidate.keySpan)) {
|
|
99
106
|
nodeInContext = {
|
|
100
107
|
kind: TargetNodeKind.AttributeInKeyContext,
|
|
101
108
|
node: candidate,
|
|
@@ -114,7 +121,14 @@
|
|
|
114
121
|
node: candidate,
|
|
115
122
|
};
|
|
116
123
|
}
|
|
117
|
-
|
|
124
|
+
var parent = null;
|
|
125
|
+
if (nodeInContext.kind === TargetNodeKind.TwoWayBindingContext && path.length >= 3) {
|
|
126
|
+
parent = path[path.length - 3];
|
|
127
|
+
}
|
|
128
|
+
else if (path.length >= 2) {
|
|
129
|
+
parent = path[path.length - 2];
|
|
130
|
+
}
|
|
131
|
+
return { position: position, context: nodeInContext, template: context, parent: parent };
|
|
118
132
|
}
|
|
119
133
|
exports.getTargetAtPosition = getTargetAtPosition;
|
|
120
134
|
/**
|
|
@@ -150,19 +164,22 @@
|
|
|
150
164
|
return strictPath;
|
|
151
165
|
};
|
|
152
166
|
TemplateTargetVisitor.prototype.visit = function (node) {
|
|
153
|
-
var last = this.path[this.path.length - 1];
|
|
154
|
-
if (last && utils_1.isTemplateNodeWithKeyAndValue(last) && utils_1.isWithin(this.position, last.keySpan)) {
|
|
155
|
-
// We've already identified that we are within a `keySpan` of a node.
|
|
156
|
-
// We should stop processing nodes at this point to prevent matching
|
|
157
|
-
// any other nodes. This can happen when the end span of a different node
|
|
158
|
-
// touches the start of the keySpan for the candidate node. Because
|
|
159
|
-
// our `isWithin` logic is inclusive on both ends, we can match both nodes.
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
167
|
var _a = getSpanIncludingEndTag(node), start = _a.start, end = _a.end;
|
|
163
168
|
if (!utils_1.isWithin(this.position, { start: start, end: end })) {
|
|
164
169
|
return;
|
|
165
170
|
}
|
|
171
|
+
var last = this.path[this.path.length - 1];
|
|
172
|
+
var withinKeySpanOfLastNode = last && utils_1.isTemplateNodeWithKeyAndValue(last) && utils_1.isWithin(this.position, last.keySpan);
|
|
173
|
+
var withinKeySpanOfCurrentNode = utils_1.isTemplateNodeWithKeyAndValue(node) && utils_1.isWithin(this.position, node.keySpan);
|
|
174
|
+
if (withinKeySpanOfLastNode && !withinKeySpanOfCurrentNode) {
|
|
175
|
+
// We've already identified that we are within a `keySpan` of a node.
|
|
176
|
+
// Unless we are _also_ in the `keySpan` of the current node (happens with two way bindings),
|
|
177
|
+
// we should stop processing nodes at this point to prevent matching any other nodes. This can
|
|
178
|
+
// happen when the end span of a different node touches the start of the keySpan for the
|
|
179
|
+
// candidate node. Because our `isWithin` logic is inclusive on both ends, we can match both
|
|
180
|
+
// nodes.
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
166
183
|
if (utils_1.isTemplateNodeWithKeyAndValue(node) && !utils_1.isWithinKeyValue(this.position, node)) {
|
|
167
184
|
// If cursor is within source span but not within key span or value span,
|
|
168
185
|
// do not return the node.
|
|
@@ -174,30 +191,28 @@
|
|
|
174
191
|
}
|
|
175
192
|
};
|
|
176
193
|
TemplateTargetVisitor.prototype.visitElement = function (element) {
|
|
194
|
+
this.visitElementOrTemplate(element);
|
|
195
|
+
};
|
|
196
|
+
TemplateTargetVisitor.prototype.visitTemplate = function (template) {
|
|
197
|
+
this.visitElementOrTemplate(template);
|
|
198
|
+
};
|
|
199
|
+
TemplateTargetVisitor.prototype.visitElementOrTemplate = function (element) {
|
|
177
200
|
this.visitAll(element.attributes);
|
|
178
201
|
this.visitAll(element.inputs);
|
|
179
202
|
this.visitAll(element.outputs);
|
|
203
|
+
if (element instanceof t.Template) {
|
|
204
|
+
this.visitAll(element.templateAttrs);
|
|
205
|
+
}
|
|
180
206
|
this.visitAll(element.references);
|
|
181
|
-
|
|
207
|
+
if (element instanceof t.Template) {
|
|
208
|
+
this.visitAll(element.variables);
|
|
209
|
+
}
|
|
182
210
|
// If we get here and have not found a candidate node on the element itself, proceed with
|
|
183
211
|
// looking for a more specific node on the element children.
|
|
184
|
-
if (
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
TemplateTargetVisitor.prototype.visitTemplate = function (template) {
|
|
189
|
-
this.visitAll(template.attributes);
|
|
190
|
-
this.visitAll(template.inputs);
|
|
191
|
-
this.visitAll(template.outputs);
|
|
192
|
-
this.visitAll(template.templateAttrs);
|
|
193
|
-
this.visitAll(template.references);
|
|
194
|
-
this.visitAll(template.variables);
|
|
195
|
-
var last = this.path[this.path.length - 1];
|
|
196
|
-
// If we get here and have not found a candidate node on the template itself, proceed with
|
|
197
|
-
// looking for a more specific node on the template children.
|
|
198
|
-
if (last === template) {
|
|
199
|
-
this.visitAll(template.children);
|
|
212
|
+
if (this.path[this.path.length - 1] !== element) {
|
|
213
|
+
return;
|
|
200
214
|
}
|
|
215
|
+
this.visitAll(element.children);
|
|
201
216
|
};
|
|
202
217
|
TemplateTargetVisitor.prototype.visitContent = function (content) {
|
|
203
218
|
t.visitAll(this, content.attributes);
|
|
@@ -216,16 +231,6 @@
|
|
|
216
231
|
visitor.visit(attribute.value, this.path);
|
|
217
232
|
};
|
|
218
233
|
TemplateTargetVisitor.prototype.visitBoundEvent = function (event) {
|
|
219
|
-
var isTwoWayBinding = this.path.some(function (n) { return n instanceof t.BoundAttribute && event.name === n.name + 'Change'; });
|
|
220
|
-
if (isTwoWayBinding) {
|
|
221
|
-
// For two-way binding aka banana-in-a-box, there are two matches:
|
|
222
|
-
// BoundAttribute and BoundEvent. Both have the same spans. We choose to
|
|
223
|
-
// return BoundAttribute because it matches the identifier name verbatim.
|
|
224
|
-
// TODO: For operations like go to definition, ideally we want to return
|
|
225
|
-
// both.
|
|
226
|
-
this.path.pop(); // remove bound event from the AST path
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
234
|
// An event binding with no value (e.g. `(event|)`) parses to a `BoundEvent` with a
|
|
230
235
|
// `LiteralPrimitive` handler with value `'ERROR'`, as opposed to a property binding with no
|
|
231
236
|
// value which has an `EmptyExpr` as its value. This is a synthetic node created by the binding
|
|
@@ -336,4 +341,4 @@
|
|
|
336
341
|
return result;
|
|
337
342
|
}
|
|
338
343
|
});
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVfdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGFuZ3VhZ2Utc2VydmljZS9pdnkvdGVtcGxhdGVfdGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCw4Q0FBK0Q7SUFDL0QsK0RBQWlFLENBQUUsdUJBQXVCO0lBQzFGLHdEQUEwRCxDQUFTLHFCQUFxQjtJQUV4Riw2REFBa0c7SUF1Q2xHOztPQUVHO0lBQ0gsSUFBWSxjQU9YO0lBUEQsV0FBWSxjQUFjO1FBQ3hCLHFFQUFhLENBQUE7UUFDYix5RUFBZSxDQUFBO1FBQ2YsaUZBQW1CLENBQUE7UUFDbkIsbUZBQW9CLENBQUE7UUFDcEIscUZBQXFCLENBQUE7UUFDckIseUZBQXVCLENBQUE7SUFDekIsQ0FBQyxFQVBXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBT3pCO0lBOENEOzs7T0FHRztJQUNILElBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksb0JBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5Rjs7Ozs7O09BTUc7SUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxRQUFrQixFQUFFLFFBQWdCO1FBQ3RFLElBQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEMsOEZBQThGO1FBQzlGLElBQUksT0FBTyxHQUFvQixJQUFJLENBQUM7UUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLElBQUksWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUM5QixPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNmLE1BQU07YUFDUDtTQUNGO1FBRUQsSUFBSSxNQUFNLEdBQXNCLElBQUksQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3BCLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoQztRQUVELGlFQUFpRTtRQUNqRSxJQUFJLGFBQXlCLENBQUM7UUFDOUIsSUFBSSxTQUFTLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUM5QixhQUFhLEdBQUc7Z0JBQ2QsSUFBSSxFQUFFLGNBQWMsQ0FBQyxhQUFhO2dCQUNsQyxJQUFJLEVBQUUsU0FBUzthQUNoQixDQUFDO1NBQ0g7YUFBTSxJQUFJLFNBQVMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ3pDLDBGQUEwRjtZQUMxRix3RkFBd0Y7WUFFeEYsOEZBQThGO1lBQzlGLElBQU0sU0FBUyxHQUNYLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDekYsSUFBSSxRQUFRLEdBQUcsU0FBUyxFQUFFO2dCQUN4QixzQ0FBc0M7Z0JBQ3RDLGFBQWEsR0FBRztvQkFDZCxJQUFJLEVBQUUsY0FBYyxDQUFDLG9CQUFvQjtvQkFDekMsSUFBSSxFQUFFLFNBQVM7aUJBQ2hCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxhQUFhLEdBQUc7b0JBQ2QsSUFBSSxFQUFFLGNBQWMsQ0FBQyxtQkFBbUI7b0JBQ3hDLElBQUksRUFBRSxTQUFTO2lCQUNoQixDQUFDO2FBQ0g7U0FDRjthQUFNLElBQ0gsQ0FBQyxTQUFTLFlBQVksQ0FBQyxDQUFDLGNBQWMsSUFBSSxTQUFTLFlBQVksQ0FBQyxDQUFDLFVBQVU7WUFDMUUsU0FBUyxZQUFZLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDdEMsU0FBUyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDbkMsSUFBSSxnQkFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pDLGFBQWEsR0FBRztvQkFDZCxJQUFJLEVBQUUsY0FBYyxDQUFDLHFCQUFxQjtvQkFDMUMsSUFBSSxFQUFFLFNBQVM7aUJBQ2hCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxhQUFhLEdBQUc7b0JBQ2QsSUFBSSxFQUFFLGNBQWMsQ0FBQyx1QkFBdUI7b0JBQzVDLElBQUksRUFBRSxTQUFTO2lCQUNoQixDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsYUFBYSxHQUFHO2dCQUNkLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZTtnQkFDcEMsSUFBSSxFQUFFLFNBQVM7YUFDaEIsQ0FBQztTQUNIO1FBRUQsT0FBTyxFQUFDLFFBQVEsVUFBQSxFQUFFLGFBQWEsZUFBQSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFBLEVBQUMsQ0FBQztJQUM5RCxDQUFDO0lBdkVELGtEQXVFQztJQUVEOzs7O09BSUc7SUFDSDtRQTBCRSxnREFBZ0Q7UUFDaEQsK0JBQXFDLFFBQWdCO1lBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7WUExQnJELDZFQUE2RTtZQUM3RSxrRUFBa0U7WUFDekQsU0FBSSxHQUF3QixFQUFFLENBQUM7UUF3QmdCLENBQUM7UUF0QmxELG1DQUFhLEdBQXBCLFVBQXFCLFFBQWtCLEVBQUUsUUFBZ0I7WUFDdkQsSUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BCLElBQUEsSUFBSSxHQUFJLE9BQU8sS0FBWCxDQUFZO1lBRXZCLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLEtBQUssa0JBQWtCLEVBQXhCLENBQXdCLENBQUMsQ0FBQztZQUM5RCxJQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRCxJQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLEtBQUssa0JBQWtCLEVBQXhCLENBQXdCLENBQUMsQ0FBQztZQUNqRixJQUFJLCtCQUErQjtnQkFDL0IsQ0FBQyxTQUFTLFlBQVksQ0FBQyxDQUFDLFFBQVEsSUFBSSxTQUFTLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN2RSxrRkFBa0Y7Z0JBQ2xGLDhGQUE4RjtnQkFDOUYsMEZBQTBGO2dCQUMxRiw2RkFBNkY7Z0JBQzdGLDZGQUE2RjtnQkFDN0Ysd0JBQXdCO2dCQUN4QixPQUFPLEVBQUUsQ0FBQzthQUNYO1lBQ0QsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUtELHFDQUFLLEdBQUwsVUFBTSxJQUFZO1lBQ2hCLElBQU0sSUFBSSxHQUEyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksSUFBSSxJQUFJLHFDQUE2QixDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3hGLHFFQUFxRTtnQkFDckUsb0VBQW9FO2dCQUNwRSx5RUFBeUU7Z0JBQ3pFLG1FQUFtRTtnQkFDbkUsMkVBQTJFO2dCQUMzRSxPQUFPO2FBQ1I7WUFDSyxJQUFBLEtBQWUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQTFDLEtBQUssV0FBQSxFQUFFLEdBQUcsU0FBZ0MsQ0FBQztZQUNsRCxJQUFJLENBQUMsZ0JBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUMsS0FBSyxPQUFBLEVBQUUsR0FBRyxLQUFBLEVBQUMsQ0FBQyxFQUFFO2dCQUMxQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLHFDQUE2QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDakYseUVBQXlFO2dCQUN6RSwwQkFBMEI7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDcEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbEI7UUFDSCxDQUFDO1FBRUQsNENBQVksR0FBWixVQUFhLE9BQWtCO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQU0sSUFBSSxHQUEyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLHlGQUF5RjtZQUN6Riw0REFBNEQ7WUFDNUQsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNqQztRQUNILENBQUM7UUFFRCw2Q0FBYSxHQUFiLFVBQWMsUUFBb0I7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsSUFBTSxJQUFJLEdBQTJCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckUsMEZBQTBGO1lBQzFGLDZEQUE2RDtZQUM3RCxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2xDO1FBQ0gsQ0FBQztRQUVELDRDQUFZLEdBQVosVUFBYSxPQUFrQjtZQUM3QixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELDZDQUFhLEdBQWIsVUFBYyxRQUFvQjtZQUNoQyxzREFBc0Q7UUFDeEQsQ0FBQztRQUVELDhDQUFjLEdBQWQsVUFBZSxTQUFzQjtZQUNuQyx1REFBdUQ7UUFDekQsQ0FBQztRQUVELGtEQUFrQixHQUFsQixVQUFtQixTQUEwQjtZQUMzQyw0REFBNEQ7UUFDOUQsQ0FBQztRQUVELG1EQUFtQixHQUFuQixVQUFvQixTQUEyQjtZQUM3QyxJQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCwrQ0FBZSxHQUFmLFVBQWdCLEtBQW1CO1lBQ2pDLElBQU0sZUFBZSxHQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLEVBQWpFLENBQWlFLENBQUMsQ0FBQztZQUMzRixJQUFJLGVBQWUsRUFBRTtnQkFDbkIsa0VBQWtFO2dCQUNsRSx3RUFBd0U7Z0JBQ3hFLHlFQUF5RTtnQkFDekUsd0VBQXdFO2dCQUN4RSxRQUFRO2dCQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBRSx1Q0FBdUM7Z0JBQ3pELE9BQU87YUFDUjtZQUVELG1GQUFtRjtZQUNuRiw0RkFBNEY7WUFDNUYsK0ZBQStGO1lBQy9GLDZFQUE2RTtZQUM3RSxFQUFFO1lBQ0Ysc0VBQXNFO1lBQ3RFLElBQUksT0FBTyxHQUFVLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDbkMsSUFBSSxPQUFPLFlBQVksQ0FBQyxDQUFDLGFBQWEsRUFBRTtnQkFDdEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7YUFDdkI7WUFDRCxJQUFJLE9BQU8sWUFBWSxDQUFDLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7Z0JBQ3RFLE9BQU87YUFDUjtZQUVELElBQU0sT0FBTyxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELHlDQUFTLEdBQVQsVUFBVSxJQUFZO1lBQ3BCLGtEQUFrRDtRQUNwRCxDQUFDO1FBRUQsOENBQWMsR0FBZCxVQUFlLElBQWlCO1lBQzlCLElBQU0sT0FBTyxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELHdDQUFRLEdBQVIsVUFBUyxHQUFVOzs7Z0JBQ2pCLEtBQXdCLElBQUEsS0FBQSxpQkFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQSxnQkFBQSw0QkFBRTtvQkFBNUMsSUFBTSxTQUFTLFdBQUE7b0JBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZCOzs7Ozs7Ozs7O2dCQUNELEtBQThCLElBQUEsS0FBQSxpQkFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQSxnQkFBQSw0QkFBRTtvQkFBMUQsSUFBTSxlQUFlLFdBQUE7b0JBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7aUJBQzdCOzs7Ozs7Ozs7UUFDSCxDQUFDO1FBRUQsd0NBQVEsR0FBUixVQUFTLEtBQWU7OztnQkFDdEIsS0FBbUIsSUFBQSxVQUFBLGlCQUFBLEtBQUssQ0FBQSw0QkFBQSwrQ0FBRTtvQkFBckIsSUFBTSxJQUFJLGtCQUFBO29CQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2xCOzs7Ozs7Ozs7UUFDSCxDQUFDO1FBQ0gsNEJBQUM7SUFBRCxDQUFDLEFBN0pELElBNkpDO0lBRUQ7UUFBZ0MsNkNBQXFCO1FBQ25ELGdEQUFnRDtRQUNoRCwyQkFBNkIsUUFBZ0I7WUFBN0MsWUFDRSxpQkFBTyxTQUNSO1lBRjRCLGNBQVEsR0FBUixRQUFRLENBQVE7O1FBRTdDLENBQUM7UUFFRCxpQ0FBSyxHQUFMLFVBQU0sSUFBVyxFQUFFLElBQXlCO1lBQzFDLElBQUksSUFBSSxZQUFZLENBQUMsQ0FBQyxhQUFhLEVBQUU7Z0JBQ25DLHdFQUF3RTtnQkFDeEUsa0VBQWtFO2dCQUNsRSx5REFBeUQ7Z0JBQ3pELElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2pCO1lBQ0QsNEVBQTRFO1lBQzVFLGtCQUFrQjtZQUNsQixJQUFJLGdCQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDckYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDeEI7UUFDSCxDQUFDO1FBQ0gsd0JBQUM7SUFBRCxDQUFDLEFBcEJELENBQWdDLENBQUMsQ0FBQyxtQkFBbUIsR0FvQnBEO0lBRUQsU0FBUyxzQkFBc0IsQ0FBQyxHQUFXO1FBQ3pDLElBQU0sTUFBTSxHQUFHO1lBQ2IsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDbEMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU07U0FDL0IsQ0FBQztRQUNGLDBFQUEwRTtRQUMxRSwwRUFBMEU7UUFDMUUsNERBQTREO1FBQzVELHdFQUF3RTtRQUN4RSxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsT0FBTyxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRTtZQUNoRixNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztTQUMzQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtQYXJzZVNwYW4sIFRtcGxBc3RCb3VuZEV2ZW50fSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyBlIGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9leHByZXNzaW9uX3BhcnNlci9hc3QnOyAgLy8gZSBmb3IgZXhwcmVzc2lvbiBBU1RcbmltcG9ydCAqIGFzIHQgZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL3JlbmRlcjMvcjNfYXN0JzsgICAgICAgICAvLyB0IGZvciB0ZW1wbGF0ZSBBU1RcblxuaW1wb3J0IHtpc1RlbXBsYXRlTm9kZSwgaXNUZW1wbGF0ZU5vZGVXaXRoS2V5QW5kVmFsdWUsIGlzV2l0aGluLCBpc1dpdGhpbktleVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBDb250ZXh0dWFsIGluZm9ybWF0aW9uIGZvciBhIHRhcmdldCBwb3NpdGlvbiB3aXRoaW4gdGhlIHRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRhcmdldCBwb3NpdGlvbiB3aXRoaW4gdGhlIHRlbXBsYXRlLlxuICAgKi9cbiAgcG9zaXRpb246IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIG5vZGUgKG9yIEFTVCBleHByZXNzaW9uKSBjbG9zZXN0IHRvIHRoZSBzZWFyY2ggcG9zaXRpb24uXG4gICAqL1xuICBub2RlSW5Db250ZXh0OiBUYXJnZXROb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgYHQuVGVtcGxhdGVgIHdoaWNoIGNvbnRhaW5zIHRoZSBmb3VuZCBub2RlIG9yIGV4cHJlc3Npb24gKG9yIGBudWxsYCBpZiBpbiB0aGUgcm9vdFxuICAgKiB0ZW1wbGF0ZSkuXG4gICAqL1xuICB0ZW1wbGF0ZTogdC5UZW1wbGF0ZXxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1tZWRpYXRlIHBhcmVudCBub2RlIG9mIHRoZSB0YXJnZXRlZCBub2RlLlxuICAgKi9cbiAgcGFyZW50OiB0Lk5vZGV8ZS5BU1R8bnVsbDtcbn1cblxuLyoqXG4gKiBBIG5vZGUgdGFyZ2V0ZWQgYXQgYSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgdGVtcGxhdGUsIGluY2x1ZGluZyBwb3RlbnRpYWwgY29udGV4dHVhbCBpbmZvcm1hdGlvblxuICogYWJvdXQgdGhlIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgbm9kZSBiZWluZyByZWZlcmVuY2VkLlxuICpcbiAqIFNvbWUgbm9kZXMgaGF2ZSBtdWx0aXBsZSBpbnRlcmlvciBjb250ZXh0cy4gRm9yIGV4YW1wbGUsIGB0LkVsZW1lbnRgIG5vZGVzIGhhdmUgYm90aCBhIHRhZyBuYW1lXG4gKiBhcyB3ZWxsIGFzIGEgYm9keSwgYW5kIGEgZ2l2ZW4gcG9zaXRpb24gZGVmaW5pdGl2ZWx5IHBvaW50cyB0byBvbmUgb3IgdGhlIG90aGVyLiBgVGFyZ2V0Tm9kZWBcbiAqIGNhcHR1cmVzIHRoZSBub2RlIGl0c2VsZiwgYXMgd2VsbCBhcyB0aGlzIGFkZGl0aW9uYWwgY29udGV4dHVhbCBkaXNhbWJpZ3VhdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgVGFyZ2V0Tm9kZSA9IFJhd0V4cHJlc3Npb258UmF3VGVtcGxhdGVOb2RlfEVsZW1lbnRJbkJvZHlDb250ZXh0fEVsZW1lbnRJblRhZ0NvbnRleHR8XG4gICAgQXR0cmlidXRlSW5LZXlDb250ZXh0fEF0dHJpYnV0ZUluVmFsdWVDb250ZXh0O1xuXG4vKipcbiAqIERpZmZlcmVudGlhdGVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mIGBUYXJnZXROb2RlYHMuXG4gKi9cbmV4cG9ydCBlbnVtIFRhcmdldE5vZGVLaW5kIHtcbiAgUmF3RXhwcmVzc2lvbixcbiAgUmF3VGVtcGxhdGVOb2RlLFxuICBFbGVtZW50SW5UYWdDb250ZXh0LFxuICBFbGVtZW50SW5Cb2R5Q29udGV4dCxcbiAgQXR0cmlidXRlSW5LZXlDb250ZXh0LFxuICBBdHRyaWJ1dGVJblZhbHVlQ29udGV4dCxcbn1cblxuLyoqXG4gKiBBbiBgZS5BU1RgIGV4cHJlc3Npb24gdGhhdCdzIHRhcmdldGVkIGF0IGEgZ2l2ZW4gcG9zaXRpb24sIHdpdGggbm8gYWRkaXRpb25hbCBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd0V4cHJlc3Npb24ge1xuICBraW5kOiBUYXJnZXROb2RlS2luZC5SYXdFeHByZXNzaW9uO1xuICBub2RlOiBlLkFTVDtcbn1cblxuLyoqXG4gKiBBIGB0Lk5vZGVgIHRlbXBsYXRlIG5vZGUgdGhhdCdzIHRhcmdldGVkIGF0IGEgZ2l2ZW4gcG9zaXRpb24sIHdpdGggbm8gYWRkaXRpb25hbCBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd1RlbXBsYXRlTm9kZSB7XG4gIGtpbmQ6IFRhcmdldE5vZGVLaW5kLlJhd1RlbXBsYXRlTm9kZTtcbiAgbm9kZTogdC5Ob2RlO1xufVxuXG4vKipcbiAqIEEgYHQuRWxlbWVudGAgKG9yIGB0LlRlbXBsYXRlYCkgZWxlbWVudCBub2RlIHRoYXQncyB0YXJnZXRlZCwgd2hlcmUgdGhlIGdpdmVuIHBvc2l0aW9uIGlzIHdpdGhpblxuICogdGhlIHRhZyBuYW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRJblRhZ0NvbnRleHQge1xuICBraW5kOiBUYXJnZXROb2RlS2luZC5FbGVtZW50SW5UYWdDb250ZXh0O1xuICBub2RlOiB0LkVsZW1lbnR8dC5UZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBBIGB0LkVsZW1lbnRgIChvciBgdC5UZW1wbGF0ZWApIGVsZW1lbnQgbm9kZSB0aGF0J3MgdGFyZ2V0ZWQsIHdoZXJlIHRoZSBnaXZlbiBwb3NpdGlvbiBpcyB3aXRoaW5cbiAqIHRoZSBlbGVtZW50IGJvZHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudEluQm9keUNvbnRleHQge1xuICBraW5kOiBUYXJnZXROb2RlS2luZC5FbGVtZW50SW5Cb2R5Q29udGV4dDtcbiAgbm9kZTogdC5FbGVtZW50fHQuVGVtcGxhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlSW5LZXlDb250ZXh0IHtcbiAga2luZDogVGFyZ2V0Tm9kZUtpbmQuQXR0cmlidXRlSW5LZXlDb250ZXh0O1xuICBub2RlOiB0LlRleHRBdHRyaWJ1dGV8dC5Cb3VuZEF0dHJpYnV0ZXx0LkJvdW5kRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlSW5WYWx1ZUNvbnRleHQge1xuICBraW5kOiBUYXJnZXROb2RlS2luZC5BdHRyaWJ1dGVJblZhbHVlQ29udGV4dDtcbiAgbm9kZTogdC5UZXh0QXR0cmlidXRlfHQuQm91bmRBdHRyaWJ1dGV8dC5Cb3VuZEV2ZW50O1xufVxuXG4vKipcbiAqIFRoaXMgc3BlY2lhbCBtYXJrZXIgaXMgYWRkZWQgdG8gdGhlIHBhdGggd2hlbiB0aGUgY3Vyc29yIGlzIHdpdGhpbiB0aGUgc291cmNlU3BhbiBidXQgbm90IHRoZSBrZXlcbiAqIG9yIHZhbHVlIHNwYW4gb2YgYSBub2RlIHdpdGgga2V5L3ZhbHVlIHNwYW5zLlxuICovXG5jb25zdCBPVVRTSURFX0tfVl9NQVJLRVIgPSBuZXcgZS5BU1QobmV3IFBhcnNlU3BhbigtMSwgLTEpLCBuZXcgZS5BYnNvbHV0ZVNvdXJjZVNwYW4oLTEsIC0xKSk7XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0ZW1wbGF0ZSBBU1Qgbm9kZSBvciBleHByZXNzaW9uIEFTVCBub2RlIHRoYXQgbW9zdCBhY2N1cmF0ZWx5XG4gKiByZXByZXNlbnRzIHRoZSBub2RlIGF0IHRoZSBzcGVjaWZpZWQgY3Vyc29yIGBwb3NpdGlvbmAuXG4gKlxuICogQHBhcmFtIHRlbXBsYXRlIEFTVCB0cmVlIG9mIHRoZSB0ZW1wbGF0ZVxuICogQHBhcmFtIHBvc2l0aW9uIHRhcmdldCBjdXJzb3IgcG9zaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldEF0UG9zaXRpb24odGVtcGxhdGU6IHQuTm9kZVtdLCBwb3NpdGlvbjogbnVtYmVyKTogVGVtcGxhdGVUYXJnZXR8bnVsbCB7XG4gIGNvbnN0IHBhdGggPSBUZW1wbGF0ZVRhcmdldFZpc2l0b3IudmlzaXRUZW1wbGF0ZSh0ZW1wbGF0ZSwgcG9zaXRpb24pO1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgLy8gV2FsayB1cCB0aGUgcmVzdWx0IG5vZGVzIHRvIGZpbmQgdGhlIG5lYXJlc3QgYHQuVGVtcGxhdGVgIHdoaWNoIGNvbnRhaW5zIHRoZSB0YXJnZXRlZCBub2RlLlxuICBsZXQgY29udGV4dDogdC5UZW1wbGF0ZXxudWxsID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBub2RlID0gcGF0aFtpXTtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIHQuVGVtcGxhdGUpIHtcbiAgICAgIGNvbnRleHQgPSBub2RlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgbGV0IHBhcmVudDogdC5Ob2RlfGUuQVNUfG51bGwgPSBudWxsO1xuICBpZiAocGF0aC5sZW5ndGggPj0gMikge1xuICAgIHBhcmVudCA9IHBhdGhbcGF0aC5sZW5ndGggLSAyXTtcbiAgfVxuXG4gIC8vIEdpdmVuIHRoZSBjYW5kaWRhdGUgbm9kZSwgZGV0ZXJtaW5lIHRoZSBmdWxsIHRhcmdldGVkIGNvbnRleHQuXG4gIGxldCBub2RlSW5Db250ZXh0OiBUYXJnZXROb2RlO1xuICBpZiAoY2FuZGlkYXRlIGluc3RhbmNlb2YgZS5BU1QpIHtcbiAgICBub2RlSW5Db250ZXh0ID0ge1xuICAgICAga2luZDogVGFyZ2V0Tm9kZUtpbmQuUmF3RXhwcmVzc2lvbixcbiAgICAgIG5vZGU6IGNhbmRpZGF0ZSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKGNhbmRpZGF0ZSBpbnN0YW5jZW9mIHQuRWxlbWVudCkge1xuICAgIC8vIEVsZW1lbnRzIGhhdmUgdHdvIGNvbnRleHRzOiB0aGUgdGFnIGNvbnRleHQgKHBvc2l0aW9uIGlzIHdpdGhpbiB0aGUgZWxlbWVudCB0YWcpIG9yIHRoZVxuICAgIC8vIGVsZW1lbnQgYm9keSBjb250ZXh0IChwb3NpdGlvbiBpcyBvdXRzaWRlIG9mIHRoZSB0YWcgbmFtZSwgYnV0IHN0aWxsIGluIHRoZSBlbGVtZW50KS5cblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZW5kIG9mIHRoZSBlbGVtZW50IHRhZyBuYW1lLiBBbnkgcG9zaXRpb24gYmV5b25kIHRoaXMgaXMgaW4gdGhlIGVsZW1lbnQgYm9keS5cbiAgICBjb25zdCB0YWdFbmRQb3MgPVxuICAgICAgICBjYW5kaWRhdGUuc291cmNlU3Bhbi5zdGFydC5vZmZzZXQgKyAxIC8qICc8JyBlbGVtZW50IG9wZW4gKi8gKyBjYW5kaWRhdGUubmFtZS5sZW5ndGg7XG4gICAgaWYgKHBvc2l0aW9uID4gdGFnRW5kUG9zKSB7XG4gICAgICAvLyBQb3NpdGlvbiBpcyB3aXRoaW4gdGhlIGVsZW1lbnQgYm9keVxuICAgICAgbm9kZUluQ29udGV4dCA9IHtcbiAgICAgICAga2luZDogVGFyZ2V0Tm9kZUtpbmQuRWxlbWVudEluQm9keUNvbnRleHQsXG4gICAgICAgIG5vZGU6IGNhbmRpZGF0ZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVJbkNvbnRleHQgPSB7XG4gICAgICAgIGtpbmQ6IFRhcmdldE5vZGVLaW5kLkVsZW1lbnRJblRhZ0NvbnRleHQsXG4gICAgICAgIG5vZGU6IGNhbmRpZGF0ZSxcbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgICAgKGNhbmRpZGF0ZSBpbnN0YW5jZW9mIHQuQm91bmRBdHRyaWJ1dGUgfHwgY2FuZGlkYXRlIGluc3RhbmNlb2YgdC5Cb3VuZEV2ZW50IHx8XG4gICAgICAgY2FuZGlkYXRlIGluc3RhbmNlb2YgdC5UZXh0QXR0cmlidXRlKSAmJlxuICAgICAgY2FuZGlkYXRlLmtleVNwYW4gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChpc1dpdGhpbihwb3NpdGlvbiwgY2FuZGlkYXRlLmtleVNwYW4pKSB7XG4gICAgICBub2RlSW5Db250ZXh0ID0ge1xuICAgICAgICBraW5kOiBUYXJnZXROb2RlS2luZC5BdHRyaWJ1dGVJbktleUNvbnRleHQsXG4gICAgICAgIG5vZGU6IGNhbmRpZGF0ZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVJbkNvbnRleHQgPSB7XG4gICAgICAgIGtpbmQ6IFRhcmdldE5vZGVLaW5kLkF0dHJpYnV0ZUluVmFsdWVDb250ZXh0LFxuICAgICAgICBub2RlOiBjYW5kaWRhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlSW5Db250ZXh0ID0ge1xuICAgICAga2luZDogVGFyZ2V0Tm9kZUtpbmQuUmF3VGVtcGxhdGVOb2RlLFxuICAgICAgbm9kZTogY2FuZGlkYXRlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge3Bvc2l0aW9uLCBub2RlSW5Db250ZXh0LCB0ZW1wbGF0ZTogY29udGV4dCwgcGFyZW50fTtcbn1cblxuLyoqXG4gKiBWaXNpdG9yIHdoaWNoLCBnaXZlbiBhIHBvc2l0aW9uIGFuZCBhIHRlbXBsYXRlLCBpZGVudGlmaWVzIHRoZSBub2RlIHdpdGhpbiB0aGUgdGVtcGxhdGUgYXQgdGhhdFxuICogcG9zaXRpb24sIGFzIHdlbGwgYXMgcmVjb3JkcyB0aGUgcGF0aCBvZiBpbmNyZWFzaW5nbHkgbmVzdGVkIG5vZGVzIHRoYXQgd2VyZSB0cmF2ZXJzZWQgdG8gcmVhY2hcbiAqIHRoYXQgcG9zaXRpb24uXG4gKi9cbmNsYXNzIFRlbXBsYXRlVGFyZ2V0VmlzaXRvciBpbXBsZW1lbnRzIHQuVmlzaXRvciB7XG4gIC8vIFdlIG5lZWQgdG8ga2VlcCBhIHBhdGggaW5zdGVhZCBvZiB0aGUgbGFzdCBub2RlIGJlY2F1c2Ugd2UgbWlnaHQgbmVlZCBtb3JlXG4gIC8vIGNvbnRleHQgZm9yIHRoZSBsYXN0IG5vZGUsIGZvciBleGFtcGxlIHdoYXQgaXMgdGhlIHBhcmVudCBub2RlP1xuICByZWFkb25seSBwYXRoOiBBcnJheTx0Lk5vZGV8ZS5BU1Q+ID0gW107XG5cbiAgc3RhdGljIHZpc2l0VGVtcGxhdGUodGVtcGxhdGU6IHQuTm9kZVtdLCBwb3NpdGlvbjogbnVtYmVyKTogQXJyYXk8dC5Ob2RlfGUuQVNUPiB7XG4gICAgY29uc3QgdmlzaXRvciA9IG5ldyBUZW1wbGF0ZVRhcmdldFZpc2l0b3IocG9zaXRpb24pO1xuICAgIHZpc2l0b3IudmlzaXRBbGwodGVtcGxhdGUpO1xuICAgIGNvbnN0IHtwYXRofSA9IHZpc2l0b3I7XG5cbiAgICBjb25zdCBzdHJpY3RQYXRoID0gcGF0aC5maWx0ZXIodiA9PiB2ICE9PSBPVVRTSURFX0tfVl9NQVJLRVIpO1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHN0cmljdFBhdGhbc3RyaWN0UGF0aC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBtYXRjaGVkQVNvdXJjZVNwYW5CdXROb3RBS3ZTcGFuID0gcGF0aC5zb21lKHYgPT4gdiA9PT0gT1VUU0lERV9LX1ZfTUFSS0VSKTtcbiAgICBpZiAobWF0Y2hlZEFTb3VyY2VTcGFuQnV0Tm90QUt2U3BhbiAmJlxuICAgICAgICAoY2FuZGlkYXRlIGluc3RhbmNlb2YgdC5UZW1wbGF0ZSB8fCBjYW5kaWRhdGUgaW5zdGFuY2VvZiB0LkVsZW1lbnQpKSB7XG4gICAgICAvLyBUZW1wbGF0ZSBub2RlcyB3aXRoIGtleSBhbmQgdmFsdWUgc3BhbnMgYXJlIGFsd2F5cyBkZWZpbmVkIG9uIGEgYHQuVGVtcGxhdGVgIG9yXG4gICAgICAvLyBgdC5FbGVtZW50YC4gSWYgd2UgZm91bmQgYSBub2RlIG9uIGEgdGVtcGxhdGUgd2l0aCBhIGBzb3VyY2VTcGFuYCB0aGF0IGluY2x1ZGVzIHRoZSBjdXJzb3IsXG4gICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGFyZSBvdXRzaWRlIHRoZSBrL3Ygc3BhbnMgKGkuZS4gaW4tYmV0d2VlbiB0aGVtKS4gSWYgdGhpcyBpcyB0aGVcbiAgICAgIC8vIGNhc2UgYW5kIHdlIGRvIG5vdCBoYXZlIGFueSBvdGhlciBjYW5kaWRhdGUgbWF0Y2hlcyBvbiB0aGUgYHQuRWxlbWVudGAgb3IgYHQuVGVtcGxhdGVgLCB3ZVxuICAgICAgLy8gd2FudCB0byByZXR1cm4gbm8gcmVzdWx0cy4gT3RoZXJ3aXNlLCB0aGUgYHQuRWxlbWVudGAvYHQuVGVtcGxhdGVgIHJlc3VsdCBpcyBpbmNvcnJlY3QgZm9yXG4gICAgICAvLyB0aGF0IGN1cnNvciBwb3NpdGlvbi5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmljdFBhdGg7XG4gIH1cblxuICAvLyBQb3NpdGlvbiBtdXN0IGJlIGFic29sdXRlIGluIHRoZSBzb3VyY2UgZmlsZS5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBvc2l0aW9uOiBudW1iZXIpIHt9XG5cbiAgdmlzaXQobm9kZTogdC5Ob2RlKSB7XG4gICAgY29uc3QgbGFzdDogdC5Ob2RlfGUuQVNUfHVuZGVmaW5lZCA9IHRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoIC0gMV07XG4gICAgaWYgKGxhc3QgJiYgaXNUZW1wbGF0ZU5vZGVXaXRoS2V5QW5kVmFsdWUobGFzdCkgJiYgaXNXaXRoaW4odGhpcy5wb3NpdGlvbiwgbGFzdC5rZXlTcGFuKSkge1xuICAgICAgLy8gV2UndmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoYXQgd2UgYXJlIHdpdGhpbiBhIGBrZXlTcGFuYCBvZiBhIG5vZGUuXG4gICAgICAvLyBXZSBzaG91bGQgc3RvcCBwcm9jZXNzaW5nIG5vZGVzIGF0IHRoaXMgcG9pbnQgdG8gcHJldmVudCBtYXRjaGluZ1xuICAgICAgLy8gYW55IG90aGVyIG5vZGVzLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgZW5kIHNwYW4gb2YgYSBkaWZmZXJlbnQgbm9kZVxuICAgICAgLy8gdG91Y2hlcyB0aGUgc3RhcnQgb2YgdGhlIGtleVNwYW4gZm9yIHRoZSBjYW5kaWRhdGUgbm9kZS4gQmVjYXVzZVxuICAgICAgLy8gb3VyIGBpc1dpdGhpbmAgbG9naWMgaXMgaW5jbHVzaXZlIG9uIGJvdGggZW5kcywgd2UgY2FuIG1hdGNoIGJvdGggbm9kZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IGdldFNwYW5JbmNsdWRpbmdFbmRUYWcobm9kZSk7XG4gICAgaWYgKCFpc1dpdGhpbih0aGlzLnBvc2l0aW9uLCB7c3RhcnQsIGVuZH0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzVGVtcGxhdGVOb2RlV2l0aEtleUFuZFZhbHVlKG5vZGUpICYmICFpc1dpdGhpbktleVZhbHVlKHRoaXMucG9zaXRpb24sIG5vZGUpKSB7XG4gICAgICAvLyBJZiBjdXJzb3IgaXMgd2l0aGluIHNvdXJjZSBzcGFuIGJ1dCBub3Qgd2l0aGluIGtleSBzcGFuIG9yIHZhbHVlIHNwYW4sXG4gICAgICAvLyBkbyBub3QgcmV0dXJuIHRoZSBub2RlLlxuICAgICAgdGhpcy5wYXRoLnB1c2goT1VUU0lERV9LX1ZfTUFSS0VSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXRoLnB1c2gobm9kZSk7XG4gICAgICBub2RlLnZpc2l0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0RWxlbWVudChlbGVtZW50OiB0LkVsZW1lbnQpIHtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuYXR0cmlidXRlcyk7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LmlucHV0cyk7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50Lm91dHB1dHMpO1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5yZWZlcmVuY2VzKTtcbiAgICBjb25zdCBsYXN0OiB0Lk5vZGV8ZS5BU1R8dW5kZWZpbmVkID0gdGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGggLSAxXTtcbiAgICAvLyBJZiB3ZSBnZXQgaGVyZSBhbmQgaGF2ZSBub3QgZm91bmQgYSBjYW5kaWRhdGUgbm9kZSBvbiB0aGUgZWxlbWVudCBpdHNlbGYsIHByb2NlZWQgd2l0aFxuICAgIC8vIGxvb2tpbmcgZm9yIGEgbW9yZSBzcGVjaWZpYyBub2RlIG9uIHRoZSBlbGVtZW50IGNoaWxkcmVuLlxuICAgIGlmIChsYXN0ID09PSBlbGVtZW50KSB7XG4gICAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0VGVtcGxhdGUodGVtcGxhdGU6IHQuVGVtcGxhdGUpIHtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLmF0dHJpYnV0ZXMpO1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUuaW5wdXRzKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLm91dHB1dHMpO1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUudGVtcGxhdGVBdHRycyk7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS5yZWZlcmVuY2VzKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLnZhcmlhYmxlcyk7XG4gICAgY29uc3QgbGFzdDogdC5Ob2RlfGUuQVNUfHVuZGVmaW5lZCA9IHRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoIC0gMV07XG4gICAgLy8gSWYgd2UgZ2V0IGhlcmUgYW5kIGhhdmUgbm90IGZvdW5kIGEgY2FuZGlkYXRlIG5vZGUgb24gdGhlIHRlbXBsYXRlIGl0c2VsZiwgcHJvY2VlZCB3aXRoXG4gICAgLy8gbG9va2luZyBmb3IgYSBtb3JlIHNwZWNpZmljIG5vZGUgb24gdGhlIHRlbXBsYXRlIGNoaWxkcmVuLlxuICAgIGlmIChsYXN0ID09PSB0ZW1wbGF0ZSkge1xuICAgICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgdmlzaXRDb250ZW50KGNvbnRlbnQ6IHQuQ29udGVudCkge1xuICAgIHQudmlzaXRBbGwodGhpcywgY29udGVudC5hdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHZpc2l0VmFyaWFibGUodmFyaWFibGU6IHQuVmFyaWFibGUpIHtcbiAgICAvLyBWYXJpYWJsZSBoYXMgbm8gdGVtcGxhdGUgbm9kZXMgb3IgZXhwcmVzc2lvbiBub2Rlcy5cbiAgfVxuXG4gIHZpc2l0UmVmZXJlbmNlKHJlZmVyZW5jZTogdC5SZWZlcmVuY2UpIHtcbiAgICAvLyBSZWZlcmVuY2UgaGFzIG5vIHRlbXBsYXRlIG5vZGVzIG9yIGV4cHJlc3Npb24gbm9kZXMuXG4gIH1cblxuICB2aXNpdFRleHRBdHRyaWJ1dGUoYXR0cmlidXRlOiB0LlRleHRBdHRyaWJ1dGUpIHtcbiAgICAvLyBUZXh0IGF0dHJpYnV0ZSBoYXMgbm8gdGVtcGxhdGUgbm9kZXMgb3IgZXhwcmVzc2lvbiBub2Rlcy5cbiAgfVxuXG4gIHZpc2l0Qm91bmRBdHRyaWJ1dGUoYXR0cmlidXRlOiB0LkJvdW5kQXR0cmlidXRlKSB7XG4gICAgY29uc3QgdmlzaXRvciA9IG5ldyBFeHByZXNzaW9uVmlzaXRvcih0aGlzLnBvc2l0aW9uKTtcbiAgICB2aXNpdG9yLnZpc2l0KGF0dHJpYnV0ZS52YWx1ZSwgdGhpcy5wYXRoKTtcbiAgfVxuXG4gIHZpc2l0Qm91bmRFdmVudChldmVudDogdC5Cb3VuZEV2ZW50KSB7XG4gICAgY29uc3QgaXNUd29XYXlCaW5kaW5nID1cbiAgICAgICAgdGhpcy5wYXRoLnNvbWUobiA9PiBuIGluc3RhbmNlb2YgdC5Cb3VuZEF0dHJpYnV0ZSAmJiBldmVudC5uYW1lID09PSBuLm5hbWUgKyAnQ2hhbmdlJyk7XG4gICAgaWYgKGlzVHdvV2F5QmluZGluZykge1xuICAgICAgLy8gRm9yIHR3by13YXkgYmluZGluZyBha2EgYmFuYW5hLWluLWEtYm94LCB0aGVyZSBhcmUgdHdvIG1hdGNoZXM6XG4gICAgICAvLyBCb3VuZEF0dHJpYnV0ZSBhbmQgQm91bmRFdmVudC4gQm90aCBoYXZlIHRoZSBzYW1lIHNwYW5zLiBXZSBjaG9vc2UgdG9cbiAgICAgIC8vIHJldHVybiBCb3VuZEF0dHJpYnV0ZSBiZWNhdXNlIGl0IG1hdGNoZXMgdGhlIGlkZW50aWZpZXIgbmFtZSB2ZXJiYXRpbS5cbiAgICAgIC8vIFRPRE86IEZvciBvcGVyYXRpb25zIGxpa2UgZ28gdG8gZGVmaW5pdGlvbiwgaWRlYWxseSB3ZSB3YW50IHRvIHJldHVyblxuICAgICAgLy8gYm90aC5cbiAgICAgIHRoaXMucGF0aC5wb3AoKTsgIC8vIHJlbW92ZSBib3VuZCBldmVudCBmcm9tIHRoZSBBU1QgcGF0aFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFuIGV2ZW50IGJpbmRpbmcgd2l0aCBubyB2YWx1ZSAoZS5nLiBgKGV2ZW50fClgKSBwYXJzZXMgdG8gYSBgQm91bmRFdmVudGAgd2l0aCBhXG4gICAgLy8gYExpdGVyYWxQcmltaXRpdmVgIGhhbmRsZXIgd2l0aCB2YWx1ZSBgJ0VSUk9SJ2AsIGFzIG9wcG9zZWQgdG8gYSBwcm9wZXJ0eSBiaW5kaW5nIHdpdGggbm9cbiAgICAvLyB2YWx1ZSB3aGljaCBoYXMgYW4gYEVtcHR5RXhwcmAgYXMgaXRzIHZhbHVlLiBUaGlzIGlzIGEgc3ludGhldGljIG5vZGUgY3JlYXRlZCBieSB0aGUgYmluZGluZ1xuICAgIC8vIHBhcnNlciwgYW5kIGlzIG5vdCBzdWl0YWJsZSB0byB1c2UgZm9yIExhbmd1YWdlIFNlcnZpY2UgYW5hbHlzaXMuIFNraXAgaXQuXG4gICAgLy9cbiAgICAvLyBUT0RPKGFseGh1Yik6IG1vZGlmeSB0aGUgcGFyc2VyIHRvIGdlbmVyYXRlIGFuIGBFbXB0eUV4cHJgIGluc3RlYWQuXG4gICAgbGV0IGhhbmRsZXI6IGUuQVNUID0gZXZlbnQuaGFuZGxlcjtcbiAgICBpZiAoaGFuZGxlciBpbnN0YW5jZW9mIGUuQVNUV2l0aFNvdXJjZSkge1xuICAgICAgaGFuZGxlciA9IGhhbmRsZXIuYXN0O1xuICAgIH1cbiAgICBpZiAoaGFuZGxlciBpbnN0YW5jZW9mIGUuTGl0ZXJhbFByaW1pdGl2ZSAmJiBoYW5kbGVyLnZhbHVlID09PSAnRVJST1InKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmlzaXRvciA9IG5ldyBFeHByZXNzaW9uVmlzaXRvcih0aGlzLnBvc2l0aW9uKTtcbiAgICB2aXNpdG9yLnZpc2l0KGV2ZW50LmhhbmRsZXIsIHRoaXMucGF0aCk7XG4gIH1cblxuICB2aXNpdFRleHQodGV4dDogdC5UZXh0KSB7XG4gICAgLy8gVGV4dCBoYXMgbm8gdGVtcGxhdGUgbm9kZXMgb3IgZXhwcmVzc2lvbiBub2Rlcy5cbiAgfVxuXG4gIHZpc2l0Qm91bmRUZXh0KHRleHQ6IHQuQm91bmRUZXh0KSB7XG4gICAgY29uc3QgdmlzaXRvciA9IG5ldyBFeHByZXNzaW9uVmlzaXRvcih0aGlzLnBvc2l0aW9uKTtcbiAgICB2aXNpdG9yLnZpc2l0KHRleHQudmFsdWUsIHRoaXMucGF0aCk7XG4gIH1cblxuICB2aXNpdEljdShpY3U6IHQuSWN1KSB7XG4gICAgZm9yIChjb25zdCBib3VuZFRleHQgb2YgT2JqZWN0LnZhbHVlcyhpY3UudmFycykpIHtcbiAgICAgIHRoaXMudmlzaXQoYm91bmRUZXh0KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBib3VuZFRleHRPclRleHQgb2YgT2JqZWN0LnZhbHVlcyhpY3UucGxhY2Vob2xkZXJzKSkge1xuICAgICAgdGhpcy52aXNpdChib3VuZFRleHRPclRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0QWxsKG5vZGVzOiB0Lk5vZGVbXSkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgdGhpcy52aXNpdChub2RlKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgRXhwcmVzc2lvblZpc2l0b3IgZXh0ZW5kcyBlLlJlY3Vyc2l2ZUFzdFZpc2l0b3Ige1xuICAvLyBQb3NpdGlvbiBtdXN0IGJlIGFic29sdXRlIGluIHRoZSBzb3VyY2UgZmlsZS5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IGUuQVNULCBwYXRoOiBBcnJheTx0Lk5vZGV8ZS5BU1Q+KSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBlLkFTVFdpdGhTb3VyY2UpIHtcbiAgICAgIC8vIEluIG9yZGVyIHRvIHJlZHVjZSBub2lzZSwgZG8gbm90IGluY2x1ZGUgYEFTVFdpdGhTb3VyY2VgIGluIHRoZSBwYXRoLlxuICAgICAgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIHNvdXJjZSBzcGFucywgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuXG4gICAgICAvLyBgQVNUV2l0aFNvdXJjZWAgYW5kIGFuZCB1bmRlcmx5aW5nIG5vZGUgdGhhdCBpdCB3cmFwcy5cbiAgICAgIG5vZGUgPSBub2RlLmFzdDtcbiAgICB9XG4gICAgLy8gVGhlIHRoaXJkIGNvbmRpdGlvbiBpcyB0byBhY2NvdW50IGZvciB0aGUgaW1wbGljaXQgcmVjZWl2ZXIsIHdoaWNoIHNob3VsZFxuICAgIC8vIG5vdCBiZSB2aXNpdGVkLlxuICAgIGlmIChpc1dpdGhpbih0aGlzLnBvc2l0aW9uLCBub2RlLnNvdXJjZVNwYW4pICYmICEobm9kZSBpbnN0YW5jZW9mIGUuSW1wbGljaXRSZWNlaXZlcikpIHtcbiAgICAgIHBhdGgucHVzaChub2RlKTtcbiAgICAgIG5vZGUudmlzaXQodGhpcywgcGF0aCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNwYW5JbmNsdWRpbmdFbmRUYWcoYXN0OiB0Lk5vZGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHN0YXJ0OiBhc3Quc291cmNlU3Bhbi5zdGFydC5vZmZzZXQsXG4gICAgZW5kOiBhc3Quc291cmNlU3Bhbi5lbmQub2Zmc2V0LFxuICB9O1xuICAvLyBGb3IgRWxlbWVudCBhbmQgVGVtcGxhdGUgbm9kZSwgc291cmNlU3Bhbi5lbmQgaXMgdGhlIGVuZCBvZiB0aGUgb3BlbmluZ1xuICAvLyB0YWcuIEZvciB0aGUgcHVycG9zZSBvZiBsYW5ndWFnZSBzZXJ2aWNlLCB3ZSBuZWVkIHRvIGFjdHVhbGx5IHJlY29nbml6ZVxuICAvLyB0aGUgZW5kIG9mIHRoZSBjbG9zaW5nIHRhZy4gT3RoZXJ3aXNlLCBmb3Igc2l0dWF0aW9uIGxpa2VcbiAgLy8gPG15LWNvbXBvbmVudD48L215LWNvbXDCpm9uZW50PiB3aGVyZSB0aGUgY3Vyc29yIGlzIGluIHRoZSBjbG9zaW5nIHRhZ1xuICAvLyB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJldHVybiBhbnkgaW5mb3JtYXRpb24uXG4gIGlmICgoYXN0IGluc3RhbmNlb2YgdC5FbGVtZW50IHx8IGFzdCBpbnN0YW5jZW9mIHQuVGVtcGxhdGUpICYmIGFzdC5lbmRTb3VyY2VTcGFuKSB7XG4gICAgcmVzdWx0LmVuZCA9IGFzdC5lbmRTb3VyY2VTcGFuLmVuZC5vZmZzZXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVfdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGFuZ3VhZ2Utc2VydmljZS9pdnkvdGVtcGxhdGVfdGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCw4Q0FBK0Q7SUFDL0QsK0RBQWlFLENBQUUsdUJBQXVCO0lBQzFGLHdEQUEwRCxDQUFTLHFCQUFxQjtJQUV4Riw2REFBa0Y7SUFrRGxGOztPQUVHO0lBQ0gsSUFBWSxjQVFYO0lBUkQsV0FBWSxjQUFjO1FBQ3hCLHFFQUFhLENBQUE7UUFDYix5RUFBZSxDQUFBO1FBQ2YsaUZBQW1CLENBQUE7UUFDbkIsbUZBQW9CLENBQUE7UUFDcEIscUZBQXFCLENBQUE7UUFDckIseUZBQXVCLENBQUE7UUFDdkIsbUZBQW9CLENBQUE7SUFDdEIsQ0FBQyxFQVJXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBUXpCO0lBdUREOzs7T0FHRztJQUNILElBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksb0JBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5Rjs7Ozs7O09BTUc7SUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxRQUFrQixFQUFFLFFBQWdCO1FBQ3RFLElBQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FB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QUFHLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUU7WUFDaEYsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDM0M7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UGFyc2VTcGFuLCBUbXBsQXN0Qm91bmRFdmVudH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgZSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvZXhwcmVzc2lvbl9wYXJzZXIvYXN0JzsgIC8vIGUgZm9yIGV4cHJlc3Npb24gQVNUXG5pbXBvcnQgKiBhcyB0IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9yZW5kZXIzL3IzX2FzdCc7ICAgICAgICAgLy8gdCBmb3IgdGVtcGxhdGUgQVNUXG5cbmltcG9ydCB7aXNUZW1wbGF0ZU5vZGVXaXRoS2V5QW5kVmFsdWUsIGlzV2l0aGluLCBpc1dpdGhpbktleVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBDb250ZXh0dWFsIGluZm9ybWF0aW9uIGZvciBhIHRhcmdldCBwb3NpdGlvbiB3aXRoaW4gdGhlIHRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRhcmdldCBwb3NpdGlvbiB3aXRoaW4gdGhlIHRlbXBsYXRlLlxuICAgKi9cbiAgcG9zaXRpb246IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIChvciBBU1QgZXhwcmVzc2lvbikgbm9kZSBvciBub2RlcyBjbG9zZXN0IHRvIHRoZSBzZWFyY2ggcG9zaXRpb24uXG4gICAqL1xuICBjb250ZXh0OiBUYXJnZXRDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgYHQuVGVtcGxhdGVgIHdoaWNoIGNvbnRhaW5zIHRoZSBmb3VuZCBub2RlIG9yIGV4cHJlc3Npb24gKG9yIGBudWxsYCBpZiBpbiB0aGUgcm9vdFxuICAgKiB0ZW1wbGF0ZSkuXG4gICAqL1xuICB0ZW1wbGF0ZTogdC5UZW1wbGF0ZXxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1tZWRpYXRlIHBhcmVudCBub2RlIG9mIHRoZSB0YXJnZXRlZCBub2RlLlxuICAgKi9cbiAgcGFyZW50OiB0Lk5vZGV8ZS5BU1R8bnVsbDtcbn1cblxuLyoqXG4gKiBBIG5vZGUgb3Igbm9kZXMgdGFyZ2V0ZWQgYXQgYSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgdGVtcGxhdGUsIGluY2x1ZGluZyBwb3RlbnRpYWwgY29udGV4dHVhbFxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgbm9kZSBiZWluZyByZWZlcmVuY2VkLlxuICpcbiAqIFNvbWUgbm9kZXMgaGF2ZSBtdWx0aXBsZSBpbnRlcmlvciBjb250ZXh0cy4gRm9yIGV4YW1wbGUsIGB0LkVsZW1lbnRgIG5vZGVzIGhhdmUgYm90aCBhIHRhZyBuYW1lXG4gKiBhcyB3ZWxsIGFzIGEgYm9keSwgYW5kIGEgZ2l2ZW4gcG9zaXRpb24gZGVmaW5pdGl2ZWx5IHBvaW50cyB0byBvbmUgb3IgdGhlIG90aGVyLiBgVGFyZ2V0Tm9kZWBcbiAqIGNhcHR1cmVzIHRoZSBub2RlIGl0c2VsZiwgYXMgd2VsbCBhcyB0aGlzIGFkZGl0aW9uYWwgY29udGV4dHVhbCBkaXNhbWJpZ3VhdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgVGFyZ2V0Q29udGV4dCA9IFNpbmdsZU5vZGVUYXJnZXR8TXVsdGlOb2RlVGFyZ2V0O1xuXG4vKiogQ29udGV4dHMgd2hpY2ggbG9naWNhbGx5IHRhcmdldCBvbmx5IGEgc2luZ2xlIG5vZGUgaW4gdGhlIHRlbXBsYXRlIEFTVC4gKi9cbmV4cG9ydCB0eXBlIFNpbmdsZU5vZGVUYXJnZXQgPSBSYXdFeHByZXNzaW9ufFJhd1RlbXBsYXRlTm9kZXxFbGVtZW50SW5Cb2R5Q29udGV4dHxcbiAgICBFbGVtZW50SW5UYWdDb250ZXh0fEF0dHJpYnV0ZUluS2V5Q29udGV4dHxBdHRyaWJ1dGVJblZhbHVlQ29udGV4dDtcblxuLyoqXG4gKiBDb250ZXh0cyB3aGljaCBsb2dpY2FsbHkgdGFyZ2V0IG11bHRpcGxlIG5vZGVzIGluIHRoZSB0ZW1wbGF0ZSBBU1QsIHdoaWNoIGNhbm5vdCBiZVxuICogZGlzYW1iaWd1YXRlZCBnaXZlbiBhIHNpbmdsZSBwb3NpdGlvbiBiZWNhdXNlIHRoZXkgYXJlIGFsbCBlcXVhbGx5IHJlbGF2ZW50LiBGb3IgZXhhbXBsZSwgaW4gdGhlXG4gKiBiYW5hbmEtaW4tYS1ib3ggc3ludGF4IGBbKG5nTW9kZWwpXT1cImZvcm1WYWx1ZXMucGVyc29uXCJgLCB0aGUgcG9zaXRpb24gaW4gdGhlIHRlbXBsYXRlIGZvciB0aGVcbiAqIGtleSBgbmdNb2RlbGAgcmVmZXJzIHRvIGJvdGggdGhlIGJvdW5kIGV2ZW50IGBuZ01vZGVsQ2hhbmdlYCBhbmQgdGhlIGlucHV0IGBuZ01vZGVsYC5cbiAqL1xuZXhwb3J0IHR5cGUgTXVsdGlOb2RlVGFyZ2V0ID0gVHdvV2F5QmluZGluZ0NvbnRleHQ7XG5cbi8qKlxuICogRGlmZmVyZW50aWF0ZXMgdGhlIHZhcmlvdXMga2luZHMgb2YgYFRhcmdldE5vZGVgcy5cbiAqL1xuZXhwb3J0IGVudW0gVGFyZ2V0Tm9kZUtpbmQge1xuICBSYXdFeHByZXNzaW9uLFxuICBSYXdUZW1wbGF0ZU5vZGUsXG4gIEVsZW1lbnRJblRhZ0NvbnRleHQsXG4gIEVsZW1lbnRJbkJvZHlDb250ZXh0LFxuICBBdHRyaWJ1dGVJbktleUNvbnRleHQsXG4gIEF0dHJpYnV0ZUluVmFsdWVDb250ZXh0LFxuICBUd29XYXlCaW5kaW5nQ29udGV4dCxcbn1cblxuLyoqXG4gKiBBbiBgZS5BU1RgIGV4cHJlc3Npb24gdGhhdCdzIHRhcmdldGVkIGF0IGEgZ2l2ZW4gcG9zaXRpb24sIHdpdGggbm8gYWRkaXRpb25hbCBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd0V4cHJlc3Npb24ge1xuICBraW5kOiBUYXJnZXROb2RlS2luZC5SYXdFeHByZXNzaW9uO1xuICBub2RlOiBlLkFTVDtcbn1cblxuLyoqXG4gKiBBIGB0Lk5vZGVgIHRlbXBsYXRlIG5vZGUgdGhhdCdzIHRhcmdldGVkIGF0IGEgZ2l2ZW4gcG9zaXRpb24sIHdpdGggbm8gYWRkaXRpb25hbCBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd1RlbXBsYXRlTm9kZSB7XG4gIGtpbmQ6IFRhcmdldE5vZGVLaW5kLlJhd1RlbXBsYXRlTm9kZTtcbiAgbm9kZTogdC5Ob2RlO1xufVxuXG4vKipcbiAqIEEgYHQuRWxlbWVudGAgKG9yIGB0LlRlbXBsYXRlYCkgZWxlbWVudCBub2RlIHRoYXQncyB0YXJnZXRlZCwgd2hlcmUgdGhlIGdpdmVuIHBvc2l0aW9uIGlzIHdpdGhpblxuICogdGhlIHRhZyBuYW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRJblRhZ0NvbnRleHQge1xuICBraW5kOiBUYXJnZXROb2RlS2luZC5FbGVtZW50SW5UYWdDb250ZXh0O1xuICBub2RlOiB0LkVsZW1lbnR8dC5UZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBBIGB0LkVsZW1lbnRgIChvciBgdC5UZW1wbGF0ZWApIGVsZW1lbnQgbm9kZSB0aGF0J3MgdGFyZ2V0ZWQsIHdoZXJlIHRoZSBnaXZlbiBwb3NpdGlvbiBpcyB3aXRoaW5cbiAqIHRoZSBlbGVtZW50IGJvZHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudEluQm9keUNvbnRleHQge1xuICBraW5kOiBUYXJnZXROb2RlS2luZC5FbGVtZW50SW5Cb2R5Q29udGV4dDtcbiAgbm9kZTogdC5FbGVtZW50fHQuVGVtcGxhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlSW5LZXlDb250ZXh0IHtcbiAga2luZDogVGFyZ2V0Tm9kZUtpbmQuQXR0cmlidXRlSW5LZXlDb250ZXh0O1xuICBub2RlOiB0LlRleHRBdHRyaWJ1dGV8dC5Cb3VuZEF0dHJpYnV0ZXx0LkJvdW5kRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlSW5WYWx1ZUNvbnRleHQge1xuICBraW5kOiBUYXJnZXROb2RlS2luZC5BdHRyaWJ1dGVJblZhbHVlQ29udGV4dDtcbiAgbm9kZTogdC5UZXh0QXR0cmlidXRlfHQuQm91bmRBdHRyaWJ1dGV8dC5Cb3VuZEV2ZW50O1xufVxuXG4vKipcbiAqIEEgYHQuQm91bmRBdHRyaWJ1dGVgIGFuZCBgdC5Cb3VuZEV2ZW50YCBwYWlyIHRoYXQgYXJlIHRhcmdldGVkLCB3aGVyZSB0aGUgZ2l2ZW4gcG9zaXRpb24gaXNcbiAqIHdpdGhpbiB0aGUga2V5IHNwYW4gb2YgYm90aC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29XYXlCaW5kaW5nQ29udGV4dCB7XG4gIGtpbmQ6IFRhcmdldE5vZGVLaW5kLlR3b1dheUJpbmRpbmdDb250ZXh0O1xuICBub2RlczogW3QuQm91bmRBdHRyaWJ1dGUsIHQuQm91bmRFdmVudF07XG59XG5cbi8qKlxuICogVGhpcyBzcGVjaWFsIG1hcmtlciBpcyBhZGRlZCB0byB0aGUgcGF0aCB3aGVuIHRoZSBjdXJzb3IgaXMgd2l0aGluIHRoZSBzb3VyY2VTcGFuIGJ1dCBub3QgdGhlIGtleVxuICogb3IgdmFsdWUgc3BhbiBvZiBhIG5vZGUgd2l0aCBrZXkvdmFsdWUgc3BhbnMuXG4gKi9cbmNvbnN0IE9VVFNJREVfS19WX01BUktFUiA9IG5ldyBlLkFTVChuZXcgUGFyc2VTcGFuKC0xLCAtMSksIG5ldyBlLkFic29sdXRlU291cmNlU3BhbigtMSwgLTEpKTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRlbXBsYXRlIEFTVCBub2RlIG9yIGV4cHJlc3Npb24gQVNUIG5vZGUgdGhhdCBtb3N0IGFjY3VyYXRlbHlcbiAqIHJlcHJlc2VudHMgdGhlIG5vZGUgYXQgdGhlIHNwZWNpZmllZCBjdXJzb3IgYHBvc2l0aW9uYC5cbiAqXG4gKiBAcGFyYW0gdGVtcGxhdGUgQVNUIHRyZWUgb2YgdGhlIHRlbXBsYXRlXG4gKiBAcGFyYW0gcG9zaXRpb24gdGFyZ2V0IGN1cnNvciBwb3NpdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0QXRQb3NpdGlvbih0ZW1wbGF0ZTogdC5Ob2RlW10sIHBvc2l0aW9uOiBudW1iZXIpOiBUZW1wbGF0ZVRhcmdldHxudWxsIHtcbiAgY29uc3QgcGF0aCA9IFRlbXBsYXRlVGFyZ2V0VmlzaXRvci52aXNpdFRlbXBsYXRlKHRlbXBsYXRlLCBwb3NpdGlvbik7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAvLyBXYWxrIHVwIHRoZSByZXN1bHQgbm9kZXMgdG8gZmluZCB0aGUgbmVhcmVzdCBgdC5UZW1wbGF0ZWAgd2hpY2ggY29udGFpbnMgdGhlIHRhcmdldGVkIG5vZGUuXG4gIGxldCBjb250ZXh0OiB0LlRlbXBsYXRlfG51bGwgPSBudWxsO1xuICBmb3IgKGxldCBpID0gcGF0aC5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IG5vZGUgPSBwYXRoW2ldO1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgdC5UZW1wbGF0ZSkge1xuICAgICAgY29udGV4dCA9IG5vZGU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBHaXZlbiB0aGUgY2FuZGlkYXRlIG5vZGUsIGRldGVybWluZSB0aGUgZnVsbCB0YXJnZXRlZCBjb250ZXh0LlxuICBsZXQgbm9kZUluQ29udGV4dDogVGFyZ2V0Q29udGV4dDtcbiAgaWYgKGNhbmRpZGF0ZSBpbnN0YW5jZW9mIGUuQVNUKSB7XG4gICAgbm9kZUluQ29udGV4dCA9IHtcbiAgICAgIGtpbmQ6IFRhcmdldE5vZGVLaW5kLlJhd0V4cHJlc3Npb24sXG4gICAgICBub2RlOiBjYW5kaWRhdGUsXG4gICAgfTtcbiAgfSBlbHNlIGlmIChjYW5kaWRhdGUgaW5zdGFuY2VvZiB0LkVsZW1lbnQpIHtcbiAgICAvLyBFbGVtZW50cyBoYXZlIHR3byBjb250ZXh0czogdGhlIHRhZyBjb250ZXh0IChwb3NpdGlvbiBpcyB3aXRoaW4gdGhlIGVsZW1lbnQgdGFnKSBvciB0aGVcbiAgICAvLyBlbGVtZW50IGJvZHkgY29udGV4dCAocG9zaXRpb24gaXMgb3V0c2lkZSBvZiB0aGUgdGFnIG5hbWUsIGJ1dCBzdGlsbCBpbiB0aGUgZWxlbWVudCkuXG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGVuZCBvZiB0aGUgZWxlbWVudCB0YWcgbmFtZS4gQW55IHBvc2l0aW9uIGJleW9uZCB0aGlzIGlzIGluIHRoZSBlbGVtZW50IGJvZHkuXG4gICAgY29uc3QgdGFnRW5kUG9zID1cbiAgICAgICAgY2FuZGlkYXRlLnNvdXJjZVNwYW4uc3RhcnQub2Zmc2V0ICsgMSAvKiAnPCcgZWxlbWVudCBvcGVuICovICsgY2FuZGlkYXRlLm5hbWUubGVuZ3RoO1xuICAgIGlmIChwb3NpdGlvbiA+IHRhZ0VuZFBvcykge1xuICAgICAgLy8gUG9zaXRpb24gaXMgd2l0aGluIHRoZSBlbGVtZW50IGJvZHlcbiAgICAgIG5vZGVJbkNvbnRleHQgPSB7XG4gICAgICAgIGtpbmQ6IFRhcmdldE5vZGVLaW5kLkVsZW1lbnRJbkJvZHlDb250ZXh0LFxuICAgICAgICBub2RlOiBjYW5kaWRhdGUsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlSW5Db250ZXh0ID0ge1xuICAgICAgICBraW5kOiBUYXJnZXROb2RlS2luZC5FbGVtZW50SW5UYWdDb250ZXh0LFxuICAgICAgICBub2RlOiBjYW5kaWRhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICAgIChjYW5kaWRhdGUgaW5zdGFuY2VvZiB0LkJvdW5kQXR0cmlidXRlIHx8IGNhbmRpZGF0ZSBpbnN0YW5jZW9mIHQuQm91bmRFdmVudCB8fFxuICAgICAgIGNhbmRpZGF0ZSBpbnN0YW5jZW9mIHQuVGV4dEF0dHJpYnV0ZSkgJiZcbiAgICAgIGNhbmRpZGF0ZS5rZXlTcGFuICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBwcmV2aW91c0NhbmRpZGF0ZSA9IHBhdGhbcGF0aC5sZW5ndGggLSAyXTtcbiAgICBpZiAoY2FuZGlkYXRlIGluc3RhbmNlb2YgdC5Cb3VuZEV2ZW50ICYmIHByZXZpb3VzQ2FuZGlkYXRlIGluc3RhbmNlb2YgdC5Cb3VuZEF0dHJpYnV0ZSAmJlxuICAgICAgICBjYW5kaWRhdGUubmFtZSA9PT0gcHJldmlvdXNDYW5kaWRhdGUubmFtZSArICdDaGFuZ2UnKSB7XG4gICAgICBjb25zdCBib3VuZEF0dHJpYnV0ZTogdC5Cb3VuZEF0dHJpYnV0ZSA9IHByZXZpb3VzQ2FuZGlkYXRlO1xuICAgICAgY29uc3QgYm91bmRFdmVudDogdC5Cb3VuZEV2ZW50ID0gY2FuZGlkYXRlO1xuICAgICAgbm9kZUluQ29udGV4dCA9IHtcbiAgICAgICAga2luZDogVGFyZ2V0Tm9kZUtpbmQuVHdvV2F5QmluZGluZ0NvbnRleHQsXG4gICAgICAgIG5vZGVzOiBbYm91bmRBdHRyaWJ1dGUsIGJvdW5kRXZlbnRdLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzV2l0aGluKHBvc2l0aW9uLCBjYW5kaWRhdGUua2V5U3BhbikpIHtcbiAgICAgIG5vZGVJbkNvbnRleHQgPSB7XG4gICAgICAgIGtpbmQ6IFRhcmdldE5vZGVLaW5kLkF0dHJpYnV0ZUluS2V5Q29udGV4dCxcbiAgICAgICAgbm9kZTogY2FuZGlkYXRlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZUluQ29udGV4dCA9IHtcbiAgICAgICAga2luZDogVGFyZ2V0Tm9kZUtpbmQuQXR0cmlidXRlSW5WYWx1ZUNvbnRleHQsXG4gICAgICAgIG5vZGU6IGNhbmRpZGF0ZSxcbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5vZGVJbkNvbnRleHQgPSB7XG4gICAgICBraW5kOiBUYXJnZXROb2RlS2luZC5SYXdUZW1wbGF0ZU5vZGUsXG4gICAgICBub2RlOiBjYW5kaWRhdGUsXG4gICAgfTtcbiAgfVxuXG4gIGxldCBwYXJlbnQ6IHQuTm9kZXxlLkFTVHxudWxsID0gbnVsbDtcbiAgaWYgKG5vZGVJbkNvbnRleHQua2luZCA9PT0gVGFyZ2V0Tm9kZUtpbmQuVHdvV2F5QmluZGluZ0NvbnRleHQgJiYgcGF0aC5sZW5ndGggPj0gMykge1xuICAgIHBhcmVudCA9IHBhdGhbcGF0aC5sZW5ndGggLSAzXTtcbiAgfSBlbHNlIGlmIChwYXRoLmxlbmd0aCA+PSAyKSB7XG4gICAgcGFyZW50ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDJdO1xuICB9XG5cbiAgcmV0dXJuIHtwb3NpdGlvbiwgY29udGV4dDogbm9kZUluQ29udGV4dCwgdGVtcGxhdGU6IGNvbnRleHQsIHBhcmVudH07XG59XG5cbi8qKlxuICogVmlzaXRvciB3aGljaCwgZ2l2ZW4gYSBwb3NpdGlvbiBhbmQgYSB0ZW1wbGF0ZSwgaWRlbnRpZmllcyB0aGUgbm9kZSB3aXRoaW4gdGhlIHRlbXBsYXRlIGF0IHRoYXRcbiAqIHBvc2l0aW9uLCBhcyB3ZWxsIGFzIHJlY29yZHMgdGhlIHBhdGggb2YgaW5jcmVhc2luZ2x5IG5lc3RlZCBub2RlcyB0aGF0IHdlcmUgdHJhdmVyc2VkIHRvIHJlYWNoXG4gKiB0aGF0IHBvc2l0aW9uLlxuICovXG5jbGFzcyBUZW1wbGF0ZVRhcmdldFZpc2l0b3IgaW1wbGVtZW50cyB0LlZpc2l0b3Ige1xuICAvLyBXZSBuZWVkIHRvIGtlZXAgYSBwYXRoIGluc3RlYWQgb2YgdGhlIGxhc3Qgbm9kZSBiZWNhdXNlIHdlIG1pZ2h0IG5lZWQgbW9yZVxuICAvLyBjb250ZXh0IGZvciB0aGUgbGFzdCBub2RlLCBmb3IgZXhhbXBsZSB3aGF0IGlzIHRoZSBwYXJlbnQgbm9kZT9cbiAgcmVhZG9ubHkgcGF0aDogQXJyYXk8dC5Ob2RlfGUuQVNUPiA9IFtdO1xuXG4gIHN0YXRpYyB2aXNpdFRlbXBsYXRlKHRlbXBsYXRlOiB0Lk5vZGVbXSwgcG9zaXRpb246IG51bWJlcik6IEFycmF5PHQuTm9kZXxlLkFTVD4ge1xuICAgIGNvbnN0IHZpc2l0b3IgPSBuZXcgVGVtcGxhdGVUYXJnZXRWaXNpdG9yKHBvc2l0aW9uKTtcbiAgICB2aXNpdG9yLnZpc2l0QWxsKHRlbXBsYXRlKTtcbiAgICBjb25zdCB7cGF0aH0gPSB2aXNpdG9yO1xuXG4gICAgY29uc3Qgc3RyaWN0UGF0aCA9IHBhdGguZmlsdGVyKHYgPT4gdiAhPT0gT1VUU0lERV9LX1ZfTUFSS0VSKTtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBzdHJpY3RQYXRoW3N0cmljdFBhdGgubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgbWF0Y2hlZEFTb3VyY2VTcGFuQnV0Tm90QUt2U3BhbiA9IHBhdGguc29tZSh2ID0+IHYgPT09IE9VVFNJREVfS19WX01BUktFUik7XG4gICAgaWYgKG1hdGNoZWRBU291cmNlU3BhbkJ1dE5vdEFLdlNwYW4gJiZcbiAgICAgICAgKGNhbmRpZGF0ZSBpbnN0YW5jZW9mIHQuVGVtcGxhdGUgfHwgY2FuZGlkYXRlIGluc3RhbmNlb2YgdC5FbGVtZW50KSkge1xuICAgICAgLy8gVGVtcGxhdGUgbm9kZXMgd2l0aCBrZXkgYW5kIHZhbHVlIHNwYW5zIGFyZSBhbHdheXMgZGVmaW5lZCBvbiBhIGB0LlRlbXBsYXRlYCBvclxuICAgICAgLy8gYHQuRWxlbWVudGAuIElmIHdlIGZvdW5kIGEgbm9kZSBvbiBhIHRlbXBsYXRlIHdpdGggYSBgc291cmNlU3BhbmAgdGhhdCBpbmNsdWRlcyB0aGUgY3Vyc29yLFxuICAgICAgLy8gaXQgaXMgcG9zc2libGUgdGhhdCB3ZSBhcmUgb3V0c2lkZSB0aGUgay92IHNwYW5zIChpLmUuIGluLWJldHdlZW4gdGhlbSkuIElmIHRoaXMgaXMgdGhlXG4gICAgICAvLyBjYXNlIGFuZCB3ZSBkbyBub3QgaGF2ZSBhbnkgb3RoZXIgY2FuZGlkYXRlIG1hdGNoZXMgb24gdGhlIGB0LkVsZW1lbnRgIG9yIGB0LlRlbXBsYXRlYCwgd2VcbiAgICAgIC8vIHdhbnQgdG8gcmV0dXJuIG5vIHJlc3VsdHMuIE90aGVyd2lzZSwgdGhlIGB0LkVsZW1lbnRgL2B0LlRlbXBsYXRlYCByZXN1bHQgaXMgaW5jb3JyZWN0IGZvclxuICAgICAgLy8gdGhhdCBjdXJzb3IgcG9zaXRpb24uXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBzdHJpY3RQYXRoO1xuICB9XG5cbiAgLy8gUG9zaXRpb24gbXVzdCBiZSBhYnNvbHV0ZSBpbiB0aGUgc291cmNlIGZpbGUuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwb3NpdGlvbjogbnVtYmVyKSB7fVxuXG4gIHZpc2l0KG5vZGU6IHQuTm9kZSkge1xuICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IGdldFNwYW5JbmNsdWRpbmdFbmRUYWcobm9kZSk7XG4gICAgaWYgKCFpc1dpdGhpbih0aGlzLnBvc2l0aW9uLCB7c3RhcnQsIGVuZH0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdDogdC5Ob2RlfGUuQVNUfHVuZGVmaW5lZCA9IHRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoIC0gMV07XG4gICAgY29uc3Qgd2l0aGluS2V5U3Bhbk9mTGFzdE5vZGUgPVxuICAgICAgICBsYXN0ICYmIGlzVGVtcGxhdGVOb2RlV2l0aEtleUFuZFZhbHVlKGxhc3QpICYmIGlzV2l0aGluKHRoaXMucG9zaXRpb24sIGxhc3Qua2V5U3Bhbik7XG4gICAgY29uc3Qgd2l0aGluS2V5U3Bhbk9mQ3VycmVudE5vZGUgPVxuICAgICAgICBpc1RlbXBsYXRlTm9kZVdpdGhLZXlBbmRWYWx1ZShub2RlKSAmJiBpc1dpdGhpbih0aGlzLnBvc2l0aW9uLCBub2RlLmtleVNwYW4pO1xuICAgIGlmICh3aXRoaW5LZXlTcGFuT2ZMYXN0Tm9kZSAmJiAhd2l0aGluS2V5U3Bhbk9mQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCB0aGF0IHdlIGFyZSB3aXRoaW4gYSBga2V5U3BhbmAgb2YgYSBub2RlLlxuICAgICAgLy8gVW5sZXNzIHdlIGFyZSBfYWxzb18gaW4gdGhlIGBrZXlTcGFuYCBvZiB0aGUgY3VycmVudCBub2RlIChoYXBwZW5zIHdpdGggdHdvIHdheSBiaW5kaW5ncyksXG4gICAgICAvLyB3ZSBzaG91bGQgc3RvcCBwcm9jZXNzaW5nIG5vZGVzIGF0IHRoaXMgcG9pbnQgdG8gcHJldmVudCBtYXRjaGluZyBhbnkgb3RoZXIgbm9kZXMuIFRoaXMgY2FuXG4gICAgICAvLyBoYXBwZW4gd2hlbiB0aGUgZW5kIHNwYW4gb2YgYSBkaWZmZXJlbnQgbm9kZSB0b3VjaGVzIHRoZSBzdGFydCBvZiB0aGUga2V5U3BhbiBmb3IgdGhlXG4gICAgICAvLyBjYW5kaWRhdGUgbm9kZS4gQmVjYXVzZSBvdXIgYGlzV2l0aGluYCBsb2dpYyBpcyBpbmNsdXNpdmUgb24gYm90aCBlbmRzLCB3ZSBjYW4gbWF0Y2ggYm90aFxuICAgICAgLy8gbm9kZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1RlbXBsYXRlTm9kZVdpdGhLZXlBbmRWYWx1ZShub2RlKSAmJiAhaXNXaXRoaW5LZXlWYWx1ZSh0aGlzLnBvc2l0aW9uLCBub2RlKSkge1xuICAgICAgLy8gSWYgY3Vyc29yIGlzIHdpdGhpbiBzb3VyY2Ugc3BhbiBidXQgbm90IHdpdGhpbiBrZXkgc3BhbiBvciB2YWx1ZSBzcGFuLFxuICAgICAgLy8gZG8gbm90IHJldHVybiB0aGUgbm9kZS5cbiAgICAgIHRoaXMucGF0aC5wdXNoKE9VVFNJREVfS19WX01BUktFUik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGF0aC5wdXNoKG5vZGUpO1xuICAgICAgbm9kZS52aXNpdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICB2aXNpdEVsZW1lbnQoZWxlbWVudDogdC5FbGVtZW50KSB7XG4gICAgdGhpcy52aXNpdEVsZW1lbnRPclRlbXBsYXRlKGVsZW1lbnQpO1xuICB9XG5cblxuICB2aXNpdFRlbXBsYXRlKHRlbXBsYXRlOiB0LlRlbXBsYXRlKSB7XG4gICAgdGhpcy52aXNpdEVsZW1lbnRPclRlbXBsYXRlKHRlbXBsYXRlKTtcbiAgfVxuXG4gIHZpc2l0RWxlbWVudE9yVGVtcGxhdGUoZWxlbWVudDogdC5UZW1wbGF0ZXx0LkVsZW1lbnQpIHtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuYXR0cmlidXRlcyk7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LmlucHV0cyk7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50Lm91dHB1dHMpO1xuICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgdC5UZW1wbGF0ZSkge1xuICAgICAgdGhpcy52aXNpdEFsbChlbGVtZW50LnRlbXBsYXRlQXR0cnMpO1xuICAgIH1cbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQucmVmZXJlbmNlcyk7XG4gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiB0LlRlbXBsYXRlKSB7XG4gICAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQudmFyaWFibGVzKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBnZXQgaGVyZSBhbmQgaGF2ZSBub3QgZm91bmQgYSBjYW5kaWRhdGUgbm9kZSBvbiB0aGUgZWxlbWVudCBpdHNlbGYsIHByb2NlZWQgd2l0aFxuICAgIC8vIGxvb2tpbmcgZm9yIGEgbW9yZSBzcGVjaWZpYyBub2RlIG9uIHRoZSBlbGVtZW50IGNoaWxkcmVuLlxuICAgIGlmICh0aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aCAtIDFdICE9PSBlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LmNoaWxkcmVuKTtcbiAgfVxuXG4gIHZpc2l0Q29udGVudChjb250ZW50OiB0LkNvbnRlbnQpIHtcbiAgICB0LnZpc2l0QWxsKHRoaXMsIGNvbnRlbnQuYXR0cmlidXRlcyk7XG4gIH1cblxuICB2aXNpdFZhcmlhYmxlKHZhcmlhYmxlOiB0LlZhcmlhYmxlKSB7XG4gICAgLy8gVmFyaWFibGUgaGFzIG5vIHRlbXBsYXRlIG5vZGVzIG9yIGV4cHJlc3Npb24gbm9kZXMuXG4gIH1cblxuICB2aXNpdFJlZmVyZW5jZShyZWZlcmVuY2U6IHQuUmVmZXJlbmNlKSB7XG4gICAgLy8gUmVmZXJlbmNlIGhhcyBubyB0ZW1wbGF0ZSBub2RlcyBvciBleHByZXNzaW9uIG5vZGVzLlxuICB9XG5cbiAgdmlzaXRUZXh0QXR0cmlidXRlKGF0dHJpYnV0ZTogdC5UZXh0QXR0cmlidXRlKSB7XG4gICAgLy8gVGV4dCBhdHRyaWJ1dGUgaGFzIG5vIHRlbXBsYXRlIG5vZGVzIG9yIGV4cHJlc3Npb24gbm9kZXMuXG4gIH1cblxuICB2aXNpdEJvdW5kQXR0cmlidXRlKGF0dHJpYnV0ZTogdC5Cb3VuZEF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHZpc2l0b3IgPSBuZXcgRXhwcmVzc2lvblZpc2l0b3IodGhpcy5wb3NpdGlvbik7XG4gICAgdmlzaXRvci52aXNpdChhdHRyaWJ1dGUudmFsdWUsIHRoaXMucGF0aCk7XG4gIH1cblxuICB2aXNpdEJvdW5kRXZlbnQoZXZlbnQ6IHQuQm91bmRFdmVudCkge1xuICAgIC8vIEFuIGV2ZW50IGJpbmRpbmcgd2l0aCBubyB2YWx1ZSAoZS5nLiBgKGV2ZW50fClgKSBwYXJzZXMgdG8gYSBgQm91bmRFdmVudGAgd2l0aCBhXG4gICAgLy8gYExpdGVyYWxQcmltaXRpdmVgIGhhbmRsZXIgd2l0aCB2YWx1ZSBgJ0VSUk9SJ2AsIGFzIG9wcG9zZWQgdG8gYSBwcm9wZXJ0eSBiaW5kaW5nIHdpdGggbm9cbiAgICAvLyB2YWx1ZSB3aGljaCBoYXMgYW4gYEVtcHR5RXhwcmAgYXMgaXRzIHZhbHVlLiBUaGlzIGlzIGEgc3ludGhldGljIG5vZGUgY3JlYXRlZCBieSB0aGUgYmluZGluZ1xuICAgIC8vIHBhcnNlciwgYW5kIGlzIG5vdCBzdWl0YWJsZSB0byB1c2UgZm9yIExhbmd1YWdlIFNlcnZpY2UgYW5hbHlzaXMuIFNraXAgaXQuXG4gICAgLy9cbiAgICAvLyBUT0RPKGFseGh1Yik6IG1vZGlmeSB0aGUgcGFyc2VyIHRvIGdlbmVyYXRlIGFuIGBFbXB0eUV4cHJgIGluc3RlYWQuXG4gICAgbGV0IGhhbmRsZXI6IGUuQVNUID0gZXZlbnQuaGFuZGxlcjtcbiAgICBpZiAoaGFuZGxlciBpbnN0YW5jZW9mIGUuQVNUV2l0aFNvdXJjZSkge1xuICAgICAgaGFuZGxlciA9IGhhbmRsZXIuYXN0O1xuICAgIH1cbiAgICBpZiAoaGFuZGxlciBpbnN0YW5jZW9mIGUuTGl0ZXJhbFByaW1pdGl2ZSAmJiBoYW5kbGVyLnZhbHVlID09PSAnRVJST1InKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmlzaXRvciA9IG5ldyBFeHByZXNzaW9uVmlzaXRvcih0aGlzLnBvc2l0aW9uKTtcbiAgICB2aXNpdG9yLnZpc2l0KGV2ZW50LmhhbmRsZXIsIHRoaXMucGF0aCk7XG4gIH1cblxuICB2aXNpdFRleHQodGV4dDogdC5UZXh0KSB7XG4gICAgLy8gVGV4dCBoYXMgbm8gdGVtcGxhdGUgbm9kZXMgb3IgZXhwcmVzc2lvbiBub2Rlcy5cbiAgfVxuXG4gIHZpc2l0Qm91bmRUZXh0KHRleHQ6IHQuQm91bmRUZXh0KSB7XG4gICAgY29uc3QgdmlzaXRvciA9IG5ldyBFeHByZXNzaW9uVmlzaXRvcih0aGlzLnBvc2l0aW9uKTtcbiAgICB2aXNpdG9yLnZpc2l0KHRleHQudmFsdWUsIHRoaXMucGF0aCk7XG4gIH1cblxuICB2aXNpdEljdShpY3U6IHQuSWN1KSB7XG4gICAgZm9yIChjb25zdCBib3VuZFRleHQgb2YgT2JqZWN0LnZhbHVlcyhpY3UudmFycykpIHtcbiAgICAgIHRoaXMudmlzaXQoYm91bmRUZXh0KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBib3VuZFRleHRPclRleHQgb2YgT2JqZWN0LnZhbHVlcyhpY3UucGxhY2Vob2xkZXJzKSkge1xuICAgICAgdGhpcy52aXNpdChib3VuZFRleHRPclRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0QWxsKG5vZGVzOiB0Lk5vZGVbXSkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgdGhpcy52aXNpdChub2RlKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgRXhwcmVzc2lvblZpc2l0b3IgZXh0ZW5kcyBlLlJlY3Vyc2l2ZUFzdFZpc2l0b3Ige1xuICAvLyBQb3NpdGlvbiBtdXN0IGJlIGFic29sdXRlIGluIHRoZSBzb3VyY2UgZmlsZS5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IGUuQVNULCBwYXRoOiBBcnJheTx0Lk5vZGV8ZS5BU1Q+KSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBlLkFTVFdpdGhTb3VyY2UpIHtcbiAgICAgIC8vIEluIG9yZGVyIHRvIHJlZHVjZSBub2lzZSwgZG8gbm90IGluY2x1ZGUgYEFTVFdpdGhTb3VyY2VgIGluIHRoZSBwYXRoLlxuICAgICAgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIHNvdXJjZSBzcGFucywgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuXG4gICAgICAvLyBgQVNUV2l0aFNvdXJjZWAgYW5kIGFuZCB1bmRlcmx5aW5nIG5vZGUgdGhhdCBpdCB3cmFwcy5cbiAgICAgIG5vZGUgPSBub2RlLmFzdDtcbiAgICB9XG4gICAgLy8gVGhlIHRoaXJkIGNvbmRpdGlvbiBpcyB0byBhY2NvdW50IGZvciB0aGUgaW1wbGljaXQgcmVjZWl2ZXIsIHdoaWNoIHNob3VsZFxuICAgIC8vIG5vdCBiZSB2aXNpdGVkLlxuICAgIGlmIChpc1dpdGhpbih0aGlzLnBvc2l0aW9uLCBub2RlLnNvdXJjZVNwYW4pICYmICEobm9kZSBpbnN0YW5jZW9mIGUuSW1wbGljaXRSZWNlaXZlcikpIHtcbiAgICAgIHBhdGgucHVzaChub2RlKTtcbiAgICAgIG5vZGUudmlzaXQodGhpcywgcGF0aCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNwYW5JbmNsdWRpbmdFbmRUYWcoYXN0OiB0Lk5vZGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHN0YXJ0OiBhc3Quc291cmNlU3Bhbi5zdGFydC5vZmZzZXQsXG4gICAgZW5kOiBhc3Quc291cmNlU3Bhbi5lbmQub2Zmc2V0LFxuICB9O1xuICAvLyBGb3IgRWxlbWVudCBhbmQgVGVtcGxhdGUgbm9kZSwgc291cmNlU3Bhbi5lbmQgaXMgdGhlIGVuZCBvZiB0aGUgb3BlbmluZ1xuICAvLyB0YWcuIEZvciB0aGUgcHVycG9zZSBvZiBsYW5ndWFnZSBzZXJ2aWNlLCB3ZSBuZWVkIHRvIGFjdHVhbGx5IHJlY29nbml6ZVxuICAvLyB0aGUgZW5kIG9mIHRoZSBjbG9zaW5nIHRhZy4gT3RoZXJ3aXNlLCBmb3Igc2l0dWF0aW9uIGxpa2VcbiAgLy8gPG15LWNvbXBvbmVudD48L215LWNvbXDCpm9uZW50PiB3aGVyZSB0aGUgY3Vyc29yIGlzIGluIHRoZSBjbG9zaW5nIHRhZ1xuICAvLyB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJldHVybiBhbnkgaW5mb3JtYXRpb24uXG4gIGlmICgoYXN0IGluc3RhbmNlb2YgdC5FbGVtZW50IHx8IGFzdCBpbnN0YW5jZW9mIHQuVGVtcGxhdGUpICYmIGFzdC5lbmRTb3VyY2VTcGFuKSB7XG4gICAgcmVzdWx0LmVuZCA9IGFzdC5lbmRTb3VyY2VTcGFuLmVuZC5vZmZzZXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
package/ivy/ts_plugin.js
CHANGED
|
@@ -99,6 +99,17 @@
|
|
|
99
99
|
return (_a = tsLS.getCompletionEntrySymbol(fileName, position, name, source)) !== null && _a !== void 0 ? _a : ngLS.getCompletionEntrySymbol(fileName, position, name);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Gets global diagnostics related to the program configuration and compiler options.
|
|
104
|
+
*/
|
|
105
|
+
function getCompilerOptionsDiagnostics() {
|
|
106
|
+
var diagnostics = [];
|
|
107
|
+
if (!angularOnly) {
|
|
108
|
+
diagnostics.push.apply(diagnostics, tslib_1.__spread(tsLS.getCompilerOptionsDiagnostics()));
|
|
109
|
+
}
|
|
110
|
+
diagnostics.push.apply(diagnostics, tslib_1.__spread(ngLS.getCompilerOptionsDiagnostics()));
|
|
111
|
+
return diagnostics;
|
|
112
|
+
}
|
|
102
113
|
return tslib_1.__assign(tslib_1.__assign({}, tsLS), { getSemanticDiagnostics: getSemanticDiagnostics,
|
|
103
114
|
getTypeDefinitionAtPosition: getTypeDefinitionAtPosition,
|
|
104
115
|
getQuickInfoAtPosition: getQuickInfoAtPosition,
|
|
@@ -107,7 +118,8 @@
|
|
|
107
118
|
findRenameLocations: findRenameLocations,
|
|
108
119
|
getCompletionsAtPosition: getCompletionsAtPosition,
|
|
109
120
|
getCompletionEntryDetails: getCompletionEntryDetails,
|
|
110
|
-
getCompletionEntrySymbol: getCompletionEntrySymbol
|
|
121
|
+
getCompletionEntrySymbol: getCompletionEntrySymbol,
|
|
122
|
+
getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics });
|
|
111
123
|
}
|
|
112
124
|
exports.create = create;
|
|
113
125
|
function getExternalFiles(project) {
|
|
@@ -138,4 +150,4 @@
|
|
|
138
150
|
}
|
|
139
151
|
exports.getExternalFiles = getExternalFiles;
|
|
140
152
|
});
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNfcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGFuZ3VhZ2Utc2VydmljZS9pdnkvdHNfcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCxtREFBcUQ7SUFDckQsbUZBQW1EO0lBRW5ELFNBQWdCLE1BQU0sQ0FBQyxJQUFnQztRQUM5QyxJQUFBLE9BQU8sR0FBbUMsSUFBSSxRQUF2QyxFQUFtQixJQUFJLEdBQVksSUFBSSxnQkFBaEIsRUFBRSxNQUFNLEdBQUksSUFBSSxPQUFSLENBQVM7UUFDdEQsSUFBTSxXQUFXLEdBQUcsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxNQUFLLElBQUksQ0FBQztRQUVqRCxJQUFNLElBQUksR0FBRyxJQUFJLGtDQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWhELFNBQVMsc0JBQXNCLENBQUMsUUFBZ0I7WUFDOUMsSUFBTSxXQUFXLEdBQW9CLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQixXQUFXLENBQUMsSUFBSSxPQUFoQixXQUFXLG1CQUFTLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRTthQUM1RDtZQUNELFdBQVcsQ0FBQyxJQUFJLE9BQWhCLFdBQVcsbUJBQVMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFFO1lBQzNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7O1lBQ2hFLElBQUksV0FBVyxFQUFFO2dCQUNmLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN4RDtpQkFBTTtnQkFDTCw0RkFBNEY7Z0JBQzVGLGFBQU8sSUFBSSxDQUFD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QixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxtQ0FDbEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDN0Q7UUFDSCxDQUFDO1FBRUQsNkNBQ0ssSUFBSSxLQUNQLHNCQUFzQix3QkFBQTtZQUN0QiwyQkFBMkIsNkJBQUE7WUFDM0Isc0JBQXNCLHdCQUFBO1lBQ3RCLHlCQUF5QiwyQkFBQTtZQUN6Qix1QkFBdUIseUJBQUE7WUFDdkIsbUJBQW1CLHFCQUFBO1lBQ25CLHdCQUF3QiwwQkFBQTtZQUN4Qix5QkFBeUIsMkJBQUE7WUFDekIsd0JBQXdCLDBCQUFBLElBQ3hCO0lBQ0osQ0FBQztJQTlHRCx3QkE4R0M7SUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxPQUEwQjs7UUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN2QixPQUFPLEVBQUUsQ0FBQyxDQUFFLG1DQUFtQztTQUNoRDtRQUNELElBQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQzs7WUFDcEMsS0FBeUIsSUFBQSxLQUFBLGlCQUFBLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQSxnQkFBQSw0QkFBRTtnQkFBOUMsSUFBTSxVQUFVLFdBQUE7Z0JBQ25CLElBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDcEQsNERBQTREO29CQUM1RCxzQ0FBc0M7b0JBQ3RDLG9EQUFvRDtvQkFDcEQsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzFDO2FBQ0Y7Ozs7Ozs7OztRQUNELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFkRCw0Q0FjQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0L2xpYi90c3NlcnZlcmxpYnJhcnknO1xuaW1wb3J0IHtMYW5ndWFnZVNlcnZpY2V9IGZyb20gJy4vbGFuZ3VhZ2Vfc2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoaW5mbzogdHMuc2VydmVyLlBsdWdpbkNyZWF0ZUluZm8pOiB0cy5MYW5ndWFnZVNlcnZpY2Uge1xuICBjb25zdCB7cHJvamVjdCwgbGFuZ3VhZ2VTZXJ2aWNlOiB0c0xTLCBjb25maWd9ID0gaW5mbztcbiAgY29uc3QgYW5ndWxhck9ubHkgPSBjb25maWc/LmFuZ3VsYXJPbmx5ID09PSB0cnVlO1xuXG4gIGNvbnN0IG5nTFMgPSBuZXcgTGFuZ3VhZ2VTZXJ2aWNlKHByb2plY3QsIHRzTFMpO1xuXG4gIGZ1bmN0aW9uIGdldFNlbWFudGljRGlhZ25vc3RpY3MoZmlsZU5hbWU6IHN0cmluZyk6IHRzLkRpYWdub3N0aWNbXSB7XG4gICAgY29uc3QgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICAgIGlmICghYW5ndWxhck9ubHkpIHtcbiAgICAgIGRpYWdub3N0aWNzLnB1c2goLi4udHNMUy5nZXRTZW1hbnRpY0RpYWdub3N0aWNzKGZpbGVOYW1lKSk7XG4gICAgfVxuICAgIGRpYWdub3N0aWNzLnB1c2goLi4ubmdMUy5nZXRTZW1hbnRpY0RpYWdub3N0aWNzKGZpbGVOYW1lKSk7XG4gICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UXVpY2tJbmZvQXRQb3NpdGlvbihmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKTogdHMuUXVpY2tJbmZvfHVuZGVmaW5lZCB7XG4gICAgaWYgKGFuZ3VsYXJPbmx5KSB7XG4gICAgICByZXR1cm4gbmdMUy5nZXRRdWlja0luZm9BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIFRTIGNvdWxkIGFuc3dlciB0aGUgcXVlcnksIHRoZW4gcmV0dXJuIHRoYXQgcmVzdWx0LiBPdGhlcndpc2UsIHJldHVybiBmcm9tIEFuZ3VsYXIgTFMuXG4gICAgICByZXR1cm4gdHNMUy5nZXRRdWlja0luZm9BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbikgPz9cbiAgICAgICAgICBuZ0xTLmdldFF1aWNrSW5mb0F0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUeXBlRGVmaW5pdGlvbkF0UG9zaXRpb24oXG4gICAgICBmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKTogcmVhZG9ubHkgdHMuRGVmaW5pdGlvbkluZm9bXXx1bmRlZmluZWQge1xuICAgIGlmIChhbmd1bGFyT25seSkge1xuICAgICAgcmV0dXJuIG5nTFMuZ2V0VHlwZURlZmluaXRpb25BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIFRTIGNvdWxkIGFuc3dlciB0aGUgcXVlcnksIHRoZW4gcmV0dXJuIHRoYXQgcmVzdWx0LiBPdGhlcndpc2UsIHJldHVybiBmcm9tIEFuZ3VsYXIgTFMuXG4gICAgICByZXR1cm4gdHNMUy5nZXRUeXBlRGVmaW5pdGlvbkF0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uKSA/P1xuICAgICAgICAgIG5nTFMuZ2V0VHlwZURlZmluaXRpb25BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbihcbiAgICAgIGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOiB0cy5EZWZpbml0aW9uSW5mb0FuZEJvdW5kU3Bhbnx1bmRlZmluZWQge1xuICAgIGlmIChhbmd1bGFyT25seSkge1xuICAgICAgcmV0dXJuIG5nTFMuZ2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbihmaWxlTmFtZSwgcG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBUUyBjb3VsZCBhbnN3ZXIgdGhlIHF1ZXJ5LCB0aGVuIHJldHVybiB0aGF0IHJlc3VsdC4gT3RoZXJ3aXNlLCByZXR1cm4gZnJvbSBBbmd1bGFyIExTLlxuICAgICAgcmV0dXJuIHRzTFMuZ2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbihmaWxlTmFtZSwgcG9zaXRpb24pID8/XG4gICAgICAgICAgbmdMUy5nZXREZWZpbml0aW9uQW5kQm91bmRTcGFuKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlc0F0UG9zaXRpb24oZmlsZU5hbWU6IHN0cmluZywgcG9zaXRpb246IG51bWJlcik6IHRzLlJlZmVyZW5jZUVudHJ5W118XG4gICAgICB1bmRlZmluZWQge1xuICAgIHJldHVybiBuZ0xTLmdldFJlZmVyZW5jZXNBdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kUmVuYW1lTG9jYXRpb25zKFxuICAgICAgZmlsZU5hbWU6IHN0cmluZywgcG9zaXRpb246IG51bWJlciwgZmluZEluU3RyaW5nczogYm9vbGVhbiwgZmluZEluQ29tbWVudHM6IGJvb2xlYW4sXG4gICAgICBwcm92aWRlUHJlZml4QW5kU3VmZml4VGV4dEZvclJlbmFtZT86IGJvb2xlYW4pOiByZWFkb25seSB0cy5SZW5hbWVMb2NhdGlvbltdfHVuZGVmaW5lZCB7XG4gICAgLy8gVE9ETyhhdHNjb3R0KTogaW1wbGVtZW50XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbXBsZXRpb25zQXRQb3NpdGlvbihcbiAgICAgIGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgICBvcHRpb25zOiB0cy5HZXRDb21wbGV0aW9uc0F0UG9zaXRpb25PcHRpb25zKTogdHMuV2l0aE1ldGFkYXRhPHRzLkNvbXBsZXRpb25JbmZvPnx1bmRlZmluZWQge1xuICAgIGlmIChhbmd1bGFyT25seSkge1xuICAgICAgcmV0dXJuIG5nTFMuZ2V0Q29tcGxldGlvbnNBdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIFRTIGNvdWxkIGFuc3dlciB0aGUgcXVlcnksIHRoZW4gcmV0dXJuIHRoYXQgcmVzdWx0LiBPdGhlcndpc2UsIHJldHVybiBmcm9tIEFuZ3VsYXIgTFMuXG4gICAgICByZXR1cm4gdHNMUy5nZXRDb21wbGV0aW9uc0F0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uLCBvcHRpb25zKSA/P1xuICAgICAgICAgIG5nTFMuZ2V0Q29tcGxldGlvbnNBdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q29tcGxldGlvbkVudHJ5RGV0YWlscyhcbiAgICAgIGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIsIGVudHJ5TmFtZTogc3RyaW5nLFxuICAgICAgZm9ybWF0T3B0aW9uczogdHMuRm9ybWF0Q29kZU9wdGlvbnN8dHMuRm9ybWF0Q29kZVNldHRpbmdzfHVuZGVmaW5lZCwgc291cmNlOiBzdHJpbmd8dW5kZWZpbmVkLFxuICAgICAgcHJlZmVyZW5jZXM6IHRzLlVzZXJQcmVmZXJlbmNlc3x1bmRlZmluZWQpOiB0cy5Db21wbGV0aW9uRW50cnlEZXRhaWxzfHVuZGVmaW5lZCB7XG4gICAgaWYgKGFuZ3VsYXJPbmx5KSB7XG4gICAgICByZXR1cm4gbmdMUy5nZXRDb21wbGV0aW9uRW50cnlEZXRhaWxzKFxuICAgICAgICAgIGZpbGVOYW1lLCBwb3NpdGlvbiwgZW50cnlOYW1lLCBmb3JtYXRPcHRpb25zLCBwcmVmZXJlbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIFRTIGNvdWxkIGFuc3dlciB0aGUgcXVlcnksIHRoZW4gcmV0dXJuIHRoYXQgcmVzdWx0LiBPdGhlcndpc2UsIHJldHVybiBmcm9tIEFuZ3VsYXIgTFMuXG4gICAgICByZXR1cm4gdHNMUy5nZXRDb21wbGV0aW9uRW50cnlEZXRhaWxzKFxuICAgICAgICAgICAgICAgICBmaWxlTmFtZSwgcG9zaXRpb24sIGVudHJ5TmFtZSwgZm9ybWF0T3B0aW9ucywgc291cmNlLCBwcmVmZXJlbmNlcykgPz9cbiAgICAgICAgICBuZ0xTLmdldENvbXBsZXRpb25FbnRyeURldGFpbHMoZmlsZU5hbWUsIHBvc2l0aW9uLCBlbnRyeU5hbWUsIGZvcm1hdE9wdGlvbnMsIHByZWZlcmVuY2VzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb21wbGV0aW9uRW50cnlTeW1ib2woXG4gICAgICBmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nfHVuZGVmaW5lZCk6IHRzLlN5bWJvbHxcbiAgICAgIHVuZGVmaW5lZCB7XG4gICAgaWYgKGFuZ3VsYXJPbmx5KSB7XG4gICAgICByZXR1cm4gbmdMUy5nZXRDb21wbGV0aW9uRW50cnlTeW1ib2woZmlsZU5hbWUsIHBvc2l0aW9uLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgVFMgY291bGQgYW5zd2VyIHRoZSBxdWVyeSwgdGhlbiByZXR1cm4gdGhhdCByZXN1bHQuIE90aGVyd2lzZSwgcmV0dXJuIGZyb20gQW5ndWxhciBMUy5cbiAgICAgIHJldHVybiB0c0xTLmdldENvbXBsZXRpb25FbnRyeVN5bWJvbChmaWxlTmFtZSwgcG9zaXRpb24sIG5hbWUsIHNvdXJjZSkgPz9cbiAgICAgICAgICBuZ0xTLmdldENvbXBsZXRpb25FbnRyeVN5bWJvbChmaWxlTmFtZSwgcG9zaXRpb24sIG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4udHNMUyxcbiAgICBnZXRTZW1hbnRpY0RpYWdub3N0aWNzLFxuICAgIGdldFR5cGVEZWZpbml0aW9uQXRQb3NpdGlvbixcbiAgICBnZXRRdWlja0luZm9BdFBvc2l0aW9uLFxuICAgIGdldERlZmluaXRpb25BbmRCb3VuZFNwYW4sXG4gICAgZ2V0UmVmZXJlbmNlc0F0UG9zaXRpb24sXG4gICAgZmluZFJlbmFtZUxvY2F0aW9ucyxcbiAgICBnZXRDb21wbGV0aW9uc0F0UG9zaXRpb24sXG4gICAgZ2V0Q29tcGxldGlvbkVudHJ5RGV0YWlscyxcbiAgICBnZXRDb21wbGV0aW9uRW50cnlTeW1ib2wsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbEZpbGVzKHByb2plY3Q6IHRzLnNlcnZlci5Qcm9qZWN0KTogc3RyaW5nW10ge1xuICBpZiAoIXByb2plY3QuaGFzUm9vdHMoKSkge1xuICAgIHJldHVybiBbXTsgIC8vIHByb2plY3QgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXG4gIH1cbiAgY29uc3QgdHlwZWNoZWNrRmlsZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3Qgc2NyaXB0SW5mbyBvZiBwcm9qZWN0LmdldFNjcmlwdEluZm9zKCkpIHtcbiAgICBpZiAoc2NyaXB0SW5mby5zY3JpcHRLaW5kID09PSB0cy5TY3JpcHRLaW5kLkV4dGVybmFsKSB7XG4gICAgICAvLyBzY3JpcHQgaW5mbyBmb3IgdHlwZWNoZWNrIGZpbGUgaXMgbWFya2VkIGFzIGV4dGVybmFsLCBzZWVcbiAgICAgIC8vIGdldE9yQ3JlYXRlVHlwZUNoZWNrU2NyaXB0SW5mbygpIGluXG4gICAgICAvLyBwYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL2l2eS9sYW5ndWFnZV9zZXJ2aWNlLnRzXG4gICAgICB0eXBlY2hlY2tGaWxlcy5wdXNoKHNjcmlwdEluZm8uZmlsZU5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHlwZWNoZWNrRmlsZXM7XG59XG4iXX0=
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNfcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGFuZ3VhZ2Utc2VydmljZS9pdnkvdHNfcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCxtREFBcUQ7SUFDckQsbUZBQW1EO0lBRW5ELFNBQWdCLE1BQU0sQ0FBQyxJQUFnQztRQUM5QyxJQUFBLE9BQU8sR0FBbUMsSUFBSSxRQUF2QyxFQUFtQixJQUFJLEdBQVksSUFBSSxnQkFBaEIsRUFBRSxNQUFNLEdBQUksSUFBSSxPQUFSLENBQVM7UUFDdEQsSUFBTSxXQUFXLEdBQUcsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxNQUFLLElBQUksQ0FBQztRQUVqRCxJQUFNLElBQUksR0FBRyxJQUFJLGtDQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWhELFNBQVMsc0JBQXNCLENBQUMsUUFBZ0I7WUFDOUMsSUFBTSxXQUFXLEdBQW9CLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQixXQUFXLENBQUMsSUFBSSxPQUFoQixXQUFXLG1CQUFTLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRTthQUM1RDtZQUNELFdBQVcsQ0FBQyxJQUFJLE9BQWhCLFdBQVcsbUJBQVMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFFO1lBQzNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7O1lBQ2hFLElBQUksV0FBVyxFQUFFO2dCQUNmLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN4RDtpQkFBTTtnQkFDTCw0RkFBNEY7Z0JBQzVGLGFBQU8sSUFBSSxDQUFD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RUFBRTtvQkFDcEQsNERBQTREO29CQUM1RCxzQ0FBc0M7b0JBQ3RDLG9EQUFvRDtvQkFDcEQsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzFDO2FBQ0Y7Ozs7Ozs7OztRQUNELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFkRCw0Q0FjQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0L2xpYi90c3NlcnZlcmxpYnJhcnknO1xuaW1wb3J0IHtMYW5ndWFnZVNlcnZpY2V9IGZyb20gJy4vbGFuZ3VhZ2Vfc2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoaW5mbzogdHMuc2VydmVyLlBsdWdpbkNyZWF0ZUluZm8pOiB0cy5MYW5ndWFnZVNlcnZpY2Uge1xuICBjb25zdCB7cHJvamVjdCwgbGFuZ3VhZ2VTZXJ2aWNlOiB0c0xTLCBjb25maWd9ID0gaW5mbztcbiAgY29uc3QgYW5ndWxhck9ubHkgPSBjb25maWc/LmFuZ3VsYXJPbmx5ID09PSB0cnVlO1xuXG4gIGNvbnN0IG5nTFMgPSBuZXcgTGFuZ3VhZ2VTZXJ2aWNlKHByb2plY3QsIHRzTFMpO1xuXG4gIGZ1bmN0aW9uIGdldFNlbWFudGljRGlhZ25vc3RpY3MoZmlsZU5hbWU6IHN0cmluZyk6IHRzLkRpYWdub3N0aWNbXSB7XG4gICAgY29uc3QgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICAgIGlmICghYW5ndWxhck9ubHkpIHtcbiAgICAgIGRpYWdub3N0aWNzLnB1c2goLi4udHNMUy5nZXRTZW1hbnRpY0RpYWdub3N0aWNzKGZpbGVOYW1lKSk7XG4gICAgfVxuICAgIGRpYWdub3N0aWNzLnB1c2goLi4ubmdMUy5nZXRTZW1hbnRpY0RpYWdub3N0aWNzKGZpbGVOYW1lKSk7XG4gICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UXVpY2tJbmZvQXRQb3NpdGlvbihmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKTogdHMuUXVpY2tJbmZvfHVuZGVmaW5lZCB7XG4gICAgaWYgKGFuZ3VsYXJPbmx5KSB7XG4gICAgICByZXR1cm4gbmdMUy5nZXRRdWlja0luZm9BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIFRTIGNvdWxkIGFuc3dlciB0aGUgcXVlcnksIHRoZW4gcmV0dXJuIHRoYXQgcmVzdWx0LiBPdGhlcndpc2UsIHJldHVybiBmcm9tIEFuZ3VsYXIgTFMuXG4gICAgICByZXR1cm4gdHNMUy5nZXRRdWlja0luZm9BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbikgPz9cbiAgICAgICAgICBuZ0xTLmdldFF1aWNrSW5mb0F0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUeXBlRGVmaW5pdGlvbkF0UG9zaXRpb24oXG4gICAgICBmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKTogcmVhZG9ubHkgdHMuRGVmaW5pdGlvbkluZm9bXXx1bmRlZmluZWQge1xuICAgIGlmIChhbmd1bGFyT25seSkge1xuICAgICAgcmV0dXJuIG5nTFMuZ2V0VHlwZURlZmluaXRpb25BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIFRTIGNvdWxkIGFuc3dlciB0aGUgcXVlcnksIHRoZW4gcmV0dXJuIHRoYXQgcmVzdWx0LiBPdGhlcndpc2UsIHJldHVybiBmcm9tIEFuZ3VsYXIgTFMuXG4gICAgICByZXR1cm4gdHNMUy5nZXRUeXBlRGVmaW5pdGlvbkF0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uKSA/P1xuICAgICAgICAgIG5nTFMuZ2V0VHlwZURlZmluaXRpb25BdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbihcbiAgICAgIGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOiB0cy5EZWZpbml0aW9uSW5mb0FuZEJvdW5kU3Bhbnx1bmRlZmluZWQge1xuICAgIGlmIChhbmd1bGFyT25seSkge1xuICAgICAgcmV0dXJuIG5nTFMuZ2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbihmaWxlTmFtZSwgcG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBUUyBjb3VsZCBhbnN3ZXIgdGhlIHF1ZXJ5LCB0aGVuIHJldHVybiB0aGF0IHJlc3VsdC4gT3RoZXJ3aXNlLCByZXR1cm4gZnJvbSBBbmd1bGFyIExTLlxuICAgICAgcmV0dXJuIHRzTFMuZ2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbihmaWxlTmFtZSwgcG9zaXRpb24pID8/XG4gICAgICAgICAgbmdMUy5nZXREZWZpbml0aW9uQW5kQm91bmRTcGFuKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlc0F0UG9zaXRpb24oZmlsZU5hbWU6IHN0cmluZywgcG9zaXRpb246IG51bWJlcik6IHRzLlJlZmVyZW5jZUVudHJ5W118XG4gICAgICB1bmRlZmluZWQge1xuICAgIHJldHVybiBuZ0xTLmdldFJlZmVyZW5jZXNBdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kUmVuYW1lTG9jYXRpb25zKFxuICAgICAgZmlsZU5hbWU6IHN0cmluZywgcG9zaXRpb246IG51bWJlciwgZmluZEluU3RyaW5nczogYm9vbGVhbiwgZmluZEluQ29tbWVudHM6IGJvb2xlYW4sXG4gICAgICBwcm92aWRlUHJlZml4QW5kU3VmZml4VGV4dEZvclJlbmFtZT86IGJvb2xlYW4pOiByZWFkb25seSB0cy5SZW5hbWVMb2NhdGlvbltdfHVuZGVmaW5lZCB7XG4gICAgLy8gVE9ETyhhdHNjb3R0KTogaW1wbGVtZW50XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbXBsZXRpb25zQXRQb3NpdGlvbihcbiAgICAgIGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgICBvcHRpb25zOiB0cy5HZXRDb21wbGV0aW9uc0F0UG9zaXRpb25PcHRpb25zKTogdHMuV2l0aE1ldGFkYXRhPHRzLkNvbXBsZXRpb25JbmZvPnx1bmRlZmluZWQge1xuICAgIGlmIChhbmd1bGFyT25seSkge1xuICAgICAgcmV0dXJuIG5nTFMuZ2V0Q29tcGxldGlvbnNBdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIFRTIGNvdWxkIGFuc3dlciB0aGUgcXVlcnksIHRoZW4gcmV0dXJuIHRoYXQgcmVzdWx0LiBPdGhlcndpc2UsIHJldHVybiBmcm9tIEFuZ3VsYXIgTFMuXG4gICAgICByZXR1cm4gdHNMUy5nZXRDb21wbGV0aW9uc0F0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uLCBvcHRpb25zKSA/P1xuICAgICAgICAgIG5nTFMuZ2V0Q29tcGxldGlvbnNBdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q29tcGxldGlvbkVudHJ5RGV0YWlscyhcbiAgICAgIGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIsIGVudHJ5TmFtZTogc3RyaW5nLFxuICAgICAgZm9ybWF0T3B0aW9uczogdHMuRm9ybWF0Q29kZU9wdGlvbnN8dHMuRm9ybWF0Q29kZVNldHRpbmdzfHVuZGVmaW5lZCwgc291cmNlOiBzdHJpbmd8dW5kZWZpbmVkLFxuICAgICAgcHJlZmVyZW5jZXM6IHRzLlVzZXJQcmVmZXJlbmNlc3x1bmRlZmluZWQpOiB0cy5Db21wbGV0aW9uRW50cnlEZXRhaWxzfHVuZGVmaW5lZCB7XG4gICAgaWYgKGFuZ3VsYXJPbmx5KSB7XG4gICAgICByZXR1cm4gbmdMUy5nZXRDb21wbGV0aW9uRW50cnlEZXRhaWxzKFxuICAgICAgICAgIGZpbGVOYW1lLCBwb3NpdGlvbiwgZW50cnlOYW1lLCBmb3JtYXRPcHRpb25zLCBwcmVmZXJlbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIFRTIGNvdWxkIGFuc3dlciB0aGUgcXVlcnksIHRoZW4gcmV0dXJuIHRoYXQgcmVzdWx0LiBPdGhlcndpc2UsIHJldHVybiBmcm9tIEFuZ3VsYXIgTFMuXG4gICAgICByZXR1cm4gdHNMUy5nZXRDb21wbGV0aW9uRW50cnlEZXRhaWxzKFxuICAgICAgICAgICAgICAgICBmaWxlTmFtZSwgcG9zaXRpb24sIGVudHJ5TmFtZSwgZm9ybWF0T3B0aW9ucywgc291cmNlLCBwcmVmZXJlbmNlcykgPz9cbiAgICAgICAgICBuZ0xTLmdldENvbXBsZXRpb25FbnRyeURldGFpbHMoZmlsZU5hbWUsIHBvc2l0aW9uLCBlbnRyeU5hbWUsIGZvcm1hdE9wdGlvbnMsIHByZWZlcmVuY2VzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb21wbGV0aW9uRW50cnlTeW1ib2woXG4gICAgICBmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nfHVuZGVmaW5lZCk6IHRzLlN5bWJvbHxcbiAgICAgIHVuZGVmaW5lZCB7XG4gICAgaWYgKGFuZ3VsYXJPbmx5KSB7XG4gICAgICByZXR1cm4gbmdMUy5nZXRDb21wbGV0aW9uRW50cnlTeW1ib2woZmlsZU5hbWUsIHBvc2l0aW9uLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgVFMgY291bGQgYW5zd2VyIHRoZSBxdWVyeSwgdGhlbiByZXR1cm4gdGhhdCByZXN1bHQuIE90aGVyd2lzZSwgcmV0dXJuIGZyb20gQW5ndWxhciBMUy5cbiAgICAgIHJldHVybiB0c0xTLmdldENvbXBsZXRpb25FbnRyeVN5bWJvbChmaWxlTmFtZSwgcG9zaXRpb24sIG5hbWUsIHNvdXJjZSkgPz9cbiAgICAgICAgICBuZ0xTLmdldENvbXBsZXRpb25FbnRyeVN5bWJvbChmaWxlTmFtZSwgcG9zaXRpb24sIG5hbWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0cyBnbG9iYWwgZGlhZ25vc3RpY3MgcmVsYXRlZCB0byB0aGUgcHJvZ3JhbSBjb25maWd1cmF0aW9uIGFuZCBjb21waWxlciBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0Q29tcGlsZXJPcHRpb25zRGlhZ25vc3RpY3MoKTogdHMuRGlhZ25vc3RpY1tdIHtcbiAgICBjb25zdCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdID0gW107XG4gICAgaWYgKCFhbmd1bGFyT25seSkge1xuICAgICAgZGlhZ25vc3RpY3MucHVzaCguLi50c0xTLmdldENvbXBpbGVyT3B0aW9uc0RpYWdub3N0aWNzKCkpO1xuICAgIH1cbiAgICBkaWFnbm9zdGljcy5wdXNoKC4uLm5nTFMuZ2V0Q29tcGlsZXJPcHRpb25zRGlhZ25vc3RpY3MoKSk7XG4gICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi50c0xTLFxuICAgIGdldFNlbWFudGljRGlhZ25vc3RpY3MsXG4gICAgZ2V0VHlwZURlZmluaXRpb25BdFBvc2l0aW9uLFxuICAgIGdldFF1aWNrSW5mb0F0UG9zaXRpb24sXG4gICAgZ2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbixcbiAgICBnZXRSZWZlcmVuY2VzQXRQb3NpdGlvbixcbiAgICBmaW5kUmVuYW1lTG9jYXRpb25zLFxuICAgIGdldENvbXBsZXRpb25zQXRQb3NpdGlvbixcbiAgICBnZXRDb21wbGV0aW9uRW50cnlEZXRhaWxzLFxuICAgIGdldENvbXBsZXRpb25FbnRyeVN5bWJvbCxcbiAgICBnZXRDb21waWxlck9wdGlvbnNEaWFnbm9zdGljcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVybmFsRmlsZXMocHJvamVjdDogdHMuc2VydmVyLlByb2plY3QpOiBzdHJpbmdbXSB7XG4gIGlmICghcHJvamVjdC5oYXNSb290cygpKSB7XG4gICAgcmV0dXJuIFtdOyAgLy8gcHJvamVjdCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWRcbiAgfVxuICBjb25zdCB0eXBlY2hlY2tGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzY3JpcHRJbmZvIG9mIHByb2plY3QuZ2V0U2NyaXB0SW5mb3MoKSkge1xuICAgIGlmIChzY3JpcHRJbmZvLnNjcmlwdEtpbmQgPT09IHRzLlNjcmlwdEtpbmQuRXh0ZXJuYWwpIHtcbiAgICAgIC8vIHNjcmlwdCBpbmZvIGZvciB0eXBlY2hlY2sgZmlsZSBpcyBtYXJrZWQgYXMgZXh0ZXJuYWwsIHNlZVxuICAgICAgLy8gZ2V0T3JDcmVhdGVUeXBlQ2hlY2tTY3JpcHRJbmZvKCkgaW5cbiAgICAgIC8vIHBhY2thZ2VzL2xhbmd1YWdlLXNlcnZpY2UvaXZ5L2xhbmd1YWdlX3NlcnZpY2UudHNcbiAgICAgIHR5cGVjaGVja0ZpbGVzLnB1c2goc2NyaXB0SW5mby5maWxlTmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0eXBlY2hlY2tGaWxlcztcbn1cbiJdfQ==
|
package/ivy/utils.d.ts
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { AbsoluteSourceSpan, ParseSourceSpan } from '@angular/compiler';
|
|
10
10
|
import { NgCompiler } from '@angular/compiler-cli/src/ngtsc/core';
|
|
11
|
-
import {
|
|
11
|
+
import { AbsoluteFsPath } from '@angular/compiler-cli/src/ngtsc/file_system';
|
|
12
|
+
import { DirectiveSymbol, TemplateTypeChecker } from '@angular/compiler-cli/src/ngtsc/typecheck/api';
|
|
12
13
|
import * as e from '@angular/compiler/src/expression_parser/ast';
|
|
13
14
|
import * as t from '@angular/compiler/src/render3/r3_ast';
|
|
14
15
|
import * as ts from 'typescript';
|
|
@@ -19,6 +20,7 @@ interface NodeWithKeyAndValue extends t.Node {
|
|
|
19
20
|
valueSpan?: ParseSourceSpan;
|
|
20
21
|
}
|
|
21
22
|
export declare function isTemplateNodeWithKeyAndValue(node: t.Node | e.AST): node is NodeWithKeyAndValue;
|
|
23
|
+
export declare function isWithinKey(position: number, node: NodeWithKeyAndValue): boolean;
|
|
22
24
|
export declare function isWithinKeyValue(position: number, node: NodeWithKeyAndValue): boolean;
|
|
23
25
|
export declare function isTemplateNode(node: t.Node | e.AST): node is t.Node;
|
|
24
26
|
export declare function isExpressionNode(node: t.Node | e.AST): node is e.AST;
|
|
@@ -69,4 +71,12 @@ export declare function flatMap<T, R>(items: T[] | readonly T[], f: (item: T) =>
|
|
|
69
71
|
export declare function isTypeScriptFile(fileName: string): boolean;
|
|
70
72
|
export declare function isExternalTemplate(fileName: string): boolean;
|
|
71
73
|
export declare function isWithin(position: number, span: AbsoluteSourceSpan | ParseSourceSpan): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* For a given location in a shim file, retrieves the corresponding file url for the template and
|
|
76
|
+
* the span in the template.
|
|
77
|
+
*/
|
|
78
|
+
export declare function getTemplateLocationFromShimLocation(templateTypeChecker: TemplateTypeChecker, shimPath: AbsoluteFsPath, positionInShimFile: number): {
|
|
79
|
+
templateUrl: AbsoluteFsPath;
|
|
80
|
+
span: ParseSourceSpan;
|
|
81
|
+
} | null;
|
|
72
82
|
export {};
|