@natec/mef-dev-ui-kit 16.3.55 → 16.3.59
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/lib/pg-components/select/select.component.mjs +4 -17
- package/esm2022/lib/pg-components/switch/switch.component.mjs +15 -15
- package/fesm2022/natec-mef-dev-ui-kit.mjs +18 -30
- package/fesm2022/natec-mef-dev-ui-kit.mjs.map +1 -1
- package/lib/pg-components/switch/switch.component.d.ts +6 -0
- package/package.json +1 -1
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { DOWN_ARROW, ENTER, TAB } from "@angular/cdk/keycodes";
|
|
6
6
|
import { CdkConnectedOverlay } from "@angular/cdk/overlay";
|
|
7
|
-
import {
|
|
8
|
-
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
7
|
+
import { Component, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation } from "@angular/core";
|
|
9
8
|
import { OptionPipe } from "./option.pipe";
|
|
10
9
|
import { toBoolean } from '../util/convert';
|
|
11
10
|
import { animate, state, style, transition, trigger } from "@angular/animations";
|
|
@@ -623,13 +622,7 @@ export class MefDevSelectComponent {
|
|
|
623
622
|
}
|
|
624
623
|
}
|
|
625
624
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MefDevSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
626
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MefDevSelectComponent, selector: "mefdev-select", inputs: { Filter: "Filter", MaxMultiple: "MaxMultiple", FirstDefault: "FirstDefault", AllowClear: "AllowClear", KeepUnListOptions: "KeepUnListOptions", Mode: "Mode", Multiple: "Multiple", PlaceHolder: "PlaceHolder", NotFoundContent: "NotFoundContent", Size: "Size", ShowSearch: "ShowSearch", Tags: "Tags", Disabled: "Disabled", Open: "Open" }, outputs: { SearchChange: "SearchChange", change: "change", OpenChange: "OpenChange", ScrollToBottom: "ScrollToBottom" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)" } },
|
|
627
|
-
{
|
|
628
|
-
provide: NG_VALUE_ACCESSOR,
|
|
629
|
-
useExisting: forwardRef(() => MefDevSelectComponent),
|
|
630
|
-
multi: true
|
|
631
|
-
}
|
|
632
|
-
], viewQueries: [{ propertyName: "searchInputElementRef", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "dropdownUl", first: true, predicate: ["dropdownUl"], descendants: true }, { propertyName: "_cdkOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true }], ngImport: i0, template: "<div tabindex=\"0\" #trigger cdkOverlayOrigin #origin=\"cdkOverlayOrigin\" [ngClass]=\"_selectionClassMap\"\r\n (keydown.Enter)=\"handleKeyEnterEvent($event)\" (keydown.Backspace)=\"handleKeyBackspaceEvent($event)\"\r\n (keydown.ArrowUp)=\"handleKeyUpEvent($event)\" (keydown.ArrowDown)=\"handleKeyDownEvent($event)\">\r\n\r\n <!-- \u0423\u0432\u0435\u0441\u044C \u0441\u0435\u043B\u0435\u043A\u0442-->\r\n <div class=\"pg-select-selection__rendered\" *ngIf=\"!ShowSearch\">\r\n <div class=\"pg-select-selection__placeholder\">\r\n <ng-template [ngIf]=\"!_selectedOption\">\r\n {{ PlaceHolder }}\r\n </ng-template>\r\n </div>\r\n <div class=\"pg-select-selection-selected-value\">\r\n {{ _selectedOption?.Label }}\r\n </div>\r\n </div>\r\n <!--C\u043F\u0438\u0441\u043E\u043A options-->\r\n <div class=\"pg-select-selection__rendered\" *ngIf=\"ShowSearch\">\r\n <div [hidden]=\"_searchText||(!Open&&_selectedOption)||_selectedOptions.size\"\r\n class=\"pg-select-selection__placeholder\">\r\n <ng-template [ngIf]=\"(!_composing)&&_selectedOption\">\r\n {{ _selectedOption.Label }}\r\n </ng-template>\r\n <ng-template [ngIf]=\"(!_composing)&&(!_selectedOption)\">\r\n {{ PlaceHolder }}\r\n </ng-template>\r\n </div>\r\n\r\n\r\n <!--\u041C\u0443\u043B\u044C\u0442\u0438\u0441\u0435\u043B\u0435\u043A\u0442-->\r\n <ul *ngIf=\"Multiple\"> \r\n <li *ngFor=\"let option of _selectedOptions\" [@tagAnimation] [attr.title]=\"option?.Label || option?.Value\"\r\n class=\"pg-select-selection__choice\" style=\"-webkit-user-select: none;\">\r\n <span class=\"pg-select-selection__choice__remove\" (click)=\"unSelectMultipleOption(option,$event)\"></span>\r\n <div class=\"pg-select-selection__choice__content\">{{ option?.Label }}</div>\r\n </li>\r\n <li class=\"pg-select-search pg-select-search--inline\">\r\n <div class=\"pg-select-search__field__wrap\">\r\n <input class=\"pg-select-search__field\" (compositionstart)=\"compositionStart()\"\r\n (compositionend)=\"compositionEnd();updateWidth(searchInput,_searchText);\" [(ngModel)]=\"_searchText\"\r\n (ngModelChange)=\"updateFilterOption();onSearchChange($event);\"\r\n (keydown)=\"updateWidth(searchInput,_searchText)\" (input)=\"updateWidth(searchInput,_searchText)\"\r\n (blur)=\"onTouched()\" #searchInput>\r\n <span class=\"pg-select-search__field__mirror\"></span></div>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"!Multiple\" class=\"pg-select-selection-selected-value\" [hidden]=\"!(_selectedOption?.Label)||Open\">\r\n {{ _selectedOption?.Label }}\r\n </div>\r\n <div *ngIf=\"!Multiple\" [hidden]=\"!Open\" class=\"pg-select-search pg-select-search--inline\">\r\n <div class=\"pg-select-search__field__wrap\">\r\n <input class=\"pg-select-search__field\" (blur)=\"onTouched()\" (compositionstart)=\"compositionStart()\"\r\n (compositionend)=\"compositionEnd()\" [(ngModel)]=\"_searchText\"\r\n (ngModelChange)=\"updateFilterOption();onSearchChange($event);\" #searchInput>\r\n <span class=\"pg-select-search__field__mirror\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <span (click)=\"onTouched();clearSelect($event)\" class=\"pg-select-selection__clear\" style=\"-webkit-user-select: none;\"\r\n *ngIf=\"_selectedOption?.Label&&AllowClear&&!Multiple\">\r\n </span>\r\n <span class=\"pg-select-arrow\"><b></b></span>\r\n</div>\r\n<ng-template cdkConnectedOverlay cdkConnectedOverlayHasBackdrop [cdkConnectedOverlayOrigin]=\"origin\"\r\n (backdropClick)=\"closeDropDown()\" (detach)=\"closeDropDown();\" (positionChange)=\"onPositionChange($event)\"\r\n [cdkConnectedOverlayWidth]=\"_triggerWidth\" [cdkConnectedOverlayOpen]=\"_isOpen\">\r\n <div [ngClass]=\"_dropDownClassMap\" [@dropDownAnimation]=\"_dropDownPosition\">\r\n <div style=\"overflow: auto;\">\r\n <ul class=\"pg-select-dropdown-menu pg-select-dropdown-menu-vertical pg-select-dropdown-menu-root\" #dropdownUl\r\n (scroll)=\"dropDownScroll(dropdownUl)\">\r\n <li *ngFor=\"let option of _filterOptions\" [class.pg-select-dropdown-menu-item-disabled]=\"option.Disabled\"\r\n [class.pg-select-dropdown-menu-item-active]=\"option.Value == _activeFilterOption?.Value\"\r\n [class.pg-select-dropdown-menu-item-selected]=\"(option.Value==(_selectedOption?.Value))||(isInSet(_selectedOptions,option))\"\r\n class=\"pg-select-dropdown-menu-item\" (click)=\"clickOption(option,$event)\">\r\n <ng-template *ngIf=\"option.OptionTemplate\" [ngTemplateOutlet]=\"option.OptionTemplate\">\r\n </ng-template>\r\n <ng-template [ngIf]=\"!option.OptionTemplate\">\r\n {{ option.Label }}\r\n </ng-template>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], animations: [trigger('dropDownAnimation', [
|
|
625
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MefDevSelectComponent, selector: "mefdev-select", inputs: { Filter: "Filter", MaxMultiple: "MaxMultiple", FirstDefault: "FirstDefault", AllowClear: "AllowClear", KeepUnListOptions: "KeepUnListOptions", Mode: "Mode", Multiple: "Multiple", PlaceHolder: "PlaceHolder", NotFoundContent: "NotFoundContent", Size: "Size", ShowSearch: "ShowSearch", Tags: "Tags", Disabled: "Disabled", Open: "Open" }, outputs: { SearchChange: "SearchChange", change: "change", OpenChange: "OpenChange", ScrollToBottom: "ScrollToBottom" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "searchInputElementRef", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "dropdownUl", first: true, predicate: ["dropdownUl"], descendants: true }, { propertyName: "_cdkOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true }], ngImport: i0, template: "<div tabindex=\"0\" #trigger cdkOverlayOrigin #origin=\"cdkOverlayOrigin\" [ngClass]=\"_selectionClassMap\"\r\n (keydown.Enter)=\"handleKeyEnterEvent($event)\" (keydown.Backspace)=\"handleKeyBackspaceEvent($event)\"\r\n (keydown.ArrowUp)=\"handleKeyUpEvent($event)\" (keydown.ArrowDown)=\"handleKeyDownEvent($event)\">\r\n\r\n <!-- \u0423\u0432\u0435\u0441\u044C \u0441\u0435\u043B\u0435\u043A\u0442-->\r\n <div class=\"pg-select-selection__rendered\" *ngIf=\"!ShowSearch\">\r\n <div class=\"pg-select-selection__placeholder\">\r\n <ng-template [ngIf]=\"!_selectedOption\">\r\n {{ PlaceHolder }}\r\n </ng-template>\r\n </div>\r\n <div class=\"pg-select-selection-selected-value\">\r\n {{ _selectedOption?.Label }}\r\n </div>\r\n </div>\r\n <!--C\u043F\u0438\u0441\u043E\u043A options-->\r\n <div class=\"pg-select-selection__rendered\" *ngIf=\"ShowSearch\">\r\n <div [hidden]=\"_searchText||(!Open&&_selectedOption)||_selectedOptions.size\"\r\n class=\"pg-select-selection__placeholder\">\r\n <ng-template [ngIf]=\"(!_composing)&&_selectedOption\">\r\n {{ _selectedOption.Label }}\r\n </ng-template>\r\n <ng-template [ngIf]=\"(!_composing)&&(!_selectedOption)\">\r\n {{ PlaceHolder }}\r\n </ng-template>\r\n </div>\r\n\r\n\r\n <!--\u041C\u0443\u043B\u044C\u0442\u0438\u0441\u0435\u043B\u0435\u043A\u0442-->\r\n <ul *ngIf=\"Multiple\"> \r\n <li *ngFor=\"let option of _selectedOptions\" [@tagAnimation] [attr.title]=\"option?.Label || option?.Value\"\r\n class=\"pg-select-selection__choice\" style=\"-webkit-user-select: none;\">\r\n <span class=\"pg-select-selection__choice__remove\" (click)=\"unSelectMultipleOption(option,$event)\"></span>\r\n <div class=\"pg-select-selection__choice__content\">{{ option?.Label }}</div>\r\n </li>\r\n <li class=\"pg-select-search pg-select-search--inline\">\r\n <div class=\"pg-select-search__field__wrap\">\r\n <input class=\"pg-select-search__field\" (compositionstart)=\"compositionStart()\"\r\n (compositionend)=\"compositionEnd();updateWidth(searchInput,_searchText);\" [(ngModel)]=\"_searchText\"\r\n (ngModelChange)=\"updateFilterOption();onSearchChange($event);\"\r\n (keydown)=\"updateWidth(searchInput,_searchText)\" (input)=\"updateWidth(searchInput,_searchText)\"\r\n (blur)=\"onTouched()\" #searchInput>\r\n <span class=\"pg-select-search__field__mirror\"></span></div>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"!Multiple\" class=\"pg-select-selection-selected-value\" [hidden]=\"!(_selectedOption?.Label)||Open\">\r\n {{ _selectedOption?.Label }}\r\n </div>\r\n <div *ngIf=\"!Multiple\" [hidden]=\"!Open\" class=\"pg-select-search pg-select-search--inline\">\r\n <div class=\"pg-select-search__field__wrap\">\r\n <input class=\"pg-select-search__field\" (blur)=\"onTouched()\" (compositionstart)=\"compositionStart()\"\r\n (compositionend)=\"compositionEnd()\" [(ngModel)]=\"_searchText\"\r\n (ngModelChange)=\"updateFilterOption();onSearchChange($event);\" #searchInput>\r\n <span class=\"pg-select-search__field__mirror\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <span (click)=\"onTouched();clearSelect($event)\" class=\"pg-select-selection__clear\" style=\"-webkit-user-select: none;\"\r\n *ngIf=\"_selectedOption?.Label&&AllowClear&&!Multiple\">\r\n </span>\r\n <span class=\"pg-select-arrow\"><b></b></span>\r\n</div>\r\n<ng-template cdkConnectedOverlay cdkConnectedOverlayHasBackdrop [cdkConnectedOverlayOrigin]=\"origin\"\r\n (backdropClick)=\"closeDropDown()\" (detach)=\"closeDropDown();\" (positionChange)=\"onPositionChange($event)\"\r\n [cdkConnectedOverlayWidth]=\"_triggerWidth\" [cdkConnectedOverlayOpen]=\"_isOpen\">\r\n <div [ngClass]=\"_dropDownClassMap\" [@dropDownAnimation]=\"_dropDownPosition\">\r\n <div style=\"overflow: auto;\">\r\n <ul class=\"pg-select-dropdown-menu pg-select-dropdown-menu-vertical pg-select-dropdown-menu-root\" #dropdownUl\r\n (scroll)=\"dropDownScroll(dropdownUl)\">\r\n <li *ngFor=\"let option of _filterOptions\" [class.pg-select-dropdown-menu-item-disabled]=\"option.Disabled\"\r\n [class.pg-select-dropdown-menu-item-active]=\"option.Value == _activeFilterOption?.Value\"\r\n [class.pg-select-dropdown-menu-item-selected]=\"(option.Value==(_selectedOption?.Value))||(isInSet(_selectedOptions,option))\"\r\n class=\"pg-select-dropdown-menu-item\" (click)=\"clickOption(option,$event)\">\r\n <ng-template *ngIf=\"option.OptionTemplate\" [ngTemplateOutlet]=\"option.OptionTemplate\">\r\n </ng-template>\r\n <ng-template [ngIf]=\"!option.OptionTemplate\">\r\n {{ option.Label }}\r\n </ng-template>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], animations: [trigger('dropDownAnimation', [
|
|
633
626
|
state('bottom', style({
|
|
634
627
|
opacity: 1,
|
|
635
628
|
transform: 'scaleY(1)',
|
|
@@ -675,13 +668,7 @@ export class MefDevSelectComponent {
|
|
|
675
668
|
}
|
|
676
669
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MefDevSelectComponent, decorators: [{
|
|
677
670
|
type: Component,
|
|
678
|
-
args: [{ selector: "mefdev-select", encapsulation: ViewEncapsulation.None,
|
|
679
|
-
{
|
|
680
|
-
provide: NG_VALUE_ACCESSOR,
|
|
681
|
-
useExisting: forwardRef(() => MefDevSelectComponent),
|
|
682
|
-
multi: true
|
|
683
|
-
}
|
|
684
|
-
], animations: [trigger('dropDownAnimation', [
|
|
671
|
+
args: [{ selector: "mefdev-select", encapsulation: ViewEncapsulation.None, animations: [trigger('dropDownAnimation', [
|
|
685
672
|
state('bottom', style({
|
|
686
673
|
opacity: 1,
|
|
687
674
|
transform: 'scaleY(1)',
|
|
@@ -779,4 +766,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
779
766
|
type: HostListener,
|
|
780
767
|
args: ["keydown", ["$event"]]
|
|
781
768
|
}] } });
|
|
782
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWtpdC1saWIvc3JjL2xpYi9wZy1jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkta2l0LWxpYi9zcmMvbGliL3BnLWNvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsbUJBQW1CLEVBRXBCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLFVBQVUsRUFHVixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBR2pGOzs7SUFHSTtBQXlESixNQUFNLE9BQU8scUJBQXFCO0lBMm9CdEI7SUFDQTtJQUNBO0lBdm9CRixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLGtCQUFrQixHQUFH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RFAsS0FBSztnQkFZRixVQUFVO3NCQURiLEtBQUs7Z0JBVUYsSUFBSTtzQkFEUCxLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFZRixJQUFJO3NCQURQLEtBQUs7Z0JBMlVOLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZWpDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogY29tcGxleCBidXQgd29yayB3ZWxsXHJcbiAqIFRPRE86IHJlYnVpbGQgbGF0dGVyXHJcbiAqL1xyXG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgVEFCIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9rZXljb2Rlc1wiO1xyXG5pbXBvcnQge1xyXG4gIENka0Nvbm5lY3RlZE92ZXJsYXksXHJcbiAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XHJcbmltcG9ydCB7XHJcbiAgZm9yd2FyZFJlZixcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWVmRGV2T3B0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vb3B0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBPcHRpb25QaXBlIH0gZnJvbSBcIi4vb3B0aW9uLnBpcGVcIjtcclxuaW1wb3J0IHsgdG9Cb29sZWFuIH0gZnJvbSAnLi4vdXRpbC9jb252ZXJ0JztcclxuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcclxuXHJcblxyXG4vKipcclxuICAqIEV4YW1wbGUgb2YgdXNhZ2U6XHJcbiAgKiA8ZXhhbXBsZS11cmw+aHR0cHM6Ly9tZWYuZGV2L3VpX2tpdF9kZW1vL3ZpZXcvY29udHJvbHMvc2VsZWN0PC9leGFtcGxlLXVybD5cclxuICAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJtZWZkZXYtc2VsZWN0XCIsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICB0ZW1wbGF0ZVVybDogXCIuL3NlbGVjdC5jb21wb25lbnQuaHRtbFwiLFxyXG5cclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1lZkRldlNlbGVjdENvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXSxcclxuICBhbmltYXRpb25zOiBbdHJpZ2dlcignZHJvcERvd25BbmltYXRpb24nLCBbXHJcbiAgICBzdGF0ZSgnYm90dG9tJywgc3R5bGUoe1xyXG4gICAgICBvcGFjaXR5ICAgICAgICA6IDEsXHJcbiAgICAgIHRyYW5zZm9ybSAgICAgIDogJ3NjYWxlWSgxKScsXHJcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAlIDAlJ1xyXG4gICAgfSkpLFxyXG4gICAgdHJhbnNpdGlvbigndm9pZCA9PiBib3R0b20nLCBbXHJcbiAgICAgIHN0eWxlKHtcclxuICAgICAgICBvcGFjaXR5ICAgICAgICA6IDAsXHJcbiAgICAgICAgdHJhbnNmb3JtICAgICAgOiAnc2NhbGVZKDApJyxcclxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICcwJSAwJSdcclxuICAgICAgfSksXHJcbiAgICAgIGFuaW1hdGUoJzE1MG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpJylcclxuICAgIF0pLFxyXG4gICAgc3RhdGUoJ3RvcCcsIHN0eWxlKHtcclxuICAgICAgb3BhY2l0eSAgICAgICAgOiAxLFxyXG4gICAgICB0cmFuc2Zvcm0gICAgICA6ICdzY2FsZVkoMSknLFxyXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46ICcwJSAxMDAlJ1xyXG4gICAgfSkpLFxyXG4gICAgdHJhbnNpdGlvbigndm9pZCA9PiB0b3AnLCBbXHJcbiAgICAgIHN0eWxlKHtcclxuICAgICAgICBvcGFjaXR5ICAgICAgICA6IDAsXHJcbiAgICAgICAgdHJhbnNmb3JtICAgICAgOiAnc2NhbGVZKDApJyxcclxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICcwJSAxMDAlJ1xyXG4gICAgICB9KSxcclxuICAgICAgYW5pbWF0ZSgnMTUwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknKVxyXG4gICAgXSksXHJcbiAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXHJcbiAgICAgIGFuaW1hdGUoJzI1MG1zIDEwMG1zIGxpbmVhcicsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSlcclxuICAgIF0pXHJcbiAgXSksXHJcblxyXG4gIHRyaWdnZXIoJ3RhZ0FuaW1hdGlvbicsIFtcclxuICAgIHN0YXRlKCcqJywgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdzY2FsZSgxKScgfSkpLFxyXG4gICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW1xyXG4gICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDApJyB9KSxcclxuICAgICAgYW5pbWF0ZSgnMTUwbXMgbGluZWFyJylcclxuICAgIF0pLFxyXG4gICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDApJyB9KSksXHJcbiAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXHJcbiAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnc2NhbGUoMSknIH0pLFxyXG4gICAgICBhbmltYXRlKCcxNTBtcyBsaW5lYXInKVxyXG4gICAgXSldKV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1lZkRldlNlbGVjdENvbXBvbmVudFxyXG4gIGltcGxlbWVudHNcclxuICAgIE9uSW5pdCxcclxuICAgIEFmdGVyQ29udGVudEluaXQsXHJcbiAgICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHByaXZhdGUgX2FsbG93Q2xlYXIgPSBmYWxzZTtcclxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzVGFncyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzTXVsdGlwbGUgPSBmYWxzZTtcclxuICBwcml2YXRlIF9rZWVwVW5MaXN0T3B0aW9ucyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3Nob3dTZWFyY2ggPSBmYWxzZTtcclxuICBfZWw6IEhUTUxFbGVtZW50O1xyXG4gIF9pc09wZW4gPSBmYWxzZTtcclxuICBfcHJlZml4Q2xzID0gXCJwZy1zZWxlY3RcIjtcclxuICBfY2xhc3NMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIF9kcm9wRG93bkNsYXNzTWFwOiBhbnk7XHJcbiAgX2Ryb3BEb3duUHJlZml4Q2xzID0gYCR7dGhpcy5fcHJlZml4Q2xzfS1kcm9wZG93bmA7XHJcbiAgX3NlbGVjdGlvbkNsYXNzTWFwOiBhbnk7XHJcbiAgX3NlbGVjdGlvblByZWZpeENscyA9IGAke3RoaXMuX3ByZWZpeENsc30tc2VsZWN0aW9uYDtcclxuICBfc2l6ZTogc3RyaW5nO1xyXG4gIF92YWx1ZTogc3RyaW5nW10gfCBzdHJpbmc7XHJcbiAgX3BsYWNlaG9sZGVyID0gXCJwbGFjZWhvbGRlclwiO1xyXG4gIF9ub3RGb3VuZENvbnRlbnQgPSBcIk5vIENvbnRlbnRcIjtcclxuICBfc2VhcmNoVGV4dCA9IFwiXCI7XHJcbiAgX3RyaWdnZXJXaWR0aCA9IDA7XHJcbiAgX3NlbGVjdGVkT3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnQ7XHJcbiAgX29wZXJhdGluZ011bHRpcGxlT3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnQ7XHJcbiAgX3NlbGVjdGVkT3B0aW9uczogU2V0PE1lZkRldk9wdGlvbkNvbXBvbmVudD4gPSBuZXcgU2V0KCk7XHJcbiAgX29wdGlvbnM6IE1lZkRldk9wdGlvbkNvbXBvbmVudFtdID0gW107XHJcbiAgX2NhY2hlT3B0aW9uczogTWVmRGV2T3B0aW9uQ29tcG9uZW50W10gPSBbXTtcclxuICBfZmlsdGVyT3B0aW9uczogTWVmRGV2T3B0aW9uQ29tcG9uZW50W10gPSBbXTtcclxuICBfdGFnc09wdGlvbnM6IE1lZkRldk9wdGlvbkNvbXBvbmVudFtdID0gW107XHJcbiAgX2FjdGl2ZUZpbHRlck9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50O1xyXG4gIF9pc011bHRpSW5pdCA9IGZhbHNlO1xyXG4gIF9kcm9wRG93blBvc2l0aW9uOiBcInRvcFwiIHwgXCJjZW50ZXJcIiB8IFwiYm90dG9tXCIgPSBcImJvdHRvbVwiO1xyXG4gIF9jb21wb3NpbmcgPSBmYWxzZTtcclxuICBfbW9kZTogYW55O1xyXG4gIC8vIG5nTW9kZWwgQWNjZXNzXHJcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHZvaWQgPSAoKSA9PiBudWxsO1xyXG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IG51bGw7XHJcbiAgQFZpZXdDaGlsZChcInNlYXJjaElucHV0XCIpIHNlYXJjaElucHV0RWxlbWVudFJlZjogYW55O1xyXG4gIEBWaWV3Q2hpbGQoXCJ0cmlnZ2VyXCIpIHRyaWdnZXI6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcImRyb3Bkb3duVWxcIikgZHJvcGRvd25VbDogRWxlbWVudFJlZjtcclxuICBAT3V0cHV0KCkgU2VhcmNoQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgT3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBTY3JvbGxUb0JvdHRvbTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIEZpbHRlciA9IHRydWU7XHJcbiAgQElucHV0KCkgTWF4TXVsdGlwbGUgPSBJbmZpbml0eTtcclxuICBASW5wdXQoKSBGaXJzdERlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXkpIF9jZGtPdmVybGF5OiBDZGtDb25uZWN0ZWRPdmVybGF5O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBBbGxvd0NsZWFyKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9hbGxvd0NsZWFyID0gdG9Cb29sZWFuKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldCBBbGxvd0NsZWFyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FsbG93Q2xlYXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBLZWVwVW5MaXN0T3B0aW9ucyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fa2VlcFVuTGlzdE9wdGlvbnMgPSB0b0Jvb2xlYW4odmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IEtlZXBVbkxpc3RPcHRpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2tlZXBVbkxpc3RPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgTW9kZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fbW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XHJcbiAgICAgIHRoaXMuTXVsdGlwbGUgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9tb2RlID09PSBcInRhZ3NcIikge1xyXG4gICAgICB0aGlzLlRhZ3MgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9tb2RlID09PSBcImNvbWJvYm94XCIpIHtcclxuICAgICAgdGhpcy5TaG93U2VhcmNoID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IE11bHRpcGxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc011bHRpcGxlID0gdG9Cb29sZWFuKHZhbHVlKTtcclxuICAgIGlmICh0aGlzLl9pc011bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuU2hvd1NlYXJjaCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgTXVsdGlwbGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNNdWx0aXBsZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IFBsYWNlSG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgUGxhY2VIb2xkZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IE5vdEZvdW5kQ29udGVudCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9ub3RGb3VuZENvbnRlbnQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBOb3RGb3VuZENvbnRlbnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9ub3RGb3VuZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBTaXplKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLl9zaXplID0geyBsYXJnZTogXCJsZ1wiLCBzbWFsbDogXCJzbVwiIH1bdmFsdWVdO1xyXG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFNpemUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zaXplO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgU2hvd1NlYXJjaCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2hvd1NlYXJjaCA9IHRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgU2hvd1NlYXJjaCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zaG93U2VhcmNoO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgVGFncyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgaXNUYWdzID0gdG9Cb29sZWFuKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVGFncyA9IGlzVGFncztcclxuICAgIHRoaXMuTXVsdGlwbGUgPSBpc1RhZ3M7XHJcbiAgfVxyXG5cclxuICBnZXQgVGFncygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1RhZ3M7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSB0b0Jvb2xlYW4odmFsdWUpO1xyXG4gICAgdGhpcy5jbG9zZURyb3BEb3duKCk7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBPcGVuKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBpc09wZW4gPSB0b0Jvb2xlYW4odmFsdWUpO1xyXG4gICAgaWYgKHRoaXMuX2lzT3BlbiA9PT0gaXNPcGVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc09wZW4pIHtcclxuICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgpO1xyXG4gICAgICB0aGlzLl9zZXRUcmlnZ2VyV2lkdGgoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzT3BlbiA9IGlzT3BlbjtcclxuICAgIHRoaXMuT3BlbkNoYW5nZS5lbWl0KHRoaXMuX2lzT3Blbik7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgICBpZiAodGhpcy5faXNPcGVuKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tEcm9wRG93blNjcm9sbCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcclxuICB9XHJcblxyXG4gIC8qKiBuZXcgLW9wdGlvbiBpbnNlcnQgb3IgbmV3IHRhZ3MgaW5zZXJ0ICovXHJcbiAgIC8vIEB0cy1pZ25vcmVcclxuICBhZGRPcHRpb24gPSBvcHRpb24gPT4ge1xyXG4gICAgdGhpcy5fb3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICBpZiAoIXRoaXMuX2lzVGFncykge1xyXG4gICAgICBpZiAob3B0aW9uLlZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbih0aGlzLl92YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZVNlbGVjdGVkT3B0aW9uKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKiAtb3B0aW9uIHJlbW92ZSBvciB0YWdzIHJlbW92ZSAqL1xyXG4gIHJlbW92ZU9wdGlvbihvcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3B0aW9ucy5zcGxpY2UodGhpcy5fb3B0aW9ucy5pbmRleE9mKG9wdGlvbiksIDEpO1xyXG4gICAgaWYgKCF0aGlzLl9pc1RhZ3MpIHtcclxuICAgICAgdGhpcy5mb3JjZVVwZGF0ZVNlbGVjdGVkT3B0aW9uKHRoaXMuX3ZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBkcm9wZG93biBwb3NpdGlvbiBjaGFuZ2VkICovXHJcbiAgb25Qb3NpdGlvbkNoYW5nZShwb3NpdGlvbjogQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kcm9wRG93blBvc2l0aW9uID0gcG9zaXRpb24uY29ubmVjdGlvblBhaXIub3JpZ2luWTtcclxuICB9XHJcblxyXG4gIGNvbXBvc2l0aW9uU3RhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21wb3NpbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY29tcG9zaXRpb25FbmQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21wb3NpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKiBjbGVhciBzaW5nbGUgc2VsZWN0ZWQgb3B0aW9uICovXHJcbiAgY2xlYXJTZWxlY3QoJGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCRldmVudCkge1xyXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfSAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbiA9IG51bGw7IC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMuVmFsdWUgPSBudWxsOyAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqIGNsaWNrIGRyb3Bkb3duIG9wdGlvbiBieSB1c2VyICovXHJcbiAgY2xpY2tPcHRpb24ob3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnQsICRldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghb3B0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY2hvb3NlT3B0aW9uKG9wdGlvbiwgdHJ1ZSwgJGV2ZW50KTtcclxuICAgIHRoaXMuY2xlYXJTZWFyY2hUZXh0KCk7XHJcbiAgICBpZiAoIXRoaXMuX2lzTXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5PcGVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogY2hvb3NlIG9wdGlvbiAqL1xyXG4gIGNob29zZU9wdGlvbihcclxuICAgIG9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50LFxyXG4gICAgaXNVc2VyQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICRldmVudD86IE1vdXNlRXZlbnRcclxuICApOiB2b2lkIHtcclxuICAgIGlmICgkZXZlbnQpIHtcclxuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbiA9IG9wdGlvbjtcclxuICAgIGlmIChvcHRpb24gJiYgIW9wdGlvbi5EaXNhYmxlZCkge1xyXG4gICAgICBpZiAoIXRoaXMuTXVsdGlwbGUpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbjtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IG9wdGlvbi5WYWx1ZTtcclxuICAgICAgICBpZiAoaXNVc2VyQ2xpY2spIHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlLm5leHQodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShvcHRpb24uVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNVc2VyQ2xpY2spIHtcclxuICAgICAgICAgIHRoaXMuaXNJblNldCh0aGlzLl9zZWxlY3RlZE9wdGlvbnMsIG9wdGlvbilcclxuICAgICAgICAgICAgPyB0aGlzLnVuU2VsZWN0TXVsdGlwbGVPcHRpb24ob3B0aW9uKVxyXG4gICAgICAgICAgICA6IHRoaXMuc2VsZWN0TXVsdGlwbGVPcHRpb24ob3B0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVdpZHRoKGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRleHQpIHtcclxuICAgICAgLyoqIHdhaXQgZm9yIHNjcm9sbCB3aWR0aCBjaGFuZ2UgKi8gLy8gQHRzLWlnbm9yZVxyXG4gICAgICBzZXRUaW1lb3V0KF8gPT4ge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsIFwid2lkdGhcIiwgYCR7ZWxlbWVudC5zY3JvbGxXaWR0aH1weGApO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKGVsZW1lbnQsIFwid2lkdGhcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogZGV0ZXJtaW5lIGlmIG9wdGlvbiBpbiBzZXQgKi9cclxuICBpc0luU2V0KFxyXG4gICAgc2V0OiBTZXQ8TWVmRGV2T3B0aW9uQ29tcG9uZW50PixcclxuICAgIG9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50XHJcbiAgKTogTWVmRGV2T3B0aW9uQ29tcG9uZW50IHsgLy8gQHRzLWlnbm9yZVxyXG4gICAgcmV0dXJuIChBcnJheS5mcm9tKHNldCkgYXMgTWVmRGV2T3B0aW9uQ29tcG9uZW50W10pLmZpbmQoXHJcbiAgICAgIChkYXRhOiBNZWZEZXZPcHRpb25Db21wb25lbnQpID0+IGRhdGEuVmFsdWUgPT09IG9wdGlvbi5WYWx1ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBjYW5jZWwgc2VsZWN0IG11bHRpcGxlIG9wdGlvbiAqLyAvLyBAdHMtaWdub3JlXHJcbiAgdW5TZWxlY3RNdWx0aXBsZU9wdGlvbiA9IChvcHRpb24sICRldmVudD8sIGVtaXRDaGFuZ2UgPSB0cnVlKSA9PiB7XHJcbiAgICB0aGlzLl9vcGVyYXRpbmdNdWx0aXBsZU9wdGlvbiA9IG9wdGlvbjtcclxuICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9ucy5kZWxldGUob3B0aW9uKTtcclxuICAgIGlmIChlbWl0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuZW1pdE11bHRpcGxlT3B0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWvuVRhZ+i/m+ihjOeJueauiuWkhOeQhlxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9pc1RhZ3MgJiZcclxuICAgICAgdGhpcy5fb3B0aW9ucy5pbmRleE9mKG9wdGlvbikgIT09IC0xICYmXHJcbiAgICAgIHRoaXMuX3RhZ3NPcHRpb25zLmluZGV4T2Yob3B0aW9uKSAhPT0gLTFcclxuICAgICkge1xyXG4gICAgICB0aGlzLnJlbW92ZU9wdGlvbihvcHRpb24pO1xyXG4gICAgICB0aGlzLl90YWdzT3B0aW9ucy5zcGxpY2UodGhpcy5fdGFnc09wdGlvbnMuaW5kZXhPZihvcHRpb24pLCAxKTtcclxuICAgIH1cclxuICAgIGlmICgkZXZlbnQpIHtcclxuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvKiogc2VsZWN0IG11bHRpcGxlIG9wdGlvbiAqL1xyXG4gIHNlbGVjdE11bHRpcGxlT3B0aW9uKG9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50LCAkZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAvKiogaWYgdGFncyBkbyBwdXNoIHRvIHRhZyBvcHRpb24gKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5faXNUYWdzICYmXHJcbiAgICAgIHRoaXMuX29wdGlvbnMuaW5kZXhPZihvcHRpb24pID09PSAtMSAmJlxyXG4gICAgICB0aGlzLl90YWdzT3B0aW9ucy5pbmRleE9mKG9wdGlvbikgPT09IC0xXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hZGRPcHRpb24ob3B0aW9uKTtcclxuICAgICAgdGhpcy5fdGFnc09wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3BlcmF0aW5nTXVsdGlwbGVPcHRpb24gPSBvcHRpb247XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRPcHRpb25zLnNpemUgPCB0aGlzLk1heE11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9ucy5hZGQob3B0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuZW1pdE11bHRpcGxlT3B0aW9ucygpO1xyXG5cclxuICAgIGlmICgkZXZlbnQpIHtcclxuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBlbWl0IG11bHRpcGxlIG9wdGlvbnMgKi9cclxuICBlbWl0TXVsdGlwbGVPcHRpb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2lzTXVsdGlJbml0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGFycmF5T3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy5fc2VsZWN0ZWRPcHRpb25zKTtcclxuICAgIHRoaXMuX3ZhbHVlID0gYXJyYXlPcHRpb25zLm1hcChpdGVtID0+IGl0ZW0uVmFsdWUpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKiogdXBkYXRlIHNlbGVjdGVkIG9wdGlvbiB3aGVuIGFkZCByZW1vdmUgb3B0aW9uIGV0YyAqL1xyXG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKFxyXG4gICAgY3VycmVudE1vZGVsVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLFxyXG4gICAgdHJpZ2dlckJ5TmdNb2RlbDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoY3VycmVudE1vZGVsVmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5NdWx0aXBsZSkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSB0aGlzLl9vcHRpb25zLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbSAhPSBudWxsICYmIGN1cnJlbnRNb2RlbFZhbHVlLmluZGV4T2YoaXRlbS5WYWx1ZSkgIT09IC0xO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCh0aGlzLktlZXBVbkxpc3RPcHRpb25zIHx8IHRoaXMuVGFncykgJiYgIXRyaWdnZXJCeU5nTW9kZWwpIHtcclxuICAgICAgICBjb25zdCBfc2VsZWN0ZWRPcHRpb25zID0gQXJyYXkuZnJvbSh0aGlzLl9zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBfZXhpc3QgPSBfc2VsZWN0ZWRPcHRpb25zLnNvbWUoXHJcbiAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5fdmFsdWUgPT0gb3B0aW9uLl92YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmICghX2V4aXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9ucy5hZGQob3B0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbnMgPSBuZXcgU2V0KCk7XHJcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9ucy5hZGQob3B0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLl9vcHRpb25zLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbSAhPSBudWxsICYmIGl0ZW0uVmFsdWUgPT0gY3VycmVudE1vZGVsVmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNob29zZU9wdGlvbihzZWxlY3RlZE9wdGlvblswXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JjZVVwZGF0ZVNlbGVjdGVkT3B0aW9uKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgLyoqIHRyaWdnZXIgZGlydHkgY2hlY2sgKi8gLy8gQHRzLWlnbm9yZVxyXG4gICAgc2V0VGltZW91dChfID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbih2YWx1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBWYWx1ZSgpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLl91cGRhdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbFNlbGVjdGVkT3B0aW9uKGVtaXRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgdGhpcy51blNlbGVjdE11bHRpcGxlT3B0aW9uKGl0ZW0sIG51bGwsIGVtaXRDaGFuZ2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVLZXlFbnRlckV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAvKiogd2hlbiBjb21wb3NpbmcgZW5kICovXHJcbiAgICBpZiAoIXRoaXMuX2NvbXBvc2luZyAmJiB0aGlzLl9pc09wZW4pIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyT3B0aW9uKGZhbHNlKTtcclxuICAgICAgdGhpcy5jbGlja09wdGlvbih0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5QmFja3NwYWNlRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fc2VhcmNoVGV4dCAmJiAhdGhpcy5fY29tcG9zaW5nICYmIHRoaXMuX2lzTXVsdGlwbGUpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgY29uc3QgbGFzdE9wdGlvbiA9IEFycmF5LmZyb20odGhpcy5fc2VsZWN0ZWRPcHRpb25zKS5wb3AoKTtcclxuICAgICAgdGhpcy51blNlbGVjdE11bHRpcGxlT3B0aW9uKGxhc3RPcHRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5RG93bkV2ZW50KCRldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2lzT3Blbikge1xyXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24gPSB0aGlzLm5leHRPcHRpb24oXHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uLFxyXG4gICAgICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMuZmlsdGVyKHcgPT4gIXcuRGlzYWJsZWQpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUtleVVwRXZlbnQoJGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNPcGVuKSB7XHJcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbiA9IHRoaXMucHJlT3B0aW9uKFxyXG4gICAgICAgIHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbixcclxuICAgICAgICB0aGlzLl9maWx0ZXJPcHRpb25zLmZpbHRlcih3ID0+ICF3LkRpc2FibGVkKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmVPcHRpb24oXHJcbiAgICBvcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudCxcclxuICAgIG9wdGlvbnM6IE1lZkRldk9wdGlvbkNvbXBvbmVudFtdXHJcbiAgKTogTWVmRGV2T3B0aW9uQ29tcG9uZW50IHtcclxuICAgIHJldHVybiBvcHRpb25zW29wdGlvbnMuaW5kZXhPZihvcHRpb24pIC0gMV0gfHwgb3B0aW9uc1tvcHRpb25zLmxlbmd0aCAtIDFdO1xyXG4gIH1cclxuXHJcbiAgbmV4dE9wdGlvbihcclxuICAgIG9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50LFxyXG4gICAgb3B0aW9uczogTWVmRGV2T3B0aW9uQ29tcG9uZW50W11cclxuICApOiBNZWZEZXZPcHRpb25Db21wb25lbnQge1xyXG4gICAgcmV0dXJuIG9wdGlvbnNbb3B0aW9ucy5pbmRleE9mKG9wdGlvbikgKyAxXSB8fCBvcHRpb25zWzBdO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTZWFyY2hUZXh0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VhcmNoVGV4dCA9IFwiXCI7XHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlck9wdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRmlsdGVyT3B0aW9uKHVwZGF0ZUFjdGl2ZUZpbHRlcjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZpbHRlcikge1xyXG4gICAgICB0aGlzLl9maWx0ZXJPcHRpb25zID0gbmV3IE9wdGlvblBpcGUoKS50cmFuc2Zvcm0odGhpcy5fb3B0aW9ucywge1xyXG4gICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuX3NlYXJjaFRleHQsXHJcbiAgICAgICAgdGFnczogdGhpcy5faXNUYWdzLFxyXG4gICAgICAgIG5vdEZvdW5kQ29udGVudDogdGhpcy5faXNUYWdzXHJcbiAgICAgICAgICA/IHRoaXMuX3NlYXJjaFRleHRcclxuICAgICAgICAgIDogdGhpcy5fbm90Rm91bmRDb250ZW50LFxyXG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5faXNUYWdzLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLl9pc1RhZ3MgPyB0aGlzLl9zZWFyY2hUZXh0IDogXCJkaXNhYmxlZFwiXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucyA9IHRoaXMuX29wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRPRE86IGNhdXNlIHByZSAmIG5leHQga2V5IHNlbGVjdGlvbiBub3Qgd29yayAqL1xyXG4gICAgaWYgKHVwZGF0ZUFjdGl2ZUZpbHRlciAmJiAhdGhpcy5fc2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgdGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uID0gdGhpcy5fZmlsdGVyT3B0aW9uc1swXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoQ2hhbmdlKHNlYXJjaFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuU2VhcmNoQ2hhbmdlLmVtaXQoc2VhcmNoVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImNsaWNrXCIsIFtcIiRldmVudFwiXSlcclxuICBvbkNsaWNrKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICghdGhpcy5fZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5PcGVuID0gIXRoaXMuT3BlbjtcclxuICAgICAgaWYgKHRoaXMuU2hvd1NlYXJjaCkge1xyXG4gICAgICAgIC8qKiB3YWl0IGZvciBzZWFyY2ggZGlzcGxheSAqLyAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgc2V0VGltZW91dChfID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImtleWRvd25cIiwgW1wiJGV2ZW50XCJdKVxyXG4gIG9uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXlDb2RlID0gZS5rZXlDb2RlO1xyXG4gICAgaWYgKGtleUNvZGUgPT09IFRBQiAmJiB0aGlzLk9wZW4pIHtcclxuICAgICAgdGhpcy5PcGVuID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICgoa2V5Q29kZSAhPT0gRE9XTl9BUlJPVyAmJiBrZXlDb2RlICE9PSBFTlRFUikgfHwgdGhpcy5PcGVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICghdGhpcy5fZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5PcGVuID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuU2hvd1NlYXJjaCkge1xyXG4gICAgICAgIC8qKiB3YWl0IGZvciBzZWFyY2ggZGlzcGxheSAqLyAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgc2V0VGltZW91dChfID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VEcm9wRG93bigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5PcGVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICBpZiAodGhpcy5NdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZShcclxuICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIFwid2lkdGhcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGVhclNlYXJjaFRleHQoKTtcclxuICAgIHRoaXMuT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2xhc3NNYXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jbGFzc0xpc3QuZm9yRWFjaChfY2xhc3NOYW1lID0+IHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fZWwsIF9jbGFzc05hbWUpO1xyXG4gICAgfSk7IC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMuX2NsYXNzTGlzdCA9IFtcclxuICAgICAgdGhpcy5fcHJlZml4Q2xzLFxyXG4gICAgICB0aGlzLl9tb2RlID09PSBcImNvbWJvYm94XCIgJiYgYCR7dGhpcy5fcHJlZml4Q2xzfS1jb21ib2JveGAsXHJcbiAgICAgICF0aGlzLl9kaXNhYmxlZCAmJiBgJHt0aGlzLl9wcmVmaXhDbHN9LWVuYWJsZWRgLFxyXG4gICAgICB0aGlzLl9kaXNhYmxlZCAmJiBgJHt0aGlzLl9wcmVmaXhDbHN9LWRpc2FibGVkYCxcclxuICAgICAgdGhpcy5faXNPcGVuICYmIGAke3RoaXMuX3ByZWZpeENsc30tb3BlbmAsXHJcbiAgICAgIHRoaXMuX3Nob3dTZWFyY2ggJiYgYCR7dGhpcy5fcHJlZml4Q2xzfS1zaG93LXNlYXJjaGAsXHJcbiAgICAgIHRoaXMuX3NpemUgJiYgYCR7dGhpcy5fcHJlZml4Q2xzfS0ke3RoaXMuX3NpemV9YFxyXG4gICAgXS5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgIHJldHVybiAhIWl0ZW07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2NsYXNzTGlzdC5mb3JFYWNoKF9jbGFzc05hbWUgPT4ge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbCwgX2NsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3NlbGVjdGlvbkNsYXNzTWFwID0ge1xyXG4gICAgICBbdGhpcy5fc2VsZWN0aW9uUHJlZml4Q2xzXTogdHJ1ZSxcclxuICAgICAgW2Ake3RoaXMuX3NlbGVjdGlvblByZWZpeENsc30tLXNpbmdsZWBdOiAhdGhpcy5NdWx0aXBsZSxcclxuICAgICAgW2Ake3RoaXMuX3NlbGVjdGlvblByZWZpeENsc30tLW11bHRpcGxlYF06IHRoaXMuTXVsdGlwbGVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzZXREcm9wRG93bkNsYXNzTWFwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZHJvcERvd25DbGFzc01hcCA9IHtcclxuICAgICAgW3RoaXMuX2Ryb3BEb3duUHJlZml4Q2xzXTogdHJ1ZSxcclxuICAgICAgW1wiY29tcG9uZW50LXNlbGVjdFwiXTogdGhpcy5fbW9kZSA9PT0gXCJjb21ib2JveFwiLFxyXG4gICAgICBbYCR7dGhpcy5fZHJvcERvd25QcmVmaXhDbHN9LS1zaW5nbGVgXTogIXRoaXMuTXVsdGlwbGUsXHJcbiAgICAgIFtgJHt0aGlzLl9kcm9wRG93blByZWZpeENsc30tLW11bHRpcGxlYF06IHRoaXMuTXVsdGlwbGUsXHJcbiAgICAgIFtgJHt0aGlzLl9kcm9wRG93blByZWZpeENsc30tcGxhY2VtZW50LWJvdHRvbUxlZnRgXTpcclxuICAgICAgICB0aGlzLl9kcm9wRG93blBvc2l0aW9uID09PSBcImJvdHRvbVwiLFxyXG4gICAgICBbYCR7dGhpcy5fZHJvcERvd25QcmVmaXhDbHN9LXBsYWNlbWVudC10b3BMZWZ0YF06XHJcbiAgICAgICAgdGhpcy5fZHJvcERvd25Qb3NpdGlvbiA9PT0gXCJ0b3BcIlxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvQWN0aXZlKCk6IHZvaWQge1xyXG4gICAgLyoqIHdhaXQgZm9yIGRyb3Bkb3duIGRpc3BsYXkgKi8gLy8gQHRzLWlnbm9yZVxyXG4gICAgc2V0VGltZW91dChfID0+IHtcclxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbiAmJiB0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24uVmFsdWUpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2ZpbHRlck9wdGlvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgb3B0aW9uID0+IG9wdGlvbi5WYWx1ZSA9PT0gdGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uLlZhbHVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3Qgc2Nyb2xsUGFuZSA9IHRoaXMuZHJvcGRvd25VbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuW1xyXG4gICAgICAgICAgICBpbmRleFxyXG4gICAgICAgICAgXSBhcyBIVE1MTElFbGVtZW50O1xyXG4gICAgICAgICAgLy8gVE9ETzogc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCBpcyBub3QgYSBzdGFuZGFyZCBBUEksIHdoeSBkb2luZyBzbz9cclxuICAgICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgKi9cclxuICAgICAgICAgIChzY3JvbGxQYW5lIGFzIGFueSkuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmbHVzaENvbXBvbmVudFN0YXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJPcHRpb24oKTtcclxuICAgIGlmICghdGhpcy5NdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9uKHRoaXMuX3ZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl92YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24odGhpcy5fdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfc2V0VHJpZ2dlcldpZHRoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdHJpZ2dlcldpZHRoID0gdGhpcy5fZ2V0VHJpZ2dlclJlY3QoKS53aWR0aDtcclxuICAgIC8qKiBzaG91bGQgcmVtb3ZlIGFmdGVyIGFmdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL21hdGVyaWFsMi9wdWxsLzg3NjUgbWVyZ2VkICoqL1xyXG4gICAgaWYgKHRoaXMuX2Nka092ZXJsYXkgJiYgdGhpcy5fY2RrT3ZlcmxheS5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuX2Nka092ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVTaXplKHtcclxuICAgICAgICB3aWR0aDogdGhpcy5fdHJpZ2dlcldpZHRoXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2dldFRyaWdnZXJSZWN0KCk6IENsaWVudFJlY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMuX3VwZGF0ZVZhbHVlKHZhbHVlLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5EaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBkcm9wRG93blNjcm9sbCh1bDogSFRNTFVMaXN0RWxlbWVudCk6IHZvaWQge1xyXG4gICAgaWYgKHVsICYmIHVsLnNjcm9sbEhlaWdodCAtIHVsLnNjcm9sbFRvcCA9PT0gdWwuY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuU2Nyb2xsVG9Cb3R0b20uZW1pdCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrRHJvcERvd25TY3JvbGwoKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZHJvcGRvd25VbCAmJlxyXG4gICAgICB0aGlzLmRyb3Bkb3duVWwubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPT09XHJcbiAgICAgICAgdGhpcy5kcm9wZG93blVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5TY3JvbGxUb0JvdHRvbS5lbWl0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgY0RSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9lbCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl92YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZmx1c2hDb21wb25lbnRTdGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlck9wdGlvbigpO1xyXG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xyXG4gICAgdGhpcy5zZXREcm9wRG93bkNsYXNzTWFwKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fY2FjaGVPcHRpb25zICE9PSB0aGlzLl9vcHRpb25zKSB7XHJcbiAgICAgIC8qKiB1cGRhdGUgZmlsdGVyIG9wdGlvbiBhZnRlciBldmVyeSBjb250ZW50IGNoZWNrIGN5Y2xlICovXHJcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyT3B0aW9uKCk7XHJcbiAgICAgIHRoaXMuX2NhY2hlT3B0aW9ucyA9IHRoaXMuX29wdGlvbnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlck9wdGlvbihmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRmlyc3REZWZhdWx0KSB7XHJcbiAgICAgIGlmICghdGhpcy5fdmFsdWUgJiYgdGhpcy5fb3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zWzBdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fb3B0aW9uc1swXS5WYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5jaG9vc2VPcHRpb24odGhpcy5fb3B0aW9uc1swXSwgZmFsc2UpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fb3B0aW9uc1swXS5WYWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVZhbHVlKFxyXG4gICAgdmFsdWU6IHN0cmluZ1tdIHwgc3RyaW5nLFxyXG4gICAgZW1pdENoYW5nZTogYm9vbGVhbiA9IHRydWVcclxuICApOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09IG51bGwgJiYgdGhpcy5NdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLl92YWx1ZSA9IFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5NdWx0aXBsZSkge1xyXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgeyAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRPcHRpb24gPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24odmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNsZWFyQWxsU2VsZWN0ZWRPcHRpb24oZW1pdENoYW5nZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24odmFsdWUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckFsbFNlbGVjdGVkT3B0aW9uKGVtaXRDaGFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgdGFiaW5kZXg9XCIwXCIgI3RyaWdnZXIgY2RrT3ZlcmxheU9yaWdpbiAjb3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiIFtuZ0NsYXNzXT1cIl9zZWxlY3Rpb25DbGFzc01hcFwiXHJcbiAgKGtleWRvd24uRW50ZXIpPVwiaGFuZGxlS2V5RW50ZXJFdmVudCgkZXZlbnQpXCIgKGtleWRvd24uQmFja3NwYWNlKT1cImhhbmRsZUtleUJhY2tzcGFjZUV2ZW50KCRldmVudClcIlxyXG4gIChrZXlkb3duLkFycm93VXApPVwiaGFuZGxlS2V5VXBFdmVudCgkZXZlbnQpXCIgKGtleWRvd24uQXJyb3dEb3duKT1cImhhbmRsZUtleURvd25FdmVudCgkZXZlbnQpXCI+XHJcblxyXG4gICAgPCEtLSDQo9Cy0LXRgdGMINGB0LXQu9C10LrRgi0tPlxyXG4gIDxkaXYgY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uX19yZW5kZXJlZFwiICpuZ0lmPVwiIVNob3dTZWFyY2hcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uX19wbGFjZWhvbGRlclwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIV9zZWxlY3RlZE9wdGlvblwiPlxyXG4gICAgICAgIHt7IFBsYWNlSG9sZGVyIH19XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uLXNlbGVjdGVkLXZhbHVlXCI+XHJcbiAgICAgIHt7IF9zZWxlY3RlZE9wdGlvbj8uTGFiZWwgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS1D0L/QuNGB0L7QuiBvcHRpb25zLS0+XHJcbiAgPGRpdiBjbGFzcz1cInBnLXNlbGVjdC1zZWxlY3Rpb25fX3JlbmRlcmVkXCIgKm5nSWY9XCJTaG93U2VhcmNoXCI+XHJcbiAgICA8ZGl2IFtoaWRkZW5dPVwiX3NlYXJjaFRleHR8fCghT3BlbiYmX3NlbGVjdGVkT3B0aW9uKXx8X3NlbGVjdGVkT3B0aW9ucy5zaXplXCJcclxuICAgICAgY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uX19wbGFjZWhvbGRlclwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiKCFfY29tcG9zaW5nKSYmX3NlbGVjdGVkT3B0aW9uXCI+XHJcbiAgICAgICAge3sgX3NlbGVjdGVkT3B0aW9uLkxhYmVsIH19XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIoIV9jb21wb3NpbmcpJiYoIV9zZWxlY3RlZE9wdGlvbilcIj5cclxuICAgICAgICB7eyBQbGFjZUhvbGRlciB9fVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwhLS3QnNGD0LvRjNGC0LjRgdC10LvQtdC60YItLT5cclxuICAgIDx1bCAqbmdJZj1cIk11bHRpcGxlXCI+IFxyXG4gICAgICA8bGkgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBfc2VsZWN0ZWRPcHRpb25zXCIgW0B0YWdBbmltYXRpb25dIFthdHRyLnRpdGxlXT1cIm9wdGlvbj8uTGFiZWwgfHwgb3B0aW9uPy5WYWx1ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uX19jaG9pY2VcIiBzdHlsZT1cIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZVwiIChjbGljayk9XCJ1blNlbGVjdE11bHRpcGxlT3B0aW9uKG9wdGlvbiwkZXZlbnQpXCI+PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uX19jaG9pY2VfX2NvbnRlbnRcIj57eyBvcHRpb24/LkxhYmVsIH19PC9kaXY+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaSBjbGFzcz1cInBnLXNlbGVjdC1zZWFyY2ggcGctc2VsZWN0LXNlYXJjaC0taW5saW5lXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBnLXNlbGVjdC1zZWFyY2hfX2ZpZWxkX193cmFwXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwZy1zZWxlY3Qtc2VhcmNoX19maWVsZFwiIChjb21wb3NpdGlvbnN0YXJ0KT1cImNvbXBvc2l0aW9uU3RhcnQoKVwiXHJcbiAgICAgICAgICAgIChjb21wb3NpdGlvbmVuZCk9XCJjb21wb3NpdGlvbkVuZCgpO3VwZGF0ZVdpZHRoKHNlYXJjaElucHV0LF9zZWFyY2hUZXh0KTtcIiBbKG5nTW9kZWwpXT1cIl9zZWFyY2hUZXh0XCJcclxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRmlsdGVyT3B0aW9uKCk7b25TZWFyY2hDaGFuZ2UoJGV2ZW50KTtcIlxyXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJ1cGRhdGVXaWR0aChzZWFyY2hJbnB1dCxfc2VhcmNoVGV4dClcIiAoaW5wdXQpPVwidXBkYXRlV2lkdGgoc2VhcmNoSW5wdXQsX3NlYXJjaFRleHQpXCJcclxuICAgICAgICAgICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIiAjc2VhcmNoSW5wdXQ+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBnLXNlbGVjdC1zZWFyY2hfX2ZpZWxkX19taXJyb3JcIj48L3NwYW4+PC9kaXY+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFNdWx0aXBsZVwiIGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbi1zZWxlY3RlZC12YWx1ZVwiIFtoaWRkZW5dPVwiIShfc2VsZWN0ZWRPcHRpb24/LkxhYmVsKXx8T3BlblwiPlxyXG4gICAgICB7eyBfc2VsZWN0ZWRPcHRpb24/LkxhYmVsIH19XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhTXVsdGlwbGVcIiBbaGlkZGVuXT1cIiFPcGVuXCIgY2xhc3M9XCJwZy1zZWxlY3Qtc2VhcmNoIHBnLXNlbGVjdC1zZWFyY2gtLWlubGluZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlYXJjaF9fZmllbGRfX3dyYXBcIj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJwZy1zZWxlY3Qtc2VhcmNoX19maWVsZFwiIChibHVyKT1cIm9uVG91Y2hlZCgpXCIgKGNvbXBvc2l0aW9uc3RhcnQpPVwiY29tcG9zaXRpb25TdGFydCgpXCJcclxuICAgICAgICAgIChjb21wb3NpdGlvbmVuZCk9XCJjb21wb3NpdGlvbkVuZCgpXCIgWyhuZ01vZGVsKV09XCJfc2VhcmNoVGV4dFwiXHJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVGaWx0ZXJPcHRpb24oKTtvblNlYXJjaENoYW5nZSgkZXZlbnQpO1wiICNzZWFyY2hJbnB1dD5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInBnLXNlbGVjdC1zZWFyY2hfX2ZpZWxkX19taXJyb3JcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPHNwYW4gKGNsaWNrKT1cIm9uVG91Y2hlZCgpO2NsZWFyU2VsZWN0KCRldmVudClcIiBjbGFzcz1cInBnLXNlbGVjdC1zZWxlY3Rpb25fX2NsZWFyXCIgc3R5bGU9XCItd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1wiXHJcbiAgICAqbmdJZj1cIl9zZWxlY3RlZE9wdGlvbj8uTGFiZWwmJkFsbG93Q2xlYXImJiFNdWx0aXBsZVwiPlxyXG4gIDwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cInBnLXNlbGVjdC1hcnJvd1wiPjxiPjwvYj48L3NwYW4+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3AgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwib3JpZ2luXCJcclxuICAoYmFja2Ryb3BDbGljayk9XCJjbG9zZURyb3BEb3duKClcIiAoZGV0YWNoKT1cImNsb3NlRHJvcERvd24oKTtcIiAocG9zaXRpb25DaGFuZ2UpPVwib25Qb3NpdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoXT1cIl90cmlnZ2VyV2lkdGhcIiBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwiX2lzT3BlblwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwiX2Ryb3BEb3duQ2xhc3NNYXBcIiBbQGRyb3BEb3duQW5pbWF0aW9uXT1cIl9kcm9wRG93blBvc2l0aW9uXCI+XHJcbiAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgIDx1bCBjbGFzcz1cInBnLXNlbGVjdC1kcm9wZG93bi1tZW51IHBnLXNlbGVjdC1kcm9wZG93bi1tZW51LXZlcnRpY2FsIHBnLXNlbGVjdC1kcm9wZG93bi1tZW51LXJvb3RcIiAjZHJvcGRvd25VbFxyXG4gICAgICAgIChzY3JvbGwpPVwiZHJvcERvd25TY3JvbGwoZHJvcGRvd25VbClcIj5cclxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBfZmlsdGVyT3B0aW9uc1wiIFtjbGFzcy5wZy1zZWxlY3QtZHJvcGRvd24tbWVudS1pdGVtLWRpc2FibGVkXT1cIm9wdGlvbi5EaXNhYmxlZFwiXHJcbiAgICAgICAgICBbY2xhc3MucGctc2VsZWN0LWRyb3Bkb3duLW1lbnUtaXRlbS1hY3RpdmVdPVwib3B0aW9uLlZhbHVlID09IF9hY3RpdmVGaWx0ZXJPcHRpb24/LlZhbHVlXCJcclxuICAgICAgICAgIFtjbGFzcy5wZy1zZWxlY3QtZHJvcGRvd24tbWVudS1pdGVtLXNlbGVjdGVkXT1cIihvcHRpb24uVmFsdWU9PShfc2VsZWN0ZWRPcHRpb24/LlZhbHVlKSl8fChpc0luU2V0KF9zZWxlY3RlZE9wdGlvbnMsb3B0aW9uKSlcIlxyXG4gICAgICAgICAgY2xhc3M9XCJwZy1zZWxlY3QtZHJvcGRvd24tbWVudS1pdGVtXCIgKGNsaWNrKT1cImNsaWNrT3B0aW9uKG9wdGlvbiwkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJvcHRpb24uT3B0aW9uVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb24uT3B0aW9uVGVtcGxhdGVcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIW9wdGlvbi5PcHRpb25UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICB7eyBvcHRpb24uTGFiZWwgfX1cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
769
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWtpdC1saWIvc3JjL2xpYi9wZy1jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkta2l0LWxpYi9zcmMvbGliL3BnLWNvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsbUJBQW1CLEVBRXBCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUlMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUVsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQUdqRjs7O0lBR0k7QUFpREosTUFBTSxPQUFPLHFCQUFxQjtJQTJvQnRCO0lBQ0E7SUFDQTtJQXZvQkYsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNwQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNwQixrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUM1QixHQUFHLENBQWM7SUFD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QUFDOzRCQUMzRCxVQUFVLENBQUMsV0FBVyxFQUFFO2dDQUN0QixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQztnQ0FDNUMsT0FBTyxDQUFDLGNBQWMsQ0FBQzs2QkFDeEIsQ0FBQzt5QkFBQyxDQUFDLENBQUM7eUpBMkNtQixxQkFBcUI7c0JBQTlDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ0ssVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNiLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUMwQixXQUFXO3NCQUExQyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFHMUIsVUFBVTtzQkFEYixLQUFLO2dCQVVGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFVRixJQUFJO3NCQURQLEtBQUs7Z0JBYUYsUUFBUTtzQkFEWCxLQUFLO2dCQWFGLFdBQVc7c0JBRGQsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVVGLElBQUk7c0JBRFAsS0FBSztnQkFZRixVQUFVO3NCQURiLEtBQUs7Z0JBVUYsSUFBSTtzQkFEUCxLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFZRixJQUFJO3NCQURQLEtBQUs7Z0JBMlVOLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZWpDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogY29tcGxleCBidXQgd29yayB3ZWxsXHJcbiAqIFRPRE86IHJlYnVpbGQgbGF0dGVyXHJcbiAqL1xyXG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgVEFCIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9rZXljb2Rlc1wiO1xyXG5pbXBvcnQge1xyXG4gIENka0Nvbm5lY3RlZE92ZXJsYXksXHJcbiAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XHJcbmltcG9ydCB7XHJcbiAgZm9yd2FyZFJlZixcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNZWZEZXZPcHRpb25Db21wb25lbnQgfSBmcm9tIFwiLi9vcHRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE9wdGlvblBpcGUgfSBmcm9tIFwiLi9vcHRpb24ucGlwZVwiO1xyXG5pbXBvcnQgeyB0b0Jvb2xlYW4gfSBmcm9tICcuLi91dGlsL2NvbnZlcnQnO1xyXG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5cclxuXHJcbi8qKlxyXG4gICogRXhhbXBsZSBvZiB1c2FnZTpcclxuICAqIDxleGFtcGxlLXVybD5odHRwczovL21lZi5kZXYvdWlfa2l0X2RlbW8vdmlldy9jb250cm9scy9zZWxlY3Q8L2V4YW1wbGUtdXJsPlxyXG4gICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcIm1lZmRldi1zZWxlY3RcIixcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2VsZWN0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgYW5pbWF0aW9uczogW3RyaWdnZXIoJ2Ryb3BEb3duQW5pbWF0aW9uJywgW1xyXG4gICAgc3RhdGUoJ2JvdHRvbScsIHN0eWxlKHtcclxuICAgICAgb3BhY2l0eSAgICAgICAgOiAxLFxyXG4gICAgICB0cmFuc2Zvcm0gICAgICA6ICdzY2FsZVkoMSknLFxyXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46ICcwJSAwJSdcclxuICAgIH0pKSxcclxuICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gYm90dG9tJywgW1xyXG4gICAgICBzdHlsZSh7XHJcbiAgICAgICAgb3BhY2l0eSAgICAgICAgOiAwLFxyXG4gICAgICAgIHRyYW5zZm9ybSAgICAgIDogJ3NjYWxlWSgwKScsXHJcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMCUnXHJcbiAgICAgIH0pLFxyXG4gICAgICBhbmltYXRlKCcxNTBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKScpXHJcbiAgICBdKSxcclxuICAgIHN0YXRlKCd0b3AnLCBzdHlsZSh7XHJcbiAgICAgIG9wYWNpdHkgICAgICAgIDogMSxcclxuICAgICAgdHJhbnNmb3JtICAgICAgOiAnc2NhbGVZKDEpJyxcclxuICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMTAwJSdcclxuICAgIH0pKSxcclxuICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gdG9wJywgW1xyXG4gICAgICBzdHlsZSh7XHJcbiAgICAgICAgb3BhY2l0eSAgICAgICAgOiAwLFxyXG4gICAgICAgIHRyYW5zZm9ybSAgICAgIDogJ3NjYWxlWSgwKScsXHJcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMTAwJSdcclxuICAgICAgfSksXHJcbiAgICAgIGFuaW1hdGUoJzE1MG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpJylcclxuICAgIF0pLFxyXG4gICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgW1xyXG4gICAgICBhbmltYXRlKCcyNTBtcyAxMDBtcyBsaW5lYXInLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpXHJcbiAgICBdKVxyXG4gIF0pLFxyXG5cclxuICB0cmlnZ2VyKCd0YWdBbmltYXRpb24nLCBbXHJcbiAgICBzdGF0ZSgnKicsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnc2NhbGUoMSknIH0pKSxcclxuICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtcclxuICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZSgwKScgfSksXHJcbiAgICAgIGFuaW1hdGUoJzE1MG1zIGxpbmVhcicpXHJcbiAgICBdKSxcclxuICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZSgwKScgfSkpLFxyXG4gICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgW1xyXG4gICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyB9KSxcclxuICAgICAgYW5pbWF0ZSgnMTUwbXMgbGluZWFyJylcclxuICAgIF0pXSldXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZWZEZXZTZWxlY3RDb21wb25lbnRcclxuICBpbXBsZW1lbnRzXHJcbiAgICBPbkluaXQsXHJcbiAgICBBZnRlckNvbnRlbnRJbml0LFxyXG4gICAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBwcml2YXRlIF9hbGxvd0NsZWFyID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc1RhZ3MgPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc011bHRpcGxlID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfa2VlcFVuTGlzdE9wdGlvbnMgPSBmYWxzZTtcclxuICBwcml2YXRlIF9zaG93U2VhcmNoID0gZmFsc2U7XHJcbiAgX2VsOiBIVE1MRWxlbWVudDtcclxuICBfaXNPcGVuID0gZmFsc2U7XHJcbiAgX3ByZWZpeENscyA9IFwicGctc2VsZWN0XCI7XHJcbiAgX2NsYXNzTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICBfZHJvcERvd25DbGFzc01hcDogYW55O1xyXG4gIF9kcm9wRG93blByZWZpeENscyA9IGAke3RoaXMuX3ByZWZpeENsc30tZHJvcGRvd25gO1xyXG4gIF9zZWxlY3Rpb25DbGFzc01hcDogYW55O1xyXG4gIF9zZWxlY3Rpb25QcmVmaXhDbHMgPSBgJHt0aGlzLl9wcmVmaXhDbHN9LXNlbGVjdGlvbmA7XHJcbiAgX3NpemU6IHN0cmluZztcclxuICBfdmFsdWU6IHN0cmluZ1tdIHwgc3RyaW5nO1xyXG4gIF9wbGFjZWhvbGRlciA9IFwicGxhY2Vob2xkZXJcIjtcclxuICBfbm90Rm91bmRDb250ZW50ID0gXCJObyBDb250ZW50XCI7XHJcbiAgX3NlYXJjaFRleHQgPSBcIlwiO1xyXG4gIF90cmlnZ2VyV2lkdGggPSAwO1xyXG4gIF9zZWxlY3RlZE9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50O1xyXG4gIF9vcGVyYXRpbmdNdWx0aXBsZU9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50O1xyXG4gIF9zZWxlY3RlZE9wdGlvbnM6IFNldDxNZWZEZXZPcHRpb25Db21wb25lbnQ+ID0gbmV3IFNldCgpO1xyXG4gIF9vcHRpb25zOiBNZWZEZXZPcHRpb25Db21wb25lbnRbXSA9IFtdO1xyXG4gIF9jYWNoZU9wdGlvbnM6IE1lZkRldk9wdGlvbkNvbXBvbmVudFtdID0gW107XHJcbiAgX2ZpbHRlck9wdGlvbnM6IE1lZkRldk9wdGlvbkNvbXBvbmVudFtdID0gW107XHJcbiAgX3RhZ3NPcHRpb25zOiBNZWZEZXZPcHRpb25Db21wb25lbnRbXSA9IFtdO1xyXG4gIF9hY3RpdmVGaWx0ZXJPcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudDtcclxuICBfaXNNdWx0aUluaXQgPSBmYWxzZTtcclxuICBfZHJvcERvd25Qb3NpdGlvbjogXCJ0b3BcIiB8IFwiY2VudGVyXCIgfCBcImJvdHRvbVwiID0gXCJib3R0b21cIjtcclxuICBfY29tcG9zaW5nID0gZmFsc2U7XHJcbiAgX21vZGU6IGFueTtcclxuICAvLyBuZ01vZGVsIEFjY2Vzc1xyXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB2b2lkID0gKCkgPT4gbnVsbDtcclxuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiBudWxsO1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWFyY2hJbnB1dFwiKSBzZWFyY2hJbnB1dEVsZW1lbnRSZWY6IGFueTtcclxuICBAVmlld0NoaWxkKFwidHJpZ2dlclwiKSB0cmlnZ2VyOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoXCJkcm9wZG93blVsXCIpIGRyb3Bkb3duVWw6IEVsZW1lbnRSZWY7XHJcbiAgQE91dHB1dCgpIFNlYXJjaENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIE9wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgU2Nyb2xsVG9Cb3R0b206IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBGaWx0ZXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIE1heE11bHRpcGxlID0gSW5maW5pdHk7XHJcbiAgQElucHV0KCkgRmlyc3REZWZhdWx0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZChDZGtDb25uZWN0ZWRPdmVybGF5KSBfY2RrT3ZlcmxheTogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgQWxsb3dDbGVhcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fYWxsb3dDbGVhciA9IHRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgQWxsb3dDbGVhcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hbGxvd0NsZWFyO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgS2VlcFVuTGlzdE9wdGlvbnModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2tlZXBVbkxpc3RPcHRpb25zID0gdG9Cb29sZWFuKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldCBLZWVwVW5MaXN0T3B0aW9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9rZWVwVW5MaXN0T3B0aW9ucztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IE1vZGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbW9kZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX21vZGUgPT09IFwibXVsdGlwbGVcIikge1xyXG4gICAgICB0aGlzLk11bHRpcGxlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5fbW9kZSA9PT0gXCJ0YWdzXCIpIHtcclxuICAgICAgdGhpcy5UYWdzID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5fbW9kZSA9PT0gXCJjb21ib2JveFwiKSB7XHJcbiAgICAgIHRoaXMuU2hvd1NlYXJjaCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBNdWx0aXBsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNNdWx0aXBsZSA9IHRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5faXNNdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLlNob3dTZWFyY2ggPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IE11bHRpcGxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlwbGU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBQbGFjZUhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFBsYWNlSG9sZGVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBOb3RGb3VuZENvbnRlbnQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbm90Rm91bmRDb250ZW50ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgTm90Rm91bmRDb250ZW50KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbm90Rm91bmRDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgU2l6ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgdGhpcy5fc2l6ZSA9IHsgbGFyZ2U6IFwibGdcIiwgc21hbGw6IFwic21cIiB9W3ZhbHVlXTtcclxuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICB9XHJcblxyXG4gIGdldCBTaXplKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IFNob3dTZWFyY2godmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Nob3dTZWFyY2ggPSB0b0Jvb2xlYW4odmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFNob3dTZWFyY2goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2hvd1NlYXJjaDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IFRhZ3ModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGlzVGFncyA9IHRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1RhZ3MgPSBpc1RhZ3M7XHJcbiAgICB0aGlzLk11bHRpcGxlID0gaXNUYWdzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFRhZ3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNUYWdzO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gdG9Cb29sZWFuKHZhbHVlKTtcclxuICAgIHRoaXMuY2xvc2VEcm9wRG93bigpO1xyXG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgT3Blbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgaXNPcGVuID0gdG9Cb29sZWFuKHZhbHVlKTtcclxuICAgIGlmICh0aGlzLl9pc09wZW4gPT09IGlzT3Blbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoKTtcclxuICAgICAgdGhpcy5fc2V0VHJpZ2dlcldpZHRoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc09wZW4gPSBpc09wZW47XHJcbiAgICB0aGlzLk9wZW5DaGFuZ2UuZW1pdCh0aGlzLl9pc09wZW4pO1xyXG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xyXG4gICAgaWYgKHRoaXMuX2lzT3Blbikge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrRHJvcERvd25TY3JvbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgT3BlbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc09wZW47XHJcbiAgfVxyXG5cclxuICAvKiogbmV3IC1vcHRpb24gaW5zZXJ0IG9yIG5ldyB0YWdzIGluc2VydCAqL1xyXG4gICAvLyBAdHMtaWdub3JlXHJcbiAgYWRkT3B0aW9uID0gb3B0aW9uID0+IHtcclxuICAgIHRoaXMuX29wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgaWYgKCF0aGlzLl9pc1RhZ3MpIHtcclxuICAgICAgaWYgKG9wdGlvbi5WYWx1ZSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24odGhpcy5fdmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGVTZWxlY3RlZE9wdGlvbih0aGlzLl92YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvKiogLW9wdGlvbiByZW1vdmUgb3IgdGFncyByZW1vdmUgKi9cclxuICByZW1vdmVPcHRpb24ob3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX29wdGlvbnMuc3BsaWNlKHRoaXMuX29wdGlvbnMuaW5kZXhPZihvcHRpb24pLCAxKTtcclxuICAgIGlmICghdGhpcy5faXNUYWdzKSB7XHJcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGVTZWxlY3RlZE9wdGlvbih0aGlzLl92YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogZHJvcGRvd24gcG9zaXRpb24gY2hhbmdlZCAqL1xyXG4gIG9uUG9zaXRpb25DaGFuZ2UocG9zaXRpb246IENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fZHJvcERvd25Qb3NpdGlvbiA9IHBvc2l0aW9uLmNvbm5lY3Rpb25QYWlyLm9yaWdpblk7XHJcbiAgfVxyXG5cclxuICBjb21wb3NpdGlvblN0YXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tcG9zaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbXBvc2l0aW9uRW5kKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tcG9zaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKiogY2xlYXIgc2luZ2xlIHNlbGVjdGVkIG9wdGlvbiAqL1xyXG4gIGNsZWFyU2VsZWN0KCRldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICgkZXZlbnQpIHtcclxuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH0gLy8gQHRzLWlnbm9yZVxyXG4gICAgdGhpcy5fc2VsZWN0ZWRPcHRpb24gPSBudWxsOyAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLlZhbHVlID0gbnVsbDsgLy8gQHRzLWlnbm9yZVxyXG4gICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICB9XHJcblxyXG4gIC8qKiBjbGljayBkcm9wZG93biBvcHRpb24gYnkgdXNlciAqL1xyXG4gIGNsaWNrT3B0aW9uKG9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50LCAkZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIW9wdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNob29zZU9wdGlvbihvcHRpb24sIHRydWUsICRldmVudCk7XHJcbiAgICB0aGlzLmNsZWFyU2VhcmNoVGV4dCgpO1xyXG4gICAgaWYgKCF0aGlzLl9pc011bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIGNob29zZSBvcHRpb24gKi9cclxuICBjaG9vc2VPcHRpb24oXHJcbiAgICBvcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudCxcclxuICAgIGlzVXNlckNsaWNrOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAkZXZlbnQ/OiBNb3VzZUV2ZW50XHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24gPSBvcHRpb247XHJcbiAgICBpZiAob3B0aW9uICYmICFvcHRpb24uRGlzYWJsZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLk11bHRpcGxlKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRPcHRpb24gPSBvcHRpb247XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBvcHRpb24uVmFsdWU7XHJcbiAgICAgICAgaWYgKGlzVXNlckNsaWNrKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZS5uZXh0KHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICAgIHRoaXMub25DaGFuZ2Uob3B0aW9uLlZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlzVXNlckNsaWNrKSB7XHJcbiAgICAgICAgICB0aGlzLmlzSW5TZXQodGhpcy5fc2VsZWN0ZWRPcHRpb25zLCBvcHRpb24pXHJcbiAgICAgICAgICAgID8gdGhpcy51blNlbGVjdE11bHRpcGxlT3B0aW9uKG9wdGlvbilcclxuICAgICAgICAgICAgOiB0aGlzLnNlbGVjdE11bHRpcGxlT3B0aW9uKG9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVXaWR0aChlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50LCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgIC8qKiB3YWl0IGZvciBzY3JvbGwgd2lkdGggY2hhbmdlICovIC8vIEB0cy1pZ25vcmVcclxuICAgICAgc2V0VGltZW91dChfID0+IHtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCBcIndpZHRoXCIsIGAke2VsZW1lbnQuc2Nyb2xsV2lkdGh9cHhgKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZShlbGVtZW50LCBcIndpZHRoXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIGRldGVybWluZSBpZiBvcHRpb24gaW4gc2V0ICovXHJcbiAgaXNJblNldChcclxuICAgIHNldDogU2V0PE1lZkRldk9wdGlvbkNvbXBvbmVudD4sXHJcbiAgICBvcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudFxyXG4gICk6IE1lZkRldk9wdGlvbkNvbXBvbmVudCB7IC8vIEB0cy1pZ25vcmVcclxuICAgIHJldHVybiAoQXJyYXkuZnJvbShzZXQpIGFzIE1lZkRldk9wdGlvbkNvbXBvbmVudFtdKS5maW5kKFxyXG4gICAgICAoZGF0YTogTWVmRGV2T3B0aW9uQ29tcG9uZW50KSA9PiBkYXRhLlZhbHVlID09PSBvcHRpb24uVmFsdWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogY2FuY2VsIHNlbGVjdCBtdWx0aXBsZSBvcHRpb24gKi8gLy8gQHRzLWlnbm9yZVxyXG4gIHVuU2VsZWN0TXVsdGlwbGVPcHRpb24gPSAob3B0aW9uLCAkZXZlbnQ/LCBlbWl0Q2hhbmdlID0gdHJ1ZSkgPT4ge1xyXG4gICAgdGhpcy5fb3BlcmF0aW5nTXVsdGlwbGVPcHRpb24gPSBvcHRpb247XHJcbiAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbnMuZGVsZXRlKG9wdGlvbik7XHJcbiAgICBpZiAoZW1pdENoYW5nZSkge1xyXG4gICAgICB0aGlzLmVtaXRNdWx0aXBsZU9wdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlr7lUYWfov5vooYznibnmrorlpITnkIZcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5faXNUYWdzICYmXHJcbiAgICAgIHRoaXMuX29wdGlvbnMuaW5kZXhPZihvcHRpb24pICE9PSAtMSAmJlxyXG4gICAgICB0aGlzLl90YWdzT3B0aW9ucy5pbmRleE9mKG9wdGlvbikgIT09IC0xXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5yZW1vdmVPcHRpb24ob3B0aW9uKTtcclxuICAgICAgdGhpcy5fdGFnc09wdGlvbnMuc3BsaWNlKHRoaXMuX3RhZ3NPcHRpb25zLmluZGV4T2Yob3B0aW9uKSwgMSk7XHJcbiAgICB9XHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqIHNlbGVjdCBtdWx0aXBsZSBvcHRpb24gKi9cclxuICBzZWxlY3RNdWx0aXBsZU9wdGlvbihvcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudCwgJGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgLyoqIGlmIHRhZ3MgZG8gcHVzaCB0byB0YWcgb3B0aW9uICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2lzVGFncyAmJlxyXG4gICAgICB0aGlzLl9vcHRpb25zLmluZGV4T2Yob3B0aW9uKSA9PT0gLTEgJiZcclxuICAgICAgdGhpcy5fdGFnc09wdGlvbnMuaW5kZXhPZihvcHRpb24pID09PSAtMVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYWRkT3B0aW9uKG9wdGlvbik7XHJcbiAgICAgIHRoaXMuX3RhZ3NPcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuX29wZXJhdGluZ011bHRpcGxlT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkT3B0aW9ucy5zaXplIDwgdGhpcy5NYXhNdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbnMuYWRkKG9wdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVtaXRNdWx0aXBsZU9wdGlvbnMoKTtcclxuXHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogZW1pdCBtdWx0aXBsZSBvcHRpb25zICovXHJcbiAgZW1pdE11bHRpcGxlT3B0aW9ucygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pc011bHRpSW5pdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBhcnJheU9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMuX3NlbGVjdGVkT3B0aW9ucyk7XHJcbiAgICB0aGlzLl92YWx1ZSA9IGFycmF5T3B0aW9ucy5tYXAoaXRlbSA9PiBpdGVtLlZhbHVlKTtcclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIHVwZGF0ZSBzZWxlY3RlZCBvcHRpb24gd2hlbiBhZGQgcmVtb3ZlIG9wdGlvbiBldGMgKi9cclxuICB1cGRhdGVTZWxlY3RlZE9wdGlvbihcclxuICAgIGN1cnJlbnRNb2RlbFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSxcclxuICAgIHRyaWdnZXJCeU5nTW9kZWw6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKGN1cnJlbnRNb2RlbFZhbHVlID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuTXVsdGlwbGUpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5fb3B0aW9ucy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0gIT0gbnVsbCAmJiBjdXJyZW50TW9kZWxWYWx1ZS5pbmRleE9mKGl0ZW0uVmFsdWUpICE9PSAtMTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICgodGhpcy5LZWVwVW5MaXN0T3B0aW9ucyB8fCB0aGlzLlRhZ3MpICYmICF0cmlnZ2VyQnlOZ01vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgX3NlbGVjdGVkT3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy5fc2VsZWN0ZWRPcHRpb25zKTtcclxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgY29uc3QgX2V4aXN0ID0gX3NlbGVjdGVkT3B0aW9ucy5zb21lKFxyXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0uX3ZhbHVlID09IG9wdGlvbi5fdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoIV9leGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbnMuYWRkKG9wdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25zID0gbmV3IFNldCgpO1xyXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbnMuYWRkKG9wdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5fb3B0aW9ucy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0gIT0gbnVsbCAmJiBpdGVtLlZhbHVlID09IGN1cnJlbnRNb2RlbFZhbHVlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jaG9vc2VPcHRpb24oc2VsZWN0ZWRPcHRpb25bMF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yY2VVcGRhdGVTZWxlY3RlZE9wdGlvbih2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIC8qKiB0cmlnZ2VyIGRpcnR5IGNoZWNrICovIC8vIEB0cy1pZ25vcmVcclxuICAgIHNldFRpbWVvdXQoXyA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24odmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgVmFsdWUoKTogc3RyaW5nIHwgc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IFZhbHVlKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5fdXBkYXRlVmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJBbGxTZWxlY3RlZE9wdGlvbihlbWl0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIHRoaXMudW5TZWxlY3RNdWx0aXBsZU9wdGlvbihpdGVtLCBudWxsLCBlbWl0Q2hhbmdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5RW50ZXJFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgLyoqIHdoZW4gY29tcG9zaW5nIGVuZCAqL1xyXG4gICAgaWYgKCF0aGlzLl9jb21wb3NpbmcgJiYgdGhpcy5faXNPcGVuKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlck9wdGlvbihmYWxzZSk7XHJcbiAgICAgIHRoaXMuY2xpY2tPcHRpb24odGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUtleUJhY2tzcGFjZUV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX3NlYXJjaFRleHQgJiYgIXRoaXMuX2NvbXBvc2luZyAmJiB0aGlzLl9pc011bHRpcGxlKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGNvbnN0IGxhc3RPcHRpb24gPSBBcnJheS5mcm9tKHRoaXMuX3NlbGVjdGVkT3B0aW9ucykucG9wKCk7XHJcbiAgICAgIHRoaXMudW5TZWxlY3RNdWx0aXBsZU9wdGlvbihsYXN0T3B0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUtleURvd25FdmVudCgkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pc09wZW4pIHtcclxuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uID0gdGhpcy5uZXh0T3B0aW9uKFxyXG4gICAgICAgIHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbixcclxuICAgICAgICB0aGlzLl9maWx0ZXJPcHRpb25zLmZpbHRlcih3ID0+ICF3LkRpc2FibGVkKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVLZXlVcEV2ZW50KCRldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2lzT3Blbikge1xyXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24gPSB0aGlzLnByZU9wdGlvbihcclxuICAgICAgICB0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24sXHJcbiAgICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5maWx0ZXIodyA9PiAhdy5EaXNhYmxlZClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJlT3B0aW9uKFxyXG4gICAgb3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnQsXHJcbiAgICBvcHRpb25zOiBNZWZEZXZPcHRpb25Db21wb25lbnRbXVxyXG4gICk6IE1lZkRldk9wdGlvbkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gb3B0aW9uc1tvcHRpb25zLmluZGV4T2Yob3B0aW9uKSAtIDFdIHx8IG9wdGlvbnNbb3B0aW9ucy5sZW5ndGggLSAxXTtcclxuICB9XHJcblxyXG4gIG5leHRPcHRpb24oXHJcbiAgICBvcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudCxcclxuICAgIG9wdGlvbnM6IE1lZkRldk9wdGlvbkNvbXBvbmVudFtdXHJcbiAgKTogTWVmRGV2T3B0aW9uQ29tcG9uZW50IHtcclxuICAgIHJldHVybiBvcHRpb25zW29wdGlvbnMuaW5kZXhPZihvcHRpb24pICsgMV0gfHwgb3B0aW9uc1swXTtcclxuICB9XHJcblxyXG4gIGNsZWFyU2VhcmNoVGV4dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlYXJjaFRleHQgPSBcIlwiO1xyXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJPcHRpb24oKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpbHRlck9wdGlvbih1cGRhdGVBY3RpdmVGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GaWx0ZXIpIHtcclxuICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucyA9IG5ldyBPcHRpb25QaXBlKCkudHJhbnNmb3JtKHRoaXMuX29wdGlvbnMsIHtcclxuICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLl9zZWFyY2hUZXh0LFxyXG4gICAgICAgIHRhZ3M6IHRoaXMuX2lzVGFncyxcclxuICAgICAgICBub3RGb3VuZENvbnRlbnQ6IHRoaXMuX2lzVGFnc1xyXG4gICAgICAgICAgPyB0aGlzLl9zZWFyY2hUZXh0XHJcbiAgICAgICAgICA6IHRoaXMuX25vdEZvdW5kQ29udGVudCxcclxuICAgICAgICBkaXNhYmxlZDogIXRoaXMuX2lzVGFncyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5faXNUYWdzID8gdGhpcy5fc2VhcmNoVGV4dCA6IFwiZGlzYWJsZWRcIlxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUT0RPOiBjYXVzZSBwcmUgJiBuZXh0IGtleSBzZWxlY3Rpb24gbm90IHdvcmsgKi9cclxuICAgIGlmICh1cGRhdGVBY3RpdmVGaWx0ZXIgJiYgIXRoaXMuX3NlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbiA9IHRoaXMuX2ZpbHRlck9wdGlvbnNbMF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaENoYW5nZShzZWFyY2hWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLlNlYXJjaENoYW5nZS5lbWl0KHNlYXJjaFZhbHVlKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiLCBbXCIkZXZlbnRcIl0pXHJcbiAgb25DbGljayhlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuT3BlbiA9ICF0aGlzLk9wZW47XHJcbiAgICAgIGlmICh0aGlzLlNob3dTZWFyY2gpIHtcclxuICAgICAgICAvKiogd2FpdCBmb3Igc2VhcmNoIGRpc3BsYXkgKi8gLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHNldFRpbWVvdXQoXyA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duXCIsIFtcIiRldmVudFwiXSlcclxuICBvbktleURvd24oZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3Qga2V5Q29kZSA9IGUua2V5Q29kZTtcclxuICAgIGlmIChrZXlDb2RlID09PSBUQUIgJiYgdGhpcy5PcGVuKSB7XHJcbiAgICAgIHRoaXMuT3BlbiA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoKGtleUNvZGUgIT09IERPV05fQVJST1cgJiYga2V5Q29kZSAhPT0gRU5URVIpIHx8IHRoaXMuT3Blbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuT3BlbiA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLlNob3dTZWFyY2gpIHtcclxuICAgICAgICAvKiogd2FpdCBmb3Igc2VhcmNoIGRpc3BsYXkgKi8gLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHNldFRpbWVvdXQoXyA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlRHJvcERvd24oKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuT3Blbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgaWYgKHRoaXMuTXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUoXHJcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBcIndpZHRoXCJcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xlYXJTZWFyY2hUZXh0KCk7XHJcbiAgICB0aGlzLk9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNldENsYXNzTWFwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2xhc3NMaXN0LmZvckVhY2goX2NsYXNzTmFtZSA9PiB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2VsLCBfY2xhc3NOYW1lKTtcclxuICAgIH0pOyAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLl9jbGFzc0xpc3QgPSBbXHJcbiAgICAgIHRoaXMuX3ByZWZpeENscyxcclxuICAgICAgdGhpcy5fbW9kZSA9PT0gXCJjb21ib2JveFwiICYmIGAke3RoaXMuX3ByZWZpeENsc30tY29tYm9ib3hgLFxyXG4gICAgICAhdGhpcy5fZGlzYWJsZWQgJiYgYCR7dGhpcy5fcHJlZml4Q2xzfS1lbmFibGVkYCxcclxuICAgICAgdGhpcy5fZGlzYWJsZWQgJiYgYCR7dGhpcy5fcHJlZml4Q2xzfS1kaXNhYmxlZGAsXHJcbiAgICAgIHRoaXMuX2lzT3BlbiAmJiBgJHt0aGlzLl9wcmVmaXhDbHN9LW9wZW5gLFxyXG4gICAgICB0aGlzLl9zaG93U2VhcmNoICYmIGAke3RoaXMuX3ByZWZpeENsc30tc2hvdy1zZWFyY2hgLFxyXG4gICAgICB0aGlzLl9zaXplICYmIGAke3RoaXMuX3ByZWZpeENsc30tJHt0aGlzLl9zaXplfWBcclxuICAgIF0uZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICByZXR1cm4gISFpdGVtO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9jbGFzc0xpc3QuZm9yRWFjaChfY2xhc3NOYW1lID0+IHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fZWwsIF9jbGFzc05hbWUpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb25DbGFzc01hcCA9IHtcclxuICAgICAgW3RoaXMuX3NlbGVjdGlvblByZWZpeENsc106IHRydWUsXHJcbiAgICAgIFtgJHt0aGlzLl9zZWxlY3Rpb25QcmVmaXhDbHN9LS1zaW5nbGVgXTogIXRoaXMuTXVsdGlwbGUsXHJcbiAgICAgIFtgJHt0aGlzLl9zZWxlY3Rpb25QcmVmaXhDbHN9LS1tdWx0aXBsZWBdOiB0aGlzLk11bHRpcGxlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2V0RHJvcERvd25DbGFzc01hcCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Ryb3BEb3duQ2xhc3NNYXAgPSB7XHJcbiAgICAgIFt0aGlzLl9kcm9wRG93blByZWZpeENsc106IHRydWUsXHJcbiAgICAgIFtcImNvbXBvbmVudC1zZWxlY3RcIl06IHRoaXMuX21vZGUgPT09IFwiY29tYm9ib3hcIixcclxuICAgICAgW2Ake3RoaXMuX2Ryb3BEb3duUHJlZml4Q2xzfS0tc2luZ2xlYF06ICF0aGlzLk11bHRpcGxlLFxyXG4gICAgICBbYCR7dGhpcy5fZHJvcERvd25QcmVmaXhDbHN9LS1tdWx0aXBsZWBdOiB0aGlzLk11bHRpcGxlLFxyXG4gICAgICBbYCR7dGhpcy5fZHJvcERvd25QcmVmaXhDbHN9LXBsYWNlbWVudC1ib3R0b21MZWZ0YF06XHJcbiAgICAgICAgdGhpcy5fZHJvcERvd25Qb3NpdGlvbiA9PT0gXCJib3R0b21cIixcclxuICAgICAgW2Ake3RoaXMuX2Ryb3BEb3duUHJlZml4Q2xzfS1wbGFjZW1lbnQtdG9wTGVmdGBdOlxyXG4gICAgICAgIHRoaXMuX2Ryb3BEb3duUG9zaXRpb24gPT09IFwidG9wXCJcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzY3JvbGxUb0FjdGl2ZSgpOiB2b2lkIHtcclxuICAgIC8qKiB3YWl0IGZvciBkcm9wZG93biBkaXNwbGF5ICovIC8vIEB0cy1pZ25vcmVcclxuICAgIHNldFRpbWVvdXQoXyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24gJiYgdGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uLlZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9maWx0ZXJPcHRpb25zLmZpbmRJbmRleChcclxuICAgICAgICAgIG9wdGlvbiA9PiBvcHRpb24uVmFsdWUgPT09IHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbi5WYWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHNjcm9sbFBhbmUgPSB0aGlzLmRyb3Bkb3duVWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbltcclxuICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgIF0gYXMgSFRNTExJRWxlbWVudDtcclxuICAgICAgICAgIC8vIFRPRE86IHNjcm9sbEludG9WaWV3SWZOZWVkZWQgaXMgbm90IGEgc3RhbmRhcmQgQVBJLCB3aHkgZG9pbmcgc28/XHJcbiAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55ICovXHJcbiAgICAgICAgICAoc2Nyb2xsUGFuZSBhcyBhbnkpLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmx1c2hDb21wb25lbnRTdGF0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlRmlsdGVyT3B0aW9uKCk7XHJcbiAgICBpZiAoIXRoaXMuTXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbih0aGlzLl92YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fdmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9uKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX3NldFRyaWdnZXJXaWR0aCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RyaWdnZXJXaWR0aCA9IHRoaXMuX2dldFRyaWdnZXJSZWN0KCkud2lkdGg7XHJcbiAgICAvKiogc2hvdWxkIHJlbW92ZSBhZnRlciBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9tYXRlcmlhbDIvcHVsbC84NzY1IG1lcmdlZCAqKi9cclxuICAgIGlmICh0aGlzLl9jZGtPdmVybGF5ICYmIHRoaXMuX2Nka092ZXJsYXkub3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLl9jZGtPdmVybGF5Lm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7XHJcbiAgICAgICAgd2lkdGg6IHRoaXMuX3RyaWdnZXJXaWR0aFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9nZXRUcmlnZ2VyUmVjdCgpOiBDbGllbnRSZWN0IHtcclxuICAgIHJldHVybiB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICB0aGlzLl91cGRhdGVWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgZHJvcERvd25TY3JvbGwodWw6IEhUTUxVTGlzdEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGlmICh1bCAmJiB1bC5zY3JvbGxIZWlnaHQgLSB1bC5zY3JvbGxUb3AgPT09IHVsLmNsaWVudEhlaWdodCkge1xyXG4gICAgICB0aGlzLlNjcm9sbFRvQm90dG9tLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0Ryb3BEb3duU2Nyb2xsKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmRyb3Bkb3duVWwgJiZcclxuICAgICAgdGhpcy5kcm9wZG93blVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID09PVxyXG4gICAgICAgIHRoaXMuZHJvcGRvd25VbC5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuU2Nyb2xsVG9Cb3R0b20uZW1pdCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGNEUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5fZWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmZsdXNoQ29tcG9uZW50U3RhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJPcHRpb24oKTtcclxuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICAgIHRoaXMuc2V0RHJvcERvd25DbGFzc01hcCgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlT3B0aW9ucyAhPT0gdGhpcy5fb3B0aW9ucykge1xyXG4gICAgICAvKiogdXBkYXRlIGZpbHRlciBvcHRpb24gYWZ0ZXIgZXZlcnkgY29udGVudCBjaGVjayBjeWNsZSAqL1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlck9wdGlvbigpO1xyXG4gICAgICB0aGlzLl9jYWNoZU9wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJPcHRpb24oZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLkZpcnN0RGVmYXVsdCkge1xyXG4gICAgICBpZiAoIXRoaXMuX3ZhbHVlICYmIHRoaXMuX29wdGlvbnMpIHtcclxuICAgICAgICBpZiAodGhpcy5fb3B0aW9uc1swXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX29wdGlvbnNbMF0uVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuY2hvb3NlT3B0aW9uKHRoaXMuX29wdGlvbnNbMF0sIGZhbHNlKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX29wdGlvbnNbMF0uVmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVWYWx1ZShcclxuICAgIHZhbHVlOiBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgIGVtaXRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdmFsdWUgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA9PSBudWxsICYmIHRoaXMuTXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5fdmFsdWUgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuTXVsdGlwbGUpIHtcclxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9uID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9uKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5jbGVhckFsbFNlbGVjdGVkT3B0aW9uKGVtaXRDaGFuZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9uKHZhbHVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbGxTZWxlY3RlZE9wdGlvbihlbWl0Q2hhbmdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IHRhYmluZGV4PVwiMFwiICN0cmlnZ2VyIGNka092ZXJsYXlPcmlnaW4gI29yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIiBbbmdDbGFzc109XCJfc2VsZWN0aW9uQ2xhc3NNYXBcIlxyXG4gIChrZXlkb3duLkVudGVyKT1cImhhbmRsZUtleUVudGVyRXZlbnQoJGV2ZW50KVwiIChrZXlkb3duLkJhY2tzcGFjZSk9XCJoYW5kbGVLZXlCYWNrc3BhY2VFdmVudCgkZXZlbnQpXCJcclxuICAoa2V5ZG93bi5BcnJvd1VwKT1cImhhbmRsZUtleVVwRXZlbnQoJGV2ZW50KVwiIChrZXlkb3duLkFycm93RG93bik9XCJoYW5kbGVLZXlEb3duRXZlbnQoJGV2ZW50KVwiPlxyXG5cclxuICAgIDwhLS0g0KPQstC10YHRjCDRgdC10LvQtdC60YItLT5cclxuICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fcmVuZGVyZWRcIiAqbmdJZj1cIiFTaG93U2VhcmNoXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fcGxhY2Vob2xkZXJcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFfc2VsZWN0ZWRPcHRpb25cIj5cclxuICAgICAgICB7eyBQbGFjZUhvbGRlciB9fVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbi1zZWxlY3RlZC12YWx1ZVwiPlxyXG4gICAgICB7eyBfc2VsZWN0ZWRPcHRpb24/LkxhYmVsIH19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tQ9C/0LjRgdC+0Logb3B0aW9ucy0tPlxyXG4gIDxkaXYgY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uX19yZW5kZXJlZFwiICpuZ0lmPVwiU2hvd1NlYXJjaFwiPlxyXG4gICAgPGRpdiBbaGlkZGVuXT1cIl9zZWFyY2hUZXh0fHwoIU9wZW4mJl9zZWxlY3RlZE9wdGlvbil8fF9zZWxlY3RlZE9wdGlvbnMuc2l6ZVwiXHJcbiAgICAgIGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fcGxhY2Vob2xkZXJcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIighX2NvbXBvc2luZykmJl9zZWxlY3RlZE9wdGlvblwiPlxyXG4gICAgICAgIHt7IF9zZWxlY3RlZE9wdGlvbi5MYWJlbCB9fVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiKCFfY29tcG9zaW5nKSYmKCFfc2VsZWN0ZWRPcHRpb24pXCI+XHJcbiAgICAgICAge3sgUGxhY2VIb2xkZXIgfX1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8IS0t0JzRg9C70YzRgtC40YHQtdC70LXQutGCLS0+XHJcbiAgICA8dWwgKm5nSWY9XCJNdWx0aXBsZVwiPiBcclxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgX3NlbGVjdGVkT3B0aW9uc1wiIFtAdGFnQW5pbWF0aW9uXSBbYXR0ci50aXRsZV09XCJvcHRpb24/LkxhYmVsIHx8IG9wdGlvbj8uVmFsdWVcIlxyXG4gICAgICAgIGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fY2hvaWNlXCIgc3R5bGU9XCItd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmVcIiAoY2xpY2spPVwidW5TZWxlY3RNdWx0aXBsZU9wdGlvbihvcHRpb24sJGV2ZW50KVwiPjwvc3Bhbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fY2hvaWNlX19jb250ZW50XCI+e3sgb3B0aW9uPy5MYWJlbCB9fTwvZGl2PlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGkgY2xhc3M9XCJwZy1zZWxlY3Qtc2VhcmNoIHBnLXNlbGVjdC1zZWFyY2gtLWlubGluZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZy1zZWxlY3Qtc2VhcmNoX19maWVsZF9fd3JhcFwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwicGctc2VsZWN0LXNlYXJjaF9fZmllbGRcIiAoY29tcG9zaXRpb25zdGFydCk9XCJjb21wb3NpdGlvblN0YXJ0KClcIlxyXG4gICAgICAgICAgICAoY29tcG9zaXRpb25lbmQpPVwiY29tcG9zaXRpb25FbmQoKTt1cGRhdGVXaWR0aChzZWFyY2hJbnB1dCxfc2VhcmNoVGV4dCk7XCIgWyhuZ01vZGVsKV09XCJfc2VhcmNoVGV4dFwiXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpbHRlck9wdGlvbigpO29uU2VhcmNoQ2hhbmdlKCRldmVudCk7XCJcclxuICAgICAgICAgICAgKGtleWRvd24pPVwidXBkYXRlV2lkdGgoc2VhcmNoSW5wdXQsX3NlYXJjaFRleHQpXCIgKGlucHV0KT1cInVwZGF0ZVdpZHRoKHNlYXJjaElucHV0LF9zZWFyY2hUZXh0KVwiXHJcbiAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCIgI3NlYXJjaElucHV0PlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZy1zZWxlY3Qtc2VhcmNoX19maWVsZF9fbWlycm9yXCI+PC9zcGFuPjwvZGl2PlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICAgIDxkaXYgKm5nSWY9XCIhTXVsdGlwbGVcIiBjbGFzcz1cInBnLXNlbGVjdC1zZWxlY3Rpb24tc2VsZWN0ZWQtdmFsdWVcIiBbaGlkZGVuXT1cIiEoX3NlbGVjdGVkT3B0aW9uPy5MYWJlbCl8fE9wZW5cIj5cclxuICAgICAge3sgX3NlbGVjdGVkT3B0aW9uPy5MYWJlbCB9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIU11bHRpcGxlXCIgW2hpZGRlbl09XCIhT3BlblwiIGNsYXNzPVwicGctc2VsZWN0LXNlYXJjaCBwZy1zZWxlY3Qtc2VhcmNoLS1pbmxpbmVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBnLXNlbGVjdC1zZWFyY2hfX2ZpZWxkX193cmFwXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwicGctc2VsZWN0LXNlYXJjaF9fZmllbGRcIiAoYmx1cik9XCJvblRvdWNoZWQoKVwiIChjb21wb3NpdGlvbnN0YXJ0KT1cImNvbXBvc2l0aW9uU3RhcnQoKVwiXHJcbiAgICAgICAgICAoY29tcG9zaXRpb25lbmQpPVwiY29tcG9zaXRpb25FbmQoKVwiIFsobmdNb2RlbCldPVwiX3NlYXJjaFRleHRcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRmlsdGVyT3B0aW9uKCk7b25TZWFyY2hDaGFuZ2UoJGV2ZW50KTtcIiAjc2VhcmNoSW5wdXQ+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwZy1zZWxlY3Qtc2VhcmNoX19maWVsZF9fbWlycm9yXCI+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxzcGFuIChjbGljayk9XCJvblRvdWNoZWQoKTtjbGVhclNlbGVjdCgkZXZlbnQpXCIgY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uX19jbGVhclwiIHN0eWxlPVwiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcIlxyXG4gICAgKm5nSWY9XCJfc2VsZWN0ZWRPcHRpb24/LkxhYmVsJiZBbGxvd0NsZWFyJiYhTXVsdGlwbGVcIj5cclxuICA8L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJwZy1zZWxlY3QtYXJyb3dcIj48Yj48L2I+PC9zcGFuPlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlIGNka0Nvbm5lY3RlZE92ZXJsYXkgY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm9yaWdpblwiXHJcbiAgKGJhY2tkcm9wQ2xpY2spPVwiY2xvc2VEcm9wRG93bigpXCIgKGRldGFjaCk9XCJjbG9zZURyb3BEb3duKCk7XCIgKHBvc2l0aW9uQ2hhbmdlKT1cIm9uUG9zaXRpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aF09XCJfdHJpZ2dlcldpZHRoXCIgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIl9pc09wZW5cIj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cIl9kcm9wRG93bkNsYXNzTWFwXCIgW0Bkcm9wRG93bkFuaW1hdGlvbl09XCJfZHJvcERvd25Qb3NpdGlvblwiPlxyXG4gICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICA8dWwgY2xhc3M9XCJwZy1zZWxlY3QtZHJvcGRvd24tbWVudSBwZy1zZWxlY3QtZHJvcGRvd24tbWVudS12ZXJ0aWNhbCBwZy1zZWxlY3QtZHJvcGRvd24tbWVudS1yb290XCIgI2Ryb3Bkb3duVWxcclxuICAgICAgICAoc2Nyb2xsKT1cImRyb3BEb3duU2Nyb2xsKGRyb3Bkb3duVWwpXCI+XHJcbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgX2ZpbHRlck9wdGlvbnNcIiBbY2xhc3MucGctc2VsZWN0LWRyb3Bkb3duLW1lbnUtaXRlbS1kaXNhYmxlZF09XCJvcHRpb24uRGlzYWJsZWRcIlxyXG4gICAgICAgICAgW2NsYXNzLnBnLXNlbGVjdC1kcm9wZG93bi1tZW51LWl0ZW0tYWN0aXZlXT1cIm9wdGlvbi5WYWx1ZSA9PSBfYWN0aXZlRmlsdGVyT3B0aW9uPy5WYWx1ZVwiXHJcbiAgICAgICAgICBbY2xhc3MucGctc2VsZWN0LWRyb3Bkb3duLW1lbnUtaXRlbS1zZWxlY3RlZF09XCIob3B0aW9uLlZhbHVlPT0oX3NlbGVjdGVkT3B0aW9uPy5WYWx1ZSkpfHwoaXNJblNldChfc2VsZWN0ZWRPcHRpb25zLG9wdGlvbikpXCJcclxuICAgICAgICAgIGNsYXNzPVwicGctc2VsZWN0LWRyb3Bkb3duLW1lbnUtaXRlbVwiIChjbGljayk9XCJjbGlja09wdGlvbihvcHRpb24sJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9uLk9wdGlvblRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uLk9wdGlvblRlbXBsYXRlXCI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFvcHRpb24uT3B0aW9uVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAge3sgb3B0aW9uLkxhYmVsIH19XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
@@ -231,28 +231,28 @@ export class MefDevSwitchComponent {
|
|
|
231
231
|
setDisabledState(isDisabled) {
|
|
232
232
|
this.Disabled = isDisabled;
|
|
233
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Get the value accessor provider configuration for the switch component.
|
|
236
|
+
*
|
|
237
|
+
* @param fn The value accessor provider.
|
|
238
|
+
*/
|
|
239
|
+
static switchValueAccessor() {
|
|
240
|
+
return {
|
|
241
|
+
provide: NG_VALUE_ACCESSOR,
|
|
242
|
+
useExisting: forwardRef(() => MefDevSwitchComponent),
|
|
243
|
+
multi: true,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
234
246
|
// OnInit lifecycle hook
|
|
235
247
|
ngOnInit() {
|
|
236
248
|
this.setClassMap();
|
|
237
249
|
}
|
|
238
250
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MefDevSwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
239
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MefDevSwitchComponent, selector: "mefdev-switch", inputs: { Value: "Value", Size: "Size", Color: "Color", Disabled: "Disabled" }, outputs: { onChange: "onChange" }, host: { listeners: { "click": "onClick($event)" } }, providers: [
|
|
240
|
-
{
|
|
241
|
-
provide: NG_VALUE_ACCESSOR,
|
|
242
|
-
useExisting: forwardRef(() => MefDevSwitchComponent),
|
|
243
|
-
multi: true
|
|
244
|
-
}
|
|
245
|
-
], ngImport: i0, template: "<span [ngClass]=\"_classMap\" tabindex=\"0\">\r\n <span [ngClass]=\"_innerPrefixCls\">\r\n <ng-template [ngIf]=\"_checked\">\r\n <ng-content select=\"[checked]\"></ng-content>\r\n </ng-template>\r\n <ng-template [ngIf]=\"!_checked\">\r\n <ng-content select=\"[unchecked]\"></ng-content>\r\n </ng-template>\r\n </span>\r\n</span>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
251
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MefDevSwitchComponent, selector: "mefdev-switch", inputs: { Value: "Value", Size: "Size", Color: "Color", Disabled: "Disabled" }, outputs: { onChange: "onChange" }, host: { listeners: { "click": "onClick($event)" } }, providers: [MefDevSwitchComponent.switchValueAccessor()], ngImport: i0, template: "<span [ngClass]=\"_classMap\" tabindex=\"0\">\r\n <span [ngClass]=\"_innerPrefixCls\">\r\n <ng-template [ngIf]=\"_checked\">\r\n <ng-content select=\"[checked]\"></ng-content>\r\n </ng-template>\r\n <ng-template [ngIf]=\"!_checked\">\r\n <ng-content select=\"[unchecked]\"></ng-content>\r\n </ng-template>\r\n </span>\r\n</span>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
246
252
|
}
|
|
247
253
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MefDevSwitchComponent, decorators: [{
|
|
248
254
|
type: Component,
|
|
249
|
-
args: [{ selector: "mefdev-switch", encapsulation: ViewEncapsulation.None, providers: [
|
|
250
|
-
{
|
|
251
|
-
provide: NG_VALUE_ACCESSOR,
|
|
252
|
-
useExisting: forwardRef(() => MefDevSwitchComponent),
|
|
253
|
-
multi: true
|
|
254
|
-
}
|
|
255
|
-
], template: "<span [ngClass]=\"_classMap\" tabindex=\"0\">\r\n <span [ngClass]=\"_innerPrefixCls\">\r\n <ng-template [ngIf]=\"_checked\">\r\n <ng-content select=\"[checked]\"></ng-content>\r\n </ng-template>\r\n <ng-template [ngIf]=\"!_checked\">\r\n <ng-content select=\"[unchecked]\"></ng-content>\r\n </ng-template>\r\n </span>\r\n</span>" }]
|
|
255
|
+
args: [{ selector: "mefdev-switch", encapsulation: ViewEncapsulation.None, providers: [MefDevSwitchComponent.switchValueAccessor()], template: "<span [ngClass]=\"_classMap\" tabindex=\"0\">\r\n <span [ngClass]=\"_innerPrefixCls\">\r\n <ng-template [ngIf]=\"_checked\">\r\n <ng-content select=\"[checked]\"></ng-content>\r\n </ng-template>\r\n <ng-template [ngIf]=\"!_checked\">\r\n <ng-content select=\"[unchecked]\"></ng-content>\r\n </ng-template>\r\n </span>\r\n</span>\r\n" }]
|
|
256
256
|
}], propDecorators: {
|
|
257
257
|
/**
|
|
258
258
|
* Event emitted when the value of the switch changes.
|
|
@@ -290,4 +290,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
290
290
|
type: HostListener,
|
|
291
291
|
args: ["click", ["$event"]]
|
|
292
292
|
}] } });
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWtpdC1saWIvc3JjL2xpYi9wZy1jb21wb25lbnRzL3N3aXRjaC9zd2l0Y2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkta2l0LWxpYi9zcmMvbGliL3BnLWNvbXBvbmVudHMvc3dpdGNoL3N3aXRjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRzVDOzs7OztFQUtFO0FBYUYsTUFBTSxPQUFPLHFCQUFxQjtJQUMvQixvQkFBb0I7SUFDZCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzFCLFVBQVUsR0FBRyxlQUFlLENBQUM7SUFDN0IsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUNuQixlQUFlLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxTQUFTLENBQUM7SUFDOUMsU0FBUyxDQUFLO0lBQ2QsS0FBSyxDQUFTO0lBQ2QsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUVqQixpQkFBaUI7SUFDakIsdURBQXVEO0lBRXZEOzs7Ozs7Ozs7O0tBVUk7SUFDSixRQUFRLEdBQTZCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztJQUNoRCxTQUFTLEdBQWUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBRW5DLG1CQUFtQjtJQUVuQjs7Ozs7Ozs7OztLQVVJO0lBQ0gsSUFDRyxLQUFLLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEtB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Z05BUnRCO1lBQ1Y7Z0JBQ0MsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDcEQsS0FBSyxFQUFFLElBQUk7YUFDWDtTQUNELDBCQzdCRixrWUFTTzs7NEZEc0JNLHFCQUFxQjtrQkFaakMsU0FBUzsrQkFDQyxlQUFlLGlCQUNWLGlCQUFpQixDQUFDLElBQUksYUFFMUI7d0JBQ1Y7NEJBQ0MsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNYO3FCQUNEOztRQWVEOzs7Ozs7Ozs7O1NBVUk7UUFDSixRQUFRO3NCQVpQLE1BQU07Z0JBNkJILEtBQUs7c0JBRFAsS0FBSztnQkFpQkgsSUFBSTtzQkFEUCxLQUFLO2dCQWtCRixLQUFLO3NCQURSLEtBQUs7Z0JBaUNGLFFBQVE7c0JBRFgsS0FBSzs7UUF3Qk47Ozs7Ozs7OztTQVNJO1FBQ0osT0FBTztzQkFaTixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Zm9yd2FyZFJlZixcclxuXHRDb21wb25lbnQsXHJcblx0SG9zdExpc3RlbmVyLFxyXG5cdElucHV0LFxyXG5cdE9uSW5pdCxcclxuXHRWaWV3RW5jYXBzdWxhdGlvbixcclxuXHRPdXRwdXRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgdG9Cb29sZWFuIH0gZnJvbSBcIi4uL3V0aWwvY29udmVydFwiO1xyXG5cclxuXHJcbi8qKlxyXG4gICogQGNvbXBvbmVudFxyXG4gICogQHNraXBUZW1wbGF0ZURvYzogdHJ1ZVxyXG4gICogRXhhbXBsZSBvZiB1c2FnZTpcclxuICAqIDxleGFtcGxlLXVybD5odHRwczovL21lZi5kZXYvdWlfa2l0X2RlbW8vdmlldy9jb250cm9scy9zd2l0Y2g8L2V4YW1wbGUtdXJsPlxyXG4qL1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJtZWZkZXYtc3dpdGNoXCIsXHJcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuXHR0ZW1wbGF0ZVVybDogXCIuL3N3aXRjaC5jb21wb25lbnQuaHRtbFwiLFxyXG5cdHByb3ZpZGVyczogW1xyXG5cdFx0e1xyXG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuXHRcdFx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWVmRGV2U3dpdGNoQ29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWVcclxuXHRcdH1cclxuXHRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZWZEZXZTd2l0Y2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHQgIC8vIFByaXZhdGUgdmFyaWFibGVzXHJcblx0cHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuXHRfcHJlZml4Q2xzID0gXCJ0b2dnbGUtc3dpdGNoXCI7XHJcblx0X2NvbG9yID0gXCJwcmltYXJ5XCI7XHJcblx0X2lubmVyUHJlZml4Q2xzID0gYCR7dGhpcy5fcHJlZml4Q2xzfS1pbm5lciBgO1xyXG5cdF9jbGFzc01hcDphbnk7XHJcblx0X3NpemU6IHN0cmluZztcclxuXHRfY2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuXHQvLyBuZ01vZGVsIEFjY2Vzc1xyXG5cdC8vIE91dHB1dCBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgc3dpdGNoIHZhbHVlIGNoYW5nZXNcclxuXHRAT3V0cHV0KClcclxuXHQvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBzd2l0Y2ggY2hhbmdlcy5cclxuICAgKiBcclxuICAgKiBAb3V0cHV0XHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIHN3aXRjaC5cclxuICAgKiBcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIDxtZWZkZXYtc3dpdGNoIChvbkNoYW5nZSk9XCJoYW5kbGVTd2l0Y2hDaGFuZ2UoJGV2ZW50KVwiPjwvbWVmZGV2LXN3aXRjaD5cclxuICAgKiBgYGBcclxuICAgKi9cclxuXHRvbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkID0gKCkgPT4gbnVsbDtcclxuXHRvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiBudWxsO1xyXG5cclxuXHQvLyBJbnB1dCBwcm9wZXJ0aWVzXHJcblxyXG5cdC8qKlxyXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBzd2l0Y2guXHJcbiAgICogXHJcbiAgICogQGlucHV0XHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqIFxyXG4gICAqIFVzYWdlIGV4YW1wbGU6XHJcbiAgICogYGBgXHJcbiAgICogPG1lZmRldi1zd2l0Y2ggW1ZhbHVlXT1cInRydWVcIj48L21lZmRldi1zd2l0Y2g+XHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuXHRzZXQgVmFsdWUodmFsdWU6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcbiAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqIFxyXG4gICAqIEBpbnB1dFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc2l6ZSBvZiB0aGUgc3dpdGNoIChlLmcuLCBcInNtYWxsXCIsIFwibGFyZ2VcIikuXHJcbiAgICogXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiA8bWVmZGV2LXN3aXRjaCBbU2l6ZV09XCInc21hbGwnXCI+PC9tZWZkZXYtc3dpdGNoPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdEBJbnB1dCgpXHJcblx0c2V0IFNpemUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy5fc2l6ZSA9IHZhbHVlO1xyXG5cdFx0dGhpcy5zZXRDbGFzc01hcCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcbiAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHN3aXRjaC5cclxuICAgKiBcclxuICAgKiBAaW5wdXRcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGNvbG9yIG9mIHRoZSBzd2l0Y2ggKGUuZy4sIFwicHJpbWFyeVwiLCBcInNlY29uZGFyeVwiKS5cclxuICAgKiBcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIDxtZWZkZXYtc3dpdGNoIFtDb2xvcl09XCIncHJpbWFyeSdcIj48L21lZmRldi1zd2l0Y2g+XHJcbiAgICogYGBgXHJcbiAgICovXHJcblx0QElucHV0KClcclxuXHRzZXQgQ29sb3IodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy5fY29sb3IgPSB2YWx1ZTtcclxuXHRcdHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqIFxyXG4gICAqIEBpbnB1dFxyXG4gICAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBzd2l0Y2guXHJcbiAgICogXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiBjb25zdCBzaXplID0gbXlTd2l0Y2hDb21wb25lbnQuU2l6ZTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHRnZXQgU2l6ZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3NpemU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqIFxyXG4gICAqIEBpbnB1dFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHN3aXRjaC5cclxuICAgKiBcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIDxtZWZkZXYtc3dpdGNoIFtEaXNhYmxlZF09XCJ0cnVlXCI+PC9tZWZkZXYtc3dpdGNoPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdEBJbnB1dCgpXHJcblx0c2V0IERpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcblx0XHR0aGlzLl9kaXNhYmxlZCA9IHRvQm9vbGVhbih2YWx1ZSk7XHJcblx0XHR0aGlzLnNldENsYXNzTWFwKCk7XHJcblx0fVxyXG5cclxuXHQgIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHN3aXRjaC5cclxuICAgKiBcclxuICAgKiBAaW5wdXRcclxuICAgKiBAcmV0dXJucyBUaGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHN3aXRjaC5cclxuICAgKiBcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIGNvbnN0IGRpc2FibGVkID0gbXlTd2l0Y2hDb21wb25lbnQuRGlzYWJsZWQ7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblx0Z2V0IERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG5cdH1cclxuXHJcblx0ICAvLyBIb3N0IGxpc3RlbmVyIGZvciBjbGljayBldmVudFxyXG5cdEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiLCBbXCIkZXZlbnRcIl0pXHJcblxyXG5cdC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGNsaWNrIGV2ZW50IG9mIHRoZSBzd2l0Y2guXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGUgVGhlIGNsaWNrIGV2ZW50IG9iamVjdC5cclxuICAgKiBcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIDxtZWZkZXYtc3dpdGNoIChjbGljayk9XCJoYW5kbGVTd2l0Y2hDbGljaygkZXZlbnQpXCI+PC9tZWZkZXYtc3dpdGNoPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdG9uQ2xpY2soZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0aWYgKCF0aGlzLl9kaXNhYmxlZCkge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVZhbHVlKCF0aGlzLl9jaGVja2VkKTtcclxuXHRcdFx0dGhpcy5vbkNoYW5nZSh0aGlzLl9jaGVja2VkKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vIEhlbHBlciBmdW5jdGlvbnNcclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgdmFsdWUgb2YgdGhlIHN3aXRjaC5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqIFxyXG4gICAqIFVzYWdlIGV4YW1wbGU6XHJcbiAgICogYGBgXHJcbiAgICogdGhpcy51cGRhdGVWYWx1ZSh0cnVlKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHR1cGRhdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuX2NoZWNrZWQgPT09IHZhbHVlKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuX2NoZWNrZWQgPSB2YWx1ZTtcclxuXHRcdHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG4gICAqIFNldHMgdGhlIGNsYXNzIG1hcCBmb3IgdGhlIHN3aXRjaC5cclxuICAgKiBcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHRzZXRDbGFzc01hcCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuX2NsYXNzTWFwID0ge1xyXG5cdFx0XHRbdGhpcy5fcHJlZml4Q2xzXTogdHJ1ZSxcclxuXHRcdFx0W2Ake3RoaXMuX3ByZWZpeENsc30tY2hlY2tlZGBdOiB0aGlzLl9jaGVja2VkLFxyXG5cdFx0XHRbYCR7dGhpcy5fcHJlZml4Q2xzfS1kaXNhYmxlZGBdOiB0aGlzLl9kaXNhYmxlZCxcclxuXHRcdFx0W2Ake3RoaXMuX3ByZWZpeENsc30tc21hbGxgXTogdGhpcy5fc2l6ZSA9PT0gXCJzbWFsbFwiLFxyXG5cdFx0XHRbdGhpcy5fY29sb3JdOiB0aGlzLl9jb2xvclxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxyXG5cclxuICAvKipcclxuICAgKiBXcml0ZXMgYSBuZXcgdmFsdWUgdG8gdGhlIHN3aXRjaC5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqIFxyXG4gICAqIFVzYWdlIGV4YW1wbGU6XHJcbiAgICogYGBgXHJcbiAgICogdGhpcy53cml0ZVZhbHVlKHRydWUpO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcblx0XHR0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIHN3aXRjaCB2YWx1ZSBjaGFuZ2VzLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBmbiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXHJcbiAgICogXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiB0aGlzLnJlZ2lzdGVyT25DaGFuZ2UodmFsdWUgPT4ge1xyXG4gICAqICAgLy8gRG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldyB2YWx1ZVxyXG4gICAqIH0pO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBib29sZWFuKSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHR0aGlzLm9uQ2hhbmdlID0gZm47XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBzd2l0Y2ggaXMgdG91Y2hlZC5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gZm4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxyXG4gICAqIFxyXG4gICAqIFVzYWdlIGV4YW1wbGU6XHJcbiAgICogYGBgXHJcbiAgICogdGhpcy5yZWdpc3Rlck9uVG91Y2hlZCgoKSA9PiB7XHJcbiAgICogICAvLyBEbyBzb21ldGhpbmcgd2hlbiB0aGUgc3dpdGNoIGlzIHRvdWNoZWRcclxuICAgKiB9KTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG5cdFx0dGhpcy5vblRvdWNoZWQgPSBmbjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG4gICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBzd2l0Y2guXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlzRGlzYWJsZWQgVGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBzd2l0Y2guXHJcbiAgICogXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiB0aGlzLnNldERpc2FibGVkU3RhdGUodHJ1ZSk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblx0c2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcblx0XHR0aGlzLkRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuXHR9XHJcblxyXG5cdCAgLy8gT25Jbml0IGxpZmVjeWNsZSBob29rXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNldENsYXNzTWFwKCk7XHJcblx0fVxyXG59XHJcbiIsIjxzcGFuIFtuZ0NsYXNzXT1cIl9jbGFzc01hcFwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgPHNwYW4gW25nQ2xhc3NdPVwiX2lubmVyUHJlZml4Q2xzXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIl9jaGVja2VkXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjaGVja2VkXVwiPjwvbmctY29udGVudD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhX2NoZWNrZWRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3VuY2hlY2tlZF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvc3Bhbj5cclxuPC9zcGFuPiJdfQ==
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWtpdC1saWIvc3JjL2xpYi9wZy1jb21wb25lbnRzL3N3aXRjaC9zd2l0Y2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkta2l0LWxpYi9zcmMvbGliL3BnLWNvbXBvbmVudHMvc3dpdGNoL3N3aXRjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRTVDOzs7OztFQUtFO0FBV0YsTUFBTSxPQUFPLHFCQUFxQjtJQUMvQixvQkFBb0I7SUFDZCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzFCLFVBQVUsR0FBRyxlQUFlLENBQUM7SUFDN0IsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUNuQixlQUFlLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxTQUFTLENBQUM7SUFDOUMsU0FBUyxDQUFLO0lBQ2QsS0FBSyxDQUFTO0lBQ2QsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUVqQixpQkFBaUI7SUFDakIsdURBQXVEO0lBRXZEOzs7Ozs7Ozs7O0tBVUk7SUFDSixRQUFRLEdBQTZCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztJQUNoRCxTQUFTLEdBQWUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBRW5DLG1CQUFtQjtJQUVuQjs7Ozs7Ozs7OztLQVVJO0lBQ0gsSUFDRyxLQUFLLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEtB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QyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztZQUNwRCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUM7SUFDSixDQUFDO0lBRUEsd0JBQXdCO0lBQzFCLFFBQVE7UUFDUCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEIsQ0FBQzt3R0F6UVcscUJBQXFCOzRGQUFyQixxQkFBcUIsZ05BSHJCLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQywwQkN6QjFELHNZQVVBOzs0RkRrQmEscUJBQXFCO2tCQVZqQyxTQUFTOytCQUNDLGVBQWUsaUJBQ1YsaUJBQWlCLENBQUMsSUFBSSxhQUt6QixDQUFDLHNCQUFzQixtQkFBbUIsRUFBRSxDQUFDOztRQWdCekQ7Ozs7Ozs7Ozs7U0FVSTtRQUNKLFFBQVE7c0JBWlAsTUFBTTtnQkE2QkgsS0FBSztzQkFEUCxLQUFLO2dCQWlCSCxJQUFJO3NCQURQLEtBQUs7Z0JBa0JGLEtBQUs7c0JBRFIsS0FBSztnQkFpQ0YsUUFBUTtzQkFEWCxLQUFLOztRQXdCTjs7Ozs7Ozs7O1NBU0k7UUFDSixPQUFPO3NCQVpOLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRmb3J3YXJkUmVmLFxyXG5cdENvbXBvbmVudCxcclxuXHRIb3N0TGlzdGVuZXIsXHJcblx0SW5wdXQsXHJcblx0T25Jbml0LFxyXG5cdFZpZXdFbmNhcHN1bGF0aW9uLFxyXG5cdE91dHB1dFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyB0b0Jvb2xlYW4gfSBmcm9tIFwiLi4vdXRpbC9jb252ZXJ0XCI7XHJcblxyXG4vKipcclxuICAqIEBjb21wb25lbnRcclxuICAqIEBza2lwVGVtcGxhdGVEb2M6IHRydWVcclxuICAqIEV4YW1wbGUgb2YgdXNhZ2U6XHJcbiAgKiA8ZXhhbXBsZS11cmw+aHR0cHM6Ly9tZWYuZGV2L3VpX2tpdF9kZW1vL3ZpZXcvY29udHJvbHMvc3dpdGNoPC9leGFtcGxlLXVybD5cclxuKi9cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwibWVmZGV2LXN3aXRjaFwiLFxyXG5cdGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcblx0dGVtcGxhdGVVcmw6IFwiLi9zd2l0Y2guY29tcG9uZW50Lmh0bWxcIixcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJvdmlkZXJzOiBbTWVmRGV2U3dpdGNoQ29tcG9uZW50LnN3aXRjaFZhbHVlQWNjZXNzb3IoKV1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZWZEZXZTd2l0Y2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHQgIC8vIFByaXZhdGUgdmFyaWFibGVzXHJcblx0cHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuXHRfcHJlZml4Q2xzID0gXCJ0b2dnbGUtc3dpdGNoXCI7XHJcblx0X2NvbG9yID0gXCJwcmltYXJ5XCI7XHJcblx0X2lubmVyUHJlZml4Q2xzID0gYCR7dGhpcy5fcHJlZml4Q2xzfS1pbm5lciBgO1xyXG5cdF9jbGFzc01hcDphbnk7XHJcblx0X3NpemU6IHN0cmluZztcclxuXHRfY2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuXHQvLyBuZ01vZGVsIEFjY2Vzc1xyXG5cdC8vIE91dHB1dCBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgc3dpdGNoIHZhbHVlIGNoYW5nZXNcclxuXHRAT3V0cHV0KClcclxuXHQvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBzd2l0Y2ggY2hhbmdlcy5cclxuICAgKlxyXG4gICAqIEBvdXRwdXRcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiA8bWVmZGV2LXN3aXRjaCAob25DaGFuZ2UpPVwiaGFuZGxlU3dpdGNoQ2hhbmdlKCRldmVudClcIj48L21lZmRldi1zd2l0Y2g+XHJcbiAgICogYGBgXHJcbiAgICovXHJcblx0b25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCA9ICgpID0+IG51bGw7XHJcblx0b25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gbnVsbDtcclxuXHJcblx0Ly8gSW5wdXQgcHJvcGVydGllc1xyXG5cclxuXHQvKipcclxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqXHJcbiAgICogQGlucHV0XHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiA8bWVmZGV2LXN3aXRjaCBbVmFsdWVdPVwidHJ1ZVwiPjwvbWVmZGV2LXN3aXRjaD5cclxuICAgKiBgYGBcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG5cdHNldCBWYWx1ZSh2YWx1ZTogYm9vbGVhbikge1xyXG5cdFx0dGhpcy51cGRhdGVWYWx1ZSh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAgKiBTZXRzIHRoZSBzaXplIG9mIHRoZSBzd2l0Y2guXHJcbiAgICpcclxuICAgKiBAaW5wdXRcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHNpemUgb2YgdGhlIHN3aXRjaCAoZS5nLiwgXCJzbWFsbFwiLCBcImxhcmdlXCIpLlxyXG4gICAqXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiA8bWVmZGV2LXN3aXRjaCBbU2l6ZV09XCInc21hbGwnXCI+PC9tZWZkZXYtc3dpdGNoPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdEBJbnB1dCgpXHJcblx0c2V0IFNpemUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy5fc2l6ZSA9IHZhbHVlO1xyXG5cdFx0dGhpcy5zZXRDbGFzc01hcCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcbiAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHN3aXRjaC5cclxuICAgKlxyXG4gICAqIEBpbnB1dFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgY29sb3Igb2YgdGhlIHN3aXRjaCAoZS5nLiwgXCJwcmltYXJ5XCIsIFwic2Vjb25kYXJ5XCIpLlxyXG4gICAqXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiA8bWVmZGV2LXN3aXRjaCBbQ29sb3JdPVwiJ3ByaW1hcnknXCI+PC9tZWZkZXYtc3dpdGNoPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdEBJbnB1dCgpXHJcblx0c2V0IENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuX2NvbG9yID0gdmFsdWU7XHJcblx0XHR0aGlzLnNldENsYXNzTWFwKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIHN3aXRjaC5cclxuICAgKlxyXG4gICAqIEBpbnB1dFxyXG4gICAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBzd2l0Y2guXHJcbiAgICpcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIGNvbnN0IHNpemUgPSBteVN3aXRjaENvbXBvbmVudC5TaXplO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdGdldCBTaXplKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5fc2l6ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG4gICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBzd2l0Y2guXHJcbiAgICpcclxuICAgKiBAaW5wdXRcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBzd2l0Y2guXHJcbiAgICpcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIDxtZWZkZXYtc3dpdGNoIFtEaXNhYmxlZF09XCJ0cnVlXCI+PC9tZWZkZXYtc3dpdGNoPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdEBJbnB1dCgpXHJcblx0c2V0IERpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcblx0XHR0aGlzLl9kaXNhYmxlZCA9IHRvQm9vbGVhbih2YWx1ZSk7XHJcblx0XHR0aGlzLnNldENsYXNzTWFwKCk7XHJcblx0fVxyXG5cclxuXHQgIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHN3aXRjaC5cclxuICAgKlxyXG4gICAqIEBpbnB1dFxyXG4gICAqIEByZXR1cm5zIFRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiBjb25zdCBkaXNhYmxlZCA9IG15U3dpdGNoQ29tcG9uZW50LkRpc2FibGVkO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdGdldCBEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuXHR9XHJcblxyXG5cdCAgLy8gSG9zdCBsaXN0ZW5lciBmb3IgY2xpY2sgZXZlbnRcclxuXHRASG9zdExpc3RlbmVyKFwiY2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxyXG5cclxuXHQvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjbGljayBldmVudCBvZiB0aGUgc3dpdGNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGUgVGhlIGNsaWNrIGV2ZW50IG9iamVjdC5cclxuICAgKlxyXG4gICAqIFVzYWdlIGV4YW1wbGU6XHJcbiAgICogYGBgXHJcbiAgICogPG1lZmRldi1zd2l0Y2ggKGNsaWNrKT1cImhhbmRsZVN3aXRjaENsaWNrKCRldmVudClcIj48L21lZmRldi1zd2l0Y2g+XHJcbiAgICogYGBgXHJcbiAgICovXHJcblx0b25DbGljayhlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRpZiAoIXRoaXMuX2Rpc2FibGVkKSB7XHJcblx0XHRcdHRoaXMudXBkYXRlVmFsdWUoIXRoaXMuX2NoZWNrZWQpO1xyXG5cdFx0XHR0aGlzLm9uQ2hhbmdlKHRoaXMuX2NoZWNrZWQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdC8vIEhlbHBlciBmdW5jdGlvbnNcclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgdmFsdWUgb2YgdGhlIHN3aXRjaC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBzd2l0Y2guXHJcbiAgICpcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIHRoaXMudXBkYXRlVmFsdWUodHJ1ZSk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblx0dXBkYXRlVmFsdWUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLl9jaGVja2VkID09PSB2YWx1ZSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLl9jaGVja2VkID0gdmFsdWU7XHJcblx0XHR0aGlzLnNldENsYXNzTWFwKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAgKiBTZXRzIHRoZSBjbGFzcyBtYXAgZm9yIHRoZSBzd2l0Y2guXHJcbiAgICpcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHRzZXRDbGFzc01hcCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuX2NsYXNzTWFwID0ge1xyXG5cdFx0XHRbdGhpcy5fcHJlZml4Q2xzXTogdHJ1ZSxcclxuXHRcdFx0W2Ake3RoaXMuX3ByZWZpeENsc30tY2hlY2tlZGBdOiB0aGlzLl9jaGVja2VkLFxyXG5cdFx0XHRbYCR7dGhpcy5fcHJlZml4Q2xzfS1kaXNhYmxlZGBdOiB0aGlzLl9kaXNhYmxlZCxcclxuXHRcdFx0W2Ake3RoaXMuX3ByZWZpeENsc30tc21hbGxgXTogdGhpcy5fc2l6ZSA9PT0gXCJzbWFsbFwiLFxyXG5cdFx0XHRbdGhpcy5fY29sb3JdOiB0aGlzLl9jb2xvclxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cclxuXHQvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cclxuXHJcbiAgLyoqXHJcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBzd2l0Y2guXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiB0aGlzLndyaXRlVmFsdWUodHJ1ZSk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblx0cHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgc3dpdGNoIHZhbHVlIGNoYW5nZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZm4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogVXNhZ2UgZXhhbXBsZTpcclxuICAgKiBgYGBcclxuICAgKiB0aGlzLnJlZ2lzdGVyT25DaGFuZ2UodmFsdWUgPT4ge1xyXG4gICAqICAgLy8gRG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldyB2YWx1ZVxyXG4gICAqIH0pO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBib29sZWFuKSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHR0aGlzLm9uQ2hhbmdlID0gZm47XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBzd2l0Y2ggaXMgdG91Y2hlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBmbiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXHJcbiAgICpcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIHRoaXMucmVnaXN0ZXJPblRvdWNoZWQoKCkgPT4ge1xyXG4gICAqICAgLy8gRG8gc29tZXRoaW5nIHdoZW4gdGhlIHN3aXRjaCBpcyB0b3VjaGVkXHJcbiAgICogfSk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuXHRcdHRoaXMub25Ub3VjaGVkID0gZm47XHJcblx0fVxyXG5cclxuXHQvKipcclxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgc3dpdGNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlzRGlzYWJsZWQgVGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBzd2l0Y2guXHJcbiAgICpcclxuICAgKiBVc2FnZSBleGFtcGxlOlxyXG4gICAqIGBgYFxyXG4gICAqIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh0cnVlKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHRzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdHRoaXMuRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG5cdH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSB2YWx1ZSBhY2Nlc3NvciBwcm92aWRlciBjb25maWd1cmF0aW9uIGZvciB0aGUgc3dpdGNoIGNvbXBvbmVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBmbiBUaGUgdmFsdWUgYWNjZXNzb3IgcHJvdmlkZXIuXHJcbiAgICovXHJcbiAgc3RhdGljIHN3aXRjaFZhbHVlQWNjZXNzb3IoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNZWZEZXZTd2l0Y2hDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuXHQgIC8vIE9uSW5pdCBsaWZlY3ljbGUgaG9va1xyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXRDbGFzc01hcCgpO1xyXG5cdH1cclxufVxyXG4iLCI8c3BhbiBbbmdDbGFzc109XCJfY2xhc3NNYXBcIiB0YWJpbmRleD1cIjBcIj5cclxuICAgIDxzcGFuIFtuZ0NsYXNzXT1cIl9pbm5lclByZWZpeENsc1wiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJfY2hlY2tlZFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2hlY2tlZF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIV9jaGVja2VkXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt1bmNoZWNrZWRdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3NwYW4+XHJcbjwvc3Bhbj5cclxuIl19
|