@dsivd/prestations-ng 16.4.8-beta.1 → 16.4.8-beta.3
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/CHANGELOG.md +17 -0
- package/dsivd-prestations-ng-v16.4.8-beta.3.tgz +0 -0
- package/esm2020/foehn-address/foehn-input-address.component.mjs +5 -6
- package/esm2020/foehn-autocomplete/foehn-autocomplete.component.mjs +11 -2
- package/esm2020/foehn-boolean/foehn-boolean-radio.component.mjs +3 -3
- package/esm2020/foehn-checkables/foehn-radio.component.mjs +3 -3
- package/esm2020/foehn-menu-prestation/foehn-list-summary/foehn-list-summary.component.mjs +5 -6
- package/esm2020/foehn-table/foehn-table.component.mjs +7 -7
- package/fesm2015/dsivd-prestations-ng.mjs +28 -21
- package/fesm2015/dsivd-prestations-ng.mjs.map +1 -1
- package/fesm2020/dsivd-prestations-ng.mjs +28 -21
- package/fesm2020/dsivd-prestations-ng.mjs.map +1 -1
- package/foehn-address/foehn-input-address.component.d.ts +2 -3
- package/foehn-autocomplete/foehn-autocomplete.component.d.ts +2 -0
- package/foehn-menu-prestation/foehn-list-summary/foehn-list-summary.component.d.ts +2 -1
- package/foehn-table/foehn-table.component.d.ts +3 -2
- package/package.json +1 -1
- package/dsivd-prestations-ng-v16.4.8-beta.1.tgz +0 -0
|
@@ -66,6 +66,8 @@ export class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
|
|
|
66
66
|
this.SUGGESTION_SELECTED_CLASS = 'suggestion-selected';
|
|
67
67
|
this.EXCLUDE_HTML_TAGS_REGEX = '((?=[^>]*<)|(?![^<]*>))';
|
|
68
68
|
this.SUGGESTION_CUSTOM_ATTRIBUTE_LABEL_VALUE = 'label-value';
|
|
69
|
+
// Inspired from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
|
|
70
|
+
this.REGEX_TO_ESCAPE_REGEX = /[.*+?^${}()|[\]\\]/g;
|
|
69
71
|
this.userSearchInputSubject = new Subject();
|
|
70
72
|
this.filterSubcription = this.filterSubject
|
|
71
73
|
.pipe(debounceTime(200))
|
|
@@ -289,7 +291,11 @@ export class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
|
|
|
289
291
|
getLabelWithEmphasis(elem) {
|
|
290
292
|
let label = this.getSuggestionLabel(elem);
|
|
291
293
|
if (!this.isEmpty(this.searchValue)) {
|
|
292
|
-
const
|
|
294
|
+
const hasRegexpCharsToEscape = RegExp(this.REGEX_TO_ESCAPE_REGEX.source).test(this.searchValue);
|
|
295
|
+
const regexSearchValue = hasRegexpCharsToEscape
|
|
296
|
+
? this.escapeRegexp(normalizeSearch(this.searchValue, this.caseSensitiveSearch))
|
|
297
|
+
: normalizeSearch(this.searchValue, this.caseSensitiveSearch);
|
|
298
|
+
const regexStr = `${regexSearchValue}${this.EXCLUDE_HTML_TAGS_REGEX}`;
|
|
293
299
|
const startIndex = normalizeSearch(label, this.caseSensitiveSearch).search(regexStr);
|
|
294
300
|
if (startIndex !== -1) {
|
|
295
301
|
label = `${startIndex > 0 ? label.substring(0, startIndex) : ''}<b>${label.substring(startIndex, startIndex + this.searchValue.length)}</b>${label.length > startIndex + this.searchValue.length
|
|
@@ -617,6 +623,9 @@ export class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
|
|
|
617
623
|
});
|
|
618
624
|
});
|
|
619
625
|
}
|
|
626
|
+
escapeRegexp(value) {
|
|
627
|
+
return value.replace(this.REGEX_TO_ESCAPE_REGEX, '\\$&');
|
|
628
|
+
}
|
|
620
629
|
}
|
|
621
630
|
FoehnAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FoehnAutocompleteComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
622
631
|
FoehnAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: { searchValueMinCharsCount: "searchValueMinCharsCount", allowCustomValue: "allowCustomValue", isSuggestionListDynamic: "isSuggestionListDynamic", customValueModelGenerator: "customValueModelGenerator", itemHeightInSuggestionListInPx: "itemHeightInSuggestionListInPx", elementSuggestionLabel: "elementSuggestionLabel", caseSensitiveSearch: "caseSensitiveSearch", disabled: "disabled" }, outputs: { userSearchInput: "userSearchInput" }, providers: [
|
|
@@ -663,4 +672,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
663
672
|
}], disabled: [{
|
|
664
673
|
type: Input
|
|
665
674
|
}] } });
|
|
666
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCw0RUFBNEU7QUFDNUUsT0FBTyxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUtMLE1BQU0sRUFHTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGVBQWUsRUFDZixhQUFhLEVBRWIsRUFBRSxFQUNGLE9BQU8sRUFFVixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDSCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixLQUFLLEVBQ0wsR0FBRyxFQUNOLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBRTNFLCtDQUErQztBQUMvQyxTQUFTLGFBQWEsQ0FBQyxLQUFhO0lBQ2hDLHlGQUF5RjtJQUN6RixJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7UUFDdkMsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxpQkFBaUI7SUFDakIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEtB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QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQzs0QkFDekQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7NkZBTUQscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHdCQUF3QjtnQkFJbkMsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQjtnQkFJNUIsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJN0Msd0JBQXdCO3NCQUR2QixLQUFLO2dCQVNOLGdCQUFnQjtzQkFEZixLQUFLO2dCQU9OLHVCQUF1QjtzQkFEdEIsS0FBSztnQkFXTix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBSU4sOEJBQThCO3NCQUQ3QixLQUFLO2dCQVFOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFJTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBT04sZUFBZTtzQkFEZCxNQUFNO2dCQXFFSCxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vLyBUaGlzIGNvbXBvbmVudCB1c2VzIHNvbWUgRVM3IGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBwb2x5ZmlsbGVkIGJ5IEFuZ3VsYXIuXG5pbXBvcnQgJ2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcyc7XG5cbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2UsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEJlaGF2aW9yU3ViamVjdCxcbiAgICBjb21iaW5lTGF0ZXN0LFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgU3ViamVjdCxcbiAgICBTdWJzY3JpcHRpb25cbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGRlYm91bmNlVGltZSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBmaWx0ZXIsXG4gICAgZmlyc3QsXG4gICAgbWFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRm9laG5DaGVja2FibGVHcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2ZvZWhuLWNoZWNrYWJsZXMvZm9laG4tY2hlY2thYmxlLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb2VobklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQuY29tcG9uZW50JztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIG5vcm1hbGl6ZVV0ZjgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gU29tZSBicm93c2VycyBzdWNoIGFzIElFMTEgZG9uJ3Qgc3VwcG9ydCB0aGUgZmVhdHVyZS4gQWRkIHRoZSBwb2x5ZmlsbCBpZiB5b3Ugd2FudCBpdC5cbiAgICBpZiAodHlwZW9mIHZhbHVlLm5vcm1hbGl6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFjY2VudHNcbiAgICByZXR1cm4gdmFsdWUubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBub3JtYWxpemVTZWFyY2godmFsdWU6IHN0cmluZywgY2FzZVNlbnNpdGl2ZVNlYXJjaDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGNhc2VTZW5zaXRpdmVTZWFyY2gpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVV0ZjgodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbm9ybWFsaXplVXRmOCh2YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIHN0cmlwSHRtbFRhZ3ModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyg8KFtePl0rKT4pL2dpLCAnJyk7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9laG4tYXV0b2NvbXBsZXRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb2Vobi1hdXRvY29tcGxldGUuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGb2VobklucHV0Q29tcG9uZW50LFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9laG5BdXRvY29tcGxldGVDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9laG5BdXRvY29tcGxldGVDb21wb25lbnRcbiAgICBleHRlbmRzIEZvZWhuQ2hlY2thYmxlR3JvdXBDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KVxuICAgIHZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgQFZpZXdDaGlsZCgnc3VnZ2VzdGlvbnNMaXN0JylcbiAgICBzdWdnZXN0aW9uc0xpc3Q6IGFueTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VudHJ5Q29tcG9uZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBpbnB1dEVsZW1lbnQ6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEFsbG93IHRvIHByb3ZpZGUgY3VzdG9tIHZhbHVlcyB0byB0aGUgYXV0b2NvbXBsZXRlLlxuICAgICAqXG4gICAgICogQSBjdXN0b20gdmFsdWUgaXMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBpbiB0aGUgYGVsZW1lbnRzYCBzZXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd0N1c3RvbVZhbHVlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgaWYgc3VnZ2VzdGlvbiBlbGVtZW50cyBsaXN0IGlzIGJlaW5nIHJldHJpZXZlZCBkeW5hbWljYWxseSB3aGlsZSB1c2VyIGlucHV0cyBpbiBzZWFyY2ggZmllbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1N1Z2dlc3Rpb25MaXN0RHluYW1pYyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQWxsb3cgdG8gcHJvdmlkZSBhIGdlbmVyYXRvciB0byBjcmVhdGUgdGhlIG1vZGVsIHdpdGggY3VzdG9tIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHR5cGUgb2YgdGhlIG1vZGVsIGlzIGFuIG9iamVjdCBhbmQgbm90IGp1c3RcbiAgICAgKiBhIHN0cmluZy4gVXNlIHRoaXMgaXMgYGFsbG93Q3VzdG9tVmFsdWVgIGlzIHRydWUgYW5kIGBlbGVtZW50VmFsdWVgXG4gICAgICogaXMgYSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGN1c3RvbVZhbHVlTW9kZWxHZW5lcmF0b3I6IChpbnB1dDogc3RyaW5nKSA9PiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1IZWlnaHRJblN1Z2dlc3Rpb25MaXN0SW5QeCA9IDQwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN1Z2dlc3Rpb24gbGFiZWwgdXNlZCBpbiB0aGUgZGlzcGxheWVkIGxpc3QuIENhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uXG4gICAgICogZmFsbGJhY2sgb24gJ2VsZW1lbnRMYWJlbCdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGVsZW1lbnRTdWdnZXN0aW9uTGFiZWw6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgY2FzZVNlbnNpdGl2ZVNlYXJjaCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIGNoYW5nZXMgc2VhcmNoIGlucHV0IHZhbHVlXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgdXNlclNlYXJjaElucHV0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBpbnB1dFZhbHVlOiBzdHJpbmc7XG4gICAgc2VhcmNoVmFsdWU6IHN0cmluZztcbiAgICBpbnB1dEhhc0ZvY3VzOiBib29sZWFuO1xuICAgIGhpZGVTdWdnZXN0aW9ucyA9IHRydWU7XG4gICAgY3VycmVudEJsdXJUaW1lcjogYW55O1xuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICBWSUVXX1BPUlRfSEVJR0hUOiBudW1iZXI7XG5cbiAgICBkaXNwbGF5ZWRFbGVtZW50czogYW55W107XG4gICAgbm90aWZpY2F0aW9uTWVzc2FnZVVwZGF0ZWQ6IGJvb2xlYW47XG5cbiAgICBkaXNhYmxlZFN1YmplY3Q6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICAgIHByaXZhdGUgcGVuZGluZ0Rpc2FibGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgZWxlbWVudHNMb2FkZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIGN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSAtMTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE5CX0lURU1TX1ZJU0lCTEUgPSA1O1xuXG4gICAgcHJpdmF0ZSBmaWx0ZXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIGZpbHRlclN1YmNyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBsaXN0SGFzRm9jdXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBhY3RpdmVEZXNjZW5kYW50SWQ6IHN0cmluZztcblxuICAgIHByaXZhdGUgb25Jbml0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBtb2RlbENoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgZWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTUyA9ICdzdWdnZXN0aW9uLXNlbGVjdGVkJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IEVYQ0xVREVfSFRNTF9UQUdTX1JFR0VYID0gJygoPz1bXj5dKjwpfCg/IVtePF0qPikpJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IFNVR0dFU1RJT05fQ1VTVE9NX0FUVFJJQlVURV9MQUJFTF9WQUxVRSA9ICdsYWJlbC12YWx1ZSc7XG5cbiAgICBwcml2YXRlIHVzZXJTZWFyY2hJbnB1dFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgdXNlclNlYXJjaElucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgIHByaXZhdGUgc2VsZWN0VmFsdWVUb0Rpc3BsYXlPbkVsZW1lbnRzTG9hZGVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcih6b25lOiBOZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoem9uZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyU3ViY3JpcHRpb24gPSB0aGlzLmZpbHRlclN1YmplY3RcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmZpbHRlckVsZW1lbnRzLmJpbmQodGhpcykpO1xuXG4gICAgICAgIC8vIE5lZWQgdG8gc3Vic2NyaWJlIG9uIEV2ZW50RW1pdHRlciAnZWxlbWVudHNMb2FkZWQnIG90aGVyd2lzZSBlbGVtZW50cyB3aXRoIEhUTUwgZG9lcyBub3Qgd29yay4uLlxuICAgICAgICB0aGlzLmVsZW1lbnRzTG9hZGVkU3Vic2NyaXB0aW9uID0gdGhpcy5lbGVtZW50c0xvYWRlZFxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShtYXAoZWxlbXMgPT4gISFlbGVtcykpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGxvYWRlZCA9PiB0aGlzLmVsZW1lbnRzTG9hZGVkU3ViamVjdC5uZXh0KGxvYWRlZCkpO1xuXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTdWJqZWN0ID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdEaXNhYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCksXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzTG9hZGVkU3ViamVjdC5hc09ic2VydmFibGUoKVxuICAgICAgICBdKS5waXBlKG1hcCgoW2Rpc2FibGVkXSkgPT4gKGRpc2FibGVkID8gJ2Rpc2FibGVkJyA6IG51bGwpKSk7XG5cbiAgICAgICAgdGhpcy5WSUVXX1BPUlRfSEVJR0hUID1cbiAgICAgICAgICAgIHRoaXMuaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4ICogdGhpcy5OQl9JVEVNU19WSVNJQkxFO1xuICAgIH1cblxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0Rpc2FibGVkU3ViamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnBlbmRpbmdEaXNhYmxlZFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgICAgICB0aGlzLmdldEVsZW1lbnRzKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERpc3BsYXllZEVsZW1lbnRzKHRoaXMuZWxlbWVudHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnQgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gYFNhaXNpc3NleiBhdSBtb2lucyAke1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50XG4gICAgICAgICAgICB9IGNhcmFjdMOocmUke3RoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID4gMSA/ICdzJyA6ICcnfWA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uSW5pdFN1YnNjcmlwdGlvbiA9IHRoaXMub25Jbml0U3ViamVjdFxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBIYWNrIHRvIHJlZnJlc2ggdGhlIGRhdGEgb25jZSB0aGUgbGlzdCBpcyBkb3dubG9hZGVkLlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbCh0aGlzLm1vZGVsXyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBXaGVuIHRoZSBtb2RlbCBjaGFuZ2VzLCBzZWxlY3QgdGhlIHJpZ2h0IHZhbHVlIHRvIGRpc3BsYXkuXG4gICAgICAgIHRoaXMubWF0Y2hWYWx1ZU9uTW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICB0aGlzLnVzZXJTZWFyY2hJbnB1dFN1YnNjcmlwdGlvbiA9IHRoaXMudXNlclNlYXJjaElucHV0U3ViamVjdFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gdHJpZ2dlciBzZWFyY2hlZCBpbnB1dCBpZiBpdCBoYXMgbm90IGNoYW5nZWRcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCB3ZSBvbmx5IGNhdGNoIHRoZSBsYXRlc3Qgb2YgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAvLyBxdWljayB1cGRhdGVzLCBhbmQgdG8gbWFrZSBzdXJlIHRoZSB1c2VySW5wdXQgaXMgZmlyZWQgd2hlblxuICAgICAgICAgICAgICAgIC8vIHRoZSBjb21wb25lbnQgaXMgZG9uZSB1cGRhdGluZy5cbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlYXJjaElucHV0LmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJTdWJjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5vbkluaXRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudXNlclNlYXJjaElucHV0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5T25FbGVtZW50c0xvYWRlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICAvLyBIYW5kbGUgY2hhbmdlIG9uIHRoZSBkeW5hbWljIGVsZW1lbnRzIGlucHV0LlxuICAgICAgICB0aGlzLm9uRHluYW1pY0VsZW1lbnRzQ2hhbmdlKGNoYW5nZXMuZWxlbWVudHMpO1xuICAgIH1cblxuICAgIG9uSW5wdXRGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgdGhpcy5pbnB1dEhhc0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMuaXNFbXB0eSh0aGlzLnNlYXJjaFZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID09PSAwKSB8fFxuICAgICAgICAgICAgKCF0aGlzLmlzRW1wdHkodGhpcy5zZWFyY2hWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlTWluQ2hhcnNDb3VudCA8PSB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jbGVhck9uQmx1clRpbWVvdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGlkZVN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRGb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgSUUxMSB0aGF0IGxvc2VzIGZvY3VzIG9uIGlucHV0IHdoZW4gc2Nyb2xsYmFyIGlzIGNsaWNrZWRcbiAgICAvLyAtLT4gcHV0IGJhY2sgZm9jdXMgb24gaW5wdXQgYW5kIGNhbmNlbCBzdWdnZXN0aW9ucyBoaWRpbmcgdGltZXJcbiAgICBzZXRGb2N1c09uSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5jbGVhck9uQmx1clRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBvbklucHV0Qmx1cigpOiB2b2lkIHtcbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJlZm9yZSBvbkNsaWNrU3VnZ2VzdGlvbi4gU2V0dGluZyBpbnB1dEhhc0ZvY3VzIHRvIGZhbHNlIG1ha2VzIHN1Z2dlc3Rpb25zIGRpc2FwcGVhcmVkXG4gICAgICAgIC8vIGFuZCBvbkNsaWNrU3VnZ2VzdGlvbiBpcyBuZXZlciBjYWxsZWQuIFNldHRpbmcgYSB0aW1lb3V0IGhlcmUgYXZvaWQgdGhpcyBwcm9ibGVtLlxuICAgICAgICB0aGlzLmN1cnJlbnRCbHVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIERvbid0IGNsb3NlIHRoZSBsaXN0IGlmIHRoZSBsaXN0IGhhcyB0aGUgZm9jdXMuIFRoaXMgaXMgZG9uZSB0byBhbGxvdyBWb2ljZU92ZXIgdXNlcnMgb24gaU9TIHRvXG4gICAgICAgICAgICAvLyBzZWxlY3QgYW4gb3B0aW9uIHdpdGggdGhlaXIgZmluZ2VyLiBTYW1lIGlmIGZvY3VzIGlzIHNldCBvbiBsaXN0IHNjcm9sbCBiYXJcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5saXN0SGFzRm9jdXMgJiZcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsYXNzTmFtZSAhPT1cbiAgICAgICAgICAgICAgICAgICAgJ2Zvcm0tZ3JvdXAgYXV0b2NvbXBsZXRlLWZvcm0tZ3JvdXAnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0SGFzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGtleUV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIFRoZSBpbnB1dCBtaWdodCBub3QgYmUgbWFya2VkIGFzIGZvY3VzZWQgaW4gY2FzZSB0aGUgdXNlciBzZWxlY3RzIGEgdmFsdWUgZnJvbSB0aGUgbGlzdC5cbiAgICAgICAgdGhpcy5pbnB1dEhhc0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcHJvcGFnYXRlID0gdGhpcy5vbktleURvd25Jbm5lcihrZXlFdmVudCk7XG4gICAgICAgIGlmIChwcm9wYWdhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyU3ViamVjdC5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZTtcbiAgICB9XG5cbiAgICBvbktleURvd25Jbm5lcihrZXlFdmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQga2V5RXZlbnQuY29kZSwgYW5kIGhhcyBkaWZmZXJlbnQgdmFsdWVzXG4gICAgICAgIC8vIGluIGtleUV2ZW50LmtleSAoRG93biBpbnN0ZWFkIG9mIEFycm93RG93biBmb3IgaW5zdGFuY2UpLCBoZW5jZSB0aGUgbXVsdGktc3VwcG9ydC5cbiAgICAgICAgY29uc3QgaWUxMUNvbXBhdGlibGVDb2RlID0ga2V5RXZlbnQuY29kZSB8fCBrZXlFdmVudC5rZXk7XG4gICAgICAgIHN3aXRjaCAoaWUxMUNvbXBhdGlibGVDb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdEb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN1Z2dlc3Rpb25zRGlzcGxheWVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dEVsZW1lbnQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdVcCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE5leHRFbGVtZW50KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ1NwYWNlYmFyJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRTZWxlY3RlZEVsZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdldFNlbGVjdGVkRWxlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRGaXJzdFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBiZWZvcmUgZm9ybSBzdWJtaXQsIGNhbGxzIGNoZWNrQW5kU2V0SW5wdXRWYWx1ZSBiZWNhdXNlIGZvY3Vzb3V0IGlzIGNhbGxlZCB0b28gbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKG5ldyB2YWx1ZSBpcyBhbHJlYWR5IGxvc3QpLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGF1dG9jb21wbGV0ZSB3aXRob3V0IG5lZWQgdG8gc2VsZWN0IGl0IG1hbnVhbGx5XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRTZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICBjYXNlICdSaWdodCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNEaXNwbGF5ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkxpc3RPcHRpb25Nb3VzZURvd24oZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBTYWZhcmkgdHJpZ2dlcnMgZm9jdXNPdXQgYmVmb3JlIGNsaWNrLCBidXQgaWYgeW91XG4gICAgICAgIC8vIHByZXZlbnREZWZhdWx0IG9uIG1vdXNlRG93biwgeW91IGNhbiBzdG9wIHRoYXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAgIC8vIElmIHRoaXMgaXMgcmVtb3ZlZCwgY2xpY2tpbmcgb24gYW4gb3B0aW9uIGluIFNhZmFyaSB3aWxsIHRyaWdnZXJcbiAgICAgICAgLy8gYGhhbmRsZU9wdGlvbkJsdXJgLCB3aGljaCBjbG9zZXMgdGhlIG1lbnUsIGFuZCB0aGUgY2xpY2sgd2lsbFxuICAgICAgICAvLyB0cmlnZ2VyIG9uIHRoZSBlbGVtZW50IHVuZGVybmVhdGggaW5zdGVhZC5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkxpc3RPcHRpb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0SGFzRm9jdXMgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uTGlzdE9wdGlvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEhhc0ZvY3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZmlsdGVyRWxlbWVudHMoaGlkZVN1Z2dlc3Rpb25zOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IHRoaXMuaW5wdXRWYWx1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNFbXB0eSh0aGlzLnNlYXJjaFZhbHVlKSB8fFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGggPCB0aGlzLnNlYXJjaFZhbHVlTWluQ2hhcnNDb3VudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlTWluQ2hhcnNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzcGxheWVkRWxlbWVudHModGhpcy5lbGVtZW50cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VnZ2VzdGlvbnNEaXNwbGF5ZWQodHJ1ZSwgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTdWdnZXN0aW9uc0Rpc3BsYXllZChcbiAgICAgICAgICAgICAgICBoaWRlU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5maWx0ZXIoKGU6IGFueSkgPT4gdGhpcy5tYXRjaFJlc3VsdChlKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTdWdnZXN0aW9uTGFiZWwoZWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRTdWdnZXN0aW9uTGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbGVtZW50U3VnZ2VzdGlvbkxhYmVsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmVzdGVkUHJvcGVydHkoZWxlbWVudCwgdGhpcy5lbGVtZW50U3VnZ2VzdGlvbkxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50U3VnZ2VzdGlvbkxhYmVsKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGdldExhYmVsV2l0aEVtcGhhc2lzKGVsZW06IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvbkxhYmVsKGVsZW0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0VtcHR5KHRoaXMuc2VhcmNoVmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCByZWdleFN0ciA9IGAke25vcm1hbGl6ZVNlYXJjaChcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZVNlYXJjaFxuICAgICAgICAgICAgKX0ke3RoaXMuRVhDTFVERV9IVE1MX1RBR1NfUkVHRVh9YDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBub3JtYWxpemVTZWFyY2goXG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlU2VhcmNoXG4gICAgICAgICAgICApLnNlYXJjaChyZWdleFN0cik7XG4gICAgICAgICAgICBpZiAoc3RhcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsYWJlbCA9IGAke1xuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID4gMCA/IGxhYmVsLnN1YnN0cmluZygwLCBzdGFydEluZGV4KSA6ICcnXG4gICAgICAgICAgICAgICAgfTxiPiR7bGFiZWwuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ICsgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICApfTwvYj4ke1xuICAgICAgICAgICAgICAgICAgICBsYWJlbC5sZW5ndGggPiBzdGFydEluZGV4ICsgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbGFiZWwuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCArIHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG5cbiAgICBvbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5vbkNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cygpO1xuICAgIH1cblxuICAgIGRpc3BsYXlDbGVhckJ1dHRvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIG9mKCEhdGhpcy5pbnB1dFZhbHVlICYmICF0aGlzLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBvbkNsaWNrU3VnZ2VzdGlvbihlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZ2V0TGFiZWwoZWxlbWVudCkpO1xuICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuXG4gICAgICAgIC8vIEZvcmNlIHRoZSBmb2N1cyBvbiB0aGUgaW5wdXQgdG8gZW5zdXJlIHRoYXQgVm9pY2VPdmVyIGRvZXNuJ3Qgc2V0IHRoZSBmb2N1cyBvbiBhbm90aGVyIGZpZWxkIG9uIHRoZSBwYWdlLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbklucHV0KCk7XG4gICAgICAgICAgICAvLyBUaGUgaW5wdXQgc2hvdWxkbid0IGJlIG1hcmtlZCBhcyBmb2N1c2VkIGFzIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgbGlzdC5cbiAgICAgICAgICAgIHRoaXMuaW5wdXRIYXNGb2N1cyA9IGZhbHNlO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlMaXN0Ym94KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dEhhc0ZvY3VzICYmXG4gICAgICAgICAgICAhdGhpcy5oaWRlU3VnZ2VzdGlvbnMgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkRWxlbWVudHMgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkRWxlbWVudHMubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKCFpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1Zpc2libGU7XG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlRGVzY2VuZGFudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3VsZERpc3BsYXlMaXN0Ym94KCkgJiYgdGhpcy5hY3RpdmVEZXNjZW5kYW50SWRcbiAgICAgICAgICAgID8gdGhpcy5hY3RpdmVEZXNjZW5kYW50SWRcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBzaG93U3VnZ2VzdGlvbnNXaGVuSW5wdXRIYXNGb2N1c0FuZElzRW1wdHkodmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5pbnB1dEhhc0ZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclNlYXJjaElucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHluYW1pY0VsZW1lbnRzQ2hhbmdlKGNoYW5nZTogU2ltcGxlQ2hhbmdlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1N1Z2dlc3Rpb25MaXN0RHluYW1pYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UgJiYgIWNoYW5nZS5maXJzdENoYW5nZSAmJiAhIXRoaXMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN1Z2dlc3Rpb25zRGlzcGxheWVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZTogYW55KSA9PiB0aGlzLm1hdGNoUmVzdWx0KGUpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhck9uQmx1clRpbWVvdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRCbHVyVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmN1cnJlbnRCbHVyVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Qmx1clRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWRFbGVtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5nZXRTZWxlY3RlZEVsZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbnB1dFZhbHVlKFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBoaWRlU3VnZ2VzdGlvbnM6IGJvb2xlYW4gPSB0cnVlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmIChoaWRlU3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICBuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMgPSBoaWRlU3VnZ2VzdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyaWZpZXMgaWYgdmFsdWUgaW4gaW5wdXQgbWF0Y2hlcyBhIHZhbHVlIGZyb20gc3VnZ2VzdGlvbnMuIElmIG5vdCwgZW1wdHkgdGhlIGlucHV0IGlmIHRoZSBjdXN0b20gdmFsdWVcbiAgICAgKiBvcHRpb24gaXMgbm90IHNldC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhdGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0VsZW1lbnQgPSB0aGlzLmVsZW1lbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYTogYW55KSA9PiB0aGlzLmdldExhYmVsKGEpID09PSB0aGlzLmlucHV0VmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGluZ0VsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlKG1hdGNoaW5nRWxlbWVudFswXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW51YWxseVVwZGF0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93Q3VzdG9tVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdNb2RlbCA9IHRoaXMuZ2V0Q3VzdG9tVmFsdWUodGhpcy5pbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hbnVhbGx5VXBkYXRlVmFsdWUobmV3TW9kZWwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFudWFsbHlVcGRhdGVWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdWdnZXN0aW9uc0Rpc3BsYXllZChcbiAgICAgICAgaGlkZVN1Z2dlc3Rpb25zOiBib29sZWFuLFxuICAgICAgICBkaXNwbGF5ZWRFbGVtZW50czogYW55W11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXREaXNwbGF5ZWRFbGVtZW50cyhkaXNwbGF5ZWRFbGVtZW50cyk7XG4gICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gaGlkZVN1Z2dlc3Rpb25zO1xuICAgICAgICB0aGlzLm5vdGlmeVNjcmVlblJlYWRlclVzZXJzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREaXNwbGF5ZWRFbGVtZW50cyhmaWx0ZXJlZEVsZW1lbnRzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50SWQgPSBudWxsO1xuICAgICAgICB0aGlzLmRpc3BsYXllZEVsZW1lbnRzID0gZmlsdGVyZWRFbGVtZW50cztcblxuICAgICAgICB0aGlzLnJlc2l6ZURpc3BsYXlWaWV3UG9ydChmaWx0ZXJlZEVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2l6ZURpc3BsYXlWaWV3UG9ydChmaWx0ZXJlZEVsZW1lbnRzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhZmlsdGVyZWRFbGVtZW50cykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcmVkRWxlbWVudHMubGVuZ3RoIDwgdGhpcy5OQl9JVEVNU19WSVNJQkxFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5WSUVXX1BPUlRfSEVJR0hUID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtSGVpZ2h0SW5TdWdnZXN0aW9uTGlzdEluUHggKlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoISF0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTUFYX0hFSUdIVCA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTkJfSVRFTVNfVklTSUJMRSAqIHRoaXMuaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLlZJRVdfUE9SVF9IRUlHSFQgPCBNQVhfSEVJR0hUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVklFV19QT1JUX0hFSUdIVCA9IE1BWF9IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZEVsZW1lbnQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U3VnZ2VzdGlvbkxpc3QoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXhTdHIgaW4gc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaGFzT3duUHJvcGVydHkoaW5kZXhTdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzdWdnZXN0aW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGFzc05hbWUuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TVUdHRVNUSU9OX0NVU1RPTV9BVFRSSUJVVEVfTEFCRUxfVkFMVUVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0TmV4dEVsZW1lbnQoZG93bjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc0Rpc3BsYXllZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U3VnZ2VzdGlvbkxpc3QoKTtcbiAgICAgICAgICAgIGxldCBuZXdJdGVtU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGRvd24gPyAxIDogLTE7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXhTdHIgaW4gc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaGFzT3duUHJvcGVydHkoaW5kZXhTdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzdWdnZXN0aW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXg6IG51bWJlciA9IGluZGV4ICsgc3RlcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudEl0ZW1TZWxlY3RlZCA9IGl0ZW0uY2xhc3NOYW1lLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTU1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEl0ZW1TZWxlY3RlZCAmJiBuZXh0SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld0l0ZW1TZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SW5kZXggPCBzdWdnZXN0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHN1Z2dlc3Rpb25zW25leHRJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN1Z2dlc3Rpb25zW3N1Z2dlc3Rpb25zLmxlbmd0aCAtIDFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIG5vIGl0ZW0gd2FzIHNlbGVjdGVkIGJlZm9yZSwgc2VsZWN0IGZpcnN0IG9uZVxuICAgICAgICAgICAgaWYgKCFuZXdJdGVtU2VsZWN0ZWQgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKChuZXdJdGVtU2VsZWN0ZWQgPSBzdWdnZXN0aW9uc1swXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNYW5hZ2UgZ2xvYmFsIGl0ZW0gc2VsZWN0ZWQgaW5kZXhcbiAgICAgICAgICAgICAgICBjb25zdCBNQVhfSU5ERVggPSB0aGlzLmRpc3BsYXllZEVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4ICs9IHN0ZXA7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA+IE1BWF9JTkRFWCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSBNQVhfSU5ERVg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTY3JvbGxzIGRvd24gb3IgdXAgaWYgbmV3SXRlbVNlbGVjdGVkIGlzIG5vdCB2aXNpYmxlXG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uc05hdGl2ZUVsZW1lbnQgPSB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydFxuICAgICAgICAgICAgICAgIC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKHN1Z2dlc3Rpb25zTmF0aXZlRWxlbWVudCwgbmV3SXRlbVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1Z2dlc3Rpb25MaXN0KCk6IEhUTUxFbGVtZW50W10ge1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uc05hdGl2ZUVsZW1lbnQgPSB0aGlzLnN1Z2dlc3Rpb25zTGlzdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAvLyBDb252ZXJ0cyB0aGUgc3VnZ2VzdGlvbnMgdG8gYW4gYXJyYXkgdG8gd29yayBjb25zaXN0ZW50bHkgYWNyb3NzIGJyb3dzZXJzLlxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc3VnZ2VzdGlvbnNOYXRpdmVFbGVtZW50LmNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc2VsZWN0SXRlbShpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaXRlbS5jbGFzc05hbWUgPSBpdGVtLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgYCAke3RoaXMuU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTU31gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgKTtcbiAgICAgICAgaXRlbS5hdHRyaWJ1dGVzWydhcmlhLXNlbGVjdGVkJ10gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdEl0ZW0oaXRlbTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghaXRlbS5jbGFzc05hbWUuaW5jbHVkZXModGhpcy5TVUdHRVNUSU9OX1NFTEVDVEVEX0NMQVNTKSkge1xuICAgICAgICAgICAgaXRlbS5jbGFzc05hbWUgKz0gYCAke3RoaXMuU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTU31gO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbS5hdHRyaWJ1dGVzWydhcmlhLXNlbGVjdGVkJ10gPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudElkID0gaXRlbS5pZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmlzaWJsZShwYXJlbnQ6IGFueSwgZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRPZmZzZXRUb3AgPVxuICAgICAgICAgICAgZWxlbWVudC5vZmZzZXRUb3AgK1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuZ2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpO1xuICAgICAgICAvLyBlbGVtZW50IGlzIGJlbG93IHZpc2libGUgYXJlYVxuICAgICAgICBjb25zdCBpc0JlbG93ID1cbiAgICAgICAgICAgIGVsZW1lbnRPZmZzZXRUb3AgPCBwYXJlbnQub2Zmc2V0SGVpZ2h0ICsgcGFyZW50LnNjcm9sbFRvcDtcbiAgICAgICAgLy8gZWxlbWVudCBpcyBhYm92ZSB2aXNpYmxlIGFyZWFcbiAgICAgICAgY29uc3QgaXNBYm92ZSA9IGVsZW1lbnRPZmZzZXRUb3AgPiBwYXJlbnQuc2Nyb2xsVG9wO1xuICAgICAgICByZXR1cm4gaXNCZWxvdyAmJiBpc0Fib3ZlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3VnZ2VzdGlvbnNEaXNwbGF5ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTGlzdCAmJlxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0xpc3QubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaXJzdFN1Z2dlc3Rpb24oKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0xpc3QgJiZcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNMaXN0Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAxXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnNMaXN0Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uaW5uZXJUZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5U2NyZWVuUmVhZGVyVXNlcnMoKTogdm9pZCB7XG4gICAgICAgIC8vIEZvcmNlcyBOVkRBIHRvIHJlLXJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIHNjLW9ubHkgbm90aWZpY2F0aW9uLlxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbk1lc3NhZ2VVcGRhdGVkID0gIXRoaXMubm90aWZpY2F0aW9uTWVzc2FnZVVwZGF0ZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNYXRjaGluZ1ZhbHVlKGVsZW1lbnRzOiBhbnksIGVsZW1Ub0NvbXBhcmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIC8vIExvb2sgZm9yIGEgcG90ZW50aWFsIG1hdGNoaW5nIHZhbHVlIGluIHRoZSBzZXRcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdFbGVtZW50ID0gZWxlbWVudHMuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAodGhpcy5hcmVWYWx1ZXNFcXVhbHModmFsdWUsIGVsZW1Ub0NvbXBhcmUpIHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkgPT09IGVsZW1Ub0NvbXBhcmUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBNYXAgd2l0aCB0aGUgbGFiZWwuXG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVmFsdWVMYWJlbCA9IHRoaXMuZ2V0TGFiZWwobWF0Y2hpbmdFbGVtZW50WzBdKTtcblxuICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGUgdmFsdWUgaWYgY3VzdG9tIHZhbHVlcyBhcmUgYWxsb3dlZCBhbmQgdGhlcmUncyBubyBtYXRjaC5cbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dDdXN0b21WYWx1ZVxuICAgICAgICAgICAgPyBtYXRjaGluZ1ZhbHVlTGFiZWwgfHwgdGhpcy5nZXRNb2RlbFZhbHVlRGlzcGxheVZhbHVlKClcbiAgICAgICAgICAgIDogbWF0Y2hpbmdWYWx1ZUxhYmVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWF0Y2hSZXN1bHQ8VD4oZWxlbWVudDogVCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IG5vcm1hbGl6ZVNlYXJjaChcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICB0aGlzLmNhc2VTZW5zaXRpdmVTZWFyY2hcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IGxhYmVsID0gbm9ybWFsaXplU2VhcmNoKFxuICAgICAgICAgICAgdGhpcy5nZXRMYWJlbChlbGVtZW50KSxcbiAgICAgICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZVNlYXJjaFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsYWJlbCA9IHN0cmlwSHRtbFRhZ3MobGFiZWwpO1xuICAgICAgICByZXR1cm4gbGFiZWwuaW5jbHVkZXMoc2VhcmNoVmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFudWFsbHlVcGRhdGVWYWx1ZShuZXdWYWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbmV3VmFsdWUgfHxcbiAgICAgICAgICAgICF0aGlzLm1vZGVsIHx8XG4gICAgICAgICAgICAhdGhpcy5hcmVWYWx1ZXNFcXVhbHMobmV3VmFsdWUsIHRoaXMubW9kZWwpXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZG8gb24gdG9wIG9mIHRoZSB1cGRhdGVOZ01vZGVsIGFzXG4gICAgICAgICAgICAvLyB1cGRhdGVOZ01vZGVsIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSBvdGhlciBzb3VyY2VzLlxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobmV3VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVOZ01vZGVsKG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1c3RvbVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tVmFsdWVNb2RlbEdlbmVyYXRvciB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZU1vZGVsR2VuZXJhdG9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1vZGVsVmFsdWVEaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLm1vZGVsID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyB0aGlzLm1vZGVsXG4gICAgICAgICAgICA6IHRoaXMuZ2V0TGFiZWwodGhpcy5tb2RlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RWYWx1ZVRvRGlzcGxheSh2YWx1ZTogYW55LCBlbGVtZW50czogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHZhbHVlLlxuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRWxlbWVudHModHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtVG9Db21wYXJlID0gdmFsdWUgPyB2YWx1ZSA6IHRoaXMuZGVmYXVsdEVsZW1lbnRWYWx1ZTtcblxuICAgICAgICBpZiAoZWxlbVRvQ29tcGFyZSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5nZXRNYXRjaGluZ1ZhbHVlKGVsZW1lbnRzLCBlbGVtVG9Db21wYXJlKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRWxlbWVudHModHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1hdGNoVmFsdWVPbk1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3Rpb25MaXN0RHluYW1pYykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RWYWx1ZVRvRGlzcGxheU9uRWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5hc09ic2VydmFibGUoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50c0xvYWRlZC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKFt2YWx1ZSwgZWxlbWVudHNdKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5KHZhbHVlLCBlbGVtZW50cylcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm1vZGVsQ2hhbmdlLnN1YnNjcmliZShcbiAgICAgICAgICAgICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRFbGVtZW50cygpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZWxlbWVudHM6IGFueSkgPT4gISFlbGVtZW50cykpXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzL25vLW5lc3RlZC1zdWJzY3JpYmUscnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGVsZW1lbnRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VmFsdWVUb0Rpc3BsYXkodmFsdWUsIGVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPCEtLVxuICAgIEFjY2Vzc2libGUgYXV0b2NvbXBsZXRlIHdpZGdldCBmb2xsb3dpbmcgdGhlIGxpc3Rib3ggY29tYm9ib3ggcGF0dGVybi5cbiAgICByZWY6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4xL2V4YW1wbGVzL2NvbWJvYm94L2FyaWExLjFwYXR0ZXJuL2xpc3Rib3gtY29tYm8uaHRtbFxuLS0+XG48ZGl2XG4gICAgY2xhc3M9XCJmb3JtLWdyb3VwIGF1dG9jb21wbGV0ZS1mb3JtLWdyb3VwXCJcbiAgICBbY2xhc3MuaGFzLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgW2NsYXNzLnZkLWZvcm0tZ3JvdXAtZGFuZ2VyXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInNob3VsZERpc3BsYXlMaXN0Ym94KClcIlxuICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiJ2xpc3Rib3gnXCJcbiAgICBbYXR0ci5pZF09XCJidWlsZElkKCdDb250YWluZXInKVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4+XG4gICAgPGxhYmVsXG4gICAgICAgIFthdHRyLmZvcl09XCJidWlsZENoaWxkSWQoKVwiXG4gICAgICAgICpuZ0lmPVwiISFsYWJlbFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImlzTGFiZWxTck9ubHkgPyAnc3Itb25seScgOiBsYWJlbFN0eWxlTW9kaWZpZXJcIlxuICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArICdMYWJlbCdcIlxuICAgID5cbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJsYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIXJlcXVpcmVkICYmICFoaWRlTm90UmVxdWlyZWRFeHRyYUxhYmVsXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7ICdmb2Vobi1pbnB1dC5vcHRpb25hbCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9sYWJlbD5cblxuICAgIDxmb2Vobi12YWxpZGF0aW9uLWFsZXJ0cyBbY29tcG9uZW50XT1cInRoaXNcIj48L2ZvZWhuLXZhbGlkYXRpb24tYWxlcnRzPlxuXG4gICAgPGRpdiAqbmdJZj1cIiFlbGVtZW50c1wiPkNoYXJnZW1lbnQuLi48L2Rpdj5cblxuICAgIDxzbWFsbFxuICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHRcIlxuICAgID48L3NtYWxsPlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPGRpdiBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgICAgVXRpbGlzZXogbGVzIGZsw6hjaGVzIGhhdXQgZXQgYmFzIHBvdXIgbmF2aWd1ZXIgZGFucyBsYSBsaXN0ZSwgcHVpcyBsYVxuICAgICAgICB0b3VjaGUgRW50cmVyIHBvdXIgc8OpbGVjdGlvbm5lciB1bmUgb3B0aW9uLlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBHaXZlIHNjcmVlbiByZWFkZXIgdXNlcnMgdGhlIHRvdGFsIG9mIHJlc3VsdHMgd2hlbiB0aGVuIGlucHV0IGNoYW5nZXMuIC0tPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzci1vbmx5XCJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgcm9sZT1cInN0YXR1c1wiXG4gICAgICAgIGFyaWEtYXRvbWljPVwidHJ1ZVwiXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheWVkRWxlbWVudHMgJiYgc2hvdWxkRGlzcGxheUxpc3Rib3goKVwiXG4gICAgPlxuICAgICAgICBOb21icmUgZGUgcsOpc3VsdGF0czoge3sgZGlzcGxheWVkRWxlbWVudHMubGVuZ3RoIH19XG4gICAgICAgIDwhLS0gVHJpY2sgdG8gaGF2ZSBOVkRBIHJlLXJlYWRpbmcgdGhpcyBwcm9wZXJseSAtLT5cbiAgICAgICAgPHNwYW4+e3sgbm90aWZpY2F0aW9uTWVzc2FnZVVwZGF0ZWQgPyAnLCcgOiAnLCwnIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGlucHV0XG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgIFtuYW1lXT1cIm5hbWUgfHwgbGFiZWxcIlxuICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKVwiXG4gICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IG51bGxcIlxuICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZFN1YmplY3QgfCBhc3luY1wiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ2V0RGVzY3JpYmVkQnkoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWQgfHwgbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKSB8fCBudWxsXCJcbiAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIidvZmYnXCJcbiAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImdldEFjdGl2ZURlc2NlbmRhbnRJZCgpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cIlxuICAgICAgICAgICAgc2hvdWxkRGlzcGxheUxpc3Rib3goKSA/IGJ1aWxkQ2hpbGRJZCgpICsgJ0xpc3Rib3gnIDogbnVsbFxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5saXN0XT1cImJ1aWxkQ2hpbGRJZCgpICsgJ2xpc3QnXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFZhbHVlXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2hvd1N1Z2dlc3Rpb25zV2hlbklucHV0SGFzRm9jdXNBbmRJc0VtcHR5KCRldmVudClcIlxuICAgICAgICAoaW5wdXQpPVwiaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UoZW50cnlDb21wb25lbnQudmFsdWUpXCJcbiAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoKVwiXG4gICAgICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJvbklucHV0Q2xpY2soKVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICNlbnRyeUNvbXBvbmVudFxuICAgIC8+XG5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAqbmdJZj1cImRpc3BsYXlDbGVhckJ1dHRvbigpIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1jbGVhci1idXR0b24gYnRuXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXIoKVwiXG4gICAgICAgIFtpZF09XCJidWlsZENoaWxkSWQoKSArICdDbGVhcidcIlxuICAgID5cbiAgICAgICAgPGZvZWhuLWljb24tdGltZXNcbiAgICAgICAgICAgIGNsYXNzPVwiYXV0b2NvbXBsZXRlLWNsZWFyLWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInZm9laG4taW5wdXQuY2xlYXItYnV0dG9uLmxhYmVsJyB8IGZyb21EaWN0aW9uYXJ5XCJcbiAgICAgICAgPjwvZm9laG4taWNvbi10aW1lcz5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIHN1Z2dlc3Rpb25zLWxpc3QtY29udGFpbmVyXCJcbiAgICAgICAgKm5nSWY9XCJzaG91bGREaXNwbGF5TGlzdGJveCgpXCJcbiAgICA+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICAgIFtpdGVtU2l6ZV09XCJpdGVtSGVpZ2h0SW5TdWdnZXN0aW9uTGlzdEluUHhcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJWSUVXX1BPUlRfSEVJR0hUXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnTGlzdGJveCdcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJidWlsZENoaWxkSWQoKSArICdMYWJlbCdcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN1Z2dlc3Rpb25zLWxpc3RcIlxuICAgICAgICAgICAgICAgICNzdWdnZXN0aW9uc0xpc3RcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN1Z2dlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgb2YgZGlzcGxheWVkRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBhcyBpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgpICsgJ09wdGlvbicgKyBpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTdWdnZXN0aW9uKGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvbkxpc3RPcHRpb25Nb3VzZURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkxpc3RPcHRpb25Gb2N1cygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25MaXN0T3B0aW9uQmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJpdGVtSGVpZ2h0SW5TdWdnZXN0aW9uTGlzdEluUHhcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5sYWJlbC12YWx1ZV09XCJnZXRMYWJlbChlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIEVuc3VyZXMgdGhhdCBzY3JlZW4gcmVhZGVycyBkb24ndCBjb25zaWRlciBhbnkgc3BhY2VzIGFyb3VuZCB0aGUgZW1waGFzaXMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwiZ2V0TGFiZWxXaXRoRW1waGFzaXMoZWxlbWVudClcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
675
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCw0RUFBNEU7QUFDNUUsT0FBTyxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUtMLE1BQU0sRUFHTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGVBQWUsRUFDZixhQUFhLEVBRWIsRUFBRSxFQUNGLE9BQU8sRUFFVixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDSCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixLQUFLLEVBQ0wsR0FBRyxFQUNOLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBRTNFLCtDQUErQztBQUMvQyxTQUFTLGFBQWEsQ0FBQyxLQUFhO0lBQ2hDLHlGQUF5RjtJQUN6RixJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7UUFDdkMsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxpQkFBaUI7SUFDakIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEtB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LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLy8gVGhpcyBjb21wb25lbnQgdXNlcyBzb21lIEVTNyBmZWF0dXJlcyB0aGF0IGFyZSBub3QgcG9seWZpbGxlZCBieSBBbmd1bGFyLlxuaW1wb3J0ICdjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMnO1xuXG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaXB0aW9uXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgZmlsdGVyLFxuICAgIGZpcnN0LFxuICAgIG1hcFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZvZWhuQ2hlY2thYmxlR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9mb2Vobi1jaGVja2FibGVzL2ZvZWhuLWNoZWNrYWJsZS1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9laG5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2ZvZWhuLWlucHV0L2ZvZWhuLWlucHV0LmNvbXBvbmVudCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBub3JtYWxpemVVdGY4KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNvbWUgYnJvd3NlcnMgc3VjaCBhcyBJRTExIGRvbid0IHN1cHBvcnQgdGhlIGZlYXR1cmUuIEFkZCB0aGUgcG9seWZpbGwgaWYgeW91IHdhbnQgaXQuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZS5ub3JtYWxpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhY2NlbnRzXG4gICAgcmV0dXJuIHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gbm9ybWFsaXplU2VhcmNoKHZhbHVlOiBzdHJpbmcsIGNhc2VTZW5zaXRpdmVTZWFyY2g6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChjYXNlU2Vuc2l0aXZlU2VhcmNoKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVVdGY4KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVV0ZjgodmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBzdHJpcEh0bWxUYWdzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oPChbXj5dKyk+KS9naSwgJycpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZvZWhuLWF1dG9jb21wbGV0ZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5jc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRm9laG5JbnB1dENvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvZWhuQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvZWhuQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBGb2VobkNoZWNrYWJsZUdyb3VwQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydClcbiAgICB2aXJ0dWFsU2Nyb2xsVmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICAgIEBWaWV3Q2hpbGQoJ3N1Z2dlc3Rpb25zTGlzdCcpXG4gICAgc3VnZ2VzdGlvbnNMaXN0OiBhbnk7XG5cbiAgICBAVmlld0NoaWxkKCdlbnRyeUNvbXBvbmVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgaW5wdXRFbGVtZW50OiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaFZhbHVlTWluQ2hhcnNDb3VudCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvdyB0byBwcm92aWRlIGN1c3RvbSB2YWx1ZXMgdG8gdGhlIGF1dG9jb21wbGV0ZS5cbiAgICAgKlxuICAgICAqIEEgY3VzdG9tIHZhbHVlIGlzIGEgdmFsdWUgdGhhdCBpcyBub3QgaW4gdGhlIGBlbGVtZW50c2Agc2V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dDdXN0b21WYWx1ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGlmIHN1Z2dlc3Rpb24gZWxlbWVudHMgbGlzdCBpcyBiZWluZyByZXRyaWV2ZWQgZHluYW1pY2FsbHkgd2hpbGUgdXNlciBpbnB1dHMgaW4gc2VhcmNoIGZpZWxkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNTdWdnZXN0aW9uTGlzdER5bmFtaWMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEFsbG93IHRvIHByb3ZpZGUgYSBnZW5lcmF0b3IgdG8gY3JlYXRlIHRoZSBtb2RlbCB3aXRoIGN1c3RvbSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSB0eXBlIG9mIHRoZSBtb2RlbCBpcyBhbiBvYmplY3QgYW5kIG5vdCBqdXN0XG4gICAgICogYSBzdHJpbmcuIFVzZSB0aGlzIGlzIGBhbGxvd0N1c3RvbVZhbHVlYCBpcyB0cnVlIGFuZCBgZWxlbWVudFZhbHVlYFxuICAgICAqIGlzIGEgZnVuY3Rpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21WYWx1ZU1vZGVsR2VuZXJhdG9yOiAoaW5wdXQ6IHN0cmluZykgPT4gYW55O1xuXG4gICAgQElucHV0KClcbiAgICBpdGVtSGVpZ2h0SW5TdWdnZXN0aW9uTGlzdEluUHggPSA0MDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdWdnZXN0aW9uIGxhYmVsIHVzZWQgaW4gdGhlIGRpc3BsYXllZCBsaXN0LiBDYW4gYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvblxuICAgICAqIGZhbGxiYWNrIG9uICdlbGVtZW50TGFiZWwnXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBlbGVtZW50U3VnZ2VzdGlvbkxhYmVsOiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIGNhc2VTZW5zaXRpdmVTZWFyY2ggPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBjaGFuZ2VzIHNlYXJjaCBpbnB1dCB2YWx1ZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHVzZXJTZWFyY2hJbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgaW5wdXRWYWx1ZTogc3RyaW5nO1xuICAgIHNlYXJjaFZhbHVlOiBzdHJpbmc7XG4gICAgaW5wdXRIYXNGb2N1czogYm9vbGVhbjtcbiAgICBoaWRlU3VnZ2VzdGlvbnMgPSB0cnVlO1xuICAgIGN1cnJlbnRCbHVyVGltZXI6IGFueTtcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgVklFV19QT1JUX0hFSUdIVDogbnVtYmVyO1xuXG4gICAgZGlzcGxheWVkRWxlbWVudHM6IGFueVtdO1xuICAgIG5vdGlmaWNhdGlvbk1lc3NhZ2VVcGRhdGVkOiBib29sZWFuO1xuXG4gICAgZGlzYWJsZWRTdWJqZWN0OiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgICBwcml2YXRlIHBlbmRpbmdEaXNhYmxlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIGVsZW1lbnRzTG9hZGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50SXRlbUdsb2JhbEluZGV4ID0gLTE7XG4gICAgcHJpdmF0ZSByZWFkb25seSBOQl9JVEVNU19WSVNJQkxFID0gNTtcblxuICAgIHByaXZhdGUgZmlsdGVyU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBmaWx0ZXJTdWJjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgbGlzdEhhc0ZvY3VzOiBib29sZWFuO1xuICAgIHByaXZhdGUgYWN0aXZlRGVzY2VuZGFudElkOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIG9uSW5pdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgbW9kZWxDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGVsZW1lbnRzTG9hZGVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IFNVR0dFU1RJT05fU0VMRUNURURfQ0xBU1MgPSAnc3VnZ2VzdGlvbi1zZWxlY3RlZCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBFWENMVURFX0hUTUxfVEFHU19SRUdFWCA9ICcoKD89W14+XSo8KXwoPyFbXjxdKj4pKSc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBTVUdHRVNUSU9OX0NVU1RPTV9BVFRSSUJVVEVfTEFCRUxfVkFMVUUgPSAnbGFiZWwtdmFsdWUnO1xuICAgIC8vIEluc3BpcmVkIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9HdWlkZS9SZWd1bGFyX0V4cHJlc3Npb25zI2VzY2FwaW5nXG4gICAgcHJpdmF0ZSByZWFkb25seSBSRUdFWF9UT19FU0NBUEVfUkVHRVggPSAvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2c7XG5cbiAgICBwcml2YXRlIHVzZXJTZWFyY2hJbnB1dFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgdXNlclNlYXJjaElucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgIHByaXZhdGUgc2VsZWN0VmFsdWVUb0Rpc3BsYXlPbkVsZW1lbnRzTG9hZGVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcih6b25lOiBOZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoem9uZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyU3ViY3JpcHRpb24gPSB0aGlzLmZpbHRlclN1YmplY3RcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmZpbHRlckVsZW1lbnRzLmJpbmQodGhpcykpO1xuXG4gICAgICAgIC8vIE5lZWQgdG8gc3Vic2NyaWJlIG9uIEV2ZW50RW1pdHRlciAnZWxlbWVudHNMb2FkZWQnIG90aGVyd2lzZSBlbGVtZW50cyB3aXRoIEhUTUwgZG9lcyBub3Qgd29yay4uLlxuICAgICAgICB0aGlzLmVsZW1lbnRzTG9hZGVkU3Vic2NyaXB0aW9uID0gdGhpcy5lbGVtZW50c0xvYWRlZFxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShtYXAoZWxlbXMgPT4gISFlbGVtcykpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGxvYWRlZCA9PiB0aGlzLmVsZW1lbnRzTG9hZGVkU3ViamVjdC5uZXh0KGxvYWRlZCkpO1xuXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTdWJqZWN0ID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdEaXNhYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCksXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzTG9hZGVkU3ViamVjdC5hc09ic2VydmFibGUoKVxuICAgICAgICBdKS5waXBlKG1hcCgoW2Rpc2FibGVkXSkgPT4gKGRpc2FibGVkID8gJ2Rpc2FibGVkJyA6IG51bGwpKSk7XG5cbiAgICAgICAgdGhpcy5WSUVXX1BPUlRfSEVJR0hUID1cbiAgICAgICAgICAgIHRoaXMuaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4ICogdGhpcy5OQl9JVEVNU19WSVNJQkxFO1xuICAgIH1cblxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0Rpc2FibGVkU3ViamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnBlbmRpbmdEaXNhYmxlZFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgICAgICB0aGlzLmdldEVsZW1lbnRzKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERpc3BsYXllZEVsZW1lbnRzKHRoaXMuZWxlbWVudHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnQgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gYFNhaXNpc3NleiBhdSBtb2lucyAke1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50XG4gICAgICAgICAgICB9IGNhcmFjdMOocmUke3RoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID4gMSA/ICdzJyA6ICcnfWA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uSW5pdFN1YnNjcmlwdGlvbiA9IHRoaXMub25Jbml0U3ViamVjdFxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBIYWNrIHRvIHJlZnJlc2ggdGhlIGRhdGEgb25jZSB0aGUgbGlzdCBpcyBkb3dubG9hZGVkLlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbCh0aGlzLm1vZGVsXyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBXaGVuIHRoZSBtb2RlbCBjaGFuZ2VzLCBzZWxlY3QgdGhlIHJpZ2h0IHZhbHVlIHRvIGRpc3BsYXkuXG4gICAgICAgIHRoaXMubWF0Y2hWYWx1ZU9uTW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICB0aGlzLnVzZXJTZWFyY2hJbnB1dFN1YnNjcmlwdGlvbiA9IHRoaXMudXNlclNlYXJjaElucHV0U3ViamVjdFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gdHJpZ2dlciBzZWFyY2hlZCBpbnB1dCBpZiBpdCBoYXMgbm90IGNoYW5nZWRcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCB3ZSBvbmx5IGNhdGNoIHRoZSBsYXRlc3Qgb2YgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAvLyBxdWljayB1cGRhdGVzLCBhbmQgdG8gbWFrZSBzdXJlIHRoZSB1c2VySW5wdXQgaXMgZmlyZWQgd2hlblxuICAgICAgICAgICAgICAgIC8vIHRoZSBjb21wb25lbnQgaXMgZG9uZSB1cGRhdGluZy5cbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlYXJjaElucHV0LmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJTdWJjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5vbkluaXRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudXNlclNlYXJjaElucHV0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5T25FbGVtZW50c0xvYWRlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICAvLyBIYW5kbGUgY2hhbmdlIG9uIHRoZSBkeW5hbWljIGVsZW1lbnRzIGlucHV0LlxuICAgICAgICB0aGlzLm9uRHluYW1pY0VsZW1lbnRzQ2hhbmdlKGNoYW5nZXMuZWxlbWVudHMpO1xuICAgIH1cblxuICAgIG9uSW5wdXRGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgdGhpcy5pbnB1dEhhc0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMuaXNFbXB0eSh0aGlzLnNlYXJjaFZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID09PSAwKSB8fFxuICAgICAgICAgICAgKCF0aGlzLmlzRW1wdHkodGhpcy5zZWFyY2hWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlTWluQ2hhcnNDb3VudCA8PSB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jbGVhck9uQmx1clRpbWVvdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGlkZVN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRGb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgSUUxMSB0aGF0IGxvc2VzIGZvY3VzIG9uIGlucHV0IHdoZW4gc2Nyb2xsYmFyIGlzIGNsaWNrZWRcbiAgICAvLyAtLT4gcHV0IGJhY2sgZm9jdXMgb24gaW5wdXQgYW5kIGNhbmNlbCBzdWdnZXN0aW9ucyBoaWRpbmcgdGltZXJcbiAgICBzZXRGb2N1c09uSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5jbGVhck9uQmx1clRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBvbklucHV0Qmx1cigpOiB2b2lkIHtcbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJlZm9yZSBvbkNsaWNrU3VnZ2VzdGlvbi4gU2V0dGluZyBpbnB1dEhhc0ZvY3VzIHRvIGZhbHNlIG1ha2VzIHN1Z2dlc3Rpb25zIGRpc2FwcGVhcmVkXG4gICAgICAgIC8vIGFuZCBvbkNsaWNrU3VnZ2VzdGlvbiBpcyBuZXZlciBjYWxsZWQuIFNldHRpbmcgYSB0aW1lb3V0IGhlcmUgYXZvaWQgdGhpcyBwcm9ibGVtLlxuICAgICAgICB0aGlzLmN1cnJlbnRCbHVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIERvbid0IGNsb3NlIHRoZSBsaXN0IGlmIHRoZSBsaXN0IGhhcyB0aGUgZm9jdXMuIFRoaXMgaXMgZG9uZSB0byBhbGxvdyBWb2ljZU92ZXIgdXNlcnMgb24gaU9TIHRvXG4gICAgICAgICAgICAvLyBzZWxlY3QgYW4gb3B0aW9uIHdpdGggdGhlaXIgZmluZ2VyLiBTYW1lIGlmIGZvY3VzIGlzIHNldCBvbiBsaXN0IHNjcm9sbCBiYXJcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5saXN0SGFzRm9jdXMgJiZcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsYXNzTmFtZSAhPT1cbiAgICAgICAgICAgICAgICAgICAgJ2Zvcm0tZ3JvdXAgYXV0b2NvbXBsZXRlLWZvcm0tZ3JvdXAnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0SGFzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGtleUV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIFRoZSBpbnB1dCBtaWdodCBub3QgYmUgbWFya2VkIGFzIGZvY3VzZWQgaW4gY2FzZSB0aGUgdXNlciBzZWxlY3RzIGEgdmFsdWUgZnJvbSB0aGUgbGlzdC5cbiAgICAgICAgdGhpcy5pbnB1dEhhc0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcHJvcGFnYXRlID0gdGhpcy5vbktleURvd25Jbm5lcihrZXlFdmVudCk7XG4gICAgICAgIGlmIChwcm9wYWdhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyU3ViamVjdC5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZTtcbiAgICB9XG5cbiAgICBvbktleURvd25Jbm5lcihrZXlFdmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQga2V5RXZlbnQuY29kZSwgYW5kIGhhcyBkaWZmZXJlbnQgdmFsdWVzXG4gICAgICAgIC8vIGluIGtleUV2ZW50LmtleSAoRG93biBpbnN0ZWFkIG9mIEFycm93RG93biBmb3IgaW5zdGFuY2UpLCBoZW5jZSB0aGUgbXVsdGktc3VwcG9ydC5cbiAgICAgICAgY29uc3QgaWUxMUNvbXBhdGlibGVDb2RlID0ga2V5RXZlbnQuY29kZSB8fCBrZXlFdmVudC5rZXk7XG4gICAgICAgIHN3aXRjaCAoaWUxMUNvbXBhdGlibGVDb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdEb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN1Z2dlc3Rpb25zRGlzcGxheWVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dEVsZW1lbnQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdVcCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE5leHRFbGVtZW50KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ1NwYWNlYmFyJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRTZWxlY3RlZEVsZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdldFNlbGVjdGVkRWxlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRGaXJzdFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBiZWZvcmUgZm9ybSBzdWJtaXQsIGNhbGxzIGNoZWNrQW5kU2V0SW5wdXRWYWx1ZSBiZWNhdXNlIGZvY3Vzb3V0IGlzIGNhbGxlZCB0b28gbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKG5ldyB2YWx1ZSBpcyBhbHJlYWR5IGxvc3QpLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGF1dG9jb21wbGV0ZSB3aXRob3V0IG5lZWQgdG8gc2VsZWN0IGl0IG1hbnVhbGx5XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRTZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICBjYXNlICdSaWdodCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNEaXNwbGF5ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkxpc3RPcHRpb25Nb3VzZURvd24oZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBTYWZhcmkgdHJpZ2dlcnMgZm9jdXNPdXQgYmVmb3JlIGNsaWNrLCBidXQgaWYgeW91XG4gICAgICAgIC8vIHByZXZlbnREZWZhdWx0IG9uIG1vdXNlRG93biwgeW91IGNhbiBzdG9wIHRoYXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAgIC8vIElmIHRoaXMgaXMgcmVtb3ZlZCwgY2xpY2tpbmcgb24gYW4gb3B0aW9uIGluIFNhZmFyaSB3aWxsIHRyaWdnZXJcbiAgICAgICAgLy8gYGhhbmRsZU9wdGlvbkJsdXJgLCB3aGljaCBjbG9zZXMgdGhlIG1lbnUsIGFuZCB0aGUgY2xpY2sgd2lsbFxuICAgICAgICAvLyB0cmlnZ2VyIG9uIHRoZSBlbGVtZW50IHVuZGVybmVhdGggaW5zdGVhZC5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkxpc3RPcHRpb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0SGFzRm9jdXMgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uTGlzdE9wdGlvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEhhc0ZvY3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZmlsdGVyRWxlbWVudHMoaGlkZVN1Z2dlc3Rpb25zOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IHRoaXMuaW5wdXRWYWx1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNFbXB0eSh0aGlzLnNlYXJjaFZhbHVlKSB8fFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGggPCB0aGlzLnNlYXJjaFZhbHVlTWluQ2hhcnNDb3VudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlTWluQ2hhcnNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzcGxheWVkRWxlbWVudHModGhpcy5lbGVtZW50cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VnZ2VzdGlvbnNEaXNwbGF5ZWQodHJ1ZSwgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTdWdnZXN0aW9uc0Rpc3BsYXllZChcbiAgICAgICAgICAgICAgICBoaWRlU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5maWx0ZXIoKGU6IGFueSkgPT4gdGhpcy5tYXRjaFJlc3VsdChlKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTdWdnZXN0aW9uTGFiZWwoZWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRTdWdnZXN0aW9uTGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbGVtZW50U3VnZ2VzdGlvbkxhYmVsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmVzdGVkUHJvcGVydHkoZWxlbWVudCwgdGhpcy5lbGVtZW50U3VnZ2VzdGlvbkxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50U3VnZ2VzdGlvbkxhYmVsKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGdldExhYmVsV2l0aEVtcGhhc2lzKGVsZW06IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvbkxhYmVsKGVsZW0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0VtcHR5KHRoaXMuc2VhcmNoVmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNSZWdleHBDaGFyc1RvRXNjYXBlID0gUmVnRXhwKFxuICAgICAgICAgICAgICAgIHRoaXMuUkVHRVhfVE9fRVNDQVBFX1JFR0VYLnNvdXJjZVxuICAgICAgICAgICAgKS50ZXN0KHRoaXMuc2VhcmNoVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgcmVnZXhTZWFyY2hWYWx1ZSA9IGhhc1JlZ2V4cENoYXJzVG9Fc2NhcGVcbiAgICAgICAgICAgICAgICA/IHRoaXMuZXNjYXBlUmVnZXhwKFxuICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVNlYXJjaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlU2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogbm9ybWFsaXplU2VhcmNoKHRoaXMuc2VhcmNoVmFsdWUsIHRoaXMuY2FzZVNlbnNpdGl2ZVNlYXJjaCk7XG4gICAgICAgICAgICBjb25zdCByZWdleFN0ciA9IGAke3JlZ2V4U2VhcmNoVmFsdWV9JHt0aGlzLkVYQ0xVREVfSFRNTF9UQUdTX1JFR0VYfWA7XG4gICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gbm9ybWFsaXplU2VhcmNoKFxuICAgICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZVNlYXJjaFxuICAgICAgICAgICAgKS5zZWFyY2gocmVnZXhTdHIpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGFiZWwgPSBgJHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA+IDAgPyBsYWJlbC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCkgOiAnJ1xuICAgICAgICAgICAgICAgIH08Yj4ke2xhYmVsLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCArIHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgKX08L2I+JHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwubGVuZ3RoID4gc3RhcnRJbmRleCArIHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGxhYmVsLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggKyB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgfVxuXG4gICAgb25DbGVhcigpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25DbGVhcigpO1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmhhbmRsZVNlYXJjaElucHV0Q2hhbmdlKG51bGwpO1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsdGVyRWxlbWVudHMoKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5Q2xlYXJCdXR0b24oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBvZighIXRoaXMuaW5wdXRWYWx1ZSAmJiAhdGhpcy5kaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgb25DbGlja1N1Z2dlc3Rpb24oZWxlbWVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLmdldExhYmVsKGVsZW1lbnQpKTtcbiAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcblxuICAgICAgICAvLyBGb3JjZSB0aGUgZm9jdXMgb24gdGhlIGlucHV0IHRvIGVuc3VyZSB0aGF0IFZvaWNlT3ZlciBkb2Vzbid0IHNldCB0aGUgZm9jdXMgb24gYW5vdGhlciBmaWVsZCBvbiB0aGUgcGFnZS5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEZvY3VzT25JbnB1dCgpO1xuICAgICAgICAgICAgLy8gVGhlIGlucHV0IHNob3VsZG4ndCBiZSBtYXJrZWQgYXMgZm9jdXNlZCBhcyB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgdGhlIGxpc3QuXG4gICAgICAgICAgICB0aGlzLmlucHV0SGFzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBzaG91bGREaXNwbGF5TGlzdGJveCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID1cbiAgICAgICAgICAgIHRoaXMuaW5wdXRIYXNGb2N1cyAmJlxuICAgICAgICAgICAgIXRoaXMuaGlkZVN1Z2dlc3Rpb25zICYmXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZEVsZW1lbnRzICYmXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZEVsZW1lbnRzLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmICghaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNWaXNpYmxlO1xuICAgIH1cblxuICAgIGdldEFjdGl2ZURlc2NlbmRhbnRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG91bGREaXNwbGF5TGlzdGJveCgpICYmIHRoaXMuYWN0aXZlRGVzY2VuZGFudElkXG4gICAgICAgICAgICA/IHRoaXMuYWN0aXZlRGVzY2VuZGFudElkXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgc2hvd1N1Z2dlc3Rpb25zV2hlbklucHV0SGFzRm9jdXNBbmRJc0VtcHR5KHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdmFsICYmIHRoaXMuaW5wdXRIYXNGb2N1cykge1xuICAgICAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRWxlbWVudHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVNlYXJjaElucHV0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJTZWFyY2hJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkR5bmFtaWNFbGVtZW50c0NoYW5nZShjaGFuZ2U6IFNpbXBsZUNoYW5nZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdWdnZXN0aW9uTGlzdER5bmFtaWMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlICYmICFjaGFuZ2UuZmlyc3RDaGFuZ2UgJiYgISF0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmdldEVsZW1lbnRzKClcbiAgICAgICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdWdnZXN0aW9uc0Rpc3BsYXllZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5maWx0ZXIoKGU6IGFueSkgPT4gdGhpcy5tYXRjaFJlc3VsdChlKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJPbkJsdXJUaW1lb3V0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Qmx1clRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50Qmx1clRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEJsdXJUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNlbGVjdGVkRWxlbWVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5wdXRWYWx1ZShcbiAgICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgaGlkZVN1Z2dlc3Rpb25zOiBib29sZWFuID0gdHJ1ZVxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoaGlkZVN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgbmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gaGlkZVN1Z2dlc3Rpb25zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZlcmlmaWVzIGlmIHZhbHVlIGluIGlucHV0IG1hdGNoZXMgYSB2YWx1ZSBmcm9tIHN1Z2dlc3Rpb25zLiBJZiBub3QsIGVtcHR5IHRoZSBpbnB1dCBpZiB0aGUgY3VzdG9tIHZhbHVlXG4gICAgICogb3B0aW9uIGlzIG5vdCBzZXQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGVja0FuZFNldElucHV0VmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGlmICghIXRoaXMuaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdFbGVtZW50ID0gdGhpcy5lbGVtZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGE6IGFueSkgPT4gdGhpcy5nZXRMYWJlbChhKSA9PT0gdGhpcy5pbnB1dFZhbHVlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZShtYXRjaGluZ0VsZW1lbnRbMF0pO1xuICAgICAgICAgICAgICAgIHRoaXMubWFudWFsbHlVcGRhdGVWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd0N1c3RvbVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3TW9kZWwgPSB0aGlzLmdldEN1c3RvbVZhbHVlKHRoaXMuaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW51YWxseVVwZGF0ZVZhbHVlKG5ld01vZGVsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hbnVhbGx5VXBkYXRlVmFsdWUobnVsbCk7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3VnZ2VzdGlvbnNEaXNwbGF5ZWQoXG4gICAgICAgIGhpZGVTdWdnZXN0aW9uczogYm9vbGVhbixcbiAgICAgICAgZGlzcGxheWVkRWxlbWVudHM6IGFueVtdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0RGlzcGxheWVkRWxlbWVudHMoZGlzcGxheWVkRWxlbWVudHMpO1xuICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IGhpZGVTdWdnZXN0aW9ucztcbiAgICAgICAgdGhpcy5ub3RpZnlTY3JlZW5SZWFkZXJVc2VycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGlzcGxheWVkRWxlbWVudHMoZmlsdGVyZWRFbGVtZW50czogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudElkID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRFbGVtZW50cyA9IGZpbHRlcmVkRWxlbWVudHM7XG5cbiAgICAgICAgdGhpcy5yZXNpemVEaXNwbGF5Vmlld1BvcnQoZmlsdGVyZWRFbGVtZW50cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNpemVEaXNwbGF5Vmlld1BvcnQoZmlsdGVyZWRFbGVtZW50czogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghIWZpbHRlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZEVsZW1lbnRzLmxlbmd0aCA8IHRoaXMuTkJfSVRFTVNfVklTSUJMRSkge1xuICAgICAgICAgICAgICAgIHRoaXMuVklFV19QT1JUX0hFSUdIVCA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4ICpcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRFbGVtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IE1BWF9IRUlHSFQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLk5CX0lURU1TX1ZJU0lCTEUgKiB0aGlzLml0ZW1IZWlnaHRJblN1Z2dlc3Rpb25MaXN0SW5QeDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5WSUVXX1BPUlRfSEVJR0hUIDwgTUFYX0hFSUdIVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlZJRVdfUE9SVF9IRUlHSFQgPSBNQVhfSEVJR0hUO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISF0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRFbGVtZW50KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zTGlzdCkge1xuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldFN1Z2dlc3Rpb25MaXN0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGluZGV4U3RyIGluIHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmhhc093blByb3BlcnR5KGluZGV4U3RyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGluZGV4U3RyLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gc3VnZ2VzdGlvbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3NOYW1lLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNVR0dFU1RJT05fU0VMRUNURURfQ0xBU1NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU1VHR0VTVElPTl9DVVNUT01fQVRUUklCVVRFX0xBQkVMX1ZBTFVFXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdE5leHRFbGVtZW50KGRvd246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNEaXNwbGF5ZWQoKSkge1xuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldFN1Z2dlc3Rpb25MaXN0KCk7XG4gICAgICAgICAgICBsZXQgbmV3SXRlbVNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBkb3duID8gMSA6IC0xO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGluZGV4U3RyIGluIHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmhhc093blByb3BlcnR5KGluZGV4U3RyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGluZGV4U3RyLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gc3VnZ2VzdGlvbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEluZGV4OiBudW1iZXIgPSBpbmRleCArIHN0ZXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRJdGVtU2VsZWN0ZWQgPSBpdGVtLmNsYXNzTmFtZS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNVR0dFU1RJT05fU0VMRUNURURfQ0xBU1NcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRJdGVtU2VsZWN0ZWQgJiYgbmV4dEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdJdGVtU2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEluZGV4IDwgc3VnZ2VzdGlvbnMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzdWdnZXN0aW9uc1tuZXh0SW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdWdnZXN0aW9uc1tzdWdnZXN0aW9ucy5sZW5ndGggLSAxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBubyBpdGVtIHdhcyBzZWxlY3RlZCBiZWZvcmUsIHNlbGVjdCBmaXJzdCBvbmVcbiAgICAgICAgICAgIGlmICghbmV3SXRlbVNlbGVjdGVkICYmIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbSgobmV3SXRlbVNlbGVjdGVkID0gc3VnZ2VzdGlvbnNbMF0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTWFuYWdlIGdsb2JhbCBpdGVtIHNlbGVjdGVkIGluZGV4XG4gICAgICAgICAgICAgICAgY29uc3QgTUFYX0lOREVYID0gdGhpcy5kaXNwbGF5ZWRFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCArPSBzdGVwO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPiBNQVhfSU5ERVgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4ID0gTUFYX0lOREVYO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2Nyb2xscyBkb3duIG9yIHVwIGlmIG5ld0l0ZW1TZWxlY3RlZCBpcyBub3QgdmlzaWJsZVxuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnNOYXRpdmVFbGVtZW50ID0gdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnRcbiAgICAgICAgICAgICAgICAuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZShzdWdnZXN0aW9uc05hdGl2ZUVsZW1lbnQsIG5ld0l0ZW1TZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWdnZXN0aW9uTGlzdCgpOiBIVE1MRWxlbWVudFtdIHtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnNOYXRpdmVFbGVtZW50ID0gdGhpcy5zdWdnZXN0aW9uc0xpc3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gQ29udmVydHMgdGhlIHN1Z2dlc3Rpb25zIHRvIGFuIGFycmF5IHRvIHdvcmsgY29uc2lzdGVudGx5IGFjcm9zcyBicm93c2Vycy5cbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHN1Z2dlc3Rpb25zTmF0aXZlRWxlbWVudC5jaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnNlbGVjdEl0ZW0oaXRlbTogYW55KTogdm9pZCB7XG4gICAgICAgIGl0ZW0uY2xhc3NOYW1lID0gaXRlbS5jbGFzc05hbWUucmVwbGFjZShcbiAgICAgICAgICAgIGAgJHt0aGlzLlNVR0dFU1RJT05fU0VMRUNURURfQ0xBU1N9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICk7XG4gICAgICAgIGl0ZW0uYXR0cmlidXRlc1snYXJpYS1zZWxlY3RlZCddID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIWl0ZW0uY2xhc3NOYW1lLmluY2x1ZGVzKHRoaXMuU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTUykpIHtcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NOYW1lICs9IGAgJHt0aGlzLlNVR0dFU1RJT05fU0VMRUNURURfQ0xBU1N9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW0uYXR0cmlidXRlc1snYXJpYS1zZWxlY3RlZCddID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnRJZCA9IGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Zpc2libGUocGFyZW50OiBhbnksIGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlbGVtZW50T2Zmc2V0VG9wID1cbiAgICAgICAgICAgIGVsZW1lbnQub2Zmc2V0VG9wICtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LmdldE9mZnNldFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKTtcbiAgICAgICAgLy8gZWxlbWVudCBpcyBiZWxvdyB2aXNpYmxlIGFyZWFcbiAgICAgICAgY29uc3QgaXNCZWxvdyA9XG4gICAgICAgICAgICBlbGVtZW50T2Zmc2V0VG9wIDwgcGFyZW50Lm9mZnNldEhlaWdodCArIHBhcmVudC5zY3JvbGxUb3A7XG4gICAgICAgIC8vIGVsZW1lbnQgaXMgYWJvdmUgdmlzaWJsZSBhcmVhXG4gICAgICAgIGNvbnN0IGlzQWJvdmUgPSBlbGVtZW50T2Zmc2V0VG9wID4gcGFyZW50LnNjcm9sbFRvcDtcbiAgICAgICAgcmV0dXJuIGlzQmVsb3cgJiYgaXNBYm92ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1Z2dlc3Rpb25zRGlzcGxheWVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0xpc3QgJiZcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNMaXN0Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rmlyc3RTdWdnZXN0aW9uKCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNMaXN0ICYmXG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTGlzdC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Z2dlc3Rpb25zTGlzdC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmlubmVyVGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeVNjcmVlblJlYWRlclVzZXJzKCk6IHZvaWQge1xuICAgICAgICAvLyBGb3JjZXMgTlZEQSB0byByZS1yZWFkIHRoZSBjb250ZW50IG9mIHRoZSBzYy1vbmx5IG5vdGlmaWNhdGlvbi5cbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25NZXNzYWdlVXBkYXRlZCA9ICF0aGlzLm5vdGlmaWNhdGlvbk1lc3NhZ2VVcGRhdGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdWYWx1ZShlbGVtZW50czogYW55LCBlbGVtVG9Db21wYXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAvLyBMb29rIGZvciBhIHBvdGVudGlhbCBtYXRjaGluZyB2YWx1ZSBpbiB0aGUgc2V0XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nRWxlbWVudCA9IGVsZW1lbnRzLmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgKHRoaXMuYXJlVmFsdWVzRXF1YWxzKHZhbHVlLCBlbGVtVG9Db21wYXJlKSB8fFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpID09PSBlbGVtVG9Db21wYXJlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTWFwIHdpdGggdGhlIGxhYmVsLlxuICAgICAgICBjb25zdCBtYXRjaGluZ1ZhbHVlTGFiZWwgPSB0aGlzLmdldExhYmVsKG1hdGNoaW5nRWxlbWVudFswXSk7XG5cbiAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhlIHZhbHVlIGlmIGN1c3RvbSB2YWx1ZXMgYXJlIGFsbG93ZWQgYW5kIHRoZXJlJ3Mgbm8gbWF0Y2guXG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93Q3VzdG9tVmFsdWVcbiAgICAgICAgICAgID8gbWF0Y2hpbmdWYWx1ZUxhYmVsIHx8IHRoaXMuZ2V0TW9kZWxWYWx1ZURpc3BsYXlWYWx1ZSgpXG4gICAgICAgICAgICA6IG1hdGNoaW5nVmFsdWVMYWJlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hdGNoUmVzdWx0PFQ+KGVsZW1lbnQ6IFQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoVmFsdWUgPSBub3JtYWxpemVTZWFyY2goXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlU2VhcmNoXG4gICAgICAgICk7XG4gICAgICAgIGxldCBsYWJlbCA9IG5vcm1hbGl6ZVNlYXJjaChcbiAgICAgICAgICAgIHRoaXMuZ2V0TGFiZWwoZWxlbWVudCksXG4gICAgICAgICAgICB0aGlzLmNhc2VTZW5zaXRpdmVTZWFyY2hcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFiZWwgPSBzdHJpcEh0bWxUYWdzKGxhYmVsKTtcbiAgICAgICAgcmV0dXJuIGxhYmVsLmluY2x1ZGVzKHNlYXJjaFZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hbnVhbGx5VXBkYXRlVmFsdWUobmV3VmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW5ld1ZhbHVlIHx8XG4gICAgICAgICAgICAhdGhpcy5tb2RlbCB8fFxuICAgICAgICAgICAgIXRoaXMuYXJlVmFsdWVzRXF1YWxzKG5ld1ZhbHVlLCB0aGlzLm1vZGVsKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IHRvIGRvIG9uIHRvcCBvZiB0aGUgdXBkYXRlTmdNb2RlbCBhc1xuICAgICAgICAgICAgLy8gdXBkYXRlTmdNb2RlbCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gb3RoZXIgc291cmNlcy5cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbChuZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXN0b21WYWx1ZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbVZhbHVlTW9kZWxHZW5lcmF0b3IgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVNb2RlbEdlbmVyYXRvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb2RlbFZhbHVlRGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5tb2RlbCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gdGhpcy5tb2RlbFxuICAgICAgICAgICAgOiB0aGlzLmdldExhYmVsKHRoaXMubW9kZWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0VmFsdWVUb0Rpc3BsYXkodmFsdWU6IGFueSwgZWxlbWVudHM6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2YWx1ZS5cbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckVsZW1lbnRzKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbVRvQ29tcGFyZSA9IHZhbHVlID8gdmFsdWUgOiB0aGlzLmRlZmF1bHRFbGVtZW50VmFsdWU7XG5cbiAgICAgICAgaWYgKGVsZW1Ub0NvbXBhcmUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuZ2V0TWF0Y2hpbmdWYWx1ZShlbGVtZW50cywgZWxlbVRvQ29tcGFyZSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckVsZW1lbnRzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXRjaFZhbHVlT25Nb2RlbENoYW5nZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdWdnZXN0aW9uTGlzdER5bmFtaWMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VmFsdWVUb0Rpc3BsYXlPbkVsZW1lbnRzTG9hZGVkU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuYXNPYnNlcnZhYmxlKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHNMb2FkZWQuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChbdmFsdWUsIGVsZW1lbnRzXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RWYWx1ZVRvRGlzcGxheSh2YWx1ZSwgZWxlbWVudHMpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5tb2RlbENoYW5nZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudHMoKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKGVsZW1lbnRzOiBhbnkpID0+ICEhZWxlbWVudHMpKVxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlLHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlbGVtZW50czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5KHZhbHVlLCBlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXNjYXBlUmVnZXhwKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSh0aGlzLlJFR0VYX1RPX0VTQ0FQRV9SRUdFWCwgJ1xcXFwkJicpO1xuICAgIH1cbn1cbiIsIjwhLS1cbiAgICBBY2Nlc3NpYmxlIGF1dG9jb21wbGV0ZSB3aWRnZXQgZm9sbG93aW5nIHRoZSBsaXN0Ym94IGNvbWJvYm94IHBhdHRlcm4uXG4gICAgcmVmOiBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS9leGFtcGxlcy9jb21ib2JveC9hcmlhMS4xcGF0dGVybi9saXN0Ym94LWNvbWJvLmh0bWxcbi0tPlxuPGRpdlxuICAgIGNsYXNzPVwiZm9ybS1ncm91cCBhdXRvY29tcGxldGUtZm9ybS1ncm91cFwiXG4gICAgW2NsYXNzLmhhcy1kYW5nZXJdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgIFtjbGFzcy52ZC1mb3JtLWdyb3VwLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJzaG91bGREaXNwbGF5TGlzdGJveCgpXCJcbiAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidsaXN0Ym94J1wiXG4gICAgW2F0dHIuaWRdPVwiYnVpbGRJZCgnQ29udGFpbmVyJylcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuPlxuICAgIDxsYWJlbFxuICAgICAgICBbYXR0ci5mb3JdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICAqbmdJZj1cIiEhbGFiZWxcIlxuICAgICAgICBbbmdDbGFzc109XCJpc0xhYmVsU3JPbmx5ID8gJ3NyLW9ubHknIDogbGFiZWxTdHlsZU1vZGlmaWVyXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnTGFiZWwnXCJcbiAgICA+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibGFiZWxcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiFyZXF1aXJlZCAmJiAhaGlkZU5vdFJlcXVpcmVkRXh0cmFMYWJlbFwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyAnZm9laG4taW5wdXQub3B0aW9uYWwnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8Zm9laG4tdmFsaWRhdGlvbi1hbGVydHMgW2NvbXBvbmVudF09XCJ0aGlzXCI+PC9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cz5cblxuICAgIDxkaXYgKm5nSWY9XCIhZWxlbWVudHNcIj5DaGFyZ2VtZW50Li4uPC9kaXY+XG5cbiAgICA8c21hbGxcbiAgICAgICAgKm5nSWY9XCJoZWxwVGV4dFwiXG4gICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgpICsgJ0hlbHAnXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cImhlbHBUZXh0XCJcbiAgICA+PC9zbWFsbD5cblxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgIDxkaXYgY2xhc3M9XCJzci1vbmx5XCI+XG4gICAgICAgIFV0aWxpc2V6IGxlcyBmbMOoY2hlcyBoYXV0IGV0IGJhcyBwb3VyIG5hdmlndWVyIGRhbnMgbGEgbGlzdGUsIHB1aXMgbGFcbiAgICAgICAgdG91Y2hlIEVudHJlciBwb3VyIHPDqWxlY3Rpb25uZXIgdW5lIG9wdGlvbi5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gR2l2ZSBzY3JlZW4gcmVhZGVyIHVzZXJzIHRoZSB0b3RhbCBvZiByZXN1bHRzIHdoZW4gdGhlbiBpbnB1dCBjaGFuZ2VzLiAtLT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic3Itb25seVwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgICBhcmlhLWF0b21pYz1cInRydWVcIlxuICAgICAgICAqbmdJZj1cImRpc3BsYXllZEVsZW1lbnRzICYmIHNob3VsZERpc3BsYXlMaXN0Ym94KClcIlxuICAgID5cbiAgICAgICAgTm9tYnJlIGRlIHLDqXN1bHRhdHM6IHt7IGRpc3BsYXllZEVsZW1lbnRzLmxlbmd0aCB9fVxuICAgICAgICA8IS0tIFRyaWNrIHRvIGhhdmUgTlZEQSByZS1yZWFkaW5nIHRoaXMgcHJvcGVybHkgLS0+XG4gICAgICAgIDxzcGFuPnt7IG5vdGlmaWNhdGlvbk1lc3NhZ2VVcGRhdGVkID8gJywnIDogJywsJyB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxpbnB1dFxuICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGF1dG9jb21wbGV0ZVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICBbbmFtZV09XCJuYW1lIHx8IGxhYmVsXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCBudWxsXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRTdWJqZWN0IHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdldERlc2NyaWJlZEJ5KClcIlxuICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkIHx8IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KCkgfHwgbnVsbFwiXG4gICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCInb2ZmJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJnZXRBY3RpdmVEZXNjZW5kYW50SWQoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtb3duc109XCJcbiAgICAgICAgICAgIHNob3VsZERpc3BsYXlMaXN0Ym94KCkgPyBidWlsZENoaWxkSWQoKSArICdMaXN0Ym94JyA6IG51bGxcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIubGlzdF09XCJidWlsZENoaWxkSWQoKSArICdsaXN0J1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNob3dTdWdnZXN0aW9uc1doZW5JbnB1dEhhc0ZvY3VzQW5kSXNFbXB0eSgkZXZlbnQpXCJcbiAgICAgICAgKGlucHV0KT1cImhhbmRsZVNlYXJjaElucHV0Q2hhbmdlKGVudHJ5Q29tcG9uZW50LnZhbHVlKVwiXG4gICAgICAgIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAjZW50cnlDb21wb25lbnRcbiAgICAvPlxuXG4gICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJhdXRvY29tcGxldGUtY2xlYXItYnV0dG9uIGJ0blwiXG4gICAgICAgIChjbGljayk9XCJvbkNsZWFyKClcIlxuICAgICAgICBbaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnQ2xlYXInXCJcbiAgICA+XG4gICAgICAgIDxmb2Vobi1pY29uLXRpbWVzXG4gICAgICAgICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1jbGVhci1idXR0b24taWNvblwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ2ZvZWhuLWlucHV0LmNsZWFyLWJ1dHRvbi5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4gICAgICAgID48L2ZvZWhuLWljb24tdGltZXM+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cCBzdWdnZXN0aW9ucy1saXN0LWNvbnRhaW5lclwiXG4gICAgICAgICpuZ0lmPVwic2hvdWxkRGlzcGxheUxpc3Rib3goKVwiXG4gICAgPlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICBbaXRlbVNpemVdPVwiaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4XCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiVklFV19QT1JUX0hFSUdIVFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgpICsgJ0xpc3Rib3gnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYnVpbGRDaGlsZElkKCkgKyAnTGFiZWwnXCJcbiAgICAgICAgICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9ucy1saXN0XCJcbiAgICAgICAgICAgICAgICAjc3VnZ2VzdGlvbnNMaXN0XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50IG9mIGRpc3BsYXllZEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgaVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArICdPcHRpb24nICsgaVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrU3VnZ2VzdGlvbihlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25MaXN0T3B0aW9uTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25MaXN0T3B0aW9uRm9jdXMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uTGlzdE9wdGlvbkJsdXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIubGFiZWwtdmFsdWVdPVwiZ2V0TGFiZWwoZWxlbWVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBFbnN1cmVzIHRoYXQgc2NyZWVuIHJlYWRlcnMgZG9uJ3QgY29uc2lkZXIgYW55IHNwYWNlcyBhcm91bmQgdGhlIGVtcGhhc2lzIC0tPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cImdldExhYmVsV2l0aEVtcGhhc2lzKGVsZW1lbnQpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -20,7 +20,7 @@ FoehnBooleanRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
|
|
|
20
20
|
useExisting: forwardRef(() => FoehnBooleanRadioComponent),
|
|
21
21
|
multi: true
|
|
22
22
|
}
|
|
23
|
-
], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n class=\"form-group\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset [attr.aria-describedby]=\"getDescribedBy()\">\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div\n class=\"d-flex\"\n [ngClass]=\"verticalDisplay ? 'flex-column' : 'flex-row'\"\n >\n <div class=\"form-check\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName(
|
|
23
|
+
], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n class=\"form-group\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset [attr.aria-describedby]=\"getDescribedBy()\">\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div\n class=\"d-flex\"\n [ngClass]=\"verticalDisplay ? 'flex-column' : 'flex-row'\"\n >\n <div class=\"form-check\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [value]=\"true\"\n [attr.id]=\"buildChildId('True')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n (change)=\"handleChange(true)\"\n #entryComponent\n />\n <label\n class=\"form-check-label\"\n [for]=\"buildChildId('True')\"\n [innerHTML]=\"trueLabel\"\n ></label>\n </div>\n\n <div class=\"form-check\" [ngClass]=\"verticalDisplay ? '' : 'ml-2'\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [value]=\"false\"\n [attr.id]=\"buildChildId('False')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n (change)=\"handleChange(false)\"\n />\n <label\n class=\"form-check-label\"\n [for]=\"buildChildId('False')\"\n [innerHTML]=\"falseLabel\"\n ></label>\n </div>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.SdkDictionaryPipe, name: "fromDictionary" }] });
|
|
24
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FoehnBooleanRadioComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
26
|
args: [{ selector: 'foehn-boolean-radio', providers: [
|
|
@@ -29,7 +29,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
29
29
|
useExisting: forwardRef(() => FoehnBooleanRadioComponent),
|
|
30
30
|
multi: true
|
|
31
31
|
}
|
|
32
|
-
], template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n class=\"form-group\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset [attr.aria-describedby]=\"getDescribedBy()\">\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div\n class=\"d-flex\"\n [ngClass]=\"verticalDisplay ? 'flex-column' : 'flex-row'\"\n >\n <div class=\"form-check\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName(
|
|
32
|
+
], template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n class=\"form-group\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset [attr.aria-describedby]=\"getDescribedBy()\">\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div\n class=\"d-flex\"\n [ngClass]=\"verticalDisplay ? 'flex-column' : 'flex-row'\"\n >\n <div class=\"form-check\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [value]=\"true\"\n [attr.id]=\"buildChildId('True')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n (change)=\"handleChange(true)\"\n #entryComponent\n />\n <label\n class=\"form-check-label\"\n [for]=\"buildChildId('True')\"\n [innerHTML]=\"trueLabel\"\n ></label>\n </div>\n\n <div class=\"form-check\" [ngClass]=\"verticalDisplay ? '' : 'ml-2'\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [value]=\"false\"\n [attr.id]=\"buildChildId('False')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n (change)=\"handleChange(false)\"\n />\n <label\n class=\"form-check-label\"\n [for]=\"buildChildId('False')\"\n [innerHTML]=\"falseLabel\"\n ></label>\n </div>\n </div>\n </fieldset>\n</div>\n" }]
|
|
33
33
|
}], propDecorators: { trueLabel: [{
|
|
34
34
|
type: Input
|
|
35
35
|
}], falseLabel: [{
|
|
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
37
37
|
}], verticalDisplay: [{
|
|
38
38
|
type: Input
|
|
39
39
|
}] } });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYm9vbGVhbi1yYWRpby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tYm9vbGVhbi9mb2Vobi1ib29sZWFuLXJhZGlvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1ib29sZWFuL2ZvZWhuLWJvb2xlYW4tcmFkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7QUFhM0UsTUFBTSxPQUFPLDBCQUEyQixTQUFRLG1CQUE0QjtJQVg1RTs7UUFhSSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2xCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFHbkIsb0JBQWUsR0FBRyxLQUFLLENBQUM7S0FDM0I7O3dIQVRZLDBCQUEwQjs0R0FBMUIsMEJBQTBCLGdKQVJ4QjtRQUNQO1lBQ0ksT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO1lBQ3pELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixpRENiTCxtNEZBNkVBOzRGRDlEYSwwQkFBMEI7a0JBWHRDLFNBQVM7K0JBQ0kscUJBQXFCLGFBRXBCO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDOzRCQUN6RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjs4QkFJRCxTQUFTO3NCQURSLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRm9laG5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2ZvZWhuLWlucHV0L2ZvZWhuLWlucHV0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9laG4tYm9vbGVhbi1yYWRpbycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLWJvb2xlYW4tcmFkaW8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGb2VobklucHV0Q29tcG9uZW50LFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9laG5Cb29sZWFuUmFkaW9Db21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9laG5Cb29sZWFuUmFkaW9Db21wb25lbnQgZXh0ZW5kcyBGb2VobklucHV0Q29tcG9uZW50PGJvb2xlYW4+IHtcbiAgICBASW5wdXQoKVxuICAgIHRydWVMYWJlbCA9ICdPdWknO1xuXG4gICAgQElucHV0KClcbiAgICBmYWxzZUxhYmVsID0gJ05vbic7XG5cbiAgICBASW5wdXQoKVxuICAgIHZlcnRpY2FsRGlzcGxheSA9IGZhbHNlO1xufVxuIiwiPGRpdlxuICAgIFtjbGFzcy52ZC1mb3JtLWdyb3VwLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICBbYXR0ci5pZF09XCJidWlsZElkKCdDb250YWluZXInKVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4+XG4gICAgPGZpZWxkc2V0IFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ2V0RGVzY3JpYmVkQnkoKVwiPlxuICAgICAgICA8bGVnZW5kICpuZ0lmPVwiISFsYWJlbFwiIFtuZ0NsYXNzXT1cImlzTGFiZWxTck9ubHkgPyAnc3Itb25seScgOiAndmQtcCdcIj5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJlcXVpcmVkICYmICFoaWRlTm90UmVxdWlyZWRFeHRyYUxhYmVsXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdmb2Vobi1pbnB1dC5vcHRpb25hbCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xlZ2VuZD5cblxuICAgICAgICA8Zm9laG4tdmFsaWRhdGlvbi1hbGVydHMgW2NvbXBvbmVudF09XCJ0aGlzXCI+PC9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cz5cblxuICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICpuZ0lmPVwiaGVscFRleHRcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJoZWxwVGV4dFwiXG4gICAgICAgID48L3NtYWxsPlxuXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ2ZXJ0aWNhbERpc3BsYXkgPyAnZmxleC1jb2x1bW4nIDogJ2ZsZXgtcm93J1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTmdNb2RlbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiYnVpbGRDaGlsZE5hbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiYnVpbGRDaGlsZE5hbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCdUcnVlJylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KCkgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZUNoYW5nZSh0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgICNlbnRyeUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiYnVpbGRDaGlsZElkKCdUcnVlJylcIlxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRydWVMYWJlbFwiXG4gICAgICAgICAgICAgICAgPjwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiBbbmdDbGFzc109XCJ2ZXJ0aWNhbERpc3BsYXkgPyAnJyA6ICdtbC0yJ1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZU5nTW9kZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImJ1aWxkQ2hpbGROYW1lKClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cImJ1aWxkQ2hpbGROYW1lKClcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoJ0ZhbHNlJylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KCkgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZUNoYW5nZShmYWxzZSlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiYnVpbGRDaGlsZElkKCdGYWxzZScpXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJmYWxzZUxhYmVsXCJcbiAgICAgICAgICAgICAgICA+PC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuPC9kaXY+XG4iXX0=
|
|
@@ -50,7 +50,7 @@ FoehnRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
|
|
|
50
50
|
useExisting: forwardRef(() => FoehnRadioComponent),
|
|
51
51
|
multi: true
|
|
52
52
|
}
|
|
53
|
-
], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n <legend\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n <foehn-help-modal\n class=\"removePaddingButton\"\n *ngIf=\"!!helpModal\"\n [modalContent]=\"helpModal\"\n ></foehn-help-modal>\n </div>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <div *ngIf=\"!elements\">Chargement...</div>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n <div\n *ngFor=\"\n let elementsGroup of groupedElements;\n let groupIndex = index\n \"\n >\n <!-- TODO remove aria-hidden and make this accessible -->\n <div\n *ngIf=\"!!elementsGroup.groupTitle\"\n class=\"pt-2 font-weight-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n <div\n *ngFor=\"let element of elementsGroup.elements; let i = index\"\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"radio\"\n [value]=\"getValueOrObject(element)\"\n [ngModel]=\"inputValue\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName(
|
|
53
|
+
], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n <legend\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n <foehn-help-modal\n class=\"removePaddingButton\"\n *ngIf=\"!!helpModal\"\n [modalContent]=\"helpModal\"\n ></foehn-help-modal>\n </div>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <div *ngIf=\"!elements\">Chargement...</div>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n <div\n *ngFor=\"\n let elementsGroup of groupedElements;\n let groupIndex = index\n \"\n >\n <!-- TODO remove aria-hidden and make this accessible -->\n <div\n *ngIf=\"!!elementsGroup.groupTitle\"\n class=\"pt-2 font-weight-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n <div\n *ngFor=\"let element of elementsGroup.elements; let i = index\"\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"radio\"\n [value]=\"getValueOrObject(element)\"\n [ngModel]=\"inputValue\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"getDisabled(element) ? 'disabled' : null\"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(getValue(element))\"\n />\n <label\n class=\"form-check-label\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "component", type: i4.FoehnHelpModalComponent, selector: "foehn-help-modal", inputs: ["modalContent"] }, { kind: "pipe", type: i5.SdkDictionaryPipe, name: "fromDictionary" }] });
|
|
54
54
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FoehnRadioComponent, decorators: [{
|
|
55
55
|
type: Component,
|
|
56
56
|
args: [{ selector: 'foehn-radio', providers: [
|
|
@@ -59,6 +59,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
59
59
|
useExisting: forwardRef(() => FoehnRadioComponent),
|
|
60
60
|
multi: true
|
|
61
61
|
}
|
|
62
|
-
], template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n <legend\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n <foehn-help-modal\n class=\"removePaddingButton\"\n *ngIf=\"!!helpModal\"\n [modalContent]=\"helpModal\"\n ></foehn-help-modal>\n </div>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <div *ngIf=\"!elements\">Chargement...</div>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n <div\n *ngFor=\"\n let elementsGroup of groupedElements;\n let groupIndex = index\n \"\n >\n <!-- TODO remove aria-hidden and make this accessible -->\n <div\n *ngIf=\"!!elementsGroup.groupTitle\"\n class=\"pt-2 font-weight-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n <div\n *ngFor=\"let element of elementsGroup.elements; let i = index\"\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"radio\"\n [value]=\"getValueOrObject(element)\"\n [ngModel]=\"inputValue\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName(
|
|
62
|
+
], template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n <legend\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n <foehn-help-modal\n class=\"removePaddingButton\"\n *ngIf=\"!!helpModal\"\n [modalContent]=\"helpModal\"\n ></foehn-help-modal>\n </div>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <div *ngIf=\"!elements\">Chargement...</div>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n <div\n *ngFor=\"\n let elementsGroup of groupedElements;\n let groupIndex = index\n \"\n >\n <!-- TODO remove aria-hidden and make this accessible -->\n <div\n *ngIf=\"!!elementsGroup.groupTitle\"\n class=\"pt-2 font-weight-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n <div\n *ngFor=\"let element of elementsGroup.elements; let i = index\"\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"radio\"\n [value]=\"getValueOrObject(element)\"\n [ngModel]=\"inputValue\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"getDisabled(element) ? 'disabled' : null\"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(getValue(element))\"\n />\n <label\n class=\"form-check-label\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n </div>\n </fieldset>\n</div>\n" }]
|
|
63
63
|
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tcmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLWNoZWNrYWJsZXMvZm9laG4tcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLWNoZWNrYWJsZXMvZm9laG4tcmFkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBYWpGLE1BQU0sT0FBTyxtQkFDVCxTQUFRLDRCQUE0QjtJQUlwQyxZQUFZLElBQVk7UUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLHVFQUF1RTtRQUN2RSxpRUFBaUU7UUFDakUsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsYUFBYSxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsOERBQThEO0lBQzlELGdCQUFnQixDQUFDLE9BQVk7UUFDekIsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFDaEMsT0FBTyxPQUFPLENBQUM7U0FDbEI7UUFFRCxpRkFBaUY7UUFDakYsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQzVELE9BQU8sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzdCO1FBRUQseUJBQXlCO1FBQ3pCLElBQ0ksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVU7WUFDdkMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEtBQUssVUFBVSxFQUNqRDtZQUNFLHFEQUFxRDtZQUNyRCxvRUFBb0U7WUFDcEUsMkJBQTJCO1lBQzNCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUVELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDOztpSEEvQ1EsbUJBQW1CO3FHQUFuQixtQkFBbUIsc0NBUmpCO1FBQ1A7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDbEQsS0FBSyxFQUFFLElBQUk7U0FDZDtLQUNKLGlEQ2RMLHVqR0FpRkE7NEZEakVhLG1CQUFtQjtrQkFYL0IsU0FBUzsrQkFDSSxhQUFhLGFBRVo7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLG1CQUFtQjs0QkFDNUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBOZ1pvbmUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGb2VobklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvZWhuQ2hlY2thYmxlR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2ZvZWhuLWNoZWNrYWJsZS1ncm91cC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZvZWhuLXJhZGlvJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9laG4tcmFkaW8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGb2VobklucHV0Q29tcG9uZW50LFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9laG5SYWRpb0NvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb2VoblJhZGlvQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBGb2VobkNoZWNrYWJsZUdyb3VwQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGlucHV0VmFsdWU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHpvbmU6IE5nWm9uZSkge1xuICAgICAgICBzdXBlcih6b25lKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICAvLyBSZS1hc3NpZ24gdGhlIG1vZGVsIG9uY2UgdGhlIEBJbnB1dCBoYXZlIGJlZW4gc2V0LiBUaGlzIGlzIG1hbmRhdG9yeVxuICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGNvbXBvbmVudCBkb2Vzbid0IGRpc3BsYXkgdGhlIGluaXRpYWwgdmFsdWUgd2hlblxuICAgICAgICAvLyB1c2VkIHdpdGggYW4gb2JqZWN0IGFzIHRoZSB2YWx1ZS5cbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25Nb2RlbENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVPck9iamVjdCh2YWx1ZSk7XG4gICAgICAgIHN1cGVyLm9uTW9kZWxDaGFuZ2UodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZ2V0VmFsdWVPck9iamVjdChlbGVtZW50OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGFscmVhZHkgYSBzdHJpbmcgb3IgYSBudW1iZXIsIGl0J3MgcHJvYmFibHkgdGhlIG9uZSB3ZSB3YW50LlxuICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5lc3RlZCBvYmplY3Qgc3VwcG9ydC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuZWxlbWVudFZhbHVlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5lbGVtZW50VmFsdWVJZGVudGl0eSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgdGhlIGlkZW50aWZ5IGZ1bmN0aW9uXG4gICAgICAgICAgICAvLyBhcyB3ZSBjYW4ndCBzdG9yZSB0aGUgYWN0dWFsIG9iamVjdCBpbiB0aGUgXCJ2YWx1ZVwiIEhUTUwgYXR0cmlidXRlXG4gICAgICAgICAgICAvLyBvbiB0aGUgXCJvcHRpb25cIiBlbGVtZW50LlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFZhbHVlSWRlbnRpdHkodGhpcy5lbGVtZW50VmFsdWUoZWxlbWVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoZWxlbWVudCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFtjbGFzcy52ZC1mb3JtLWdyb3VwLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgW2F0dHIuaWRdPVwiYnVpbGRJZCgnQ29udGFpbmVyJylcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuPlxuICAgIDxmaWVsZHNldCBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdldERlc2NyaWJlZEJ5KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgPGxlZ2VuZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiISFsYWJlbFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXNMYWJlbFNyT25seSA/ICdzci1vbmx5JyA6ICd2ZC1wJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJsYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZXF1aXJlZCAmJiAhaGlkZU5vdFJlcXVpcmVkRXh0cmFMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAnZm9laG4taW5wdXQub3B0aW9uYWwnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xlZ2VuZD5cbiAgICAgICAgICAgIDxmb2Vobi1oZWxwLW1vZGFsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyZW1vdmVQYWRkaW5nQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiEhaGVscE1vZGFsXCJcbiAgICAgICAgICAgICAgICBbbW9kYWxDb250ZW50XT1cImhlbHBNb2RhbFwiXG4gICAgICAgICAgICA+PC9mb2Vobi1oZWxwLW1vZGFsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8Zm9laG4tdmFsaWRhdGlvbi1hbGVydHMgW2NvbXBvbmVudF09XCJ0aGlzXCI+PC9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cz5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWVsZW1lbnRzXCI+Q2hhcmdlbWVudC4uLjwvZGl2PlxuXG4gICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgKm5nSWY9XCJoZWxwVGV4dFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArICdIZWxwJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cImhlbHBUZXh0XCJcbiAgICAgICAgPjwvc21hbGw+XG5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudHNHcm91cCBvZiBncm91cGVkRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwSW5kZXggPSBpbmRleFxuICAgICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUT0RPIHJlbW92ZSBhcmlhLWhpZGRlbiBhbmQgbWFrZSB0aGlzIGFjY2Vzc2libGUgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhIWVsZW1lbnRzR3JvdXAuZ3JvdXBUaXRsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwdC0yIGZvbnQtd2VpZ2h0LWJvbGRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIidjaGVja0dyb3VwXycgKyBncm91cEluZGV4XCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRzR3JvdXAuZ3JvdXBUaXRsZSB8IGZyb21EaWN0aW9uYXJ5IH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBlbGVtZW50c0dyb3VwLmVsZW1lbnRzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZ2V0RGlzYWJsZWQoZWxlbWVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVja1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWYWx1ZU9yT2JqZWN0KGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2soZWxlbWVudCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImJ1aWxkQ2hpbGROYW1lKClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cImJ1aWxkQ2hpbGROYW1lKClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArIGdyb3VwSW5kZXggKyAnXycgKyBpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJnZXREaXNhYmxlZChlbGVtZW50KSA/ICdkaXNhYmxlZCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImdldEF1dG9Db21wbGV0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoZ2V0VmFsdWUoZWxlbWVudCkpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbZm9yXT1cImJ1aWxkQ2hpbGRJZCgpICsgZ3JvdXBJbmRleCArICdfJyArIGlcIlxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldExhYmVsKGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuPC9kaXY+XG4iXX0=
|