@skyux/lookup 6.13.0 → 6.16.0
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/documentation.json +716 -627
- package/esm2020/lib/modules/autocomplete/autocomplete-input.directive.mjs +9 -1
- package/esm2020/lib/modules/autocomplete/autocomplete.component.mjs +10 -4
- package/esm2020/lib/modules/lookup/lookup-show-more-async-modal.component.mjs +8 -7
- package/esm2020/lib/modules/lookup/lookup-show-more-modal.component.mjs +20 -14
- package/esm2020/lib/modules/lookup/lookup.component.mjs +7 -3
- package/esm2020/testing/autocomplete/autocomplete-harness-filters.mjs +2 -0
- package/esm2020/testing/autocomplete/autocomplete-harness.mjs +157 -0
- package/esm2020/testing/autocomplete/autocomplete-input-harness.mjs +60 -0
- package/esm2020/testing/autocomplete/autocomplete-search-result-harness-filters.mjs +2 -0
- package/esm2020/testing/autocomplete/autocomplete-search-result-harness.mjs +40 -0
- package/esm2020/testing/lookup/lookup-harness-filters.mjs +2 -0
- package/esm2020/testing/lookup/lookup-harness.mjs +81 -0
- package/esm2020/testing/lookup/lookup-selection-harness-filters.mjs +2 -0
- package/esm2020/testing/lookup/lookup-selection-harness.mjs +7 -0
- package/esm2020/testing/lookup/lookup-selections-list-harness.mjs +25 -0
- package/esm2020/testing/lookup/lookup-show-more-picker-harness-filters.mjs +2 -0
- package/esm2020/testing/lookup/lookup-show-more-picker-harness.mjs +118 -0
- package/esm2020/testing/lookup/lookup-show-more-picker-search-result-harness-filters.mjs +2 -0
- package/esm2020/testing/lookup/lookup-show-more-picker-search-result-harness.mjs +7 -0
- package/esm2020/testing/public-api.mjs +16 -1
- package/esm2020/testing/search/search-fixture.mjs +2 -1
- package/esm2020/testing/search/search-harness-filters.mjs +2 -0
- package/esm2020/testing/search/search-harness.mjs +82 -0
- package/esm2020/testing/search/search-testing.module.mjs +5 -4
- package/fesm2015/skyux-lookup-testing.mjs +691 -5
- package/fesm2015/skyux-lookup-testing.mjs.map +1 -1
- package/fesm2015/skyux-lookup.mjs +54 -29
- package/fesm2015/skyux-lookup.mjs.map +1 -1
- package/fesm2020/skyux-lookup-testing.mjs +569 -4
- package/fesm2020/skyux-lookup-testing.mjs.map +1 -1
- package/fesm2020/skyux-lookup.mjs +53 -29
- package/fesm2020/skyux-lookup.mjs.map +1 -1
- package/lib/modules/autocomplete/autocomplete-input.directive.d.ts +1 -0
- package/lib/modules/lookup/lookup-show-more-async-modal.component.d.ts +6 -2
- package/lib/modules/lookup/lookup-show-more-modal.component.d.ts +6 -1
- package/lib/modules/lookup/lookup.component.d.ts +1 -0
- package/package.json +11 -10
- package/testing/autocomplete/autocomplete-harness-filters.d.ts +6 -0
- package/testing/autocomplete/autocomplete-harness.d.ts +79 -0
- package/testing/autocomplete/autocomplete-input-harness.d.ts +39 -0
- package/testing/autocomplete/autocomplete-search-result-harness-filters.d.ts +10 -0
- package/testing/autocomplete/autocomplete-search-result-harness.d.ts +30 -0
- package/testing/lookup/lookup-harness-filters.d.ts +6 -0
- package/testing/lookup/lookup-harness.d.ts +50 -0
- package/testing/lookup/lookup-selection-harness-filters.d.ts +6 -0
- package/testing/lookup/lookup-selection-harness.d.ts +6 -0
- package/testing/lookup/lookup-selections-list-harness.d.ts +19 -0
- package/testing/lookup/lookup-show-more-picker-harness-filters.d.ts +6 -0
- package/testing/lookup/lookup-show-more-picker-harness.d.ts +60 -0
- package/testing/lookup/lookup-show-more-picker-search-result-harness-filters.d.ts +6 -0
- package/testing/lookup/lookup-show-more-picker-search-result-harness.d.ts +6 -0
- package/testing/public-api.d.ts +15 -0
- package/testing/search/search-fixture.d.ts +1 -0
- package/testing/search/search-harness-filters.d.ts +6 -0
- package/testing/search/search-harness.d.ts +47 -0
- package/testing/search/search-testing.module.d.ts +3 -2
|
@@ -194,6 +194,14 @@ export class SkyAutocompleteInputDirective {
|
|
|
194
194
|
__classPrivateFieldGet(this, _SkyAutocompleteInputDirective_renderer, "f").removeAttribute(__classPrivateFieldGet(this, _SkyAutocompleteInputDirective_elementRef, "f").nativeElement, 'aria-activedescendant');
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
|
+
setAriaOwns(overlayId) {
|
|
198
|
+
if (overlayId) {
|
|
199
|
+
__classPrivateFieldGet(this, _SkyAutocompleteInputDirective_renderer, "f").setAttribute(__classPrivateFieldGet(this, _SkyAutocompleteInputDirective_elementRef, "f").nativeElement, 'aria-owns', overlayId);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
__classPrivateFieldGet(this, _SkyAutocompleteInputDirective_renderer, "f").removeAttribute(__classPrivateFieldGet(this, _SkyAutocompleteInputDirective_elementRef, "f").nativeElement, 'aria-owns');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
197
205
|
// Angular automatically constructs these methods.
|
|
198
206
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
199
207
|
onChange(value) { }
|
|
@@ -223,4 +231,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
223
231
|
}], disabled: [{
|
|
224
232
|
type: Input
|
|
225
233
|
}] } });
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUtaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQWMsT0FBTyxFQUFFLFNBQVMsSUFBSSxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBSTNDLE1BQU0sK0JBQStCLEdBQUc7SUFDdEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDO0lBQzVELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQUc7SUFDakMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztJQUM1RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFNRixNQUFNLE9BQU8sNkJBQTZCO0lBZ0l4QyxZQUFZLFVBQXNCLEVBQUUsUUFBbUI7O1FBOUJ2RCxzREFBcUI7UUFFckIseURBQXNDO1FBRXRDLDREQUF3QjtRQUV4Qix1REFBc0I7UUFFdEIsdURBQWlCLElBQUksRUFBQztRQUV0Qix1REFBaUIsSUFBSSxPQUFPLEVBQVEsRUFBQztRQUVyQywwREFBcUI7UUFFckIsNkRB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MEIsQ0FBQztpQkFDekU7eUhBU1kscUJBQXFCO3NCQUQvQixLQUFLO2dCQXdCSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZUlucHV0VGV4dENoYW5nZSB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLWlucHV0LXRleHQtY2hhbmdlJztcblxuY29uc3QgU0tZX0FVVE9DT01QTEVURV9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfQVVUT0NPTVBMRVRFX1ZBTElEQVRPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0W3NreUF1dG9jb21wbGV0ZV0sIHRleHRhcmVhW3NreUF1dG9jb21wbGV0ZV0nLFxuICBwcm92aWRlcnM6IFtTS1lfQVVUT0NPTVBMRVRFX1ZBTFVFX0FDQ0VTU09SLCBTS1lfQVVUT0NPTVBMRVRFX1ZBTElEQVRPUl0sXG59KVxuZXhwb3J0IGNsYXNzIFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgZm9yIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgb24gdGhlIGZvcm0gaW5wdXQuXG4gICAqIEBkZWZhdWx0IFwib2ZmXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYXV0b2NvbXBsZXRlQXR0cmlidXRlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLiNfYXV0b2NvbXBsZXRlQXR0cmlidXRlID0gJ29mZic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI19hdXRvY29tcGxldGVBdHRyaWJ1dGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnYXV0b2NvbXBsZXRlJyxcbiAgICAgIHRoaXMuI19hdXRvY29tcGxldGVBdHRyaWJ1dGVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBhdXRvY29tcGxldGVBdHRyaWJ1dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX2F1dG9jb21wbGV0ZUF0dHJpYnV0ZSB8fCAnb2ZmJztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBhdXRvY29tcGxldGUgZmllbGQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBibHVyKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLiNfYmx1ck9icztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzcGxheVdpdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc3BsYXlXaXRoO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNwbGF5V2l0aCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jX2Rpc3BsYXlXaXRoID0gdmFsdWU7XG4gICAgdGhpcy5pbnB1dFRleHRWYWx1ZSA9IHRoaXMuI2dldFZhbHVlQnlLZXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9jdXMoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuI19mb2N1c09icztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5wdXRUZXh0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnB1dFRleHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWUgfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRleHRDaGFuZ2VzKCk6IE9ic2VydmFibGU8U2t5QXV0b2NvbXBsZXRlSW5wdXRUZXh0Q2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuI190ZXh0Q2hhbmdlc09icztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgaXNOZXdWYWx1ZSA9IHZhbHVlICE9PSB0aGlzLiNfdmFsdWU7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpc05ld1ZhbHVlKSB7XG4gICAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB0aGlzLiNnZXRWYWx1ZUJ5S2V5KCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG5cbiAgICAgIC8vIERvIG5vdCBtYXJrIHRoZSBmaWVsZCBhcyBcImRpcnR5XCJcbiAgICAgIC8vIGlmIHRoZSBmaWVsZCBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIGEgdmFsdWUuXG4gICAgICBpZiAodGhpcy4jaXNGaXJzdENoYW5nZSAmJiB0aGlzLiNjb250cm9sKSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI2lzRmlyc3RDaGFuZ2UgJiYgdGhpcy4jX3ZhbHVlKSB7XG4gICAgICAgIHRoaXMuI2lzRmlyc3RDaGFuZ2UgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjYmx1cjogU3ViamVjdDx2b2lkPjtcblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gICNmb2N1czogU3ViamVjdDx2b2lkPjtcblxuICAjaXNGaXJzdENoYW5nZSA9IHRydWU7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gICN0ZXh0Q2hhbmdlczogU3ViamVjdDxTa3lBdXRvY29tcGxldGVJbnB1dFRleHRDaGFuZ2U+O1xuXG4gICNfYXV0b2NvbXBsZXRlQXR0cmlidXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19ibHVyT2JzOiBPYnNlcnZhYmxlPHZvaWQ+O1xuXG4gICNfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAjX2Rpc3BsYXlXaXRoID0gJyc7XG5cbiAgI19mb2N1c09iczogT2JzZXJ2YWJsZTx2b2lkPjtcblxuICAjX3RleHRDaGFuZ2VzT2JzOiBPYnNlcnZhYmxlPFNreUF1dG9jb21wbGV0ZUlucHV0VGV4dENoYW5nZT47XG5cbiAgI192YWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNyZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgdGhpcy4jYmx1ciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgdGhpcy4jZm9jdXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHRoaXMuI3RleHRDaGFuZ2VzID0gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlSW5wdXRUZXh0Q2hhbmdlPigpO1xuXG4gICAgdGhpcy4jX2JsdXJPYnMgPSB0aGlzLiNibHVyLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuI19mb2N1c09icyA9IHRoaXMuI2ZvY3VzLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuI190ZXh0Q2hhbmdlc09icyA9IHRoaXMuI3RleHRDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLiNzZXRBdHRyaWJ1dGVzKHRoaXMuI2VsZW1lbnRSZWYpO1xuXG4gICAgb2JzZXJ2YWJsZUZyb21FdmVudChlbGVtZW50LCAnaW5wdXQnKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMuI3RleHRDaGFuZ2VzLm5leHQoe1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KGVsZW1lbnQsICdibHVyJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLiNibHVyLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KGVsZW1lbnQsICdmb2N1cycpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy4jZm9jdXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQoZWxlbWVudCwgJ2NoYW5nZScpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy4jaXNGaXJzdENoYW5nZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNibHVyLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jdGV4dENoYW5nZXMuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLiNnZXRWYWx1ZUJ5S2V5KCk7XG5cbiAgICAvLyBJZiB0aGUgc2VhcmNoIGZpZWxkIGNvbnRhaW5zIHRleHQsIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZVxuICAgIC8vIG1hdGNoZXMgdGhlIHNlbGVjdGVkIGRlc2NyaXB0b3Iga2V5LlxuICAgIGlmICh0aGlzLmlucHV0VGV4dFZhbHVlICE9PSBtb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLmlucHV0VGV4dFZhbHVlID0gbW9kZWxWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghdGhpcy4jY29udHJvbCkge1xuICAgICAgdGhpcy4jY29udHJvbCA9IGNvbnRyb2w7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gU2VlOiBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLyNrYmRfZm9jdXNfYWN0aXZlZGVzY2VuZGFudFxuICBwdWJsaWMgc2V0QWN0aXZlRGVzY2VuZGFudChkZXNjZW5kYW50SWQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZGVzY2VuZGFudElkKSB7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsXG4gICAgICAgIGRlc2NlbmRhbnRJZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFuZ3VsYXIgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RzIHRoZXNlIG1ldGhvZHMuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHt9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uVG91Y2hlZCgpOiB2b2lkIHt9XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uVmFsaWRhdG9yQ2hhbmdlID0gKCkgPT4ge307XG5cbiAgI3NldEF0dHJpYnV0ZXMoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICBlbGVtZW50LFxuICAgICAgJ2F1dG9jb21wbGV0ZScsXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUF0dHJpYnV0ZVxuICAgICk7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdhdXRvY2FwaXRhbGl6ZScsICdub25lJyk7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdhdXRvY29ycmVjdCcsICdvZmYnKTtcbiAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3NwZWxsY2hlY2snLCAnZmFsc2UnKTtcbiAgICB0aGlzLiNyZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnc2t5LWZvcm0tY29udHJvbCcpO1xuICB9XG5cbiAgI2dldFZhbHVlQnlLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWVbdGhpcy5kaXNwbGF5V2l0aF0gOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUtaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQWMsT0FBTyxFQUFFLFNBQVMsSUFBSSxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBSTNDLE1BQU0sK0JBQStCLEdBQUc7SUFDdEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDO0lBQzVELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQUc7SUFDakMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztJQUM1RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFNRixNQUFNLE9BQU8sNkJBQTZCO0lBZ0l4QyxZQUFZLFVBQXNCLEVBQUUsUUFBbUI7O1FBOUJ2RCxzREFBcUI7UUFFckIseURBQXNDO1FBRXRDLDREQUF3QjtRQUV4Qix1REFBc0I7UUFFdEIsdURBQWlCLElBQUksRUFBQztRQUV0Qix1REFBaUIsSUFBSSxPQUFPLEVBQVEsRUFBQztRQUVyQywwREFBcUI7UUFFckIsNkRB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LENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDL0QsQ0FBQzswSEE3UlUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsOEpBRjdCLENBQUMsK0JBQStCLEVBQUUsMEJBQTBCLENBQUM7MkZBRTdELDZCQUE2QjtrQkFKekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbURBQW1EO29CQUM3RCxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSwwQkFBMEIsQ0FBQztpQkFDekU7eUhBU1kscUJBQXFCO3NCQUQvQixLQUFLO2dCQXdCSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZUlucHV0VGV4dENoYW5nZSB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLWlucHV0LXRleHQtY2hhbmdlJztcblxuY29uc3QgU0tZX0FVVE9DT01QTEVURV9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfQVVUT0NPTVBMRVRFX1ZBTElEQVRPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0W3NreUF1dG9jb21wbGV0ZV0sIHRleHRhcmVhW3NreUF1dG9jb21wbGV0ZV0nLFxuICBwcm92aWRlcnM6IFtTS1lfQVVUT0NPTVBMRVRFX1ZBTFVFX0FDQ0VTU09SLCBTS1lfQVVUT0NPTVBMRVRFX1ZBTElEQVRPUl0sXG59KVxuZXhwb3J0IGNsYXNzIFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgZm9yIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgb24gdGhlIGZvcm0gaW5wdXQuXG4gICAqIEBkZWZhdWx0IFwib2ZmXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYXV0b2NvbXBsZXRlQXR0cmlidXRlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLiNfYXV0b2NvbXBsZXRlQXR0cmlidXRlID0gJ29mZic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI19hdXRvY29tcGxldGVBdHRyaWJ1dGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnYXV0b2NvbXBsZXRlJyxcbiAgICAgIHRoaXMuI19hdXRvY29tcGxldGVBdHRyaWJ1dGVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBhdXRvY29tcGxldGVBdHRyaWJ1dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX2F1dG9jb21wbGV0ZUF0dHJpYnV0ZSB8fCAnb2ZmJztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBhdXRvY29tcGxldGUgZmllbGQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBibHVyKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLiNfYmx1ck9icztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzcGxheVdpdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc3BsYXlXaXRoO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNwbGF5V2l0aCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jX2Rpc3BsYXlXaXRoID0gdmFsdWU7XG4gICAgdGhpcy5pbnB1dFRleHRWYWx1ZSA9IHRoaXMuI2dldFZhbHVlQnlLZXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9jdXMoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuI19mb2N1c09icztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5wdXRUZXh0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnB1dFRleHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWUgfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRleHRDaGFuZ2VzKCk6IE9ic2VydmFibGU8U2t5QXV0b2NvbXBsZXRlSW5wdXRUZXh0Q2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuI190ZXh0Q2hhbmdlc09icztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgaXNOZXdWYWx1ZSA9IHZhbHVlICE9PSB0aGlzLiNfdmFsdWU7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpc05ld1ZhbHVlKSB7XG4gICAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB0aGlzLiNnZXRWYWx1ZUJ5S2V5KCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG5cbiAgICAgIC8vIERvIG5vdCBtYXJrIHRoZSBmaWVsZCBhcyBcImRpcnR5XCJcbiAgICAgIC8vIGlmIHRoZSBmaWVsZCBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIGEgdmFsdWUuXG4gICAgICBpZiAodGhpcy4jaXNGaXJzdENoYW5nZSAmJiB0aGlzLiNjb250cm9sKSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI2lzRmlyc3RDaGFuZ2UgJiYgdGhpcy4jX3ZhbHVlKSB7XG4gICAgICAgIHRoaXMuI2lzRmlyc3RDaGFuZ2UgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjYmx1cjogU3ViamVjdDx2b2lkPjtcblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gICNmb2N1czogU3ViamVjdDx2b2lkPjtcblxuICAjaXNGaXJzdENoYW5nZSA9IHRydWU7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gICN0ZXh0Q2hhbmdlczogU3ViamVjdDxTa3lBdXRvY29tcGxldGVJbnB1dFRleHRDaGFuZ2U+O1xuXG4gICNfYXV0b2NvbXBsZXRlQXR0cmlidXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19ibHVyT2JzOiBPYnNlcnZhYmxlPHZvaWQ+O1xuXG4gICNfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAjX2Rpc3BsYXlXaXRoID0gJyc7XG5cbiAgI19mb2N1c09iczogT2JzZXJ2YWJsZTx2b2lkPjtcblxuICAjX3RleHRDaGFuZ2VzT2JzOiBPYnNlcnZhYmxlPFNreUF1dG9jb21wbGV0ZUlucHV0VGV4dENoYW5nZT47XG5cbiAgI192YWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNyZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgdGhpcy4jYmx1ciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgdGhpcy4jZm9jdXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHRoaXMuI3RleHRDaGFuZ2VzID0gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlSW5wdXRUZXh0Q2hhbmdlPigpO1xuXG4gICAgdGhpcy4jX2JsdXJPYnMgPSB0aGlzLiNibHVyLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuI19mb2N1c09icyA9IHRoaXMuI2ZvY3VzLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuI190ZXh0Q2hhbmdlc09icyA9IHRoaXMuI3RleHRDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLiNzZXRBdHRyaWJ1dGVzKHRoaXMuI2VsZW1lbnRSZWYpO1xuXG4gICAgb2JzZXJ2YWJsZUZyb21FdmVudChlbGVtZW50LCAnaW5wdXQnKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMuI3RleHRDaGFuZ2VzLm5leHQoe1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KGVsZW1lbnQsICdibHVyJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLiNibHVyLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KGVsZW1lbnQsICdmb2N1cycpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy4jZm9jdXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQoZWxlbWVudCwgJ2NoYW5nZScpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy4jaXNGaXJzdENoYW5nZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNibHVyLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jdGV4dENoYW5nZXMuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLiNnZXRWYWx1ZUJ5S2V5KCk7XG5cbiAgICAvLyBJZiB0aGUgc2VhcmNoIGZpZWxkIGNvbnRhaW5zIHRleHQsIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZVxuICAgIC8vIG1hdGNoZXMgdGhlIHNlbGVjdGVkIGRlc2NyaXB0b3Iga2V5LlxuICAgIGlmICh0aGlzLmlucHV0VGV4dFZhbHVlICE9PSBtb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLmlucHV0VGV4dFZhbHVlID0gbW9kZWxWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghdGhpcy4jY29udHJvbCkge1xuICAgICAgdGhpcy4jY29udHJvbCA9IGNvbnRyb2w7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gU2VlOiBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLyNrYmRfZm9jdXNfYWN0aXZlZGVzY2VuZGFudFxuICBwdWJsaWMgc2V0QWN0aXZlRGVzY2VuZGFudChkZXNjZW5kYW50SWQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZGVzY2VuZGFudElkKSB7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsXG4gICAgICAgIGRlc2NlbmRhbnRJZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRBcmlhT3ducyhvdmVybGF5SWQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAob3ZlcmxheUlkKSB7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2FyaWEtb3ducycsXG4gICAgICAgIG92ZXJsYXlJZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdhcmlhLW93bnMnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFuZ3VsYXIgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RzIHRoZXNlIG1ldGhvZHMuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHt9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uVG91Y2hlZCgpOiB2b2lkIHt9XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uVmFsaWRhdG9yQ2hhbmdlID0gKCkgPT4ge307XG5cbiAgI3NldEF0dHJpYnV0ZXMoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICBlbGVtZW50LFxuICAgICAgJ2F1dG9jb21wbGV0ZScsXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUF0dHJpYnV0ZVxuICAgICk7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdhdXRvY2FwaXRhbGl6ZScsICdub25lJyk7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdhdXRvY29ycmVjdCcsICdvZmYnKTtcbiAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3NwZWxsY2hlY2snLCAnZmFsc2UnKTtcbiAgICB0aGlzLiNyZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnc2t5LWZvcm0tY29udHJvbCcpO1xuICB9XG5cbiAgI2dldFZhbHVlQnlLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWVbdGhpcy5kaXNwbGF5V2l0aF0gOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var _SkyAutocompleteComponent_instances, _SkyAutocompleteComponent_activeElementIndex, _SkyAutocompleteComponent_adapterService, _SkyAutocompleteComponent_affixer, _SkyAutocompleteComponent_affixService, _SkyAutocompleteComponent_changeDetector, _SkyAutocompleteComponent_elementRef, _SkyAutocompleteComponent_inputBoxHostSvc, _SkyAutocompleteComponent_inputDirectiveUnsubscribe, _SkyAutocompleteComponent_messageStreamSub, _SkyAutocompleteComponent_ngUnsubscribe, _SkyAutocompleteComponent_overlay, _SkyAutocompleteComponent_overlayService, _SkyAutocompleteComponent_overlayFocusableElements, _SkyAutocompleteComponent_currentSearchSub, _SkyAutocompleteComponent__data, _SkyAutocompleteComponent__debounceTime, _SkyAutocompleteComponent__descriptorProperty, _SkyAutocompleteComponent__highlightText, _SkyAutocompleteComponent__inputDirective, _SkyAutocompleteComponent__messageStream, _SkyAutocompleteComponent__propertiesToSearch, _SkyAutocompleteComponent__resultsRef, _SkyAutocompleteComponent__search, _SkyAutocompleteComponent__searchResults, _SkyAutocompleteComponent__searchResultsLimit, _SkyAutocompleteComponent__searchTextMinimumCharacters, _SkyAutocompleteComponent_searchTextChanged, _SkyAutocompleteComponent_performSearch, _SkyAutocompleteComponent_cancelCurrentSearch, _SkyAutocompleteComponent_getHighlightText, _SkyAutocompleteComponent_selectSearchResultById, _SkyAutocompleteComponent_openDropdown, _SkyAutocompleteComponent_closeDropdown, _SkyAutocompleteComponent_setActiveDescendant, _SkyAutocompleteComponent_removeActiveDescendant, _SkyAutocompleteComponent_resetSearch, _SkyAutocompleteComponent_addInputEventListeners, _SkyAutocompleteComponent_destroyOverlay, _SkyAutocompleteComponent_createAffixer, _SkyAutocompleteComponent_destroyAffixer, _SkyAutocompleteComponent_initMessageStream, _SkyAutocompleteComponent_initOverlayFocusableElements, _SkyAutocompleteComponent_getActiveElement, _SkyAutocompleteComponent_removeFocusedClass, _SkyAutocompleteComponent_addFocusedClass;
|
|
1
|
+
var _SkyAutocompleteComponent_instances, _SkyAutocompleteComponent_activeElementIndex, _SkyAutocompleteComponent_adapterService, _SkyAutocompleteComponent_affixer, _SkyAutocompleteComponent_affixService, _SkyAutocompleteComponent_changeDetector, _SkyAutocompleteComponent_elementRef, _SkyAutocompleteComponent_inputBoxHostSvc, _SkyAutocompleteComponent_inputDirectiveUnsubscribe, _SkyAutocompleteComponent_messageStreamSub, _SkyAutocompleteComponent_ngUnsubscribe, _SkyAutocompleteComponent_overlay, _SkyAutocompleteComponent_overlayService, _SkyAutocompleteComponent_overlayFocusableElements, _SkyAutocompleteComponent_currentSearchSub, _SkyAutocompleteComponent__data, _SkyAutocompleteComponent__debounceTime, _SkyAutocompleteComponent__descriptorProperty, _SkyAutocompleteComponent__highlightText, _SkyAutocompleteComponent__inputDirective, _SkyAutocompleteComponent__messageStream, _SkyAutocompleteComponent__propertiesToSearch, _SkyAutocompleteComponent__resultsRef, _SkyAutocompleteComponent__search, _SkyAutocompleteComponent__searchResults, _SkyAutocompleteComponent__searchResultsLimit, _SkyAutocompleteComponent__searchTextMinimumCharacters, _SkyAutocompleteComponent_searchTextChanged, _SkyAutocompleteComponent_performSearch, _SkyAutocompleteComponent_cancelCurrentSearch, _SkyAutocompleteComponent_getHighlightText, _SkyAutocompleteComponent_selectSearchResultById, _SkyAutocompleteComponent_openDropdown, _SkyAutocompleteComponent_closeDropdown, _SkyAutocompleteComponent_setActiveDescendant, _SkyAutocompleteComponent_removeActiveDescendant, _SkyAutocompleteComponent_updateAriaOwns, _SkyAutocompleteComponent_resetSearch, _SkyAutocompleteComponent_addInputEventListeners, _SkyAutocompleteComponent_destroyOverlay, _SkyAutocompleteComponent_createAffixer, _SkyAutocompleteComponent_destroyAffixer, _SkyAutocompleteComponent_initMessageStream, _SkyAutocompleteComponent_initOverlayFocusableElements, _SkyAutocompleteComponent_getActiveElement, _SkyAutocompleteComponent_removeFocusedClass, _SkyAutocompleteComponent_addFocusedClass;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
3
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, Optional, Output, TemplateRef, ViewChild, } from '@angular/core';
|
|
4
4
|
import { SkyAffixAutoFitContext, SkyAffixService, SkyOverlayService, } from '@skyux/core';
|
|
@@ -547,6 +547,7 @@ _SkyAutocompleteComponent_activeElementIndex = new WeakMap(), _SkyAutocompleteCo
|
|
|
547
547
|
__classPrivateFieldSet(this, _SkyAutocompleteComponent_overlay, overlay, "f");
|
|
548
548
|
this.isOpen = true;
|
|
549
549
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent_changeDetector, "f").markForCheck();
|
|
550
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_updateAriaOwns).call(this);
|
|
550
551
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_initOverlayFocusableElements).call(this);
|
|
551
552
|
}
|
|
552
553
|
}, _SkyAutocompleteComponent_closeDropdown = function _SkyAutocompleteComponent_closeDropdown() {
|
|
@@ -554,6 +555,7 @@ _SkyAutocompleteComponent_activeElementIndex = new WeakMap(), _SkyAutocompleteCo
|
|
|
554
555
|
this.isOpen = false;
|
|
555
556
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_destroyOverlay).call(this);
|
|
556
557
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_removeActiveDescendant).call(this);
|
|
558
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_updateAriaOwns).call(this);
|
|
557
559
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent_changeDetector, "f").markForCheck();
|
|
558
560
|
}, _SkyAutocompleteComponent_setActiveDescendant = function _SkyAutocompleteComponent_setActiveDescendant() {
|
|
559
561
|
const activeElement = __classPrivateFieldGet(this, _SkyAutocompleteComponent_overlayFocusableElements, "f")[__classPrivateFieldGet(this, _SkyAutocompleteComponent_activeElementIndex, "f")];
|
|
@@ -566,6 +568,10 @@ _SkyAutocompleteComponent_activeElementIndex = new WeakMap(), _SkyAutocompleteCo
|
|
|
566
568
|
if (this.inputDirective) {
|
|
567
569
|
this.inputDirective.setActiveDescendant(null);
|
|
568
570
|
}
|
|
571
|
+
}, _SkyAutocompleteComponent_updateAriaOwns = function _SkyAutocompleteComponent_updateAriaOwns() {
|
|
572
|
+
if (this.inputDirective) {
|
|
573
|
+
this.inputDirective.setAriaOwns(__classPrivateFieldGet(this, _SkyAutocompleteComponent_overlay, "f")?.id || null);
|
|
574
|
+
}
|
|
569
575
|
}, _SkyAutocompleteComponent_resetSearch = function _SkyAutocompleteComponent_resetSearch() {
|
|
570
576
|
this.searchResults = [];
|
|
571
577
|
this.searchText = '';
|
|
@@ -660,10 +666,10 @@ _SkyAutocompleteComponent_activeElementIndex = new WeakMap(), _SkyAutocompleteCo
|
|
|
660
666
|
}
|
|
661
667
|
};
|
|
662
668
|
SkyAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyAutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.SkyAffixService }, { token: i2.SkyAutocompleteAdapterService }, { token: i1.SkyOverlayService }, { token: i3.SkyInputBoxHostService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
663
|
-
SkyAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyAutocompleteComponent, selector: "sky-autocomplete", inputs: { ariaLabelledBy: "ariaLabelledBy", data: "data", debounceTime: "debounceTime", descriptorProperty: "descriptorProperty", enableShowMore: "enableShowMore", messageStream: "messageStream", wrapperClass: "wrapperClass", propertiesToSearch: "propertiesToSearch", search: "search", searchResultTemplate: "searchResultTemplate", searchTextMinimumCharacters: "searchTextMinimumCharacters", searchFilters: "searchFilters", searchResultsLimit: "searchResultsLimit", showAddButton: "showAddButton", noResultsFoundText: "noResultsFoundText", searchAsyncDisabled: "searchAsyncDisabled" }, outputs: { addClick: "addClick", showMoreClick: "showMoreClick", selectionChange: "selectionChange", searchAsync: "searchAsync" }, providers: [SkyAutocompleteAdapterService], queries: [{ propertyName: "inputDirective", first: true, predicate: SkyAutocompleteInputDirective, descendants: true }], viewQueries: [{ propertyName: "resultsTemplateRef", first: true, predicate: ["resultsTemplateRef"], descendants: true, read: TemplateRef }, { propertyName: "resultsRef", first: true, predicate: ["resultsRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen && searchText\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-owns]=\"isOpen ? resultsListId : null\"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content></ng-content>\n</div>\n\n<ng-template #resultsTemplateRef>\n <div\n class=\"sky-autocomplete-results-container\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n (keydown)=\"handleKeydown($event)\"\n #resultsRef\n >\n <div\n *ngIf=\"isSearchingAsync; else resultControlsTemplateRef\"\n class=\"sky-autocomplete-results-waiting\"\n >\n <sky-wait [isWaiting]=\"true\"></sky-wait>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resultControlsTemplateRef>\n <div\n *ngIf=\"searchText && (!showActionsArea || searchResults.length > 0)\"\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"resultsListId\"\n >\n <ng-container *ngFor=\"let result of searchResults; let i = index\">\n <div\n *ngIf=\"!searchResultsLimit || i < searchResultsLimit\"\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (mousedown)=\"onResultMouseDown(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n #searchResultEl\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate || defaultSearchResultTemplate;\n context: { item: result.data }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"searchResults.length === 0\"\n class=\"sky-deemphasized sky-padding-squish-default\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n </div>\n <div *ngIf=\"showActionsArea\" class=\"sky-autocomplete-actions\">\n <button\n *ngIf=\"enableShowMore && (!searchText || searchResults.length > 0)\"\n class=\"sky-autocomplete-action sky-autocomplete-action-more sky-btn sky-btn-link\"\n type=\"button\"\n (mousedown)=\"moreButtonClicked()\"\n >\n <ng-container\n *ngIf=\"\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText\n \"\n >\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n </ng-container>\n <ng-container\n *ngIf=\"\n (searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) &&\n !searchText\n \"\n >\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources: (data.length | skyNumeric: { truncate: false })\n }}\n </ng-container>\n <ng-container *ngIf=\"searchText\">\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount | skyNumeric: { truncate: false }))\n }}\n </ng-container>\n </button>\n <div\n *ngIf=\"searchText && searchResults.length === 0\"\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n <button\n *ngIf=\"showAddButton\"\n class=\"sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (mousedown)=\"addButtonClicked()\"\n #addButtonEl\n >\n <sky-icon *skyThemeIf=\"'modern'\" icon=\"add\" iconType=\"skyux\"></sky-icon>\n <sky-icon *skyThemeIf=\"'default'\" icon=\"plus-circle\"></sky-icon>\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #defaultSearchResultTemplate>\n {{ item[descriptorProperty] }}\n</ng-template>\n", styles: [".sky-autocomplete-results-container{position:fixed;background-color:#fff}.sky-autocomplete-results-waiting{height:70px}.sky-autocomplete-results{display:flex;flex-direction:column;padding:4px;overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:calc(50vh - 50px)}.sky-autocomplete-result{color:#212327;margin-bottom:4px;padding:3px 20px;cursor:pointer}.sky-autocomplete-result:last-child{margin-bottom:0}.sky-autocomplete-actions{border-top:1px solid #cdcfd2}.sky-autocomplete-actions .sky-autocomplete-action{border:none}.sky-autocomplete-actions .sky-autocomplete-actions-no-results{display:inline-block;padding:7px 13px}.sky-autocomplete-action-add{float:right}.sky-autocomplete-action-add sky-icon{padding-right:5px}.sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:#eeeeef}.sky-autocomplete-descendant-focus.sky-autocomplete-action{outline:thin dotted;outline:-webkit-focus-ring-color auto 5px}::ng-deep .sky-theme-modern .sky-autocomplete-results-container{border-radius:6px}::ng-deep .sky-theme-modern .sky-autocomplete-results{padding:10px 0}::ng-deep .sky-theme-modern .sky-autocomplete-result{margin-bottom:0;padding:10px 0 10px 15px}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:inherit}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 8px #0000004d}\n"], components: [{ type: i4.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking"] }, { type: i4.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }], directives: [{ type: i5.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.λ11, selector: "[skyHighlight]", inputs: ["skyHighlight"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.λ3, selector: "[skyThemeIf]", inputs: ["skyThemeIf"] }], pipes: { "skyLibResources": i7.SkyLibResourcesPipe, "skyAutocompleteSearchAsyncDisabled": i8.SkyAutcompleteSearchAsyncDisabledPipe, "skyNumeric": i1.SkyNumericPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
669
|
+
SkyAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyAutocompleteComponent, selector: "sky-autocomplete", inputs: { ariaLabelledBy: "ariaLabelledBy", data: "data", debounceTime: "debounceTime", descriptorProperty: "descriptorProperty", enableShowMore: "enableShowMore", messageStream: "messageStream", wrapperClass: "wrapperClass", propertiesToSearch: "propertiesToSearch", search: "search", searchResultTemplate: "searchResultTemplate", searchTextMinimumCharacters: "searchTextMinimumCharacters", searchFilters: "searchFilters", searchResultsLimit: "searchResultsLimit", showAddButton: "showAddButton", noResultsFoundText: "noResultsFoundText", searchAsyncDisabled: "searchAsyncDisabled" }, outputs: { addClick: "addClick", showMoreClick: "showMoreClick", selectionChange: "selectionChange", searchAsync: "searchAsync" }, providers: [SkyAutocompleteAdapterService], queries: [{ propertyName: "inputDirective", first: true, predicate: SkyAutocompleteInputDirective, descendants: true }], viewQueries: [{ propertyName: "resultsTemplateRef", first: true, predicate: ["resultsTemplateRef"], descendants: true, read: TemplateRef }, { propertyName: "resultsRef", first: true, predicate: ["resultsRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen && searchText\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-owns]=\"isOpen ? resultsListId : null\"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content></ng-content>\n</div>\n\n<ng-template #resultsTemplateRef>\n <div\n class=\"sky-autocomplete-results-container\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n (keydown)=\"handleKeydown($event)\"\n #resultsRef\n >\n <div\n *ngIf=\"isSearchingAsync; else resultControlsTemplateRef\"\n class=\"sky-autocomplete-results-waiting\"\n >\n <sky-wait [isWaiting]=\"true\"></sky-wait>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resultControlsTemplateRef>\n <div\n *ngIf=\"searchText && (!showActionsArea || searchResults.length > 0)\"\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"resultsListId\"\n >\n <ng-container *ngFor=\"let result of searchResults; let i = index\">\n <div\n *ngIf=\"!searchResultsLimit || i < searchResultsLimit\"\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.data-descriptor-value]=\"result.data[descriptorProperty]\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (mousedown)=\"onResultMouseDown(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n #searchResultEl\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate || defaultSearchResultTemplate;\n context: { item: result.data }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"searchResults.length === 0\"\n class=\"sky-deemphasized sky-padding-squish-default\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n </div>\n <div *ngIf=\"showActionsArea\" class=\"sky-autocomplete-actions\">\n <button\n *ngIf=\"enableShowMore && (!searchText || searchResults.length > 0)\"\n class=\"sky-autocomplete-action sky-autocomplete-action-more sky-btn sky-btn-link\"\n type=\"button\"\n (mousedown)=\"moreButtonClicked()\"\n >\n <ng-container\n *ngIf=\"\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText\n \"\n >\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n </ng-container>\n <ng-container\n *ngIf=\"\n (searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) &&\n !searchText\n \"\n >\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources: (data.length | skyNumeric: { truncate: false })\n }}\n </ng-container>\n <ng-container *ngIf=\"searchText\">\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount | skyNumeric: { truncate: false }))\n }}\n </ng-container>\n </button>\n <div\n *ngIf=\"searchText && searchResults.length === 0\"\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n <button\n *ngIf=\"showAddButton\"\n class=\"sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (mousedown)=\"addButtonClicked()\"\n #addButtonEl\n >\n <sky-icon *skyThemeIf=\"'modern'\" icon=\"add\" iconType=\"skyux\"></sky-icon>\n <sky-icon *skyThemeIf=\"'default'\" icon=\"plus-circle\"></sky-icon>\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #defaultSearchResultTemplate>\n {{ item[descriptorProperty] }}\n</ng-template>\n", styles: [".sky-autocomplete-results-container{position:fixed;background-color:#fff}.sky-autocomplete-results-waiting{height:70px}.sky-autocomplete-results{display:flex;flex-direction:column;padding:4px;overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:calc(50vh - 50px)}.sky-autocomplete-result{color:#212327;margin-bottom:4px;padding:3px 20px;cursor:pointer}.sky-autocomplete-result:last-child{margin-bottom:0}.sky-autocomplete-actions{border-top:1px solid #cdcfd2}.sky-autocomplete-actions .sky-autocomplete-action{border:none}.sky-autocomplete-actions .sky-autocomplete-actions-no-results{display:inline-block;padding:7px 13px}.sky-autocomplete-action-add{float:right}.sky-autocomplete-action-add sky-icon{padding-right:5px}.sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:#eeeeef}.sky-autocomplete-descendant-focus.sky-autocomplete-action{outline:thin dotted;outline:-webkit-focus-ring-color auto 5px}::ng-deep .sky-theme-modern .sky-autocomplete-results-container{border-radius:6px}::ng-deep .sky-theme-modern .sky-autocomplete-results{padding:10px 0}::ng-deep .sky-theme-modern .sky-autocomplete-result{margin-bottom:0;padding:10px 0 10px 15px}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:inherit}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 8px #0000004d}\n"], components: [{ type: i4.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking"] }, { type: i4.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }], directives: [{ type: i5.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.λ11, selector: "[skyHighlight]", inputs: ["skyHighlight"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.λ3, selector: "[skyThemeIf]", inputs: ["skyThemeIf"] }], pipes: { "skyLibResources": i7.SkyLibResourcesPipe, "skyAutocompleteSearchAsyncDisabled": i8.SkyAutcompleteSearchAsyncDisabledPipe, "skyNumeric": i1.SkyNumericPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
664
670
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyAutocompleteComponent, decorators: [{
|
|
665
671
|
type: Component,
|
|
666
|
-
args: [{ selector: 'sky-autocomplete', providers: [SkyAutocompleteAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen && searchText\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-owns]=\"isOpen ? resultsListId : null\"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content></ng-content>\n</div>\n\n<ng-template #resultsTemplateRef>\n <div\n class=\"sky-autocomplete-results-container\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n (keydown)=\"handleKeydown($event)\"\n #resultsRef\n >\n <div\n *ngIf=\"isSearchingAsync; else resultControlsTemplateRef\"\n class=\"sky-autocomplete-results-waiting\"\n >\n <sky-wait [isWaiting]=\"true\"></sky-wait>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resultControlsTemplateRef>\n <div\n *ngIf=\"searchText && (!showActionsArea || searchResults.length > 0)\"\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"resultsListId\"\n >\n <ng-container *ngFor=\"let result of searchResults; let i = index\">\n <div\n *ngIf=\"!searchResultsLimit || i < searchResultsLimit\"\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (mousedown)=\"onResultMouseDown(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n #searchResultEl\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate || defaultSearchResultTemplate;\n context: { item: result.data }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"searchResults.length === 0\"\n class=\"sky-deemphasized sky-padding-squish-default\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n </div>\n <div *ngIf=\"showActionsArea\" class=\"sky-autocomplete-actions\">\n <button\n *ngIf=\"enableShowMore && (!searchText || searchResults.length > 0)\"\n class=\"sky-autocomplete-action sky-autocomplete-action-more sky-btn sky-btn-link\"\n type=\"button\"\n (mousedown)=\"moreButtonClicked()\"\n >\n <ng-container\n *ngIf=\"\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText\n \"\n >\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n </ng-container>\n <ng-container\n *ngIf=\"\n (searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) &&\n !searchText\n \"\n >\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources: (data.length | skyNumeric: { truncate: false })\n }}\n </ng-container>\n <ng-container *ngIf=\"searchText\">\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount | skyNumeric: { truncate: false }))\n }}\n </ng-container>\n </button>\n <div\n *ngIf=\"searchText && searchResults.length === 0\"\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n <button\n *ngIf=\"showAddButton\"\n class=\"sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (mousedown)=\"addButtonClicked()\"\n #addButtonEl\n >\n <sky-icon *skyThemeIf=\"'modern'\" icon=\"add\" iconType=\"skyux\"></sky-icon>\n <sky-icon *skyThemeIf=\"'default'\" icon=\"plus-circle\"></sky-icon>\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #defaultSearchResultTemplate>\n {{ item[descriptorProperty] }}\n</ng-template>\n", styles: [".sky-autocomplete-results-container{position:fixed;background-color:#fff}.sky-autocomplete-results-waiting{height:70px}.sky-autocomplete-results{display:flex;flex-direction:column;padding:4px;overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:calc(50vh - 50px)}.sky-autocomplete-result{color:#212327;margin-bottom:4px;padding:3px 20px;cursor:pointer}.sky-autocomplete-result:last-child{margin-bottom:0}.sky-autocomplete-actions{border-top:1px solid #cdcfd2}.sky-autocomplete-actions .sky-autocomplete-action{border:none}.sky-autocomplete-actions .sky-autocomplete-actions-no-results{display:inline-block;padding:7px 13px}.sky-autocomplete-action-add{float:right}.sky-autocomplete-action-add sky-icon{padding-right:5px}.sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:#eeeeef}.sky-autocomplete-descendant-focus.sky-autocomplete-action{outline:thin dotted;outline:-webkit-focus-ring-color auto 5px}::ng-deep .sky-theme-modern .sky-autocomplete-results-container{border-radius:6px}::ng-deep .sky-theme-modern .sky-autocomplete-results{padding:10px 0}::ng-deep .sky-theme-modern .sky-autocomplete-result{margin-bottom:0;padding:10px 0 10px 15px}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:inherit}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 8px #0000004d}\n"] }]
|
|
672
|
+
args: [{ selector: 'sky-autocomplete', providers: [SkyAutocompleteAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen && searchText\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-owns]=\"isOpen ? resultsListId : null\"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content></ng-content>\n</div>\n\n<ng-template #resultsTemplateRef>\n <div\n class=\"sky-autocomplete-results-container\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n (keydown)=\"handleKeydown($event)\"\n #resultsRef\n >\n <div\n *ngIf=\"isSearchingAsync; else resultControlsTemplateRef\"\n class=\"sky-autocomplete-results-waiting\"\n >\n <sky-wait [isWaiting]=\"true\"></sky-wait>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resultControlsTemplateRef>\n <div\n *ngIf=\"searchText && (!showActionsArea || searchResults.length > 0)\"\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"resultsListId\"\n >\n <ng-container *ngFor=\"let result of searchResults; let i = index\">\n <div\n *ngIf=\"!searchResultsLimit || i < searchResultsLimit\"\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.data-descriptor-value]=\"result.data[descriptorProperty]\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (mousedown)=\"onResultMouseDown(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n #searchResultEl\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate || defaultSearchResultTemplate;\n context: { item: result.data }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"searchResults.length === 0\"\n class=\"sky-deemphasized sky-padding-squish-default\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n </div>\n <div *ngIf=\"showActionsArea\" class=\"sky-autocomplete-actions\">\n <button\n *ngIf=\"enableShowMore && (!searchText || searchResults.length > 0)\"\n class=\"sky-autocomplete-action sky-autocomplete-action-more sky-btn sky-btn-link\"\n type=\"button\"\n (mousedown)=\"moreButtonClicked()\"\n >\n <ng-container\n *ngIf=\"\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText\n \"\n >\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n </ng-container>\n <ng-container\n *ngIf=\"\n (searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) &&\n !searchText\n \"\n >\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources: (data.length | skyNumeric: { truncate: false })\n }}\n </ng-container>\n <ng-container *ngIf=\"searchText\">\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount | skyNumeric: { truncate: false }))\n }}\n </ng-container>\n </button>\n <div\n *ngIf=\"searchText && searchResults.length === 0\"\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n <button\n *ngIf=\"showAddButton\"\n class=\"sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (mousedown)=\"addButtonClicked()\"\n #addButtonEl\n >\n <sky-icon *skyThemeIf=\"'modern'\" icon=\"add\" iconType=\"skyux\"></sky-icon>\n <sky-icon *skyThemeIf=\"'default'\" icon=\"plus-circle\"></sky-icon>\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #defaultSearchResultTemplate>\n {{ item[descriptorProperty] }}\n</ng-template>\n", styles: [".sky-autocomplete-results-container{position:fixed;background-color:#fff}.sky-autocomplete-results-waiting{height:70px}.sky-autocomplete-results{display:flex;flex-direction:column;padding:4px;overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:calc(50vh - 50px)}.sky-autocomplete-result{color:#212327;margin-bottom:4px;padding:3px 20px;cursor:pointer}.sky-autocomplete-result:last-child{margin-bottom:0}.sky-autocomplete-actions{border-top:1px solid #cdcfd2}.sky-autocomplete-actions .sky-autocomplete-action{border:none}.sky-autocomplete-actions .sky-autocomplete-actions-no-results{display:inline-block;padding:7px 13px}.sky-autocomplete-action-add{float:right}.sky-autocomplete-action-add sky-icon{padding-right:5px}.sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:#eeeeef}.sky-autocomplete-descendant-focus.sky-autocomplete-action{outline:thin dotted;outline:-webkit-focus-ring-color auto 5px}::ng-deep .sky-theme-modern .sky-autocomplete-results-container{border-radius:6px}::ng-deep .sky-theme-modern .sky-autocomplete-results{padding:10px 0}::ng-deep .sky-theme-modern .sky-autocomplete-result{margin-bottom:0;padding:10px 0 10px 15px}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:inherit}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 8px #0000004d}\n"] }]
|
|
667
673
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.SkyAffixService }, { type: i2.SkyAutocompleteAdapterService }, { type: i1.SkyOverlayService }, { type: i3.SkyInputBoxHostService, decorators: [{
|
|
668
674
|
type: Optional
|
|
669
675
|
}] }]; }, propDecorators: { ariaLabelledBy: [{
|
|
@@ -720,4 +726,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
720
726
|
read: ElementRef,
|
|
721
727
|
}]
|
|
722
728
|
}] } });
|
|
723
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUdmLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEQsT0FBTyxFQUVMLE9BQU8sRUFFUCxJQUFJLEVBQ0osU0FBUyxJQUFJLG1CQUFtQixFQUNoQyxFQUFFLEdBQ0gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7Ozs7O0FBZ0IvRSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFTakIsTUFBTSxPQUFPLHdCQUF3QjtJQXlZbkMsWUFDRSxjQUFpQyxFQUNqQyxVQUFzQixFQUN0QixZQUE2QixFQUM3QixjQUE2QyxFQUM3QyxjQUFpQyxFQUNyQixlQUF3Qzs7UUExVnREOzs7V0FHRztRQUVJLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBK0c5Qjs7O1dBR0c7UUFFSSxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQVM3Qjs7OztXQUlHO1FBRUksd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRW5DOzs7V0FHRztRQUVJLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTNDOzs7V0FHRztRQUVJLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQStCLENBQUM7UUFFdkU7O1dBRUc7UUFFSSxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFrQyxDQUFDO1FBRTVFOzs7V0FHRztRQUVJLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFzQmpFLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFNZixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBTWhCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQW1GaEM7O1dBRUc7UUFDSCx1REFBc0IsQ0FBQyxDQUFDLEVBQUM7UUFFekIsMkRBQStDO1FBRS9DLG9EQUFpQztRQUVqQyx5REFBK0I7UUFFL0IsMkRBQW1DO1FBRW5DLHVEQUF3QjtRQUV4Qiw0REFBcUQ7UUFFckQsOERBQTZCLElBQUksT0FBTyxFQUFRLEVBQUM7UUFFakQsNkRBQTRDO1FBRTVDLGtEQUFpQixJQUFJLE9BQU8sRUFBUSxFQUFDO1FBRXJDLG9EQUF5QztRQUV6QywyREFBbUM7UUFFbkM7Ozs7V0FJRztRQUNILDZEQUEyQyxFQUFFLEVBQUM7UUFFOUMsNkRBQTRDO1FBRTVDLGtEQUEwQjtRQUUxQiwwREFBbUM7UUFFbkMsZ0VBQXlDO1FBRXpDLDJEQUFzQztRQUV0Qyw0REFBNEQ7UUFFNUQsbURBQWtCLElBQUksT0FBTyxFQUEwQixFQUFDO1FBRXhELGdFQUEyQztRQUUzQyx3REFBcUM7UUFFckMsb0RBQW9EO1FBRXBELDJEQUEyRDtRQUUzRCxnRUFBeUM7UUFFekMseUVBQWtEO1FBVWhELHVCQUFBLElBQUksNENBQW1CLGNBQWMsTUFBQSxDQUFDO1FBQ3RDLHVCQUFBLElBQUksd0NBQWUsVUFBVSxNQUFBLENBQUM7UUFDOUIsdUJBQUEsSUFBSSwwQ0FBaUIsWUFBWSxNQUFBLENBQUM7UUFDbEMsdUJBQUEsSUFBSSw0Q0FBbUIsY0FBYyxNQUFBLENBQUM7UUFDdEMsdUJBQUEsSUFBSSw0Q0FBbUIsY0FBYyxNQUFBLENBQUM7UUFDdEMsdUJBQUEsSUFBSSw2Q0FBb0IsZUFBZSxNQUFBLENBQUM7UUFFeEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyx5QkFBeUIsRUFBRSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLDRCQUE0QixFQUFFLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBaFpEOzs7O09BSUc7SUFDSCxJQUNXLElBQUksQ0FBQyxLQUF3QjtRQUN0Qyx1QkFBQSxJQUFJLG1DQUFVLEtBQUssTUFBQSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLHVCQUFBLElBQUksdUNBQU8sSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUNXLFlBQVksQ0FBQyxLQUF5QjtRQUMvQyx1QkFBQSxJQUFJLDJDQUFrQixLQUFLLE1BQUEsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sdUJBQUEsSUFBSSwrQ0FBZSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ1csa0JBQWtCLENBQUMsS0FBeUI7UUFDckQsdUJBQUEsSUFBSSxpREFBd0IsS0FBSyxNQUFBLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sdUJBQUEsSUFBSSxxREFBcUIsSUFBSSxNQUFNLENBQUM7SUFDN0MsQ0FBQztJQVNEOzs7T0FHRztJQUNILElBQ1csYUFBYSxDQUFDLEtBQWtEO1FBQ3pFLHVCQUFBLElBQUksNENBQW1CLEtBQUssSUFBSSxJQUFJLE9BQU8sRUFBMEIsTUFBQSxDQUFDO1FBQ3RFLHVCQUFBLElBQUksd0ZBQW1CLE1BQXZCLElBQUksQ0FBcUIsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sdUJBQUEsSUFBSSxnREFBZ0IsQ0FBQztJQUM5QixDQUFDO0lBUUQ7OztPQUdHO0lBQ0gsSUFDVyxrQkFBa0IsQ0FBQyxLQUEyQjtRQUN2RCx1QkFBQSxJQUFJLGlEQUF3QixLQUFLLE1BQUEsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyx1QkFBQSxJQUFJLHFEQUFxQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUNXLE1BQU0sQ0FBQyxLQUFnRDtRQUNoRSx1QkFBQSxJQUFJLHFDQUFZLEtBQUssTUFBQSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLENBQ0wsdUJBQUEsSUFBSSx5Q0FBUztZQUNiLG9DQUFvQyxDQUFDO2dCQUNuQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO2dCQUMzQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7YUFDbEMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBVUQ7Ozs7O09BS0c7SUFDSCxJQUNXLDJCQUEyQixDQUFDLEtBQXlCO1FBQzlELHVCQUFBLElBQUksMERBQWlDLEtBQUssTUFBQSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFXLDJCQUEyQjtRQUNwQyxPQUFPLHVCQUFBLElBQUksOERBQThCO1lBQ3ZDLHVCQUFBLElBQUksOERBQThCLEdBQUcsQ0FBQztZQUN0QyxDQUFDLENBQUMsdUJBQUEsSUFBSSw4REFBOEI7WUFDcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFZRDs7O09BR0c7SUFDSCxJQUNXLGtCQUFrQixDQUFDLEtBQXlCO1FBQ3JELHVCQUFBLElBQUksaURBQXdCLEtBQUssTUFBQSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixJQUFJLHVCQUFBLElBQUkscURBQXFCLElBQUksdUJBQUEsSUFBSSxxREFBcUIsR0FBRyxDQUFDLEVBQUU7WUFDOUQsT0FBTyx1QkFBQSxJQUFJLHFEQUFxQixDQUFDO1NBQ2xDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQUEsSUFBSSxxREFBcUIsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFtREQsWUFBWTtJQUVaLDZCQUE2QjtJQUU3QixJQUFXLGFBQWE7UUFDdEIsT0FBTyx1QkFBQSxJQUFJLGdEQUFnQixJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxhQUFhLENBQUMsS0FBb0M7UUFDM0QsdUJBQUEsSUFBSSw0Q0FBbUIsS0FBSyxNQUFBLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsYUFBYTtRQUN0QixPQUFPLHVCQUFBLElBQUksZ0RBQWdCLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFXLGFBQWEsQ0FBQyxLQUFlO1FBQ3RDLHVCQUFBLElBQUksNENBQW1CLEtBQUssTUFBQSxDQUFDO0lBQy9CLENBQUM7SUFVRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDbkQsQ0FBQztJQU1ELFlBQVk7SUFFWixJQUNZLGNBQWMsQ0FDeEIsU0FBb0Q7UUFFcEQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE1BQU0sS0FBSyxDQUNUO2dCQUNFLCtEQUErRDtnQkFDL0QsaUVBQWlFO2dCQUNqRSx3Q0FBd0M7YUFDekMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQ1osQ0FBQztTQUNIO1FBRUQsSUFBSSx1QkFBQSxJQUFJLGlEQUFpQixLQUFLLFNBQVMsRUFBRTtZQUN2QyxxRUFBcUU7WUFDckUsdUJBQUEsSUFBSSwyREFBMkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUV2Qyx1QkFBQSxJQUFJLDZDQUFvQixTQUFTLE1BQUEsQ0FBQztZQUVsQyx1QkFBQSxJQUFJLGlEQUFpQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFFNUQsdUJBQUEsSUFBSSxpREFBaUIsQ0FBQyxXQUFXO2lCQUM5QixJQUFJLENBQ0gsU0FBUyxDQUFDLHVCQUFBLElBQUksMkRBQTJCLENBQUMsRUFDMUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDL0IsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxDQUNIO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNwQix1QkFBQSxJQUFJLHdGQUFtQixNQUF2QixJQUFJLEVBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztZQUVMLHVCQUFBLElBQUksaURBQWlCLENBQUMsSUFBSTtpQkFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBQSxJQUFJLDJEQUEyQixDQUFDLENBQUM7aUJBQ2hELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsU0FBUyxDQUFDLG9DQUFvQyxFQUFFLENBQUM7Z0JBQ2pELHVCQUFBLElBQUksb0ZBQWUsTUFBbkIsSUFBSSxDQUFpQixDQUFDO2dCQUN0QixTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7WUFFTCx1QkFBQSxJQUFJLGlEQUFpQixDQUFDLEtBQUs7aUJBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQUEsSUFBSSwyREFBMkIsQ0FBQyxDQUFDO2lCQUNoRCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDeEIsdUJBQUEsSUFBSSxtRkFBYyxNQUFsQixJQUFJLENBQWdCLENBQUM7aUJBQ3RCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxJQUFZLGNBQWM7UUFDeEIsT0FBTyx1QkFBQSxJQUFJLGlEQUFpQixDQUFDO0lBQy9CLENBQUM7SUFPRCxJQUdZLFVBQVUsQ0FBQyxLQUE2QjtRQUNsRCxJQUFJLEtBQUssRUFBRTtZQUNULHVCQUFBLElBQUkseUNBQWdCLEtBQUssTUFBQSxDQUFDO1lBQzFCLHVCQUFBLElBQUkscUZBQWdCLE1BQXBCLElBQUksQ0FBa0IsQ0FBQztZQUN2Qix1QkFBQSxJQUFJLG9GQUFlLE1BQW5CLElBQUksQ0FBaUIsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxJQUFZLFVBQVU7UUFDcEIsT0FBTyx1QkFBQSxJQUFJLDZDQUFhLENBQUM7SUFDM0IsQ0FBQztJQWtGTSxlQUFlO1FBQ3BCLHVCQUFBLElBQUksNkZBQXdCLE1BQTVCLElBQUksQ0FBMEIsQ0FBQztJQUNqQyxDQUFDO0lBRU0sV0FBVztRQUNoQix1QkFBQSxJQUFJLDBGQUFxQixNQUF6QixJQUFJLENBQXVCLENBQUM7UUFDNUIsdUJBQUEsSUFBSSwyREFBMkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2Qyx1QkFBQSxJQUFJLDJEQUEyQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNDLHVCQUFBLElBQUksK0NBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQix1QkFBQSxJQUFJLCtDQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0IsdUJBQUEsSUFBSSxxRkFBZ0IsTUFBcEIsSUFBSSxDQUFrQixDQUFDO1FBQ3ZCLHVCQUFBLElBQUkscUZBQWdCLE1BQXBCLElBQUksQ0FBa0IsQ0FBQztJQUN6QixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztTQUM1RDtRQUNELHVCQUFBLElBQUksb0ZBQWUsTUFBbkIsSUFBSSxDQUFpQixDQUFDO0lBQ3hCLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBb0I7UUFDdkMsa0JBQWtCO1FBQ2xCLDBCQUEwQjtRQUMxQixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDYixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sYUFBYSxHQUFHLHVCQUFBLElBQUksdUZBQWtCLE1BQXRCLElBQUksQ0FBb0IsQ0FBQztZQUMvQyxNQUFNLGVBQWUsR0FBRyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ2xELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FDdkMsQ0FBQztZQUVGLFFBQVEsR0FBRyxFQUFFO2dCQUNYLEtBQUssT0FBTztvQkFDVixJQUFJLG9CQUFvQixFQUFFO3dCQUN4Qix1QkFBQSxJQUFJLDZGQUF3QixNQUE1QixJQUFJLEVBQXlCLGVBQWUsQ0FBQyxDQUFDO3dCQUU5QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTs0QkFDekIsdUJBQUEsSUFBSSxvRkFBZSxNQUFuQixJQUFJLENBQWlCLENBQUM7eUJBQ3ZCOzZCQUFNOzRCQUNMLHVCQUFBLElBQUksa0ZBQWEsTUFBakIsSUFBSSxDQUFlLENBQUM7eUJBQ3JCO3FCQUNGO3lCQUFNO3dCQUNMLElBQUksYUFBYSxFQUFFOzRCQUNqQixhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7eUJBQzFEO3FCQUNGO29CQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN4QixNQUFNO2dCQUVSLEtBQUssS0FBSztvQkFDUixJQUFJLG9CQUFvQixFQUFFO3dCQUN4Qix1QkFBQSxJQUFJLDZGQUF3QixNQUE1QixJQUFJLEVBQXlCLGVBQWUsQ0FBQyxDQUFDO3FCQUMvQzt5QkFBTTt3QkFDTCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7NEJBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsb0NBQW9DLEVBQUUsQ0FBQzt5QkFDNUQ7cUJBQ0Y7b0JBRUQsdUJBQUEsSUFBSSxvRkFBZSxNQUFuQixJQUFJLENBQWlCLENBQUM7b0JBQ3RCLE1BQU07Z0JBRVIsS0FBSyxRQUFRO29CQUNYLHVCQUFBLElBQUksb0ZBQWUsTUFBbkIsSUFBSSxDQUFpQixDQUFDO29CQUN0QixNQUFNO2dCQUVSLEtBQUssV0FBVyxDQUFDO2dCQUNqQixLQUFLLE1BQU07b0JBQ1QsdUJBQUEsSUFBSSx5RkFBb0IsTUFBeEIsSUFBSSxDQUFzQixDQUFDO29CQUMzQixJQUNFLHVCQUFBLElBQUksb0RBQW9CO3dCQUN0Qix1QkFBQSxJQUFJLDBEQUEwQixDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUMzQyx1QkFBQSxJQUFJLG9EQUFvQixLQUFLLENBQUMsQ0FBQyxFQUMvQjt3QkFDQSx1QkFBQSxJQUFJLGdEQUF1QixDQUFDLE1BQUEsQ0FBQztxQkFDOUI7eUJBQU07d0JBQ0wsdUJBQUEsSUFBSSxnREFBdUIsdUJBQUEsSUFBSSxvREFBb0IsR0FBRyxDQUFDLE1BQUEsQ0FBQztxQkFDekQ7b0JBQ0QsdUJBQUEsSUFBSSxzRkFBaUIsTUFBckIsSUFBSSxDQUFtQixDQUFDO29CQUN4Qix1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsTUFBTTtnQkFFUixLQUFLLFNBQVMsQ0FBQztnQkFDZixLQUFLLElBQUk7b0JBQ1AsdUJBQUEsSUFBSSx5RkFBb0IsTUFBeEIsSUFBSSxDQUFzQixDQUFDO29CQUMzQixJQUFJLHVCQUFBLElBQUksb0RBQW9CLElBQUksQ0FBQyxFQUFFO3dCQUNqQyx1QkFBQSxJQUFJLGdEQUNGLHVCQUFBLElBQUksMERBQTBCLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBQSxDQUFDO3FCQUM3Qzt5QkFBTTt3QkFDTCx1QkFBQSxJQUFJLGdEQUF1Qix1QkFBQSxJQUFJLG9EQUFvQixHQUFHLENBQUMsTUFBQSxDQUFDO3FCQUN6RDtvQkFDRCx1QkFBQSxJQUFJLHNGQUFpQixNQUFyQixJQUFJLENBQW1CLENBQUM7b0JBQ3hCLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN4QixNQUFNO2FBQ1Q7U0FDRjtJQUNILENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztTQUM1RDtRQUNELHVCQUFBLElBQUksb0ZBQWUsTUFBbkIsSUFBSSxDQUFpQixDQUFDO0lBQ3hCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxFQUFVLEVBQUUsS0FBaUI7UUFDcEQsdUJBQUEsSUFBSSw2RkFBd0IsTUFBNUIsSUFBSSxFQUF5QixFQUFFLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6Qix1QkFBQSxJQUFJLG9GQUFlLE1BQW5CLElBQUksQ0FBaUIsQ0FBQztTQUN2QjthQUFNO1lBQ0wsdUJBQUEsSUFBSSxrRkFBYSxNQUFqQixJQUFJLENBQWUsQ0FBQztTQUNyQjtRQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEVBQVU7UUFDakMsSUFBSSxFQUFFLEtBQUssdUJBQUEsSUFBSSxvREFBb0IsRUFBRTtZQUNuQyx1QkFBQSxJQUFJLHlGQUFvQixNQUF4QixJQUFJLENBQXNCLENBQUM7WUFDM0IsdUJBQUEsSUFBSSxnREFBdUIsRUFBRSxNQUFBLENBQUM7WUFDOUIsdUJBQUEsSUFBSSxzRkFBaUIsTUFBckIsSUFBSSxDQUFtQixDQUFDO1lBQ3hCLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBZ0I7UUFDdEMsT0FBTyxHQUFHLEtBQUssdUJBQUEsSUFBSSwwREFBMEIsQ0FBQyx1QkFBQSxJQUFJLG9EQUFvQixDQUFDLENBQUM7SUFDMUUsQ0FBQzs7K29EQUVrQixVQUE4QjtJQUMvQyxNQUFNLE9BQU8sR0FDWCxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRWpFLElBQUksT0FBTyxFQUFFO1FBQ1gsa0RBQWtEO1FBQ2xELDBCQUEwQjtRQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUN4QixZQUFZLEVBQUUsU0FBUzthQUN4QixDQUFDLENBQUM7U0FDSjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLHVCQUFBLElBQUksb0ZBQWUsTUFBbkIsSUFBSSxDQUFpQixDQUFDO1NBQ3ZCO2FBQU07WUFDTCx1QkFBQSxJQUFJLGtGQUFhLE1BQWpCLElBQUksQ0FBZSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5Qix1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBDLE9BQU87S0FDUjtJQUVELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLDJCQUEyQixDQUFDO0lBQzNFLE1BQU0sV0FBVyxHQUFHLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBRW5ELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXBDLElBQUksWUFBWSxJQUFJLFdBQVcsRUFBRTtRQUMvQix1QkFBQSxJQUFJLDBGQUFxQixNQUF6QixJQUFJLENBQXVCLENBQUM7UUFFNUIsdUJBQUEsSUFBSSw4Q0FBcUIsdUJBQUEsSUFBSSxvRkFBZSxNQUFuQixJQUFJLENBQWlCO2FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUMvQyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUU5QixJQUFJLENBQUMsYUFBYTtnQkFDaEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbEIsTUFBTSxNQUFNLEdBQWdDO3dCQUMxQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxTQUFTLENBQUMsRUFBRTt3QkFDNUMsSUFBSSxFQUFFLENBQUM7cUJBQ1IsQ0FBQztvQkFDRixPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRVgsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDO1lBRWxELElBQUksQ0FBQyxhQUFhLEdBQUcsdUJBQUEsSUFBSSx1RkFBa0IsTUFBdEIsSUFBSSxFQUFtQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0QsdUJBQUEsSUFBSSx5RkFBb0IsTUFBeEIsSUFBSSxDQUFzQixDQUFDO1lBQzNCLHVCQUFBLElBQUksNkZBQXdCLE1BQTVCLElBQUksQ0FBMEIsQ0FBQztZQUMvQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakMsdUJBQUEsSUFBSSxnREFBdUIsQ0FBQyxNQUFBLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsdUJBQUEsSUFBSSxnREFBdUIsQ0FBQyxDQUFDLE1BQUEsQ0FBQzthQUMvQjtZQUVELHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLHNFQUFzRTtnQkFDdEUsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLHVCQUFBLElBQUkseUNBQVMsRUFBRTt3QkFDakIsdUJBQUEsSUFBSSx5Q0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN4Qix1QkFBQSxJQUFJLGdEQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUNyQyx1QkFBQSxJQUFJLG1HQUE4QixNQUFsQyxJQUFJLENBQWdDLENBQUM7cUJBQ3RDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsdUJBQUEsSUFBSSxtRkFBYyxNQUFsQixJQUFJLENBQWdCLENBQUM7Z0JBQ3JCLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDckM7UUFDSCxDQUFDLENBQUMsTUFBQSxDQUFDO0tBQ047U0FBTTtRQUNMLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsdUJBQUEsSUFBSSxnREFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUNyQztBQUNILENBQUM7SUFHQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdEUsTUFBTSxlQUFlLEdBQW1DO1lBQ3RELFdBQVcsRUFBRSxTQUFTO1lBQ3RCLE1BQU0sRUFBRSxDQUFDO1lBQ1QsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2QyxPQUFPLGVBQWUsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2hEO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDckQsT0FBTyxFQUFFLFNBQVM7S0FDbkIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFFO1FBQzNCLE9BQU8sRUFBRSxDQUFDO1lBQ1IsS0FBSyxFQUFFLE1BQU07WUFDYixVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU07U0FDMUIsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3RCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ1osT0FBTztZQUNMLEtBQUs7WUFDTCxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU07U0FDekIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0lBR0MsSUFBSSx1QkFBQSxJQUFJLGtEQUFrQixFQUFFO1FBQzFCLHVCQUFBLElBQUksa0RBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsdUJBQUEsSUFBSSw4Q0FBcUIsU0FBUyxNQUFBLENBQUM7S0FDcEM7QUFDSCxDQUFDLG1HQUtpQixVQUFrQjtJQUNsQyxNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztTQUN6RCxpQkFBaUIsRUFBRTtTQUNuQixJQUFJLEVBQUUsQ0FBQztJQUNWLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtRQUN6QixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsSUFBSSxrQkFBa0IsR0FBYSxFQUFFLENBQUM7SUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2FBQzlELFFBQVEsRUFBRTthQUNWLGlCQUFpQixFQUFZLENBQUM7UUFDakMsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2RCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLEtBQWEsQ0FBQztRQUNsQixPQUNFLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUN4RTtZQUNBLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEUsTUFBTSxHQUFHLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ25DLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMvRDtLQUNGO0lBRUQsd0NBQXdDO0lBQ3hDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDLCtHQUV1QixFQUFVO0lBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLDBCQUEwQjtJQUMxQixJQUFJLE1BQU0sRUFBRTtRQUNWLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQztJQUdDLElBQUksQ0FBQyx1QkFBQSxJQUFJLHlDQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1FBQzdDLE1BQU0sT0FBTyxHQUFHLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzFDLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFaEQsdUJBQUEsSUFBSSxxQ0FBWSxPQUFPLE1BQUEsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQix1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BDLHVCQUFBLElBQUksbUdBQThCLE1BQWxDLElBQUksQ0FBZ0MsQ0FBQztLQUN0QztBQUNILENBQUM7SUFHQyx1QkFBQSxJQUFJLGtGQUFhLE1BQWpCLElBQUksQ0FBZSxDQUFDO0lBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLHVCQUFBLElBQUkscUZBQWdCLE1BQXBCLElBQUksQ0FBa0IsQ0FBQztJQUN2Qix1QkFBQSxJQUFJLDZGQUF3QixNQUE1QixJQUFJLENBQTBCLENBQUM7SUFDL0IsdUJBQUEsSUFBSSxnREFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0lBR0MsTUFBTSxhQUFhLEdBQ2pCLHVCQUFBLElBQUksMERBQTBCLENBQUMsdUJBQUEsSUFBSSxvREFBb0IsQ0FBQyxDQUFDO0lBQzNELGtCQUFrQjtJQUNsQiwwQkFBMEI7SUFDMUIsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUMzRDtBQUNILENBQUM7SUFHQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMvQztBQUNILENBQUM7SUFHQyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUN4Qix1QkFBQSxJQUFJLGdEQUF1QixDQUFDLENBQUMsTUFBQSxDQUFDO0lBQzlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7SUFDcEMsdUJBQUEsSUFBSSw2RkFBd0IsTUFBNUIsSUFBSSxDQUEwQixDQUFDO0lBQy9CLHVCQUFBLElBQUksbUdBQThCLE1BQWxDLElBQUksQ0FBZ0MsQ0FBQztJQUNyQyx1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3RDLENBQUM7SUFHQyxNQUFNLE9BQU8sR0FBRyx1QkFBQSxJQUFJLDRDQUFZLENBQUMsYUFBYSxDQUFDO0lBRS9DLG1CQUFtQixDQUFnQixPQUFPLEVBQUUsU0FBUyxDQUFDO1NBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQUEsSUFBSSwrQ0FBZSxDQUFDLENBQUM7U0FDcEMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVMLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7U0FDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBQSxJQUFJLCtDQUFlLENBQUMsQ0FBQztTQUNwQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2QsMEJBQTBCO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2xDLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsZ0JBQWdCLENBQ25DLHVCQUFBLElBQUksNENBQVksRUFDaEIsSUFBSSxDQUFDLFVBQVUsRUFDZixDQUFDLENBQUMsdUJBQUEsSUFBSSxpREFBaUIsQ0FDeEIsQ0FBQztTQUNIO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0lBR0MsSUFBSSx1QkFBQSxJQUFJLHlDQUFTLEVBQUU7UUFDakIsdUJBQUEsSUFBSSxnREFBZ0IsQ0FBQyxLQUFLLENBQUMsdUJBQUEsSUFBSSx5Q0FBUyxDQUFDLENBQUM7UUFDMUMsdUJBQUEsSUFBSSxxQ0FBWSxTQUFTLE1BQUEsQ0FBQztLQUMzQjtBQUNILENBQUM7SUFHQyxrQkFBa0I7SUFDbEIsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyx1QkFBQSxJQUFJLHlDQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNyQyxNQUFNLE9BQU8sR0FBRyx1QkFBQSxJQUFJLDhDQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsRSx1QkFBQSxJQUFJLGdEQUFnQixDQUFDLGdCQUFnQixDQUNuQyx1QkFBQSxJQUFJLDRDQUFZLEVBQ2hCLElBQUksQ0FBQyxVQUFVLEVBQ2YsQ0FBQyxDQUFDLHVCQUFBLElBQUksaURBQWlCLENBQ3hCLENBQUM7UUFFRixPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUFBLElBQUksNENBQVksQ0FBQyxhQUFhLEVBQUU7WUFDOUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDLFFBQVE7WUFDL0MsYUFBYSxFQUFFLElBQUk7WUFDbkIsUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsT0FBTztZQUNsQixtQkFBbUIsRUFBRSxNQUFNO1NBQzVCLENBQUMsQ0FBQztRQUVILHVCQUFBLElBQUkscUNBQVksT0FBTyxNQUFBLENBQUM7S0FDekI7QUFDSCxDQUFDO0lBR0MsSUFBSSx1QkFBQSxJQUFJLHlDQUFTLEVBQUU7UUFDakIsdUJBQUEsSUFBSSx5Q0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLHVCQUFBLElBQUkscUNBQVksU0FBUyxNQUFBLENBQUM7S0FDM0I7QUFDSCxDQUFDO0lBR0MsSUFBSSx1QkFBQSxJQUFJLGtEQUFrQixFQUFFO1FBQzFCLHVCQUFBLElBQUksa0RBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsdUJBQUEsSUFBSSw4Q0FBcUIsU0FBUyxNQUFBLENBQUM7S0FDcEM7SUFFRCx1QkFBQSxJQUFJLDhDQUFxQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2hFLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNwQixLQUFLLDBCQUEwQixDQUFDLGFBQWE7Z0JBQzNDLHVCQUFBLElBQUksb0ZBQWUsTUFBbkIsSUFBSSxDQUFpQixDQUFDO2dCQUN0QixNQUFNO1lBQ1IsS0FBSywwQkFBMEIsQ0FBQyxrQkFBa0I7Z0JBQ2hELG1FQUFtRTtnQkFDbkUsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCwwQkFBMEI7b0JBQzFCLElBQUksdUJBQUEsSUFBSSx5Q0FBUyxFQUFFO3dCQUNqQix1QkFBQSxJQUFJLHlDQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQ3pCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07U0FDVDtJQUNILENBQUMsQ0FBQyxNQUFBLENBQUM7QUFDTCxDQUFDO0lBR0Msd0NBQXdDO0lBQ3hDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLHVCQUFBLElBQUkseUNBQVMsRUFBRTtZQUNqQix1QkFBQSxJQUFJLHNEQUNGLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsMkJBQTJCLENBQUMsdUJBQUEsSUFBSSx5Q0FBUyxDQUFDLE1BQUEsQ0FBQztZQUNsRSx1QkFBQSxJQUFJLDBEQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUM1Qyx1QkFBQSxJQUFJLGdEQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztZQUNILHVCQUFBLElBQUksc0ZBQWlCLE1BQXJCLElBQUksQ0FBbUIsQ0FBQztTQUN6QjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztJQUdDLE9BQU8sdUJBQUEsSUFBSSwwREFBMEIsQ0FBQyx1QkFBQSxJQUFJLG9EQUFvQixDQUFDLENBQUM7QUFDbEUsQ0FBQztJQUdDLElBQUksdUJBQUEsSUFBSSxvREFBb0IsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUNqQyx1QkFBQSxJQUFJLGdEQUFnQixDQUFDLGNBQWMsQ0FDakMsdUJBQUEsSUFBSSwwREFBMEIsQ0FBQyx1QkFBQSxJQUFJLG9EQUFvQixDQUFDLEVBQ3hELG1DQUFtQyxDQUNwQyxDQUFDO0tBQ0g7QUFDSCxDQUFDO0lBR0MsSUFBSSx1QkFBQSxJQUFJLG9EQUFvQixHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ2pDLHVCQUFBLElBQUksZ0RBQWdCLENBQUMsV0FBVyxDQUM5Qix1QkFBQSxJQUFJLDBEQUEwQixDQUFDLHVCQUFBLElBQUksb0RBQW9CLENBQUMsRUFDeEQsbUNBQW1DLENBQ3BDLENBQUM7UUFDRix1QkFBQSxJQUFJLDBGQUFxQixNQUF6QixJQUFJLENBQXVCLENBQUM7S0FDN0I7QUFDSCxDQUFDO3FIQWw0QlUsd0JBQXdCO3lHQUF4Qix3QkFBd0Isd3ZCQUh4QixDQUFDLDZCQUE2QixDQUFDLHNFQW1RNUIsNkJBQTZCLHFKQTBEbkMsV0FBVyxtR0FLWCxVQUFVLDZCQ2hZcEIsODJJQTZJQTsyRkQ1RWEsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLGtCQUFrQixhQUdqQixDQUFDLDZCQUE2QixDQUFDLG1CQUN6Qix1QkFBdUIsQ0FBQyxNQUFNOzswQkFpWjVDLFFBQVE7NENBdFlKLGNBQWM7c0JBRHBCLEtBQUs7Z0JBU0ssSUFBSTtzQkFEZCxLQUFLO2dCQWVLLFlBQVk7c0JBRHRCLEtBQUs7Z0JBZUssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQWNDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBUUssYUFBYTtzQkFEdkIsS0FBSztnQkFjQyxZQUFZO3NCQURsQixLQUFLO2dCQVFLLGtCQUFrQjtzQkFENUIsS0FBSztnQkFrQkssTUFBTTtzQkFEaEIsS0FBSztnQkFxQkMsb0JBQW9CO3NCQUQxQixLQUFLO2dCQVVLLDJCQUEyQjtzQkFEckMsS0FBSztnQkFvQkMsYUFBYTtzQkFEbkIsS0FBSztnQkFRSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBa0JDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBUUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQVNDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFRQyxRQUFRO3NCQURkLE1BQU07Z0JBUUEsYUFBYTtzQkFEbkIsTUFBTTtnQkFPQSxlQUFlO3NCQURyQixNQUFNO2dCQVFBLFdBQVc7c0JBRGpCLE1BQU07Z0JBMENLLGNBQWM7c0JBRHpCLFlBQVk7dUJBQUMsNkJBQTZCO2dCQTREbkMsa0JBQWtCO3NCQUh6QixTQUFTO3VCQUFDLG9CQUFvQixFQUFFO3dCQUMvQixJQUFJLEVBQUUsV0FBVztxQkFDbEI7Z0JBTVcsVUFBVTtzQkFIckIsU0FBUzt1QkFBQyxZQUFZLEVBQUU7d0JBQ3ZCLElBQUksRUFBRSxVQUFVO3FCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LFxuICBTa3lBZmZpeFNlcnZpY2UsXG4gIFNreUFmZml4ZXIsXG4gIFNreU92ZXJsYXlJbnN0YW5jZSxcbiAgU2t5T3ZlcmxheVNlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUlucHV0Qm94SG9zdFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuXG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIGZyb20sXG4gIGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50LFxuICBvZixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IG5vcm1hbGl6ZURpYWNyaXRpY3MgfSBmcm9tICcuLi9zaGFyZWQvc2t5LWxvb2t1cC1zdHJpbmctdXRpbHMnO1xuXG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBza3lBdXRvY29tcGxldGVEZWZhdWx0U2VhcmNoRnVuY3Rpb24gfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1kZWZhdWx0LXNlYXJjaC1mdW5jdGlvbic7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLWlucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtbWVzc2FnZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVNZXNzYWdlVHlwZSB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLW1lc3NhZ2UtdHlwZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0FyZ3MgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWFyY2gtYXN5bmMtYXJncyc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWFyY2hBc3luY1Jlc3VsdCB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNlYXJjaC1hc3luYy1yZXN1bHQnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWFyY2gtZnVuY3Rpb24nO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb25GaWx0ZXIgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWFyY2gtZnVuY3Rpb24tZmlsdGVyJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5nZSB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNlbGVjdGlvbi1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2hvd01vcmVBcmdzIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2hvdy1tb3JlLWFyZ3MnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0IHtcbiAgZWxlbWVudElkOiBzdHJpbmc7XG4gIGRhdGE6IGFueTtcbn1cblxubGV0IHVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWF1dG9jb21wbGV0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hdXRvY29tcGxldGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2VdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5QXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLy8jcmVnaW9uIHB1YmxpY19hcGlcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBIVE1MIGVsZW1lbnQgSUQgKHdpdGhvdXQgdGhlIGxlYWRpbmcgYCNgKSBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVsc1xuICAgKiB0aGUgYXV0b2NvbXBsZXRlIHRleHQgaW5wdXQuIFRoaXMgc2V0cyB0aGUgaW5wdXQncyBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGVcbiAgICogW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWxsZWRCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBzdGF0aWMgZGF0YSBzb3VyY2UgZm9yIHRoZSBhdXRvY29tcGxldGUgY29tcG9uZW50IHRvIHNlYXJjaFxuICAgKiB3aGVuIHVzZXJzIGVudGVyIHRleHQuIEZvciBhIGR5bmFtaWMgZGF0YSBzb3VyY2Ugc3VjaCBhcyBhbiBhcnJheSB0aGF0XG4gICAqIGNoYW5nZXMgZHVlIHRvIHNlcnZlciBjYWxscywgdXNlIGBzZWFyY2hgIG9yIGBzZWFyY2hBc3luY2AgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0YSh2YWx1ZTogYW55W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGF0YSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy4jX2RhdGEgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBtYW55IG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzZWFyY2hpbmcgd2hpbGUgdXNlcnNcbiAgICogZW50ZXIgdGV4dCBpbiB0aGUgYXV0b2NvbXBsZXRlIGZpZWxkLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRlYm91bmNlVGltZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RlYm91bmNlVGltZSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBkZWJvdW5jZVRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX2RlYm91bmNlVGltZSB8fCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhbiBvYmplY3QgcHJvcGVydHkgdG8gZGlzcGxheSBpbiB0aGUgdGV4dCBpbnB1dCBhZnRlciB1c2Vyc1xuICAgKiBzZWxlY3QgYW4gaXRlbSBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQGRlZmF1bHQgXCJuYW1lXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGVzY3JpcHRvclByb3BlcnR5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGVzY3JpcHRvclByb3BlcnR5ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0b3JQcm9wZXJ0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNfZGVzY3JpcHRvclByb3BlcnR5IHx8ICduYW1lJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzcGxheSBhIGJ1dHRvbiBpbiB0aGUgZHJvcGRvd24gdGhhdCBvcGVucyBhIHBpY2tlciB3aGVyZSB1c2VycyBjYW4gdmlldyBhbGwgb3B0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlbmFibGVTaG93TW9yZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYW4gb2JzZXJ2YWJsZSBvZiBgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZWAgdGhhdCBjYW4gY2xvc2UgdGhlIGRyb3Bkb3duLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWVzc2FnZVN0cmVhbSh2YWx1ZTogU3ViamVjdDxTa3lBdXRvY29tcGxldGVNZXNzYWdlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tZXNzYWdlU3RyZWFtID0gdmFsdWUgPz8gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4oKTtcbiAgICB0aGlzLiNpbml0TWVzc2FnZVN0cmVhbSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtZXNzYWdlU3RyZWFtKCk6IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLiNfbWVzc2FnZVN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB3cmFwcGVyQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvYmplY3QgcHJvcGVydGllcyB0byBzZWFyY2guXG4gICAqIEBkZWZhdWx0IFtcIm5hbWVcIl1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcHJvcGVydGllc1RvU2VhcmNoKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19wcm9wZXJ0aWVzVG9TZWFyY2ggPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJvcGVydGllc1RvU2VhcmNoKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy4jX3Byb3BlcnRpZXNUb1NlYXJjaCB8fCBbJ25hbWUnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBmdW5jdGlvbiB0byBkeW5hbWljYWxseSBtYW5hZ2UgdGhlIGRhdGEgc291cmNlIHdoZW4gdXNlcnNcbiAgICogY2hhbmdlIHRoZSB0ZXh0IGluIHRoZSBhdXRvY29tcGxldGUgZmllbGQuIFRoZSBzZWFyY2ggZnVuY3Rpb24gbXVzdCByZXR1cm5cbiAgICogYW4gYXJyYXkgb3IgYSBwcm9taXNlIG9mIGFuIGFycmF5LiBUaGUgYHNlYXJjaGAgcHJvcGVydHkgaXMgcGFydGljdWxhcmx5XG4gICAqIHVzZWZ1bCB3aGVuIHRoZSBkYXRhIHNvdXJjZSBkb2VzIG5vdCBsaXZlIGluIHRoZSBzb3VyY2UgY29kZS4gSWYgdGhlXG4gICAqIHNlYXJjaCByZXF1aXJlcyBjYWxsaW5nIGEgcmVtb3RlIGRhdGEgc291cmNlLCB1c2UgYHNlYXJjaEFzeW5jYCBpbnN0ZWFkIG9mXG4gICAqIGBzZWFyY2hgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWFyY2godmFsdWU6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3NlYXJjaCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2goKTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLiNfc2VhcmNoIHx8XG4gICAgICBza3lBdXRvY29tcGxldGVEZWZhdWx0U2VhcmNoRnVuY3Rpb24oe1xuICAgICAgICBwcm9wZXJ0aWVzVG9TZWFyY2g6IHRoaXMucHJvcGVydGllc1RvU2VhcmNoLFxuICAgICAgICBzZWFyY2hGaWx0ZXJzOiB0aGlzLnNlYXJjaEZpbHRlcnMsXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgdGVtcGxhdGUgdG8gZm9ybWF0IGVhY2ggc2VhcmNoIHJlc3VsdCBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogVGhlIGF1dG9jb21wbGV0ZSBjb21wb25lbnQgaW5qZWN0cyBzZWFyY2ggcmVzdWx0IHZhbHVlcyBpbnRvIHRoZSB0ZW1wbGF0ZVxuICAgKiBhcyBgaXRlbWAgdmFyaWFibGVzIHRoYXQgcmVmZXJlbmNlIGFsbCBvZiB0aGUgb2JqZWN0IHByb3BlcnRpZXMgb2YgdGhlIHNlYXJjaCByZXN1bHRzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaFJlc3VsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgdXNlcnMgbXVzdCBlbnRlciBiZWZvcmVcbiAgICogdGhlIGF1dG9jb21wbGV0ZSBjb21wb25lbnQgc2VhcmNoZXMgdGhlIGRhdGEgc291cmNlIGFuZCBkaXNwbGF5cyBzZWFyY2hcbiAgICogcmVzdWx0cyBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnModmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnMgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnMgJiZcbiAgICAgIHRoaXMuI19zZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnMgPiAwXG4gICAgICA/IHRoaXMuI19zZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnNcbiAgICAgIDogMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYW4gYXJyYXkgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWdhaW5zdCBlYWNoIHNlYXJjaCByZXN1bHQgaW4gb3JkZXJcbiAgICogdG8gZmlsdGVyIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IHNlYXJjaCBmdW5jdGlvbi4gV2hlblxuICAgKiB1c2luZyB0aGUgYHNlYXJjaGAgcHJvcGVydHkgdG8gc3BlY2lmeSBhIGN1c3RvbSBzZWFyY2ggZnVuY3Rpb24sIHlvdSBtdXN0XG4gICAqIG1hbnVhbGx5IGFwcGx5IGZpbHRlcnMgaW5zaWRlIHRoYXQgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBgdHJ1ZWBcbiAgICogb3IgYGZhbHNlYCBmb3IgZWFjaCByZXN1bHQgdG8gaW5kaWNhdGUgd2hldGhlciB0byBkaXNwbGF5IGl0IGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaEZpbHRlcnM6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uRmlsdGVyW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VhcmNoIHJlc3VsdHMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCBkaXNwbGF5cyBhbGwgbWF0Y2hpbmcgcmVzdWx0cy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VhcmNoUmVzdWx0c0xpbWl0KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VhcmNoUmVzdWx0c0xpbWl0ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlYXJjaFJlc3VsdHNMaW1pdCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLiNfc2VhcmNoUmVzdWx0c0xpbWl0ICYmIHRoaXMuI19zZWFyY2hSZXN1bHRzTGltaXQgPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy4jX3NlYXJjaFJlc3VsdHNMaW1pdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlU2hvd01vcmUgPyA1IDogdGhpcy4jX3NlYXJjaFJlc3VsdHNMaW1pdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSBidXR0b24gdGhhdCBsZXRzIHVzZXJzIGFkZCBvcHRpb25zIHRvIHRoZSBkYXRhIHNvdXJjZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93QWRkQnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdGV4dCB0byBkaXNwbGF5IHdoZW4gbm8gc2VhcmNoIHJlc3VsdHMgYXJlIGZvdW5kLlxuICAgKiBAZGVmYXVsdCBcIk5vIG1hdGNoZXMgZm91bmRcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG5vUmVzdWx0c0ZvdW5kVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQWxsb3dzIGFzeW5jIHNlYXJjaCB0byBiZSBkaXNhYmxlZCBldmVuIHdoZW4gYSBsaXN0ZW5lciBpcyBzcGVjaWZpZWQgZm9yXG4gICAqIHRoZSBgc2VhcmNoQXN5bmNgIG91dHB1dC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWFyY2hBc3luY0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCB0aGUgYnV0dG9uIHRvIGFkZCBvcHRpb25zIHRvIHRoZSBkYXRhIHNvdXJjZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgYWRkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCB0aGUgYnV0dG9uIHRvIHZpZXcgYWxsIG9wdGlvbnMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNob3dNb3JlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUF1dG9jb21wbGV0ZVNob3dNb3JlQXJncz4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBzZWxlY3QgaXRlbXMgaW4gdGhlIGRyb3Bkb3duIGxpc3QuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5QXV0b2NvbXBsZXRlU2VsZWN0aW9uQ2hhbmdlPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGVudGVyIG5ldyBzZWFyY2ggaW5mb3JtYXRpb24gYW5kIGFsbG93cyByZXN1bHRzIHRvIGJlXG4gICAqIHJldHVybmVkIHZpYSBhbiBvYnNlcnZhYmxlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWFyY2hBc3luYyA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNBcmdzPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiB0ZW1wbGF0ZV9wcm9wZXJ0aWVzXG5cbiAgcHVibGljIGdldCBzZWFyY2hSZXN1bHRzKCk6IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlYXJjaFJlc3VsdHMgfHwgW107XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlYXJjaFJlc3VsdHModmFsdWU6IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdFtdKSB7XG4gICAgdGhpcy4jX3NlYXJjaFJlc3VsdHMgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGlnaGxpZ2h0VGV4dCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19oaWdobGlnaHRUZXh0IHx8IFtdO1xuICB9XG5cbiAgcHVibGljIHNldCBoaWdobGlnaHRUZXh0KHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuI19oaWdobGlnaHRUZXh0ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG5cbiAgcHVibGljIHJlc3VsdHNMaXN0SWQ6IHN0cmluZztcblxuICBwdWJsaWMgcmVzdWx0c1dyYXBwZXJJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgcHVibGljIGdldCBzaG93QWN0aW9uc0FyZWEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FkZEJ1dHRvbiB8fCB0aGlzLmVuYWJsZVNob3dNb3JlO1xuICB9XG5cbiAgcHVibGljIGlzU2VhcmNoaW5nQXN5bmMgPSBmYWxzZTtcblxuICBwdWJsaWMgc2VhcmNoUmVzdWx0c0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgQENvbnRlbnRDaGlsZChTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSlcbiAgcHJpdmF0ZSBzZXQgaW5wdXREaXJlY3RpdmUoXG4gICAgZGlyZWN0aXZlOiBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAoIWRpcmVjdGl2ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFtcbiAgICAgICAgICAnVGhlIFNreUF1dG9jb21wbGV0ZUNvbXBvbmVudCByZXF1aXJlcyBhIENvbnRlbnRDaGlsZCBpbnB1dCBvcicsXG4gICAgICAgICAgJ3RleHRhcmVhIGJvdW5kIHdpdGggdGhlIFNreUF1dG9jb21wbGV0ZSBkaXJlY3RpdmUuIEZvciBleGFtcGxlOicsXG4gICAgICAgICAgJ2A8aW5wdXQgdHlwZT1cInRleHRcIiBza3lBdXRvY29tcGxldGU+YC4nLFxuICAgICAgICBdLmpvaW4oJyAnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jX2lucHV0RGlyZWN0aXZlICE9PSBkaXJlY3RpdmUpIHtcbiAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gb2xkIHN1YnNjcmlwdGlvbnMgb24gYW55IHByZXZpb3VzIGlucHV0IGRpcmVjdGl2ZVxuICAgICAgdGhpcy4jaW5wdXREaXJlY3RpdmVVbnN1YnNjcmliZS5uZXh0KCk7XG5cbiAgICAgIHRoaXMuI19pbnB1dERpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlLmRpc3BsYXlXaXRoID0gdGhpcy5kZXNjcmlwdG9yUHJvcGVydHk7XG5cbiAgICAgIHRoaXMuI19pbnB1dERpcmVjdGl2ZS50ZXh0Q2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy4jaW5wdXREaXJlY3RpdmVVbnN1YnNjcmliZSksXG4gICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKGNoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1NlYXJjaGluZ0FzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBvZihjaGFuZ2UpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy4jc2VhcmNoVGV4dENoYW5nZWQoY2hhbmdlLnZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuI19pbnB1dERpcmVjdGl2ZS5ibHVyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgZGlyZWN0aXZlLnJlc3RvcmVJbnB1dFRleHRWYWx1ZVRvUHJldmlvdXNTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICBkaXJlY3RpdmUub25Ub3VjaGVkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUuZm9jdXNcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgICAgICAgIHRoaXMuI29wZW5Ecm9wZG93bigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaW5wdXREaXJlY3RpdmUoKTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaW5wdXREaXJlY3RpdmU7XG4gIH1cblxuICBAVmlld0NoaWxkKCdyZXN1bHRzVGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gIH0pXG4gIHByaXZhdGUgcmVzdWx0c1RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdyZXN1bHRzUmVmJywge1xuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXG4gIH0pXG4gIHByaXZhdGUgc2V0IHJlc3VsdHNSZWYodmFsdWU6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI19yZXN1bHRzUmVmID0gdmFsdWU7XG4gICAgICB0aGlzLiNkZXN0cm95QWZmaXhlcigpO1xuICAgICAgdGhpcy4jY3JlYXRlQWZmaXhlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHJlc3VsdHNSZWYoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19yZXN1bHRzUmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGV4IHRoYXQgaW5kaWNhdGVzIHdoaWNoIGRlc2NlbmRhbnQgb2YgdGhlIG92ZXJsYXkgY3VycmVudGx5IGhhcyBmb2N1cy5cbiAgICovXG4gICNhY3RpdmVFbGVtZW50SW5kZXggPSAtMTtcblxuICAjYWRhcHRlclNlcnZpY2U6IFNreUF1dG9jb21wbGV0ZUFkYXB0ZXJTZXJ2aWNlO1xuXG4gICNhZmZpeGVyOiBTa3lBZmZpeGVyIHwgdW5kZWZpbmVkO1xuXG4gICNhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gICNpbnB1dEJveEhvc3RTdmM6IFNreUlucHV0Qm94SG9zdFNlcnZpY2UgfCB1bmRlZmluZWQ7XG5cbiAgI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNtZXNzYWdlU3RyZWFtU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNvdmVybGF5OiBTa3lPdmVybGF5SW5zdGFuY2UgfCB1bmRlZmluZWQ7XG5cbiAgI292ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZTtcblxuICAvKipcbiAgICogRWxlbWVudHMgd2l0aGluIHRoZSBhdXRvY29tcGxldGUgZHJvcGRvd24gdGhhdCBhcmUgZm9jdXNhYmxlLlxuICAgKiBUaGVzZSBhcmUgdHlwaWNhbGx5IHRoZSBzZWFyY2ggcmVzdWx0cyBhbmQgYWN0aW9uIGJ1dHRvbnMsIGJ1dCBjb3VsZCBhbHNvIGJlXG4gICAqIGVsZW1lbnRzIHByb3ZpZGVkIGluIHRoZSBjb25zdW1lcidzIG93biB0ZW1wbGF0ZS5cbiAgICovXG4gICNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAjY3VycmVudFNlYXJjaFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICNfZGF0YTogYW55W10gfCB1bmRlZmluZWQ7XG5cbiAgI19kZWJvdW5jZVRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjX2Rlc2NyaXB0b3JQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNfaGlnaGxpZ2h0VGV4dDogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgI19pbnB1dERpcmVjdGl2ZTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG5cbiAgI19tZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4oKTtcblxuICAjX3Byb3BlcnRpZXNUb1NlYXJjaDogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgI19yZXN1bHRzUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gICNfc2VhcmNoOiBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbiB8IHVuZGVmaW5lZDtcblxuICAjX3NlYXJjaFJlc3VsdHM6IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdFtdIHwgdW5kZWZpbmVkO1xuXG4gICNfc2VhcmNoUmVzdWx0c0xpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnM6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBhZGFwdGVyU2VydmljZTogU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2UsXG4gICAgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIGlucHV0Qm94SG9zdFN2Yz86IFNreUlucHV0Qm94SG9zdFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNhZmZpeFNlcnZpY2UgPSBhZmZpeFNlcnZpY2U7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UgPSBhZGFwdGVyU2VydmljZTtcbiAgICB0aGlzLiNvdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xuICAgIHRoaXMuI2lucHV0Qm94SG9zdFN2YyA9IGlucHV0Qm94SG9zdFN2YztcblxuICAgIGNvbnN0IGlkID0gKyt1bmlxdWVJZDtcbiAgICB0aGlzLnJlc3VsdHNMaXN0SWQgPSBgc2t5LWF1dG9jb21wbGV0ZS1saXN0LSR7aWR9YDtcbiAgICB0aGlzLnJlc3VsdHNXcmFwcGVySWQgPSBgc2t5LWF1dG9jb21wbGV0ZS13cmFwcGVyLSR7aWR9YDtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jYWRkSW5wdXRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRCdXR0b25DbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2xpY2suZW1pdCgpO1xuICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnJlc3RvcmVJbnB1dFRleHRWYWx1ZVRvUHJldmlvdXNTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50LmtleSkge1xuICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy4jZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudElkID0gYWN0aXZlRWxlbWVudD8uaWQ7XG4gICAgICBjb25zdCB0YXJnZXRJc1NlYXJjaFJlc3VsdCA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maW5kKFxuICAgICAgICAocikgPT4gci5lbGVtZW50SWQgPT09IGFjdGl2ZUVsZW1lbnRJZFxuICAgICAgKTtcblxuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICAgIGlmICh0YXJnZXRJc1NlYXJjaFJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy4jc2VsZWN0U2VhcmNoUmVzdWx0QnlJZChhY3RpdmVFbGVtZW50SWQpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd0FjdGlvbnNBcmVhKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuI3Jlc2V0U2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vkb3duJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndGFiJzpcbiAgICAgICAgICBpZiAodGFyZ2V0SXNTZWFyY2hSZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuI3NlbGVjdFNlYXJjaFJlc3VsdEJ5SWQoYWN0aXZlRWxlbWVudElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5yZXN0b3JlSW5wdXRUZXh0VmFsdWVUb1ByZXZpb3VzU3RhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID09PVxuICAgICAgICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID09PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgIHRoaXMuI3JlbW92ZUZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIGlmICh0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPD0gMCkge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID1cbiAgICAgICAgICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuI2FkZEZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vcmVCdXR0b25DbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01vcmVDbGljay5lbWl0KHsgaW5wdXRWYWx1ZTogdGhpcy5zZWFyY2hUZXh0IH0pO1xuICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnJlc3RvcmVJbnB1dFRleHRWYWx1ZVRvUHJldmlvdXNTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXN1bHRNb3VzZURvd24oaWQ6IHN0cmluZywgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLiNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGlkKTtcblxuICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzdWx0TW91c2VNb3ZlKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaWQgIT09IHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCkge1xuICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPSBpZDtcbiAgICAgIHRoaXMuI2FkZEZvY3VzZWRDbGFzcygpO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRWxlbWVudEZvY3VzZWQocmVmOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWYgPT09IHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdO1xuICB9XG5cbiAgI3NlYXJjaFRleHRDaGFuZ2VkKHNlYXJjaFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGlzRW1wdHkgPVxuICAgICAgIXNlYXJjaFRleHQgfHwgIXNlYXJjaFRleHQudHJpbSgpIHx8IHNlYXJjaFRleHQubWF0Y2goL15cXHMrJC8pO1xuXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIC8vIEVtaXQgc2VsZWN0aW9uQ2hhbmdlIGlmIHZhbHVlIGhhcyBiZWVuIGNsZWFyZWQuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUgJiYgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWx1ZSkge1xuICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICBzZWxlY3RlZEl0ZW06IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1NlYXJjaGluZ0FzeW5jID0gZmFsc2U7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTG9uZ0Vub3VnaCA9IHNlYXJjaFRleHQubGVuZ3RoID49IHRoaXMuc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzO1xuICAgIGNvbnN0IGlzRGlmZmVyZW50ID0gc2VhcmNoVGV4dCAhPT0gdGhpcy5zZWFyY2hUZXh0O1xuXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dC50cmltKCk7XG5cbiAgICBpZiAoaXNMb25nRW5vdWdoICYmIGlzRGlmZmVyZW50KSB7XG4gICAgICB0aGlzLiNjYW5jZWxDdXJyZW50U2VhcmNoKCk7XG5cbiAgICAgIHRoaXMuI2N1cnJlbnRTZWFyY2hTdWIgPSB0aGlzLiNwZXJmb3JtU2VhcmNoKClcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSByZXN1bHQ/Lml0ZW1zLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbSAmJiB0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eSBpbiBpdGVtO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5pc1NlYXJjaGluZ0FzeW5jID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPVxuICAgICAgICAgICAgaXRlbXM/Lm1hcCgociwgaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50SWQ6IGAke3RoaXMucmVzdWx0c0xpc3RJZH0taXRlbS0ke2l9YCxcbiAgICAgICAgICAgICAgICBkYXRhOiByLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSkgfHwgW107XG5cbiAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCA9IHJlc3VsdD8udG90YWxDb3VudCB8fCAwO1xuXG4gICAgICAgICAgdGhpcy5oaWdobGlnaHRUZXh0ID0gdGhpcy4jZ2V0SGlnaGxpZ2h0VGV4dCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgICAgIHRoaXMuI3JlbW92ZUZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIHRoaXMuI3JlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAvLyBMZXQgdGhlIHJlc3VsdHMgcG9wdWxhdGUgaW4gdGhlIERPTSBiZWZvcmUgcmVjYWxjdWxhdGluZyBwbGFjZW1lbnQuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuI2FmZml4ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhZmZpeGVyLnJlYWZmaXgoKTtcbiAgICAgICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jaW5pdE92ZXJsYXlGb2N1c2FibGVFbGVtZW50cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jb3BlbkRyb3Bkb3duKCk7XG4gICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSBmYWxzZTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gICNwZXJmb3JtU2VhcmNoKCk6IE9ic2VydmFibGU8U2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQXN5bmNEaXNhYmxlZCAmJiB0aGlzLnNlYXJjaEFzeW5jLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWFyY2hBc3luY0FyZ3M6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jQXJncyA9IHtcbiAgICAgICAgZGlzcGxheVR5cGU6ICdwb3BvdmVyJyxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNlYXJjaEFzeW5jLmVtaXQoc2VhcmNoQXN5bmNBcmdzKTtcblxuICAgICAgcmV0dXJuIHNlYXJjaEFzeW5jQXJncy5yZXN1bHQgfHwgb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQsIHRoaXMuZGF0YSwge1xuICAgICAgY29udGV4dDogJ3BvcG92ZXInLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICBpdGVtczogcmVzdWx0LFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb20ocmVzdWx0KS5waXBlKFxuICAgICAgbWFwKChpdGVtcykgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgIHRvdGFsQ291bnQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gICNjYW5jZWxDdXJyZW50U2VhcmNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXJyZW50U2VhcmNoU3ViKSB7XG4gICAgICB0aGlzLiNjdXJyZW50U2VhcmNoU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLiNjdXJyZW50U2VhcmNoU3ViID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IHRvIGhpZ2hsaWdodCBiYXNlZCBvbiBleGFjdCBtYXRjaGVzLCBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoZXMsIGFuZCBtYXRjaGVzIGZvciBjb3JyZXNwb25kaW5nIGRpYWNyaXRpY2FsIGNoYXJhY3RlcnMgKGEgd2lsbCBtYXRjaCDDoCkuXG4gICAqL1xuICAjZ2V0SGlnaGxpZ2h0VGV4dChzZWFyY2hUZXh0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaFRleHQgPSBub3JtYWxpemVEaWFjcml0aWNzKHNlYXJjaFRleHQpXG4gICAgICAudG9Mb2NhbGVVcHBlckNhc2UoKVxuICAgICAgLnRyaW0oKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hUZXh0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IG1hdGNoZXNUb0hpZ2hsaWdodDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHRoaXMuc2VhcmNoUmVzdWx0cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWFyY2hSZXN1bHRzW2ldLmRhdGFbdGhpcy5kZXNjcmlwdG9yUHJvcGVydHldXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC50b0xvY2FsZVVwcGVyQ2FzZSgpIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRhVmFsdWUgPSBub3JtYWxpemVEaWFjcml0aWNzKHZhbHVlKTtcblxuICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICBsZXQgaW5kZXg6IG51bWJlcjtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgKGluZGV4ID0gbm9ybWFsaXplZERhdGFWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRTZWFyY2hUZXh0LCBvZmZzZXQpKSA+IC0xXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZFN0cmluZyA9IHZhbHVlLnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ID0gaW5kZXggKyBzZWFyY2hUZXh0Lmxlbmd0aDtcbiAgICAgICAgbWF0Y2hlc1RvSGlnaGxpZ2h0ID0gbWF0Y2hlc1RvSGlnaGxpZ2h0LmNvbmNhdChtYXRjaGVkU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYW55IGR1cGxpY2F0ZXMgZnJvbSB0aGUgYXJyYXkuXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KG1hdGNoZXNUb0hpZ2hsaWdodCldO1xuICB9XG5cbiAgI3NlbGVjdFNlYXJjaFJlc3VsdEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maW5kKChyKSA9PiByLmVsZW1lbnRJZCA9PT0gaWQpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdC5kYXRhO1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gZGF0YVt0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eV07XG4gICAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbHVlID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICBzZWxlY3RlZEl0ZW06IGRhdGEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjb3BlbkRyb3Bkb3duKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jb3ZlcmxheSAmJiB0aGlzLnJlc3VsdHNUZW1wbGF0ZVJlZikge1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuI292ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIGVuYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlUG9pbnRlckV2ZW50czogdHJ1ZSxcbiAgICAgICAgd3JhcHBlckNsYXNzOiB0aGlzLndyYXBwZXJDbGFzcyxcbiAgICAgIH0pO1xuXG4gICAgICBvdmVybGF5LmF0dGFjaFRlbXBsYXRlKHRoaXMucmVzdWx0c1RlbXBsYXRlUmVmKTtcblxuICAgICAgdGhpcy4jb3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuI2luaXRPdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMoKTtcbiAgICB9XG4gIH1cblxuICAjY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNldFNlYXJjaCgpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjc2V0QWN0aXZlRGVzY2VuZGFudCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID1cbiAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdO1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgdGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5zZXRBY3RpdmVEZXNjZW5kYW50KGFjdGl2ZUVsZW1lbnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gICNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnNldEFjdGl2ZURlc2NlbmRhbnQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgI3Jlc2V0U2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IFtdO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuaGlnaGxpZ2h0VGV4dCA9IFtdO1xuICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0c0NvdW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI3JlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB0aGlzLiNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjYWRkSW5wdXRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgb2JzZXJ2YWJsZUZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd24oZXZlbnQpO1xuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50UmVmLFxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzUmVmLFxuICAgICAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNkZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jb3ZlcmxheSkge1xuICAgICAgdGhpcy4jb3ZlcmxheVNlcnZpY2UuY2xvc2UodGhpcy4jb3ZlcmxheSk7XG4gICAgICB0aGlzLiNvdmVybGF5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNjcmVhdGVBZmZpeGVyKCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNhZmZpeGVyICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgY29uc3QgYWZmaXhlciA9IHRoaXMuI2FmZml4U2VydmljZS5jcmVhdGVBZmZpeGVyKHRoaXMucmVzdWx0c1JlZik7XG5cbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYsXG4gICAgICAgIHRoaXMucmVzdWx0c1JlZixcbiAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmNcbiAgICAgICk7XG5cbiAgICAgIGFmZml4ZXIuYWZmaXhUbyh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgIGVuYWJsZUF1dG9GaXQ6IHRydWUsXG4gICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICBwbGFjZW1lbnQ6ICdiZWxvdycsXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNhZmZpeGVyID0gYWZmaXhlcjtcbiAgICB9XG4gIH1cblxuICAjZGVzdHJveUFmZml4ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2FmZml4ZXIpIHtcbiAgICAgIHRoaXMuI2FmZml4ZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy4jYWZmaXhlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAjaW5pdE1lc3NhZ2VTdHJlYW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIpIHtcbiAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy4jbWVzc2FnZVN0cmVhbVN1YiA9IHRoaXMubWVzc2FnZVN0cmVhbS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgIGNhc2UgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUuQ2xvc2VEcm9wZG93bjpcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUuUmVwb3NpdGlvbkRyb3Bkb3duOlxuICAgICAgICAgIC8vIFNldHRpbWVvdXQgd2FpdHMgZm9yIGNoYW5nZXMgaW4gRE9NIChlLmcuLCB0b2tlbnMgYmVpbmcgcmVtb3ZlZClcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy4jYWZmaXhlcikge1xuICAgICAgICAgICAgICB0aGlzLiNhZmZpeGVyLnJlYWZmaXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gICNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk6IHZvaWQge1xuICAgIC8vIFdhaXQgZm9yIGRyb3Bkb3duIGVsZW1lbnRzIHRvIHJlbmRlci5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNvdmVybGF5KSB7XG4gICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50cyA9XG4gICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKHRoaXMuI292ZXJsYXkpO1xuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRUYWJJbmRleChlbCwgLTEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAjZ2V0QWN0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdO1xuICB9XG5cbiAgI3JlbW92ZUZvY3VzZWRDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnJlbW92ZUNTU0NsYXNzKFxuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XSxcbiAgICAgICAgJ3NreS1hdXRvY29tcGxldGUtZGVzY2VuZGFudC1mb2N1cydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgI2FkZEZvY3VzZWRDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmFkZENTU0NsYXNzKFxuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XSxcbiAgICAgICAgJ3NreS1hdXRvY29tcGxldGUtZGVzY2VuZGFudC1mb2N1cydcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiXG4gIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlXCJcbiAgcm9sZT1cImNvbWJvYm94XCJcbiAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW4gJiYgc2VhcmNoVGV4dFwiXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gIFthdHRyLmFyaWEtb3duc109XCJpc09wZW4gPyByZXN1bHRzTGlzdElkIDogbnVsbFwiXG4gIFthdHRyLmlkXT1cInJlc3VsdHNXcmFwcGVySWRcIlxuPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNyZXN1bHRzVGVtcGxhdGVSZWY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtcmVzdWx0cy1jb250YWluZXJcIlxuICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICdza3ktc2hhZG93JzogJ2RlZmF1bHQnLFxuICAgICAgJ3NreS1lbGV2YXRpb24tNCc6ICdtb2Rlcm4nXG4gICAgfVwiXG4gICAgKGtleWRvd24pPVwiaGFuZGxlS2V5ZG93bigkZXZlbnQpXCJcbiAgICAjcmVzdWx0c1JlZlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJpc1NlYXJjaGluZ0FzeW5jOyBlbHNlIHJlc3VsdENvbnRyb2xzVGVtcGxhdGVSZWZcIlxuICAgICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLXJlc3VsdHMtd2FpdGluZ1wiXG4gICAgPlxuICAgICAgPHNreS13YWl0IFtpc1dhaXRpbmddPVwidHJ1ZVwiPjwvc2t5LXdhaXQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZXN1bHRDb250cm9sc1RlbXBsYXRlUmVmPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJzZWFyY2hUZXh0ICYmICghc2hvd0FjdGlvbnNBcmVhIHx8IHNlYXJjaFJlc3VsdHMubGVuZ3RoID4gMClcIlxuICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1yZXN1bHRzXCJcbiAgICByb2xlPVwibGlzdGJveFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbYXR0ci5pZF09XCJyZXN1bHRzTGlzdElkXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlc3VsdCBvZiBzZWFyY2hSZXN1bHRzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIXNlYXJjaFJlc3VsdHNMaW1pdCB8fCBpIDwgc2VhcmNoUmVzdWx0c0xpbWl0XCJcbiAgICAgICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLXJlc3VsdFwiXG4gICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzRWxlbWVudEZvY3VzZWQoc2VhcmNoUmVzdWx0RWwpXCJcbiAgICAgICAgW2F0dHIuaWRdPVwicmVzdWx0LmVsZW1lbnRJZFwiXG4gICAgICAgIFtza3lIaWdobGlnaHRdPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25SZXN1bHRNb3VzZURvd24ocmVzdWx0LmVsZW1lbnRJZCwgJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZW1vdmUpPVwib25SZXN1bHRNb3VzZU1vdmUoaSlcIlxuICAgICAgICAjc2VhcmNoUmVzdWx0RWxcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzZWFyY2hSZXN1bHRUZW1wbGF0ZSB8fCBkZWZhdWx0U2VhcmNoUmVzdWx0VGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGl0ZW06IHJlc3VsdC5kYXRhIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzZWFyY2hSZXN1bHRzLmxlbmd0aCA9PT0gMFwiXG4gICAgICBjbGFzcz1cInNreS1kZWVtcGhhc2l6ZWQgc2t5LXBhZGRpbmctc3F1aXNoLWRlZmF1bHRcIlxuICAgID5cbiAgICAgIHt7XG4gICAgICAgIG5vUmVzdWx0c0ZvdW5kVGV4dCB8fFxuICAgICAgICAgICgnc2t5dXhfYXV0b2NvbXBsZXRlX25vX3Jlc3VsdHMnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJzaG93QWN0aW9uc0FyZWFcIiBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtYWN0aW9uc1wiPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiZW5hYmxlU2hvd01vcmUgJiYgKCFzZWFyY2hUZXh0IHx8IHNlYXJjaFJlc3VsdHMubGVuZ3RoID4gMClcIlxuICAgICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLWFjdGlvbiBza3ktYXV0b2NvbXBsZXRlLWFjdGlvbi1tb3JlIHNreS1idG4gc2t5LWJ0bi1saW5rXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKG1vdXNlZG93bik9XCJtb3JlQnV0dG9uQ2xpY2tlZCgpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIHNlYXJjaEFzeW5jXG4gICAgICAgICAgICB8IHNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jRGlzYWJsZWQ6IHNlYXJjaEFzeW5jRGlzYWJsZWRcbiAgICAgICAgICApICYmXG4gICAgICAgICAgc2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAhc2VhcmNoVGV4dFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICB7eyAnc2t5dXhfYXV0b2NvbXBsZXRlX3Nob3dfYWxsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKHNlYXJjaEFzeW5jXG4gICAgICAgICAgICB8IHNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jRGlzYWJsZWQ6IHNlYXJjaEFzeW5jRGlzYWJsZWQpICYmXG4gICAgICAgICAgIXNlYXJjaFRleHRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICAnc2t5dXhfYXV0b2NvbXBsZXRlX3Nob3dfYWxsX2NvdW50J1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IChkYXRhLmxlbmd0aCB8IHNreU51bWVyaWM6IHsgdHJ1bmNhdGU6IGZhbHNlIH0pXG4gICAgICAgIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hUZXh0XCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgJ3NreXV4X2F1dG9jb21wbGV0ZV9zaG93X21hdGNoZXNfY291bnQnXG4gICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICA6IChzZWFyY2hSZXN1bHRzQ291bnQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyBkYXRhLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgOiAoc2VhcmNoUmVzdWx0c0NvdW50IHwgc2t5TnVtZXJpYzogeyB0cnVuY2F0ZTogZmFsc2UgfSkpXG4gICAgICAgIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInNlYXJjaFRleHQgJiYgc2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDBcIlxuICAgICAgY2xhc3M9XCJza3ktZm9udC1kZWVtcGhhc2l6ZWQgc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb25zLW5vLXJlc3VsdHNcIlxuICAgID5cbiAgICAgIHt7XG4gICAgICAgIG5vUmVzdWx0c0ZvdW5kVGV4dCB8fFxuICAgICAgICAgICgnc2t5dXhfYXV0b2NvbXBsZXRlX25vX3Jlc3VsdHMnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cInNob3dBZGRCdXR0b25cIlxuICAgICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLWFjdGlvbiBza3ktYXV0b2NvbXBsZXRlLWFjdGlvbi1hZGQgc2t5LWJ0biBza3ktYnRuLWxpbmtcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiaXNFbGVtZW50Rm9jdXNlZChhZGRCdXR0b25FbClcIlxuICAgICAgKG1vdXNlZG93bik9XCJhZGRCdXR0b25DbGlja2VkKClcIlxuICAgICAgI2FkZEJ1dHRvbkVsXG4gICAgPlxuICAgICAgPHNreS1pY29uICpza3lUaGVtZUlmPVwiJ21vZGVybidcIiBpY29uPVwiYWRkXCIgaWNvblR5cGU9XCJza3l1eFwiPjwvc2t5LWljb24+XG4gICAgICA8c2t5LWljb24gKnNreVRoZW1lSWY9XCInZGVmYXVsdCdcIiBpY29uPVwicGx1cy1jaXJjbGVcIj48L3NreS1pY29uPlxuICAgICAge3sgJ3NreXV4X2F1dG9jb21wbGV0ZV9hZGQnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiICNkZWZhdWx0U2VhcmNoUmVzdWx0VGVtcGxhdGU+XG4gIHt7IGl0ZW1bZGVzY3JpcHRvclByb3BlcnR5XSB9fVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
729
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUdmLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEQsT0FBTyxFQUVMLE9BQU8sRUFFUCxJQUFJLEVBQ0osU0FBUyxJQUFJLG1CQUFtQixFQUNoQyxFQUFFLEdBQ0gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFN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U0MsbUJBQW1CO3NCQUR6QixLQUFLO2dCQVFDLFFBQVE7c0JBRGQsTUFBTTtnQkFRQSxhQUFhO3NCQURuQixNQUFNO2dCQU9BLGVBQWU7c0JBRHJCLE1BQU07Z0JBUUEsV0FBVztzQkFEakIsTUFBTTtnQkEwQ0ssY0FBYztzQkFEekIsWUFBWTt1QkFBQyw2QkFBNkI7Z0JBNERuQyxrQkFBa0I7c0JBSHpCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUU7d0JBQy9CLElBQUksRUFBRSxXQUFXO3FCQUNsQjtnQkFNVyxVQUFVO3NCQUhyQixTQUFTO3VCQUFDLFlBQVksRUFBRTt3QkFDdkIsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNreUFmZml4QXV0b0ZpdENvbnRleHQsXG4gIFNreUFmZml4U2VydmljZSxcbiAgU2t5QWZmaXhlcixcbiAgU2t5T3ZlcmxheUluc3RhbmNlLFxuICBTa3lPdmVybGF5U2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hIb3N0U2VydmljZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5cbmltcG9ydCB7XG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgZnJvbSxcbiAgZnJvbUV2ZW50IGFzIG9ic2VydmFibGVGcm9tRXZlbnQsXG4gIG9mLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgbm9ybWFsaXplRGlhY3JpdGljcyB9IGZyb20gJy4uL3NoYXJlZC9za3ktbG9va3VwLXN0cmluZy11dGlscyc7XG5cbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZUFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9hdXRvY29tcGxldGUtYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IHNreUF1dG9jb21wbGV0ZURlZmF1bHRTZWFyY2hGdW5jdGlvbiB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLWRlZmF1bHQtc2VhcmNoLWZ1bmN0aW9uJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi9hdXRvY29tcGxldGUtaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZU1lc3NhZ2UgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1tZXNzYWdlJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZU1lc3NhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtbWVzc2FnZS10eXBlJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jQXJncyB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNlYXJjaC1hc3luYy1hcmdzJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jUmVzdWx0IH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWFzeW5jLXJlc3VsdCc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbiB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNlYXJjaC1mdW5jdGlvbic7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbkZpbHRlciB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNlYXJjaC1mdW5jdGlvbi1maWx0ZXInO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VsZWN0aW9uQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VsZWN0aW9uLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTaG93TW9yZUFyZ3MgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zaG93LW1vcmUtYXJncyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHQge1xuICBlbGVtZW50SWQ6IHN0cmluZztcbiAgZGF0YTogYW55O1xufVxuXG5sZXQgdW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtTa3lBdXRvY29tcGxldGVBZGFwdGVyU2VydmljZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lBdXRvY29tcGxldGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAvLyNyZWdpb24gcHVibGljX2FwaVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIEhUTUwgZWxlbWVudCBJRCAod2l0aG91dCB0aGUgbGVhZGluZyBgI2ApIG9mIHRoZSBlbGVtZW50IHRoYXQgbGFiZWxzXG4gICAqIHRoZSBhdXRvY29tcGxldGUgdGV4dCBpbnB1dC4gVGhpcyBzZXRzIHRoZSBpbnB1dCdzIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZVxuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIHN0YXRpYyBkYXRhIHNvdXJjZSBmb3IgdGhlIGF1dG9jb21wbGV0ZSBjb21wb25lbnQgdG8gc2VhcmNoXG4gICAqIHdoZW4gdXNlcnMgZW50ZXIgdGV4dC4gRm9yIGEgZHluYW1pYyBkYXRhIHNvdXJjZSBzdWNoIGFzIGFuIGFycmF5IHRoYXRcbiAgICogY2hhbmdlcyBkdWUgdG8gc2VydmVyIGNhbGxzLCB1c2UgYHNlYXJjaGAgb3IgYHNlYXJjaEFzeW5jYCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRhKHZhbHVlOiBhbnlbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kYXRhID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLiNfZGF0YSB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IG1hbnkgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHNlYXJjaGluZyB3aGlsZSB1c2Vyc1xuICAgKiBlbnRlciB0ZXh0IGluIHRoZSBhdXRvY29tcGxldGUgZmllbGQuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGVib3VuY2VUaW1lKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGVib3VuY2VUaW1lID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlYm91bmNlVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfZGVib3VuY2VUaW1lIHx8IDA7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIGFuIG9iamVjdCBwcm9wZXJ0eSB0byBkaXNwbGF5IGluIHRoZSB0ZXh0IGlucHV0IGFmdGVyIHVzZXJzXG4gICAqIHNlbGVjdCBhbiBpdGVtIGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBAZGVmYXVsdCBcIm5hbWVcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkZXNjcmlwdG9yUHJvcGVydHkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kZXNjcmlwdG9yUHJvcGVydHkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRvclByb3BlcnR5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI19kZXNjcmlwdG9yUHJvcGVydHkgfHwgJ25hbWUnO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNwbGF5IGEgYnV0dG9uIGluIHRoZSBkcm9wZG93biB0aGF0IG9wZW5zIGEgcGlja2VyIHdoZXJlIHVzZXJzIGNhbiB2aWV3IGFsbCBvcHRpb25zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGVuYWJsZVNob3dNb3JlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhbiBvYnNlcnZhYmxlIG9mIGBTa3lBdXRvY29tcGxldGVNZXNzYWdlYCB0aGF0IGNhbiBjbG9zZSB0aGUgZHJvcGRvd24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZXNzYWdlU3RyZWFtKHZhbHVlOiBTdWJqZWN0PFNreUF1dG9jb21wbGV0ZU1lc3NhZ2U+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21lc3NhZ2VTdHJlYW0gPSB2YWx1ZSA/PyBuZXcgU3ViamVjdDxTa3lBdXRvY29tcGxldGVNZXNzYWdlPigpO1xuICAgIHRoaXMuI2luaXRNZXNzYWdlU3RyZWFtKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lc3NhZ2VTdHJlYW0oKTogU3ViamVjdDxTa3lBdXRvY29tcGxldGVNZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMuI19tZXNzYWdlU3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHdyYXBwZXJDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIHRvIHNlYXJjaC5cbiAgICogQGRlZmF1bHQgW1wibmFtZVwiXVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwcm9wZXJ0aWVzVG9TZWFyY2godmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3Byb3BlcnRpZXNUb1NlYXJjaCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBwcm9wZXJ0aWVzVG9TZWFyY2goKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLiNfcHJvcGVydGllc1RvU2VhcmNoIHx8IFsnbmFtZSddO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGZ1bmN0aW9uIHRvIGR5bmFtaWNhbGx5IG1hbmFnZSB0aGUgZGF0YSBzb3VyY2Ugd2hlbiB1c2Vyc1xuICAgKiBjaGFuZ2UgdGhlIHRleHQgaW4gdGhlIGF1dG9jb21wbGV0ZSBmaWVsZC4gVGhlIHNlYXJjaCBmdW5jdGlvbiBtdXN0IHJldHVyblxuICAgKiBhbiBhcnJheSBvciBhIHByb21pc2Ugb2YgYW4gYXJyYXkuIFRoZSBgc2VhcmNoYCBwcm9wZXJ0eSBpcyBwYXJ0aWN1bGFybHlcbiAgICogdXNlZnVsIHdoZW4gdGhlIGRhdGEgc291cmNlIGRvZXMgbm90IGxpdmUgaW4gdGhlIHNvdXJjZSBjb2RlLiBJZiB0aGVcbiAgICogc2VhcmNoIHJlcXVpcmVzIGNhbGxpbmcgYSByZW1vdGUgZGF0YSBzb3VyY2UsIHVzZSBgc2VhcmNoQXN5bmNgIGluc3RlYWQgb2ZcbiAgICogYHNlYXJjaGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlYXJjaCh2YWx1ZTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VhcmNoID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlYXJjaCgpOiBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI19zZWFyY2ggfHxcbiAgICAgIHNreUF1dG9jb21wbGV0ZURlZmF1bHRTZWFyY2hGdW5jdGlvbih7XG4gICAgICAgIHByb3BlcnRpZXNUb1NlYXJjaDogdGhpcy5wcm9wZXJ0aWVzVG9TZWFyY2gsXG4gICAgICAgIHNlYXJjaEZpbHRlcnM6IHRoaXMuc2VhcmNoRmlsdGVycyxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSB0ZW1wbGF0ZSB0byBmb3JtYXQgZWFjaCBzZWFyY2ggcmVzdWx0IGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBUaGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudCBpbmplY3RzIHNlYXJjaCByZXN1bHQgdmFsdWVzIGludG8gdGhlIHRlbXBsYXRlXG4gICAqIGFzIGBpdGVtYCB2YXJpYWJsZXMgdGhhdCByZWZlcmVuY2UgYWxsIG9mIHRoZSBvYmplY3QgcHJvcGVydGllcyBvZiB0aGUgc2VhcmNoIHJlc3VsdHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoUmVzdWx0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB1c2VycyBtdXN0IGVudGVyIGJlZm9yZVxuICAgKiB0aGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudCBzZWFyY2hlcyB0aGUgZGF0YSBzb3VyY2UgYW5kIGRpc3BsYXlzIHNlYXJjaFxuICAgKiByZXN1bHRzIGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3NlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycyA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycyAmJlxuICAgICAgdGhpcy4jX3NlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycyA+IDBcbiAgICAgID8gdGhpcy4jX3NlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVyc1xuICAgICAgOiAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhbiBhcnJheSBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhZ2FpbnN0IGVhY2ggc2VhcmNoIHJlc3VsdCBpbiBvcmRlclxuICAgKiB0byBmaWx0ZXIgdGhlIHNlYXJjaCByZXN1bHRzIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgc2VhcmNoIGZ1bmN0aW9uLiBXaGVuXG4gICAqIHVzaW5nIHRoZSBgc2VhcmNoYCBwcm9wZXJ0eSB0byBzcGVjaWZ5IGEgY3VzdG9tIHNlYXJjaCBmdW5jdGlvbiwgeW91IG11c3RcbiAgICogbWFudWFsbHkgYXBwbHkgZmlsdGVycyBpbnNpZGUgdGhhdCBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGB0cnVlYFxuICAgKiBvciBgZmFsc2VgIGZvciBlYWNoIHJlc3VsdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIGRpc3BsYXkgaXQgaW4gdGhlIGRyb3Bkb3duIGxpc3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoRmlsdGVyczogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb25GaWx0ZXJbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWFyY2ggcmVzdWx0cyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgY29tcG9uZW50IGRpc3BsYXlzIGFsbCBtYXRjaGluZyByZXN1bHRzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWFyY2hSZXN1bHRzTGltaXQodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zZWFyY2hSZXN1bHRzTGltaXQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoUmVzdWx0c0xpbWl0KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuI19zZWFyY2hSZXN1bHRzTGltaXQgJiYgdGhpcy4jX3NlYXJjaFJlc3VsdHNMaW1pdCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLiNfc2VhcmNoUmVzdWx0c0xpbWl0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmFibGVTaG93TW9yZSA/IDUgOiB0aGlzLiNfc2VhcmNoUmVzdWx0c0xpbWl0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzcGxheSBhIGJ1dHRvbiB0aGF0IGxldHMgdXNlcnMgYWRkIG9wdGlvbnMgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dBZGRCdXR0b24gPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB0ZXh0IHRvIGRpc3BsYXkgd2hlbiBubyBzZWFyY2ggcmVzdWx0cyBhcmUgZm91bmQuXG4gICAqIEBkZWZhdWx0IFwiTm8gbWF0Y2hlcyBmb3VuZFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbm9SZXN1bHRzRm91bmRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBBbGxvd3MgYXN5bmMgc2VhcmNoIHRvIGJlIGRpc2FibGVkIGV2ZW4gd2hlbiBhIGxpc3RlbmVyIGlzIHNwZWNpZmllZCBmb3JcbiAgICogdGhlIGBzZWFyY2hBc3luY2Agb3V0cHV0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaEFzeW5jRGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IHRoZSBidXR0b24gdG8gYWRkIG9wdGlvbnMgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhZGRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IHRoZSBidXR0b24gdG8gdmlldyBhbGwgb3B0aW9ucy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2hvd01vcmVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5QXV0b2NvbXBsZXRlU2hvd01vcmVBcmdzPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCBpdGVtcyBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2U+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgZW50ZXIgbmV3IHNlYXJjaCBpbmZvcm1hdGlvbiBhbmQgYWxsb3dzIHJlc3VsdHMgdG8gYmVcbiAgICogcmV0dXJuZWQgdmlhIGFuIG9ic2VydmFibGUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNlYXJjaEFzeW5jID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0FyZ3M+KCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIHRlbXBsYXRlX3Byb3BlcnRpZXNcblxuICBwdWJsaWMgZ2V0IHNlYXJjaFJlc3VsdHMoKTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0W10ge1xuICAgIHJldHVybiB0aGlzLiNfc2VhcmNoUmVzdWx0cyB8fCBbXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc2VhcmNoUmVzdWx0cyh2YWx1ZTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0W10pIHtcbiAgICB0aGlzLiNfc2VhcmNoUmVzdWx0cyA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBoaWdobGlnaHRUZXh0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy4jX2hpZ2hsaWdodFRleHQgfHwgW107XG4gIH1cblxuICBwdWJsaWMgc2V0IGhpZ2hsaWdodFRleHQodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy4jX2hpZ2hsaWdodFRleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBpc09wZW4gPSBmYWxzZTtcblxuICBwdWJsaWMgcmVzdWx0c0xpc3RJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyByZXN1bHRzV3JhcHBlcklkOiBzdHJpbmc7XG5cbiAgcHVibGljIHNlYXJjaFRleHQgPSAnJztcblxuICBwdWJsaWMgZ2V0IHNob3dBY3Rpb25zQXJlYSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QWRkQnV0dG9uIHx8IHRoaXMuZW5hYmxlU2hvd01vcmU7XG4gIH1cblxuICBwdWJsaWMgaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzZWFyY2hSZXN1bHRzQ291bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvLyNlbmRyZWdpb25cblxuICBAQ29udGVudENoaWxkKFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlKVxuICBwcml2YXRlIHNldCBpbnB1dERpcmVjdGl2ZShcbiAgICBkaXJlY3RpdmU6IFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGlmICghZGlyZWN0aXZlKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgW1xuICAgICAgICAgICdUaGUgU2t5QXV0b2NvbXBsZXRlQ29tcG9uZW50IHJlcXVpcmVzIGEgQ29udGVudENoaWxkIGlucHV0IG9yJyxcbiAgICAgICAgICAndGV4dGFyZWEgYm91bmQgd2l0aCB0aGUgU2t5QXV0b2NvbXBsZXRlIGRpcmVjdGl2ZS4gRm9yIGV4YW1wbGU6JyxcbiAgICAgICAgICAnYDxpbnB1dCB0eXBlPVwidGV4dFwiIHNreUF1dG9jb21wbGV0ZT5gLicsXG4gICAgICAgIF0uam9pbignICcpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiNfaW5wdXREaXJlY3RpdmUgIT09IGRpcmVjdGl2ZSkge1xuICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBvbGQgc3Vic2NyaXB0aW9ucyBvbiBhbnkgcHJldmlvdXMgaW5wdXQgZGlyZWN0aXZlXG4gICAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLm5leHQoKTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUuZGlzcGxheVdpdGggPSB0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlLnRleHRDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlKSxcbiAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGNoYW5nZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICB0aGlzLiNzZWFyY2hUZXh0Q2hhbmdlZChjaGFuZ2UudmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlLmJsdXJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBkaXJlY3RpdmUucmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk7XG4gICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgIGRpcmVjdGl2ZS5vblRvdWNoZWQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuI19pbnB1dERpcmVjdGl2ZS5mb2N1c1xuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jaW5wdXREaXJlY3RpdmVVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dBY3Rpb25zQXJlYSkge1xuICAgICAgICAgICAgdGhpcy4jb3BlbkRyb3Bkb3duKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBpbnB1dERpcmVjdGl2ZSgpOiBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19pbnB1dERpcmVjdGl2ZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ3Jlc3VsdHNUZW1wbGF0ZVJlZicsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgfSlcbiAgcHJpdmF0ZSByZXN1bHRzVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ3Jlc3VsdHNSZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHJpdmF0ZSBzZXQgcmVzdWx0c1JlZih2YWx1ZTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jX3Jlc3VsdHNSZWYgPSB2YWx1ZTtcbiAgICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgICB0aGlzLiNjcmVhdGVBZmZpeGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcmVzdWx0c1JlZigpOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3Jlc3VsdHNSZWY7XG4gIH1cblxuICAvKipcbiAgICogSW5kZXggdGhhdCBpbmRpY2F0ZXMgd2hpY2ggZGVzY2VuZGFudCBvZiB0aGUgb3ZlcmxheSBjdXJyZW50bHkgaGFzIGZvY3VzLlxuICAgKi9cbiAgI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuXG4gICNhZGFwdGVyU2VydmljZTogU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2U7XG5cbiAgI2FmZml4ZXI6IFNreUFmZml4ZXIgfCB1bmRlZmluZWQ7XG5cbiAgI2FmZml4U2VydmljZTogU2t5QWZmaXhTZXJ2aWNlO1xuXG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG5cbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG5cbiAgI2lucHV0Qm94SG9zdFN2YzogU2t5SW5wdXRCb3hIb3N0U2VydmljZSB8IHVuZGVmaW5lZDtcblxuICAjaW5wdXREaXJlY3RpdmVVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI21lc3NhZ2VTdHJlYW1TdWI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI292ZXJsYXk6IFNreU92ZXJsYXlJbnN0YW5jZSB8IHVuZGVmaW5lZDtcblxuICAjb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlO1xuXG4gIC8qKlxuICAgKiBFbGVtZW50cyB3aXRoaW4gdGhlIGF1dG9jb21wbGV0ZSBkcm9wZG93biB0aGF0IGFyZSBmb2N1c2FibGUuXG4gICAqIFRoZXNlIGFyZSB0eXBpY2FsbHkgdGhlIHNlYXJjaCByZXN1bHRzIGFuZCBhY3Rpb24gYnV0dG9ucywgYnV0IGNvdWxkIGFsc28gYmVcbiAgICogZWxlbWVudHMgcHJvdmlkZWQgaW4gdGhlIGNvbnN1bWVyJ3Mgb3duIHRlbXBsYXRlLlxuICAgKi9cbiAgI292ZXJsYXlGb2N1c2FibGVFbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICNjdXJyZW50U2VhcmNoU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI19kYXRhOiBhbnlbXSB8IHVuZGVmaW5lZDtcblxuICAjX2RlYm91bmNlVGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICNfZGVzY3JpcHRvclByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19oaWdobGlnaHRUZXh0OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAjX2lucHV0RGlyZWN0aXZlOiBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSB8IHVuZGVmaW5lZDtcblxuICAjX21lc3NhZ2VTdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lBdXRvY29tcGxldGVNZXNzYWdlPigpO1xuXG4gICNfcHJvcGVydGllc1RvU2VhcmNoOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAjX3Jlc3VsdHNSZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2g6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICNfc2VhcmNoUmVzdWx0czogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0W10gfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hSZXN1bHRzTGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjX3NlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVyczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIGFmZml4U2VydmljZTogU2t5QWZmaXhTZXJ2aWNlLFxuICAgIGFkYXB0ZXJTZXJ2aWNlOiBTa3lBdXRvY29tcGxldGVBZGFwdGVyU2VydmljZSxcbiAgICBvdmVybGF5U2VydmljZTogU2t5T3ZlcmxheVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgaW5wdXRCb3hIb3N0U3ZjPzogU2t5SW5wdXRCb3hIb3N0U2VydmljZVxuICApIHtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI2FmZml4U2VydmljZSA9IGFmZml4U2VydmljZTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZSA9IGFkYXB0ZXJTZXJ2aWNlO1xuICAgIHRoaXMuI292ZXJsYXlTZXJ2aWNlID0gb3ZlcmxheVNlcnZpY2U7XG4gICAgdGhpcy4jaW5wdXRCb3hIb3N0U3ZjID0gaW5wdXRCb3hIb3N0U3ZjO1xuXG4gICAgY29uc3QgaWQgPSArK3VuaXF1ZUlkO1xuICAgIHRoaXMucmVzdWx0c0xpc3RJZCA9IGBza3ktYXV0b2NvbXBsZXRlLWxpc3QtJHtpZH1gO1xuICAgIHRoaXMucmVzdWx0c1dyYXBwZXJJZCA9IGBza3ktYXV0b2NvbXBsZXRlLXdyYXBwZXItJHtpZH1gO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNhZGRJbnB1dEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jY2FuY2VsQ3VycmVudFNlYXJjaCgpO1xuICAgIHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jZGVzdHJveUFmZml4ZXIoKTtcbiAgICB0aGlzLiNkZXN0cm95T3ZlcmxheSgpO1xuICB9XG5cbiAgcHVibGljIGFkZEJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRDbGljay5lbWl0KCk7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUucmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk7XG4gICAgfVxuICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZXZlbnQua2V5KSB7XG4gICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLiNnZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgICBjb25zdCBhY3RpdmVFbGVtZW50SWQgPSBhY3RpdmVFbGVtZW50Py5pZDtcbiAgICAgIGNvbnN0IHRhcmdldElzU2VhcmNoUmVzdWx0ID0gdGhpcy5zZWFyY2hSZXN1bHRzLmZpbmQoXG4gICAgICAgIChyKSA9PiByLmVsZW1lbnRJZCA9PT0gYWN0aXZlRWxlbWVudElkXG4gICAgICApO1xuXG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgaWYgKHRhcmdldElzU2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLiNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGFjdGl2ZUVsZW1lbnRJZCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd0YWInOlxuICAgICAgICAgIGlmICh0YXJnZXRJc1NlYXJjaFJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy4jc2VsZWN0U2VhcmNoUmVzdWx0QnlJZChhY3RpdmVFbGVtZW50SWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnJlc3RvcmVJbnB1dFRleHRWYWx1ZVRvUHJldmlvdXNTdGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdlc2NhcGUnOlxuICAgICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICBjYXNlICdkb3duJzpcbiAgICAgICAgICB0aGlzLiNyZW1vdmVGb2N1c2VkQ2xhc3MoKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPT09XG4gICAgICAgICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPT09IC0xXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiNhZGRGb2N1c2VkQ2xhc3MoKTtcbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgaWYgKHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPVxuICAgICAgICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4IC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbW9yZUJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TW9yZUNsaWNrLmVtaXQoeyBpbnB1dFZhbHVlOiB0aGlzLnNlYXJjaFRleHQgfSk7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUucmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk7XG4gICAgfVxuICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc3VsdE1vdXNlRG93bihpZDogc3RyaW5nLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuI3NlbGVjdFNlYXJjaFJlc3VsdEJ5SWQoaWQpO1xuXG4gICAgaWYgKCF0aGlzLnNob3dBY3Rpb25zQXJlYSkge1xuICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNyZXNldFNlYXJjaCgpO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXN1bHRNb3VzZU1vdmUoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpZCAhPT0gdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4KSB7XG4gICAgICB0aGlzLiNyZW1vdmVGb2N1c2VkQ2xhc3MoKTtcbiAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IGlkO1xuICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNFbGVtZW50Rm9jdXNlZChyZWY6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlZiA9PT0gdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzW3RoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleF07XG4gIH1cblxuICAjc2VhcmNoVGV4dENoYW5nZWQoc2VhcmNoVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgaXNFbXB0eSA9XG4gICAgICAhc2VhcmNoVGV4dCB8fCAhc2VhcmNoVGV4dC50cmltKCkgfHwgc2VhcmNoVGV4dC5tYXRjaCgvXlxccyskLyk7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgLy8gRW1pdCBzZWxlY3Rpb25DaGFuZ2UgaWYgdmFsdWUgaGFzIGJlZW4gY2xlYXJlZC5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSAmJiB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgIHNlbGVjdGVkSXRlbTogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnNob3dBY3Rpb25zQXJlYSkge1xuICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNyZXNldFNlYXJjaCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSBmYWxzZTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNMb25nRW5vdWdoID0gc2VhcmNoVGV4dC5sZW5ndGggPj0gdGhpcy5zZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnM7XG4gICAgY29uc3QgaXNEaWZmZXJlbnQgPSBzZWFyY2hUZXh0ICE9PSB0aGlzLnNlYXJjaFRleHQ7XG5cbiAgICB0aGlzLnNlYXJjaFRleHQgPSBzZWFyY2hUZXh0LnRyaW0oKTtcblxuICAgIGlmIChpc0xvbmdFbm91Z2ggJiYgaXNEaWZmZXJlbnQpIHtcbiAgICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcblxuICAgICAgdGhpcy4jY3VycmVudFNlYXJjaFN1YiA9IHRoaXMuI3BlcmZvcm1TZWFyY2goKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHJlc3VsdD8uaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtICYmIHRoaXMuZGVzY3JpcHRvclByb3BlcnR5IGluIGl0ZW07XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9XG4gICAgICAgICAgICBpdGVtcz8ubWFwKChyLCBpKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRJZDogYCR7dGhpcy5yZXN1bHRzTGlzdElkfS1pdGVtLSR7aX1gLFxuICAgICAgICAgICAgICAgIGRhdGE6IHIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KSB8fCBbXTtcblxuICAgICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0c0NvdW50ID0gcmVzdWx0Py50b3RhbENvdW50IHx8IDA7XG5cbiAgICAgICAgICB0aGlzLmhpZ2hsaWdodFRleHQgPSB0aGlzLiNnZXRIaWdobGlnaHRUZXh0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgdGhpcy4jcmVtb3ZlQWN0aXZlRGVzY2VuZGFudCgpO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gLTE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIC8vIExldCB0aGUgcmVzdWx0cyBwb3B1bGF0ZSBpbiB0aGUgRE9NIGJlZm9yZSByZWNhbGN1bGF0aW5nIHBsYWNlbWVudC5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy4jYWZmaXhlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2FmZml4ZXIucmVhZmZpeCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLiNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNvcGVuRHJvcGRvd24oKTtcbiAgICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgI3BlcmZvcm1TZWFyY2goKTogT2JzZXJ2YWJsZTxTa3lBdXRvY29tcGxldGVTZWFyY2hBc3luY1Jlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5zZWFyY2hBc3luY0Rpc2FibGVkICYmIHRoaXMuc2VhcmNoQXN5bmMub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNlYXJjaEFzeW5jQXJnczogU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNBcmdzID0ge1xuICAgICAgICBkaXNwbGF5VHlwZTogJ3BvcG92ZXInLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc2VhcmNoQXN5bmMuZW1pdChzZWFyY2hBc3luY0FyZ3MpO1xuXG4gICAgICByZXR1cm4gc2VhcmNoQXN5bmNBcmdzLnJlc3VsdCB8fCBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoKHRoaXMuc2VhcmNoVGV4dCwgdGhpcy5kYXRhLCB7XG4gICAgICBjb250ZXh0OiAncG9wb3ZlcicsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiBvZih7XG4gICAgICAgIGl0ZW1zOiByZXN1bHQsXG4gICAgICAgIHRvdGFsQ291bnQ6IHJlc3VsdC5sZW5ndGgsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShyZXN1bHQpLnBpcGUoXG4gICAgICBtYXAoKGl0ZW1zKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgdG90YWxDb3VudDogaXRlbXMubGVuZ3RoLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgI2NhbmNlbEN1cnJlbnRTZWFyY2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2N1cnJlbnRTZWFyY2hTdWIpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRTZWFyY2hTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuI2N1cnJlbnRTZWFyY2hTdWIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgdG8gaGlnaGxpZ2h0IGJhc2VkIG9uIGV4YWN0IG1hdGNoZXMsIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hlcywgYW5kIG1hdGNoZXMgZm9yIGNvcnJlc3BvbmRpbmcgZGlhY3JpdGljYWwgY2hhcmFjdGVycyAoYSB3aWxsIG1hdGNoIMOgKS5cbiAgICovXG4gICNnZXRIaWdobGlnaHRUZXh0KHNlYXJjaFRleHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoVGV4dCA9IG5vcm1hbGl6ZURpYWNyaXRpY3Moc2VhcmNoVGV4dClcbiAgICAgIC50b0xvY2FsZVVwcGVyQ2FzZSgpXG4gICAgICAudHJpbSgpO1xuICAgIGlmICghbm9ybWFsaXplZFNlYXJjaFRleHQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQgbWF0Y2hlc1RvSGlnaGxpZ2h0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBuID0gdGhpcy5zZWFyY2hSZXN1bHRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlYXJjaFJlc3VsdHNbaV0uZGF0YVt0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eV1cbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnRvTG9jYWxlVXBwZXJDYXNlKCkgYXMgc3RyaW5nO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGFWYWx1ZSA9IG5vcm1hbGl6ZURpYWNyaXRpY3ModmFsdWUpO1xuXG4gICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgIGxldCBpbmRleDogbnVtYmVyO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAoaW5kZXggPSBub3JtYWxpemVkRGF0YVZhbHVlLmluZGV4T2Yobm9ybWFsaXplZFNlYXJjaFRleHQsIG9mZnNldCkpID4gLTFcbiAgICAgICkge1xuICAgICAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gdmFsdWUuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICBvZmZzZXQgPSBpbmRleCArIHNlYXJjaFRleHQubGVuZ3RoO1xuICAgICAgICBtYXRjaGVzVG9IaWdobGlnaHQgPSBtYXRjaGVzVG9IaWdobGlnaHQuY29uY2F0KG1hdGNoZWRTdHJpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbnkgZHVwbGljYXRlcyBmcm9tIHRoZSBhcnJheS5cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQobWF0Y2hlc1RvSGlnaGxpZ2h0KV07XG4gIH1cblxuICAjc2VsZWN0U2VhcmNoUmVzdWx0QnlJZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2hSZXN1bHRzLmZpbmQoKHIpID0+IHIuZWxlbWVudElkID09PSBpZCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBjb25zdCBkYXRhID0gcmVzdWx0LmRhdGE7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBkYXRhW3RoaXMuZGVzY3JpcHRvclByb3BlcnR5XTtcbiAgICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsdWUgPSBkYXRhO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgIHNlbGVjdGVkSXRlbTogZGF0YSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICNvcGVuRHJvcGRvd24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNvdmVybGF5ICYmIHRoaXMucmVzdWx0c1RlbXBsYXRlUmVmKSB7XG4gICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy4jb3ZlcmxheVNlcnZpY2UuY3JlYXRlKHtcbiAgICAgICAgZW5hYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBlbmFibGVQb2ludGVyRXZlbnRzOiB0cnVlLFxuICAgICAgICB3cmFwcGVyQ2xhc3M6IHRoaXMud3JhcHBlckNsYXNzLFxuICAgICAgfSk7XG5cbiAgICAgIG92ZXJsYXkuYXR0YWNoVGVtcGxhdGUodGhpcy5yZXN1bHRzVGVtcGxhdGVSZWYpO1xuXG4gICAgICB0aGlzLiNvdmVybGF5ID0gb3ZlcmxheTtcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy4jdXBkYXRlQXJpYU93bnMoKTtcbiAgICAgIHRoaXMuI2luaXRPdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMoKTtcbiAgICB9XG4gIH1cblxuICAjY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNldFNlYXJjaCgpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgdGhpcy4jdXBkYXRlQXJpYU93bnMoKTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNzZXRBY3RpdmVEZXNjZW5kYW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPVxuICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzW3RoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleF07XG4gICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoYWN0aXZlRWxlbWVudCAmJiB0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnNldEFjdGl2ZURlc2NlbmRhbnQoYWN0aXZlRWxlbWVudC5pZCk7XG4gICAgfVxuICB9XG5cbiAgI3JlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QWN0aXZlRGVzY2VuZGFudChudWxsKTtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlQXJpYU93bnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QXJpYU93bnModGhpcy4jb3ZlcmxheT8uaWQgfHwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgI3Jlc2V0U2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IFtdO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuaGlnaGxpZ2h0VGV4dCA9IFtdO1xuICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0c0NvdW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI3JlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB0aGlzLiNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjYWRkSW5wdXRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgb2JzZXJ2YWJsZUZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd24oZXZlbnQpO1xuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50UmVmLFxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzUmVmLFxuICAgICAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNkZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jb3ZlcmxheSkge1xuICAgICAgdGhpcy4jb3ZlcmxheVNlcnZpY2UuY2xvc2UodGhpcy4jb3ZlcmxheSk7XG4gICAgICB0aGlzLiNvdmVybGF5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNjcmVhdGVBZmZpeGVyKCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNhZmZpeGVyICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgY29uc3QgYWZmaXhlciA9IHRoaXMuI2FmZml4U2VydmljZS5jcmVhdGVBZmZpeGVyKHRoaXMucmVzdWx0c1JlZik7XG5cbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYsXG4gICAgICAgIHRoaXMucmVzdWx0c1JlZixcbiAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmNcbiAgICAgICk7XG5cbiAgICAgIGFmZml4ZXIuYWZmaXhUbyh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgIGVuYWJsZUF1dG9GaXQ6IHRydWUsXG4gICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICBwbGFjZW1lbnQ6ICdiZWxvdycsXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNhZmZpeGVyID0gYWZmaXhlcjtcbiAgICB9XG4gIH1cblxuICAjZGVzdHJveUFmZml4ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2FmZml4ZXIpIHtcbiAgICAgIHRoaXMuI2FmZml4ZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy4jYWZmaXhlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAjaW5pdE1lc3NhZ2VTdHJlYW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIpIHtcbiAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy4jbWVzc2FnZVN0cmVhbVN1YiA9IHRoaXMubWVzc2FnZVN0cmVhbS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgIGNhc2UgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUuQ2xvc2VEcm9wZG93bjpcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUuUmVwb3NpdGlvbkRyb3Bkb3duOlxuICAgICAgICAgIC8vIFNldHRpbWVvdXQgd2FpdHMgZm9yIGNoYW5nZXMgaW4gRE9NIChlLmcuLCB0b2tlbnMgYmVpbmcgcmVtb3ZlZClcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy4jYWZmaXhlcikge1xuICAgICAgICAgICAgICB0aGlzLiNhZmZpeGVyLnJlYWZmaXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gICNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk6IHZvaWQge1xuICAgIC8vIFdhaXQgZm9yIGRyb3Bkb3duIGVsZW1lbnRzIHRvIHJlbmRlci5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNvdmVybGF5KSB7XG4gICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50cyA9XG4gICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKHRoaXMuI292ZXJsYXkpO1xuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRUYWJJbmRleChlbCwgLTEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAjZ2V0QWN0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdO1xuICB9XG5cbiAgI3JlbW92ZUZvY3VzZWRDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnJlbW92ZUNTU0NsYXNzKFxuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XSxcbiAgICAgICAgJ3NreS1hdXRvY29tcGxldGUtZGVzY2VuZGFudC1mb2N1cydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgI2FkZEZvY3VzZWRDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmFkZENTU0NsYXNzKFxuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XSxcbiAgICAgICAgJ3NreS1hdXRvY29tcGxldGUtZGVzY2VuZGFudC1mb2N1cydcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiXG4gIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlXCJcbiAgcm9sZT1cImNvbWJvYm94XCJcbiAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW4gJiYgc2VhcmNoVGV4dFwiXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gIFthdHRyLmFyaWEtb3duc109XCJpc09wZW4gPyByZXN1bHRzTGlzdElkIDogbnVsbFwiXG4gIFthdHRyLmlkXT1cInJlc3VsdHNXcmFwcGVySWRcIlxuPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNyZXN1bHRzVGVtcGxhdGVSZWY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtcmVzdWx0cy1jb250YWluZXJcIlxuICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICdza3ktc2hhZG93JzogJ2RlZmF1bHQnLFxuICAgICAgJ3NreS1lbGV2YXRpb24tNCc6ICdtb2Rlcm4nXG4gICAgfVwiXG4gICAgKGtleWRvd24pPVwiaGFuZGxlS2V5ZG93bigkZXZlbnQpXCJcbiAgICAjcmVzdWx0c1JlZlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJpc1NlYXJjaGluZ0FzeW5jOyBlbHNlIHJlc3VsdENvbnRyb2xzVGVtcGxhdGVSZWZcIlxuICAgICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLXJlc3VsdHMtd2FpdGluZ1wiXG4gICAgPlxuICAgICAgPHNreS13YWl0IFtpc1dhaXRpbmddPVwidHJ1ZVwiPjwvc2t5LXdhaXQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZXN1bHRDb250cm9sc1RlbXBsYXRlUmVmPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJzZWFyY2hUZXh0ICYmICghc2hvd0FjdGlvbnNBcmVhIHx8IHNlYXJjaFJlc3VsdHMubGVuZ3RoID4gMClcIlxuICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1yZXN1bHRzXCJcbiAgICByb2xlPVwibGlzdGJveFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbYXR0ci5pZF09XCJyZXN1bHRzTGlzdElkXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlc3VsdCBvZiBzZWFyY2hSZXN1bHRzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIXNlYXJjaFJlc3VsdHNMaW1pdCB8fCBpIDwgc2VhcmNoUmVzdWx0c0xpbWl0XCJcbiAgICAgICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLXJlc3VsdFwiXG4gICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzRWxlbWVudEZvY3VzZWQoc2VhcmNoUmVzdWx0RWwpXCJcbiAgICAgICAgW2F0dHIuZGF0YS1kZXNjcmlwdG9yLXZhbHVlXT1cInJlc3VsdC5kYXRhW2Rlc2NyaXB0b3JQcm9wZXJ0eV1cIlxuICAgICAgICBbYXR0ci5pZF09XCJyZXN1bHQuZWxlbWVudElkXCJcbiAgICAgICAgW3NreUhpZ2hsaWdodF09XCJoaWdobGlnaHRUZXh0XCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc3VsdE1vdXNlRG93bihyZXN1bHQuZWxlbWVudElkLCAkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlbW92ZSk9XCJvblJlc3VsdE1vdXNlTW92ZShpKVwiXG4gICAgICAgICNzZWFyY2hSZXN1bHRFbFxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIHNlYXJjaFJlc3VsdFRlbXBsYXRlIHx8IGRlZmF1bHRTZWFyY2hSZXN1bHRUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgaXRlbTogcmVzdWx0LmRhdGEgfVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInNlYXJjaFJlc3VsdHMubGVuZ3RoID09PSAwXCJcbiAgICAgIGNsYXNzPVwic2t5LWRlZW1waGFzaXplZCBza3ktcGFkZGluZy1zcXVpc2gtZGVmYXVsdFwiXG4gICAgPlxuICAgICAge3tcbiAgICAgICAgbm9SZXN1bHRzRm91bmRUZXh0IHx8XG4gICAgICAgICAgKCdza3l1eF9hdXRvY29tcGxldGVfbm9fcmVzdWx0cycgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInNob3dBY3Rpb25zQXJlYVwiIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1hY3Rpb25zXCI+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJlbmFibGVTaG93TW9yZSAmJiAoIXNlYXJjaFRleHQgfHwgc2VhcmNoUmVzdWx0cy5sZW5ndGggPiAwKVwiXG4gICAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtYWN0aW9uIHNreS1hdXRvY29tcGxldGUtYWN0aW9uLW1vcmUgc2t5LWJ0biBza3ktYnRuLWxpbmtcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAobW91c2Vkb3duKT1cIm1vcmVCdXR0b25DbGlja2VkKClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgc2VhcmNoQXN5bmNcbiAgICAgICAgICAgIHwgc2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNEaXNhYmxlZDogc2VhcmNoQXN5bmNEaXNhYmxlZFxuICAgICAgICAgICkgJiZcbiAgICAgICAgICBzZWFyY2hSZXN1bHRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICFzZWFyY2hUZXh0XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdza3l1eF9hdXRvY29tcGxldGVfc2hvd19hbGwnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAoc2VhcmNoQXN5bmNcbiAgICAgICAgICAgIHwgc2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNEaXNhYmxlZDogc2VhcmNoQXN5bmNEaXNhYmxlZCkgJiZcbiAgICAgICAgICAhc2VhcmNoVGV4dFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICB7e1xuICAgICAgICAgICdza3l1eF9hdXRvY29tcGxldGVfc2hvd19hbGxfY291bnQnXG4gICAgICAgICAgICB8IHNreUxpYlJlc291cmNlczogKGRhdGEubGVuZ3RoIHwgc2t5TnVtZXJpYzogeyB0cnVuY2F0ZTogZmFsc2UgfSlcbiAgICAgICAgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaFRleHRcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAnc2t5dXhfYXV0b2NvbXBsZXRlX3Nob3dfbWF0Y2hlc19jb3VudCdcbiAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgIDogKHNlYXJjaFJlc3VsdHNDb3VudCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICA/IGRhdGEubGVuZ3RoXG4gICAgICAgICAgICAgICAgICA6IChzZWFyY2hSZXN1bHRzQ291bnQgfCBza3lOdW1lcmljOiB7IHRydW5jYXRlOiBmYWxzZSB9KSlcbiAgICAgICAgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic2VhcmNoVGV4dCAmJiBzZWFyY2hSZXN1bHRzLmxlbmd0aCA9PT0gMFwiXG4gICAgICBjbGFzcz1cInNreS1mb250LWRlZW1waGFzaXplZCBza3ktYXV0b2NvbXBsZXRlLWFjdGlvbnMtbm8tcmVzdWx0c1wiXG4gICAgPlxuICAgICAge3tcbiAgICAgICAgbm9SZXN1bHRzRm91bmRUZXh0IHx8XG4gICAgICAgICAgKCdza3l1eF9hdXRvY29tcGxldGVfbm9fcmVzdWx0cycgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICB9fVxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwic2hvd0FkZEJ1dHRvblwiXG4gICAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtYWN0aW9uIHNreS1hdXRvY29tcGxldGUtYWN0aW9uLWFkZCBza3ktYnRuIHNreS1idG4tbGlua1wiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbY2xhc3MuZm9jdXNlZF09XCJpc0VsZW1lbnRGb2N1c2VkKGFkZEJ1dHRvbkVsKVwiXG4gICAgICAobW91c2Vkb3duKT1cImFkZEJ1dHRvbkNsaWNrZWQoKVwiXG4gICAgICAjYWRkQnV0dG9uRWxcbiAgICA+XG4gICAgICA8c2t5LWljb24gKnNreVRoZW1lSWY9XCInbW9kZXJuJ1wiIGljb249XCJhZGRcIiBpY29uVHlwZT1cInNreXV4XCI+PC9za3ktaWNvbj5cbiAgICAgIDxza3ktaWNvbiAqc2t5VGhlbWVJZj1cIidkZWZhdWx0J1wiIGljb249XCJwbHVzLWNpcmNsZVwiPjwvc2t5LWljb24+XG4gICAgICB7eyAnc2t5dXhfYXV0b2NvbXBsZXRlX2FkZCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgI2RlZmF1bHRTZWFyY2hSZXN1bHRUZW1wbGF0ZT5cbiAge3sgaXRlbVtkZXNjcmlwdG9yUHJvcGVydHldIH19XG48L25nLXRlbXBsYXRlPlxuIl19
|