@angular/language-service 11.2.1 → 11.2.5
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/api.d.ts +20 -2
- package/api.js +6 -1
- package/bundles/ivy.js +21261 -20480
- package/bundles/language-service.js +359 -385
- package/ivy/attribute_completions.d.ts +1 -1
- package/ivy/attribute_completions.js +5 -5
- package/ivy/completions.d.ts +9 -5
- package/ivy/completions.js +71 -18
- package/ivy/language_service.d.ts +11 -2
- package/ivy/language_service.js +141 -79
- package/ivy/references.js +8 -3
- package/ivy/ts_plugin.js +2 -2
- package/ivy/ts_utils.d.ts +22 -0
- package/ivy/ts_utils.js +51 -2
- package/package.json +1 -1
- package/src/completions.js +2 -2
- package/src/html_info.js +3 -3
|
@@ -148,7 +148,7 @@ export declare type AttributeCompletion = DomAttributeCompletion | DomPropertyCo
|
|
|
148
148
|
* input shares the same name as a DOM attribute, the `Map` will reflect the directive input
|
|
149
149
|
* completion, not the DOM completion for that name.
|
|
150
150
|
*/
|
|
151
|
-
export declare function buildAttributeCompletionTable(component: ts.ClassDeclaration, element: TmplAstElement | TmplAstTemplate, checker: TemplateTypeChecker): Map<string, AttributeCompletion>;
|
|
151
|
+
export declare function buildAttributeCompletionTable(component: ts.ClassDeclaration, element: TmplAstElement | TmplAstTemplate, checker: TemplateTypeChecker, includeDomSchemaAttributes: boolean): Map<string, AttributeCompletion>;
|
|
152
152
|
/**
|
|
153
153
|
* Given an `AttributeCompletion`, add any available completions to a `ts.CompletionEntry` array of
|
|
154
154
|
* results.
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
* input shares the same name as a DOM attribute, the `Map` will reflect the directive input
|
|
75
75
|
* completion, not the DOM completion for that name.
|
|
76
76
|
*/
|
|
77
|
-
function buildAttributeCompletionTable(component, element, checker) {
|
|
77
|
+
function buildAttributeCompletionTable(component, element, checker, includeDomSchemaAttributes) {
|
|
78
78
|
var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e, e_6, _f, e_7, _g, e_8, _h;
|
|
79
79
|
var table = new Map();
|
|
80
80
|
// Use the `ElementSymbol` or `TemplateSymbol` to iterate over directives present on the node, and
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
}
|
|
99
99
|
try {
|
|
100
100
|
for (var _l = (e_2 = void 0, tslib_1.__values(meta.inputs)), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
101
|
-
var _o = tslib_1.__read(_m.value, 2),
|
|
101
|
+
var _o = tslib_1.__read(_m.value, 2), classPropertyName = _o[0], propertyName = _o[1];
|
|
102
102
|
if (table.has(propertyName)) {
|
|
103
103
|
continue;
|
|
104
104
|
}
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
}
|
|
121
121
|
try {
|
|
122
122
|
for (var _p = (e_3 = void 0, tslib_1.__values(meta.outputs)), _q = _p.next(); !_q.done; _q = _p.next()) {
|
|
123
|
-
var _r = tslib_1.__read(_q.value, 2),
|
|
123
|
+
var _r = tslib_1.__read(_q.value, 2), classPropertyName = _r[0], propertyName = _r[1];
|
|
124
124
|
if (table.has(propertyName)) {
|
|
125
125
|
continue;
|
|
126
126
|
}
|
|
@@ -281,7 +281,7 @@
|
|
|
281
281
|
}
|
|
282
282
|
}
|
|
283
283
|
// Finally, add any DOM attributes not already covered by inputs.
|
|
284
|
-
if (element instanceof compiler_1.TmplAstElement) {
|
|
284
|
+
if (element instanceof compiler_1.TmplAstElement && includeDomSchemaAttributes) {
|
|
285
285
|
try {
|
|
286
286
|
for (var _v = tslib_1.__values(checker.getPotentialDomBindings(element.name)), _w = _v.next(); !_w.done; _w = _v.next()) {
|
|
287
287
|
var _x = _w.value, attribute = _x.attribute, property = _x.property;
|
|
@@ -559,4 +559,4 @@
|
|
|
559
559
|
return structuralAttributes;
|
|
560
560
|
}
|
|
561
561
|
});
|
|
562
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlX2NvbXBsZXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGFuZ3VhZ2Utc2VydmljZS9pdnkvYXR0cmlidXRlX2NvbXBsZXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCw4Q0FBZ0c7SUFFaEcsK0JBQWlDO0lBRWpDLDZFQUE4RjtJQUM5Riw2REFBNEM7SUFFNUM7O09BRUc7SUFDSCxJQUFZLHVCQXNDWDtJQXRDRCxXQUFZLHVCQUF1QjtRQUNqQzs7OztXQUlHO1FBQ0gscUZBQVksQ0FBQTtRQUVaOzs7OztXQUtHO1FBQ0gsbUZBQVcsQ0FBQTtRQUVYOztXQUVHO1FBQ0gsaUdBQWtCLENBQUE7UUFFbEI7OztXQUdHO1FBQ0gscUhBQTRCLENBQUE7UUFFNUI7OztXQUdHO1FBQ0gseUZBQWMsQ0FBQTtRQUVkOzs7V0FHRztRQUNILDJGQUFlLENBQUE7SUFDakIsQ0FBQyxFQXRDVyx1QkFBdUIsR0FBdkIsK0JBQXVCLEtBQXZCLCtCQUF1QixRQXNDbEM7SUE4R0Q7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFNBQWdCLDZCQUE2QixDQUN6QyxTQUE4QixFQUFFLE9BQXVDLEVBQ3ZFLE9BQTRCOztRQUM5QixJQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUVyRCxrR0FBa0c7UUFDbEcsK0VBQStFO1FBQy9FLElBQU0sTUFBTSxHQUNSLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBbUMsQ0FBQztRQUNsRixJQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBQ3pELElBQUksTUFBTSxLQUFLLElBQUksRUFBRTs7Z0JBQ25CLHdGQUF3RjtnQkFDeEYsZ0RBQWdEO2dCQUNoRCxLQUF3QixJQUFBLEtBQUEsaUJBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQSxnQkFB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bnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtDc3NTZWxlY3RvciwgU2VsZWN0b3JNYXRjaGVyLCBUbXBsQXN0RWxlbWVudCwgVG1wbEFzdFRlbXBsYXRlfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge0RpcmVjdGl2ZUluU2NvcGUsIEVsZW1lbnRTeW1ib2wsIFRlbXBsYXRlU3ltYm9sLCBUZW1wbGF0ZVR5cGVDaGVja2VyLCBUeXBlQ2hlY2thYmxlRGlyZWN0aXZlTWV0YX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svYXBpJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Rpc3BsYXlJbmZvS2luZCwgdW5zYWZlQ2FzdERpc3BsYXlJbmZvS2luZFRvU2NyaXB0RWxlbWVudEtpbmR9IGZyb20gJy4vZGlzcGxheV9wYXJ0cyc7XG5pbXBvcnQge21ha2VFbGVtZW50U2VsZWN0b3J9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIERpZmZlcmVudGlhdGVzIGRpZmZlcmVudCBraW5kcyBvZiBgQXR0cmlidXRlQ29tcGxldGlvbmBzLlxuICovXG5leHBvcnQgZW51bSBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZCB7XG4gIC8qKlxuICAgKiBDb21wbGV0aW9uIG9mIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBIVE1MIHNjaGVtYS5cbiAgICpcbiAgICogQXR0cmlidXRlcyBvZnRlbiBoYXZlIGEgY29ycmVzcG9uZGluZyBET00gcHJvcGVydHkgb2YgdGhlIHNhbWUgbmFtZS5cbiAgICovXG4gIERvbUF0dHJpYnV0ZSxcblxuICAvKipcbiAgICogQ29tcGxldGlvbiBvZiBhIHByb3BlcnR5IGZyb20gdGhlIERPTSBzY2hlbWEuXG4gICAqXG4gICAqIGBEb21Qcm9wZXJ0eWAgY29tcGxldGlvbnMgYXJlIGdlbmVyYXRlZCBvbmx5IGZvciBwcm9wZXJ0aWVzIHdoaWNoIGRvbid0IHNoYXJlIHRoZWlyIG5hbWUgd2l0aFxuICAgKiBhbiBIVE1MIGF0dHJpYnV0ZS5cbiAgICovXG4gIERvbVByb3BlcnR5LFxuXG4gIC8qKlxuICAgKiBDb21wbGV0aW9uIG9mIGFuIGF0dHJpYnV0ZSB0aGF0IHJlc3VsdHMgaW4gYSBuZXcgZGlyZWN0aXZlIGJlaW5nIG1hdGNoZWQgb24gYW4gZWxlbWVudC5cbiAgICovXG4gIERpcmVjdGl2ZUF0dHJpYnV0ZSxcblxuICAvKipcbiAgICogQ29tcGxldGlvbiBvZiBhbiBhdHRyaWJ1dGUgdGhhdCByZXN1bHRzIGluIGEgbmV3IHN0cnVjdHVyYWwgZGlyZWN0aXZlIGJlaW5nIG1hdGNoZWQgb24gYW5cbiAgICogZWxlbWVudC5cbiAgICovXG4gIFN0cnVjdHVyYWxEaXJlY3RpdmVBdHRyaWJ1dGUsXG5cbiAgLyoqXG4gICAqIENvbXBsZXRpb24gb2YgYW4gaW5wdXQgZnJvbSBhIGRpcmVjdGl2ZSB3aGljaCBpcyBlaXRoZXIgcHJlc2VudCBvbiB0aGUgZWxlbWVudCwgb3IgYmVjb21lc1xuICAgKiBwcmVzZW50IGFmdGVyIHRoZSBhZGRpdGlvbiBvZiB0aGlzIGF0dHJpYnV0ZS5cbiAgICovXG4gIERpcmVjdGl2ZUlucHV0LFxuXG4gIC8qKlxuICAgKiBDb21wbGV0aW9uIG9mIGFuIG91dHB1dCBmcm9tIGEgZGlyZWN0aXZlIHdoaWNoIGlzIGVpdGhlciBwcmVzZW50IG9uIHRoZSBlbGVtZW50LCBvciBiZWNvbWVzXG4gICAqIHByZXNlbnQgYWZ0ZXIgdGhlIGFkZGl0aW9uIG9mIHRoaXMgYXR0cmlidXRlLlxuICAgKi9cbiAgRGlyZWN0aXZlT3V0cHV0LFxufVxuXG4vKipcbiAqIENvbXBsZXRpb24gb2YgYW4gYXR0cmlidXRlIGZyb20gdGhlIERPTSBzY2hlbWEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9tQXR0cmlidXRlQ29tcGxldGlvbiB7XG4gIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRvbUF0dHJpYnV0ZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgSFRNTCBhdHRyaWJ1dGUgKG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIERPTSBwcm9wZXJ0eSBuYW1lKS5cbiAgICovXG4gIGF0dHJpYnV0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgYXR0cmlidXRlIGlzIGFsc28gYSBET00gcHJvcGVydHkuXG4gICAqL1xuICBpc0Fsc29Qcm9wZXJ0eTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb21wbGV0aW9uIG9mIGEgRE9NIHByb3BlcnR5IG9mIGFuIGVsZW1lbnQgdGhhdCdzIGRpc3RpbmN0IGZyb20gYW4gSFRNTCBhdHRyaWJ1dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9tUHJvcGVydHlDb21wbGV0aW9uIHtcbiAga2luZDogQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRG9tUHJvcGVydHk7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIERPTSBwcm9wZXJ0eVxuICAgKi9cbiAgcHJvcGVydHk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21wbGV0aW9uIG9mIGFuIGF0dHJpYnV0ZSB3aGljaCByZXN1bHRzIGluIGEgbmV3IGRpcmVjdGl2ZSBiZWluZyBtYXRjaGVkIG9uIGFuIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aXZlQXR0cmlidXRlQ29tcGxldGlvbiB7XG4gIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZUF0dHJpYnV0ZXxcbiAgICAgIEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLlN0cnVjdHVyYWxEaXJlY3RpdmVBdHRyaWJ1dGU7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB3aG9zZSBhZGRpdGlvbiBjYXVzZXMgdGhpcyBkaXJlY3RpdmUgdG8gbWF0Y2ggdGhlIGVsZW1lbnQuXG4gICAqL1xuICBhdHRyaWJ1dGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGl2ZSB3aG9zZSBzZWxlY3RvciBnYXZlIHJpc2UgdG8gdGhpcyBjb21wbGV0aW9uLlxuICAgKi9cbiAgZGlyZWN0aXZlOiBEaXJlY3RpdmVJblNjb3BlO1xufVxuXG4vKipcbiAqIENvbXBsZXRpb24gb2YgYW4gaW5wdXQgb2YgYSBkaXJlY3RpdmUgd2hpY2ggbWF5IGVpdGhlciBiZSBwcmVzZW50IG9uIHRoZSBlbGVtZW50LCBvciBiZWNvbWVcbiAqIHByZXNlbnQgd2hlbiBhIGJpbmRpbmcgdG8gdGhpcyBpbnB1dCBpcyBhZGRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RpdmVJbnB1dENvbXBsZXRpb24ge1xuICBraW5kOiBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5EaXJlY3RpdmVJbnB1dDtcblxuICAvKipcbiAgICogVGhlIHB1YmxpYyBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBpbnB1dCAodGhlIG5hbWUgd2hpY2ggd291bGQgYmUgdXNlZCBpbiBhbnkgYmluZGluZyB0byB0aGF0XG4gICAqIGlucHV0KS5cbiAgICovXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aXZlIHdoaWNoIGhhcyB0aGlzIGlucHV0LlxuICAgKi9cbiAgZGlyZWN0aXZlOiBEaXJlY3RpdmVJblNjb3BlO1xuXG4gIC8qKlxuICAgKiBUaGUgZmllbGQgbmFtZSBvbiB0aGUgZGlyZWN0aXZlIGNsYXNzIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoaXMgaW5wdXQuXG4gICAqXG4gICAqIEN1cnJlbnRseSwgaW4gdGhlIGNhc2Ugd2hlcmUgYSBzaW5nbGUgcHJvcGVydHkgbmFtZSBjb3JyZXNwb25kcyB0byBtdWx0aXBsZSBpbnB1dCBmaWVsZHMsIG9ubHlcbiAgICogdGhlIGZpcnN0IHN1Y2ggZmllbGQgaXMgcmVwcmVzZW50ZWQgaGVyZS4gSW4gdGhlIGZ1dHVyZSBtdWx0aXBsZSByZXN1bHRzIG1heSBiZSB3YXJyYW50ZWQuXG4gICAqL1xuICBjbGFzc1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaW5wdXQgY2FuIGJlIHVzZWQgd2l0aCB0d28td2F5IGJpbmRpbmcgKHRoYXQgaXMsIHdoZXRoZXIgYSBjb3JyZXNwb25kaW5nIGNoYW5nZVxuICAgKiBvdXRwdXQgZXhpc3RzIG9uIHRoZSBkaXJlY3RpdmUpLlxuICAgKi9cbiAgdHdvV2F5QmluZGluZ1N1cHBvcnRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RpdmVPdXRwdXRDb21wbGV0aW9uIHtcbiAga2luZDogQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRGlyZWN0aXZlT3V0cHV0O1xuXG4gIC8qKlxuICAgKiBUaGUgcHVibGljIGV2ZW50IG5hbWUgb2YgdGhlIG91dHB1dCAodGhlIG5hbWUgd2hpY2ggd291bGQgYmUgdXNlZCBpbiBhbnkgYmluZGluZyB0byB0aGF0XG4gICAqIG91dHB1dCkuXG4gICAqL1xuICBldmVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICpUaGUgZGlyZWN0aXZlIHdoaWNoIGhhcyB0aGlzIG91dHB1dC5cbiAgICovXG4gIGRpcmVjdGl2ZTogRGlyZWN0aXZlSW5TY29wZTtcblxuICAvKipcbiAgICogVGhlIGZpZWxkIG5hbWUgb24gdGhlIGRpcmVjdGl2ZSBjbGFzcyB3aGljaCBjb3JyZXNwb25kcyB0byB0aGlzIG91dHB1dC5cbiAgICovXG4gIGNsYXNzUHJvcGVydHlOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW55IG5hbWVkIGF0dHJpYnV0ZSB3aGljaCBpcyBhdmFpbGFibGUgZm9yIGNvbXBsZXRpb24gb24gYSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIERpc2FtYmlndWF0ZWQgYnkgdGhlIGBraW5kYCBwcm9wZXJ0eSBpbnRvIHZhcmlvdXMgdHlwZXMgb2YgY29tcGxldGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIEF0dHJpYnV0ZUNvbXBsZXRpb24gPSBEb21BdHRyaWJ1dGVDb21wbGV0aW9ufERvbVByb3BlcnR5Q29tcGxldGlvbnxcbiAgICBEaXJlY3RpdmVBdHRyaWJ1dGVDb21wbGV0aW9ufERpcmVjdGl2ZUlucHV0Q29tcGxldGlvbnxEaXJlY3RpdmVPdXRwdXRDb21wbGV0aW9uO1xuXG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQgYW5kIGl0cyBjb250ZXh0LCBwcm9kdWNlIGEgYE1hcGAgb2YgYWxsIHBvc3NpYmxlIGF0dHJpYnV0ZSBjb21wbGV0aW9ucy5cbiAqXG4gKiAzIGtpbmRzIG9mIGF0dHJpYnV0ZXMgYXJlIGNvbnNpZGVyZWQgZm9yIGNvbXBsZXRpb24sIGZyb20gaGlnaGVzdCB0byBsb3dlc3QgcHJpb3JpdHk6XG4gKlxuICogMS4gSW5wdXRzL291dHB1dHMgb2YgZGlyZWN0aXZlcyBwcmVzZW50IG9uIHRoZSBlbGVtZW50IGFscmVhZHkuXG4gKiAyLiBJbnB1dHMvb3V0cHV0cyBvZiBkaXJlY3RpdmVzIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBlbGVtZW50LCBidXQgd2hpY2ggd291bGQgYmVjb21lXG4gKiAgICBwcmVzZW50IGlmIHN1Y2ggYSBiaW5kaW5nIGlzIGFkZGVkLlxuICogMy4gQXR0cmlidXRlcyBmcm9tIHRoZSBET00gc2NoZW1hIGZvciB0aGUgZWxlbWVudC5cbiAqXG4gKiBUaGUgcHJpb3JpdHkgb2YgdGhlc2Ugb3B0aW9ucyBkZXRlcm1pbmVzIHdoaWNoIGNvbXBsZXRpb25zIGFyZSBhZGRlZCB0byB0aGUgYE1hcGAuIElmIGEgZGlyZWN0aXZlXG4gKiBpbnB1dCBzaGFyZXMgdGhlIHNhbWUgbmFtZSBhcyBhIERPTSBhdHRyaWJ1dGUsIHRoZSBgTWFwYCB3aWxsIHJlZmxlY3QgdGhlIGRpcmVjdGl2ZSBpbnB1dFxuICogY29tcGxldGlvbiwgbm90IHRoZSBET00gY29tcGxldGlvbiBmb3IgdGhhdCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBdHRyaWJ1dGVDb21wbGV0aW9uVGFibGUoXG4gICAgY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uLCBlbGVtZW50OiBUbXBsQXN0RWxlbWVudHxUbXBsQXN0VGVtcGxhdGUsXG4gICAgY2hlY2tlcjogVGVtcGxhdGVUeXBlQ2hlY2tlcik6IE1hcDxzdHJpbmcsIEF0dHJpYnV0ZUNvbXBsZXRpb24+IHtcbiAgY29uc3QgdGFibGUgPSBuZXcgTWFwPHN0cmluZywgQXR0cmlidXRlQ29tcGxldGlvbj4oKTtcblxuICAvLyBVc2UgdGhlIGBFbGVtZW50U3ltYm9sYCBvciBgVGVtcGxhdGVTeW1ib2xgIHRvIGl0ZXJhdGUgb3ZlciBkaXJlY3RpdmVzIHByZXNlbnQgb24gdGhlIG5vZGUsIGFuZFxuICAvLyB0aGVpciBpbnB1dHMvb3V0cHV0cy4gVGhlc2UgaGF2ZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBvZiBjb21wbGV0aW9uIHJlc3VsdHMuXG4gIGNvbnN0IHN5bWJvbDogRWxlbWVudFN5bWJvbHxUZW1wbGF0ZVN5bWJvbCA9XG4gICAgICBjaGVja2VyLmdldFN5bWJvbE9mTm9kZShlbGVtZW50LCBjb21wb25lbnQpIGFzIEVsZW1lbnRTeW1ib2wgfCBUZW1wbGF0ZVN5bWJvbDtcbiAgY29uc3QgcHJlc2VudERpcmVjdGl2ZXMgPSBuZXcgU2V0PHRzLkNsYXNzRGVjbGFyYXRpb24+KCk7XG4gIGlmIChzeW1ib2wgIT09IG51bGwpIHtcbiAgICAvLyBBbiBgRWxlbWVudFN5bWJvbGAgd2FzIGF2YWlsYWJsZS4gVGhpcyBtZWFucyBpbnB1dHMgYW5kIG91dHB1dHMgZm9yIGRpcmVjdGl2ZXMgb24gdGhlXG4gICAgLy8gZWxlbWVudCBjYW4gYmUgYWRkZWQgdG8gdGhlIGNvbXBsZXRpb24gdGFibGUuXG4gICAgZm9yIChjb25zdCBkaXJTeW1ib2wgb2Ygc3ltYm9sLmRpcmVjdGl2ZXMpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGl2ZSA9IGRpclN5bWJvbC50c1N5bWJvbC52YWx1ZURlY2xhcmF0aW9uO1xuICAgICAgaWYgKCF0cy5pc0NsYXNzRGVjbGFyYXRpb24oZGlyZWN0aXZlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByZXNlbnREaXJlY3RpdmVzLmFkZChkaXJlY3RpdmUpO1xuXG4gICAgICBjb25zdCBtZXRhID0gY2hlY2tlci5nZXREaXJlY3RpdmVNZXRhZGF0YShkaXJlY3RpdmUpO1xuICAgICAgaWYgKG1ldGEgPT09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgY2xhc3NQcm9wZXJ0eU5hbWVdIG9mIG1ldGEuaW5wdXRzKSB7XG4gICAgICAgIGlmICh0YWJsZS5oYXMocHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGUuc2V0KHByb3BlcnR5TmFtZSwge1xuICAgICAgICAgIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZUlucHV0LFxuICAgICAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgICAgICBkaXJlY3RpdmU6IGRpclN5bWJvbCxcbiAgICAgICAgICBjbGFzc1Byb3BlcnR5TmFtZSxcbiAgICAgICAgICB0d29XYXlCaW5kaW5nU3VwcG9ydGVkOiBtZXRhLm91dHB1dHMuaGFzQmluZGluZ1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUgKyAnQ2hhbmdlJyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIGNsYXNzUHJvcGVydHlOYW1lXSBvZiBtZXRhLm91dHB1dHMpIHtcbiAgICAgICAgaWYgKHRhYmxlLmhhcyhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZS5zZXQocHJvcGVydHlOYW1lLCB7XG4gICAgICAgICAga2luZDogQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRGlyZWN0aXZlT3V0cHV0LFxuICAgICAgICAgIGV2ZW50TmFtZTogcHJvcGVydHlOYW1lLFxuICAgICAgICAgIGRpcmVjdGl2ZTogZGlyU3ltYm9sLFxuICAgICAgICAgIGNsYXNzUHJvcGVydHlOYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBOZXh0LCBleHBsb3JlIGh5cG90aGV0aWNhbCBkaXJlY3RpdmVzIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGFkZGl0aW9uIG9mIGFueSBzaW5nbGUgYXR0cmlidXRlc1xuICAvLyBjYW4gY2F1c2UgdGhlIGRpcmVjdGl2ZSB0byBtYXRjaCB0aGUgZWxlbWVudC5cbiAgY29uc3QgZGlyZWN0aXZlc0luU2NvcGUgPSBjaGVja2VyLmdldERpcmVjdGl2ZXNJblNjb3BlKGNvbXBvbmVudCk7XG4gIGlmIChkaXJlY3RpdmVzSW5TY29wZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGVsZW1lbnRTZWxlY3RvciA9IG1ha2VFbGVtZW50U2VsZWN0b3IoZWxlbWVudCk7XG5cbiAgICBmb3IgKGNvbnN0IGRpckluU2NvcGUgb2YgZGlyZWN0aXZlc0luU2NvcGUpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGl2ZSA9IGRpckluU2NvcGUudHNTeW1ib2wudmFsdWVEZWNsYXJhdGlvbjtcbiAgICAgIC8vIFNraXAgZGlyZWN0aXZlcyB0aGF0IGFyZSBwcmVzZW50IG9uIHRoZSBlbGVtZW50LlxuICAgICAgaWYgKCF0cy5pc0NsYXNzRGVjbGFyYXRpb24oZGlyZWN0aXZlKSB8fCBwcmVzZW50RGlyZWN0aXZlcy5oYXMoZGlyZWN0aXZlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWV0YSA9IGNoZWNrZXIuZ2V0RGlyZWN0aXZlTWV0YWRhdGEoZGlyZWN0aXZlKTtcbiAgICAgIGlmIChtZXRhID09PSBudWxsIHx8IG1ldGEuc2VsZWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghbWV0YS5pc1N0cnVjdHVyYWwpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1zdHJ1Y3R1cmFsIGRpcmVjdGl2ZXMsIHRoZSBkaXJlY3RpdmUncyBhdHRyaWJ1dGUgc2VsZWN0b3IocykgYXJlIG1hdGNoZWQgYWdhaW5zdFxuICAgICAgICAvLyBhIGh5cG90aGV0aWNhbCB2ZXJzaW9uIG9mIHRoZSBlbGVtZW50IHdpdGggdGhvc2UgYXR0cmlidXRlcy4gQSBtYXRjaCBpbmRpY2F0ZXMgdGhhdFxuICAgICAgICAvLyBhZGRpbmcgdGhhdCBhdHRyaWJ1dGUvaW5wdXQvb3V0cHV0IGJpbmRpbmcgd291bGQgY2F1c2UgdGhlIGRpcmVjdGl2ZSB0byBiZWNvbWUgcHJlc2VudCxcbiAgICAgICAgLy8gbWVhbmluZyB0aGF0IHN1Y2ggYSBiaW5kaW5nIGlzIGEgdmFsaWQgY29tcGxldGlvbi5cbiAgICAgICAgY29uc3Qgc2VsZWN0b3JzID0gQ3NzU2VsZWN0b3IucGFyc2UobWV0YS5zZWxlY3Rvcik7XG4gICAgICAgIGNvbnN0IG1hdGNoZXIgPSBuZXcgU2VsZWN0b3JNYXRjaGVyKCk7XG4gICAgICAgIG1hdGNoZXIuYWRkU2VsZWN0YWJsZXMoc2VsZWN0b3JzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdG9yIG9mIHNlbGVjdG9ycykge1xuICAgICAgICAgIGZvciAoY29uc3QgW2F0dHJOYW1lLCBhdHRyVmFsdWVdIG9mIHNlbGVjdG9yQXR0cmlidXRlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGlmIChhdHRyVmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgYXR0cmlidXRlIHNlbGVjdG9yIHJlcXVpcmVzIGEgdmFsdWUsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY29tcGxldGlvbi5cbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YWJsZS5oYXMoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgdGhpcyBhdHRyaWJ1dGUgYXMgdGhlcmUncyBhbHJlYWR5IGEgYmluZGluZyBmb3IgaXQuXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGFkZGluZyB0aGlzIGF0dHJpYnV0ZSB3b3VsZCBjYXVzZSB0aGUgZGlyZWN0aXZlIHRvIHN0YXJ0IG1hdGNoaW5nLlxuICAgICAgICAgICAgY29uc3QgbmV3RWxlbWVudFNlbGVjdG9yID0gZWxlbWVudFNlbGVjdG9yICsgYFske2F0dHJOYW1lfV1gO1xuICAgICAgICAgICAgaWYgKCFtYXRjaGVyLm1hdGNoKENzc1NlbGVjdG9yLnBhcnNlKG5ld0VsZW1lbnRTZWxlY3RvcilbMF0sIG51bGwpKSB7XG4gICAgICAgICAgICAgIC8vIE5vcGUsIG1vdmUgb24gd2l0aCBvdXIgbGl2ZXMuXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGRpbmcgdGhpcyBhdHRyaWJ1dGUgY2F1c2VzIGEgbmV3IGRpcmVjdGl2ZSB0byBiZSBtYXRjaGVkLiBEZWNpZGUgaG93IHRvIGNhdGVnb3JpemVcbiAgICAgICAgICAgIC8vIGl0IGJhc2VkIG9uIHRoZSBkaXJlY3RpdmUncyBpbnB1dHMgYW5kIG91dHB1dHMuXG4gICAgICAgICAgICBpZiAobWV0YS5pbnB1dHMuaGFzQmluZGluZ1Byb3BlcnR5TmFtZShhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBhdHRyaWJ1dGUgY29ycmVzcG9uZHMgdG8gYW4gaW5wdXQgYmluZGluZy5cbiAgICAgICAgICAgICAgdGFibGUuc2V0KGF0dHJOYW1lLCB7XG4gICAgICAgICAgICAgICAga2luZDogQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRGlyZWN0aXZlSW5wdXQsXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlOiBkaXJJblNjb3BlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgY2xhc3NQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgICAgICAgICAgIG1ldGEuaW5wdXRzLmdldEJ5QmluZGluZ1Byb3BlcnR5TmFtZShhdHRyTmFtZSkhWzBdLmNsYXNzUHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgIHR3b1dheUJpbmRpbmdTdXBwb3J0ZWQ6IG1ldGEub3V0cHV0cy5oYXNCaW5kaW5nUHJvcGVydHlOYW1lKGF0dHJOYW1lICsgJ0NoYW5nZScpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0YS5vdXRwdXRzLmhhc0JpbmRpbmdQcm9wZXJ0eU5hbWUoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGNvcnJlc3BvbmRzIHRvIGFuIG91dHB1dCBiaW5kaW5nLlxuICAgICAgICAgICAgICB0YWJsZS5zZXQoYXR0ck5hbWUsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5EaXJlY3RpdmVPdXRwdXQsXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlOiBkaXJJblNjb3BlLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZTogYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgY2xhc3NQcm9wZXJ0eU5hbWU6XG4gICAgICAgICAgICAgICAgICAgIG1ldGEub3V0cHV0cy5nZXRCeUJpbmRpbmdQcm9wZXJ0eU5hbWUoYXR0ck5hbWUpIVswXS5jbGFzc1Byb3BlcnR5TmFtZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUaGlzIGF0dHJpYnV0ZSBjYXVzZXMgYSBuZXcgZGlyZWN0aXZlIHRvIGJlIG1hdGNoZWQsIGJ1dCBkb2VzIG5vdCBhbHNvIGNvcnJlc3BvbmRcbiAgICAgICAgICAgICAgLy8gdG8gYW4gaW5wdXQgb3Igb3V0cHV0IGJpbmRpbmcuXG4gICAgICAgICAgICAgIHRhYmxlLnNldChhdHRyTmFtZSwge1xuICAgICAgICAgICAgICAgIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZUF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZTogZGlySW5TY29wZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBIeXBvdGhldGljYWxseSBtYXRjaGluZyBhIHN0cnVjdHVyYWwgZGlyZWN0aXZlIGlzIGEgbGl0bGUgZGlmZmVyZW50IHRoYW4gYSBwbGFpblxuICAgICAgICAvLyBkaXJlY3RpdmUuIFVzZSBvZiB0aGUgJyonIHN0cnVjdHVyYWwgZGlyZWN0aXZlIHN5bnRhY3RpYyBzdWdhciBtZWFucyB0aGF0IHRoZSBhY3R1YWxcbiAgICAgICAgLy8gZGlyZWN0aXZlIGlzIGFwcGxpZWQgdG8gYSBwbGFpbiA8bmctdGVtcGxhdGU+IG5vZGUsIG5vdCB0aGUgZXhpc3RpbmcgZWxlbWVudCB3aXRoIGFueVxuICAgICAgICAvLyBvdGhlciBhdHRyaWJ1dGVzIGl0IG1pZ2h0IGFscmVhZHkgaGF2ZS5cbiAgICAgICAgLy8gQWRkaXRpb25hbGx5LCBtb3JlIHRoYW4gb25lIGF0dHJpYnV0ZS9pbnB1dCBtaWdodCBuZWVkIHRvIGJlIHByZXNlbnQgaW4gb3JkZXIgZm9yIHRoZVxuICAgICAgICAvLyBkaXJlY3RpdmUgdG8gbWF0Y2ggKGUuZy4gYG5nRm9yYCBoYXMgYSBzZWxlY3RvciBvZiBgW25nRm9yXVtuZ0Zvck9mXWApLiBUaGlzIGdldHMgYVxuICAgICAgICAvLyBsaXR0bGUgdHJpY2t5LlxuXG4gICAgICAgIGNvbnN0IHN0cnVjdHVyYWxBdHRyaWJ1dGVzID0gZ2V0U3RydWN0dXJhbEF0dHJpYnV0ZXMobWV0YSk7XG4gICAgICAgIGZvciAoY29uc3QgYXR0ck5hbWUgb2Ygc3RydWN0dXJhbEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICB0YWJsZS5zZXQoYXR0ck5hbWUsIHtcbiAgICAgICAgICAgIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLlN0cnVjdHVyYWxEaXJlY3RpdmVBdHRyaWJ1dGUsXG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgZGlyZWN0aXZlOiBkaXJJblNjb3BlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmluYWxseSwgYWRkIGFueSBET00gYXR0cmlidXRlcyBub3QgYWxyZWFkeSBjb3ZlcmVkIGJ5IGlucHV0cy5cbiAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBUbXBsQXN0RWxlbWVudCkge1xuICAgIGZvciAoY29uc3Qge2F0dHJpYnV0ZSwgcHJvcGVydHl9IG9mIGNoZWNrZXIuZ2V0UG90ZW50aWFsRG9tQmluZGluZ3MoZWxlbWVudC5uYW1lKSkge1xuICAgICAgY29uc3QgaXNBbHNvUHJvcGVydHkgPSBhdHRyaWJ1dGUgPT09IHByb3BlcnR5O1xuICAgICAgaWYgKCF0YWJsZS5oYXMoYXR0cmlidXRlKSkge1xuICAgICAgICB0YWJsZS5zZXQoYXR0cmlidXRlLCB7XG4gICAgICAgICAga2luZDogQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRG9tQXR0cmlidXRlLFxuICAgICAgICAgIGF0dHJpYnV0ZSxcbiAgICAgICAgICBpc0Fsc29Qcm9wZXJ0eSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQWxzb1Byb3BlcnR5ICYmICF0YWJsZS5oYXMocHJvcGVydHkpKSB7XG4gICAgICAgIHRhYmxlLnNldChwcm9wZXJ0eSwge1xuICAgICAgICAgIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRvbVByb3BlcnR5LFxuICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gYEF0dHJpYnV0ZUNvbXBsZXRpb25gLCBhZGQgYW55IGF2YWlsYWJsZSBjb21wbGV0aW9ucyB0byBhIGB0cy5Db21wbGV0aW9uRW50cnlgIGFycmF5IG9mXG4gKiByZXN1bHRzLlxuICpcbiAqIFRoZSBraW5kIG9mIGNvbXBsZXRpb25zIGdlbmVyYXRlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBhbiBhdHRyaWJ1dGUgY29udGV4dFxuICogb3Igbm90LiBGb3IgZXhhbXBsZSwgY29tcGxldGluZyBvbiBgPGVsZW1lbnQgYXR0cnw+YCB3aWxsIGdlbmVyYXRlIHR3byByZXN1bHRzOiBgYXR0cmlidXRlYCBhbmRcbiAqIGBbYXR0cmlidXRlXWAgLSBlaXRoZXIgYSBzdGF0aWMgYXR0cmlidXRlIGNhbiBiZSBnZW5lcmF0ZWQsIG9yIGEgcHJvcGVydHkgYmluZGluZy4gSG93ZXZlcixcbiAqIGA8ZWxlbWVudCBbYXR0cnxdPmAgaXMgbm90IGFuIGF0dHJpYnV0ZSBjb250ZXh0LCBhbmQgc28gb25seSB0aGUgcHJvcGVydHkgY29tcGxldGlvbiBgYXR0cmlidXRlYFxuICogaXMgZ2VuZXJhdGVkLiBOb3RlIHRoYXQgdGhpcyBjb21wbGV0aW9uIGRvZXMgbm90IGhhdmUgdGhlIGBbXWAgcHJvcGVydHkgYmluZGluZyBzdWdhciBhcyBpdHNcbiAqIGltcGxpY2l0bHkgcHJlc2VudCBpbiBhIHByb3BlcnR5IGJpbmRpbmcgY29udGV4dCAod2UncmUgYWxyZWFkeSBjb21wbGV0aW5nIHdpdGhpbiBhbiBgW2F0dHJ8XWBcbiAqIGV4cHJlc3Npb24pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQXR0cmlidXRlQ29tcGxldGlvbkVudHJpZXMoXG4gICAgZW50cmllczogdHMuQ29tcGxldGlvbkVudHJ5W10sIGNvbXBsZXRpb246IEF0dHJpYnV0ZUNvbXBsZXRpb24sIGlzQXR0cmlidXRlQ29udGV4dDogYm9vbGVhbixcbiAgICBpc0VsZW1lbnRDb250ZXh0OiBib29sZWFuLCByZXBsYWNlbWVudFNwYW46IHRzLlRleHRTcGFufHVuZGVmaW5lZCk6IHZvaWQge1xuICBzd2l0Y2ggKGNvbXBsZXRpb24ua2luZCkge1xuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRGlyZWN0aXZlQXR0cmlidXRlOiB7XG4gICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuRElSRUNUSVZFKSxcbiAgICAgICAgbmFtZTogY29tcGxldGlvbi5hdHRyaWJ1dGUsXG4gICAgICAgIHNvcnRUZXh0OiBjb21wbGV0aW9uLmF0dHJpYnV0ZSxcbiAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5TdHJ1Y3R1cmFsRGlyZWN0aXZlQXR0cmlidXRlOiB7XG4gICAgICAvLyBJbiBhbiBlbGVtZW50LCB0aGUgY29tcGxldGlvbiBpcyBvZmZlcmVkIHdpdGggYSBsZWFkaW5nICcqJyB0byBhY3RpdmF0ZSB0aGUgc3RydWN0dXJhbFxuICAgICAgLy8gZGlyZWN0aXZlLiBPbmNlIHByZXNlbnQsIHRoZSBzdHJ1Y3R1cmFsIGF0dHJpYnV0ZSB3aWxsIGJlIHBhcnNlZCBhcyBhIHRlbXBsYXRlIGFuZCBub3QgYW5cbiAgICAgIC8vIGVsZW1lbnQsIGFuZCB0aGUgcHJlZml4IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuXG4gICAgICBjb25zdCBwcmVmaXggPSBpc0VsZW1lbnRDb250ZXh0ID8gJyonIDogJyc7XG4gICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuRElSRUNUSVZFKSxcbiAgICAgICAgbmFtZTogcHJlZml4ICsgY29tcGxldGlvbi5hdHRyaWJ1dGUsXG4gICAgICAgIHNvcnRUZXh0OiBwcmVmaXggKyBjb21wbGV0aW9uLmF0dHJpYnV0ZSxcbiAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5EaXJlY3RpdmVJbnB1dDoge1xuICAgICAgaWYgKGlzQXR0cmlidXRlQ29udGV4dCkge1xuICAgICAgICAvLyBPZmZlciBhIGNvbXBsZXRpb24gb2YgYSBwcm9wZXJ0eSBiaW5kaW5nLlxuICAgICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICAgIGtpbmQ6IHVuc2FmZUNhc3REaXNwbGF5SW5mb0tpbmRUb1NjcmlwdEVsZW1lbnRLaW5kKERpc3BsYXlJbmZvS2luZC5QUk9QRVJUWSksXG4gICAgICAgICAgbmFtZTogYFske2NvbXBsZXRpb24ucHJvcGVydHlOYW1lfV1gLFxuICAgICAgICAgIHNvcnRUZXh0OiBjb21wbGV0aW9uLnByb3BlcnR5TmFtZSxcbiAgICAgICAgICByZXBsYWNlbWVudFNwYW4sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiB0aGUgZGlyZWN0aXZlIHN1cHBvcnRzIGJhbmFuYS1pbi1hLWJveCBmb3IgdGhpcyBpbnB1dCwgb2ZmZXIgdGhhdCBhcyB3ZWxsLlxuICAgICAgICBpZiAoY29tcGxldGlvbi50d29XYXlCaW5kaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgIGtpbmQ6IHVuc2FmZUNhc3REaXNwbGF5SW5mb0tpbmRUb1NjcmlwdEVsZW1lbnRLaW5kKERpc3BsYXlJbmZvS2luZC5QUk9QRVJUWSksXG4gICAgICAgICAgICBuYW1lOiBgWygke2NvbXBsZXRpb24ucHJvcGVydHlOYW1lfSldYCxcbiAgICAgICAgICAgIC8vIFRoaXMgY29tcGxldGlvbiBzaG91bGQgc29ydCBhZnRlciB0aGUgcHJvcGVydHkgYmluZGluZy5cbiAgICAgICAgICAgIHNvcnRUZXh0OiBjb21wbGV0aW9uLnByb3BlcnR5TmFtZSArICdfMScsXG4gICAgICAgICAgICByZXBsYWNlbWVudFNwYW4sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT2ZmZXIgYSBjb21wbGV0aW9uIG9mIHRoZSBpbnB1dCBiaW5kaW5nIGFzIGFuIGF0dHJpYnV0ZS5cbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuQVRUUklCVVRFKSxcbiAgICAgICAgICBuYW1lOiBjb21wbGV0aW9uLnByb3BlcnR5TmFtZSxcbiAgICAgICAgICAvLyBUaGlzIGNvbXBsZXRpb24gc2hvdWxkIHNvcnQgYWZ0ZXIgYm90aCBwcm9wZXJ0eSBiaW5kaW5nIG9wdGlvbnMgKG9uZS13YXkgYW5kIHR3by13YXkpLlxuICAgICAgICAgIHNvcnRUZXh0OiBjb21wbGV0aW9uLnByb3BlcnR5TmFtZSArICdfMicsXG4gICAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAga2luZDogdW5zYWZlQ2FzdERpc3BsYXlJbmZvS2luZFRvU2NyaXB0RWxlbWVudEtpbmQoRGlzcGxheUluZm9LaW5kLlBST1BFUlRZKSxcbiAgICAgICAgICBuYW1lOiBjb21wbGV0aW9uLnByb3BlcnR5TmFtZSxcbiAgICAgICAgICBzb3J0VGV4dDogY29tcGxldGlvbi5wcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZU91dHB1dDoge1xuICAgICAgaWYgKGlzQXR0cmlidXRlQ29udGV4dCkge1xuICAgICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICAgIGtpbmQ6IHVuc2FmZUNhc3REaXNwbGF5SW5mb0tpbmRUb1NjcmlwdEVsZW1lbnRLaW5kKERpc3BsYXlJbmZvS2luZC5FVkVOVCksXG4gICAgICAgICAgbmFtZTogYCgke2NvbXBsZXRpb24uZXZlbnROYW1lfSlgLFxuICAgICAgICAgIHNvcnRUZXh0OiBjb21wbGV0aW9uLmV2ZW50TmFtZSxcbiAgICAgICAgICByZXBsYWNlbWVudFNwYW4sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuRVZFTlQpLFxuICAgICAgICAgIG5hbWU6IGNvbXBsZXRpb24uZXZlbnROYW1lLFxuICAgICAgICAgIHNvcnRUZXh0OiBjb21wbGV0aW9uLmV2ZW50TmFtZSxcbiAgICAgICAgICByZXBsYWNlbWVudFNwYW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRG9tQXR0cmlidXRlOiB7XG4gICAgICBpZiAoaXNBdHRyaWJ1dGVDb250ZXh0KSB7XG4gICAgICAgIC8vIE9mZmVyIGEgY29tcGxldGlvbiBvZiBhbiBhdHRyaWJ1dGUgYmluZGluZy5cbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuQVRUUklCVVRFKSxcbiAgICAgICAgICBuYW1lOiBjb21wbGV0aW9uLmF0dHJpYnV0ZSxcbiAgICAgICAgICBzb3J0VGV4dDogY29tcGxldGlvbi5hdHRyaWJ1dGUsXG4gICAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbXBsZXRpb24uaXNBbHNvUHJvcGVydHkpIHtcbiAgICAgICAgICAvLyBPZmZlciBhIGNvbXBsZXRpb24gb2YgYSBwcm9wZXJ0eSBiaW5kaW5nIHRvIHRoZSBET00gcHJvcGVydHkuXG4gICAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgIGtpbmQ6IHVuc2FmZUNhc3REaXNwbGF5SW5mb0tpbmRUb1NjcmlwdEVsZW1lbnRLaW5kKERpc3BsYXlJbmZvS2luZC5QUk9QRVJUWSksXG4gICAgICAgICAgICBuYW1lOiBgWyR7Y29tcGxldGlvbi5hdHRyaWJ1dGV9XWAsXG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBET00gYXR0cmlidXRlcywgdGhlIHByb3BlcnR5IGJpbmRpbmcgc2hvdWxkIHNvcnQgYWZ0ZXIgdGhlIGF0dHJpYnV0ZVxuICAgICAgICAgICAgLy8gYmluZGluZy5cbiAgICAgICAgICAgIHNvcnRUZXh0OiBjb21wbGV0aW9uLmF0dHJpYnV0ZSArICdfMScsXG4gICAgICAgICAgICByZXBsYWNlbWVudFNwYW4sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29tcGxldGlvbi5pc0Fsc29Qcm9wZXJ0eSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICAgIGtpbmQ6IHVuc2FmZUNhc3REaXNwbGF5SW5mb0tpbmRUb1NjcmlwdEVsZW1lbnRLaW5kKERpc3BsYXlJbmZvS2luZC5QUk9QRVJUWSksXG4gICAgICAgICAgbmFtZTogY29tcGxldGlvbi5hdHRyaWJ1dGUsXG4gICAgICAgICAgc29ydFRleHQ6IGNvbXBsZXRpb24uYXR0cmlidXRlLFxuICAgICAgICAgIHJlcGxhY2VtZW50U3BhbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5Eb21Qcm9wZXJ0eToge1xuICAgICAgaWYgKCFpc0F0dHJpYnV0ZUNvbnRleHQpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuUFJPUEVSVFkpLFxuICAgICAgICAgIG5hbWU6IGNvbXBsZXRpb24ucHJvcGVydHksXG4gICAgICAgICAgc29ydFRleHQ6IGNvbXBsZXRpb24ucHJvcGVydHksXG4gICAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF0dHJpYnV0ZUNvbXBsZXRpb25TeW1ib2woXG4gICAgY29tcGxldGlvbjogQXR0cmlidXRlQ29tcGxldGlvbiwgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpOiB0cy5TeW1ib2x8bnVsbCB7XG4gIHN3aXRjaCAoY29tcGxldGlvbi5raW5kKSB7XG4gICAgY2FzZSBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5Eb21BdHRyaWJ1dGU6XG4gICAgY2FzZSBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5Eb21Qcm9wZXJ0eTpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRGlyZWN0aXZlQXR0cmlidXRlOlxuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuU3RydWN0dXJhbERpcmVjdGl2ZUF0dHJpYnV0ZTpcbiAgICAgIHJldHVybiBjb21wbGV0aW9uLmRpcmVjdGl2ZS50c1N5bWJvbDtcbiAgICBjYXNlIEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZUlucHV0OlxuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRGlyZWN0aXZlT3V0cHV0OlxuICAgICAgcmV0dXJuIGNoZWNrZXIuZ2V0RGVjbGFyZWRUeXBlT2ZTeW1ib2woY29tcGxldGlvbi5kaXJlY3RpdmUudHNTeW1ib2wpXG4gICAgICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eShjb21wbGV0aW9uLmNsYXNzUHJvcGVydHlOYW1lKSA/P1xuICAgICAgICAgIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGBDc3NTZWxlY3RvcmAgYXR0cmlidXRlcywgd2hpY2ggYXJlIGludGVybmFsbHkgcmVwcmVzZW50ZWQgaW4gYSB6aXBwZWQgYXJyYXkgc3R5bGVcbiAqIHdoaWNoIGlzIG5vdCBjb25kdWNpdmUgdG8gc3RyYWlnaHRmb3J3YXJkIGl0ZXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24qIHNlbGVjdG9yQXR0cmlidXRlcyhzZWxlY3RvcjogQ3NzU2VsZWN0b3IpOiBJdGVyYWJsZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0b3IuYXR0cnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB5aWVsZCBbc2VsZWN0b3IuYXR0cnNbMF0sIHNlbGVjdG9yLmF0dHJzWzFdXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdHJ1Y3R1cmFsQXR0cmlidXRlcyhtZXRhOiBUeXBlQ2hlY2thYmxlRGlyZWN0aXZlTWV0YSk6IHN0cmluZ1tdIHtcbiAgaWYgKG1ldGEuc2VsZWN0b3IgPT09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBzdHJ1Y3R1cmFsQXR0cmlidXRlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0b3JzID0gQ3NzU2VsZWN0b3IucGFyc2UobWV0YS5zZWxlY3Rvcik7XG4gIGZvciAoY29uc3Qgc2VsZWN0b3Igb2Ygc2VsZWN0b3JzKSB7XG4gICAgaWYgKHNlbGVjdG9yLmVsZW1lbnQgIT09IG51bGwgJiYgc2VsZWN0b3IuZWxlbWVudCAhPT0gJ25nLXRlbXBsYXRlJykge1xuICAgICAgLy8gVGhpcyBwYXJ0aWN1bGFyIHNlbGVjdG9yIGRvZXMgbm90IGFwcGx5IHVuZGVyIHN0cnVjdHVyYWwgZGlyZWN0aXZlIHN5bnRheC5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IGF0dHJpYnV0ZSBvZiB0aGlzIHNlbGVjdG9yIG11c3QgYmUgbmFtZS1vbmx5IC0gbm8gcmVxdWlyZWQgdmFsdWVzLlxuICAgIGNvbnN0IGF0dHJpYnV0ZVNlbGVjdG9ycyA9IEFycmF5LmZyb20oc2VsZWN0b3JBdHRyaWJ1dGVzKHNlbGVjdG9yKSk7XG4gICAgaWYgKCFhdHRyaWJ1dGVTZWxlY3RvcnMuZXZlcnkoKFtfLCBhdHRyVmFsdWVdKSA9PiBhdHRyVmFsdWUgPT09ICcnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gR2V0IGV2ZXJ5IG5hbWVkIHNlbGVjdG9yLlxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZWxlY3RvcnMubWFwKChbYXR0ck5hbWUsIF9dKSA9PiBhdHRyTmFtZSk7XG5cbiAgICAvLyBGaW5kIHRoZSBzaG9ydGVzdCBhdHRyaWJ1dGUuIFRoaXMgaXMgdGhlIHN0cnVjdHVyYWwgZGlyZWN0aXZlIFwiYmFzZVwiLCBhbmQgYWxsIHBvdGVudGlhbFxuICAgIC8vIGlucHV0IGJpbmRpbmdzIG11c3QgYmVnaW4gd2l0aCB0aGUgYmFzZS4gRS5nLiBpbiBgKm5nRm9yPVwibGV0IGEgb2YgYlwiYCwgYG5nRm9yYCBpcyB0aGVcbiAgICAvLyBiYXNlIGF0dHJpYnV0ZSwgYW5kIHRoZSBgb2ZgIGJpbmRpbmcga2V5IGNvcnJlc3BvbmRzIHRvIGFuIGlucHV0IG9mIGBuZ0Zvck9mYC5cbiAgICBjb25zdCBiYXNlQXR0ciA9IGF0dHJpYnV0ZXMucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycikgPT4gcHJldiA9PT0gbnVsbCB8fCBjdXJyLmxlbmd0aCA8IHByZXYubGVuZ3RoID8gY3VyciA6IHByZXYsXG4gICAgICAgIG51bGwgYXMgc3RyaW5nIHwgbnVsbCk7XG4gICAgaWYgKGJhc2VBdHRyID09PSBudWxsKSB7XG4gICAgICAvLyBObyBhdHRyaWJ1dGVzIGluIHRoaXMgc2VsZWN0b3I/XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBhdHRyaWJ1dGVzIGFyZSBjb21wYXRpYmxlIHdpdGggdXNlIGFzIGEgc3RydWN0dXJhbCBkaXJlY3RpdmUuXG4gICAgY29uc3QgaXNWYWxpZCA9IChhdHRyOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIC8vIFRoZSBiYXNlIGF0dHJpYnV0ZSBpcyB2YWxpZCBieSBkZWZhdWx0LlxuICAgICAgaWYgKGF0dHIgPT09IGJhc2VBdHRyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBOb24tYmFzZSBhdHRyaWJ1dGVzIG11c3QgYWxsIGJlIHByZWZpeGVkIHdpdGggdGhlIGJhc2UgYXR0cmlidXRlLlxuICAgICAgaWYgKCFhdHRyLnN0YXJ0c1dpdGgoYmFzZUF0dHIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gTm9uLWJhc2UgYXR0cmlidXRlcyBtdXN0IGFsc28gY29ycmVzcG9uZCB0byBkaXJlY3RpdmUgaW5wdXRzLlxuICAgICAgaWYgKCFtZXRhLmlucHV0cy5oYXNCaW5kaW5nUHJvcGVydHlOYW1lKGF0dHIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBhdHRyaWJ1dGUgaXMgY29tcGF0aWJsZS5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBpZiAoIWF0dHJpYnV0ZXMuZXZlcnkoaXNWYWxpZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgYXR0cmlidXRlIGlzIHZhbGlkIGFzIGEgc3RydWN0dXJhbCBhdHRyaWJ1dGUgZm9yIHRoaXMgZGlyZWN0aXZlLlxuICAgIHN0cnVjdHVyYWxBdHRyaWJ1dGVzLnB1c2goYmFzZUF0dHIpO1xuICB9XG5cbiAgcmV0dXJuIHN0cnVjdHVyYWxBdHRyaWJ1dGVzO1xufVxuIl19
|
|
562
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlX2NvbXBsZXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGFuZ3VhZ2Utc2VydmljZS9pdnkvYXR0cmlidXRlX2NvbXBsZXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCw4Q0FBZ0c7SUFFaEcsK0JBQWlDO0lBRWpDLDZFQUE4RjtJQUM5Riw2REFBNEM7SUFFNUM7O09BRUc7SUFDSCxJQUFZLHVCQXNDWDtJQXRDRCxXQUFZLHVCQUF1QjtRQUNqQzs7OztXQUlHO1FBQ0gscUZBQVksQ0FBQTtRQUVaOzs7OztXQUtHO1FBQ0gsbUZBQVcsQ0FBQTtRQUVYOztXQUVHO1FBQ0gsaUdBQWtCLENBQUE7UUFFbEI7OztXQUdHO1FBQ0gscUhBQTRCLENBQUE7UUFFNUI7OztXQUdHO1FBQ0gseUZBQWMsQ0FBQTtRQUVkOzs7V0FHRztRQUNILDJGQUFlLENBQUE7SUFDakIsQ0FBQyxFQXRDVyx1QkFBdUIsR0FBdkIsK0JBQXVCLEtBQXZCLCtCQUF1QixRQXNDbEM7SUE4R0Q7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFNBQWdCLDZCQUE2QixDQUN6QyxTQUE4QixFQUFFLE9BQXVDLEVBQ3ZFLE9BQTRCLEVBQzVCLDBCQUFtQzs7UUFDckMsSUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFckQsa0dBQWtHO1FBQ2xHLCtFQUErRTtRQUMvRSxJQUFNLE1BQU0sR0FDUixPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQW1DLENBQUM7UUFDbEYsSUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztRQUN6RCxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7O2dCQUNuQix3RkFBd0Y7Z0JBQ3hGLGdEQUFnRDtnQkFDaEQsS0FBd0IsSUFBQSxLQUFBLGlCQUFBLE1BQU0sQ0FBQyxV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c0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Q3NzU2VsZWN0b3IsIFNlbGVjdG9yTWF0Y2hlciwgVG1wbEFzdEVsZW1lbnQsIFRtcGxBc3RUZW1wbGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtEaXJlY3RpdmVJblNjb3BlLCBFbGVtZW50U3ltYm9sLCBUZW1wbGF0ZVN5bWJvbCwgVGVtcGxhdGVUeXBlQ2hlY2tlciwgVHlwZUNoZWNrYWJsZURpcmVjdGl2ZU1ldGF9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL2FwaSc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtEaXNwbGF5SW5mb0tpbmQsIHVuc2FmZUNhc3REaXNwbGF5SW5mb0tpbmRUb1NjcmlwdEVsZW1lbnRLaW5kfSBmcm9tICcuL2Rpc3BsYXlfcGFydHMnO1xuaW1wb3J0IHttYWtlRWxlbWVudFNlbGVjdG9yfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBEaWZmZXJlbnRpYXRlcyBkaWZmZXJlbnQga2luZHMgb2YgYEF0dHJpYnV0ZUNvbXBsZXRpb25gcy5cbiAqL1xuZXhwb3J0IGVudW0gQXR0cmlidXRlQ29tcGxldGlvbktpbmQge1xuICAvKipcbiAgICogQ29tcGxldGlvbiBvZiBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgSFRNTCBzY2hlbWEuXG4gICAqXG4gICAqIEF0dHJpYnV0ZXMgb2Z0ZW4gaGF2ZSBhIGNvcnJlc3BvbmRpbmcgRE9NIHByb3BlcnR5IG9mIHRoZSBzYW1lIG5hbWUuXG4gICAqL1xuICBEb21BdHRyaWJ1dGUsXG5cbiAgLyoqXG4gICAqIENvbXBsZXRpb24gb2YgYSBwcm9wZXJ0eSBmcm9tIHRoZSBET00gc2NoZW1hLlxuICAgKlxuICAgKiBgRG9tUHJvcGVydHlgIGNvbXBsZXRpb25zIGFyZSBnZW5lcmF0ZWQgb25seSBmb3IgcHJvcGVydGllcyB3aGljaCBkb24ndCBzaGFyZSB0aGVpciBuYW1lIHdpdGhcbiAgICogYW4gSFRNTCBhdHRyaWJ1dGUuXG4gICAqL1xuICBEb21Qcm9wZXJ0eSxcblxuICAvKipcbiAgICogQ29tcGxldGlvbiBvZiBhbiBhdHRyaWJ1dGUgdGhhdCByZXN1bHRzIGluIGEgbmV3IGRpcmVjdGl2ZSBiZWluZyBtYXRjaGVkIG9uIGFuIGVsZW1lbnQuXG4gICAqL1xuICBEaXJlY3RpdmVBdHRyaWJ1dGUsXG5cbiAgLyoqXG4gICAqIENvbXBsZXRpb24gb2YgYW4gYXR0cmlidXRlIHRoYXQgcmVzdWx0cyBpbiBhIG5ldyBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBiZWluZyBtYXRjaGVkIG9uIGFuXG4gICAqIGVsZW1lbnQuXG4gICAqL1xuICBTdHJ1Y3R1cmFsRGlyZWN0aXZlQXR0cmlidXRlLFxuXG4gIC8qKlxuICAgKiBDb21wbGV0aW9uIG9mIGFuIGlucHV0IGZyb20gYSBkaXJlY3RpdmUgd2hpY2ggaXMgZWl0aGVyIHByZXNlbnQgb24gdGhlIGVsZW1lbnQsIG9yIGJlY29tZXNcbiAgICogcHJlc2VudCBhZnRlciB0aGUgYWRkaXRpb24gb2YgdGhpcyBhdHRyaWJ1dGUuXG4gICAqL1xuICBEaXJlY3RpdmVJbnB1dCxcblxuICAvKipcbiAgICogQ29tcGxldGlvbiBvZiBhbiBvdXRwdXQgZnJvbSBhIGRpcmVjdGl2ZSB3aGljaCBpcyBlaXRoZXIgcHJlc2VudCBvbiB0aGUgZWxlbWVudCwgb3IgYmVjb21lc1xuICAgKiBwcmVzZW50IGFmdGVyIHRoZSBhZGRpdGlvbiBvZiB0aGlzIGF0dHJpYnV0ZS5cbiAgICovXG4gIERpcmVjdGl2ZU91dHB1dCxcbn1cblxuLyoqXG4gKiBDb21wbGV0aW9uIG9mIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBET00gc2NoZW1hLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbUF0dHJpYnV0ZUNvbXBsZXRpb24ge1xuICBraW5kOiBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5Eb21BdHRyaWJ1dGU7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIEhUTUwgYXR0cmlidXRlIChub3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBET00gcHJvcGVydHkgbmFtZSkuXG4gICAqL1xuICBhdHRyaWJ1dGU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGF0dHJpYnV0ZSBpcyBhbHNvIGEgRE9NIHByb3BlcnR5LlxuICAgKi9cbiAgaXNBbHNvUHJvcGVydHk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29tcGxldGlvbiBvZiBhIERPTSBwcm9wZXJ0eSBvZiBhbiBlbGVtZW50IHRoYXQncyBkaXN0aW5jdCBmcm9tIGFuIEhUTUwgYXR0cmlidXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbVByb3BlcnR5Q29tcGxldGlvbiB7XG4gIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRvbVByb3BlcnR5O1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBET00gcHJvcGVydHlcbiAgICovXG4gIHByb3BlcnR5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29tcGxldGlvbiBvZiBhbiBhdHRyaWJ1dGUgd2hpY2ggcmVzdWx0cyBpbiBhIG5ldyBkaXJlY3RpdmUgYmVpbmcgbWF0Y2hlZCBvbiBhbiBlbGVtZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdGl2ZUF0dHJpYnV0ZUNvbXBsZXRpb24ge1xuICBraW5kOiBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5EaXJlY3RpdmVBdHRyaWJ1dGV8XG4gICAgICBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5TdHJ1Y3R1cmFsRGlyZWN0aXZlQXR0cmlidXRlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2hvc2UgYWRkaXRpb24gY2F1c2VzIHRoaXMgZGlyZWN0aXZlIHRvIG1hdGNoIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgYXR0cmlidXRlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RpdmUgd2hvc2Ugc2VsZWN0b3IgZ2F2ZSByaXNlIHRvIHRoaXMgY29tcGxldGlvbi5cbiAgICovXG4gIGRpcmVjdGl2ZTogRGlyZWN0aXZlSW5TY29wZTtcbn1cblxuLyoqXG4gKiBDb21wbGV0aW9uIG9mIGFuIGlucHV0IG9mIGEgZGlyZWN0aXZlIHdoaWNoIG1heSBlaXRoZXIgYmUgcHJlc2VudCBvbiB0aGUgZWxlbWVudCwgb3IgYmVjb21lXG4gKiBwcmVzZW50IHdoZW4gYSBiaW5kaW5nIHRvIHRoaXMgaW5wdXQgaXMgYWRkZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aXZlSW5wdXRDb21wbGV0aW9uIHtcbiAga2luZDogQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRGlyZWN0aXZlSW5wdXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgcHJvcGVydHkgbmFtZSBvZiB0aGUgaW5wdXQgKHRoZSBuYW1lIHdoaWNoIHdvdWxkIGJlIHVzZWQgaW4gYW55IGJpbmRpbmcgdG8gdGhhdFxuICAgKiBpbnB1dCkuXG4gICAqL1xuICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGl2ZSB3aGljaCBoYXMgdGhpcyBpbnB1dC5cbiAgICovXG4gIGRpcmVjdGl2ZTogRGlyZWN0aXZlSW5TY29wZTtcblxuICAvKipcbiAgICogVGhlIGZpZWxkIG5hbWUgb24gdGhlIGRpcmVjdGl2ZSBjbGFzcyB3aGljaCBjb3JyZXNwb25kcyB0byB0aGlzIGlucHV0LlxuICAgKlxuICAgKiBDdXJyZW50bHksIGluIHRoZSBjYXNlIHdoZXJlIGEgc2luZ2xlIHByb3BlcnR5IG5hbWUgY29ycmVzcG9uZHMgdG8gbXVsdGlwbGUgaW5wdXQgZmllbGRzLCBvbmx5XG4gICAqIHRoZSBmaXJzdCBzdWNoIGZpZWxkIGlzIHJlcHJlc2VudGVkIGhlcmUuIEluIHRoZSBmdXR1cmUgbXVsdGlwbGUgcmVzdWx0cyBtYXkgYmUgd2FycmFudGVkLlxuICAgKi9cbiAgY2xhc3NQcm9wZXJ0eU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGlucHV0IGNhbiBiZSB1c2VkIHdpdGggdHdvLXdheSBiaW5kaW5nICh0aGF0IGlzLCB3aGV0aGVyIGEgY29ycmVzcG9uZGluZyBjaGFuZ2VcbiAgICogb3V0cHV0IGV4aXN0cyBvbiB0aGUgZGlyZWN0aXZlKS5cbiAgICovXG4gIHR3b1dheUJpbmRpbmdTdXBwb3J0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aXZlT3V0cHV0Q29tcGxldGlvbiB7XG4gIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZU91dHB1dDtcblxuICAvKipcbiAgICogVGhlIHB1YmxpYyBldmVudCBuYW1lIG9mIHRoZSBvdXRwdXQgKHRoZSBuYW1lIHdoaWNoIHdvdWxkIGJlIHVzZWQgaW4gYW55IGJpbmRpbmcgdG8gdGhhdFxuICAgKiBvdXRwdXQpLlxuICAgKi9cbiAgZXZlbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqVGhlIGRpcmVjdGl2ZSB3aGljaCBoYXMgdGhpcyBvdXRwdXQuXG4gICAqL1xuICBkaXJlY3RpdmU6IERpcmVjdGl2ZUluU2NvcGU7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIG9uIHRoZSBkaXJlY3RpdmUgY2xhc3Mgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhpcyBvdXRwdXQuXG4gICAqL1xuICBjbGFzc1Byb3BlcnR5TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFueSBuYW1lZCBhdHRyaWJ1dGUgd2hpY2ggaXMgYXZhaWxhYmxlIGZvciBjb21wbGV0aW9uIG9uIGEgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBEaXNhbWJpZ3VhdGVkIGJ5IHRoZSBga2luZGAgcHJvcGVydHkgaW50byB2YXJpb3VzIHR5cGVzIG9mIGNvbXBsZXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBBdHRyaWJ1dGVDb21wbGV0aW9uID0gRG9tQXR0cmlidXRlQ29tcGxldGlvbnxEb21Qcm9wZXJ0eUNvbXBsZXRpb258XG4gICAgRGlyZWN0aXZlQXR0cmlidXRlQ29tcGxldGlvbnxEaXJlY3RpdmVJbnB1dENvbXBsZXRpb258RGlyZWN0aXZlT3V0cHV0Q29tcGxldGlvbjtcblxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50IGFuZCBpdHMgY29udGV4dCwgcHJvZHVjZSBhIGBNYXBgIG9mIGFsbCBwb3NzaWJsZSBhdHRyaWJ1dGUgY29tcGxldGlvbnMuXG4gKlxuICogMyBraW5kcyBvZiBhdHRyaWJ1dGVzIGFyZSBjb25zaWRlcmVkIGZvciBjb21wbGV0aW9uLCBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHByaW9yaXR5OlxuICpcbiAqIDEuIElucHV0cy9vdXRwdXRzIG9mIGRpcmVjdGl2ZXMgcHJlc2VudCBvbiB0aGUgZWxlbWVudCBhbHJlYWR5LlxuICogMi4gSW5wdXRzL291dHB1dHMgb2YgZGlyZWN0aXZlcyB0aGF0IGFyZSBub3QgcHJlc2VudCBvbiB0aGUgZWxlbWVudCwgYnV0IHdoaWNoIHdvdWxkIGJlY29tZVxuICogICAgcHJlc2VudCBpZiBzdWNoIGEgYmluZGluZyBpcyBhZGRlZC5cbiAqIDMuIEF0dHJpYnV0ZXMgZnJvbSB0aGUgRE9NIHNjaGVtYSBmb3IgdGhlIGVsZW1lbnQuXG4gKlxuICogVGhlIHByaW9yaXR5IG9mIHRoZXNlIG9wdGlvbnMgZGV0ZXJtaW5lcyB3aGljaCBjb21wbGV0aW9ucyBhcmUgYWRkZWQgdG8gdGhlIGBNYXBgLiBJZiBhIGRpcmVjdGl2ZVxuICogaW5wdXQgc2hhcmVzIHRoZSBzYW1lIG5hbWUgYXMgYSBET00gYXR0cmlidXRlLCB0aGUgYE1hcGAgd2lsbCByZWZsZWN0IHRoZSBkaXJlY3RpdmUgaW5wdXRcbiAqIGNvbXBsZXRpb24sIG5vdCB0aGUgRE9NIGNvbXBsZXRpb24gZm9yIHRoYXQgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQXR0cmlidXRlQ29tcGxldGlvblRhYmxlKFxuICAgIGNvbXBvbmVudDogdHMuQ2xhc3NEZWNsYXJhdGlvbiwgZWxlbWVudDogVG1wbEFzdEVsZW1lbnR8VG1wbEFzdFRlbXBsYXRlLFxuICAgIGNoZWNrZXI6IFRlbXBsYXRlVHlwZUNoZWNrZXIsXG4gICAgaW5jbHVkZURvbVNjaGVtYUF0dHJpYnV0ZXM6IGJvb2xlYW4pOiBNYXA8c3RyaW5nLCBBdHRyaWJ1dGVDb21wbGV0aW9uPiB7XG4gIGNvbnN0IHRhYmxlID0gbmV3IE1hcDxzdHJpbmcsIEF0dHJpYnV0ZUNvbXBsZXRpb24+KCk7XG5cbiAgLy8gVXNlIHRoZSBgRWxlbWVudFN5bWJvbGAgb3IgYFRlbXBsYXRlU3ltYm9sYCB0byBpdGVyYXRlIG92ZXIgZGlyZWN0aXZlcyBwcmVzZW50IG9uIHRoZSBub2RlLCBhbmRcbiAgLy8gdGhlaXIgaW5wdXRzL291dHB1dHMuIFRoZXNlIGhhdmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgb2YgY29tcGxldGlvbiByZXN1bHRzLlxuICBjb25zdCBzeW1ib2w6IEVsZW1lbnRTeW1ib2x8VGVtcGxhdGVTeW1ib2wgPVxuICAgICAgY2hlY2tlci5nZXRTeW1ib2xPZk5vZGUoZWxlbWVudCwgY29tcG9uZW50KSBhcyBFbGVtZW50U3ltYm9sIHwgVGVtcGxhdGVTeW1ib2w7XG4gIGNvbnN0IHByZXNlbnREaXJlY3RpdmVzID0gbmV3IFNldDx0cy5DbGFzc0RlY2xhcmF0aW9uPigpO1xuICBpZiAoc3ltYm9sICE9PSBudWxsKSB7XG4gICAgLy8gQW4gYEVsZW1lbnRTeW1ib2xgIHdhcyBhdmFpbGFibGUuIFRoaXMgbWVhbnMgaW5wdXRzIGFuZCBvdXRwdXRzIGZvciBkaXJlY3RpdmVzIG9uIHRoZVxuICAgIC8vIGVsZW1lbnQgY2FuIGJlIGFkZGVkIHRvIHRoZSBjb21wbGV0aW9uIHRhYmxlLlxuICAgIGZvciAoY29uc3QgZGlyU3ltYm9sIG9mIHN5bWJvbC5kaXJlY3RpdmVzKSB7XG4gICAgICBjb25zdCBkaXJlY3RpdmUgPSBkaXJTeW1ib2wudHNTeW1ib2wudmFsdWVEZWNsYXJhdGlvbjtcbiAgICAgIGlmICghdHMuaXNDbGFzc0RlY2xhcmF0aW9uKGRpcmVjdGl2ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBwcmVzZW50RGlyZWN0aXZlcy5hZGQoZGlyZWN0aXZlKTtcblxuICAgICAgY29uc3QgbWV0YSA9IGNoZWNrZXIuZ2V0RGlyZWN0aXZlTWV0YWRhdGEoZGlyZWN0aXZlKTtcbiAgICAgIGlmIChtZXRhID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtjbGFzc1Byb3BlcnR5TmFtZSwgcHJvcGVydHlOYW1lXSBvZiBtZXRhLmlucHV0cykge1xuICAgICAgICBpZiAodGFibGUuaGFzKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlLnNldChwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBraW5kOiBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5EaXJlY3RpdmVJbnB1dCxcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgZGlyZWN0aXZlOiBkaXJTeW1ib2wsXG4gICAgICAgICAgY2xhc3NQcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgdHdvV2F5QmluZGluZ1N1cHBvcnRlZDogbWV0YS5vdXRwdXRzLmhhc0JpbmRpbmdQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lICsgJ0NoYW5nZScpLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBbY2xhc3NQcm9wZXJ0eU5hbWUsIHByb3BlcnR5TmFtZV0gb2YgbWV0YS5vdXRwdXRzKSB7XG4gICAgICAgIGlmICh0YWJsZS5oYXMocHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGUuc2V0KHByb3BlcnR5TmFtZSwge1xuICAgICAgICAgIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZU91dHB1dCxcbiAgICAgICAgICBldmVudE5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgICAgICBkaXJlY3RpdmU6IGRpclN5bWJvbCxcbiAgICAgICAgICBjbGFzc1Byb3BlcnR5TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTmV4dCwgZXhwbG9yZSBoeXBvdGhldGljYWwgZGlyZWN0aXZlcyBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBhZGRpdGlvbiBvZiBhbnkgc2luZ2xlIGF0dHJpYnV0ZXNcbiAgLy8gY2FuIGNhdXNlIHRoZSBkaXJlY3RpdmUgdG8gbWF0Y2ggdGhlIGVsZW1lbnQuXG4gIGNvbnN0IGRpcmVjdGl2ZXNJblNjb3BlID0gY2hlY2tlci5nZXREaXJlY3RpdmVzSW5TY29wZShjb21wb25lbnQpO1xuICBpZiAoZGlyZWN0aXZlc0luU2NvcGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBlbGVtZW50U2VsZWN0b3IgPSBtYWtlRWxlbWVudFNlbGVjdG9yKGVsZW1lbnQpO1xuXG4gICAgZm9yIChjb25zdCBkaXJJblNjb3BlIG9mIGRpcmVjdGl2ZXNJblNjb3BlKSB7XG4gICAgICBjb25zdCBkaXJlY3RpdmUgPSBkaXJJblNjb3BlLnRzU3ltYm9sLnZhbHVlRGVjbGFyYXRpb247XG4gICAgICAvLyBTa2lwIGRpcmVjdGl2ZXMgdGhhdCBhcmUgcHJlc2VudCBvbiB0aGUgZWxlbWVudC5cbiAgICAgIGlmICghdHMuaXNDbGFzc0RlY2xhcmF0aW9uKGRpcmVjdGl2ZSkgfHwgcHJlc2VudERpcmVjdGl2ZXMuaGFzKGRpcmVjdGl2ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGEgPSBjaGVja2VyLmdldERpcmVjdGl2ZU1ldGFkYXRhKGRpcmVjdGl2ZSk7XG4gICAgICBpZiAobWV0YSA9PT0gbnVsbCB8fCBtZXRhLnNlbGVjdG9yID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1ldGEuaXNTdHJ1Y3R1cmFsKSB7XG4gICAgICAgIC8vIEZvciBub24tc3RydWN0dXJhbCBkaXJlY3RpdmVzLCB0aGUgZGlyZWN0aXZlJ3MgYXR0cmlidXRlIHNlbGVjdG9yKHMpIGFyZSBtYXRjaGVkIGFnYWluc3RcbiAgICAgICAgLy8gYSBoeXBvdGhldGljYWwgdmVyc2lvbiBvZiB0aGUgZWxlbWVudCB3aXRoIHRob3NlIGF0dHJpYnV0ZXMuIEEgbWF0Y2ggaW5kaWNhdGVzIHRoYXRcbiAgICAgICAgLy8gYWRkaW5nIHRoYXQgYXR0cmlidXRlL2lucHV0L291dHB1dCBiaW5kaW5nIHdvdWxkIGNhdXNlIHRoZSBkaXJlY3RpdmUgdG8gYmVjb21lIHByZXNlbnQsXG4gICAgICAgIC8vIG1lYW5pbmcgdGhhdCBzdWNoIGEgYmluZGluZyBpcyBhIHZhbGlkIGNvbXBsZXRpb24uXG4gICAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IENzc1NlbGVjdG9yLnBhcnNlKG1ldGEuc2VsZWN0b3IpO1xuICAgICAgICBjb25zdCBtYXRjaGVyID0gbmV3IFNlbGVjdG9yTWF0Y2hlcigpO1xuICAgICAgICBtYXRjaGVyLmFkZFNlbGVjdGFibGVzKHNlbGVjdG9ycyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWxlY3RvciBvZiBzZWxlY3RvcnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IFthdHRyTmFtZSwgYXR0clZhbHVlXSBvZiBzZWxlY3RvckF0dHJpYnV0ZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBpZiAoYXR0clZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAvLyBUaGlzIGF0dHJpYnV0ZSBzZWxlY3RvciByZXF1aXJlcyBhIHZhbHVlLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIGNvbXBsZXRpb24uXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFibGUuaGFzKGF0dHJOYW1lKSkge1xuICAgICAgICAgICAgICAvLyBTa2lwIHRoaXMgYXR0cmlidXRlIGFzIHRoZXJlJ3MgYWxyZWFkeSBhIGJpbmRpbmcgZm9yIGl0LlxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhZGRpbmcgdGhpcyBhdHRyaWJ1dGUgd291bGQgY2F1c2UgdGhlIGRpcmVjdGl2ZSB0byBzdGFydCBtYXRjaGluZy5cbiAgICAgICAgICAgIGNvbnN0IG5ld0VsZW1lbnRTZWxlY3RvciA9IGVsZW1lbnRTZWxlY3RvciArIGBbJHthdHRyTmFtZX1dYDtcbiAgICAgICAgICAgIGlmICghbWF0Y2hlci5tYXRjaChDc3NTZWxlY3Rvci5wYXJzZShuZXdFbGVtZW50U2VsZWN0b3IpWzBdLCBudWxsKSkge1xuICAgICAgICAgICAgICAvLyBOb3BlLCBtb3ZlIG9uIHdpdGggb3VyIGxpdmVzLlxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkaW5nIHRoaXMgYXR0cmlidXRlIGNhdXNlcyBhIG5ldyBkaXJlY3RpdmUgdG8gYmUgbWF0Y2hlZC4gRGVjaWRlIGhvdyB0byBjYXRlZ29yaXplXG4gICAgICAgICAgICAvLyBpdCBiYXNlZCBvbiB0aGUgZGlyZWN0aXZlJ3MgaW5wdXRzIGFuZCBvdXRwdXRzLlxuICAgICAgICAgICAgaWYgKG1ldGEuaW5wdXRzLmhhc0JpbmRpbmdQcm9wZXJ0eU5hbWUoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGNvcnJlc3BvbmRzIHRvIGFuIGlucHV0IGJpbmRpbmcuXG4gICAgICAgICAgICAgIHRhYmxlLnNldChhdHRyTmFtZSwge1xuICAgICAgICAgICAgICAgIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZUlucHV0LFxuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZTogZGlySW5TY29wZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgIGNsYXNzUHJvcGVydHlOYW1lOlxuICAgICAgICAgICAgICAgICAgICBtZXRhLmlucHV0cy5nZXRCeUJpbmRpbmdQcm9wZXJ0eU5hbWUoYXR0ck5hbWUpIVswXS5jbGFzc1Byb3BlcnR5TmFtZSxcbiAgICAgICAgICAgICAgICB0d29XYXlCaW5kaW5nU3VwcG9ydGVkOiBtZXRhLm91dHB1dHMuaGFzQmluZGluZ1Byb3BlcnR5TmFtZShhdHRyTmFtZSArICdDaGFuZ2UnKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGEub3V0cHV0cy5oYXNCaW5kaW5nUHJvcGVydHlOYW1lKGF0dHJOYW1lKSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGF0dHJpYnV0ZSBjb3JyZXNwb25kcyB0byBhbiBvdXRwdXQgYmluZGluZy5cbiAgICAgICAgICAgICAgdGFibGUuc2V0KGF0dHJOYW1lLCB7XG4gICAgICAgICAgICAgICAga2luZDogQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRGlyZWN0aXZlT3V0cHV0LFxuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZTogZGlySW5TY29wZSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgIGNsYXNzUHJvcGVydHlOYW1lOlxuICAgICAgICAgICAgICAgICAgICBtZXRhLm91dHB1dHMuZ2V0QnlCaW5kaW5nUHJvcGVydHlOYW1lKGF0dHJOYW1lKSFbMF0uY2xhc3NQcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBhdHRyaWJ1dGUgY2F1c2VzIGEgbmV3IGRpcmVjdGl2ZSB0byBiZSBtYXRjaGVkLCBidXQgZG9lcyBub3QgYWxzbyBjb3JyZXNwb25kXG4gICAgICAgICAgICAgIC8vIHRvIGFuIGlucHV0IG9yIG91dHB1dCBiaW5kaW5nLlxuICAgICAgICAgICAgICB0YWJsZS5zZXQoYXR0ck5hbWUsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5EaXJlY3RpdmVBdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlOiBhdHRyTmFtZSxcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmU6IGRpckluU2NvcGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSHlwb3RoZXRpY2FsbHkgbWF0Y2hpbmcgYSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBpcyBhIGxpdGxlIGRpZmZlcmVudCB0aGFuIGEgcGxhaW5cbiAgICAgICAgLy8gZGlyZWN0aXZlLiBVc2Ugb2YgdGhlICcqJyBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBzeW50YWN0aWMgc3VnYXIgbWVhbnMgdGhhdCB0aGUgYWN0dWFsXG4gICAgICAgIC8vIGRpcmVjdGl2ZSBpcyBhcHBsaWVkIHRvIGEgcGxhaW4gPG5nLXRlbXBsYXRlPiBub2RlLCBub3QgdGhlIGV4aXN0aW5nIGVsZW1lbnQgd2l0aCBhbnlcbiAgICAgICAgLy8gb3RoZXIgYXR0cmlidXRlcyBpdCBtaWdodCBhbHJlYWR5IGhhdmUuXG4gICAgICAgIC8vIEFkZGl0aW9uYWxseSwgbW9yZSB0aGFuIG9uZSBhdHRyaWJ1dGUvaW5wdXQgbWlnaHQgbmVlZCB0byBiZSBwcmVzZW50IGluIG9yZGVyIGZvciB0aGVcbiAgICAgICAgLy8gZGlyZWN0aXZlIHRvIG1hdGNoIChlLmcuIGBuZ0ZvcmAgaGFzIGEgc2VsZWN0b3Igb2YgYFtuZ0Zvcl1bbmdGb3JPZl1gKS4gVGhpcyBnZXRzIGFcbiAgICAgICAgLy8gbGl0dGxlIHRyaWNreS5cblxuICAgICAgICBjb25zdCBzdHJ1Y3R1cmFsQXR0cmlidXRlcyA9IGdldFN0cnVjdHVyYWxBdHRyaWJ1dGVzKG1ldGEpO1xuICAgICAgICBmb3IgKGNvbnN0IGF0dHJOYW1lIG9mIHN0cnVjdHVyYWxBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgdGFibGUuc2V0KGF0dHJOYW1lLCB7XG4gICAgICAgICAgICBraW5kOiBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5TdHJ1Y3R1cmFsRGlyZWN0aXZlQXR0cmlidXRlLFxuICAgICAgICAgICAgYXR0cmlidXRlOiBhdHRyTmFtZSxcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogZGlySW5TY29wZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmFsbHksIGFkZCBhbnkgRE9NIGF0dHJpYnV0ZXMgbm90IGFscmVhZHkgY292ZXJlZCBieSBpbnB1dHMuXG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgVG1wbEFzdEVsZW1lbnQgJiYgaW5jbHVkZURvbVNjaGVtYUF0dHJpYnV0ZXMpIHtcbiAgICBmb3IgKGNvbnN0IHthdHRyaWJ1dGUsIHByb3BlcnR5fSBvZiBjaGVja2VyLmdldFBvdGVudGlhbERvbUJpbmRpbmdzKGVsZW1lbnQubmFtZSkpIHtcbiAgICAgIGNvbnN0IGlzQWxzb1Byb3BlcnR5ID0gYXR0cmlidXRlID09PSBwcm9wZXJ0eTtcbiAgICAgIGlmICghdGFibGUuaGFzKGF0dHJpYnV0ZSkpIHtcbiAgICAgICAgdGFibGUuc2V0KGF0dHJpYnV0ZSwge1xuICAgICAgICAgIGtpbmQ6IEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRvbUF0dHJpYnV0ZSxcbiAgICAgICAgICBhdHRyaWJ1dGUsXG4gICAgICAgICAgaXNBbHNvUHJvcGVydHksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0Fsc29Qcm9wZXJ0eSAmJiAhdGFibGUuaGFzKHByb3BlcnR5KSkge1xuICAgICAgICB0YWJsZS5zZXQocHJvcGVydHksIHtcbiAgICAgICAgICBraW5kOiBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5Eb21Qcm9wZXJ0eSxcbiAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhYmxlO1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIGBBdHRyaWJ1dGVDb21wbGV0aW9uYCwgYWRkIGFueSBhdmFpbGFibGUgY29tcGxldGlvbnMgdG8gYSBgdHMuQ29tcGxldGlvbkVudHJ5YCBhcnJheSBvZlxuICogcmVzdWx0cy5cbiAqXG4gKiBUaGUga2luZCBvZiBjb21wbGV0aW9ucyBnZW5lcmF0ZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgYW4gYXR0cmlidXRlIGNvbnRleHRcbiAqIG9yIG5vdC4gRm9yIGV4YW1wbGUsIGNvbXBsZXRpbmcgb24gYDxlbGVtZW50IGF0dHJ8PmAgd2lsbCBnZW5lcmF0ZSB0d28gcmVzdWx0czogYGF0dHJpYnV0ZWAgYW5kXG4gKiBgW2F0dHJpYnV0ZV1gIC0gZWl0aGVyIGEgc3RhdGljIGF0dHJpYnV0ZSBjYW4gYmUgZ2VuZXJhdGVkLCBvciBhIHByb3BlcnR5IGJpbmRpbmcuIEhvd2V2ZXIsXG4gKiBgPGVsZW1lbnQgW2F0dHJ8XT5gIGlzIG5vdCBhbiBhdHRyaWJ1dGUgY29udGV4dCwgYW5kIHNvIG9ubHkgdGhlIHByb3BlcnR5IGNvbXBsZXRpb24gYGF0dHJpYnV0ZWBcbiAqIGlzIGdlbmVyYXRlZC4gTm90ZSB0aGF0IHRoaXMgY29tcGxldGlvbiBkb2VzIG5vdCBoYXZlIHRoZSBgW11gIHByb3BlcnR5IGJpbmRpbmcgc3VnYXIgYXMgaXRzXG4gKiBpbXBsaWNpdGx5IHByZXNlbnQgaW4gYSBwcm9wZXJ0eSBiaW5kaW5nIGNvbnRleHQgKHdlJ3JlIGFscmVhZHkgY29tcGxldGluZyB3aXRoaW4gYW4gYFthdHRyfF1gXG4gKiBleHByZXNzaW9uKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEF0dHJpYnV0ZUNvbXBsZXRpb25FbnRyaWVzKFxuICAgIGVudHJpZXM6IHRzLkNvbXBsZXRpb25FbnRyeVtdLCBjb21wbGV0aW9uOiBBdHRyaWJ1dGVDb21wbGV0aW9uLCBpc0F0dHJpYnV0ZUNvbnRleHQ6IGJvb2xlYW4sXG4gICAgaXNFbGVtZW50Q29udGV4dDogYm9vbGVhbiwgcmVwbGFjZW1lbnRTcGFuOiB0cy5UZXh0U3Bhbnx1bmRlZmluZWQpOiB2b2lkIHtcbiAgc3dpdGNoIChjb21wbGV0aW9uLmtpbmQpIHtcbiAgICBjYXNlIEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZUF0dHJpYnV0ZToge1xuICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAga2luZDogdW5zYWZlQ2FzdERpc3BsYXlJbmZvS2luZFRvU2NyaXB0RWxlbWVudEtpbmQoRGlzcGxheUluZm9LaW5kLkRJUkVDVElWRSksXG4gICAgICAgIG5hbWU6IGNvbXBsZXRpb24uYXR0cmlidXRlLFxuICAgICAgICBzb3J0VGV4dDogY29tcGxldGlvbi5hdHRyaWJ1dGUsXG4gICAgICAgIHJlcGxhY2VtZW50U3BhbixcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuU3RydWN0dXJhbERpcmVjdGl2ZUF0dHJpYnV0ZToge1xuICAgICAgLy8gSW4gYW4gZWxlbWVudCwgdGhlIGNvbXBsZXRpb24gaXMgb2ZmZXJlZCB3aXRoIGEgbGVhZGluZyAnKicgdG8gYWN0aXZhdGUgdGhlIHN0cnVjdHVyYWxcbiAgICAgIC8vIGRpcmVjdGl2ZS4gT25jZSBwcmVzZW50LCB0aGUgc3RydWN0dXJhbCBhdHRyaWJ1dGUgd2lsbCBiZSBwYXJzZWQgYXMgYSB0ZW1wbGF0ZSBhbmQgbm90IGFuXG4gICAgICAvLyBlbGVtZW50LCBhbmQgdGhlIHByZWZpeCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LlxuICAgICAgY29uc3QgcHJlZml4ID0gaXNFbGVtZW50Q29udGV4dCA/ICcqJyA6ICcnO1xuICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAga2luZDogdW5zYWZlQ2FzdERpc3BsYXlJbmZvS2luZFRvU2NyaXB0RWxlbWVudEtpbmQoRGlzcGxheUluZm9LaW5kLkRJUkVDVElWRSksXG4gICAgICAgIG5hbWU6IHByZWZpeCArIGNvbXBsZXRpb24uYXR0cmlidXRlLFxuICAgICAgICBzb3J0VGV4dDogcHJlZml4ICsgY29tcGxldGlvbi5hdHRyaWJ1dGUsXG4gICAgICAgIHJlcGxhY2VtZW50U3BhbixcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRGlyZWN0aXZlSW5wdXQ6IHtcbiAgICAgIGlmIChpc0F0dHJpYnV0ZUNvbnRleHQpIHtcbiAgICAgICAgLy8gT2ZmZXIgYSBjb21wbGV0aW9uIG9mIGEgcHJvcGVydHkgYmluZGluZy5cbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuUFJPUEVSVFkpLFxuICAgICAgICAgIG5hbWU6IGBbJHtjb21wbGV0aW9uLnByb3BlcnR5TmFtZX1dYCxcbiAgICAgICAgICBzb3J0VGV4dDogY29tcGxldGlvbi5wcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgdGhlIGRpcmVjdGl2ZSBzdXBwb3J0cyBiYW5hbmEtaW4tYS1ib3ggZm9yIHRoaXMgaW5wdXQsIG9mZmVyIHRoYXQgYXMgd2VsbC5cbiAgICAgICAgaWYgKGNvbXBsZXRpb24udHdvV2F5QmluZGluZ1N1cHBvcnRlZCkge1xuICAgICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuUFJPUEVSVFkpLFxuICAgICAgICAgICAgbmFtZTogYFsoJHtjb21wbGV0aW9uLnByb3BlcnR5TmFtZX0pXWAsXG4gICAgICAgICAgICAvLyBUaGlzIGNvbXBsZXRpb24gc2hvdWxkIHNvcnQgYWZ0ZXIgdGhlIHByb3BlcnR5IGJpbmRpbmcuXG4gICAgICAgICAgICBzb3J0VGV4dDogY29tcGxldGlvbi5wcm9wZXJ0eU5hbWUgKyAnXzEnLFxuICAgICAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9mZmVyIGEgY29tcGxldGlvbiBvZiB0aGUgaW5wdXQgYmluZGluZyBhcyBhbiBhdHRyaWJ1dGUuXG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAga2luZDogdW5zYWZlQ2FzdERpc3BsYXlJbmZvS2luZFRvU2NyaXB0RWxlbWVudEtpbmQoRGlzcGxheUluZm9LaW5kLkFUVFJJQlVURSksXG4gICAgICAgICAgbmFtZTogY29tcGxldGlvbi5wcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgLy8gVGhpcyBjb21wbGV0aW9uIHNob3VsZCBzb3J0IGFmdGVyIGJvdGggcHJvcGVydHkgYmluZGluZyBvcHRpb25zIChvbmUtd2F5IGFuZCB0d28td2F5KS5cbiAgICAgICAgICBzb3J0VGV4dDogY29tcGxldGlvbi5wcm9wZXJ0eU5hbWUgKyAnXzInLFxuICAgICAgICAgIHJlcGxhY2VtZW50U3BhbixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICAgIGtpbmQ6IHVuc2FmZUNhc3REaXNwbGF5SW5mb0tpbmRUb1NjcmlwdEVsZW1lbnRLaW5kKERpc3BsYXlJbmZvS2luZC5QUk9QRVJUWSksXG4gICAgICAgICAgbmFtZTogY29tcGxldGlvbi5wcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgc29ydFRleHQ6IGNvbXBsZXRpb24ucHJvcGVydHlOYW1lLFxuICAgICAgICAgIHJlcGxhY2VtZW50U3BhbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5EaXJlY3RpdmVPdXRwdXQ6IHtcbiAgICAgIGlmIChpc0F0dHJpYnV0ZUNvbnRleHQpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuRVZFTlQpLFxuICAgICAgICAgIG5hbWU6IGAoJHtjb21wbGV0aW9uLmV2ZW50TmFtZX0pYCxcbiAgICAgICAgICBzb3J0VGV4dDogY29tcGxldGlvbi5ldmVudE5hbWUsXG4gICAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAga2luZDogdW5zYWZlQ2FzdERpc3BsYXlJbmZvS2luZFRvU2NyaXB0RWxlbWVudEtpbmQoRGlzcGxheUluZm9LaW5kLkVWRU5UKSxcbiAgICAgICAgICBuYW1lOiBjb21wbGV0aW9uLmV2ZW50TmFtZSxcbiAgICAgICAgICBzb3J0VGV4dDogY29tcGxldGlvbi5ldmVudE5hbWUsXG4gICAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRvbUF0dHJpYnV0ZToge1xuICAgICAgaWYgKGlzQXR0cmlidXRlQ29udGV4dCkge1xuICAgICAgICAvLyBPZmZlciBhIGNvbXBsZXRpb24gb2YgYW4gYXR0cmlidXRlIGJpbmRpbmcuXG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAga2luZDogdW5zYWZlQ2FzdERpc3BsYXlJbmZvS2luZFRvU2NyaXB0RWxlbWVudEtpbmQoRGlzcGxheUluZm9LaW5kLkFUVFJJQlVURSksXG4gICAgICAgICAgbmFtZTogY29tcGxldGlvbi5hdHRyaWJ1dGUsXG4gICAgICAgICAgc29ydFRleHQ6IGNvbXBsZXRpb24uYXR0cmlidXRlLFxuICAgICAgICAgIHJlcGxhY2VtZW50U3BhbixcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb21wbGV0aW9uLmlzQWxzb1Byb3BlcnR5KSB7XG4gICAgICAgICAgLy8gT2ZmZXIgYSBjb21wbGV0aW9uIG9mIGEgcHJvcGVydHkgYmluZGluZyB0byB0aGUgRE9NIHByb3BlcnR5LlxuICAgICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuUFJPUEVSVFkpLFxuICAgICAgICAgICAgbmFtZTogYFske2NvbXBsZXRpb24uYXR0cmlidXRlfV1gLFxuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgRE9NIGF0dHJpYnV0ZXMsIHRoZSBwcm9wZXJ0eSBiaW5kaW5nIHNob3VsZCBzb3J0IGFmdGVyIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vIGJpbmRpbmcuXG4gICAgICAgICAgICBzb3J0VGV4dDogY29tcGxldGlvbi5hdHRyaWJ1dGUgKyAnXzEnLFxuICAgICAgICAgICAgcmVwbGFjZW1lbnRTcGFuLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbXBsZXRpb24uaXNBbHNvUHJvcGVydHkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICBraW5kOiB1bnNhZmVDYXN0RGlzcGxheUluZm9LaW5kVG9TY3JpcHRFbGVtZW50S2luZChEaXNwbGF5SW5mb0tpbmQuUFJPUEVSVFkpLFxuICAgICAgICAgIG5hbWU6IGNvbXBsZXRpb24uYXR0cmlidXRlLFxuICAgICAgICAgIHNvcnRUZXh0OiBjb21wbGV0aW9uLmF0dHJpYnV0ZSxcbiAgICAgICAgICByZXBsYWNlbWVudFNwYW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRG9tUHJvcGVydHk6IHtcbiAgICAgIGlmICghaXNBdHRyaWJ1dGVDb250ZXh0KSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAga2luZDogdW5zYWZlQ2FzdERpc3BsYXlJbmZvS2luZFRvU2NyaXB0RWxlbWVudEtpbmQoRGlzcGxheUluZm9LaW5kLlBST1BFUlRZKSxcbiAgICAgICAgICBuYW1lOiBjb21wbGV0aW9uLnByb3BlcnR5LFxuICAgICAgICAgIHNvcnRUZXh0OiBjb21wbGV0aW9uLnByb3BlcnR5LFxuICAgICAgICAgIHJlcGxhY2VtZW50U3BhbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVDb21wbGV0aW9uU3ltYm9sKFxuICAgIGNvbXBsZXRpb246IEF0dHJpYnV0ZUNvbXBsZXRpb24sIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKTogdHMuU3ltYm9sfG51bGwge1xuICBzd2l0Y2ggKGNvbXBsZXRpb24ua2luZCkge1xuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRG9tQXR0cmlidXRlOlxuICAgIGNhc2UgQXR0cmlidXRlQ29tcGxldGlvbktpbmQuRG9tUHJvcGVydHk6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZUF0dHJpYnV0ZTpcbiAgICBjYXNlIEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLlN0cnVjdHVyYWxEaXJlY3RpdmVBdHRyaWJ1dGU6XG4gICAgICByZXR1cm4gY29tcGxldGlvbi5kaXJlY3RpdmUudHNTeW1ib2w7XG4gICAgY2FzZSBBdHRyaWJ1dGVDb21wbGV0aW9uS2luZC5EaXJlY3RpdmVJbnB1dDpcbiAgICBjYXNlIEF0dHJpYnV0ZUNvbXBsZXRpb25LaW5kLkRpcmVjdGl2ZU91dHB1dDpcbiAgICAgIHJldHVybiBjaGVja2VyLmdldERlY2xhcmVkVHlwZU9mU3ltYm9sKGNvbXBsZXRpb24uZGlyZWN0aXZlLnRzU3ltYm9sKVxuICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHkoY29tcGxldGlvbi5jbGFzc1Byb3BlcnR5TmFtZSkgPz9cbiAgICAgICAgICBudWxsO1xuICB9XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBgQ3NzU2VsZWN0b3JgIGF0dHJpYnV0ZXMsIHdoaWNoIGFyZSBpbnRlcm5hbGx5IHJlcHJlc2VudGVkIGluIGEgemlwcGVkIGFycmF5IHN0eWxlXG4gKiB3aGljaCBpcyBub3QgY29uZHVjaXZlIHRvIHN0cmFpZ2h0Zm9yd2FyZCBpdGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uKiBzZWxlY3RvckF0dHJpYnV0ZXMoc2VsZWN0b3I6IENzc1NlbGVjdG9yKTogSXRlcmFibGU8W3N0cmluZywgc3RyaW5nXT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdG9yLmF0dHJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgeWllbGQgW3NlbGVjdG9yLmF0dHJzWzBdLCBzZWxlY3Rvci5hdHRyc1sxXV07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RydWN0dXJhbEF0dHJpYnV0ZXMobWV0YTogVHlwZUNoZWNrYWJsZURpcmVjdGl2ZU1ldGEpOiBzdHJpbmdbXSB7XG4gIGlmIChtZXRhLnNlbGVjdG9yID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3Qgc3RydWN0dXJhbEF0dHJpYnV0ZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNlbGVjdG9ycyA9IENzc1NlbGVjdG9yLnBhcnNlKG1ldGEuc2VsZWN0b3IpO1xuICBmb3IgKGNvbnN0IHNlbGVjdG9yIG9mIHNlbGVjdG9ycykge1xuICAgIGlmIChzZWxlY3Rvci5lbGVtZW50ICE9PSBudWxsICYmIHNlbGVjdG9yLmVsZW1lbnQgIT09ICduZy10ZW1wbGF0ZScpIHtcbiAgICAgIC8vIFRoaXMgcGFydGljdWxhciBzZWxlY3RvciBkb2VzIG5vdCBhcHBseSB1bmRlciBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBzeW50YXguXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBFdmVyeSBhdHRyaWJ1dGUgb2YgdGhpcyBzZWxlY3RvciBtdXN0IGJlIG5hbWUtb25seSAtIG5vIHJlcXVpcmVkIHZhbHVlcy5cbiAgICBjb25zdCBhdHRyaWJ1dGVTZWxlY3RvcnMgPSBBcnJheS5mcm9tKHNlbGVjdG9yQXR0cmlidXRlcyhzZWxlY3RvcikpO1xuICAgIGlmICghYXR0cmlidXRlU2VsZWN0b3JzLmV2ZXJ5KChbXywgYXR0clZhbHVlXSkgPT4gYXR0clZhbHVlID09PSAnJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEdldCBldmVyeSBuYW1lZCBzZWxlY3Rvci5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU2VsZWN0b3JzLm1hcCgoW2F0dHJOYW1lLCBfXSkgPT4gYXR0ck5hbWUpO1xuXG4gICAgLy8gRmluZCB0aGUgc2hvcnRlc3QgYXR0cmlidXRlLiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBcImJhc2VcIiwgYW5kIGFsbCBwb3RlbnRpYWxcbiAgICAvLyBpbnB1dCBiaW5kaW5ncyBtdXN0IGJlZ2luIHdpdGggdGhlIGJhc2UuIEUuZy4gaW4gYCpuZ0Zvcj1cImxldCBhIG9mIGJcImAsIGBuZ0ZvcmAgaXMgdGhlXG4gICAgLy8gYmFzZSBhdHRyaWJ1dGUsIGFuZCB0aGUgYG9mYCBiaW5kaW5nIGtleSBjb3JyZXNwb25kcyB0byBhbiBpbnB1dCBvZiBgbmdGb3JPZmAuXG4gICAgY29uc3QgYmFzZUF0dHIgPSBhdHRyaWJ1dGVzLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnIpID0+IHByZXYgPT09IG51bGwgfHwgY3Vyci5sZW5ndGggPCBwcmV2Lmxlbmd0aCA/IGN1cnIgOiBwcmV2LFxuICAgICAgICBudWxsIGFzIHN0cmluZyB8IG51bGwpO1xuICAgIGlmIChiYXNlQXR0ciA9PT0gbnVsbCkge1xuICAgICAgLy8gTm8gYXR0cmlidXRlcyBpbiB0aGlzIHNlbGVjdG9yP1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgYXR0cmlidXRlcyBhcmUgY29tcGF0aWJsZSB3aXRoIHVzZSBhcyBhIHN0cnVjdHVyYWwgZGlyZWN0aXZlLlxuICAgIGNvbnN0IGlzVmFsaWQgPSAoYXR0cjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAvLyBUaGUgYmFzZSBhdHRyaWJ1dGUgaXMgdmFsaWQgYnkgZGVmYXVsdC5cbiAgICAgIGlmIChhdHRyID09PSBiYXNlQXR0cikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTm9uLWJhc2UgYXR0cmlidXRlcyBtdXN0IGFsbCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBiYXNlIGF0dHJpYnV0ZS5cbiAgICAgIGlmICghYXR0ci5zdGFydHNXaXRoKGJhc2VBdHRyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vbi1iYXNlIGF0dHJpYnV0ZXMgbXVzdCBhbHNvIGNvcnJlc3BvbmQgdG8gZGlyZWN0aXZlIGlucHV0cy5cbiAgICAgIGlmICghbWV0YS5pbnB1dHMuaGFzQmluZGluZ1Byb3BlcnR5TmFtZShhdHRyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGlzIGNvbXBhdGlibGUuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgaWYgKCFhdHRyaWJ1dGVzLmV2ZXJ5KGlzVmFsaWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGF0dHJpYnV0ZSBpcyB2YWxpZCBhcyBhIHN0cnVjdHVyYWwgYXR0cmlidXRlIGZvciB0aGlzIGRpcmVjdGl2ZS5cbiAgICBzdHJ1Y3R1cmFsQXR0cmlidXRlcy5wdXNoKGJhc2VBdHRyKTtcbiAgfVxuXG4gIHJldHVybiBzdHJ1Y3R1cmFsQXR0cmlidXRlcztcbn1cbiJdfQ==
|
package/ivy/completions.d.ts
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
8
|
/// <amd-module name="@angular/language-service/ivy/completions" />
|
|
9
|
-
import { AST, TmplAstNode
|
|
9
|
+
import { AST, TmplAstNode } from '@angular/compiler';
|
|
10
10
|
import { NgCompiler } from '@angular/compiler-cli/src/ngtsc/core';
|
|
11
11
|
import * as ts from 'typescript';
|
|
12
|
+
import { TemplateTarget } from './template_target';
|
|
12
13
|
export declare enum CompletionNodeContext {
|
|
13
14
|
None = 0,
|
|
14
15
|
ElementTag = 1,
|
|
@@ -33,12 +34,15 @@ export declare class CompletionBuilder<N extends TmplAstNode | AST> {
|
|
|
33
34
|
private readonly compiler;
|
|
34
35
|
private readonly component;
|
|
35
36
|
private readonly node;
|
|
36
|
-
private readonly
|
|
37
|
-
private readonly
|
|
38
|
-
private readonly template;
|
|
37
|
+
private readonly targetDetails;
|
|
38
|
+
private readonly inlineTemplate;
|
|
39
39
|
private readonly typeChecker;
|
|
40
40
|
private readonly templateTypeChecker;
|
|
41
|
-
|
|
41
|
+
private readonly nodeParent;
|
|
42
|
+
private readonly nodeContext;
|
|
43
|
+
private readonly template;
|
|
44
|
+
private readonly position;
|
|
45
|
+
constructor(tsLS: ts.LanguageService, compiler: NgCompiler, component: ts.ClassDeclaration, node: N, targetDetails: TemplateTarget, inlineTemplate: boolean);
|
|
42
46
|
/**
|
|
43
47
|
* Analogue for `ts.LanguageService.getCompletionsAtPosition`.
|
|
44
48
|
*/
|