@ascentgl/ads-ui 0.0.25 → 0.0.27
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/esm2022/index.mjs +2 -1
- package/esm2022/lib/components/form-fields/area/textarea.component.mjs +3 -3
- package/esm2022/lib/components/form-fields/datepickers/date-picker/datepicker.component.mjs +3 -3
- package/esm2022/lib/components/form-fields/datepickers/datetime-picker/datetimepicker.component.mjs +3 -3
- package/esm2022/lib/components/form-fields/datepickers/time-picker/timepicker.component.mjs +3 -3
- package/esm2022/lib/components/form-fields/dropdowns/dropdown/dropdown.component.mjs +3 -3
- package/esm2022/lib/components/form-fields/dropdowns/multi-select-dropdown/multi-select-dropdown.component.mjs +3 -3
- package/esm2022/lib/components/form-fields/input/input.component.mjs +3 -3
- package/esm2022/lib/components/form-fields/phone-field/index.mjs +2 -0
- package/esm2022/lib/components/form-fields/phone-field/phone-field.component.mjs +52 -0
- package/esm2022/lib/components/form-fields/phone-field/phone-field.module.mjs +62 -0
- package/esm2022/lib/components/form-fields/phone-field/public-api.mjs +3 -0
- package/esm2022/lib/components/form-fields/search-fields/search-dropdown/search-dropdown.component.mjs +3 -3
- package/esm2022/lib/components/form-fields/search-fields/search-input/search-input.component.mjs +3 -3
- package/esm2022/lib/components/form-fields/selection-fields/radio-button/radio-button.component.mjs +3 -3
- package/esm2022/lib/components/modal/modal.component.mjs +3 -4
- package/esm2022/lib/components/modal/modal.module.mjs +3 -4
- package/esm2022/lib/components/snackbars/snackbar/snackbar.component.mjs +4 -5
- package/esm2022/lib/components/snackbars/snackbar/snackbar.module.mjs +3 -4
- package/esm2022/lib/components/tags/create-tag/create-tag.component.mjs +3 -4
- package/esm2022/lib/components/tags/create-tag/create-tag.module.mjs +1 -4
- package/fesm2022/ascentgl-ads-ui.mjs +124 -40
- package/fesm2022/ascentgl-ads-ui.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/components/form-fields/phone-field/index.d.ts +1 -0
- package/lib/components/form-fields/phone-field/phone-field.component.d.ts +17 -0
- package/lib/components/form-fields/phone-field/phone-field.module.d.ts +18 -0
- package/lib/components/form-fields/phone-field/public-api.d.ts +2 -0
- package/lib/components/modal/modal.component.d.ts +4 -1
- package/lib/components/modal/modal.module.d.ts +2 -3
- package/lib/components/snackbars/snackbar/snackbar.component.d.ts +1 -1
- package/lib/components/snackbars/snackbar/snackbar.module.d.ts +2 -3
- package/lib/components/tags/create-tag/create-tag.module.d.ts +3 -4
- package/package.json +20 -19
|
@@ -608,11 +608,11 @@ export class AdsSearchDropdownComponent extends AbstractDropdownComponent {
|
|
|
608
608
|
}
|
|
609
609
|
}
|
|
610
610
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AdsSearchDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
611
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.1", type: AdsSearchDropdownComponent, selector: "ads-search-dropdown", inputs: { maxlength: "maxlength", panelClass: "panelClass", options: "options", staticOptions: "staticOptions", filterOptions: "filterOptions", emitEmptyValues: "emitEmptyValues", loadSuggestionOnInit: "loadSuggestionOnInit", noDataOption: "noDataOption", moreDataOption: "moreDataOption", staticDataOption: "staticDataOption", onEnterKeyDown: "onEnterKeyDown", searchIconClickCallback: "searchIconClickCallback", displayValueFormatter: "displayValueFormatter", useOptionTemplate: "useOptionTemplate", minValueLength: "minValueLength", preventClick: "preventClick", closePanelEnabled: "closePanelEnabled", control: "control", errorMessages: "errorMessages", hint: "hint", id: "id", label: "label", placeholder: "placeholder" }, outputs: { emitSearchValueInput: "emitSearchValueInput" }, queries: [{ propertyName: "optionRef", first: true, predicate: (TemplateRef), descendants: true, isSignal: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "moreDataMatOption", first: true, predicate: ["moreDataMatOption"], descendants: true }, { propertyName: "noDataMatOption", first: true, predicate: ["noDataMatOption"], descendants: true }, { propertyName: "staticDataMatOption", first: true, predicate: ["staticDataMatOption"], descendants: true }, { propertyName: "auto", first: true, predicate: ["auto"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"form-control-row\" [ngStyle]=\"{ width: width }\">\n <mat-form-field\n [ngClass]=\"{\n 'immediate-validation': immediateValidation,\n 'is-open': trigger?.panelOpen,\n invalid: canShowError(),\n 'success-label': canShowSuccess(),\n 'x-small': smallSize,\n }\"\n >\n @if ((label || required) && !smallSize) {\n <mat-label>{{ label }}</mat-label>\n }\n <input\n #input\n [disabled]=\"displayControl.disabled\"\n (keydown.enter)=\"onKeyDown($event.target)\"\n (blur)=\"onBlur()\"\n (input)=\"onInput($event.target)\"\n (focus)=\"onFocus()\"\n type=\"text\"\n [autocomplete]=\"'none'\"\n [id]=\"id\"\n matInput\n [value]=\"getDisplayedValueAsString()\"\n [attr.maxlength]=\"maxlength\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayFn\"\n [disableRipple]=\"true\"\n [class]=\"\n 'ads-dropdown-panel' +\n (fitContent ? ' fit-content' : '') +\n (loading() ? ' loading' : '') +\n (preventClick ? '' : ' clickable') +\n ' ' +\n panelClass\n \"\n >\n @for (option of displayedOptions | keyvalue: applySorting; track $index) {\n <mat-option #opt [value]=\"option\" (mousedown)=\"onOptionMouseDown($event, opt)\">\n @if (useOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"optionRef()\"\n [ngTemplateOutletContext]=\"{ $implicit: option.key, value: option.value }\"\n ></ng-template>\n } @else {\n <span\n [innerHtml]=\"\n displayValueFormatter\n ? displayValueFormatter(\n option!.value! | adsSearchDropdownHighlighter: displayControl.value,\n option.key\n )\n : (option!.value! | adsSearchDropdownHighlighter: displayControl.value)\n \"\n ></span>\n }\n </mat-option>\n }\n\n @if (canUseMoreDataOption) {\n <hr class=\"no-results-hr\" />\n <mat-option #moreDataMatOption class=\"extra\" [disabled]=\"!moreDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: moreDataOption }\"\n />\n </mat-option>\n }\n\n @if (canUseNoDataOption) {\n <mat-option #noDataMatOption class=\"extra\" [disabled]=\"!noDataOption!.onClick\">\n <ng-container [ngTemplateOutlet]=\"extraOptionValue\" [ngTemplateOutletContext]=\"{ $implicit: noDataOption }\" />\n </mat-option>\n }\n\n @if (canUseStaticOption) {\n @if (displayedOptions.size) {\n <hr class=\"no-results-hr\" />\n }\n <mat-option #staticDataMatOption class=\"extra\" [disabled]=\"!staticDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: staticDataOption }\"\n />\n </mat-option>\n }\n </mat-autocomplete>\n\n @if (canClear) {\n <button matTextSuffix type=\"button\" mat-icon-button (click)=\"clear($event)\" class=\"action-icon\">\n <ads-icon name=\"cross\" [size]=\"smallSize ? 'xxs' : 'xs'\" [theme]=\"'iconPrimary'\" class=\"cross-icon\" />\n </button>\n }\n @if (showDropdownIcon) {\n <button matTextSuffix type=\"button\" mat-icon-button (click)=\"togglePanel($event)\" class=\"action-icon\">\n <ads-icon name=\"chevron_down\" [size]=\"smallSize ? 'xxs' : 'xs'\" [theme]=\"'iconPrimary'\" class=\"chevron-down\" />\n </button>\n }\n @if (!staticOptions && loading()) {\n <mat-spinner matTextSuffix diameter=\"22\" />\n }\n @if (!staticOptions && !loading()) {\n <button\n matTextSuffix\n type=\"button\"\n mat-icon-button\n [disabled]=\"!canSearch\"\n (click)=\"canSearch ? onSearchIconClick($event) : null\"\n class=\"action-icon\"\n >\n <ads-icon name=\"search\" size=\"xs\" [theme]=\"'iconPrimary'\" class=\"search-icon\" />\n </button>\n }\n </mat-form-field>\n <div class=\"footer-container\">\n @if (canShowError()) {\n <ads-error [error]=\"displayFirstError()\" [ngStyle]=\"{ width: width }\" />\n } @else if (canShowSuccess()) {\n <ads-success [success]=\"successMessage!\" [ngStyle]=\"{ width: width }\" />\n } @else if (hint) {\n <ads-hint [hint]=\"hint\" [control]=\"valueControl\" [ngStyle]=\"{ width: width }\" />\n }\n </div>\n</div>\n@if (tooltip) {\n <ads-input-tooltip [tooltip]=\"tooltip\" [smallSize]=\"smallSize\" />\n}\n\n<ng-template #extraOptionValue let-option>\n <span\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"onStaticOptionMouseDown($event, option!)\"\n [innerHTML]=\"option!.label\"\n ></span>\n</ng-template>\n", styles: [":host{display:flex;gap:12px;align-items:flex-start}:host::ng-deep mat-form-field{--mdc-filled-text-field-input-text-color: var(--color-medium);--mdc-filled-text-field-error-label-text-color: var(--color-error);--mdc-filled-text-field-label-text-color: var(--color-medium);--mdc-filled-text-field-focus-label-text-color: var(--color-medium);--mdc-filled-text-field-hover-label-text-color: var(--color-medium);--mdc-filled-text-field-label-text-size: 16px}:host::ng-deep mat-form-field .mdc-floating-label--float-above{--mdc-filled-text-field-label-text-size: 12px}:host::ng-deep mat-form-field .mdc-text-field{box-sizing:border-box;border-radius:5px;outline:1px solid var(--color-light);outline-offset:-1px;align-items:center;padding:0 12px;cursor:text;height:48px}:host::ng-deep mat-form-field .mdc-text-field .cross-icon{stroke:var(--color-medium)!important}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--no-label .mat-mdc-form-field-flex{height:100%}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--no-label .mat-mdc-form-field-flex .mat-mdc-form-field-infix{align-items:center}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input{height:24px}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input::-webkit-outer-spin-button,:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input[type=number]{-moz-appearance:textfield}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid{outline:2px solid var(--color-error);outline-offset:-2px}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .cross-icon,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .visibility-eye,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .picker{stroke:var(--color-error)!important}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .chevron-down,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .search-icon{color:var(--color-error)!important}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex{align-items:center}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix{display:flex;align-items:flex-end;width:120px}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix label{width:100%}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix label .mat-mdc-form-field-required-marker{color:var(--mdc-filled-text-field-error-label-text-color)}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-text-suffix{display:flex;align-items:center}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-text-suffix .mat-mdc-icon-button{display:flex;align-items:center;justify-content:center}:host::ng-deep mat-form-field .action-icon{padding:0;--mdc-icon-button-state-layer-size: 35px}:host::ng-deep mat-form-field .action-icon .mat-mdc-button-touch-target{height:unset;width:unset}:host::ng-deep mat-form-field.x-small .mdc-text-field{height:24px;padding:0 8px}:host::ng-deep mat-form-field.x-small .mdc-text-field .mat-mdc-form-field-input-control{font-size:12px;line-height:16px}:host::ng-deep mat-form-field.x-small .action-icon{--mdc-icon-button-state-layer-size: 22px}:host::ng-deep mat-form-field.readonly .mdc-text-field{background-color:var(--mdc-filled-text-field-disabled-container-color);border:none}:host::ng-deep mat-form-field:not(.readonly) .mdc-text-field:hover{background-color:var(--color-light-30);outline:2px solid var(--color-secondary-hover);outline-offset:-2px}:host::ng-deep mat-form-field:not(.readonly) .mdc-text-field:hover .visibility-eye{fill:var(--color-light-30)!important}:host::ng-deep mat-form-field:not(.readonly).mat-focused .mdc-text-field{outline:2px solid var(--color-medium);outline-offset:-2px;background-color:var(--color-muted)}:host::ng-deep mat-form-field:not(.readonly).mat-focused .mdc-text-field .visibility-eye{fill:var(--color-muted)!important}:host::ng-deep mat-form-field.immediate-validation .mdc-text-field{outline:2px solid var(--color-medium);outline-offset:-2px}:host::ng-deep mat-form-field.immediate-validation .mdc-text-field.mdc-text-field--invalid{outline:2px solid var(--color-error);outline-offset:-2px}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{color:var(--mdc-filled-text-field-label-text-color)}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper:before{content:none}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper .mat-mdc-form-field-error-wrapper,:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper .mat-mdc-form-field-hint-wrapper{position:relative;padding:0}:host::ng-deep mat-form-field .mdc-line-ripple{display:none}:host::ng-deep mat-form-field.success-label .mat-mdc-form-field-required-marker,:host::ng-deep mat-form-field.success-label mat-label{color:var(--color-success)!important}:host::ng-deep mat-form-field.success-label .mdc-text-field{outline:2px solid var(--color-success);outline-offset:-2px}:host::ng-deep mat-form-field.success-label .cross-icon,:host::ng-deep mat-form-field.success-label .visibility-eye,:host::ng-deep mat-form-field.success-label .picker{stroke:var(--color-success)!important}:host::ng-deep mat-form-field.success-label .chevron-down,:host::ng-deep mat-form-field.success-label .search-icon{color:var(--color-success)!important}:host::ng-deep mat-form-field.error-label mat-label{color:var(--color-error)}:host::ng-deep mat-hint{display:inline-block}:host::ng-deep .mat-mdc-form-field-hint-spacer{display:none}.info-tooltip{position:relative;top:12px}mat-error{display:flex;padding-top:2px}mat-error .error{display:flex;align-items:flex-start;gap:2px}mat-error .error ads-icon{position:relative;top:2px}\n", "mat-select{--mat-select-trigger-text-line-height: 24px;--mat-select-enabled-trigger-text-color: var(--color-medium);--mat-select-disabled-trigger-text-color: var(--color-medium);--mat-select-placeholder-text-color: var(--color-medium)}mat-option{--mat-option-selected-state-layer-color: var(--color-secondary);--mat-option-selected-state-label-text-color: var(--color-white);--mat-option-hover-state-layer-color: var(--color-secondary-hover);padding:0 12px}mat-option.checkbox{padding:0 12px 0 6px}mat-option:active{background-color:var(--color-secondary-pressed)!important}mat-form-field.pill ::ng-deep .mdc-text-field{border-radius:24px;padding-left:16px;background-color:var(--color-light-30)}mat-form-field.pill ::ng-deep .mdc-text-field:not(.mdc-text-field--invalid){border-color:transparent}mat-form-field ::ng-deep .mdc-text-field .mat-mdc-select-arrow-wrapper{display:none}mat-form-field.x-small mat-select{font-size:12px;line-height:16px}mat-option:hover:not(.mdc-list-item--disabled){color:var(--color-white);background-color:var(--mat-option-hover-state-layer-color)}mat-option:hover:not(.mdc-list-item--disabled).mdc-list-item--selected{background-color:var(--mat-option-hover-state-layer-color)}mat-option:hover:not(.mdc-list-item--disabled) ::ng-deep .mdc-list-item__primary-text{color:var(--color-white)!important}mat-option.mdc-list-item--disabled{opacity:.5}mat-option ::ng-deep .mat-pseudo-checkbox{display:none}mat-option ::ng-deep .mdc-list-item__primary-text{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n", "mat-form-field{width:100%}mat-form-field.invalid ::ng-deep{--mdc-filled-text-field-label-text-color: var(--color-error);--mdc-filled-text-field-hover-label-text-color: var(--color-error);--mdc-filled-text-field-focus-label-text-color: var(--color-error)}mat-form-field.invalid ::ng-deep .mdc-text-field{border-color:var(--color-error)}mat-form-field.invalid ::ng-deep .mdc-text-field ads-icon{stroke:var(--mdc-filled-text-field-error-label-text-color)!important;color:var(--mdc-filled-text-field-error-label-text-color)!important}mat-option.extra{opacity:1;font-size:.75rem;min-height:32px;display:flex}mat-option.extra ::ng-deep .mdc-list-item__primary-text{opacity:1}mat-option ::ng-deep .highlighted-text{font-weight:700}mat-spinner{margin:13px}\n", ".footer-container{min-height:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3.AdsIconComponent, selector: "ads-icon", inputs: ["size", "name", "color", "theme", "stroke"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9.AdsInputTooltipComponent, selector: "ads-input-tooltip", inputs: ["tooltip", "smallSize"] }, { kind: "component", type: i10.AdsErrorComponent, selector: "ads-error", inputs: ["error"] }, { kind: "component", type: i11.AdsHintComponent, selector: "ads-hint", inputs: ["control", "hint"] }, { kind: "component", type: i12.AdsSuccessComponent, selector: "ads-success", inputs: ["success"] }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i13.AdsSearchDropdownHighlighterPipe, name: "adsSearchDropdownHighlighter" }] }); }
|
|
611
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.1", type: AdsSearchDropdownComponent, selector: "ads-search-dropdown", inputs: { maxlength: "maxlength", panelClass: "panelClass", options: "options", staticOptions: "staticOptions", filterOptions: "filterOptions", emitEmptyValues: "emitEmptyValues", loadSuggestionOnInit: "loadSuggestionOnInit", noDataOption: "noDataOption", moreDataOption: "moreDataOption", staticDataOption: "staticDataOption", onEnterKeyDown: "onEnterKeyDown", searchIconClickCallback: "searchIconClickCallback", displayValueFormatter: "displayValueFormatter", useOptionTemplate: "useOptionTemplate", minValueLength: "minValueLength", preventClick: "preventClick", closePanelEnabled: "closePanelEnabled", control: "control", errorMessages: "errorMessages", hint: "hint", id: "id", label: "label", placeholder: "placeholder" }, outputs: { emitSearchValueInput: "emitSearchValueInput" }, queries: [{ propertyName: "optionRef", first: true, predicate: (TemplateRef), descendants: true, isSignal: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "moreDataMatOption", first: true, predicate: ["moreDataMatOption"], descendants: true }, { propertyName: "noDataMatOption", first: true, predicate: ["noDataMatOption"], descendants: true }, { propertyName: "staticDataMatOption", first: true, predicate: ["staticDataMatOption"], descendants: true }, { propertyName: "auto", first: true, predicate: ["auto"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div [ngStyle]=\"{ minWidth: width }\" class=\"ads-field-container\">\n <div [ngStyle]=\"{ width: width }\">\n <mat-form-field\n [ngClass]=\"{\n 'immediate-validation': immediateValidation,\n 'is-open': trigger?.panelOpen,\n invalid: canShowError(),\n 'success-label': canShowSuccess(),\n 'x-small': smallSize,\n }\"\n [ngStyle]=\"{ width: width }\"\n >\n @if ((label || required) && !smallSize) {\n <mat-label>{{ label }}</mat-label>\n }\n <input\n #input\n [disabled]=\"displayControl.disabled\"\n (keydown.enter)=\"onKeyDown($event.target)\"\n (blur)=\"onBlur()\"\n (input)=\"onInput($event.target)\"\n (focus)=\"onFocus()\"\n type=\"text\"\n [autocomplete]=\"'none'\"\n [id]=\"id\"\n matInput\n [value]=\"getDisplayedValueAsString()\"\n [attr.maxlength]=\"maxlength\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayFn\"\n [disableRipple]=\"true\"\n [class]=\"\n 'ads-dropdown-panel' +\n (fitContent ? ' fit-content' : '') +\n (loading() ? ' loading' : '') +\n (preventClick ? '' : ' clickable') +\n ' ' +\n panelClass\n \"\n >\n @for (option of displayedOptions | keyvalue: applySorting; track $index) {\n <mat-option #opt [value]=\"option\" (mousedown)=\"onOptionMouseDown($event, opt)\">\n @if (useOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"optionRef()\"\n [ngTemplateOutletContext]=\"{ $implicit: option.key, value: option.value }\"\n ></ng-template>\n } @else {\n <span\n [innerHtml]=\"\n displayValueFormatter\n ? displayValueFormatter(\n option!.value! | adsSearchDropdownHighlighter: displayControl.value,\n option.key\n )\n : (option!.value! | adsSearchDropdownHighlighter: displayControl.value)\n \"\n ></span>\n }\n </mat-option>\n }\n\n @if (canUseMoreDataOption) {\n <hr class=\"no-results-hr\" />\n <mat-option #moreDataMatOption class=\"extra\" [disabled]=\"!moreDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: moreDataOption }\"\n />\n </mat-option>\n }\n\n @if (canUseNoDataOption) {\n <mat-option #noDataMatOption class=\"extra\" [disabled]=\"!noDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: noDataOption }\"\n />\n </mat-option>\n }\n\n @if (canUseStaticOption) {\n @if (displayedOptions.size) {\n <hr class=\"no-results-hr\" />\n }\n <mat-option #staticDataMatOption class=\"extra\" [disabled]=\"!staticDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: staticDataOption }\"\n />\n </mat-option>\n }\n </mat-autocomplete>\n\n @if (canClear) {\n <button matTextSuffix type=\"button\" mat-icon-button (click)=\"clear($event)\" class=\"action-icon\">\n <ads-icon name=\"cross\" [size]=\"smallSize ? 'xxs' : 'xs'\" [theme]=\"'iconPrimary'\" class=\"cross-icon\" />\n </button>\n }\n @if (showDropdownIcon) {\n <button matTextSuffix type=\"button\" mat-icon-button (click)=\"togglePanel($event)\" class=\"action-icon\">\n <ads-icon\n name=\"chevron_down\"\n [size]=\"smallSize ? 'xxs' : 'xs'\"\n [theme]=\"'iconPrimary'\"\n class=\"chevron-down\"\n />\n </button>\n }\n @if (!staticOptions && loading()) {\n <mat-spinner matTextSuffix diameter=\"22\" />\n }\n @if (!staticOptions && !loading()) {\n <button\n matTextSuffix\n type=\"button\"\n mat-icon-button\n [disabled]=\"!canSearch\"\n (click)=\"canSearch ? onSearchIconClick($event) : null\"\n class=\"action-icon\"\n >\n <ads-icon name=\"search\" size=\"xs\" [theme]=\"'iconPrimary'\" class=\"search-icon\" />\n </button>\n }\n </mat-form-field>\n <div class=\"footer-container\">\n @if (canShowError()) {\n <ads-error [error]=\"displayFirstError()\" [ngStyle]=\"{ width: width }\" />\n } @else if (canShowSuccess()) {\n <ads-success [success]=\"successMessage!\" [ngStyle]=\"{ width: width }\" />\n } @else if (hint) {\n <ads-hint [hint]=\"hint\" [control]=\"valueControl\" [ngStyle]=\"{ width: width }\" />\n }\n </div>\n </div>\n @if (tooltip) {\n <ads-input-tooltip [tooltip]=\"tooltip\" [smallSize]=\"smallSize\" />\n }\n\n <ng-template #extraOptionValue let-option>\n <span\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"onStaticOptionMouseDown($event, option!)\"\n [innerHTML]=\"option!.label\"\n ></span>\n </ng-template>\n</div>\n", styles: [".ads-field-container{display:flex;gap:12px;align-items:flex-start}:host::ng-deep mat-form-field{--mdc-filled-text-field-input-text-color: var(--color-medium);--mdc-filled-text-field-error-label-text-color: var(--color-error);--mdc-filled-text-field-label-text-color: var(--color-medium);--mdc-filled-text-field-focus-label-text-color: var(--color-medium);--mdc-filled-text-field-hover-label-text-color: var(--color-medium);--mdc-filled-text-field-label-text-size: 16px}:host::ng-deep mat-form-field .mdc-floating-label--float-above{--mdc-filled-text-field-label-text-size: 12px}:host::ng-deep mat-form-field .mdc-text-field{box-sizing:border-box;border-radius:5px;outline:1px solid var(--color-light);outline-offset:-1px;align-items:center;padding:0 12px;cursor:text;height:48px}:host::ng-deep mat-form-field .mdc-text-field .cross-icon{stroke:var(--color-medium)!important}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--no-label .mat-mdc-form-field-flex{height:100%}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--no-label .mat-mdc-form-field-flex .mat-mdc-form-field-infix{align-items:center}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input{height:24px}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input::-webkit-outer-spin-button,:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input[type=number]{-moz-appearance:textfield}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid{outline:2px solid var(--color-error);outline-offset:-2px}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .cross-icon,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .visibility-eye,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .picker{stroke:var(--color-error)!important}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .chevron-down,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .search-icon{color:var(--color-error)!important}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex{align-items:center}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix{display:flex;align-items:flex-end;width:120px}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix label{width:100%}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix label .mat-mdc-form-field-required-marker{color:var(--mdc-filled-text-field-error-label-text-color)}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-text-suffix{display:flex;align-items:center}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-text-suffix .mat-mdc-icon-button{display:flex;align-items:center;justify-content:center}:host::ng-deep mat-form-field .action-icon{padding:0;--mdc-icon-button-state-layer-size: 35px}:host::ng-deep mat-form-field .action-icon .mat-mdc-button-touch-target{height:unset;width:unset}:host::ng-deep mat-form-field.x-small .mdc-text-field{height:24px;padding:0 8px}:host::ng-deep mat-form-field.x-small .mdc-text-field .mat-mdc-form-field-input-control{font-size:12px;line-height:16px}:host::ng-deep mat-form-field.x-small .action-icon{--mdc-icon-button-state-layer-size: 22px}:host::ng-deep mat-form-field.readonly .mdc-text-field{background-color:var(--mdc-filled-text-field-disabled-container-color);border:none}:host::ng-deep mat-form-field:not(.readonly) .mdc-text-field:hover{background-color:var(--color-light-30);outline:2px solid var(--color-secondary-hover);outline-offset:-2px}:host::ng-deep mat-form-field:not(.readonly) .mdc-text-field:hover .visibility-eye{fill:var(--color-light-30)!important}:host::ng-deep mat-form-field:not(.readonly).mat-focused .mdc-text-field{outline:2px solid var(--color-medium);outline-offset:-2px;background-color:var(--color-muted)}:host::ng-deep mat-form-field:not(.readonly).mat-focused .mdc-text-field .visibility-eye{fill:var(--color-muted)!important}:host::ng-deep mat-form-field.immediate-validation .mdc-text-field{outline:2px solid var(--color-medium);outline-offset:-2px}:host::ng-deep mat-form-field.immediate-validation .mdc-text-field.mdc-text-field--invalid{outline:2px solid var(--color-error);outline-offset:-2px}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{color:var(--mdc-filled-text-field-label-text-color)}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper:before{content:none}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper .mat-mdc-form-field-error-wrapper,:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper .mat-mdc-form-field-hint-wrapper{position:relative;padding:0}:host::ng-deep mat-form-field .mdc-line-ripple{display:none}:host::ng-deep mat-form-field.success-label .mat-mdc-form-field-required-marker,:host::ng-deep mat-form-field.success-label mat-label{color:var(--color-success)!important}:host::ng-deep mat-form-field.success-label .mdc-text-field{outline:2px solid var(--color-success);outline-offset:-2px}:host::ng-deep mat-form-field.success-label .cross-icon,:host::ng-deep mat-form-field.success-label .visibility-eye,:host::ng-deep mat-form-field.success-label .picker{stroke:var(--color-success)!important}:host::ng-deep mat-form-field.success-label .chevron-down,:host::ng-deep mat-form-field.success-label .search-icon{color:var(--color-success)!important}:host::ng-deep mat-form-field.error-label mat-label{color:var(--color-error)}:host::ng-deep mat-hint{display:inline-block}:host::ng-deep .mat-mdc-form-field-hint-spacer{display:none}.info-tooltip{position:relative;top:12px}mat-error{display:flex;padding-top:2px}mat-error .error{display:flex;align-items:flex-start;gap:2px}mat-error .error ads-icon{position:relative;top:2px}\n", "mat-select{--mat-select-trigger-text-line-height: 24px;--mat-select-enabled-trigger-text-color: var(--color-medium);--mat-select-disabled-trigger-text-color: var(--color-medium);--mat-select-placeholder-text-color: var(--color-medium)}mat-option{--mat-option-selected-state-layer-color: var(--color-secondary);--mat-option-selected-state-label-text-color: var(--color-white);--mat-option-hover-state-layer-color: var(--color-secondary-hover);padding:0 12px}mat-option.checkbox{padding:0 12px 0 6px}mat-option:active{background-color:var(--color-secondary-pressed)!important}mat-form-field.pill ::ng-deep .mdc-text-field{border-radius:24px;padding-left:16px;background-color:var(--color-light-30)}mat-form-field.pill ::ng-deep .mdc-text-field:not(.mdc-text-field--invalid){border-color:transparent}mat-form-field ::ng-deep .mdc-text-field .mat-mdc-select-arrow-wrapper{display:none}mat-form-field.x-small mat-select{font-size:12px;line-height:16px}mat-option:hover:not(.mdc-list-item--disabled){color:var(--color-white);background-color:var(--mat-option-hover-state-layer-color)}mat-option:hover:not(.mdc-list-item--disabled).mdc-list-item--selected{background-color:var(--mat-option-hover-state-layer-color)}mat-option:hover:not(.mdc-list-item--disabled) ::ng-deep .mdc-list-item__primary-text{color:var(--color-white)!important}mat-option.mdc-list-item--disabled{opacity:.5}mat-option ::ng-deep .mat-pseudo-checkbox{display:none}mat-option ::ng-deep .mdc-list-item__primary-text{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n", "mat-form-field{width:100%}mat-form-field.invalid ::ng-deep{--mdc-filled-text-field-label-text-color: var(--color-error);--mdc-filled-text-field-hover-label-text-color: var(--color-error);--mdc-filled-text-field-focus-label-text-color: var(--color-error)}mat-form-field.invalid ::ng-deep .mdc-text-field{border-color:var(--color-error)}mat-form-field.invalid ::ng-deep .mdc-text-field ads-icon{stroke:var(--mdc-filled-text-field-error-label-text-color)!important;color:var(--mdc-filled-text-field-error-label-text-color)!important}mat-option.extra{opacity:1;font-size:.75rem;min-height:32px;display:flex}mat-option.extra ::ng-deep .mdc-list-item__primary-text{opacity:1}mat-option ::ng-deep .highlighted-text{font-weight:700}mat-spinner{margin:13px}\n", ".footer-container{min-height:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3.AdsIconComponent, selector: "ads-icon", inputs: ["size", "name", "color", "theme", "stroke"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9.AdsInputTooltipComponent, selector: "ads-input-tooltip", inputs: ["tooltip", "smallSize"] }, { kind: "component", type: i10.AdsErrorComponent, selector: "ads-error", inputs: ["error"] }, { kind: "component", type: i11.AdsHintComponent, selector: "ads-hint", inputs: ["control", "hint"] }, { kind: "component", type: i12.AdsSuccessComponent, selector: "ads-success", inputs: ["success"] }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i13.AdsSearchDropdownHighlighterPipe, name: "adsSearchDropdownHighlighter" }] }); }
|
|
612
612
|
}
|
|
613
613
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AdsSearchDropdownComponent, decorators: [{
|
|
614
614
|
type: Component,
|
|
615
|
-
args: [{ selector: 'ads-search-dropdown', template: "<div class=\"form-control-row\" [ngStyle]=\"{ width: width }\">\n <mat-form-field\n [ngClass]=\"{\n 'immediate-validation': immediateValidation,\n 'is-open': trigger?.panelOpen,\n invalid: canShowError(),\n 'success-label': canShowSuccess(),\n 'x-small': smallSize,\n }\"\n >\n @if ((label || required) && !smallSize) {\n <mat-label>{{ label }}</mat-label>\n }\n <input\n #input\n [disabled]=\"displayControl.disabled\"\n (keydown.enter)=\"onKeyDown($event.target)\"\n (blur)=\"onBlur()\"\n (input)=\"onInput($event.target)\"\n (focus)=\"onFocus()\"\n type=\"text\"\n [autocomplete]=\"'none'\"\n [id]=\"id\"\n matInput\n [value]=\"getDisplayedValueAsString()\"\n [attr.maxlength]=\"maxlength\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayFn\"\n [disableRipple]=\"true\"\n [class]=\"\n 'ads-dropdown-panel' +\n (fitContent ? ' fit-content' : '') +\n (loading() ? ' loading' : '') +\n (preventClick ? '' : ' clickable') +\n ' ' +\n panelClass\n \"\n >\n @for (option of displayedOptions | keyvalue: applySorting; track $index) {\n <mat-option #opt [value]=\"option\" (mousedown)=\"onOptionMouseDown($event, opt)\">\n @if (useOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"optionRef()\"\n [ngTemplateOutletContext]=\"{ $implicit: option.key, value: option.value }\"\n ></ng-template>\n } @else {\n <span\n [innerHtml]=\"\n displayValueFormatter\n ? displayValueFormatter(\n option!.value! | adsSearchDropdownHighlighter: displayControl.value,\n option.key\n )\n : (option!.value! | adsSearchDropdownHighlighter: displayControl.value)\n \"\n ></span>\n }\n </mat-option>\n }\n\n @if (canUseMoreDataOption) {\n <hr class=\"no-results-hr\" />\n <mat-option #moreDataMatOption class=\"extra\" [disabled]=\"!moreDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: moreDataOption }\"\n />\n </mat-option>\n }\n\n @if (canUseNoDataOption) {\n <mat-option #noDataMatOption class=\"extra\" [disabled]=\"!noDataOption!.onClick\">\n <ng-container [ngTemplateOutlet]=\"extraOptionValue\" [ngTemplateOutletContext]=\"{ $implicit: noDataOption }\" />\n </mat-option>\n }\n\n @if (canUseStaticOption) {\n @if (displayedOptions.size) {\n <hr class=\"no-results-hr\" />\n }\n <mat-option #staticDataMatOption class=\"extra\" [disabled]=\"!staticDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: staticDataOption }\"\n />\n </mat-option>\n }\n </mat-autocomplete>\n\n @if (canClear) {\n <button matTextSuffix type=\"button\" mat-icon-button (click)=\"clear($event)\" class=\"action-icon\">\n <ads-icon name=\"cross\" [size]=\"smallSize ? 'xxs' : 'xs'\" [theme]=\"'iconPrimary'\" class=\"cross-icon\" />\n </button>\n }\n @if (showDropdownIcon) {\n <button matTextSuffix type=\"button\" mat-icon-button (click)=\"togglePanel($event)\" class=\"action-icon\">\n <ads-icon name=\"chevron_down\" [size]=\"smallSize ? 'xxs' : 'xs'\" [theme]=\"'iconPrimary'\" class=\"chevron-down\" />\n </button>\n }\n @if (!staticOptions && loading()) {\n <mat-spinner matTextSuffix diameter=\"22\" />\n }\n @if (!staticOptions && !loading()) {\n <button\n matTextSuffix\n type=\"button\"\n mat-icon-button\n [disabled]=\"!canSearch\"\n (click)=\"canSearch ? onSearchIconClick($event) : null\"\n class=\"action-icon\"\n >\n <ads-icon name=\"search\" size=\"xs\" [theme]=\"'iconPrimary'\" class=\"search-icon\" />\n </button>\n }\n </mat-form-field>\n <div class=\"footer-container\">\n @if (canShowError()) {\n <ads-error [error]=\"displayFirstError()\" [ngStyle]=\"{ width: width }\" />\n } @else if (canShowSuccess()) {\n <ads-success [success]=\"successMessage!\" [ngStyle]=\"{ width: width }\" />\n } @else if (hint) {\n <ads-hint [hint]=\"hint\" [control]=\"valueControl\" [ngStyle]=\"{ width: width }\" />\n }\n </div>\n</div>\n@if (tooltip) {\n <ads-input-tooltip [tooltip]=\"tooltip\" [smallSize]=\"smallSize\" />\n}\n\n<ng-template #extraOptionValue let-option>\n <span\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"onStaticOptionMouseDown($event, option!)\"\n [innerHTML]=\"option!.label\"\n ></span>\n</ng-template>\n", styles: [":host{display:flex;gap:12px;align-items:flex-start}:host::ng-deep mat-form-field{--mdc-filled-text-field-input-text-color: var(--color-medium);--mdc-filled-text-field-error-label-text-color: var(--color-error);--mdc-filled-text-field-label-text-color: var(--color-medium);--mdc-filled-text-field-focus-label-text-color: var(--color-medium);--mdc-filled-text-field-hover-label-text-color: var(--color-medium);--mdc-filled-text-field-label-text-size: 16px}:host::ng-deep mat-form-field .mdc-floating-label--float-above{--mdc-filled-text-field-label-text-size: 12px}:host::ng-deep mat-form-field .mdc-text-field{box-sizing:border-box;border-radius:5px;outline:1px solid var(--color-light);outline-offset:-1px;align-items:center;padding:0 12px;cursor:text;height:48px}:host::ng-deep mat-form-field .mdc-text-field .cross-icon{stroke:var(--color-medium)!important}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--no-label .mat-mdc-form-field-flex{height:100%}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--no-label .mat-mdc-form-field-flex .mat-mdc-form-field-infix{align-items:center}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input{height:24px}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input::-webkit-outer-spin-button,:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input[type=number]{-moz-appearance:textfield}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid{outline:2px solid var(--color-error);outline-offset:-2px}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .cross-icon,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .visibility-eye,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .picker{stroke:var(--color-error)!important}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .chevron-down,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .search-icon{color:var(--color-error)!important}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex{align-items:center}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix{display:flex;align-items:flex-end;width:120px}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix label{width:100%}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix label .mat-mdc-form-field-required-marker{color:var(--mdc-filled-text-field-error-label-text-color)}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-text-suffix{display:flex;align-items:center}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-text-suffix .mat-mdc-icon-button{display:flex;align-items:center;justify-content:center}:host::ng-deep mat-form-field .action-icon{padding:0;--mdc-icon-button-state-layer-size: 35px}:host::ng-deep mat-form-field .action-icon .mat-mdc-button-touch-target{height:unset;width:unset}:host::ng-deep mat-form-field.x-small .mdc-text-field{height:24px;padding:0 8px}:host::ng-deep mat-form-field.x-small .mdc-text-field .mat-mdc-form-field-input-control{font-size:12px;line-height:16px}:host::ng-deep mat-form-field.x-small .action-icon{--mdc-icon-button-state-layer-size: 22px}:host::ng-deep mat-form-field.readonly .mdc-text-field{background-color:var(--mdc-filled-text-field-disabled-container-color);border:none}:host::ng-deep mat-form-field:not(.readonly) .mdc-text-field:hover{background-color:var(--color-light-30);outline:2px solid var(--color-secondary-hover);outline-offset:-2px}:host::ng-deep mat-form-field:not(.readonly) .mdc-text-field:hover .visibility-eye{fill:var(--color-light-30)!important}:host::ng-deep mat-form-field:not(.readonly).mat-focused .mdc-text-field{outline:2px solid var(--color-medium);outline-offset:-2px;background-color:var(--color-muted)}:host::ng-deep mat-form-field:not(.readonly).mat-focused .mdc-text-field .visibility-eye{fill:var(--color-muted)!important}:host::ng-deep mat-form-field.immediate-validation .mdc-text-field{outline:2px solid var(--color-medium);outline-offset:-2px}:host::ng-deep mat-form-field.immediate-validation .mdc-text-field.mdc-text-field--invalid{outline:2px solid var(--color-error);outline-offset:-2px}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{color:var(--mdc-filled-text-field-label-text-color)}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper:before{content:none}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper .mat-mdc-form-field-error-wrapper,:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper .mat-mdc-form-field-hint-wrapper{position:relative;padding:0}:host::ng-deep mat-form-field .mdc-line-ripple{display:none}:host::ng-deep mat-form-field.success-label .mat-mdc-form-field-required-marker,:host::ng-deep mat-form-field.success-label mat-label{color:var(--color-success)!important}:host::ng-deep mat-form-field.success-label .mdc-text-field{outline:2px solid var(--color-success);outline-offset:-2px}:host::ng-deep mat-form-field.success-label .cross-icon,:host::ng-deep mat-form-field.success-label .visibility-eye,:host::ng-deep mat-form-field.success-label .picker{stroke:var(--color-success)!important}:host::ng-deep mat-form-field.success-label .chevron-down,:host::ng-deep mat-form-field.success-label .search-icon{color:var(--color-success)!important}:host::ng-deep mat-form-field.error-label mat-label{color:var(--color-error)}:host::ng-deep mat-hint{display:inline-block}:host::ng-deep .mat-mdc-form-field-hint-spacer{display:none}.info-tooltip{position:relative;top:12px}mat-error{display:flex;padding-top:2px}mat-error .error{display:flex;align-items:flex-start;gap:2px}mat-error .error ads-icon{position:relative;top:2px}\n", "mat-select{--mat-select-trigger-text-line-height: 24px;--mat-select-enabled-trigger-text-color: var(--color-medium);--mat-select-disabled-trigger-text-color: var(--color-medium);--mat-select-placeholder-text-color: var(--color-medium)}mat-option{--mat-option-selected-state-layer-color: var(--color-secondary);--mat-option-selected-state-label-text-color: var(--color-white);--mat-option-hover-state-layer-color: var(--color-secondary-hover);padding:0 12px}mat-option.checkbox{padding:0 12px 0 6px}mat-option:active{background-color:var(--color-secondary-pressed)!important}mat-form-field.pill ::ng-deep .mdc-text-field{border-radius:24px;padding-left:16px;background-color:var(--color-light-30)}mat-form-field.pill ::ng-deep .mdc-text-field:not(.mdc-text-field--invalid){border-color:transparent}mat-form-field ::ng-deep .mdc-text-field .mat-mdc-select-arrow-wrapper{display:none}mat-form-field.x-small mat-select{font-size:12px;line-height:16px}mat-option:hover:not(.mdc-list-item--disabled){color:var(--color-white);background-color:var(--mat-option-hover-state-layer-color)}mat-option:hover:not(.mdc-list-item--disabled).mdc-list-item--selected{background-color:var(--mat-option-hover-state-layer-color)}mat-option:hover:not(.mdc-list-item--disabled) ::ng-deep .mdc-list-item__primary-text{color:var(--color-white)!important}mat-option.mdc-list-item--disabled{opacity:.5}mat-option ::ng-deep .mat-pseudo-checkbox{display:none}mat-option ::ng-deep .mdc-list-item__primary-text{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n", "mat-form-field{width:100%}mat-form-field.invalid ::ng-deep{--mdc-filled-text-field-label-text-color: var(--color-error);--mdc-filled-text-field-hover-label-text-color: var(--color-error);--mdc-filled-text-field-focus-label-text-color: var(--color-error)}mat-form-field.invalid ::ng-deep .mdc-text-field{border-color:var(--color-error)}mat-form-field.invalid ::ng-deep .mdc-text-field ads-icon{stroke:var(--mdc-filled-text-field-error-label-text-color)!important;color:var(--mdc-filled-text-field-error-label-text-color)!important}mat-option.extra{opacity:1;font-size:.75rem;min-height:32px;display:flex}mat-option.extra ::ng-deep .mdc-list-item__primary-text{opacity:1}mat-option ::ng-deep .highlighted-text{font-weight:700}mat-spinner{margin:13px}\n", ".footer-container{min-height:20px}\n"] }]
|
|
615
|
+
args: [{ selector: 'ads-search-dropdown', template: "<div [ngStyle]=\"{ minWidth: width }\" class=\"ads-field-container\">\n <div [ngStyle]=\"{ width: width }\">\n <mat-form-field\n [ngClass]=\"{\n 'immediate-validation': immediateValidation,\n 'is-open': trigger?.panelOpen,\n invalid: canShowError(),\n 'success-label': canShowSuccess(),\n 'x-small': smallSize,\n }\"\n [ngStyle]=\"{ width: width }\"\n >\n @if ((label || required) && !smallSize) {\n <mat-label>{{ label }}</mat-label>\n }\n <input\n #input\n [disabled]=\"displayControl.disabled\"\n (keydown.enter)=\"onKeyDown($event.target)\"\n (blur)=\"onBlur()\"\n (input)=\"onInput($event.target)\"\n (focus)=\"onFocus()\"\n type=\"text\"\n [autocomplete]=\"'none'\"\n [id]=\"id\"\n matInput\n [value]=\"getDisplayedValueAsString()\"\n [attr.maxlength]=\"maxlength\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayFn\"\n [disableRipple]=\"true\"\n [class]=\"\n 'ads-dropdown-panel' +\n (fitContent ? ' fit-content' : '') +\n (loading() ? ' loading' : '') +\n (preventClick ? '' : ' clickable') +\n ' ' +\n panelClass\n \"\n >\n @for (option of displayedOptions | keyvalue: applySorting; track $index) {\n <mat-option #opt [value]=\"option\" (mousedown)=\"onOptionMouseDown($event, opt)\">\n @if (useOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"optionRef()\"\n [ngTemplateOutletContext]=\"{ $implicit: option.key, value: option.value }\"\n ></ng-template>\n } @else {\n <span\n [innerHtml]=\"\n displayValueFormatter\n ? displayValueFormatter(\n option!.value! | adsSearchDropdownHighlighter: displayControl.value,\n option.key\n )\n : (option!.value! | adsSearchDropdownHighlighter: displayControl.value)\n \"\n ></span>\n }\n </mat-option>\n }\n\n @if (canUseMoreDataOption) {\n <hr class=\"no-results-hr\" />\n <mat-option #moreDataMatOption class=\"extra\" [disabled]=\"!moreDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: moreDataOption }\"\n />\n </mat-option>\n }\n\n @if (canUseNoDataOption) {\n <mat-option #noDataMatOption class=\"extra\" [disabled]=\"!noDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: noDataOption }\"\n />\n </mat-option>\n }\n\n @if (canUseStaticOption) {\n @if (displayedOptions.size) {\n <hr class=\"no-results-hr\" />\n }\n <mat-option #staticDataMatOption class=\"extra\" [disabled]=\"!staticDataOption!.onClick\">\n <ng-container\n [ngTemplateOutlet]=\"extraOptionValue\"\n [ngTemplateOutletContext]=\"{ $implicit: staticDataOption }\"\n />\n </mat-option>\n }\n </mat-autocomplete>\n\n @if (canClear) {\n <button matTextSuffix type=\"button\" mat-icon-button (click)=\"clear($event)\" class=\"action-icon\">\n <ads-icon name=\"cross\" [size]=\"smallSize ? 'xxs' : 'xs'\" [theme]=\"'iconPrimary'\" class=\"cross-icon\" />\n </button>\n }\n @if (showDropdownIcon) {\n <button matTextSuffix type=\"button\" mat-icon-button (click)=\"togglePanel($event)\" class=\"action-icon\">\n <ads-icon\n name=\"chevron_down\"\n [size]=\"smallSize ? 'xxs' : 'xs'\"\n [theme]=\"'iconPrimary'\"\n class=\"chevron-down\"\n />\n </button>\n }\n @if (!staticOptions && loading()) {\n <mat-spinner matTextSuffix diameter=\"22\" />\n }\n @if (!staticOptions && !loading()) {\n <button\n matTextSuffix\n type=\"button\"\n mat-icon-button\n [disabled]=\"!canSearch\"\n (click)=\"canSearch ? onSearchIconClick($event) : null\"\n class=\"action-icon\"\n >\n <ads-icon name=\"search\" size=\"xs\" [theme]=\"'iconPrimary'\" class=\"search-icon\" />\n </button>\n }\n </mat-form-field>\n <div class=\"footer-container\">\n @if (canShowError()) {\n <ads-error [error]=\"displayFirstError()\" [ngStyle]=\"{ width: width }\" />\n } @else if (canShowSuccess()) {\n <ads-success [success]=\"successMessage!\" [ngStyle]=\"{ width: width }\" />\n } @else if (hint) {\n <ads-hint [hint]=\"hint\" [control]=\"valueControl\" [ngStyle]=\"{ width: width }\" />\n }\n </div>\n </div>\n @if (tooltip) {\n <ads-input-tooltip [tooltip]=\"tooltip\" [smallSize]=\"smallSize\" />\n }\n\n <ng-template #extraOptionValue let-option>\n <span\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"onStaticOptionMouseDown($event, option!)\"\n [innerHTML]=\"option!.label\"\n ></span>\n </ng-template>\n</div>\n", styles: [".ads-field-container{display:flex;gap:12px;align-items:flex-start}:host::ng-deep mat-form-field{--mdc-filled-text-field-input-text-color: var(--color-medium);--mdc-filled-text-field-error-label-text-color: var(--color-error);--mdc-filled-text-field-label-text-color: var(--color-medium);--mdc-filled-text-field-focus-label-text-color: var(--color-medium);--mdc-filled-text-field-hover-label-text-color: var(--color-medium);--mdc-filled-text-field-label-text-size: 16px}:host::ng-deep mat-form-field .mdc-floating-label--float-above{--mdc-filled-text-field-label-text-size: 12px}:host::ng-deep mat-form-field .mdc-text-field{box-sizing:border-box;border-radius:5px;outline:1px solid var(--color-light);outline-offset:-1px;align-items:center;padding:0 12px;cursor:text;height:48px}:host::ng-deep mat-form-field .mdc-text-field .cross-icon{stroke:var(--color-medium)!important}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--no-label .mat-mdc-form-field-flex{height:100%}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--no-label .mat-mdc-form-field-flex .mat-mdc-form-field-infix{align-items:center}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input{height:24px}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input::-webkit-outer-spin-button,:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}:host::ng-deep mat-form-field .mdc-text-field:not(.mdc-text-field--no-label) .mat-mdc-form-field-infix input[type=number]{-moz-appearance:textfield}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid{outline:2px solid var(--color-error);outline-offset:-2px}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .cross-icon,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .visibility-eye,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .picker{stroke:var(--color-error)!important}:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .chevron-down,:host::ng-deep mat-form-field .mdc-text-field.mdc-text-field--invalid .search-icon{color:var(--color-error)!important}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex{align-items:center}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix{display:flex;align-items:flex-end;width:120px}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix label{width:100%}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix label .mat-mdc-form-field-required-marker{color:var(--mdc-filled-text-field-error-label-text-color)}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-text-suffix{display:flex;align-items:center}:host::ng-deep mat-form-field .mdc-text-field .mat-mdc-form-field-text-suffix .mat-mdc-icon-button{display:flex;align-items:center;justify-content:center}:host::ng-deep mat-form-field .action-icon{padding:0;--mdc-icon-button-state-layer-size: 35px}:host::ng-deep mat-form-field .action-icon .mat-mdc-button-touch-target{height:unset;width:unset}:host::ng-deep mat-form-field.x-small .mdc-text-field{height:24px;padding:0 8px}:host::ng-deep mat-form-field.x-small .mdc-text-field .mat-mdc-form-field-input-control{font-size:12px;line-height:16px}:host::ng-deep mat-form-field.x-small .action-icon{--mdc-icon-button-state-layer-size: 22px}:host::ng-deep mat-form-field.readonly .mdc-text-field{background-color:var(--mdc-filled-text-field-disabled-container-color);border:none}:host::ng-deep mat-form-field:not(.readonly) .mdc-text-field:hover{background-color:var(--color-light-30);outline:2px solid var(--color-secondary-hover);outline-offset:-2px}:host::ng-deep mat-form-field:not(.readonly) .mdc-text-field:hover .visibility-eye{fill:var(--color-light-30)!important}:host::ng-deep mat-form-field:not(.readonly).mat-focused .mdc-text-field{outline:2px solid var(--color-medium);outline-offset:-2px;background-color:var(--color-muted)}:host::ng-deep mat-form-field:not(.readonly).mat-focused .mdc-text-field .visibility-eye{fill:var(--color-muted)!important}:host::ng-deep mat-form-field.immediate-validation .mdc-text-field{outline:2px solid var(--color-medium);outline-offset:-2px}:host::ng-deep mat-form-field.immediate-validation .mdc-text-field.mdc-text-field--invalid{outline:2px solid var(--color-error);outline-offset:-2px}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{color:var(--mdc-filled-text-field-label-text-color)}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper:before{content:none}:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper .mat-mdc-form-field-error-wrapper,:host::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper .mat-mdc-form-field-hint-wrapper{position:relative;padding:0}:host::ng-deep mat-form-field .mdc-line-ripple{display:none}:host::ng-deep mat-form-field.success-label .mat-mdc-form-field-required-marker,:host::ng-deep mat-form-field.success-label mat-label{color:var(--color-success)!important}:host::ng-deep mat-form-field.success-label .mdc-text-field{outline:2px solid var(--color-success);outline-offset:-2px}:host::ng-deep mat-form-field.success-label .cross-icon,:host::ng-deep mat-form-field.success-label .visibility-eye,:host::ng-deep mat-form-field.success-label .picker{stroke:var(--color-success)!important}:host::ng-deep mat-form-field.success-label .chevron-down,:host::ng-deep mat-form-field.success-label .search-icon{color:var(--color-success)!important}:host::ng-deep mat-form-field.error-label mat-label{color:var(--color-error)}:host::ng-deep mat-hint{display:inline-block}:host::ng-deep .mat-mdc-form-field-hint-spacer{display:none}.info-tooltip{position:relative;top:12px}mat-error{display:flex;padding-top:2px}mat-error .error{display:flex;align-items:flex-start;gap:2px}mat-error .error ads-icon{position:relative;top:2px}\n", "mat-select{--mat-select-trigger-text-line-height: 24px;--mat-select-enabled-trigger-text-color: var(--color-medium);--mat-select-disabled-trigger-text-color: var(--color-medium);--mat-select-placeholder-text-color: var(--color-medium)}mat-option{--mat-option-selected-state-layer-color: var(--color-secondary);--mat-option-selected-state-label-text-color: var(--color-white);--mat-option-hover-state-layer-color: var(--color-secondary-hover);padding:0 12px}mat-option.checkbox{padding:0 12px 0 6px}mat-option:active{background-color:var(--color-secondary-pressed)!important}mat-form-field.pill ::ng-deep .mdc-text-field{border-radius:24px;padding-left:16px;background-color:var(--color-light-30)}mat-form-field.pill ::ng-deep .mdc-text-field:not(.mdc-text-field--invalid){border-color:transparent}mat-form-field ::ng-deep .mdc-text-field .mat-mdc-select-arrow-wrapper{display:none}mat-form-field.x-small mat-select{font-size:12px;line-height:16px}mat-option:hover:not(.mdc-list-item--disabled){color:var(--color-white);background-color:var(--mat-option-hover-state-layer-color)}mat-option:hover:not(.mdc-list-item--disabled).mdc-list-item--selected{background-color:var(--mat-option-hover-state-layer-color)}mat-option:hover:not(.mdc-list-item--disabled) ::ng-deep .mdc-list-item__primary-text{color:var(--color-white)!important}mat-option.mdc-list-item--disabled{opacity:.5}mat-option ::ng-deep .mat-pseudo-checkbox{display:none}mat-option ::ng-deep .mdc-list-item__primary-text{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n", "mat-form-field{width:100%}mat-form-field.invalid ::ng-deep{--mdc-filled-text-field-label-text-color: var(--color-error);--mdc-filled-text-field-hover-label-text-color: var(--color-error);--mdc-filled-text-field-focus-label-text-color: var(--color-error)}mat-form-field.invalid ::ng-deep .mdc-text-field{border-color:var(--color-error)}mat-form-field.invalid ::ng-deep .mdc-text-field ads-icon{stroke:var(--mdc-filled-text-field-error-label-text-color)!important;color:var(--mdc-filled-text-field-error-label-text-color)!important}mat-option.extra{opacity:1;font-size:.75rem;min-height:32px;display:flex}mat-option.extra ::ng-deep .mdc-list-item__primary-text{opacity:1}mat-option ::ng-deep .highlighted-text{font-weight:700}mat-spinner{margin:13px}\n", ".footer-container{min-height:20px}\n"] }]
|
|
616
616
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { maxlength: [{
|
|
617
617
|
type: Input
|
|
618
618
|
}], panelClass: [{
|
|
@@ -680,4 +680,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
|
|
|
680
680
|
type: ViewChild,
|
|
681
681
|
args: ['auto']
|
|
682
682
|
}] } });
|
|
683
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRzLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWZpZWxkcy9zZWFyY2gtZmllbGRzL3NlYXJjaC1kcm9wZG93bi9zZWFyY2gtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZHMtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0tZmllbGRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWRyb3Bkb3duL3NlYXJjaC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQWdDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RixPQUFPLEVBQ0wseUJBQXlCLEdBSTFCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQU1wRSxPQUFPLEVBQUUsU0FBUyxF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K0JBQ0UscUJBQXFCO3VJQWlCdEIsU0FBUztzQkFBakIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT08sT0FBTztzQkFBbkIsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdXLElBQUk7c0JBQXBCLEtBQUs7Z0JBR0csRUFBRTtzQkFBVixLQUFLO2dCQUdXLEtBQUs7c0JBQXJCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFPSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRzRCLE9BQU87c0JBQXpDLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUdiLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFHYyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUdBLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUdNLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBR2IsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgY29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgc2lnbmFsLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2UsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdERyb3Bkb3duQ29tcG9uZW50LFxuICBEcm9wZG93bkNvbXBvbmVudERpc3BsYXllZE9wdGlvbnMsXG4gIERyb3Bkb3duQ29tcG9uZW50T3B0aW9uLFxuICBEcm9wZG93bkNvbXBvbmVudE9wdGlvbnMsXG59IGZyb20gJy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC5kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGFkc0ljb25DaGV2cm9uRG93biwgYWRzSWNvblNlYXJjaCB9IGZyb20gJ0Bhc2NlbnRnbC9hZHMtaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgRG9tSGVscGVyLCBHRU5FUklDX0NPTExFQ1RJT04gfSBmcm9tICdAYXNjZW50Z2wvYWRzLXV0aWxzJztcbmltcG9ydCB7XG4gIFNlYXJjaERyb3Bkb3duQ29tcG9uZW50T3B0aW9ucyxcbiAgU2VhcmNoRHJvcGRvd25EaXNwbGF5Q29udHJvbFZhbHVlLFxuICBTZWFyY2hEcm9wZG93blN0YXRpY09wdGlvbixcbn0gZnJvbSAnLi9zZWFyY2gtZHJvcGRvd24uY29tcG9uZW50LnR5cGVzJztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgVEVNUExBVEVfVFlQRSB9IGZyb20gJy4uLy4uL2NvbW1vbi9kcm9wZG93bi1vcHRpb24tdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbnR5cGUgQ3VzdG9tTWF0T3B0aW9uID0gKE1hdE9wdGlvbiAmIHsgbW9kaWZpZWQ/OiBib29sZWFuIH0pIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWRzLXNlYXJjaC1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vLi4vaW5wdXQvaW5wdXQuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi8uLi9kcm9wZG93bnMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxuICAgICcuL3NlYXJjaC1kcm9wZG93bi5jb21wb25lbnQuc2NzcycsXG4gICAgJy4uLy4uL2NvbW1vbi9jb21tb24uaW5wdXQuY29tcG9uZW50LnNjc3MnLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBZHNTZWFyY2hEcm9wZG93bkNvbXBvbmVudFxuICBleHRlbmRzIEFic3RyYWN0RHJvcGRvd25Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKiBAaWdub3JlICovXG4gIG9wdGlvblJlZiA9IGNvbnRlbnRDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjxURU1QTEFURV9UWVBFPj4oVGVtcGxhdGVSZWY8VEVNUExBVEVfVFlQRT4pO1xuXG4gIC8qKiBNYXhpbXVtIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGluIHRoZSBpbnB1dCBmaWVsZCAqL1xuICBASW5wdXQoKSBtYXhsZW5ndGggPSAyNTU7XG5cbiAgLyoqIFNldCB0byBhZGRpdGlvbmFsIHBhbmVDbGFzcyBpZiByZXF1aXJlZCovXG4gIEBJbnB1dCgpIHBhbmVsQ2xhc3MgPSAnJztcblxuICAvKiogQ29udGFpbnMgZHJvcGRvd24gb3B0aW9ucyAqL1xuICBASW5wdXQoKSBvcHRpb25zPzogT2JzZXJ2YWJsZTxTZWFyY2hEcm9wZG93bkNvbXBvbmVudE9wdGlvbnM+O1xuXG4gIC8qKiBJZiBcInRydWVcIiwgY29tcG9uZW50IHdpbGwgbm90IHRyeSB0byBsb2FkIGFkZGl0aW9uYWwgb3B0aW9ucyAqL1xuICBASW5wdXQoKSBzdGF0aWNPcHRpb25zID0gZmFsc2U7XG5cbiAgLyoqIElmIFwidHJ1ZVwiIGFuZCBcInN0YXRpY09wdGlvbnNcIiBpcyBhbHNvIHRydWUgYWRkaXRpb25hbCBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkIHRvIHJlbW92ZSBvcHRpb25zIHRoYXQgZG8gbm90IG1hdGNoIGlucHV0IHZhbHVlICovXG4gIEBJbnB1dCgpIGZpbHRlck9wdGlvbnMgPSB0cnVlO1xuXG4gIC8qKiBJZiBcInRydWVcIiwgZW1pdFNlYXJjaFZhbHVlSW5wdXQgd2lsbCBlbWl0IGVtcHR5IHZhbHVlcyB0b28gKi9cbiAgQElucHV0KCkgZW1pdEVtcHR5VmFsdWVzID0gZmFsc2U7XG5cbiAgLyoqIElmIFwidHJ1ZVwiLCBmaXJzdCB0aW1lIGZvY3VzaW5nIG9uIGlucHV0IHdpbGwgc3RhcnQgbG9hZGluZyBzdWdnZXN0aW9ucyBpZiBpbnB1dCBoYXMgYSB2YWx1ZSAqL1xuICBASW5wdXQoKSBsb2FkU3VnZ2VzdGlvbk9uSW5pdCA9IGZhbHNlO1xuXG4gIC8qKiBQcm92aWRlIGNvbmZpZ3VyYXRpb24gZm9yIGRlZmF1bHQgb3B0aW9uIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBpZiBubyByZXN1bHRzIHdlcmUgZm91bmQgKi9cbiAgQElucHV0KCkgbm9EYXRhT3B0aW9uOiBTZWFyY2hEcm9wZG93blN0YXRpY09wdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKiogUHJvdmlkZSBjb25maWd1cmF0aW9uIGZvciBkZWZhdWx0IG9wdGlvbiB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgaWYgbm8gaW50ZW5kZWQgcmVzdWx0cyB3ZXJlIGZvdW5kICovXG4gIEBJbnB1dCgpIG1vcmVEYXRhT3B0aW9uOiBTZWFyY2hEcm9wZG93blN0YXRpY09wdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKiogUHJvdmlkZSBjb25maWd1cmF0aW9uIGZvciBkZWZhdWx0IG9wdGlvbiB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgaWYgbmVlZGVkICovXG4gIEBJbnB1dCgpIHN0YXRpY0RhdGFPcHRpb246IFNlYXJjaERyb3Bkb3duU3RhdGljT3B0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBQcm92aWRlIGV2ZW50IHRoYXQgaXMgZmlyZWQgd2hlbiBlbnRlciBrZXkgaXMgZG93biB3aGlsZSBpbnB1dCB2YWx1ZSBpcyBiZWluZyBzZXQgKi9cbiAgQElucHV0KCkgb25FbnRlcktleURvd246ICgoY3VycmVudElucHV0VmFsdWU6IHN0cmluZykgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFByb3ZpZGUgY2FsbGJhY2sgdGhhdCB3aWxsIHZiZSBleGVjdXRlZCB3aGVuIHVzZXIgY2xpY2tzIG9uIG1hZ25pZnlpbmcgZ2xhc3MgaWNvbiAqL1xuICBASW5wdXQoKSBzZWFyY2hJY29uQ2xpY2tDYWxsYmFjazogKChjdXJyZW50SW5wdXRWYWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICAvKiogUHJvdmlkZSBjYWxsYmFjayB0aGF0IHdpbGwgdmJlIGV4ZWN1dGVkIHdoZW4gdXNlciBjbGlja3Mgb24gbWFnbmlmeWluZyBnbGFzcyBpY29uICovXG4gIEBJbnB1dCgpIGRpc3BsYXlWYWx1ZUZvcm1hdHRlcjogKCh2YWx1ZTogc3RyaW5nLCBvcHRpb246IERyb3Bkb3duQ29tcG9uZW50T3B0aW9uKSA9PiBzdHJpbmcgfCBTYWZlSHRtbCkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIElmIFwidHJ1ZVwiLCB3aWxsIHJlYWQgb3B0aW9uIHRlbXBsYXRlIHByb3ZpZGVkIHZpYSBcIm5nLXRlbXBsYXRlIGRyb3Bkb3duLW9wdGlvblwiIHNlbGVjdG9yICovXG4gIEBJbnB1dCgpIHVzZU9wdGlvblRlbXBsYXRlID0gZmFsc2U7XG5cbiAgLyoqIHNldCBtaW5pbXVtIGFtb3VudCBvZiBjaGFyYWN0ZXJzIHRvIHN0YXJ0IHNlYXJjaCAqL1xuICBASW5wdXQoKSBtaW5WYWx1ZUxlbmd0aCA9IDE7XG5cbiAgLyoqIFNldCB0byBcInRydWVcIiB0byBwcmV2ZW50IGNsaWNrIGV2ZW4gcHJvcGFnYXRpb24gKi9cbiAgQElucHV0KCkgcHJldmVudENsaWNrID0gZmFsc2U7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQElucHV0KCkgY2xvc2VQYW5lbEVuYWJsZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBOT1RFOiBJTlBVVCBQQVJBTVMgQkVMT1cgQVJFIE9WRVJSSURERU4gQkVDQVVTRSBGT1IgU09NRSBVTktOT1dOIFJFQVNPTiBTVE9SWUJPT0sgV09OJ1QgU0hPVyBUSEVNIEZST00gUEFSRU5UIENMQVNTXG4gICAqL1xuXG4gIC8qKiBGb3JtIGNvbnRyb2wsIGFzc29jaWF0ZWQgd2l0aCBpbnB1dCBmaWVsZCAqL1xuICBASW5wdXQoKSBzZXQgY29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsKSB7XG4gICAgc3VwZXIuY29udHJvbCA9IGNvbnRyb2w7XG4gIH1cblxuICAvKiogT2JqZWN0LCBjb250YWluaW5nIGtleT0+dmFsdWUgcGFpcnMgZm9yIGVycm9ycyBhbmQgdGhlaXIgdHJhbnNsYXRlZCBtZXNzYWdlcyAqL1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2VzOiBHRU5FUklDX0NPTExFQ1RJT048c3RyaW5nPiA9IHt9O1xuXG4gIC8qKiBIaW50IG1lc3NhZ2UsIGRpc3BsYXllZCB1bmRlciB0aGUgY29udHJvbCAqL1xuICBASW5wdXQoKSBkZWNsYXJlIGhpbnQ/OiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbmFsIFwiaWRcIiBhdHRyaWJ1dGUgZm9yIGlucHV0IGZpZWxkICovXG4gIEBJbnB1dCgpIGlkID0gJyc7XG5cbiAgLyoqIE9wdGlvbmFsIGNvbnRyb2wgZmllbGQgbGFiZWwgKi9cbiAgQElucHV0KCkgZGVjbGFyZSBsYWJlbD86IHN0cmluZztcblxuICAvKiogRW1wdHkgaW5wdXQgZmllbGQgcGxhY2Vob2xkZXIgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICAvKipcbiAgICogRU5EIE9GIE9WRVJSSURERU4gUEFSQU1FVEVSU1xuICAgKi9cblxuICAvKiogRW1pdHMgY3VycmVudGx5IGlucHV0IHNlYXJjaCB2YWx1ZS4gVXNlIGl0IHRvIHJlYWN0IGFuZCBnZW5lcmF0ZSBmcmVzaCBvcHRpb25zIGxpc3QsIGJhc2VkIG9uIHRoZSB2YWx1ZSAqL1xuICBAT3V0cHV0KCkgZW1pdFNlYXJjaFZhbHVlSW5wdXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcikgdHJpZ2dlcj86IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dD86IEVsZW1lbnRSZWY7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnbW9yZURhdGFNYXRPcHRpb24nKSBtb3JlRGF0YU1hdE9wdGlvbj86IE1hdE9wdGlvbjtcblxuICAvKiogQGlnbm9yZSAqL1xuICBAVmlld0NoaWxkKCdub0RhdGFNYXRPcHRpb24nKSBub0RhdGFNYXRPcHRpb24/OiBNYXRPcHRpb247XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnc3RhdGljRGF0YU1hdE9wdGlvbicpIHN0YXRpY0RhdGFNYXRPcHRpb24/OiBNYXRPcHRpb247XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnYXV0bycpIGF1dG8/OiBNYXRBdXRvY29tcGxldGU7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBpc0ludGVybmFsVmFsdWVTZXQgPSBmYWxzZTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGRpc3BsYXllZENvbnRyb2xTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSB2YWx1ZUNvbnRyb2xTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvcHRpb25zU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgdmFsdWVDb250cm9sU3RhdHVzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgaWdub3JlT25CbHVyID0gZmFsc2U7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBpbml0aWFsU3VnZ2VzdGlvbnNDaGVja2VkID0gZmFsc2U7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUZyb21TY3JvbGw/OiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgcHJldmlvdXNDb250cm9sVmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBhbGxPcHRpb25zOiBEcm9wZG93bkNvbXBvbmVudERpc3BsYXllZE9wdGlvbnMgPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZixcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyKFthZHNJY29uU2VhcmNoLCBhZHNJY29uQ2hldnJvbkRvd25dKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgb3B0aW9uczogU2ltcGxlQ2hhbmdlOyBpbW1lZGlhdGVWYWxpZGF0aW9uOiBTaW1wbGVDaGFuZ2UgfSk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMucHJvY2Vzc09wdGlvbnMoKTtcbiAgICB9XG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZhbGlkYXRvcnMoKTtcbiAgICB0aGlzLnNldHVwU3Vic2NyaXB0aW9ucygpO1xuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIHRoaXMub3ZlcnJpZGVLZXlkb3duSGFuZGxlcigpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMudW5zdWJzY3JpYmVGcm9tU2Nyb2xsKSB0aGlzLnVuc3Vic2NyaWJlRnJvbVNjcm9sbCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tT3B0aW9ucygpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tRGlzcGxheWVkQ29udHJvbCgpO1xuICAgIHRoaXMudmFsdWVDb250cm9sU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVDb250cm9sU3RhdHVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgZ2V0IGNhblNlYXJjaCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubG9hZGluZygpICYmICF0aGlzLmRpc3BsYXlDb250cm9sLmRpc2FibGVkICYmICEhdGhpcy5zZWFyY2hJY29uQ2xpY2tDYWxsYmFjaztcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIGdldCBjYW5Vc2VNb3JlRGF0YU9wdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLm1vcmVEYXRhT3B0aW9uICYmICEhdGhpcy5kaXNwbGF5ZWRPcHRpb25zLnNpemUgJiYgIXRoaXMubG9hZGluZygpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgZ2V0IGNhblVzZU5vRGF0YU9wdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm5vRGF0YU9wdGlvbiAmJlxuICAgICAgIXRoaXMuZGlzcGxheWVkT3B0aW9ucy5zaXplICYmXG4gICAgICAhdGhpcy5sb2FkaW5nKCkgJiZcbiAgICAgICEhdGhpcy5kaXNwbGF5Q29udHJvbC52YWx1ZSAmJlxuICAgICAgdGhpcy5kaXNwbGF5Q29udHJvbC5kaXJ0eVxuICAgICk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBnZXQgY2FuVXNlU3RhdGljT3B0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc3RhdGljRGF0YU9wdGlvbiAmJiAhdGhpcy5sb2FkaW5nKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBnZXQgc2hvd0Ryb3Bkb3duSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNPcHRpb25zICYmICghIXRoaXMuZGlzcGxheWVkT3B0aW9ucy5zaXplIHx8ICEhdGhpcy5hbGxPcHRpb25zLnNpemUpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgb25TZWFyY2hJY29uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLnNlYXJjaEljb25DbGlja0NhbGxiYWNrKSB7XG4gICAgICB0aGlzLnNlYXJjaEljb25DbGlja0NhbGxiYWNrKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG9uS2V5RG93bihldmVudFRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJldmVudENsaWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZXZlbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSkgcmV0dXJuO1xuXG4gICAgLyoqXG4gICAgICogaWYgb25lIG9mIHN0YXRpYyBvcHRpb25zIHdhcyBzZWxlY3RlZCB3aGVuIFwiRW50ZXJcIlxuICAgICAqIGtleSB3YXMgY2xpY2tlZCAtIGV4ZWN1dGUgcmV0dXJuIGRpc3BsYXllZFZhbHVlIGJhY2tcbiAgICAgKiBhbmQgZXhlY3V0ZSBzdGF0aWMgb3B0aW9uIG9uQ2xpY2sgZXZlbnRzXG4gICAgICovXG4gICAgaWYgKHRoaXMubW9yZURhdGFNYXRPcHRpb24/LnNlbGVjdGVkKSB7XG4gICAgICBldmVudFRhcmdldC52YWx1ZSA9IHRoaXMuZ2V0RGlzcGxheWVkVmFsdWVBc1N0cmluZygpO1xuXG4gICAgICB0aGlzLmFjdGl2YXRlU3RhdGljT3B0aW9uKHRoaXMubW9yZURhdGFPcHRpb24pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ub0RhdGFNYXRPcHRpb24/LnNlbGVjdGVkKSB7XG4gICAgICBldmVudFRhcmdldC52YWx1ZSA9IHRoaXMuZ2V0RGlzcGxheWVkVmFsdWVBc1N0cmluZygpO1xuXG4gICAgICB0aGlzLmFjdGl2YXRlU3RhdGljT3B0aW9uKHRoaXMubm9EYXRhT3B0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGljRGF0YU1hdE9wdGlvbj8uc2VsZWN0ZWQpIHtcbiAgICAgIGV2ZW50VGFyZ2V0LnZhbHVlID0gdGhpcy5nZXREaXNwbGF5ZWRWYWx1ZUFzU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuYWN0aXZhdGVTdGF0aWNPcHRpb24odGhpcy5zdGF0aWNEYXRhT3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBvdGhlcndpc2UgaWYgZGlzcGxheWVkIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIGlucHV0IHZhbHVlIC0gc3luYyB0aGVtXG4gICAgICAgKiBOT1RFOiB0aGlzIGhhcHBlbnMgd2hlbiBvcHRpb24gaXMgc2VsZWN0ZWQgaW4gZHJvcGRvd24gYW5kIFwiRW50ZXJcIiBrZXkgaXMgcHJlc3NlZFxuICAgICAgICogYmVjYXVzZSBcIm9uSW5wdXRcIiBldmVudCBkb2VzIG5vdCBmaXJlIGluIHRoYXQgY2FzZVxuICAgICAgICogaWYgZGlzcGxheWVkIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGlucHV0IHZhbHVlLCBhbmQgd2UgaGF2ZSBvbkVudGVyS2V5RG93biBjYWxsYmFjayAtIGV4ZWN1dGUgaXRcbiAgICAgICAqIE5PVEU6IHRoaXMgaGFwcGVucyB3aGVuIHZhbHVlIGlzIGlucHV0IGRpcmVjdGx5IGludG8gaW5wdXQgZmllbGRcbiAgICAgICAqL1xuICAgICAgaWYgKHRoaXMuZ2V0RGlzcGxheWVkVmFsdWVBc1N0cmluZygpICE9IGV2ZW50VGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRyb2wuc2V0VmFsdWUoZXZlbnRUYXJnZXQudmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vbkVudGVyS2V5RG93bikge1xuICAgICAgICB0aGlzLm9uRW50ZXJLZXlEb3duKGV2ZW50VGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bnNlbGVjdENvbXBvbmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLnZhbHVlQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICBpZiAoIXRoaXMucHJldmVudENsaWNrKSB7XG4gICAgICAvKipcbiAgICAgICAqIGlmIGFjdGlvbiBvbkJsdXIgaXMgYWxsb3dlZCBhbmQgdmFsdWUgaXMgYSBzdHJpbmcgLSBhcHBseSBpdCB0byBmb3JtIGNvbnRyb2wgYmVmb3JlIGJsdXJyaW5nXG4gICAgICAgKiBOT1RFOiB0aGlzIG1heSBoYXBwZW4gaWYgdmFsdWUgd2FzIGlucHV0IGludG8gY29udHJvbCBidXRcbiAgICAgICAqIG5vIGV4aXN0aW5nIG9wdGlvbnMgd2VyZSBleHBsaWNpdGx5IHNlbGVjdGVkXG4gICAgICAgKi9cbiAgICAgIGlmICghdGhpcy5pZ25vcmVPbkJsdXIgJiYgdHlwZW9mIHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWVGcm9tU3RyaW5nKHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlnbm9yZU9uQmx1ciA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGlmIHdlIGFyZSBzdGlsbCBsb2FkaW5nIC0gc3RvcCBpdFxuICAgICAqL1xuICAgIGlmICh0aGlzLmxvYWRpbmcoKSkge1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogdW5zdWJzY3JpYmUgZnJvbSBvcHRpb25zIHRvIHByZXZlbnQgdGhlaXIgZnVydGhlciBwcm9jZXNzaW5nXG4gICAgICAgKi9cbiAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tT3B0aW9ucygpO1xuXG4gICAgICAvKipcbiAgICAgICAqIHVuc3Vic2NyaWJlIGZyb20gZGlzcGxheSBjb250cm9sIGNoYW5nZSB0byBwcmV2ZW50IGl0IGZyb20gc2VuZGluZyB0aGUgZGF0YVxuICAgICAgICovXG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbURpc3BsYXllZENvbnRyb2woKTtcblxuICAgICAgLyoqXG4gICAgICAgKiByZXN1YnNjcmliZSBpdCBhZ2FpbiB0byByZXR1cm4gdG8gbm9ybWFsIHdvcmtmbG93XG4gICAgICAgKi9cbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EaXNwbGF5ZWRDb250cm9sVmFsdWVDaGFuZ2VkKCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogc2V0IGxvYWRTdWdnZXN0aW9uT25Jbml0IHRvIHJlc3VtZSBsb2FkaW5nIHdoZW4gY29udHJvbCBpcyBmb2N1c2VkIGFnYWluXG4gICAgICAgKi9cbiAgICAgIHRoaXMucmVzZXRJbml0aWFsU3RhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbG9zZVBhbmVsRW5hYmxlZCAmJiAhdGhpcy5wcmV2ZW50Q2xpY2spIHRoaXMudHJpZ2dlcj8uY2xvc2VQYW5lbCgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBpZiB3ZSBoYXZlIG5vIGRpc3BsYXllZCBvcHRpb25zLFxuICAgICAqIHdlIGNhbiBsb2FkIGRhdGEgb24gaW5pdGlhbCB2YWx1ZSxcbiAgICAgKiB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBzdGF0aWMgb3B0aW9ucyxcbiAgICAgKiBpbml0aWFsIHN1Z2dlc3Rpb25zIGFyZSBub3QgeWV0IGxvYWRlZCxcbiAgICAgKiBhbmQgd2UgaGF2ZSBpbnB1dCB2YWx1ZSBvciBjYW4gZW1pdCBlbXB0eSB2YWx1ZXMgLSB3ZSBjYW4gc3RhcnQgbG9hZGluZyBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIGlmIChcbiAgICAgICF0aGlzLmRpc3BsYXllZE9wdGlvbnMuc2l6ZSAmJlxuICAgICAgdGhpcy5sb2FkU3VnZ2VzdGlvbk9uSW5pdCAmJlxuICAgICAgIXRoaXMuc3RhdGljT3B0aW9ucyAmJlxuICAgICAgIXRoaXMuaW5pdGlhbFN1Z2dlc3Rpb25zQ2hlY2tlZCAmJlxuICAgICAgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgfHwgdGhpcy5lbWl0RW1wdHlWYWx1ZXMpXG4gICAgKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuXG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbU9wdGlvbnMoKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBpZiB3ZSBhcmUgbG9hZGluZyBvbiBpbml0IGFuZCBkaXNwbGF5IGNvbnRyb2wgaGFzIHZhbHVlIC0gbWFyayBpdCBhcyBkaXJ0eSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAqL1xuICAgICAgaWYgKHRoaXMubG9hZFN1Z2dlc3Rpb25PbkluaXQgJiYgdGhpcy5kaXNwbGF5Q29udHJvbC52YWx1ZSAmJiB0aGlzLmRpc3BsYXlDb250cm9sLnByaXN0aW5lKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbWl0U2VhcmNoVmFsdWVJbnB1dC5lbWl0KHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbFN1Z2dlc3Rpb25zQ2hlY2tlZCA9IHRydWU7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBvbklucHV0KGV2ZW50VGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50VGFyZ2V0LnZhbHVlLnRyaW0oKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBpZiBuZXcgdHJpbW1lZCB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IHRyaW1tZWQgdmFsdWUgYW5kIG5ldyB0cmltbWVkIHZhbHVlIGlzIGVpdGhlciBlbXB0eSBvclxuICAgICAgICogZml0cyBtaW4gbGVuZ3RoIC0gdXNlIGl0XG4gICAgICAgKiBOT1RFOiB0aGlzIGFsbG93cyB0byBhdm9pZCByZWFjdGluZyBvbiBlbXB0eSBzdHJpbmdzIGJlaW5nIGlucHV0XG4gICAgICAgKiBhbHNvIHNwYWNlcyBpbiB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2lsbCBiZSBpZ25vcmVkIHVudGlsIHRoZXkgYXJlIGZvbGxvd2VkIGJ5IGEgZGlmZmVyZW50IGNoYXJhY3RlclxuICAgICAgICovXG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuZ2V0RGlzcGxheWVkVmFsdWVBc1N0cmluZyhmYWxzZSkudHJpbSgpICYmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoID49IHRoaXMubWluVmFsdWVMZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRyb2wuc2V0VmFsdWUoZXZlbnRUYXJnZXQudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIGdldERpc3BsYXllZFZhbHVlQXNTdHJpbmcoY2hlY2tBZGRpdGlvbmFsRm9ybWF0dGluZyA9IHRydWUpOiBzdHJpbmcge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuXG4gICAgaWYgKHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHZhbHVlID1cbiAgICAgICAgdHlwZW9mIHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWUgPT0gJ3N0cmluZydcbiAgICAgICAgICA/IHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWVcbiAgICAgICAgICA6ICh0aGlzLmRpc3BsYXlDb250cm9sLnZhbHVlLnZhbHVlID8/ICcnKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBZGRpdGlvbmFsRm9ybWF0dGluZyAmJiB0aGlzLm11c3RBcHBseUFkZGl0aW9uYWxGaWx0ZXJpbmcoKSAmJiB0aGlzLnByZXZpb3VzQ29udHJvbFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5wcmV2aW91c0NvbnRyb2xWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICB0aGlzLmRpc3BsYXllZE9wdGlvbnMgPSBuZXcgTWFwKCk7XG5cbiAgICAgIHRoaXMuYWxsT3B0aW9ucy5mb3JFYWNoKChvcHRpb25WYWx1ZSwgb3B0aW9uKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25WYWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5ZWRPcHRpb25zLnNldChvcHRpb24sIG9wdGlvblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRPcHRpb25zID0gbmV3IE1hcCh0aGlzLmFsbE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgb25TdGF0aWNPcHRpb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIG9wdGlvbjogU2VhcmNoRHJvcGRvd25TdGF0aWNPcHRpb24pOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBvbmx5IHByb2NlZWQgaWYgbGVmdCBtb3VzZSBidXR0b24gd2FzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSByZXR1cm47XG5cbiAgICB0aGlzLmFjdGl2YXRlU3RhdGljT3B0aW9uKG9wdGlvbik7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBvbk9wdGlvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgb3B0aW9uOiBDdXN0b21NYXRPcHRpb24pOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBvbmx5IHByb2NlZWQgaWYgbGVmdCBtb3VzZSBidXR0b24gd2FzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSByZXR1cm47XG5cbiAgICB0aGlzLm1vZGlmeU9wdGlvbkNsaWNrRXZlbnQob3B0aW9uKTtcblxuICAgIGlmICh0aGlzLnByZXZlbnRDbGljaykgcmV0dXJuO1xuXG4gICAgLyoqXG4gICAgICogTk9URTogd2Ugc2V0IGRpc3BsYXlDb250cm9sIHZhbHVlIGluIG1vdXNlZG93biBldmVudCB0byBvdmVycmlkZSB2YWx1ZSBzZXR0aW5nIGluIG9uQ2xpY2tcbiAgICAgKiBhbmQgYXZvaWQgVUkgYXJ0aWZhY3RzIGNvbm5lY3RlZCB3aXRoIGl0XG4gICAgICovXG4gICAgdGhpcy5kaXNwbGF5Q29udHJvbC5zZXRWYWx1ZShvcHRpb24/LnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIGRpc3BsYXlGbiA9IChvcHRpb24/OiB7IGtleTogRHJvcGRvd25Db21wb25lbnRPcHRpb247IHZhbHVlOiBzdHJpbmcgfSk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvbi52YWx1ZSA6ICcnO1xuICB9O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHJlc2V0SW5pdGlhbFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZFN1Z2dlc3Rpb25PbkluaXQgPSB0cnVlO1xuICAgIHRoaXMuaW5pdGlhbFN1Z2dlc3Rpb25zQ2hlY2tlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgY2FuU2hvd0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZGlzcGxheUNvbnRyb2wuZXJyb3JzICYmICh0aGlzLmRpc3BsYXlDb250cm9sLnRvdWNoZWQgfHwgdGhpcy5pbW1lZGlhdGVWYWxpZGF0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByb3RlY3RlZCB0b3VjaEludmFsaWQoY29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcbiAgICBzdXBlci50b3VjaEludmFsaWQoY29udHJvbCk7XG4gICAgc3VwZXIudG91Y2hJbnZhbGlkKHRoaXMuZGlzcGxheUNvbnRyb2wpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJvdGVjdGVkIHByb2Nlc3NPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuYWxsT3B0aW9ucyA9IG5ldyBNYXAoKTtcblxuICAgIC8qKlxuICAgICAqIGlmIG9wdGlvbnMgYXJlIG5vdCBwcm92aWRlZCAtIHJlc2V0XG4gICAgICovXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5kaXNwbGF5ZWRPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFwicHJvY2Vzc09wdGlvbnNcIiBpcyBmaXJlZCBhbnkgdGltZSBvcHRpb25zIGNoYW5nZSAtIHRodXMgd2UgbmVlZCB0byBzZXQgbG9hZGluZyB0byB0cnVlIHdoZW4gaXQgaGFwcGVuc1xuICAgICAqL1xuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBzdWJzY3JpYmUgdG8gb3B0aW9ucyB0byBleHRyYWN0IGRpc3BsYXllZE9wdGlvbnMgZnJvbSB0aGVtXG4gICAgICogTk9URTogd2UgZG8gbm90IHVzZSBkaXNwbGF5ZWRPcHRpb25zIGFzIE9ic2VydmFibGUgYmVjYXVzZVxuICAgICAqIHdlIG1heSBuZWVkIGRpc3BsYXllZE9wdGlvbnMgZGlyZWN0bHkgb24gb25LZXlEb3duIGV2ZW50XG4gICAgICovXG4gICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5vcHRpb25zLnN1YnNjcmliZSgob3B0aW9uczogRHJvcGRvd25Db21wb25lbnRPcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcblxuICAgICAgLyoqXG4gICAgICAgKiB0dXJuIERyb3Bkb3duQ29tcG9uZW50T3B0aW9ucyBpbnRvIERyb3Bkb3duQ29tcG9uZW50RGlzcGxheWVkT3B0aW9uc1xuICAgICAgICovXG4gICAgICBzdXBlci5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgdGhpcy5hbGxPcHRpb25zID0gbmV3IE1hcCh0aGlzLmRpc3BsYXllZE9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJvdGVjdGVkIHNldHVwU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xWYWx1ZVRvRGlzcGxheWVkQ29udHJvbFZhbHVlKCk7XG5cbiAgICAvKipcbiAgICAgKiBzdWJzY3JpYmUgdG8gY29udHJvbCB2YWx1ZSBjaGFuZ2UgdG8gc3luY2hyb25pemUgdGhlIHZhbHVlIHdoZW4gY2hhbmdlZCBleHRlcm5hbGx5XG4gICAgICovXG4gICAgdGhpcy52YWx1ZUNvbnRyb2xTdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0ludGVybmFsVmFsdWVTZXQpIHtcbiAgICAgICAgdGhpcy5jb250cm9sVmFsdWVUb0Rpc3BsYXllZENvbnRyb2xWYWx1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogc3luYyBkaXNwbGF5IGNvbnRyb2wgc3RhdHVzZXMgd2l0aCB2YWx1ZSBjb250cm9sIHN0YXR1cyBmb3IgcHJvcGVyIGVycm9yIGRpc3BsYXlcbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlQ29udHJvbFN0YXR1c1N1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3luY1N0YXRlKCkpO1xuXG4gICAgdGhpcy5zdWJzY3JpYmVUb0Rpc3BsYXllZENvbnRyb2xWYWx1ZUNoYW5nZWQoKTtcblxuICAgIC8qKlxuICAgICAqIGxpc3RlbiB0byBzY3JvbGwgdG8gcmVwb3NpdGlvbiB0aGUgZHJvcGRvd25cbiAgICAgKi9cbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbVNjcm9sbCA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgRG9tSGVscGVyLmdldFNjcm9sbGFibGVQYXJlbnQodGhpcy5yZWYubmF0aXZlRWxlbWVudCksXG4gICAgICAnc2Nyb2xsJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlcj8ucGFuZWxPcGVuKSB0aGlzLnRyaWdnZXIudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuc3luY1N0YXRlKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHN1YnNjcmliZVRvRGlzcGxheWVkQ29udHJvbFZhbHVlQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbnRyb2xTdWJzY3JpcHRpb24gPSB0aGlzLmRpc3BsYXlDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodmFsdWU/OiBTZWFyY2hEcm9wZG93bkRpc3BsYXlDb250cm9sVmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoIXZhbHVlKSB2YWx1ZSA9ICcnO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBtYXJrIGRpc3BsYXlDb250cm9sIGFzIGRpcnR5XG4gICAgICAgICAgICogYmVjYXVzZSBNYXRBdXRvY29tcGxldGUgZG9lcyBub3QgZG8gaXQgYXV0b21hdGljYWxseVxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuZGlzcGxheUNvbnRyb2wubWFya0FzRGlydHkoKTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIHVuc3Vic2NyaWJlIGZyb20gcHJldmlvdXMgb3B0aW9ucyB0byBzdG9wIGxvYWRpbmcgdGhlbVxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tT3B0aW9ucygpO1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogc3RvcCBwcm9jZXNzaW5nIGlmIHZhbHVlIGlzIG5vdCBwcm92aWRlZFxuICAgICAgICAgICAqL1xuICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogY2xlYXIgZGlzcGxheWVkIG9wdGlvbnMgaWYgdmFsdWUgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghdGhpcy5zdGF0aWNPcHRpb25zKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUobnVsbCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxvYWRpbmcoKSkge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogc2V0IGxvYWRTdWdnZXN0aW9uT25Jbml0IHRvIHJlc3VtZSBsb2FkaW5nIHdoZW4gY29udHJvbCBpcyBmb2N1c2VkIGFnYWluXG4gICAgICAgICAgICAgICAqIE5PVEU6IHRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBieSB0aGUgdGltZSBvbkJsdXIgaGFwcGVucyAtIGxvYWRpbmcgaXMgZmFsc2UgYW5kXG4gICAgICAgICAgICAgICAqIHRoaXMgbWV0aG9kIHdpbGwgbm90IGJlIGZpcmVkIGZyb20gb25CbHVyXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlRnJvbU9wdGlvbih2YWx1ZS5rZXksIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0aGlzLmNhbkVtaXRWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgZGVib3VuY2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2FuRW1pdFZhbHVlKHZhbHVlKSAmJiB2YWx1ZSA/IHRpbWVyKDUwMCkgOiBvZih7fSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IFNlYXJjaERyb3Bkb3duRGlzcGxheUNvbnRyb2xWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5FbWl0VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5lbWl0U2VhcmNoVmFsdWVJbnB1dC5lbWl0KDxzdHJpbmc+dmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlRnJvbURpc3BsYXllZENvbnRyb2woKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb250cm9sU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgZGlzcGxheUZpcnN0RXJyb3IoY29udHJvbDogRm9ybUNvbnRyb2wgPSB0aGlzLmRpc3BsYXlDb250cm9sKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VwZXIuZGlzcGxheUZpcnN0RXJyb3IoY29udHJvbCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBjbGVhcihldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzcGxheUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5kaXNwbGF5Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICBpZiAodGhpcy5jbG9zZVBhbmVsRW5hYmxlZCkgdGhpcy50cmlnZ2VyPy5jbG9zZVBhbmVsKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICB0b2dnbGVQYW5lbChldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMudHJpZ2dlcj8ucGFuZWxPcGVuKSB7XG4gICAgICBpZiAodGhpcy5jbG9zZVBhbmVsRW5hYmxlZCkgdGhpcy50cmlnZ2VyPy5jbG9zZVBhbmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlcj8ub3BlblBhbmVsKCk7XG4gICAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBjb250cm9sVmFsdWVUb0Rpc3BsYXllZENvbnRyb2xWYWx1ZSgpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBleHRyYWN0IGRpc3BsYXlhYmxlIHZhbHVlIGFzIHN0cmluZyBmcm9tIHZhbHVlQ29udHJvbCwgaWYgaXQgaXMgbm90IGVtcHR5XG4gICAgICovXG4gICAgY29uc3QgZGlzcGxheWVkVmFsdWUgPSB0aGlzLnZhbHVlQ29udHJvbC52YWx1ZVxuICAgICAgPyB0aGlzLmdldERpc3BsYXllZFZhbHVlKHRoaXMudmFsdWVDb250cm9sLnZhbHVlKVxuICAgICAgOiB0aGlzLnZhbHVlQ29udHJvbC52YWx1ZTtcblxuICAgIC8qKlxuICAgICAqIHVzZSBpdCB0byBidWlsZCBkaXNwbGF5ZWRDb250cm9sIHZhbHVlXG4gICAgICovXG4gICAgdGhpcy5kaXNwbGF5Q29udHJvbC5zZXRWYWx1ZShcbiAgICAgIGRpc3BsYXllZFZhbHVlID8geyBrZXk6IHRoaXMudmFsdWVDb250cm9sLnZhbHVlLCB2YWx1ZTogZGlzcGxheWVkVmFsdWUgfSA6IHRoaXMudmFsdWVDb250cm9sLnZhbHVlLFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbXVzdEFwcGx5QWRkaXRpb25hbEZpbHRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc3RhdGljT3B0aW9ucyB8fCAodGhpcy5zdGF0aWNPcHRpb25zICYmIHRoaXMuZmlsdGVyT3B0aW9ucyk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHVuc2VsZWN0Q29tcG9uZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGFjdGl2YXRlU3RhdGljT3B0aW9uKG9wdGlvbj86IFNlYXJjaERyb3Bkb3duU3RhdGljT3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24pIHJldHVybjtcblxuICAgIC8qKlxuICAgICAqIGlnbm9yZU9uQmx1ciB0byBcInRydWVcIiB0byBkaXNhYmxlXG4gICAgICogY29tcG9uZW50J3MgaW5wdXQgb25CbHVyIGV2ZW50XG4gICAgICogTk9URTogdGhpcyBpcyBuZWVkZWQgd2hlbiB3ZSBjbGljayBvbiBzdGF0aWMgb3B0aW9uc1xuICAgICAqL1xuICAgIHRoaXMuaWdub3JlT25CbHVyID0gdHJ1ZTtcblxuICAgIHRoaXMubW9yZURhdGFNYXRPcHRpb24/LmRlc2VsZWN0KCk7XG4gICAgdGhpcy5ub0RhdGFNYXRPcHRpb24/LmRlc2VsZWN0KCk7XG5cbiAgICBpZiAob3B0aW9uLm9uQ2xpY2spIHtcbiAgICAgIG9wdGlvbi5vbkNsaWNrKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudW5zZWxlY3RDb21wb25lbnQoKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgc2V0VmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBtYWtlIHN1cmUgZGlzcGxheUNvbnRyb2wgaGFzIHRoZSBzYW1lIHZhbGlkYXRvcnMgYXMgY29udHJvbFxuICAgICAqL1xuICAgIHRoaXMuZGlzcGxheUNvbnRyb2wuYWRkVmFsaWRhdG9ycyh0aGlzLnZhbHVlQ29udHJvbC52YWxpZGF0b3IgPz8gW10pO1xuICAgIC8qKlxuICAgICAqIHJlcXVpcmVkIHZhbGlkYXRvciBtdXN0IGJlIHNldCBtYW51YWxseSBpbiB0aGlzIGNvbXBvbmVudFxuICAgICAqIGJlY2F1c2UgY29udHJvbHMgYXJlIGRpc2Nvbm5lY3RlZCBmcm9tIGlucHV0IGZpZWxkXG4gICAgICovXG4gICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMudmFsdWVDb250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICB0aGlzLmRpc3BsYXlDb250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICAgIHRoaXMudmFsdWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZGlzcGxheUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGNhbkVtaXRWYWx1ZSh2YWx1ZTogU2VhcmNoRHJvcGRvd25EaXNwbGF5Q29udHJvbFZhbHVlKTogYm9vbGVhbiB7XG4gICAgLyoqXG4gICAgICogb25seSBlbWl0IGV2ZW50IGlmIHZhbHVlIGlzIGEgc3RyaW5nLCBhbmQgd2UgY2FuIGVtaXQgZW1wdHkgdmFsdWVzLCBvciBpdCBpcyBub3QgZW1wdHlcbiAgICAgKiBOT1RFOiBpdCBkaXNhbGxvd3MgdG8gZW1pdCBleHBsaWNpdGx5IHNlbGVjdGVkIFwiUkVBTFwiIHZhbHVlc1xuICAgICAqL1xuICAgIHJldHVybiAhdGhpcy5zdGF0aWNPcHRpb25zICYmIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyAmJiAodGhpcy5lbWl0RW1wdHlWYWx1ZXMgfHwgISF2YWx1ZSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHNldENvbnRyb2xWYWx1ZUZyb21TdHJpbmcoZGlzcGxheWVkVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBpc1ZhbHVlQXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogbG9vcCB0aHJvdWdoIGRpc3BsYXllZE9wdGlvbnM7XG4gICAgICogaWYgbWF0Y2hpbmcgZGlzcGxheWVkT3B0aW9uIHZhbHVlIGZvdW5kIC0gdXNlIGRpc3BsYXllZE9wdGlvbnMgb3B0aW9uIGFzIGNvbnRyb2wgdmFsdWVcbiAgICAgKi9cbiAgICBmb3IgKGNvbnN0IFtvcHRpb24sIHZhbHVlXSBvZiB0aGlzLmRpc3BsYXllZE9wdGlvbnMpIHtcbiAgICAgIGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBkaXNwbGF5ZWRWYWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlRnJvbU9wdGlvbihvcHRpb24pO1xuICAgICAgICBpc1ZhbHVlQXBwbGllZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNWYWx1ZUFwcGxpZWQpIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHNldENvbnRyb2xWYWx1ZUZyb21PcHRpb24ob3B0aW9uOiBEcm9wZG93bkNvbXBvbmVudE9wdGlvbiB8IG51bGwsIHNraXBTYW1lID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudW5zZWxlY3RDb21wb25lbnQoKTtcblxuICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKG9wdGlvbiwgc2tpcFNhbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb250cm9sVmFsdWUob3B0aW9uOiBEcm9wZG93bkNvbXBvbmVudE9wdGlvbiB8IG51bGwsIHNraXBTYW1lID0gdHJ1ZSkge1xuICAgIC8qKlxuICAgICAqIG9ubHkgdXBkYXRlIGNvbnRyb2wgdmFsdWUgaWYgaXQgZGlmZmVycyBmcm9tIHByb3ZpZGVkIG9uZVxuICAgICAqIE5PVEU6IHdlIG5lZWQgdGhpcyBjaGVjayB0byBhdm9pZCBlbWl0dGluZyBjb250cm9sIHZhbHVlIGNoYW5nZVxuICAgICAqIHdoZW4gdGhlIHNhbWUgZHJvcGRvd24gb3B0aW9uIGlzIHNlbGVjdGVkIGluIGRyb3Bkb3duIHNldmVyYWwgdGltZXNcbiAgICAgKi9cbiAgICBpZiAoc2tpcFNhbWUgJiYgdGhpcy52YWx1ZUNvbnRyb2wudmFsdWUgPT09IG9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWVDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLnZhbHVlQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuXG4gICAgLyoqXG4gICAgICogdG9nZ2xlIGlzSW50ZXJuYWxWYWx1ZVNldCB0byBtYWtlXG4gICAgICogc3VyZSBpbnRlcm5hbCBzdWJzY3JpcHRpb24gdG8gY29udHJvbCB2YWx1ZSB3aWxsXG4gICAgICogaWdub3JlIHRoaXMgc2V0VmFsdWUgZXZlbnRcbiAgICAgKi9cbiAgICB0aGlzLmlzSW50ZXJuYWxWYWx1ZVNldCA9IHRydWU7XG4gICAgdGhpcy52YWx1ZUNvbnRyb2wuc2V0VmFsdWUob3B0aW9uKTtcbiAgICB0aGlzLmlzSW50ZXJuYWxWYWx1ZVNldCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvdmVycmlkZUtleWRvd25IYW5kbGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaWdnZXIpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLnRyaWdnZXIuX2hhbmRsZUtleWRvd247XG5cbiAgICAgIC8qKlxuICAgICAgICogdGhpcyBhbGxvd3MgdG8gYmxvY2sgZGVmYXVsdCBrZXlkb3duIGhhbmRsZXIgaWYgbmVlZGVkXG4gICAgICAgKi9cbiAgICAgIHRoaXMudHJpZ2dlci5faGFuZGxlS2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb24gPSA8Q3VzdG9tTWF0T3B0aW9uPnRoaXMudHJpZ2dlcj8uYWN0aXZlT3B0aW9uO1xuXG4gICAgICAgIHRoaXMubW9kaWZ5T3B0aW9uQ2xpY2tFdmVudChvcHRpb24pO1xuXG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLnRyaWdnZXIsIGV2ZW50KTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogbWFrZSBzdXJlIG9wdGlvbiBkb2VzIG5vdCBsb3NlIFwic2VsZWN0ZWRcIiBzdGF0ZSBpZiBjbGljayBpcyBwcmV2ZW50ZWRcbiAgICAgICAgICogTk9URTogdGhpcyBpcyBkIG9uZSBmb3IgXCJuaWNldHlcIlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMucHJldmVudENsaWNrICYmIG9wdGlvbiAmJiBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICB0aGlzLmF1dG8/Ll9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vZGlmeU9wdGlvbkNsaWNrRXZlbnQob3B0aW9uOiBDdXN0b21NYXRPcHRpb24pOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBtb2RpZnkgXCJfc2VsZWN0VmlhSW50ZXJhY3Rpb25cIiBtZXRob2Qgb2YgdGhlIG9wdGlvblxuICAgICAqIHNvIHRoYXQgd2UgY2FuIGJsb2NrIGl0cyBzZWxlY3Rpb24gaWYgbmVlZGVkXG4gICAgICovXG4gICAgaWYgKG9wdGlvbiAmJiAhb3B0aW9uLm1vZGlmaWVkKSB7XG4gICAgICBvcHRpb24ubW9kaWZpZWQgPSB0cnVlO1xuXG4gICAgICBjb25zdCBoYW5kbGVyID0gb3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbjtcblxuICAgICAgb3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbiA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJldmVudENsaWNrKSB7XG4gICAgICAgICAgdGhpcy5hdXRvPy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlci5jYWxsKG9wdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1yb3dcIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiB3aWR0aCB9XCI+XG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdpbW1lZGlhdGUtdmFsaWRhdGlvbic6IGltbWVkaWF0ZVZhbGlkYXRpb24sXG4gICAgICAnaXMtb3Blbic6IHRyaWdnZXI/LnBhbmVsT3BlbixcbiAgICAgIGludmFsaWQ6IGNhblNob3dFcnJvcigpLFxuICAgICAgJ3N1Y2Nlc3MtbGFiZWwnOiBjYW5TaG93U3VjY2VzcygpLFxuICAgICAgJ3gtc21hbGwnOiBzbWFsbFNpemUsXG4gICAgfVwiXG4gID5cbiAgICBAaWYgKChsYWJlbCB8fCByZXF1aXJlZCkgJiYgIXNtYWxsU2l6ZSkge1xuICAgICAgPG1hdC1sYWJlbD57eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIH1cbiAgICA8aW5wdXRcbiAgICAgICNpbnB1dFxuICAgICAgW2Rpc2FibGVkXT1cImRpc3BsYXlDb250cm9sLmRpc2FibGVkXCJcbiAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uS2V5RG93bigkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAoZm9jdXMpPVwib25Gb2N1cygpXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwiJ25vbmUnXCJcbiAgICAgIFtpZF09XCJpZFwiXG4gICAgICBtYXRJbnB1dFxuICAgICAgW3ZhbHVlXT1cImdldERpc3BsYXllZFZhbHVlQXNTdHJpbmcoKVwiXG4gICAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4bGVuZ3RoXCJcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAvPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCJcbiAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAnYWRzLWRyb3Bkb3duLXBhbmVsJyArXG4gICAgICAgIChmaXRDb250ZW50ID8gJyBmaXQtY29udGVudCcgOiAnJykgK1xuICAgICAgICAobG9hZGluZygpID8gJyBsb2FkaW5nJyA6ICcnKSArXG4gICAgICAgIChwcmV2ZW50Q2xpY2sgPyAnJyA6ICcgY2xpY2thYmxlJykgK1xuICAgICAgICAnICcgK1xuICAgICAgICBwYW5lbENsYXNzXG4gICAgICBcIlxuICAgID5cbiAgICAgIEBmb3IgKG9wdGlvbiBvZiBkaXNwbGF5ZWRPcHRpb25zIHwga2V5dmFsdWU6IGFwcGx5U29ydGluZzsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIDxtYXQtb3B0aW9uICNvcHQgW3ZhbHVlXT1cIm9wdGlvblwiIChtb3VzZWRvd24pPVwib25PcHRpb25Nb3VzZURvd24oJGV2ZW50LCBvcHQpXCI+XG4gICAgICAgICAgQGlmICh1c2VPcHRpb25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblJlZigpXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb24ua2V5LCB2YWx1ZTogb3B0aW9uLnZhbHVlIH1cIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIlxuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZUZvcm1hdHRlclxuICAgICAgICAgICAgICAgICAgPyBkaXNwbGF5VmFsdWVGb3JtYXR0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIS52YWx1ZSEgfCBhZHNTZWFyY2hEcm9wZG93bkhpZ2hsaWdodGVyOiBkaXNwbGF5Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb24ua2V5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogKG9wdGlvbiEudmFsdWUhIHwgYWRzU2VhcmNoRHJvcGRvd25IaWdobGlnaHRlcjogZGlzcGxheUNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGNhblVzZU1vcmVEYXRhT3B0aW9uKSB7XG4gICAgICAgIDxociBjbGFzcz1cIm5vLXJlc3VsdHMtaHJcIiAvPlxuICAgICAgICA8bWF0LW9wdGlvbiAjbW9yZURhdGFNYXRPcHRpb24gY2xhc3M9XCJleHRyYVwiIFtkaXNhYmxlZF09XCIhbW9yZURhdGFPcHRpb24hLm9uQ2xpY2tcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJleHRyYU9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbW9yZURhdGFPcHRpb24gfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGNhblVzZU5vRGF0YU9wdGlvbikge1xuICAgICAgICA8bWF0LW9wdGlvbiAjbm9EYXRhTWF0T3B0aW9uIGNsYXNzPVwiZXh0cmFcIiBbZGlzYWJsZWRdPVwiIW5vRGF0YU9wdGlvbiEub25DbGlja1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXh0cmFPcHRpb25WYWx1ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9EYXRhT3B0aW9uIH1cIiAvPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoY2FuVXNlU3RhdGljT3B0aW9uKSB7XG4gICAgICAgIEBpZiAoZGlzcGxheWVkT3B0aW9ucy5zaXplKSB7XG4gICAgICAgICAgPGhyIGNsYXNzPVwibm8tcmVzdWx0cy1oclwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPG1hdC1vcHRpb24gI3N0YXRpY0RhdGFNYXRPcHRpb24gY2xhc3M9XCJleHRyYVwiIFtkaXNhYmxlZF09XCIhc3RhdGljRGF0YU9wdGlvbiEub25DbGlja1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImV4dHJhT3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBzdGF0aWNEYXRhT3B0aW9uIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIH1cbiAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICBAaWYgKGNhbkNsZWFyKSB7XG4gICAgICA8YnV0dG9uIG1hdFRleHRTdWZmaXggdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiIGNsYXNzPVwiYWN0aW9uLWljb25cIj5cbiAgICAgICAgPGFkcy1pY29uIG5hbWU9XCJjcm9zc1wiIFtzaXplXT1cInNtYWxsU2l6ZSA/ICd4eHMnIDogJ3hzJ1wiIFt0aGVtZV09XCInaWNvblByaW1hcnknXCIgY2xhc3M9XCJjcm9zcy1pY29uXCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgICBAaWYgKHNob3dEcm9wZG93bkljb24pIHtcbiAgICAgIDxidXR0b24gbWF0VGV4dFN1ZmZpeCB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVQYW5lbCgkZXZlbnQpXCIgY2xhc3M9XCJhY3Rpb24taWNvblwiPlxuICAgICAgICA8YWRzLWljb24gbmFtZT1cImNoZXZyb25fZG93blwiIFtzaXplXT1cInNtYWxsU2l6ZSA/ICd4eHMnIDogJ3hzJ1wiIFt0aGVtZV09XCInaWNvblByaW1hcnknXCIgY2xhc3M9XCJjaGV2cm9uLWRvd25cIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoIXN0YXRpY09wdGlvbnMgJiYgbG9hZGluZygpKSB7XG4gICAgICA8bWF0LXNwaW5uZXIgbWF0VGV4dFN1ZmZpeCBkaWFtZXRlcj1cIjIyXCIgLz5cbiAgICB9XG4gICAgQGlmICghc3RhdGljT3B0aW9ucyAmJiAhbG9hZGluZygpKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdFRleHRTdWZmaXhcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblNlYXJjaFwiXG4gICAgICAgIChjbGljayk9XCJjYW5TZWFyY2ggPyBvblNlYXJjaEljb25DbGljaygkZXZlbnQpIDogbnVsbFwiXG4gICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb25cIlxuICAgICAgPlxuICAgICAgICA8YWRzLWljb24gbmFtZT1cInNlYXJjaFwiIHNpemU9XCJ4c1wiIFt0aGVtZV09XCInaWNvblByaW1hcnknXCIgY2xhc3M9XCJzZWFyY2gtaWNvblwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxkaXYgY2xhc3M9XCJmb290ZXItY29udGFpbmVyXCI+XG4gICAgQGlmIChjYW5TaG93RXJyb3IoKSkge1xuICAgICAgPGFkcy1lcnJvciBbZXJyb3JdPVwiZGlzcGxheUZpcnN0RXJyb3IoKVwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6IHdpZHRoIH1cIiAvPlxuICAgIH0gQGVsc2UgaWYgKGNhblNob3dTdWNjZXNzKCkpIHtcbiAgICAgIDxhZHMtc3VjY2VzcyBbc3VjY2Vzc109XCJzdWNjZXNzTWVzc2FnZSFcIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiB3aWR0aCB9XCIgLz5cbiAgICB9IEBlbHNlIGlmIChoaW50KSB7XG4gICAgICA8YWRzLWhpbnQgW2hpbnRdPVwiaGludFwiIFtjb250cm9sXT1cInZhbHVlQ29udHJvbFwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6IHdpZHRoIH1cIiAvPlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbkBpZiAodG9vbHRpcCkge1xuICA8YWRzLWlucHV0LXRvb2x0aXAgW3Rvb2x0aXBdPVwidG9vbHRpcFwiIFtzbWFsbFNpemVdPVwic21hbGxTaXplXCIgLz5cbn1cblxuPG5nLXRlbXBsYXRlICNleHRyYU9wdGlvblZhbHVlIGxldC1vcHRpb24+XG4gIDxzcGFuXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgKG1vdXNlZG93bik9XCJvblN0YXRpY09wdGlvbk1vdXNlRG93bigkZXZlbnQsIG9wdGlvbiEpXCJcbiAgICBbaW5uZXJIVE1MXT1cIm9wdGlvbiEubGFiZWxcIlxuICA+PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
683
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRzLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWZpZWxkcy9zZWFyY2gtZmllbGRzL3NlYXJjaC1kcm9wZG93bi9zZWFyY2gtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZHMtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0tZmllbGRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWRyb3Bkb3duL3NlYXJjaC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQWdDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RixPQUFPLEVBQ0wseUJBQXlCLEdBSTFCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQU1wRSxPQUFPLEVBQUUsU0FBUyxF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K0JBQ0UscUJBQXFCO3VJQWlCdEIsU0FBUztzQkFBakIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT08sT0FBTztzQkFBbkIsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdXLElBQUk7c0JBQXBCLEtBQUs7Z0JBR0csRUFBRTtzQkFBVixLQUFLO2dCQUdXLEtBQUs7c0JBQXJCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFPSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRzRCLE9BQU87c0JBQXpDLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUdiLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFHYyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUdBLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUdNLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBR2IsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgY29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgc2lnbmFsLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2UsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdERyb3Bkb3duQ29tcG9uZW50LFxuICBEcm9wZG93bkNvbXBvbmVudERpc3BsYXllZE9wdGlvbnMsXG4gIERyb3Bkb3duQ29tcG9uZW50T3B0aW9uLFxuICBEcm9wZG93bkNvbXBvbmVudE9wdGlvbnMsXG59IGZyb20gJy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC5kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGFkc0ljb25DaGV2cm9uRG93biwgYWRzSWNvblNlYXJjaCB9IGZyb20gJ0Bhc2NlbnRnbC9hZHMtaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgRG9tSGVscGVyLCBHRU5FUklDX0NPTExFQ1RJT04gfSBmcm9tICdAYXNjZW50Z2wvYWRzLXV0aWxzJztcbmltcG9ydCB7XG4gIFNlYXJjaERyb3Bkb3duQ29tcG9uZW50T3B0aW9ucyxcbiAgU2VhcmNoRHJvcGRvd25EaXNwbGF5Q29udHJvbFZhbHVlLFxuICBTZWFyY2hEcm9wZG93blN0YXRpY09wdGlvbixcbn0gZnJvbSAnLi9zZWFyY2gtZHJvcGRvd24uY29tcG9uZW50LnR5cGVzJztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgVEVNUExBVEVfVFlQRSB9IGZyb20gJy4uLy4uL2NvbW1vbi9kcm9wZG93bi1vcHRpb24tdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbnR5cGUgQ3VzdG9tTWF0T3B0aW9uID0gKE1hdE9wdGlvbiAmIHsgbW9kaWZpZWQ/OiBib29sZWFuIH0pIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWRzLXNlYXJjaC1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vLi4vaW5wdXQvaW5wdXQuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi8uLi9kcm9wZG93bnMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxuICAgICcuL3NlYXJjaC1kcm9wZG93bi5jb21wb25lbnQuc2NzcycsXG4gICAgJy4uLy4uL2NvbW1vbi9jb21tb24uaW5wdXQuY29tcG9uZW50LnNjc3MnLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBZHNTZWFyY2hEcm9wZG93bkNvbXBvbmVudFxuICBleHRlbmRzIEFic3RyYWN0RHJvcGRvd25Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKiBAaWdub3JlICovXG4gIG9wdGlvblJlZiA9IGNvbnRlbnRDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjxURU1QTEFURV9UWVBFPj4oVGVtcGxhdGVSZWY8VEVNUExBVEVfVFlQRT4pO1xuXG4gIC8qKiBNYXhpbXVtIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGluIHRoZSBpbnB1dCBmaWVsZCAqL1xuICBASW5wdXQoKSBtYXhsZW5ndGggPSAyNTU7XG5cbiAgLyoqIFNldCB0byBhZGRpdGlvbmFsIHBhbmVDbGFzcyBpZiByZXF1aXJlZCovXG4gIEBJbnB1dCgpIHBhbmVsQ2xhc3MgPSAnJztcblxuICAvKiogQ29udGFpbnMgZHJvcGRvd24gb3B0aW9ucyAqL1xuICBASW5wdXQoKSBvcHRpb25zPzogT2JzZXJ2YWJsZTxTZWFyY2hEcm9wZG93bkNvbXBvbmVudE9wdGlvbnM+O1xuXG4gIC8qKiBJZiBcInRydWVcIiwgY29tcG9uZW50IHdpbGwgbm90IHRyeSB0byBsb2FkIGFkZGl0aW9uYWwgb3B0aW9ucyAqL1xuICBASW5wdXQoKSBzdGF0aWNPcHRpb25zID0gZmFsc2U7XG5cbiAgLyoqIElmIFwidHJ1ZVwiIGFuZCBcInN0YXRpY09wdGlvbnNcIiBpcyBhbHNvIHRydWUgYWRkaXRpb25hbCBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkIHRvIHJlbW92ZSBvcHRpb25zIHRoYXQgZG8gbm90IG1hdGNoIGlucHV0IHZhbHVlICovXG4gIEBJbnB1dCgpIGZpbHRlck9wdGlvbnMgPSB0cnVlO1xuXG4gIC8qKiBJZiBcInRydWVcIiwgZW1pdFNlYXJjaFZhbHVlSW5wdXQgd2lsbCBlbWl0IGVtcHR5IHZhbHVlcyB0b28gKi9cbiAgQElucHV0KCkgZW1pdEVtcHR5VmFsdWVzID0gZmFsc2U7XG5cbiAgLyoqIElmIFwidHJ1ZVwiLCBmaXJzdCB0aW1lIGZvY3VzaW5nIG9uIGlucHV0IHdpbGwgc3RhcnQgbG9hZGluZyBzdWdnZXN0aW9ucyBpZiBpbnB1dCBoYXMgYSB2YWx1ZSAqL1xuICBASW5wdXQoKSBsb2FkU3VnZ2VzdGlvbk9uSW5pdCA9IGZhbHNlO1xuXG4gIC8qKiBQcm92aWRlIGNvbmZpZ3VyYXRpb24gZm9yIGRlZmF1bHQgb3B0aW9uIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBpZiBubyByZXN1bHRzIHdlcmUgZm91bmQgKi9cbiAgQElucHV0KCkgbm9EYXRhT3B0aW9uOiBTZWFyY2hEcm9wZG93blN0YXRpY09wdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKiogUHJvdmlkZSBjb25maWd1cmF0aW9uIGZvciBkZWZhdWx0IG9wdGlvbiB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgaWYgbm8gaW50ZW5kZWQgcmVzdWx0cyB3ZXJlIGZvdW5kICovXG4gIEBJbnB1dCgpIG1vcmVEYXRhT3B0aW9uOiBTZWFyY2hEcm9wZG93blN0YXRpY09wdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKiogUHJvdmlkZSBjb25maWd1cmF0aW9uIGZvciBkZWZhdWx0IG9wdGlvbiB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgaWYgbmVlZGVkICovXG4gIEBJbnB1dCgpIHN0YXRpY0RhdGFPcHRpb246IFNlYXJjaERyb3Bkb3duU3RhdGljT3B0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBQcm92aWRlIGV2ZW50IHRoYXQgaXMgZmlyZWQgd2hlbiBlbnRlciBrZXkgaXMgZG93biB3aGlsZSBpbnB1dCB2YWx1ZSBpcyBiZWluZyBzZXQgKi9cbiAgQElucHV0KCkgb25FbnRlcktleURvd246ICgoY3VycmVudElucHV0VmFsdWU6IHN0cmluZykgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFByb3ZpZGUgY2FsbGJhY2sgdGhhdCB3aWxsIHZiZSBleGVjdXRlZCB3aGVuIHVzZXIgY2xpY2tzIG9uIG1hZ25pZnlpbmcgZ2xhc3MgaWNvbiAqL1xuICBASW5wdXQoKSBzZWFyY2hJY29uQ2xpY2tDYWxsYmFjazogKChjdXJyZW50SW5wdXRWYWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICAvKiogUHJvdmlkZSBjYWxsYmFjayB0aGF0IHdpbGwgdmJlIGV4ZWN1dGVkIHdoZW4gdXNlciBjbGlja3Mgb24gbWFnbmlmeWluZyBnbGFzcyBpY29uICovXG4gIEBJbnB1dCgpIGRpc3BsYXlWYWx1ZUZvcm1hdHRlcjogKCh2YWx1ZTogc3RyaW5nLCBvcHRpb246IERyb3Bkb3duQ29tcG9uZW50T3B0aW9uKSA9PiBzdHJpbmcgfCBTYWZlSHRtbCkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIElmIFwidHJ1ZVwiLCB3aWxsIHJlYWQgb3B0aW9uIHRlbXBsYXRlIHByb3ZpZGVkIHZpYSBcIm5nLXRlbXBsYXRlIGRyb3Bkb3duLW9wdGlvblwiIHNlbGVjdG9yICovXG4gIEBJbnB1dCgpIHVzZU9wdGlvblRlbXBsYXRlID0gZmFsc2U7XG5cbiAgLyoqIHNldCBtaW5pbXVtIGFtb3VudCBvZiBjaGFyYWN0ZXJzIHRvIHN0YXJ0IHNlYXJjaCAqL1xuICBASW5wdXQoKSBtaW5WYWx1ZUxlbmd0aCA9IDE7XG5cbiAgLyoqIFNldCB0byBcInRydWVcIiB0byBwcmV2ZW50IGNsaWNrIGV2ZW4gcHJvcGFnYXRpb24gKi9cbiAgQElucHV0KCkgcHJldmVudENsaWNrID0gZmFsc2U7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQElucHV0KCkgY2xvc2VQYW5lbEVuYWJsZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBOT1RFOiBJTlBVVCBQQVJBTVMgQkVMT1cgQVJFIE9WRVJSSURERU4gQkVDQVVTRSBGT1IgU09NRSBVTktOT1dOIFJFQVNPTiBTVE9SWUJPT0sgV09OJ1QgU0hPVyBUSEVNIEZST00gUEFSRU5UIENMQVNTXG4gICAqL1xuXG4gIC8qKiBGb3JtIGNvbnRyb2wsIGFzc29jaWF0ZWQgd2l0aCBpbnB1dCBmaWVsZCAqL1xuICBASW5wdXQoKSBzZXQgY29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsKSB7XG4gICAgc3VwZXIuY29udHJvbCA9IGNvbnRyb2w7XG4gIH1cblxuICAvKiogT2JqZWN0LCBjb250YWluaW5nIGtleT0+dmFsdWUgcGFpcnMgZm9yIGVycm9ycyBhbmQgdGhlaXIgdHJhbnNsYXRlZCBtZXNzYWdlcyAqL1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2VzOiBHRU5FUklDX0NPTExFQ1RJT048c3RyaW5nPiA9IHt9O1xuXG4gIC8qKiBIaW50IG1lc3NhZ2UsIGRpc3BsYXllZCB1bmRlciB0aGUgY29udHJvbCAqL1xuICBASW5wdXQoKSBkZWNsYXJlIGhpbnQ/OiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbmFsIFwiaWRcIiBhdHRyaWJ1dGUgZm9yIGlucHV0IGZpZWxkICovXG4gIEBJbnB1dCgpIGlkID0gJyc7XG5cbiAgLyoqIE9wdGlvbmFsIGNvbnRyb2wgZmllbGQgbGFiZWwgKi9cbiAgQElucHV0KCkgZGVjbGFyZSBsYWJlbD86IHN0cmluZztcblxuICAvKiogRW1wdHkgaW5wdXQgZmllbGQgcGxhY2Vob2xkZXIgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICAvKipcbiAgICogRU5EIE9GIE9WRVJSSURERU4gUEFSQU1FVEVSU1xuICAgKi9cblxuICAvKiogRW1pdHMgY3VycmVudGx5IGlucHV0IHNlYXJjaCB2YWx1ZS4gVXNlIGl0IHRvIHJlYWN0IGFuZCBnZW5lcmF0ZSBmcmVzaCBvcHRpb25zIGxpc3QsIGJhc2VkIG9uIHRoZSB2YWx1ZSAqL1xuICBAT3V0cHV0KCkgZW1pdFNlYXJjaFZhbHVlSW5wdXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcikgdHJpZ2dlcj86IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dD86IEVsZW1lbnRSZWY7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnbW9yZURhdGFNYXRPcHRpb24nKSBtb3JlRGF0YU1hdE9wdGlvbj86IE1hdE9wdGlvbjtcblxuICAvKiogQGlnbm9yZSAqL1xuICBAVmlld0NoaWxkKCdub0RhdGFNYXRPcHRpb24nKSBub0RhdGFNYXRPcHRpb24/OiBNYXRPcHRpb247XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnc3RhdGljRGF0YU1hdE9wdGlvbicpIHN0YXRpY0RhdGFNYXRPcHRpb24/OiBNYXRPcHRpb247XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnYXV0bycpIGF1dG8/OiBNYXRBdXRvY29tcGxldGU7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBpc0ludGVybmFsVmFsdWVTZXQgPSBmYWxzZTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGRpc3BsYXllZENvbnRyb2xTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSB2YWx1ZUNvbnRyb2xTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvcHRpb25zU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgdmFsdWVDb250cm9sU3RhdHVzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgaWdub3JlT25CbHVyID0gZmFsc2U7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBpbml0aWFsU3VnZ2VzdGlvbnNDaGVja2VkID0gZmFsc2U7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUZyb21TY3JvbGw/OiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgcHJldmlvdXNDb250cm9sVmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBhbGxPcHRpb25zOiBEcm9wZG93bkNvbXBvbmVudERpc3BsYXllZE9wdGlvbnMgPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZixcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyKFthZHNJY29uU2VhcmNoLCBhZHNJY29uQ2hldnJvbkRvd25dKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgb3B0aW9uczogU2ltcGxlQ2hhbmdlOyBpbW1lZGlhdGVWYWxpZGF0aW9uOiBTaW1wbGVDaGFuZ2UgfSk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMucHJvY2Vzc09wdGlvbnMoKTtcbiAgICB9XG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZhbGlkYXRvcnMoKTtcbiAgICB0aGlzLnNldHVwU3Vic2NyaXB0aW9ucygpO1xuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIHRoaXMub3ZlcnJpZGVLZXlkb3duSGFuZGxlcigpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMudW5zdWJzY3JpYmVGcm9tU2Nyb2xsKSB0aGlzLnVuc3Vic2NyaWJlRnJvbVNjcm9sbCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tT3B0aW9ucygpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tRGlzcGxheWVkQ29udHJvbCgpO1xuICAgIHRoaXMudmFsdWVDb250cm9sU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVDb250cm9sU3RhdHVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgZ2V0IGNhblNlYXJjaCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubG9hZGluZygpICYmICF0aGlzLmRpc3BsYXlDb250cm9sLmRpc2FibGVkICYmICEhdGhpcy5zZWFyY2hJY29uQ2xpY2tDYWxsYmFjaztcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIGdldCBjYW5Vc2VNb3JlRGF0YU9wdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLm1vcmVEYXRhT3B0aW9uICYmICEhdGhpcy5kaXNwbGF5ZWRPcHRpb25zLnNpemUgJiYgIXRoaXMubG9hZGluZygpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgZ2V0IGNhblVzZU5vRGF0YU9wdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm5vRGF0YU9wdGlvbiAmJlxuICAgICAgIXRoaXMuZGlzcGxheWVkT3B0aW9ucy5zaXplICYmXG4gICAgICAhdGhpcy5sb2FkaW5nKCkgJiZcbiAgICAgICEhdGhpcy5kaXNwbGF5Q29udHJvbC52YWx1ZSAmJlxuICAgICAgdGhpcy5kaXNwbGF5Q29udHJvbC5kaXJ0eVxuICAgICk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBnZXQgY2FuVXNlU3RhdGljT3B0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc3RhdGljRGF0YU9wdGlvbiAmJiAhdGhpcy5sb2FkaW5nKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBnZXQgc2hvd0Ryb3Bkb3duSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0aWNPcHRpb25zICYmICghIXRoaXMuZGlzcGxheWVkT3B0aW9ucy5zaXplIHx8ICEhdGhpcy5hbGxPcHRpb25zLnNpemUpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgb25TZWFyY2hJY29uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLnNlYXJjaEljb25DbGlja0NhbGxiYWNrKSB7XG4gICAgICB0aGlzLnNlYXJjaEljb25DbGlja0NhbGxiYWNrKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG9uS2V5RG93bihldmVudFRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJldmVudENsaWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZXZlbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSkgcmV0dXJuO1xuXG4gICAgLyoqXG4gICAgICogaWYgb25lIG9mIHN0YXRpYyBvcHRpb25zIHdhcyBzZWxlY3RlZCB3aGVuIFwiRW50ZXJcIlxuICAgICAqIGtleSB3YXMgY2xpY2tlZCAtIGV4ZWN1dGUgcmV0dXJuIGRpc3BsYXllZFZhbHVlIGJhY2tcbiAgICAgKiBhbmQgZXhlY3V0ZSBzdGF0aWMgb3B0aW9uIG9uQ2xpY2sgZXZlbnRzXG4gICAgICovXG4gICAgaWYgKHRoaXMubW9yZURhdGFNYXRPcHRpb24/LnNlbGVjdGVkKSB7XG4gICAgICBldmVudFRhcmdldC52YWx1ZSA9IHRoaXMuZ2V0RGlzcGxheWVkVmFsdWVBc1N0cmluZygpO1xuXG4gICAgICB0aGlzLmFjdGl2YXRlU3RhdGljT3B0aW9uKHRoaXMubW9yZURhdGFPcHRpb24pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ub0RhdGFNYXRPcHRpb24/LnNlbGVjdGVkKSB7XG4gICAgICBldmVudFRhcmdldC52YWx1ZSA9IHRoaXMuZ2V0RGlzcGxheWVkVmFsdWVBc1N0cmluZygpO1xuXG4gICAgICB0aGlzLmFjdGl2YXRlU3RhdGljT3B0aW9uKHRoaXMubm9EYXRhT3B0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGljRGF0YU1hdE9wdGlvbj8uc2VsZWN0ZWQpIHtcbiAgICAgIGV2ZW50VGFyZ2V0LnZhbHVlID0gdGhpcy5nZXREaXNwbGF5ZWRWYWx1ZUFzU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuYWN0aXZhdGVTdGF0aWNPcHRpb24odGhpcy5zdGF0aWNEYXRhT3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBvdGhlcndpc2UgaWYgZGlzcGxheWVkIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIGlucHV0IHZhbHVlIC0gc3luYyB0aGVtXG4gICAgICAgKiBOT1RFOiB0aGlzIGhhcHBlbnMgd2hlbiBvcHRpb24gaXMgc2VsZWN0ZWQgaW4gZHJvcGRvd24gYW5kIFwiRW50ZXJcIiBrZXkgaXMgcHJlc3NlZFxuICAgICAgICogYmVjYXVzZSBcIm9uSW5wdXRcIiBldmVudCBkb2VzIG5vdCBmaXJlIGluIHRoYXQgY2FzZVxuICAgICAgICogaWYgZGlzcGxheWVkIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGlucHV0IHZhbHVlLCBhbmQgd2UgaGF2ZSBvbkVudGVyS2V5RG93biBjYWxsYmFjayAtIGV4ZWN1dGUgaXRcbiAgICAgICAqIE5PVEU6IHRoaXMgaGFwcGVucyB3aGVuIHZhbHVlIGlzIGlucHV0IGRpcmVjdGx5IGludG8gaW5wdXQgZmllbGRcbiAgICAgICAqL1xuICAgICAgaWYgKHRoaXMuZ2V0RGlzcGxheWVkVmFsdWVBc1N0cmluZygpICE9IGV2ZW50VGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRyb2wuc2V0VmFsdWUoZXZlbnRUYXJnZXQudmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vbkVudGVyS2V5RG93bikge1xuICAgICAgICB0aGlzLm9uRW50ZXJLZXlEb3duKGV2ZW50VGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bnNlbGVjdENvbXBvbmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLnZhbHVlQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICBpZiAoIXRoaXMucHJldmVudENsaWNrKSB7XG4gICAgICAvKipcbiAgICAgICAqIGlmIGFjdGlvbiBvbkJsdXIgaXMgYWxsb3dlZCBhbmQgdmFsdWUgaXMgYSBzdHJpbmcgLSBhcHBseSBpdCB0byBmb3JtIGNvbnRyb2wgYmVmb3JlIGJsdXJyaW5nXG4gICAgICAgKiBOT1RFOiB0aGlzIG1heSBoYXBwZW4gaWYgdmFsdWUgd2FzIGlucHV0IGludG8gY29udHJvbCBidXRcbiAgICAgICAqIG5vIGV4aXN0aW5nIG9wdGlvbnMgd2VyZSBleHBsaWNpdGx5IHNlbGVjdGVkXG4gICAgICAgKi9cbiAgICAgIGlmICghdGhpcy5pZ25vcmVPbkJsdXIgJiYgdHlwZW9mIHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWVGcm9tU3RyaW5nKHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlnbm9yZU9uQmx1ciA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGlmIHdlIGFyZSBzdGlsbCBsb2FkaW5nIC0gc3RvcCBpdFxuICAgICAqL1xuICAgIGlmICh0aGlzLmxvYWRpbmcoKSkge1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogdW5zdWJzY3JpYmUgZnJvbSBvcHRpb25zIHRvIHByZXZlbnQgdGhlaXIgZnVydGhlciBwcm9jZXNzaW5nXG4gICAgICAgKi9cbiAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tT3B0aW9ucygpO1xuXG4gICAgICAvKipcbiAgICAgICAqIHVuc3Vic2NyaWJlIGZyb20gZGlzcGxheSBjb250cm9sIGNoYW5nZSB0byBwcmV2ZW50IGl0IGZyb20gc2VuZGluZyB0aGUgZGF0YVxuICAgICAgICovXG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbURpc3BsYXllZENvbnRyb2woKTtcblxuICAgICAgLyoqXG4gICAgICAgKiByZXN1YnNjcmliZSBpdCBhZ2FpbiB0byByZXR1cm4gdG8gbm9ybWFsIHdvcmtmbG93XG4gICAgICAgKi9cbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EaXNwbGF5ZWRDb250cm9sVmFsdWVDaGFuZ2VkKCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogc2V0IGxvYWRTdWdnZXN0aW9uT25Jbml0IHRvIHJlc3VtZSBsb2FkaW5nIHdoZW4gY29udHJvbCBpcyBmb2N1c2VkIGFnYWluXG4gICAgICAgKi9cbiAgICAgIHRoaXMucmVzZXRJbml0aWFsU3RhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbG9zZVBhbmVsRW5hYmxlZCAmJiAhdGhpcy5wcmV2ZW50Q2xpY2spIHRoaXMudHJpZ2dlcj8uY2xvc2VQYW5lbCgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBpZiB3ZSBoYXZlIG5vIGRpc3BsYXllZCBvcHRpb25zLFxuICAgICAqIHdlIGNhbiBsb2FkIGRhdGEgb24gaW5pdGlhbCB2YWx1ZSxcbiAgICAgKiB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBzdGF0aWMgb3B0aW9ucyxcbiAgICAgKiBpbml0aWFsIHN1Z2dlc3Rpb25zIGFyZSBub3QgeWV0IGxvYWRlZCxcbiAgICAgKiBhbmQgd2UgaGF2ZSBpbnB1dCB2YWx1ZSBvciBjYW4gZW1pdCBlbXB0eSB2YWx1ZXMgLSB3ZSBjYW4gc3RhcnQgbG9hZGluZyBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIGlmIChcbiAgICAgICF0aGlzLmRpc3BsYXllZE9wdGlvbnMuc2l6ZSAmJlxuICAgICAgdGhpcy5sb2FkU3VnZ2VzdGlvbk9uSW5pdCAmJlxuICAgICAgIXRoaXMuc3RhdGljT3B0aW9ucyAmJlxuICAgICAgIXRoaXMuaW5pdGlhbFN1Z2dlc3Rpb25zQ2hlY2tlZCAmJlxuICAgICAgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgfHwgdGhpcy5lbWl0RW1wdHlWYWx1ZXMpXG4gICAgKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuXG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbU9wdGlvbnMoKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBpZiB3ZSBhcmUgbG9hZGluZyBvbiBpbml0IGFuZCBkaXNwbGF5IGNvbnRyb2wgaGFzIHZhbHVlIC0gbWFyayBpdCBhcyBkaXJ0eSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAqL1xuICAgICAgaWYgKHRoaXMubG9hZFN1Z2dlc3Rpb25PbkluaXQgJiYgdGhpcy5kaXNwbGF5Q29udHJvbC52YWx1ZSAmJiB0aGlzLmRpc3BsYXlDb250cm9sLnByaXN0aW5lKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbWl0U2VhcmNoVmFsdWVJbnB1dC5lbWl0KHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbFN1Z2dlc3Rpb25zQ2hlY2tlZCA9IHRydWU7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBvbklucHV0KGV2ZW50VGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50VGFyZ2V0LnZhbHVlLnRyaW0oKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBpZiBuZXcgdHJpbW1lZCB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IHRyaW1tZWQgdmFsdWUgYW5kIG5ldyB0cmltbWVkIHZhbHVlIGlzIGVpdGhlciBlbXB0eSBvclxuICAgICAgICogZml0cyBtaW4gbGVuZ3RoIC0gdXNlIGl0XG4gICAgICAgKiBOT1RFOiB0aGlzIGFsbG93cyB0byBhdm9pZCByZWFjdGluZyBvbiBlbXB0eSBzdHJpbmdzIGJlaW5nIGlucHV0XG4gICAgICAgKiBhbHNvIHNwYWNlcyBpbiB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2lsbCBiZSBpZ25vcmVkIHVudGlsIHRoZXkgYXJlIGZvbGxvd2VkIGJ5IGEgZGlmZmVyZW50IGNoYXJhY3RlclxuICAgICAgICovXG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuZ2V0RGlzcGxheWVkVmFsdWVBc1N0cmluZyhmYWxzZSkudHJpbSgpICYmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoID49IHRoaXMubWluVmFsdWVMZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRyb2wuc2V0VmFsdWUoZXZlbnRUYXJnZXQudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIGdldERpc3BsYXllZFZhbHVlQXNTdHJpbmcoY2hlY2tBZGRpdGlvbmFsRm9ybWF0dGluZyA9IHRydWUpOiBzdHJpbmcge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuXG4gICAgaWYgKHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHZhbHVlID1cbiAgICAgICAgdHlwZW9mIHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWUgPT0gJ3N0cmluZydcbiAgICAgICAgICA/IHRoaXMuZGlzcGxheUNvbnRyb2wudmFsdWVcbiAgICAgICAgICA6ICh0aGlzLmRpc3BsYXlDb250cm9sLnZhbHVlLnZhbHVlID8/ICcnKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBZGRpdGlvbmFsRm9ybWF0dGluZyAmJiB0aGlzLm11c3RBcHBseUFkZGl0aW9uYWxGaWx0ZXJpbmcoKSAmJiB0aGlzLnByZXZpb3VzQ29udHJvbFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5wcmV2aW91c0NvbnRyb2xWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICB0aGlzLmRpc3BsYXllZE9wdGlvbnMgPSBuZXcgTWFwKCk7XG5cbiAgICAgIHRoaXMuYWxsT3B0aW9ucy5mb3JFYWNoKChvcHRpb25WYWx1ZSwgb3B0aW9uKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25WYWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5ZWRPcHRpb25zLnNldChvcHRpb24sIG9wdGlvblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRPcHRpb25zID0gbmV3IE1hcCh0aGlzLmFsbE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgb25TdGF0aWNPcHRpb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIG9wdGlvbjogU2VhcmNoRHJvcGRvd25TdGF0aWNPcHRpb24pOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBvbmx5IHByb2NlZWQgaWYgbGVmdCBtb3VzZSBidXR0b24gd2FzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSByZXR1cm47XG5cbiAgICB0aGlzLmFjdGl2YXRlU3RhdGljT3B0aW9uKG9wdGlvbik7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBvbk9wdGlvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgb3B0aW9uOiBDdXN0b21NYXRPcHRpb24pOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBvbmx5IHByb2NlZWQgaWYgbGVmdCBtb3VzZSBidXR0b24gd2FzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSByZXR1cm47XG5cbiAgICB0aGlzLm1vZGlmeU9wdGlvbkNsaWNrRXZlbnQob3B0aW9uKTtcblxuICAgIGlmICh0aGlzLnByZXZlbnRDbGljaykgcmV0dXJuO1xuXG4gICAgLyoqXG4gICAgICogTk9URTogd2Ugc2V0IGRpc3BsYXlDb250cm9sIHZhbHVlIGluIG1vdXNlZG93biBldmVudCB0byBvdmVycmlkZSB2YWx1ZSBzZXR0aW5nIGluIG9uQ2xpY2tcbiAgICAgKiBhbmQgYXZvaWQgVUkgYXJ0aWZhY3RzIGNvbm5lY3RlZCB3aXRoIGl0XG4gICAgICovXG4gICAgdGhpcy5kaXNwbGF5Q29udHJvbC5zZXRWYWx1ZShvcHRpb24/LnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIGRpc3BsYXlGbiA9IChvcHRpb24/OiB7IGtleTogRHJvcGRvd25Db21wb25lbnRPcHRpb247IHZhbHVlOiBzdHJpbmcgfSk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvbi52YWx1ZSA6ICcnO1xuICB9O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHJlc2V0SW5pdGlhbFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZFN1Z2dlc3Rpb25PbkluaXQgPSB0cnVlO1xuICAgIHRoaXMuaW5pdGlhbFN1Z2dlc3Rpb25zQ2hlY2tlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgY2FuU2hvd0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZGlzcGxheUNvbnRyb2wuZXJyb3JzICYmICh0aGlzLmRpc3BsYXlDb250cm9sLnRvdWNoZWQgfHwgdGhpcy5pbW1lZGlhdGVWYWxpZGF0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByb3RlY3RlZCB0b3VjaEludmFsaWQoY29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcbiAgICBzdXBlci50b3VjaEludmFsaWQoY29udHJvbCk7XG4gICAgc3VwZXIudG91Y2hJbnZhbGlkKHRoaXMuZGlzcGxheUNvbnRyb2wpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJvdGVjdGVkIHByb2Nlc3NPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuYWxsT3B0aW9ucyA9IG5ldyBNYXAoKTtcblxuICAgIC8qKlxuICAgICAqIGlmIG9wdGlvbnMgYXJlIG5vdCBwcm92aWRlZCAtIHJlc2V0XG4gICAgICovXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5kaXNwbGF5ZWRPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFwicHJvY2Vzc09wdGlvbnNcIiBpcyBmaXJlZCBhbnkgdGltZSBvcHRpb25zIGNoYW5nZSAtIHRodXMgd2UgbmVlZCB0byBzZXQgbG9hZGluZyB0byB0cnVlIHdoZW4gaXQgaGFwcGVuc1xuICAgICAqL1xuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBzdWJzY3JpYmUgdG8gb3B0aW9ucyB0byBleHRyYWN0IGRpc3BsYXllZE9wdGlvbnMgZnJvbSB0aGVtXG4gICAgICogTk9URTogd2UgZG8gbm90IHVzZSBkaXNwbGF5ZWRPcHRpb25zIGFzIE9ic2VydmFibGUgYmVjYXVzZVxuICAgICAqIHdlIG1heSBuZWVkIGRpc3BsYXllZE9wdGlvbnMgZGlyZWN0bHkgb24gb25LZXlEb3duIGV2ZW50XG4gICAgICovXG4gICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5vcHRpb25zLnN1YnNjcmliZSgob3B0aW9uczogRHJvcGRvd25Db21wb25lbnRPcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcblxuICAgICAgLyoqXG4gICAgICAgKiB0dXJuIERyb3Bkb3duQ29tcG9uZW50T3B0aW9ucyBpbnRvIERyb3Bkb3duQ29tcG9uZW50RGlzcGxheWVkT3B0aW9uc1xuICAgICAgICovXG4gICAgICBzdXBlci5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgdGhpcy5hbGxPcHRpb25zID0gbmV3IE1hcCh0aGlzLmRpc3BsYXllZE9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJvdGVjdGVkIHNldHVwU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xWYWx1ZVRvRGlzcGxheWVkQ29udHJvbFZhbHVlKCk7XG5cbiAgICAvKipcbiAgICAgKiBzdWJzY3JpYmUgdG8gY29udHJvbCB2YWx1ZSBjaGFuZ2UgdG8gc3luY2hyb25pemUgdGhlIHZhbHVlIHdoZW4gY2hhbmdlZCBleHRlcm5hbGx5XG4gICAgICovXG4gICAgdGhpcy52YWx1ZUNvbnRyb2xTdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0ludGVybmFsVmFsdWVTZXQpIHtcbiAgICAgICAgdGhpcy5jb250cm9sVmFsdWVUb0Rpc3BsYXllZENvbnRyb2xWYWx1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogc3luYyBkaXNwbGF5IGNvbnRyb2wgc3RhdHVzZXMgd2l0aCB2YWx1ZSBjb250cm9sIHN0YXR1cyBmb3IgcHJvcGVyIGVycm9yIGRpc3BsYXlcbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlQ29udHJvbFN0YXR1c1N1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3luY1N0YXRlKCkpO1xuXG4gICAgdGhpcy5zdWJzY3JpYmVUb0Rpc3BsYXllZENvbnRyb2xWYWx1ZUNoYW5nZWQoKTtcblxuICAgIC8qKlxuICAgICAqIGxpc3RlbiB0byBzY3JvbGwgdG8gcmVwb3NpdGlvbiB0aGUgZHJvcGRvd25cbiAgICAgKi9cbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbVNjcm9sbCA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgRG9tSGVscGVyLmdldFNjcm9sbGFibGVQYXJlbnQodGhpcy5yZWYubmF0aXZlRWxlbWVudCksXG4gICAgICAnc2Nyb2xsJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlcj8ucGFuZWxPcGVuKSB0aGlzLnRyaWdnZXIudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuc3luY1N0YXRlKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHN1YnNjcmliZVRvRGlzcGxheWVkQ29udHJvbFZhbHVlQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbnRyb2xTdWJzY3JpcHRpb24gPSB0aGlzLmRpc3BsYXlDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodmFsdWU/OiBTZWFyY2hEcm9wZG93bkRpc3BsYXlDb250cm9sVmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoIXZhbHVlKSB2YWx1ZSA9ICcnO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBtYXJrIGRpc3BsYXlDb250cm9sIGFzIGRpcnR5XG4gICAgICAgICAgICogYmVjYXVzZSBNYXRBdXRvY29tcGxldGUgZG9lcyBub3QgZG8gaXQgYXV0b21hdGljYWxseVxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuZGlzcGxheUNvbnRyb2wubWFya0FzRGlydHkoKTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIHVuc3Vic2NyaWJlIGZyb20gcHJldmlvdXMgb3B0aW9ucyB0byBzdG9wIGxvYWRpbmcgdGhlbVxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tT3B0aW9ucygpO1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogc3RvcCBwcm9jZXNzaW5nIGlmIHZhbHVlIGlzIG5vdCBwcm92aWRlZFxuICAgICAgICAgICAqL1xuICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogY2xlYXIgZGlzcGxheWVkIG9wdGlvbnMgaWYgdmFsdWUgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghdGhpcy5zdGF0aWNPcHRpb25zKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUobnVsbCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxvYWRpbmcoKSkge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogc2V0IGxvYWRTdWdnZXN0aW9uT25Jbml0IHRvIHJlc3VtZSBsb2FkaW5nIHdoZW4gY29udHJvbCBpcyBmb2N1c2VkIGFnYWluXG4gICAgICAgICAgICAgICAqIE5PVEU6IHRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBieSB0aGUgdGltZSBvbkJsdXIgaGFwcGVucyAtIGxvYWRpbmcgaXMgZmFsc2UgYW5kXG4gICAgICAgICAgICAgICAqIHRoaXMgbWV0aG9kIHdpbGwgbm90IGJlIGZpcmVkIGZyb20gb25CbHVyXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlRnJvbU9wdGlvbih2YWx1ZS5rZXksIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0aGlzLmNhbkVtaXRWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgZGVib3VuY2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2FuRW1pdFZhbHVlKHZhbHVlKSAmJiB2YWx1ZSA/IHRpbWVyKDUwMCkgOiBvZih7fSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IFNlYXJjaERyb3Bkb3duRGlzcGxheUNvbnRyb2xWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5FbWl0VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5lbWl0U2VhcmNoVmFsdWVJbnB1dC5lbWl0KDxzdHJpbmc+dmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlRnJvbURpc3BsYXllZENvbnRyb2woKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb250cm9sU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgZGlzcGxheUZpcnN0RXJyb3IoY29udHJvbDogRm9ybUNvbnRyb2wgPSB0aGlzLmRpc3BsYXlDb250cm9sKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VwZXIuZGlzcGxheUZpcnN0RXJyb3IoY29udHJvbCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBjbGVhcihldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzcGxheUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5kaXNwbGF5Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG5cbiAgICBpZiAodGhpcy5jbG9zZVBhbmVsRW5hYmxlZCkgdGhpcy50cmlnZ2VyPy5jbG9zZVBhbmVsKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICB0b2dnbGVQYW5lbChldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMudHJpZ2dlcj8ucGFuZWxPcGVuKSB7XG4gICAgICBpZiAodGhpcy5jbG9zZVBhbmVsRW5hYmxlZCkgdGhpcy50cmlnZ2VyPy5jbG9zZVBhbmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlcj8ub3BlblBhbmVsKCk7XG4gICAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBjb250cm9sVmFsdWVUb0Rpc3BsYXllZENvbnRyb2xWYWx1ZSgpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBleHRyYWN0IGRpc3BsYXlhYmxlIHZhbHVlIGFzIHN0cmluZyBmcm9tIHZhbHVlQ29udHJvbCwgaWYgaXQgaXMgbm90IGVtcHR5XG4gICAgICovXG4gICAgY29uc3QgZGlzcGxheWVkVmFsdWUgPSB0aGlzLnZhbHVlQ29udHJvbC52YWx1ZVxuICAgICAgPyB0aGlzLmdldERpc3BsYXllZFZhbHVlKHRoaXMudmFsdWVDb250cm9sLnZhbHVlKVxuICAgICAgOiB0aGlzLnZhbHVlQ29udHJvbC52YWx1ZTtcblxuICAgIC8qKlxuICAgICAqIHVzZSBpdCB0byBidWlsZCBkaXNwbGF5ZWRDb250cm9sIHZhbHVlXG4gICAgICovXG4gICAgdGhpcy5kaXNwbGF5Q29udHJvbC5zZXRWYWx1ZShcbiAgICAgIGRpc3BsYXllZFZhbHVlID8geyBrZXk6IHRoaXMudmFsdWVDb250cm9sLnZhbHVlLCB2YWx1ZTogZGlzcGxheWVkVmFsdWUgfSA6IHRoaXMudmFsdWVDb250cm9sLnZhbHVlLFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbXVzdEFwcGx5QWRkaXRpb25hbEZpbHRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc3RhdGljT3B0aW9ucyB8fCAodGhpcy5zdGF0aWNPcHRpb25zICYmIHRoaXMuZmlsdGVyT3B0aW9ucyk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHVuc2VsZWN0Q29tcG9uZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGFjdGl2YXRlU3RhdGljT3B0aW9uKG9wdGlvbj86IFNlYXJjaERyb3Bkb3duU3RhdGljT3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24pIHJldHVybjtcblxuICAgIC8qKlxuICAgICAqIGlnbm9yZU9uQmx1ciB0byBcInRydWVcIiB0byBkaXNhYmxlXG4gICAgICogY29tcG9uZW50J3MgaW5wdXQgb25CbHVyIGV2ZW50XG4gICAgICogTk9URTogdGhpcyBpcyBuZWVkZWQgd2hlbiB3ZSBjbGljayBvbiBzdGF0aWMgb3B0aW9uc1xuICAgICAqL1xuICAgIHRoaXMuaWdub3JlT25CbHVyID0gdHJ1ZTtcblxuICAgIHRoaXMubW9yZURhdGFNYXRPcHRpb24/LmRlc2VsZWN0KCk7XG4gICAgdGhpcy5ub0RhdGFNYXRPcHRpb24/LmRlc2VsZWN0KCk7XG5cbiAgICBpZiAob3B0aW9uLm9uQ2xpY2spIHtcbiAgICAgIG9wdGlvbi5vbkNsaWNrKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudW5zZWxlY3RDb21wb25lbnQoKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgc2V0VmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBtYWtlIHN1cmUgZGlzcGxheUNvbnRyb2wgaGFzIHRoZSBzYW1lIHZhbGlkYXRvcnMgYXMgY29udHJvbFxuICAgICAqL1xuICAgIHRoaXMuZGlzcGxheUNvbnRyb2wuYWRkVmFsaWRhdG9ycyh0aGlzLnZhbHVlQ29udHJvbC52YWxpZGF0b3IgPz8gW10pO1xuICAgIC8qKlxuICAgICAqIHJlcXVpcmVkIHZhbGlkYXRvciBtdXN0IGJlIHNldCBtYW51YWxseSBpbiB0aGlzIGNvbXBvbmVudFxuICAgICAqIGJlY2F1c2UgY29udHJvbHMgYXJlIGRpc2Nvbm5lY3RlZCBmcm9tIGlucHV0IGZpZWxkXG4gICAgICovXG4gICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMudmFsdWVDb250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICB0aGlzLmRpc3BsYXlDb250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICAgIHRoaXMudmFsdWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZGlzcGxheUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGNhbkVtaXRWYWx1ZSh2YWx1ZTogU2VhcmNoRHJvcGRvd25EaXNwbGF5Q29udHJvbFZhbHVlKTogYm9vbGVhbiB7XG4gICAgLyoqXG4gICAgICogb25seSBlbWl0IGV2ZW50IGlmIHZhbHVlIGlzIGEgc3RyaW5nLCBhbmQgd2UgY2FuIGVtaXQgZW1wdHkgdmFsdWVzLCBvciBpdCBpcyBub3QgZW1wdHlcbiAgICAgKiBOT1RFOiBpdCBkaXNhbGxvd3MgdG8gZW1pdCBleHBsaWNpdGx5IHNlbGVjdGVkIFwiUkVBTFwiIHZhbHVlc1xuICAgICAqL1xuICAgIHJldHVybiAhdGhpcy5zdGF0aWNPcHRpb25zICYmIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyAmJiAodGhpcy5lbWl0RW1wdHlWYWx1ZXMgfHwgISF2YWx1ZSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHNldENvbnRyb2xWYWx1ZUZyb21TdHJpbmcoZGlzcGxheWVkVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBpc1ZhbHVlQXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogbG9vcCB0aHJvdWdoIGRpc3BsYXllZE9wdGlvbnM7XG4gICAgICogaWYgbWF0Y2hpbmcgZGlzcGxheWVkT3B0aW9uIHZhbHVlIGZvdW5kIC0gdXNlIGRpc3BsYXllZE9wdGlvbnMgb3B0aW9uIGFzIGNvbnRyb2wgdmFsdWVcbiAgICAgKi9cbiAgICBmb3IgKGNvbnN0IFtvcHRpb24sIHZhbHVlXSBvZiB0aGlzLmRpc3BsYXllZE9wdGlvbnMpIHtcbiAgICAgIGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBkaXNwbGF5ZWRWYWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlRnJvbU9wdGlvbihvcHRpb24pO1xuICAgICAgICBpc1ZhbHVlQXBwbGllZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNWYWx1ZUFwcGxpZWQpIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHNldENvbnRyb2xWYWx1ZUZyb21PcHRpb24ob3B0aW9uOiBEcm9wZG93bkNvbXBvbmVudE9wdGlvbiB8IG51bGwsIHNraXBTYW1lID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudW5zZWxlY3RDb21wb25lbnQoKTtcblxuICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKG9wdGlvbiwgc2tpcFNhbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb250cm9sVmFsdWUob3B0aW9uOiBEcm9wZG93bkNvbXBvbmVudE9wdGlvbiB8IG51bGwsIHNraXBTYW1lID0gdHJ1ZSkge1xuICAgIC8qKlxuICAgICAqIG9ubHkgdXBkYXRlIGNvbnRyb2wgdmFsdWUgaWYgaXQgZGlmZmVycyBmcm9tIHByb3ZpZGVkIG9uZVxuICAgICAqIE5PVEU6IHdlIG5lZWQgdGhpcyBjaGVjayB0byBhdm9pZCBlbWl0dGluZyBjb250cm9sIHZhbHVlIGNoYW5nZVxuICAgICAqIHdoZW4gdGhlIHNhbWUgZHJvcGRvd24gb3B0aW9uIGlzIHNlbGVjdGVkIGluIGRyb3Bkb3duIHNldmVyYWwgdGltZXNcbiAgICAgKi9cbiAgICBpZiAoc2tpcFNhbWUgJiYgdGhpcy52YWx1ZUNvbnRyb2wudmFsdWUgPT09IG9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWVDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLnZhbHVlQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuXG4gICAgLyoqXG4gICAgICogdG9nZ2xlIGlzSW50ZXJuYWxWYWx1ZVNldCB0byBtYWtlXG4gICAgICogc3VyZSBpbnRlcm5hbCBzdWJzY3JpcHRpb24gdG8gY29udHJvbCB2YWx1ZSB3aWxsXG4gICAgICogaWdub3JlIHRoaXMgc2V0VmFsdWUgZXZlbnRcbiAgICAgKi9cbiAgICB0aGlzLmlzSW50ZXJuYWxWYWx1ZVNldCA9IHRydWU7XG4gICAgdGhpcy52YWx1ZUNvbnRyb2wuc2V0VmFsdWUob3B0aW9uKTtcbiAgICB0aGlzLmlzSW50ZXJuYWxWYWx1ZVNldCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvdmVycmlkZUtleWRvd25IYW5kbGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaWdnZXIpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLnRyaWdnZXIuX2hhbmRsZUtleWRvd247XG5cbiAgICAgIC8qKlxuICAgICAgICogdGhpcyBhbGxvd3MgdG8gYmxvY2sgZGVmYXVsdCBrZXlkb3duIGhhbmRsZXIgaWYgbmVlZGVkXG4gICAgICAgKi9cbiAgICAgIHRoaXMudHJpZ2dlci5faGFuZGxlS2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb24gPSA8Q3VzdG9tTWF0T3B0aW9uPnRoaXMudHJpZ2dlcj8uYWN0aXZlT3B0aW9uO1xuXG4gICAgICAgIHRoaXMubW9kaWZ5T3B0aW9uQ2xpY2tFdmVudChvcHRpb24pO1xuXG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLnRyaWdnZXIsIGV2ZW50KTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogbWFrZSBzdXJlIG9wdGlvbiBkb2VzIG5vdCBsb3NlIFwic2VsZWN0ZWRcIiBzdGF0ZSBpZiBjbGljayBpcyBwcmV2ZW50ZWRcbiAgICAgICAgICogTk9URTogdGhpcyBpcyBkIG9uZSBmb3IgXCJuaWNldHlcIlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMucHJldmVudENsaWNrICYmIG9wdGlvbiAmJiBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICB0aGlzLmF1dG8/Ll9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vZGlmeU9wdGlvbkNsaWNrRXZlbnQob3B0aW9uOiBDdXN0b21NYXRPcHRpb24pOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBtb2RpZnkgXCJfc2VsZWN0VmlhSW50ZXJhY3Rpb25cIiBtZXRob2Qgb2YgdGhlIG9wdGlvblxuICAgICAqIHNvIHRoYXQgd2UgY2FuIGJsb2NrIGl0cyBzZWxlY3Rpb24gaWYgbmVlZGVkXG4gICAgICovXG4gICAgaWYgKG9wdGlvbiAmJiAhb3B0aW9uLm1vZGlmaWVkKSB7XG4gICAgICBvcHRpb24ubW9kaWZpZWQgPSB0cnVlO1xuXG4gICAgICBjb25zdCBoYW5kbGVyID0gb3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbjtcblxuICAgICAgb3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbiA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJldmVudENsaWNrKSB7XG4gICAgICAgICAgdGhpcy5hdXRvPy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlci5jYWxsKG9wdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBbbmdTdHlsZV09XCJ7IG1pbldpZHRoOiB3aWR0aCB9XCIgY2xhc3M9XCJhZHMtZmllbGQtY29udGFpbmVyXCI+XG4gIDxkaXYgW25nU3R5bGVdPVwieyB3aWR0aDogd2lkdGggfVwiPlxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaW1tZWRpYXRlLXZhbGlkYXRpb24nOiBpbW1lZGlhdGVWYWxpZGF0aW9uLFxuICAgICAgICAnaXMtb3Blbic6IHRyaWdnZXI/LnBhbmVsT3BlbixcbiAgICAgICAgaW52YWxpZDogY2FuU2hvd0Vycm9yKCksXG4gICAgICAgICdzdWNjZXNzLWxhYmVsJzogY2FuU2hvd1N1Y2Nlc3MoKSxcbiAgICAgICAgJ3gtc21hbGwnOiBzbWFsbFNpemUsXG4gICAgICB9XCJcbiAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IHdpZHRoIH1cIlxuICAgID5cbiAgICAgIEBpZiAoKGxhYmVsIHx8IHJlcXVpcmVkKSAmJiAhc21hbGxTaXplKSB7XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgbGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICAgIH1cbiAgICAgIDxpbnB1dFxuICAgICAgICAjaW5wdXRcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc3BsYXlDb250cm9sLmRpc2FibGVkXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25LZXlEb3duKCRldmVudC50YXJnZXQpXCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiJ25vbmUnXCJcbiAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgW3ZhbHVlXT1cImdldERpc3BsYXllZFZhbHVlQXNTdHJpbmcoKVwiXG4gICAgICAgIFthdHRyLm1heGxlbmd0aF09XCJtYXhsZW5ndGhcIlxuICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgLz5cbiAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlGblwiXG4gICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgJ2Fkcy1kcm9wZG93bi1wYW5lbCcgK1xuICAgICAgICAgIChmaXRDb250ZW50ID8gJyBmaXQtY29udGVudCcgOiAnJykgK1xuICAgICAgICAgIChsb2FkaW5nKCkgPyAnIGxvYWRpbmcnIDogJycpICtcbiAgICAgICAgICAocHJldmVudENsaWNrID8gJycgOiAnIGNsaWNrYWJsZScpICtcbiAgICAgICAgICAnICcgK1xuICAgICAgICAgIHBhbmVsQ2xhc3NcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgQGZvciAob3B0aW9uIG9mIGRpc3BsYXllZE9wdGlvbnMgfCBrZXl2YWx1ZTogYXBwbHlTb3J0aW5nOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8bWF0LW9wdGlvbiAjb3B0IFt2YWx1ZV09XCJvcHRpb25cIiAobW91c2Vkb3duKT1cIm9uT3B0aW9uTW91c2VEb3duKCRldmVudCwgb3B0KVwiPlxuICAgICAgICAgICAgQGlmICh1c2VPcHRpb25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25SZWYoKVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb24ua2V5LCB2YWx1ZTogb3B0aW9uLnZhbHVlIH1cIlxuICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyBkaXNwbGF5VmFsdWVGb3JtYXR0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24hLnZhbHVlISB8IGFkc1NlYXJjaERyb3Bkb3duSGlnaGxpZ2h0ZXI6IGRpc3BsYXlDb250cm9sLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmtleVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiAob3B0aW9uIS52YWx1ZSEgfCBhZHNTZWFyY2hEcm9wZG93bkhpZ2hsaWdodGVyOiBkaXNwbGF5Q29udHJvbC52YWx1ZSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoY2FuVXNlTW9yZURhdGFPcHRpb24pIHtcbiAgICAgICAgICA8aHIgY2xhc3M9XCJuby1yZXN1bHRzLWhyXCIgLz5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAjbW9yZURhdGFNYXRPcHRpb24gY2xhc3M9XCJleHRyYVwiIFtkaXNhYmxlZF09XCIhbW9yZURhdGFPcHRpb24hLm9uQ2xpY2tcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXh0cmFPcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbW9yZURhdGFPcHRpb24gfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoY2FuVXNlTm9EYXRhT3B0aW9uKSB7XG4gICAgICAgICAgPG1hdC1vcHRpb24gI25vRGF0YU1hdE9wdGlvbiBjbGFzcz1cImV4dHJhXCIgW2Rpc2FibGVkXT1cIiFub0RhdGFPcHRpb24hLm9uQ2xpY2tcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXh0cmFPcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9EYXRhT3B0aW9uIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGNhblVzZVN0YXRpY09wdGlvbikge1xuICAgICAgICAgIEBpZiAoZGlzcGxheWVkT3B0aW9ucy5zaXplKSB7XG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJuby1yZXN1bHRzLWhyXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPG1hdC1vcHRpb24gI3N0YXRpY0RhdGFNYXRPcHRpb24gY2xhc3M9XCJleHRyYVwiIFtkaXNhYmxlZF09XCIhc3RhdGljRGF0YU9wdGlvbiEub25DbGlja1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJleHRyYU9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBzdGF0aWNEYXRhT3B0aW9uIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cblxuICAgICAgQGlmIChjYW5DbGVhcikge1xuICAgICAgICA8YnV0dG9uIG1hdFRleHRTdWZmaXggdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiIGNsYXNzPVwiYWN0aW9uLWljb25cIj5cbiAgICAgICAgICA8YWRzLWljb24gbmFtZT1cImNyb3NzXCIgW3NpemVdPVwic21hbGxTaXplID8gJ3h4cycgOiAneHMnXCIgW3RoZW1lXT1cIidpY29uUHJpbWFyeSdcIiBjbGFzcz1cImNyb3NzLWljb25cIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoc2hvd0Ryb3Bkb3duSWNvbikge1xuICAgICAgICA8YnV0dG9uIG1hdFRleHRTdWZmaXggdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlUGFuZWwoJGV2ZW50KVwiIGNsYXNzPVwiYWN0aW9uLWljb25cIj5cbiAgICAgICAgICA8YWRzLWljb25cbiAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uX2Rvd25cIlxuICAgICAgICAgICAgW3NpemVdPVwic21hbGxTaXplID8gJ3h4cycgOiAneHMnXCJcbiAgICAgICAgICAgIFt0aGVtZV09XCInaWNvblByaW1hcnknXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2hldnJvbi1kb3duXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoIXN0YXRpY09wdGlvbnMgJiYgbG9hZGluZygpKSB7XG4gICAgICAgIDxtYXQtc3Bpbm5lciBtYXRUZXh0U3VmZml4IGRpYW1ldGVyPVwiMjJcIiAvPlxuICAgICAgfVxuICAgICAgQGlmICghc3RhdGljT3B0aW9ucyAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXRUZXh0U3VmZml4XG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5TZWFyY2hcIlxuICAgICAgICAgIChjbGljayk9XCJjYW5TZWFyY2ggPyBvblNlYXJjaEljb25DbGljaygkZXZlbnQpIDogbnVsbFwiXG4gICAgICAgICAgY2xhc3M9XCJhY3Rpb24taWNvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8YWRzLWljb24gbmFtZT1cInNlYXJjaFwiIHNpemU9XCJ4c1wiIFt0aGVtZV09XCInaWNvblByaW1hcnknXCIgY2xhc3M9XCJzZWFyY2gtaWNvblwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPGRpdiBjbGFzcz1cImZvb3Rlci1jb250YWluZXJcIj5cbiAgICAgIEBpZiAoY2FuU2hvd0Vycm9yKCkpIHtcbiAgICAgICAgPGFkcy1lcnJvciBbZXJyb3JdPVwiZGlzcGxheUZpcnN0RXJyb3IoKVwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6IHdpZHRoIH1cIiAvPlxuICAgICAgfSBAZWxzZSBpZiAoY2FuU2hvd1N1Y2Nlc3MoKSkge1xuICAgICAgICA8YWRzLXN1Y2Nlc3MgW3N1Y2Nlc3NdPVwic3VjY2Vzc01lc3NhZ2UhXCIgW25nU3R5bGVdPVwieyB3aWR0aDogd2lkdGggfVwiIC8+XG4gICAgICB9IEBlbHNlIGlmIChoaW50KSB7XG4gICAgICAgIDxhZHMtaGludCBbaGludF09XCJoaW50XCIgW2NvbnRyb2xdPVwidmFsdWVDb250cm9sXCIgW25nU3R5bGVdPVwieyB3aWR0aDogd2lkdGggfVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBAaWYgKHRvb2x0aXApIHtcbiAgICA8YWRzLWlucHV0LXRvb2x0aXAgW3Rvb2x0aXBdPVwidG9vbHRpcFwiIFtzbWFsbFNpemVdPVwic21hbGxTaXplXCIgLz5cbiAgfVxuXG4gIDxuZy10ZW1wbGF0ZSAjZXh0cmFPcHRpb25WYWx1ZSBsZXQtb3B0aW9uPlxuICAgIDxzcGFuXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25TdGF0aWNPcHRpb25Nb3VzZURvd24oJGV2ZW50LCBvcHRpb24hKVwiXG4gICAgICBbaW5uZXJIVE1MXT1cIm9wdGlvbiEubGFiZWxcIlxuICAgID48L3NwYW4+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|