sf-crud 12.2.0 → 12.3.1

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.
@@ -362,7 +362,7 @@ export class ControlComponent {
362
362
  }
363
363
  }
364
364
  ControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ControlComponent, deps: [{ token: i1.GeneralService }, { token: i2.SfCrudService }, { token: i0.ChangeDetectorRef }, { token: i3.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
365
- ControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ControlComponent, selector: "sf-control", inputs: { showTempValue: "showTempValue", control: "control", label: "label", value: "value", appendTo: "appendTo" }, outputs: { setValue: "setValue", sendObject: "sendObject", addressClicked: "addressClicked" }, viewQueries: [{ propertyName: "tooltips", predicate: Tooltip, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"showTempValue\"><p *ngIf=\"tempValue\">{{tempValue[control.field]}}</p></ng-container>\r\n\r\n<div *ngIf=\"!showTempValue\" [ngSwitch]=\"control.type\" #cc class=\"control-container\">\r\n <div class=\"label-container\">\r\n <label [for]=\"label\">{{label}}</label>\r\n <i #tooltip *ngIf=\"control.tooltip\" class=\"pi pi-question-circle\"\r\n [tooltipPosition]=\"control.tooltipPosition || 'top'\" [pTooltip]=\"control.tooltip\"\r\n (touchstart)=\"onTouchDescription()\" (touchend)=\"onUnTouchDescription()\"></i>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'string'\" >\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'input'\">\r\n <input pInputText [name]=\"label\" type=\"text\" [(ngModel)]=\"value\" (input)=\"sendValue()\"\r\n [disabled]=\"control.disabled || false\" [autocomplete]=\"control.autocomplete || 'off'\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [rows]=\"control.config?.rows ? control.config.rows : 4\" [(ngModel)]=\"value\"\r\n (input)=\"sendValue()\" pInputTextarea [disabled]=\"control.config?.disabled || false\"\r\n [autoResize]=\"control.config?.autoresize || false\"></textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'password'\">\r\n <input pInputText type=\"password\" [(ngModel)]=\"value\" (input)=\"sendValue()\"\r\n [disabled]=\"control.disabled || false\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'email'\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"value\" placeholder=\"email@example.com\"\r\n [disabled]=\"control.disabled || false\" autocomplete=\"email\" (input)=\"onInputEmail(false)\"\r\n (focusout)=\"onInputEmail(true)\" (keyup.enter)=\"doFocusOut()\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'phone'\">\r\n <p-inputMask mask=\"(999) 999-9999\" [(ngModel)]=\"value\" placeholder=\"(999) 999-9999\"\r\n [disabled]=\"control.disabled || false\" autocomplete=\"tel-national\"\r\n [unmask]=\"control.unmask || false\" (onComplete)=\"sendValue()\"></p-inputMask>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <input pInputText type=\"text\" [value]=\"value | formatAddress: control.separador\" autocomplete=\"off\" [disabled]=\"clicked\" (click)=\"onClickedAddres()\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'enum'\">\r\n <p-dropdown [options]=\"control.enum\" [(ngModel)]=\"value\" (onChange)=\"sendValue()\" appendTo=\"body\"\r\n placeholder=\"Seleccione una opci\u00F3n\" [disabled]=\"control.disabled || false\"></p-dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <p-dropdown [lazy]=\"isLoading\" [options]=\"dataFromService\" [(ngModel)]=\"value\" (onChange)=\"sendValue()\"\r\n [optionLabel]=\"control.config.optionLabel\" [showClear]=\"control.config.showClear\"\r\n [optionValue]=\"control.field || control.config.optionValue\" appendTo=\"body\"\r\n placeholder=\"Seleccione una opci\u00F3n\" [disabled]=\"control.disabled || false\"></p-dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown:replace'\">\r\n <p-dropdown [lazy]=\"isLoading\" [options]=\"dataFromService\"\r\n (onChange)=\"sendValueFromObject($event)\" [optionLabel]=\"control.config.optionLabel\"\r\n appendTo=\"body\" placeholder=\"Seleccione una opci\u00F3n\"\r\n [disabled]=\"control.disabled || false\"></p-dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete'\">\r\n <p-autoComplete [showEmptyMessage]=\"true\" [suggestions]=\"dataFromService\" appendTo=\"body\"\r\n (completeMethod)=\"loadDataFromControlBusquedaService($event)\" [field]=\"control.field\"\r\n [minLength]=\"1\" (onSelect)=\"sendValueFromObject($event)\" [(ngModel)]=\"tempValue\"\r\n [disabled]=\"control.disabled || false\"></p-autoComplete>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'input:search'\">\r\n <div class=\"p-inputgroup\">\r\n <input type=\"text\" pInputText [(ngModel)]=\"value\" (focusout)=\"sendValue()\"\r\n (keyup.enter)=\"doFocusOut()\" />\r\n <button type=\"button\" pButton icon=\"pi pi-search\" (click)=\"searchValue(value)\"></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <sf-file-upload *ngIf=\"!isLoading\" [accept]=\"control.config?.accept || 'image/*,application/pdf'\"\r\n [loading]=\"uploadingFiles\" [files]=\"uploadedFiles\" [configName]=\"control.config?.configName\"\r\n [limit]=\"control.config?.limit || 1\" (onUpload)=\"onUpload($event)\"\r\n (onDeleteFile)=\"onDeleteFile($event)\"></sf-file-upload>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-inputgroup\">\r\n <p-inputMask [(ngModel)]=\"tempValue\" mask=\"99/99/9999\" [placeholder]=\"control.placeholder\"\r\n (onComplete)=\"onChangeSDate()\" [disabled]=\"control.disabled || false\"></p-inputMask>\r\n <p-calendar [(ngModel)]=\"value\" class=\"only-icon\" [monthNavigator]=\"true\" [yearNavigator]=\"true\" yearRange=\"1900:2035\"\r\n [dateFormat]=\"control.format || 'yy-mm-dd'\" appendTo=\"body\" [disabled]=\"control.disabled || false\"\r\n [showOnFocus]=\"!control.hide\" [placeholder]=\"control.placeholder || 'aaaa-mm-dd'\"\r\n [touchUI]=\"control.touchUI || false\" [showIcon]=\"control.showIcon || false\" (onSelect)=\"onChangeDate()\"\r\n (onBlur)=\"onChangeDate()\"></p-calendar>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'numeric'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <p-inputNumber [ngModel]=\"value\" (ngModelChange)=\"value = $event; sendValue()\" mode=\"decimal\" [minFractionDigits]=\"control.minFractionDigits || 0\"\r\n [min]=\"control.min || null\" [max]=\"control.max || null\" (onInput)=\"sendNumberValue($event)\"\r\n [prefix]=\"control.currency || '$ '\" [disabled]=\"control.disabled || false\"></p-inputNumber>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal'\">\r\n <p-inputNumber [ngModel]=\"value\" mode=\"decimal\" (ngModelChange)=\"value = $event; sendValue()\" [min]=\"control.min || null\"\r\n [max]=\"control.max || null\" [minFractionDigits]=\"control.minFractionDigits || 0\"\r\n [locale]=\"control.locale || undefined\" [useGrouping]=\"control.useGrouping || false\"\r\n [disabled]=\"control.disabled || false\"></p-inputNumber>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'percentage'\">\r\n <p-inputNumber [ngModel]=\"value\" suffix=\" %\" (ngModelChange)=\"value = $event; sendValue()\" (onInput)=\"sendValue()\" [min]=\"control.min || null\"\r\n [max]=\"control.max || null\" [minFractionDigits]=\"control.minFractionDigits || 2\"\r\n [locale]=\"control.locale || undefined\" [disabled]=\"control.disabled || false\"></p-inputNumber>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal:search'\">\r\n <div class=\"p-inputgroup\">\r\n <input type=\"number\" pInputText [(ngModel)]=\"value\" (focusout)=\"sendValue()\"\r\n (keyup.enter)=\"doFocusOut()\" />\r\n <button type=\"button\" pButton icon=\"pi pi-search\" (click)=\"searchValue(value)\"></button>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'array'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <sf-file-upload *ngIf=\"!isLoading\" [loading]=\"uploadingFiles\" [files]=\"uploadedFiles\"\r\n [configName]=\"control.config?.configName\" [limit]=\"control.config?.limit || 1\"\r\n [accept]=\"control.config?.accept || 'image/*,application/pdf'\" (onUpload)=\"onUpload($event)\"\r\n (onDeleteFile)=\"onDeleteFile($event)\"></sf-file-upload>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'multiselect'\">\r\n <p-multiSelect [options]=\"dataFromService\" [(ngModel)]=\"value\" (onChange)=\"sendValue()\"\r\n [optionLabel]=\"control.config?.optionLabel\" [optionValue]=\"control.config?.optionValue\"\r\n [placeholder]=\"control.config?.placeholder\"\r\n [display]=\"control.config?.display || 'chip'\"></p-multiSelect>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <p-inputSwitch [(ngModel)]=\"tempValue\" (onChange)=\"onChangeSwitch()\" [id]=\"label\"\r\n [trueValue]=\"control?.trueValue !== undefined ? control?.trueValue: null\"\r\n [falseValue]=\"control?.falseValue !== undefined ? control?.falseValue: null\"></p-inputSwitch>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n", styles: ["::ng-deep .label-container{& label{margin-right:10px;color:#55585b;font-size:17px}& i{font-size:1.1rem}}::ng-deep .p-tooltip{max-width:15rem;font-size:.85rem;text-align:center}.control-container ::ng-deep .p-button:hover{background:var(--secondary-color)!important;border-color:var(--secondary-color)!important;filter:brightness(85%)}.control-container ::ng-deep .p-component,.control-container ::ng-deep .p-component *{border-radius:6px}.control-container ::ng-deep .p-inputtext{font-size:17px;border:1px solid #d1d5db;border-radius:6px}.control-container ::ng-deep .p-inputtext:focus,.control-container ::ng-deep .p-inputtext:active,.control-container ::ng-deep .p-inputwrapper:focus,.control-container ::ng-deep .p-inputwrapper:active{border-color:var(--button-color)}.control-container ::ng-deep .p-inputtext:enabled:focus{border-color:var(--secondary-color)!important;box-shadow:inset 0 0 0 1px #fff}.control-container ::ng-deep input.p-inputtext::placeholder{color:#6b7280;font-family:sans-serif;font-size:18px}.control-container ::ng-deep .p-dropdown{background:#ffffff;border:1px solid #d1d5db;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:6px}.control-container ::ng-deep .p-dropdown:not(.p-disabled):hover{border-color:var(--secondary-color)!important}.control-container ::ng-deep .p-dropdown:not(.p-disabled).p-focus{border-color:var(--secondary-color)!important;box-shadow:inset 0 0 0 1px #fff}.control-container ::ng-deep .p-dropdown .p-inputtext{border:none}.control-container ::ng-deep .p-dropdown .p-dropdown-label.p-placeholder{font-family:sans-serif;color:#6b7280}.control-container ::ng-deep .p-button.p-button-danger,.control-container ::ng-deep .p-buttonset.p-button-danger>.p-button,.control-container ::ng-deep .p-splitbutton.p-button-danger>.p-button{border-color:var(--secondary-color)!important;background:var(--secondary-color)!important}.control-container ::ng-deep .p-inputgroup button:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.control-container ::ng-deep .p-inputgroup input:last-child{border-top-right-radius:0;border-bottom-right-radius:0}.control-container ::ng-deep .p-inputgroup input:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.control-container ::ng-deep .p-datepicker-touch-ui .p-datepicker-title{padding:3px}.control-container ::ng-deep .p-datepicker-month,.control-container ::ng-deep .p-datepicker-month:focus,.control-container ::ng-deep .p-datepicker-year:focus,.control-container ::ng-deep .p-datepicker-year{border:none}.p-inputgroup{& p-calendar{display:contents;& input{display:none}& .p-button-icon-only{border-top-left-radius:0;border-bottom-left-radius:0}}& p-inputMask{display:contents;& ::ng-deep input{border-top-right-radius:0;border-bottom-right-radius:0}}}@media (max-width <=768px){:host{font-size:14px}}\n"], components: [{ type: i4.InputMask, selector: "p-inputMask", inputs: ["type", "slotChar", "autoClear", "style", "inputId", "styleClass", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "disabled", "readonly", "unmask", "name", "required", "characterPattern", "autoFocus", "autocomplete", "mask"], outputs: ["onComplete", "onFocus", "onBlur", "onInput", "onKeydown"] }, { type: i5.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "virtualScroll", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide"] }, { type: i6.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "virtualScroll", "itemSize", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "field", "scrollHeight", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide"] }, { type: i7.FileUploadComponent, selector: "sf-file-upload", inputs: ["limit", "files", "loading", "configName", "accept"], outputs: ["onUpload", "onDeleteFile"] }, { type: i8.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "numberOfMonths", "view", "touchUI", "timeSeparator", "focusTrap", "firstDayOfWeek", "showTransitionOptions", "hideTransitionOptions", "tabindex", "defaultDate", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "locale"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { type: i9.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "step", "inputStyle", "inputStyleClass", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown"] }, { type: i10.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "autoZIndex", "baseZIndex", "filterBy", "virtualScroll", "itemSize", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "scrollHeight", "defaultLabel", "placeholder", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onPanelShow", "onPanelHide"] }, { type: i11.InputSwitch, selector: "p-inputSwitch", inputs: ["style", "styleClass", "tabindex", "inputId", "name", "disabled", "readonly", "ariaLabelledBy"], outputs: ["onChange"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i12.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i15.InputText, selector: "[pInputText]" }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i16.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize"], outputs: ["onResize"] }, { type: i17.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i14.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }], pipes: { "formatAddress": i18.FormatAddressPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
365
+ ControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ControlComponent, selector: "sf-control", inputs: { showTempValue: "showTempValue", control: "control", label: "label", value: "value", appendTo: "appendTo" }, outputs: { setValue: "setValue", sendObject: "sendObject", addressClicked: "addressClicked" }, viewQueries: [{ propertyName: "tooltips", predicate: Tooltip, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"showTempValue\"><p *ngIf=\"tempValue\">{{tempValue[control.field]}}</p></ng-container>\r\n\r\n<div *ngIf=\"!showTempValue\" [ngSwitch]=\"control.type\" #cc class=\"control-container\">\r\n <div class=\"label-container\">\r\n <label [for]=\"label\">{{label}}</label>\r\n <i #tooltip *ngIf=\"control.tooltip\" class=\"pi pi-question-circle\"\r\n [tooltipPosition]=\"control.tooltipPosition || 'top'\" [pTooltip]=\"control.tooltip\"\r\n (touchstart)=\"onTouchDescription()\" (touchend)=\"onUnTouchDescription()\"></i>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'string'\" >\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'input'\">\r\n <input pInputText [name]=\"label\" type=\"text\" [(ngModel)]=\"value\" (input)=\"sendValue()\"\r\n [disabled]=\"control.disabled || false\" [autocomplete]=\"control.autocomplete || 'off'\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [rows]=\"control.config?.rows ? control.config.rows : 4\" [(ngModel)]=\"value\"\r\n (input)=\"sendValue()\" pInputTextarea [disabled]=\"control.config?.disabled || false\"\r\n [autoResize]=\"control.config?.autoresize || false\"></textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'password'\">\r\n <input pInputText type=\"password\" [(ngModel)]=\"value\" (input)=\"sendValue()\"\r\n [disabled]=\"control.disabled || false\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'email'\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"value\" placeholder=\"email@example.com\"\r\n [disabled]=\"control.disabled || false\" autocomplete=\"email\" (input)=\"onInputEmail(false)\"\r\n (focusout)=\"onInputEmail(true)\" (keyup.enter)=\"doFocusOut()\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'phone'\">\r\n <p-inputMask mask=\"(999) 999-9999\" [(ngModel)]=\"value\" placeholder=\"(999) 999-9999\"\r\n [disabled]=\"control.disabled || false\" autocomplete=\"tel-national\"\r\n [unmask]=\"control.unmask || false\" (onComplete)=\"sendValue()\"></p-inputMask>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <input pInputText type=\"text\" [value]=\"value | formatAddress: control.separador\" autocomplete=\"off\" [disabled]=\"clicked\" (keydown)=\"onClickedAddres()\" (focus)=\"onClickedAddres()\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'enum'\">\r\n <p-dropdown [options]=\"control.enum\" [(ngModel)]=\"value\" (onChange)=\"sendValue()\" appendTo=\"body\"\r\n placeholder=\"Seleccione una opci\u00F3n\" [disabled]=\"control.disabled || false\"></p-dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <p-dropdown [lazy]=\"isLoading\" [options]=\"dataFromService\" [(ngModel)]=\"value\" (onChange)=\"sendValue()\"\r\n [optionLabel]=\"control.config.optionLabel\" [showClear]=\"control.config.showClear\"\r\n [optionValue]=\"control.field || control.config.optionValue\" appendTo=\"body\"\r\n placeholder=\"Seleccione una opci\u00F3n\" [disabled]=\"control.disabled || false\"></p-dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown:replace'\">\r\n <p-dropdown [lazy]=\"isLoading\" [options]=\"dataFromService\"\r\n (onChange)=\"sendValueFromObject($event)\" [optionLabel]=\"control.config.optionLabel\"\r\n appendTo=\"body\" placeholder=\"Seleccione una opci\u00F3n\"\r\n [disabled]=\"control.disabled || false\"></p-dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete'\">\r\n <p-autoComplete [showEmptyMessage]=\"true\" [suggestions]=\"dataFromService\" appendTo=\"body\"\r\n (completeMethod)=\"loadDataFromControlBusquedaService($event)\" [field]=\"control.field\"\r\n [minLength]=\"1\" (onSelect)=\"sendValueFromObject($event)\" [(ngModel)]=\"tempValue\"\r\n [disabled]=\"control.disabled || false\"></p-autoComplete>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'input:search'\">\r\n <div class=\"p-inputgroup\">\r\n <input type=\"text\" pInputText [(ngModel)]=\"value\" (focusout)=\"sendValue()\"\r\n (keyup.enter)=\"doFocusOut()\" />\r\n <button type=\"button\" pButton icon=\"pi pi-search\" (click)=\"searchValue(value)\"></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <sf-file-upload *ngIf=\"!isLoading\" [accept]=\"control.config?.accept || 'image/*,application/pdf'\"\r\n [loading]=\"uploadingFiles\" [files]=\"uploadedFiles\" [configName]=\"control.config?.configName\"\r\n [limit]=\"control.config?.limit || 1\" (onUpload)=\"onUpload($event)\"\r\n (onDeleteFile)=\"onDeleteFile($event)\"></sf-file-upload>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-inputgroup\">\r\n <p-inputMask [(ngModel)]=\"tempValue\" mask=\"99/99/9999\" [placeholder]=\"control.placeholder\"\r\n (onComplete)=\"onChangeSDate()\" [disabled]=\"control.disabled || false\"></p-inputMask>\r\n <p-calendar [(ngModel)]=\"value\" class=\"only-icon\" [monthNavigator]=\"true\" [yearNavigator]=\"true\" yearRange=\"1900:2035\"\r\n [dateFormat]=\"control.format || 'yy-mm-dd'\" appendTo=\"body\" [disabled]=\"control.disabled || false\"\r\n [showOnFocus]=\"!control.hide\" [placeholder]=\"control.placeholder || 'aaaa-mm-dd'\"\r\n [touchUI]=\"control.touchUI || false\" [showIcon]=\"control.showIcon || false\" (onSelect)=\"onChangeDate()\"\r\n (onBlur)=\"onChangeDate()\"></p-calendar>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'numeric'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <p-inputNumber [ngModel]=\"value\" (ngModelChange)=\"value = $event; sendValue()\" mode=\"decimal\" [minFractionDigits]=\"control.minFractionDigits || 0\"\r\n [min]=\"control.min || null\" [max]=\"control.max || null\" (onInput)=\"sendNumberValue($event)\"\r\n [prefix]=\"control.currency || '$ '\" [disabled]=\"control.disabled || false\"></p-inputNumber>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal'\">\r\n <p-inputNumber [ngModel]=\"value\" mode=\"decimal\" (ngModelChange)=\"value = $event; sendValue()\" [min]=\"control.min || null\"\r\n [max]=\"control.max || null\" [minFractionDigits]=\"control.minFractionDigits || 0\"\r\n [locale]=\"control.locale || undefined\" [useGrouping]=\"control.useGrouping || false\"\r\n [disabled]=\"control.disabled || false\"></p-inputNumber>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'percentage'\">\r\n <p-inputNumber [ngModel]=\"value\" suffix=\" %\" (ngModelChange)=\"value = $event; sendValue()\" (onInput)=\"sendValue()\" [min]=\"control.min || null\"\r\n [max]=\"control.max || null\" [minFractionDigits]=\"control.minFractionDigits || 2\"\r\n [locale]=\"control.locale || undefined\" [disabled]=\"control.disabled || false\"></p-inputNumber>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal:search'\">\r\n <div class=\"p-inputgroup\">\r\n <input type=\"number\" pInputText [(ngModel)]=\"value\" (focusout)=\"sendValue()\"\r\n (keyup.enter)=\"doFocusOut()\" />\r\n <button type=\"button\" pButton icon=\"pi pi-search\" (click)=\"searchValue(value)\"></button>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'array'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <sf-file-upload *ngIf=\"!isLoading\" [loading]=\"uploadingFiles\" [files]=\"uploadedFiles\"\r\n [configName]=\"control.config?.configName\" [limit]=\"control.config?.limit || 1\"\r\n [accept]=\"control.config?.accept || 'image/*,application/pdf'\" (onUpload)=\"onUpload($event)\"\r\n (onDeleteFile)=\"onDeleteFile($event)\"></sf-file-upload>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'multiselect'\">\r\n <p-multiSelect [options]=\"dataFromService\" [(ngModel)]=\"value\" (onChange)=\"sendValue()\"\r\n [optionLabel]=\"control.config?.optionLabel\" [optionValue]=\"control.config?.optionValue\"\r\n [placeholder]=\"control.config?.placeholder\"\r\n [display]=\"control.config?.display || 'chip'\"></p-multiSelect>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <p-inputSwitch [(ngModel)]=\"tempValue\" (onChange)=\"onChangeSwitch()\" [id]=\"label\"\r\n [trueValue]=\"control?.trueValue !== undefined ? control?.trueValue: null\"\r\n [falseValue]=\"control?.falseValue !== undefined ? control?.falseValue: null\"></p-inputSwitch>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n", styles: ["::ng-deep .label-container{& label{margin-right:10px;color:#55585b;font-size:17px}& i{font-size:1.1rem}}::ng-deep .p-tooltip{max-width:15rem;font-size:.85rem;text-align:center}.control-container ::ng-deep .p-button:hover{background:var(--secondary-color)!important;border-color:var(--secondary-color)!important;filter:brightness(85%)}.control-container ::ng-deep .p-component,.control-container ::ng-deep .p-component *{border-radius:6px}.control-container ::ng-deep .p-inputtext{font-size:17px;border:1px solid #d1d5db;border-radius:6px}.control-container ::ng-deep .p-inputtext:focus,.control-container ::ng-deep .p-inputtext:active,.control-container ::ng-deep .p-inputwrapper:focus,.control-container ::ng-deep .p-inputwrapper:active{border-color:var(--button-color)}.control-container ::ng-deep .p-inputtext:enabled:focus{border-color:var(--secondary-color)!important;box-shadow:inset 0 0 0 1px #fff}.control-container ::ng-deep input.p-inputtext::placeholder{color:#6b7280;font-family:sans-serif;font-size:18px}.control-container ::ng-deep .p-dropdown{background:#ffffff;border:1px solid #d1d5db;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:6px}.control-container ::ng-deep .p-dropdown:not(.p-disabled):hover{border-color:var(--secondary-color)!important}.control-container ::ng-deep .p-dropdown:not(.p-disabled).p-focus{border-color:var(--secondary-color)!important;box-shadow:inset 0 0 0 1px #fff}.control-container ::ng-deep .p-dropdown .p-inputtext{border:none}.control-container ::ng-deep .p-dropdown .p-dropdown-label.p-placeholder{font-family:sans-serif;color:#6b7280}.control-container ::ng-deep .p-button.p-button-danger,.control-container ::ng-deep .p-buttonset.p-button-danger>.p-button,.control-container ::ng-deep .p-splitbutton.p-button-danger>.p-button{border-color:var(--secondary-color)!important;background:var(--secondary-color)!important}.control-container ::ng-deep .p-inputgroup button:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.control-container ::ng-deep .p-inputgroup input:last-child{border-top-right-radius:0;border-bottom-right-radius:0}.control-container ::ng-deep .p-inputgroup input:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.control-container ::ng-deep .p-datepicker-touch-ui .p-datepicker-title{padding:3px}.control-container ::ng-deep .p-datepicker-month,.control-container ::ng-deep .p-datepicker-month:focus,.control-container ::ng-deep .p-datepicker-year:focus,.control-container ::ng-deep .p-datepicker-year{border:none}.p-inputgroup{& p-calendar{display:contents;& input{display:none}& .p-button-icon-only{border-top-left-radius:0;border-bottom-left-radius:0}}& p-inputMask{display:contents;& ::ng-deep input{border-top-right-radius:0;border-bottom-right-radius:0}}}@media (max-width <=768px){:host{font-size:14px}}\n"], components: [{ type: i4.InputMask, selector: "p-inputMask", inputs: ["type", "slotChar", "autoClear", "style", "inputId", "styleClass", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "disabled", "readonly", "unmask", "name", "required", "characterPattern", "autoFocus", "autocomplete", "mask"], outputs: ["onComplete", "onFocus", "onBlur", "onInput", "onKeydown"] }, { type: i5.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "virtualScroll", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide"] }, { type: i6.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "virtualScroll", "itemSize", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "field", "scrollHeight", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide"] }, { type: i7.FileUploadComponent, selector: "sf-file-upload", inputs: ["limit", "files", "loading", "configName", "accept"], outputs: ["onUpload", "onDeleteFile"] }, { type: i8.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "numberOfMonths", "view", "touchUI", "timeSeparator", "focusTrap", "firstDayOfWeek", "showTransitionOptions", "hideTransitionOptions", "tabindex", "defaultDate", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "locale"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { type: i9.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "step", "inputStyle", "inputStyleClass", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown"] }, { type: i10.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "autoZIndex", "baseZIndex", "filterBy", "virtualScroll", "itemSize", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "scrollHeight", "defaultLabel", "placeholder", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onPanelShow", "onPanelHide"] }, { type: i11.InputSwitch, selector: "p-inputSwitch", inputs: ["style", "styleClass", "tabindex", "inputId", "name", "disabled", "readonly", "ariaLabelledBy"], outputs: ["onChange"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i12.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i15.InputText, selector: "[pInputText]" }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i16.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize"], outputs: ["onResize"] }, { type: i17.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i14.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }], pipes: { "formatAddress": i18.FormatAddressPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
366
366
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ControlComponent, decorators: [{
367
367
  type: Component,
368
368
  args: [{
@@ -391,4 +391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
391
391
  type: ViewChildren,
392
392
  args: [Tooltip]
393
393
  }] } });
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZi1jcnVkL3NyYy9saWIvY29tcG9uZW50cy9jb250cm9sL2NvbnRyb2wuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvY29udHJvbC9jb250cm9sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQXFCLFlBQVksRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFFOUssT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBNkIsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBR2pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFyQyxNQUFNLE9BQU8sZ0JBQWdCO0lBdUIzQixZQUNVLGNBQThCLEVBQzlCLFdBQTBCLEVBQzFCLEdBQXNCLEVBQ3RCLG1CQUF3QztRQUh4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQXpCekMsa0JBQWEsR0FBVyxLQUFLLENBQUM7UUFDOUIsWUFBTyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7UUFDN0IsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUdsQixhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7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Q0FBQywwQ0FBRSxVQUFVLEVBQUUsQ0FBQTtTQUNuQztRQUFBLE9BQU0sRUFBRSxFQUFDLEdBQUU7SUFDbEIsQ0FBQztJQUVDLFVBQVU7UUFDUixJQUFJLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDdkIsUUFBUSxDQUFDLGFBQTZCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixDQUFDOzs4R0ExVlUsZ0JBQWdCO2tHQUFoQixnQkFBZ0Isb1NBVWIsT0FBTyxxRUMzQnZCLDI5VUFpSkE7NEZEaElhLGdCQUFnQjtrQkFONUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDttTUFHVSxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ2dCLFFBQVE7c0JBQTlCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBHZW5lcmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9nZW5lcmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaGVtYSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvc2hlbWEubW9kZWwnO1xyXG5pbXBvcnQgeyBPcGVyYXRpb24sIE92ZXJyaWRlQ29uZmlnLCBSZXF1ZXN0Q2hlY2tpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2NydWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2ZDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NmLWNydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQXJjaGl2byB9IGZyb20gJy4uL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBqc29ucGF0aCBmcm9tICdqc29ucGF0aCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NmLWNvbnRyb2wnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250cm9sLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb250cm9sLmNvbXBvbmVudC5jc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udHJvbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgc2hvd1RlbXBWYWx1ZTpCb29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY29udHJvbDogU2hlbWEgPSBuZXcgU2hlbWEoKTtcclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdmFsdWU6IGFueTtcclxuICBASW5wdXQoKSBhcHBlbmRUbzogYW55O1xyXG4gIEBPdXRwdXQoKSBzZXRWYWx1ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc2VuZE9iamVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgYWRkcmVzc0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZHJlbihUb29sdGlwKSB0b29sdGlwcyE6IFF1ZXJ5TGlzdCA8VG9vbHRpcD47XHJcblxyXG4gIHByaXZhdGUgbGVuZ2h0V29yZCE6IG51bWJlcjtcclxuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRhdGFGcm9tU2VydmljZTogYW55W10gPSBbXTtcclxuICBwdWJsaWMgdXBsb2FkZWRGaWxlczogQXJjaGl2b1tdID0gW107XHJcbiAgcHVibGljIGRpc3BsYXlBZGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdGVtcFZhbHVlOiBhbnk7XHJcbiAgcHVibGljIGNsaWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHVwbG9hZGluZ0ZpbGVzID0gZmFsc2U7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZ2VuZXJhbFNlcnZpY2U6IEdlbmVyYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjcnVkU2VydmljZTogU2ZDcnVkU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZERlZmF1bHRWYWx1ZXMoKVxyXG4gICAgaWYgKHRoaXMuY29udHJvbD8uY29uZmlnPy5kZXBlbmRzKXtcclxuICAgICAgdGhpcy5jcnVkU2VydmljZS5jaGFuZ2VEYXRhJC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICBpZiAocmVzKXtcclxuICAgICAgICAgIGxldCByZWdpc3RybyA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8odGhpcy5jcnVkU2VydmljZS5pbmRleClcclxuICAgICAgICAgIGxldCBrZXlGb3VuZCA9IHJlZ2lzdHJvLmtleXM/LmZpbmQoayA9PiBrLnNjb3BlID09PSByZXMuc2NvcGVcclxuICAgICAgICAgICYmICAodGhpcy5jb250cm9sLmNvbmZpZy5kZXBlbmRzIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhrLmtleSkgJiZcclxuICAgICAgICAgIChyZXMuaW5kZXggPT09IGsuaW5kZXhEYXRhIHx8IHJlcy5pbmRleCA9PT0gay5pbmRleEFuc3dlcikpXHJcbiAgICAgICAgICBpZiAoa2V5Rm91bmQ/Lm92ZXJyaWRlQ29udHJvbCl7XHJcbiAgICAgICAgICAgIGxldCBvdmVycmlkZSA9IGtleUZvdW5kLm92ZXJyaWRlQ29udHJvbFxyXG4gICAgICAgICAgICBsZXQgY29tcGxldGVkID0gdGhpcy5jcnVkU2VydmljZS5pc0NvbmRpdGlvbnNDb21wbGV0ZWQob3ZlcnJpZGUuY29uZGl0aW9ucyA/PyBbXSwgcmVnaXN0cm8uY29uZGl0aW9ucyB8fCBbXSwgdGhpcy5jcnVkU2VydmljZS5nZXREYXRhKHRoaXMuY3J1ZFNlcnZpY2UuaW5kZXgpKVxyXG4gICAgICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmNvbnRyb2wsIG92ZXJyaWRlLnByb3BlcnR5LCBjb21wbGV0ZWQgPyBvdmVycmlkZS52YWx1ZSA6IG92ZXJyaWRlLmVsc2VWYWx1ZSlcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0TmV3VmFsdWUob3ZlcnJpZGUsIGNvbXBsZXRlZCk7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcFZhbHVlID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc3VidHlwZSA9PSAnZHJvcGRvd24nIHx8IHRoaXMuY29udHJvbC5zdWJ0eXBlID09ICdtdWx0aXNlbGVjdCcpIHRoaXMubG9hZERhdGFGcm9tU2VydmljZSgpXHJcbiAgICAgICAgICAgIC8vdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChrZXlGb3VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgICAgICAgICAgIHRoaXMubG9hZERlZmF1bHRWYWx1ZXMoKVxyXG4gICAgICAgICAgICAvL3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5ld1ZhbHVlKG92ZXJyaWRlOiBPdmVycmlkZUNvbmZpZywgY29tcGxldGVkOiBib29sZWFuKTogYW55IHtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gY29tcGxldGVkID8gb3ZlcnJpZGUubmV3UHJvcGVydHlWYWx1ZTogb3ZlcnJpZGUuZWxzZU5ld1Byb3BlcnR5VmFsdWU7XHJcbiAgICBpZiAobmV3VmFsdWUgJiYgdHlwZW9mKG5ld1ZhbHVlKSA9PSBcInN0cmluZ1wiKXtcclxuICAgICAgaWYgKCFuZXdWYWx1ZS5zdGFydHNXaXRoKCckJykgJiYgIW5ld1ZhbHVlLnN0YXJ0c1dpdGgoJ0AnKSl7XHJcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGxvYWREZWZhdWx0VmFsdWVzKCl7XHJcbiAgICBpZiAodGhpcy5jb250cm9sPy5jb25maWcgJiYgdGhpcy5jb250cm9sLnN1YnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCB0aGlzLmNvbnRyb2wuc3VidHlwZSA9PSAnbXVsdGlzZWxlY3QnKSB0aGlzLmxvYWREYXRhRnJvbVNlcnZpY2UoKTtcclxuICAgIGlmICh0aGlzLmNvbnRyb2w/LnN1YnR5cGUgPT0gJ2F1dG9jb21wbGV0ZScpIHRoaXMuZXh0cmFjVmFsdWVGcm9tQ29udHJvbEJ1c3F1ZWRhKCk7XHJcbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSAnZGF0ZScpIHRoaXMuaW5zdGFuY2VEYXRlKCk7XHJcbiAgICBpZiAodGhpcy5jb250cm9sPy5zdWJ0eXBlID09IFwiZmlsZVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZEZpbGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb250cm9sPy50eXBlID09ICdzdHJpbmcnKSB0aGlzLmxlbmdodFdvcmQgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZS5sZW5ndGggOiAwXHJcbiAgICBpZiAodGhpcy5jb250cm9sPy5zdWJ0eXBlID09ICdzd2l0Y2gnKSB0aGlzLmluc3RhbmNlQm9vbEZpZWxkKClcclxuICB9XHJcbiAgaW5zdGFuY2VCb29sRmllbGQoKSB7XHJcbiAgICB0aGlzLnRlbXBWYWx1ZSA9IHRoaXMudmFsdWVcclxuICAgIGlmICh0aGlzLnZhbHVlID09IHRydWUgJiYgdGhpcy5jb250cm9sLnRydWVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbnRyb2wudHJ1ZVZhbHVlXHJcbiAgICAgIHRoaXMuc2VuZFZhbHVlKClcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMudmFsdWUgPT0gZmFsc2UgJiYgdGhpcy5jb250cm9sLmZhbHNlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb250cm9sLmZhbHNlVmFsdWVcclxuICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VTd2l0Y2goKXtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLnRlbXBWYWx1ZVxyXG4gICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gIH1cclxuXHJcbiAgbG9hZEZpbGVzKCl7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWVcclxuICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFtdXHJcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuY29udHJvbC5jb25maWcubmFtZVBhdHRlcm4gJiYgdGhpcy5jb250cm9sLnR5cGUgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBsZXQgdXJsczogc3RyaW5nW10gPSB0aGlzLmNvbnRyb2wuY29uZmlnLnNlcGFyYXRvciA/IHRoaXMudmFsdWUuc3BsaXQoXCIsXCIpIDogW3RoaXMudmFsdWVdXHJcbiAgICAgIHVybHMuZm9yRWFjaCh1cmwgPT4gdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goe3VybDp1cmwsICBuYW1lOnRoaXMuZ2V0TmFtZUZpbGUodGhpcy5jb250cm9sLmNvbmZpZy5uYW1lUGF0dGVybiwgdXJsKX0pKVxyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5jb250cm9sLmNvbmZpZy5uYW1lUGF0dGVybiAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSBcImFycmF5XCIpIHtcclxuICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKCh1cmw6c3RyaW5nKSA9PiB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaCh7dXJsOnVybCwgIG5hbWU6dGhpcy5nZXROYW1lRmlsZSh0aGlzLmNvbnRyb2wuY29uZmlnLm5hbWVQYXR0ZXJuLCB1cmwpfSkpXHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcil7XHJcbiAgICBpZiAoKCF0aGlzLmNvbnRyb2wuY29uZmlnPy5saW1pdCB8fCB0aGlzLmNvbnRyb2wuY29uZmlnPy5saW1pdCA9PSAxKSAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnR5cGUgPT0gXCJhcnJheVwiKSB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcclxuICB9XHJcblxyXG4gIGdldE5hbWVGaWxlKG5hbWVQYXR0ZXJuOiBzdHJpbmcsIHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4T2JqID0gbmV3IFJlZ0V4cChuYW1lUGF0dGVybik7XHJcbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4T2JqLmV4ZWModXJsKTtcclxuICAgIGlmICghbWF0Y2gpIHRocm93IG5ldyBFcnJvcihcIkVsIHBhdHRlcm4gbm8gY29pbmNpZGUgY29uIGxhIHVybC4gXCIgKyB1cmwpO1xyXG4gICAgcmV0dXJuIG1hdGNoWzBdO1xyXG4gIH1cclxuXHJcbiAgc2VuZFZhbHVlKCkge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbC50eXBlID09IFwic3RyaW5nXCIgJiYgdGhpcy52YWx1ZSA9PSBcIlwiICYmIHRoaXMuY29udHJvbC5jb25maWc/LmFsbG93RW1wdHkgPT0gZmFsc2UpIHRoaXMudmFsdWUgPSBudWxsXHJcbiAgICB0aGlzLnNldFZhbHVlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzZW5kTnVtYmVyVmFsdWUoJGV2ZW50OiBhbnkpe1xyXG4gICAgdGhpcy52YWx1ZSA9ICRldmVudC52YWx1ZVxyXG4gICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gIH1cclxuXHJcbiAgb25JbnB1dEVtYWlsKGZvcmNlOmJvb2xlYW4pe1xyXG4gICAgY29uc3QgYXV4ID0gTWF0aC5hYnModGhpcy5sZW5naHRXb3JkIC0gdGhpcy52YWx1ZS5sZW5ndGgpXHJcbiAgICB0aGlzLmxlbmdodFdvcmQgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG4gICAgaWYgKGF1eCA+IDEgfHwgZm9yY2Upe1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKC8oW1xcd1xcLlxcLV9dKyk/XFx3K0BbXFx3LV9dKyhcXC5cXHcrKXsxLH0vaWdtKTtcclxuICAgICAgICBpZiAocmVnZXgudGVzdCh0aGlzLnZhbHVlKSkgdGhpcy5zZW5kVmFsdWUoKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7IHNldmVyaXR5OiAnd2FybicsIGRldGFpbDogJ0VsIGNvcnJlbyBubyBlcyB2w6FsaWRvJyB9LCB0aGlzLnByaW1lQ2hlY2tpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VuZFZhbHVlRnJvbU9iamVjdChldmVudDogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGVvZiAodGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZSkpIHtcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICB0aGlzLmNvbnRyb2wuY29uZmlnLm9wdGlvblZhbHVlLmZvckVhY2goKG9wOiBhbnkpID0+IG9wWyd2YWx1ZSddID0gZXZlbnRbb3Aua2V5XSlcclxuICAgICAgICB0aGlzLnNldFZhbHVlLmVtaXQodGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZS5lbWl0KGV2ZW50W3RoaXMuY29udHJvbC5jb25maWcub3B0aW9uVmFsdWVdKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWREYXRhRnJvbVNlcnZpY2UoKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmRhdGFGcm9tU2VydmljZSA9IFtdO1xyXG4gICAgY29uc3Qgb3A6IE9wZXJhdGlvbiA9IHRoaXMuY29udHJvbC5jb25maWdcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0VVJMKG9wLCB1bmRlZmluZWQsIHVuZGVmaW5lZClcclxuICAgIGlmICh0aGlzLmNvbnRyb2wuY29uZmlnPy5jdXN0b21PcHRpb25zKXtcclxuICAgICAgdGhpcy5kYXRhRnJvbVNlcnZpY2UgPSB0aGlzLmNvbnRyb2wuY29uZmlnLmN1c3RvbU9wdGlvbnNcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwpXHJcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFGcm9tU2VydmljZSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkRGF0YUZyb21Db250cm9sQnVzcXVlZGFTZXJ2aWNlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IG9wOiBPcGVyYXRpb24gPSB0aGlzLmNvbnRyb2wuY29uZmlnXHJcbiAgICBsZXQgdXJsID0gdGhpcy5jcnVkU2VydmljZS5nZXRVUkwob3ApXHJcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgnQHF1ZXJ5JywgZXZlbnQ/LnF1ZXJ5IHx8ICcnKVxyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5nZW5lcmljUmVxdWVzdCh0aGlzLmNvbnRyb2wuY29uZmlnLm1ldGhvZCwgdXJsKVxyXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFGcm9tU2VydmljZSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFGcm9tU2VydmljZT8ubGVuZ3RoID09IDAgJiYgdGhpcy5jb250cm9sLmFsbG93Q3VzdG9tT3B0aW9uKSB7XHJcbiAgICAgICAgICAvL2FncmVnYXIgdW4gY2FtcG8gcXVlIGVsIHVzdWFyaW8gaGF5YSBkaWdpdGFkb1xyXG4gICAgICAgICAgbGV0IG5ld0l0ZW06IGFueSA9IHt9XHJcbiAgICAgICAgICBuZXdJdGVtW3RoaXMuY29udHJvbC5maWVsZF0gPSB0aGlzLnRlbXBWYWx1ZVxyXG4gICAgICAgICAgbmV3SXRlbVt0aGlzLmNvbnRyb2wuY29uZmlnLm9wdGlvblZhbHVlXSA9IHRoaXMudGVtcFZhbHVlXHJcbiAgICAgICAgICB0aGlzLmRhdGFGcm9tU2VydmljZS5wdXNoKG5ld0l0ZW0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZXh0cmFjVmFsdWVGcm9tQ29udHJvbEJ1c3F1ZWRhKCl7XHJcbiAgICBjb25zdCBvcDogT3BlcmF0aW9uID0gdGhpcy5jb250cm9sLmNvbmZpZ1xyXG4gICAgbGV0IHVybCA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0VVJMKG9wKVxyXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoJ0BxdWVyeScsIHRoaXMudmFsdWUpXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuZGF0YT8ubGVuZ3RoID09IDEgJiYgcmVzLmRhdGFbMF1bdGhpcy5jb250cm9sLmZpZWxkXSl7XHJcbiAgICAgICAgICB0aGlzLnRlbXBWYWx1ZSA9IHJlcy5kYXRhWzBdXHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gcmVzLmRhdGFbMF1bdGhpcy5jb250cm9sLmZpZWxkXVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgb25VcGxvYWQoZXZlbnQ6IEZpbGVbXSkge1xyXG4gICAgdGhpcy51cGxvYWRpbmdGaWxlcyA9IHRydWVcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb250cm9sLmNvbmZpZy5wYXRoIHx8ICdJbWFnZW5lcy9DUlVEL3RlbXAnO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdSdXRhJywgYC8ke3BhdGh9YCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudC5sZW5ndGg7IGkrKykgZm9ybURhdGEuYXBwZW5kKGB1cGxvYWRGaWxlXyR7aX1gLCBldmVudFtpXSk7XHJcbiAgICBjb25zdCBvcDogT3BlcmF0aW9uID0gdGhpcy5jb250cm9sLmNvbmZpZ1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5jcnVkU2VydmljZS5nZXRVUkwob3ApXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwsIGZvcm1EYXRhKVxyXG4gICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICBsZXQgc2VwYXJhdG9yID0gdGhpcy5jb250cm9sLmNvbmZpZz8uc2VwYXJhdG9yIHx8IFwiLFwiXHJcbiAgICAgIC8vc2UgYXN1bWUgcXVlIHZpZW5lIG5hbWVQYXR0ZXJuXHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2wudHlwZSA9PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gZXZlbnQubWFwKGYgPT4gYCR7dGhpcy5nZW5lcmFsU2VydmljZS5qc29uQ29uZmlnLlNlcnZlcn0ke3BhdGh9LyR7Zi5uYW1lfWApLmpvaW4oc2VwYXJhdG9yKVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmNvbnRyb2wudHlwZSA9PSBcImFycmF5XCIpIHRoaXMudmFsdWUgPSBldmVudC5tYXAoZiA9PiBgJHt0aGlzLmdlbmVyYWxTZXJ2aWNlLmpzb25Db25maWcuU2VydmVyfSR7cGF0aH0vJHtmLm5hbWV9YClcclxuICAgICAgLy8gU0kgTk8gVFJBRSBuYW1lUGF0dGVybiwgZGViZSByZXRvcm5hciB1biBvYmpldG8gY29uIGVsIG5vbWJyZSB5IGhyZWZcclxuICAgICAgLy9lbHNlIGlmICh0aGlzLmNvbnRyb2wuY29uZmlnLm5hbWVQYXR0ZXJuICYmIHRoaXMuY29udHJvbC50eXBlID09IFwiYXJyYXlcIikgdGhpcy52YWx1ZSA9IGV2ZW50Lm1hcCh4ID0+IHgubmFtZSlcclxuICAgICAgLy9lbHNlIGlmICghdGhpcy5jb250cm9sLmNvbmZpZy5uYW1lUGF0dGVybiAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSBcImFycmF5XCIpIHRoaXMudmFsdWUgPSBldmVudC5tYXAoZiA9PiBgJHt0aGlzLmdlbmVyYWxTZXJ2aWNlLmpzb25Db25maWcuU2VydmVyfSR7cGF0aH0vJHtmLm5hbWV9YClcclxuICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgICBsZXQgbXNnID0gIXRoaXMuY29udHJvbC5jb25maWcubGltaXQgfHwgdGhpcy5jb250cm9sLmNvbmZpZy5saW1pdCA9PSAxID8gXCJBcmNoaXZvIGNhcmdhZG8gY29ycmVjdGFtZW50ZSFcIjogXCJBcmNoaXZvcyBjYXJnYWRvcyBjb3JyZWN0YW1lbnRlIVwiXHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGROb3RpZmljYXRpb24oeyBzZXZlcml0eTogJ2luZm8nLCBkZXRhaWw6IG1zZyB9LCB0aGlzLnByaW1lQ2hlY2tpbmcoKSlcclxuICAgIH0pXHJcbiAgICAuY2F0Y2goKCkgPT4gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7IHNldmVyaXR5OiAnZXJyb3InLCBkZXRhaWw6IGBFcnJvciBhbCBjYXJnYXIgZWwgYXJjaGl2byFgIH0sIHRoaXMucHJpbWVDaGVja2luZygpKSlcclxuICAgIC5maW5hbGx5KCgpID0+IHRoaXMudXBsb2FkaW5nRmlsZXMgPSBmYWxzZSlcclxuXHJcbiAgfVxyXG5cclxuICByZWZyZXNEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbD8uY29uZmlnPy5lbmRwb2ludHRlbXApIHRoaXMubG9hZERhdGFGcm9tU2VydmljZSgpO1xyXG4gIH1cclxuICBzZXREZWZhdWx0VmFsdWUoKXtcclxuICAgIHRoaXMudGVtcFZhbHVlID0ge31cclxuICAgIGlmICghdGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25MYWJlbCkgY29uc29sZS5lcnJvcihcIk5vIGVzdGEgYmllbiBjb25maWd1cmFkbyBlbCBjb250cm9sIFwiLCB0aGlzLmNvbnRyb2wpXHJcbiAgICBlbHNlIHRoaXMudGVtcFZhbHVlW3RoaXMuY29udHJvbC5jb25maWcub3B0aW9uTGFiZWxdID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWU6IFwiXCJcclxuXHJcbiAgfVxyXG5cclxuICBzZWFyY2hWYWx1ZSh2YWx1ZTogc3RyaW5nKXtcclxuICAgIGNvbnN0IG9wOiBPcGVyYXRpb24gPSB0aGlzLmNvbnRyb2wuY29uZmlnXHJcbiAgICBsZXQgdXJsID0gdGhpcy5jcnVkU2VydmljZS5nZXRVUkwob3AsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxyXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoJ0BpZCcsIHZhbHVlKVxyXG5cclxuXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmRhdGE/Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgdGhpcy5zZW5kT2JqZWN0LmVtaXQoeyBkYXRhOiByZXMuZGF0YVswXSwgb3B0aW9uVmFsdWU6IHRoaXMuY29udHJvbC5jb25maWcub3B0aW9uVmFsdWUgfSApXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkTm90aWZpY2F0aW9uKHtzZXZlcml0eTogJ3dhcm4nLCBkZXRhaWw6YFZhbG9yIG5vIGVuY29udHJhZG8uYH0sIHRoaXMucHJpbWVDaGVja2luZygpKVxyXG4gICAgICAgICAgdGhpcy5zZW5kT2JqZWN0LmVtaXQoeyBkYXRhOiBudWxsLCBvcHRpb25WYWx1ZTogdGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZSB9IClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnI9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7c2V2ZXJpdHk6ICdlcnJvcicsIGRldGFpbDpgRXJyb3IgYWwgY29uc3VtaXIgZWwgc2VydmljaW8uYH0sdGhpcy5wcmltZUNoZWNraW5nKCkpXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcmltZUNoZWNraW5nKCl7XHJcbiAgICByZXR1cm4gbmV3IFJlcXVlc3RDaGVja2luZyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSwgdW5kZWZpbmVkKVxyXG4gIH1cclxuXHJcbiAgaW5zdGFuY2VEYXRlKCl7XHJcbiAgICBjb25zdCBmb3JtYXQgPSAodGhpcy5jb250cm9sIGFzIGFueSkuZm9ybWF0TW9tZW50XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWUpe1xyXG4gICAgICBpZiAodHlwZW9mKHRoaXMudmFsdWUpID09IFwic3RyaW5nXCIgJiYgKHRoaXMudmFsdWUgYXMgc3RyaW5nKS5pbmNsdWRlcyhcIlRcIikpIHRoaXMudmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YodGhpcy52YWx1ZSkgPT0gXCJzdHJpbmdcIikgdGhpcy52YWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlLCBmb3JtYXQpLnRvRGF0ZSgpO1xyXG4gICAgICB0aGlzLnRlbXBWYWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlKS5mb3JtYXQoXCJERC9NTS9ZWVlZXCIpXHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIHRoaXMudGVtcFZhbHVlID0gbnVsbFxyXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENhc3QgdGVtcFZhbHVlIHRvIGRhdGVcclxuICAgKi9cclxuICBvbkNoYW5nZVNEYXRlKCl7XHJcbiAgICBjb25zdCBhdXggPSBtb21lbnQodGhpcy50ZW1wVmFsdWUsIFwiREQvTU0vWVlZWVwiKVxyXG4gICAgaWYgKGF1eC5pc1ZhbGlkKCkpe1xyXG4gICAgICB0aGlzLnZhbHVlID0gYXV4LnRvRGF0ZSgpO1xyXG4gICAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50ZW1wVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkTm90aWZpY2F0aW9uKHsgc2V2ZXJpdHk6ICd3YXJuJywgZGV0YWlsOiAnTGEgZmVjaGEgbm8gZXMgdsOhbGlkYScgfSwgdGhpcy5wcmltZUNoZWNraW5nKCkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgb25DaGFuZ2VEYXRlKCl7XHJcbiAgICB0aGlzLnRlbXBWYWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlKS5mb3JtYXQoXCJERC9NTS9ZWVlZXCIpXHJcbiAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgfVxyXG5cclxuICAgIG9uVG91Y2hEZXNjcmlwdGlvbigpIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHRoaXMudG9vbHRpcHMuZ2V0KDApPy5hY3RpdmF0ZSgpXHJcbiAgICAgIH1jYXRjaChleCl7fVxyXG5cclxuICB9XHJcblxyXG4gIG9uVW5Ub3VjaERlc2NyaXB0aW9uKCkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy50b29sdGlwcy5nZXQoMCk/LmRlYWN0aXZhdGUoKVxyXG4gICAgICB9Y2F0Y2goZXgpe31cclxufVxyXG5cclxuICBkb0ZvY3VzT3V0KCl7XHJcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5ibHVyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tlZEFkZHJlcygpe1xyXG4gICAgdGhpcy5hZGRyZXNzQ2xpY2tlZC5lbWl0KClcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUZW1wVmFsdWVcIj48cCAqbmdJZj1cInRlbXBWYWx1ZVwiPnt7dGVtcFZhbHVlW2NvbnRyb2wuZmllbGRdfX08L3A+PC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIXNob3dUZW1wVmFsdWVcIiBbbmdTd2l0Y2hdPVwiY29udHJvbC50eXBlXCIgI2NjIGNsYXNzPVwiY29udHJvbC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cclxuICAgICAgICA8bGFiZWwgW2Zvcl09XCJsYWJlbFwiPnt7bGFiZWx9fTwvbGFiZWw+XHJcbiAgICAgICAgPGkgI3Rvb2x0aXAgKm5nSWY9XCJjb250cm9sLnRvb2x0aXBcIiBjbGFzcz1cInBpIHBpLXF1ZXN0aW9uLWNpcmNsZVwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiY29udHJvbC50b29sdGlwUG9zaXRpb24gfHwgJ3RvcCdcIiBbcFRvb2x0aXBdPVwiY29udHJvbC50b29sdGlwXCJcclxuICAgICAgICAgICAgKHRvdWNoc3RhcnQpPVwib25Ub3VjaERlc2NyaXB0aW9uKClcIiAodG91Y2hlbmQpPVwib25VblRvdWNoRGVzY3JpcHRpb24oKVwiPjwvaT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdHJpbmcnXCIgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbnRyb2wuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW5wdXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBbbmFtZV09XCJsYWJlbFwiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChpbnB1dCk9XCJzZW5kVmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIiBbYXV0b2NvbXBsZXRlXT1cImNvbnRyb2wuYXV0b2NvbXBsZXRlIHx8ICdvZmYnXCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW3Jvd3NdPVwiY29udHJvbC5jb25maWc/LnJvd3MgPyBjb250cm9sLmNvbmZpZy5yb3dzIDogNFwiIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJzZW5kVmFsdWUoKVwiIHBJbnB1dFRleHRhcmVhIFtkaXNhYmxlZF09XCJjb250cm9sLmNvbmZpZz8uZGlzYWJsZWQgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdXRvUmVzaXplXT1cImNvbnRyb2wuY29uZmlnPy5hdXRvcmVzaXplIHx8IGZhbHNlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFzc3dvcmQnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwicGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGlucHV0KT1cInNlbmRWYWx1ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VtYWlsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJlbWFpbEBleGFtcGxlLmNvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIiBhdXRvY29tcGxldGU9XCJlbWFpbFwiIChpbnB1dCk9XCJvbklucHV0RW1haWwoZmFsc2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwib25JbnB1dEVtYWlsKHRydWUpXCIgKGtleXVwLmVudGVyKT1cImRvRm9jdXNPdXQoKVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Bob25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtaW5wdXRNYXNrIG1hc2s9XCIoOTk5KSA5OTktOTk5OVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIig5OTkpIDk5OS05OTk5XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiIGF1dG9jb21wbGV0ZT1cInRlbC1uYXRpb25hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3VubWFza109XCJjb250cm9sLnVubWFzayB8fCBmYWxzZVwiIChvbkNvbXBsZXRlKT1cInNlbmRWYWx1ZSgpXCI+PC9wLWlucHV0TWFzaz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhZGRyZXNzJ1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cInZhbHVlIHwgZm9ybWF0QWRkcmVzczogY29udHJvbC5zZXBhcmFkb3JcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbZGlzYWJsZWRdPVwiY2xpY2tlZFwiIChjbGljayk9XCJvbkNsaWNrZWRBZGRyZXMoKVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VudW0nXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJjb250cm9sLmVudW1cIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKG9uQ2hhbmdlKT1cInNlbmRWYWx1ZSgpXCIgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjY2lvbmUgdW5hIG9wY2nDs25cIiBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cclxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtsYXp5XT1cImlzTG9hZGluZ1wiIFtvcHRpb25zXT1cImRhdGFGcm9tU2VydmljZVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiAob25DaGFuZ2UpPVwic2VuZFZhbHVlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJjb250cm9sLmNvbmZpZy5vcHRpb25MYWJlbFwiIFtzaG93Q2xlYXJdPVwiY29udHJvbC5jb25maWcuc2hvd0NsZWFyXCJcclxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29udHJvbC5maWVsZCB8fCBjb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZVwiIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY2Npb25lIHVuYSBvcGNpw7NuXCIgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd246cmVwbGFjZSdcIj5cclxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtsYXp5XT1cImlzTG9hZGluZ1wiIFtvcHRpb25zXT1cImRhdGFGcm9tU2VydmljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNlbmRWYWx1ZUZyb21PYmplY3QoJGV2ZW50KVwiIFtvcHRpb25MYWJlbF09XCJjb250cm9sLmNvbmZpZy5vcHRpb25MYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCIgcGxhY2Vob2xkZXI9XCJTZWxlY2Npb25lIHVuYSBvcGNpw7NuXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhdXRvY29tcGxldGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1hdXRvQ29tcGxldGUgW3Nob3dFbXB0eU1lc3NhZ2VdPVwidHJ1ZVwiIFtzdWdnZXN0aW9uc109XCJkYXRhRnJvbVNlcnZpY2VcIiBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJsb2FkRGF0YUZyb21Db250cm9sQnVzcXVlZGFTZXJ2aWNlKCRldmVudClcIiBbZmllbGRdPVwiY29udHJvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21pbkxlbmd0aF09XCIxXCIgKG9uU2VsZWN0KT1cInNlbmRWYWx1ZUZyb21PYmplY3QoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwidGVtcFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPjwvcC1hdXRvQ29tcGxldGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW5wdXQ6c2VhcmNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChmb2N1c291dCk9XCJzZW5kVmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJkb0ZvY3VzT3V0KClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLXNlYXJjaFwiIChjbGljayk9XCJzZWFyY2hWYWx1ZSh2YWx1ZSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8c2YtZmlsZS11cGxvYWQgKm5nSWY9XCIhaXNMb2FkaW5nXCIgW2FjY2VwdF09XCJjb250cm9sLmNvbmZpZz8uYWNjZXB0IHx8ICdpbWFnZS8qLGFwcGxpY2F0aW9uL3BkZidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cInVwbG9hZGluZ0ZpbGVzXCIgW2ZpbGVzXT1cInVwbG9hZGVkRmlsZXNcIiBbY29uZmlnTmFtZV09XCJjb250cm9sLmNvbmZpZz8uY29uZmlnTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xpbWl0XT1cImNvbnRyb2wuY29uZmlnPy5saW1pdCB8fCAxXCIgKG9uVXBsb2FkKT1cIm9uVXBsb2FkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkRlbGV0ZUZpbGUpPVwib25EZWxldGVGaWxlKCRldmVudClcIj48L3NmLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29udHJvbC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtaW5wdXRNYXNrIFsobmdNb2RlbCldPVwidGVtcFZhbHVlXCIgbWFzaz1cIjk5Lzk5Lzk5OTlcIiBbcGxhY2Vob2xkZXJdPVwiY29udHJvbC5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Db21wbGV0ZSk9XCJvbkNoYW5nZVNEYXRlKClcIiBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPjwvcC1pbnB1dE1hc2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyIFsobmdNb2RlbCldPVwidmFsdWVcIiBjbGFzcz1cIm9ubHktaWNvblwiIFttb250aE5hdmlnYXRvcl09XCJ0cnVlXCIgW3llYXJOYXZpZ2F0b3JdPVwidHJ1ZVwiIHllYXJSYW5nZT1cIjE5MDA6MjAzNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJjb250cm9sLmZvcm1hdCB8fCAneXktbW0tZGQnXCIgYXBwZW5kVG89XCJib2R5XCIgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dPbkZvY3VzXT1cIiFjb250cm9sLmhpZGVcIiBbcGxhY2Vob2xkZXJdPVwiY29udHJvbC5wbGFjZWhvbGRlciB8fCAnYWFhYS1tbS1kZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RvdWNoVUldPVwiY29udHJvbC50b3VjaFVJIHx8IGZhbHNlXCIgW3Nob3dJY29uXT1cImNvbnRyb2wuc2hvd0ljb24gfHwgZmFsc2VcIiAob25TZWxlY3QpPVwib25DaGFuZ2VEYXRlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJvbkNoYW5nZURhdGUoKVwiPjwvcC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWVyaWMnXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29udHJvbC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFtuZ01vZGVsXT1cInZhbHVlXCIgIChuZ01vZGVsQ2hhbmdlKT1cInZhbHVlID0gJGV2ZW50OyBzZW5kVmFsdWUoKVwiIG1vZGU9XCJkZWNpbWFsXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cImNvbnRyb2wubWluRnJhY3Rpb25EaWdpdHMgfHwgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21pbl09XCJjb250cm9sLm1pbiB8fCBudWxsXCIgW21heF09XCJjb250cm9sLm1heCB8fCBudWxsXCIgKG9uSW5wdXQpPVwic2VuZE51bWJlclZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmVmaXhdPVwiY29udHJvbC5jdXJyZW5jeSB8fCAnJCAnXCIgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIj48L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGVjaW1hbCdcIj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFtuZ01vZGVsXT1cInZhbHVlXCIgbW9kZT1cImRlY2ltYWxcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWx1ZSA9ICRldmVudDsgc2VuZFZhbHVlKClcIiBbbWluXT1cImNvbnRyb2wubWluIHx8IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXhdPVwiY29udHJvbC5tYXggfHwgbnVsbFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCJjb250cm9sLm1pbkZyYWN0aW9uRGlnaXRzIHx8IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwiY29udHJvbC5sb2NhbGUgfHwgdW5kZWZpbmVkXCIgW3VzZUdyb3VwaW5nXT1cImNvbnRyb2wudXNlR3JvdXBpbmcgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3BlcmNlbnRhZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbbmdNb2RlbF09XCJ2YWx1ZVwiIHN1ZmZpeD1cIiAlXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWUgPSAkZXZlbnQ7IHNlbmRWYWx1ZSgpXCIgKG9uSW5wdXQpPVwic2VuZFZhbHVlKClcIiBbbWluXT1cImNvbnRyb2wubWluIHx8IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXhdPVwiY29udHJvbC5tYXggfHwgbnVsbFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCJjb250cm9sLm1pbkZyYWN0aW9uRGlnaXRzIHx8IDJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwiY29udHJvbC5sb2NhbGUgfHwgdW5kZWZpbmVkXCIgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIj48L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGVjaW1hbDpzZWFyY2gnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnB1dGdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwidmFsdWVcIiAoZm9jdXNvdXQpPVwic2VuZFZhbHVlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZG9Gb2N1c091dCgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1zZWFyY2hcIiAoY2xpY2spPVwic2VhcmNoVmFsdWUodmFsdWUpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhcnJheSdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb250cm9sLnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8c2YtZmlsZS11cGxvYWQgKm5nSWY9XCIhaXNMb2FkaW5nXCIgW2xvYWRpbmddPVwidXBsb2FkaW5nRmlsZXNcIiBbZmlsZXNdPVwidXBsb2FkZWRGaWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ05hbWVdPVwiY29udHJvbC5jb25maWc/LmNvbmZpZ05hbWVcIiBbbGltaXRdPVwiY29udHJvbC5jb25maWc/LmxpbWl0IHx8IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiY29udHJvbC5jb25maWc/LmFjY2VwdCB8fCAnaW1hZ2UvKixhcHBsaWNhdGlvbi9wZGYnXCIgKG9uVXBsb2FkKT1cIm9uVXBsb2FkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkRlbGV0ZUZpbGUpPVwib25EZWxldGVGaWxlKCRldmVudClcIj48L3NmLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpc2VsZWN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwiZGF0YUZyb21TZXJ2aWNlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChvbkNoYW5nZSk9XCJzZW5kVmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbnRyb2wuY29uZmlnPy5vcHRpb25MYWJlbFwiIFtvcHRpb25WYWx1ZV09XCJjb250cm9sLmNvbmZpZz8ub3B0aW9uVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb250cm9sLmNvbmZpZz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5XT1cImNvbnRyb2wuY29uZmlnPy5kaXNwbGF5IHx8ICdjaGlwJ1wiPjwvcC1tdWx0aVNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbnRyb2wuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3dpdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtaW5wdXRTd2l0Y2ggIFsobmdNb2RlbCldPVwidGVtcFZhbHVlXCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlU3dpdGNoKClcIiBbaWRdPVwibGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgW3RydWVWYWx1ZV09XCJjb250cm9sPy50cnVlVmFsdWUgIT09IHVuZGVmaW5lZCA/IGNvbnRyb2w/LnRydWVWYWx1ZTogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICBbZmFsc2VWYWx1ZV09XCJjb250cm9sPy5mYWxzZVZhbHVlICE9PSB1bmRlZmluZWQgPyBjb250cm9sPy5mYWxzZVZhbHVlOiBudWxsXCI+PC9wLWlucHV0U3dpdGNoPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuIl19
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZi1jcnVkL3NyYy9saWIvY29tcG9uZW50cy9jb250cm9sL2NvbnRyb2wuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvY29udHJvbC9jb250cm9sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQXFCLFlBQVksRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFFOUssT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBNkIsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBR2pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFyQyxNQUFNLE9BQU8sZ0JBQWdCO0lBdUIzQixZQUNVLGNBQThCLEVBQzlCLFdBQTBCLEVBQzFCLEdBQXNCLEVBQ3RCLG1CQUF3QztRQUh4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQXpCekMsa0JBQWEsR0FBVyxLQUFLLENBQUM7UUFDOUIsWUFBTyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7UUFDN0IsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUdsQixhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEQsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3hELG1CQUFjLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFJL0QsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixvQkFBZSxHQUFVLEVBQUUsQ0FBQztRQUM1QixrQkFBYSxHQUFjLEVBQUUsQ0FBQztRQUM5QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBRTVCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7SUFRMUIsQ0FBQztJQUVMLFdBQVcsQ0FBQyxPQUFzQjtJQUVsQyxDQUFDO0lBRUQsUUFBUTs7UUFDTixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUN4QixJQUFJLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxNQUFNLDBDQUFFLE9BQU8sRUFBQztZQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7O2dCQUMzQyxJQUFJLEdBQUcsRUFBQztvQkFDTixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNuRSxJQUFJLFFBQVEsR0FBRyxNQUFBLFFBQVEsQ0FBQyxJQUFJLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEtBQUs7MkJBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQW9CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7d0JBQzdELENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7b0JBQzNELElBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGVBQWUsRUFBQzt3QkFDNUIsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQTt3QkFDdkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFBLFFBQVEsQ0FBQyxVQUFVLG1DQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7d0JBQzlKLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO3dCQUNoRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTt3QkFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO3dCQUNoQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxhQUFhOzRCQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO3dCQUMzRywwQkFBMEI7cUJBQzNCO3lCQUNJLElBQUksUUFBUSxFQUFFO3dCQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTt3QkFDakIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO3dCQUNoQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTt3QkFDeEIsMEJBQTBCO3FCQUMzQjtpQkFFRjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQXdCLEVBQUUsU0FBa0I7UUFDOUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztRQUN0RixJQUFJLFFBQVEsSUFBSSxPQUFNLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxFQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBQztnQkFDekQsT0FBTyxRQUFRLENBQUM7YUFDakI7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlCQUFpQjs7UUFDZixJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxNQUFNLEtBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLGFBQWE7WUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNwSSxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxPQUFPLEtBQUksY0FBYztZQUFFLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQ25GLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxNQUFNO1lBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25FLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLE9BQU8sS0FBSSxNQUFNLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsSUFBSSxLQUFJLFFBQVE7WUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEYsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsT0FBTyxLQUFJLFFBQVE7WUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtJQUNqRSxDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQzlELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUE7WUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pCO2FBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDckUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQTtZQUNwQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7U0FDakI7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQTtRQUMzQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDbEIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQTtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7U0FDekI7YUFDSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUU7WUFDekUsSUFBSSxJQUFJLEdBQWEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDekYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBRyxJQUFJLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUE7WUFDckgsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtTQUN6QjthQUNJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRTtZQUN4RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFHLElBQUksRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQTtZQUNwSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhOztRQUN4QixJQUFJLENBQUMsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLDBDQUFFLEtBQUssQ0FBQSxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sMENBQUUsS0FBSyxLQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLFFBQVE7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTthQUNuSCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU87WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUVELFdBQVcsQ0FBQyxXQUFtQixFQUFFLEdBQVc7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDekUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELFNBQVM7O1FBQ1AsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSwwQ0FBRSxVQUFVLEtBQUksS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ3BILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQVc7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNsQixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUNuQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxFQUFDO1lBQ2pCLE1BQU0sS0FBSyxHQUFXLElBQUksTUFBTSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7WUFDM0UsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2lCQUN4QztnQkFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO2dCQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQzthQUN4SDtTQUNKO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQVU7UUFDNUIsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDaEQsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBQ2pGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxtQkFBbUI7O1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sRUFBRSxHQUFjLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDN0QsSUFBSSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSwwQ0FBRSxhQUFhLEVBQUM7WUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUE7U0FDekQ7YUFBSTtZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7aUJBQ2hFLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtnQkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtZQUM1QixDQUFDLENBQUMsQ0FBQTtTQUNMO0lBQ0gsQ0FBQztJQUVELGtDQUFrQyxDQUFDLEtBQVU7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxFQUFFLEdBQWMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUE7UUFDekMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDckMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssS0FBSSxFQUFFLENBQUMsQ0FBQTtRQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ2hFLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFOztZQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLGVBQWUsMENBQUUsTUFBTSxLQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFO2dCQUN2RSwrQ0FBK0M7Z0JBQy9DLElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQTtnQkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQTtnQkFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7Z0JBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQ25DO1FBQ0gsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDNUIsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsOEJBQThCO1FBQzVCLE1BQU0sRUFBRSxHQUFjLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBQ3pDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3JDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzthQUNoRSxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTs7WUFDakIsSUFBSSxDQUFBLE1BQUEsR0FBRyxDQUFDLElBQUksMENBQUUsTUFBTSxLQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUM7Z0JBQzNELElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7YUFDN0M7O2dCQUNJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUM3QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUM1QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBQ3hCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUdELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFBO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLG9CQUFvQixDQUFDO1FBQzlELFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsTUFBTSxFQUFFLEdBQWMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUE7UUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUM7YUFDNUUsSUFBSSxDQUFDLEdBQUcsRUFBRTs7WUFDVCxJQUFJLFNBQVMsR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLDBDQUFFLFNBQVMsS0FBSSxHQUFHLENBQUE7WUFDckQsZ0NBQWdDO1lBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUTtnQkFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2lCQUN0SSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU87Z0JBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQy9ILHVFQUF1RTtZQUN2RSwrR0FBK0c7WUFDL0cscUtBQXFLO1lBQ3JLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQSxDQUFDLENBQUMsa0NBQWtDLENBQUE7WUFDN0ksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1FBQ25HLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsNkJBQTZCLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQzthQUN6SSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQTtJQUU3QyxDQUFDO0lBRUQsVUFBVTs7UUFDUixJQUFJLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxNQUFNLDBDQUFFLFlBQVk7WUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7O1lBQ3BHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRXBGLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUN2QixNQUFNLEVBQUUsR0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQTtRQUN6QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzNELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUcvQixJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ2hFLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFOztZQUNqQixJQUFJLENBQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSwwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFDO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBRSxDQUFBO2FBQzNGO2lCQUFJO2dCQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQyxzQkFBc0IsRUFBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO2dCQUNqSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFFLENBQUE7YUFDcEY7UUFDSCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxDQUFBLEVBQUU7WUFDVixJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUMsZ0NBQWdDLEVBQUMsRUFBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUM3SCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNqRyxDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxPQUFlLENBQUMsWUFBWSxDQUFBO1FBRWpELElBQUksSUFBSSxDQUFDLEtBQUssRUFBQztZQUNiLElBQUksT0FBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLElBQUssSUFBSSxDQUFDLEtBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDeEcsSUFBSSxPQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxRixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1NBQ3pEO2FBQUs7WUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtTQUNsQjtJQUNILENBQUM7SUFHRDs7T0FFRztJQUNILGFBQWE7UUFDWCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUNoRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBQztZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7U0FDakI7YUFDSTtZQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1NBQ3RIO0lBQ0gsQ0FBQztJQUdELFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3hELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNsQixDQUFDO0lBRUMsa0JBQWtCOztRQUNoQixJQUFHO1lBQ0QsTUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsMENBQUUsUUFBUSxFQUFFLENBQUE7U0FDakM7UUFBQSxPQUFNLEVBQUUsRUFBQyxHQUFFO0lBRWhCLENBQUM7SUFFRCxvQkFBb0I7O1FBQ2hCLElBQUc7WUFDRCxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxVQUFVLEVBQUUsQ0FBQTtTQUNuQztRQUFBLE9BQU0sRUFBRSxFQUFDLEdBQUU7SUFDbEIsQ0FBQztJQUVDLFVBQVU7UUFDUixJQUFJLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDdkIsUUFBUSxDQUFDLGFBQTZCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixDQUFDOzs4R0ExVlUsZ0JBQWdCO2tHQUFoQixnQkFBZ0Isb1NBVWIsT0FBTyxxRUMzQnZCLDIvVUFpSkE7NEZEaElhLGdCQUFnQjtrQkFONUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDttTUFHVSxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ2dCLFFBQVE7c0JBQTlCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBHZW5lcmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9nZW5lcmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaGVtYSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvc2hlbWEubW9kZWwnO1xyXG5pbXBvcnQgeyBPcGVyYXRpb24sIE92ZXJyaWRlQ29uZmlnLCBSZXF1ZXN0Q2hlY2tpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2NydWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2ZDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NmLWNydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQXJjaGl2byB9IGZyb20gJy4uL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBqc29ucGF0aCBmcm9tICdqc29ucGF0aCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NmLWNvbnRyb2wnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250cm9sLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb250cm9sLmNvbXBvbmVudC5jc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udHJvbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgc2hvd1RlbXBWYWx1ZTpCb29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY29udHJvbDogU2hlbWEgPSBuZXcgU2hlbWEoKTtcclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdmFsdWU6IGFueTtcclxuICBASW5wdXQoKSBhcHBlbmRUbzogYW55O1xyXG4gIEBPdXRwdXQoKSBzZXRWYWx1ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc2VuZE9iamVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgYWRkcmVzc0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZHJlbihUb29sdGlwKSB0b29sdGlwcyE6IFF1ZXJ5TGlzdCA8VG9vbHRpcD47XHJcblxyXG4gIHByaXZhdGUgbGVuZ2h0V29yZCE6IG51bWJlcjtcclxuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRhdGFGcm9tU2VydmljZTogYW55W10gPSBbXTtcclxuICBwdWJsaWMgdXBsb2FkZWRGaWxlczogQXJjaGl2b1tdID0gW107XHJcbiAgcHVibGljIGRpc3BsYXlBZGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdGVtcFZhbHVlOiBhbnk7XHJcbiAgcHVibGljIGNsaWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHVwbG9hZGluZ0ZpbGVzID0gZmFsc2U7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZ2VuZXJhbFNlcnZpY2U6IEdlbmVyYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjcnVkU2VydmljZTogU2ZDcnVkU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZERlZmF1bHRWYWx1ZXMoKVxyXG4gICAgaWYgKHRoaXMuY29udHJvbD8uY29uZmlnPy5kZXBlbmRzKXtcclxuICAgICAgdGhpcy5jcnVkU2VydmljZS5jaGFuZ2VEYXRhJC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICBpZiAocmVzKXtcclxuICAgICAgICAgIGxldCByZWdpc3RybyA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8odGhpcy5jcnVkU2VydmljZS5pbmRleClcclxuICAgICAgICAgIGxldCBrZXlGb3VuZCA9IHJlZ2lzdHJvLmtleXM/LmZpbmQoayA9PiBrLnNjb3BlID09PSByZXMuc2NvcGVcclxuICAgICAgICAgICYmICAodGhpcy5jb250cm9sLmNvbmZpZy5kZXBlbmRzIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhrLmtleSkgJiZcclxuICAgICAgICAgIChyZXMuaW5kZXggPT09IGsuaW5kZXhEYXRhIHx8IHJlcy5pbmRleCA9PT0gay5pbmRleEFuc3dlcikpXHJcbiAgICAgICAgICBpZiAoa2V5Rm91bmQ/Lm92ZXJyaWRlQ29udHJvbCl7XHJcbiAgICAgICAgICAgIGxldCBvdmVycmlkZSA9IGtleUZvdW5kLm92ZXJyaWRlQ29udHJvbFxyXG4gICAgICAgICAgICBsZXQgY29tcGxldGVkID0gdGhpcy5jcnVkU2VydmljZS5pc0NvbmRpdGlvbnNDb21wbGV0ZWQob3ZlcnJpZGUuY29uZGl0aW9ucyA/PyBbXSwgcmVnaXN0cm8uY29uZGl0aW9ucyB8fCBbXSwgdGhpcy5jcnVkU2VydmljZS5nZXREYXRhKHRoaXMuY3J1ZFNlcnZpY2UuaW5kZXgpKVxyXG4gICAgICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmNvbnRyb2wsIG92ZXJyaWRlLnByb3BlcnR5LCBjb21wbGV0ZWQgPyBvdmVycmlkZS52YWx1ZSA6IG92ZXJyaWRlLmVsc2VWYWx1ZSlcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0TmV3VmFsdWUob3ZlcnJpZGUsIGNvbXBsZXRlZCk7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcFZhbHVlID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc3VidHlwZSA9PSAnZHJvcGRvd24nIHx8IHRoaXMuY29udHJvbC5zdWJ0eXBlID09ICdtdWx0aXNlbGVjdCcpIHRoaXMubG9hZERhdGFGcm9tU2VydmljZSgpXHJcbiAgICAgICAgICAgIC8vdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChrZXlGb3VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgICAgICAgICAgIHRoaXMubG9hZERlZmF1bHRWYWx1ZXMoKVxyXG4gICAgICAgICAgICAvL3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5ld1ZhbHVlKG92ZXJyaWRlOiBPdmVycmlkZUNvbmZpZywgY29tcGxldGVkOiBib29sZWFuKTogYW55IHtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gY29tcGxldGVkID8gb3ZlcnJpZGUubmV3UHJvcGVydHlWYWx1ZTogb3ZlcnJpZGUuZWxzZU5ld1Byb3BlcnR5VmFsdWU7XHJcbiAgICBpZiAobmV3VmFsdWUgJiYgdHlwZW9mKG5ld1ZhbHVlKSA9PSBcInN0cmluZ1wiKXtcclxuICAgICAgaWYgKCFuZXdWYWx1ZS5zdGFydHNXaXRoKCckJykgJiYgIW5ld1ZhbHVlLnN0YXJ0c1dpdGgoJ0AnKSl7XHJcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGxvYWREZWZhdWx0VmFsdWVzKCl7XHJcbiAgICBpZiAodGhpcy5jb250cm9sPy5jb25maWcgJiYgdGhpcy5jb250cm9sLnN1YnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCB0aGlzLmNvbnRyb2wuc3VidHlwZSA9PSAnbXVsdGlzZWxlY3QnKSB0aGlzLmxvYWREYXRhRnJvbVNlcnZpY2UoKTtcclxuICAgIGlmICh0aGlzLmNvbnRyb2w/LnN1YnR5cGUgPT0gJ2F1dG9jb21wbGV0ZScpIHRoaXMuZXh0cmFjVmFsdWVGcm9tQ29udHJvbEJ1c3F1ZWRhKCk7XHJcbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSAnZGF0ZScpIHRoaXMuaW5zdGFuY2VEYXRlKCk7XHJcbiAgICBpZiAodGhpcy5jb250cm9sPy5zdWJ0eXBlID09IFwiZmlsZVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZEZpbGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb250cm9sPy50eXBlID09ICdzdHJpbmcnKSB0aGlzLmxlbmdodFdvcmQgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZS5sZW5ndGggOiAwXHJcbiAgICBpZiAodGhpcy5jb250cm9sPy5zdWJ0eXBlID09ICdzd2l0Y2gnKSB0aGlzLmluc3RhbmNlQm9vbEZpZWxkKClcclxuICB9XHJcbiAgaW5zdGFuY2VCb29sRmllbGQoKSB7XHJcbiAgICB0aGlzLnRlbXBWYWx1ZSA9IHRoaXMudmFsdWVcclxuICAgIGlmICh0aGlzLnZhbHVlID09IHRydWUgJiYgdGhpcy5jb250cm9sLnRydWVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbnRyb2wudHJ1ZVZhbHVlXHJcbiAgICAgIHRoaXMuc2VuZFZhbHVlKClcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMudmFsdWUgPT0gZmFsc2UgJiYgdGhpcy5jb250cm9sLmZhbHNlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb250cm9sLmZhbHNlVmFsdWVcclxuICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VTd2l0Y2goKXtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLnRlbXBWYWx1ZVxyXG4gICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gIH1cclxuXHJcbiAgbG9hZEZpbGVzKCl7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWVcclxuICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFtdXHJcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuY29udHJvbC5jb25maWcubmFtZVBhdHRlcm4gJiYgdGhpcy5jb250cm9sLnR5cGUgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBsZXQgdXJsczogc3RyaW5nW10gPSB0aGlzLmNvbnRyb2wuY29uZmlnLnNlcGFyYXRvciA/IHRoaXMudmFsdWUuc3BsaXQoXCIsXCIpIDogW3RoaXMudmFsdWVdXHJcbiAgICAgIHVybHMuZm9yRWFjaCh1cmwgPT4gdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goe3VybDp1cmwsICBuYW1lOnRoaXMuZ2V0TmFtZUZpbGUodGhpcy5jb250cm9sLmNvbmZpZy5uYW1lUGF0dGVybiwgdXJsKX0pKVxyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5jb250cm9sLmNvbmZpZy5uYW1lUGF0dGVybiAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSBcImFycmF5XCIpIHtcclxuICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKCh1cmw6c3RyaW5nKSA9PiB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaCh7dXJsOnVybCwgIG5hbWU6dGhpcy5nZXROYW1lRmlsZSh0aGlzLmNvbnRyb2wuY29uZmlnLm5hbWVQYXR0ZXJuLCB1cmwpfSkpXHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcil7XHJcbiAgICBpZiAoKCF0aGlzLmNvbnRyb2wuY29uZmlnPy5saW1pdCB8fCB0aGlzLmNvbnRyb2wuY29uZmlnPy5saW1pdCA9PSAxKSAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnR5cGUgPT0gXCJhcnJheVwiKSB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcclxuICB9XHJcblxyXG4gIGdldE5hbWVGaWxlKG5hbWVQYXR0ZXJuOiBzdHJpbmcsIHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4T2JqID0gbmV3IFJlZ0V4cChuYW1lUGF0dGVybik7XHJcbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4T2JqLmV4ZWModXJsKTtcclxuICAgIGlmICghbWF0Y2gpIHRocm93IG5ldyBFcnJvcihcIkVsIHBhdHRlcm4gbm8gY29pbmNpZGUgY29uIGxhIHVybC4gXCIgKyB1cmwpO1xyXG4gICAgcmV0dXJuIG1hdGNoWzBdO1xyXG4gIH1cclxuXHJcbiAgc2VuZFZhbHVlKCkge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbC50eXBlID09IFwic3RyaW5nXCIgJiYgdGhpcy52YWx1ZSA9PSBcIlwiICYmIHRoaXMuY29udHJvbC5jb25maWc/LmFsbG93RW1wdHkgPT0gZmFsc2UpIHRoaXMudmFsdWUgPSBudWxsXHJcbiAgICB0aGlzLnNldFZhbHVlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzZW5kTnVtYmVyVmFsdWUoJGV2ZW50OiBhbnkpe1xyXG4gICAgdGhpcy52YWx1ZSA9ICRldmVudC52YWx1ZVxyXG4gICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gIH1cclxuXHJcbiAgb25JbnB1dEVtYWlsKGZvcmNlOmJvb2xlYW4pe1xyXG4gICAgY29uc3QgYXV4ID0gTWF0aC5hYnModGhpcy5sZW5naHRXb3JkIC0gdGhpcy52YWx1ZS5sZW5ndGgpXHJcbiAgICB0aGlzLmxlbmdodFdvcmQgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG4gICAgaWYgKGF1eCA+IDEgfHwgZm9yY2Upe1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKC8oW1xcd1xcLlxcLV9dKyk/XFx3K0BbXFx3LV9dKyhcXC5cXHcrKXsxLH0vaWdtKTtcclxuICAgICAgICBpZiAocmVnZXgudGVzdCh0aGlzLnZhbHVlKSkgdGhpcy5zZW5kVmFsdWUoKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7IHNldmVyaXR5OiAnd2FybicsIGRldGFpbDogJ0VsIGNvcnJlbyBubyBlcyB2w6FsaWRvJyB9LCB0aGlzLnByaW1lQ2hlY2tpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VuZFZhbHVlRnJvbU9iamVjdChldmVudDogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGVvZiAodGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZSkpIHtcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICB0aGlzLmNvbnRyb2wuY29uZmlnLm9wdGlvblZhbHVlLmZvckVhY2goKG9wOiBhbnkpID0+IG9wWyd2YWx1ZSddID0gZXZlbnRbb3Aua2V5XSlcclxuICAgICAgICB0aGlzLnNldFZhbHVlLmVtaXQodGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZS5lbWl0KGV2ZW50W3RoaXMuY29udHJvbC5jb25maWcub3B0aW9uVmFsdWVdKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWREYXRhRnJvbVNlcnZpY2UoKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmRhdGFGcm9tU2VydmljZSA9IFtdO1xyXG4gICAgY29uc3Qgb3A6IE9wZXJhdGlvbiA9IHRoaXMuY29udHJvbC5jb25maWdcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0VVJMKG9wLCB1bmRlZmluZWQsIHVuZGVmaW5lZClcclxuICAgIGlmICh0aGlzLmNvbnRyb2wuY29uZmlnPy5jdXN0b21PcHRpb25zKXtcclxuICAgICAgdGhpcy5kYXRhRnJvbVNlcnZpY2UgPSB0aGlzLmNvbnRyb2wuY29uZmlnLmN1c3RvbU9wdGlvbnNcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwpXHJcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFGcm9tU2VydmljZSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkRGF0YUZyb21Db250cm9sQnVzcXVlZGFTZXJ2aWNlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IG9wOiBPcGVyYXRpb24gPSB0aGlzLmNvbnRyb2wuY29uZmlnXHJcbiAgICBsZXQgdXJsID0gdGhpcy5jcnVkU2VydmljZS5nZXRVUkwob3ApXHJcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgnQHF1ZXJ5JywgZXZlbnQ/LnF1ZXJ5IHx8ICcnKVxyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5nZW5lcmljUmVxdWVzdCh0aGlzLmNvbnRyb2wuY29uZmlnLm1ldGhvZCwgdXJsKVxyXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFGcm9tU2VydmljZSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFGcm9tU2VydmljZT8ubGVuZ3RoID09IDAgJiYgdGhpcy5jb250cm9sLmFsbG93Q3VzdG9tT3B0aW9uKSB7XHJcbiAgICAgICAgICAvL2FncmVnYXIgdW4gY2FtcG8gcXVlIGVsIHVzdWFyaW8gaGF5YSBkaWdpdGFkb1xyXG4gICAgICAgICAgbGV0IG5ld0l0ZW06IGFueSA9IHt9XHJcbiAgICAgICAgICBuZXdJdGVtW3RoaXMuY29udHJvbC5maWVsZF0gPSB0aGlzLnRlbXBWYWx1ZVxyXG4gICAgICAgICAgbmV3SXRlbVt0aGlzLmNvbnRyb2wuY29uZmlnLm9wdGlvblZhbHVlXSA9IHRoaXMudGVtcFZhbHVlXHJcbiAgICAgICAgICB0aGlzLmRhdGFGcm9tU2VydmljZS5wdXNoKG5ld0l0ZW0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZXh0cmFjVmFsdWVGcm9tQ29udHJvbEJ1c3F1ZWRhKCl7XHJcbiAgICBjb25zdCBvcDogT3BlcmF0aW9uID0gdGhpcy5jb250cm9sLmNvbmZpZ1xyXG4gICAgbGV0IHVybCA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0VVJMKG9wKVxyXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoJ0BxdWVyeScsIHRoaXMudmFsdWUpXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuZGF0YT8ubGVuZ3RoID09IDEgJiYgcmVzLmRhdGFbMF1bdGhpcy5jb250cm9sLmZpZWxkXSl7XHJcbiAgICAgICAgICB0aGlzLnRlbXBWYWx1ZSA9IHJlcy5kYXRhWzBdXHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gcmVzLmRhdGFbMF1bdGhpcy5jb250cm9sLmZpZWxkXVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgb25VcGxvYWQoZXZlbnQ6IEZpbGVbXSkge1xyXG4gICAgdGhpcy51cGxvYWRpbmdGaWxlcyA9IHRydWVcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb250cm9sLmNvbmZpZy5wYXRoIHx8ICdJbWFnZW5lcy9DUlVEL3RlbXAnO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdSdXRhJywgYC8ke3BhdGh9YCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudC5sZW5ndGg7IGkrKykgZm9ybURhdGEuYXBwZW5kKGB1cGxvYWRGaWxlXyR7aX1gLCBldmVudFtpXSk7XHJcbiAgICBjb25zdCBvcDogT3BlcmF0aW9uID0gdGhpcy5jb250cm9sLmNvbmZpZ1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5jcnVkU2VydmljZS5nZXRVUkwob3ApXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwsIGZvcm1EYXRhKVxyXG4gICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICBsZXQgc2VwYXJhdG9yID0gdGhpcy5jb250cm9sLmNvbmZpZz8uc2VwYXJhdG9yIHx8IFwiLFwiXHJcbiAgICAgIC8vc2UgYXN1bWUgcXVlIHZpZW5lIG5hbWVQYXR0ZXJuXHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2wudHlwZSA9PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gZXZlbnQubWFwKGYgPT4gYCR7dGhpcy5nZW5lcmFsU2VydmljZS5qc29uQ29uZmlnLlNlcnZlcn0ke3BhdGh9LyR7Zi5uYW1lfWApLmpvaW4oc2VwYXJhdG9yKVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmNvbnRyb2wudHlwZSA9PSBcImFycmF5XCIpIHRoaXMudmFsdWUgPSBldmVudC5tYXAoZiA9PiBgJHt0aGlzLmdlbmVyYWxTZXJ2aWNlLmpzb25Db25maWcuU2VydmVyfSR7cGF0aH0vJHtmLm5hbWV9YClcclxuICAgICAgLy8gU0kgTk8gVFJBRSBuYW1lUGF0dGVybiwgZGViZSByZXRvcm5hciB1biBvYmpldG8gY29uIGVsIG5vbWJyZSB5IGhyZWZcclxuICAgICAgLy9lbHNlIGlmICh0aGlzLmNvbnRyb2wuY29uZmlnLm5hbWVQYXR0ZXJuICYmIHRoaXMuY29udHJvbC50eXBlID09IFwiYXJyYXlcIikgdGhpcy52YWx1ZSA9IGV2ZW50Lm1hcCh4ID0+IHgubmFtZSlcclxuICAgICAgLy9lbHNlIGlmICghdGhpcy5jb250cm9sLmNvbmZpZy5uYW1lUGF0dGVybiAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSBcImFycmF5XCIpIHRoaXMudmFsdWUgPSBldmVudC5tYXAoZiA9PiBgJHt0aGlzLmdlbmVyYWxTZXJ2aWNlLmpzb25Db25maWcuU2VydmVyfSR7cGF0aH0vJHtmLm5hbWV9YClcclxuICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgICBsZXQgbXNnID0gIXRoaXMuY29udHJvbC5jb25maWcubGltaXQgfHwgdGhpcy5jb250cm9sLmNvbmZpZy5saW1pdCA9PSAxID8gXCJBcmNoaXZvIGNhcmdhZG8gY29ycmVjdGFtZW50ZSFcIjogXCJBcmNoaXZvcyBjYXJnYWRvcyBjb3JyZWN0YW1lbnRlIVwiXHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGROb3RpZmljYXRpb24oeyBzZXZlcml0eTogJ2luZm8nLCBkZXRhaWw6IG1zZyB9LCB0aGlzLnByaW1lQ2hlY2tpbmcoKSlcclxuICAgIH0pXHJcbiAgICAuY2F0Y2goKCkgPT4gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7IHNldmVyaXR5OiAnZXJyb3InLCBkZXRhaWw6IGBFcnJvciBhbCBjYXJnYXIgZWwgYXJjaGl2byFgIH0sIHRoaXMucHJpbWVDaGVja2luZygpKSlcclxuICAgIC5maW5hbGx5KCgpID0+IHRoaXMudXBsb2FkaW5nRmlsZXMgPSBmYWxzZSlcclxuXHJcbiAgfVxyXG5cclxuICByZWZyZXNEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbD8uY29uZmlnPy5lbmRwb2ludHRlbXApIHRoaXMubG9hZERhdGFGcm9tU2VydmljZSgpO1xyXG4gIH1cclxuICBzZXREZWZhdWx0VmFsdWUoKXtcclxuICAgIHRoaXMudGVtcFZhbHVlID0ge31cclxuICAgIGlmICghdGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25MYWJlbCkgY29uc29sZS5lcnJvcihcIk5vIGVzdGEgYmllbiBjb25maWd1cmFkbyBlbCBjb250cm9sIFwiLCB0aGlzLmNvbnRyb2wpXHJcbiAgICBlbHNlIHRoaXMudGVtcFZhbHVlW3RoaXMuY29udHJvbC5jb25maWcub3B0aW9uTGFiZWxdID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWU6IFwiXCJcclxuXHJcbiAgfVxyXG5cclxuICBzZWFyY2hWYWx1ZSh2YWx1ZTogc3RyaW5nKXtcclxuICAgIGNvbnN0IG9wOiBPcGVyYXRpb24gPSB0aGlzLmNvbnRyb2wuY29uZmlnXHJcbiAgICBsZXQgdXJsID0gdGhpcy5jcnVkU2VydmljZS5nZXRVUkwob3AsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxyXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoJ0BpZCcsIHZhbHVlKVxyXG5cclxuXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmRhdGE/Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgdGhpcy5zZW5kT2JqZWN0LmVtaXQoeyBkYXRhOiByZXMuZGF0YVswXSwgb3B0aW9uVmFsdWU6IHRoaXMuY29udHJvbC5jb25maWcub3B0aW9uVmFsdWUgfSApXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkTm90aWZpY2F0aW9uKHtzZXZlcml0eTogJ3dhcm4nLCBkZXRhaWw6YFZhbG9yIG5vIGVuY29udHJhZG8uYH0sIHRoaXMucHJpbWVDaGVja2luZygpKVxyXG4gICAgICAgICAgdGhpcy5zZW5kT2JqZWN0LmVtaXQoeyBkYXRhOiBudWxsLCBvcHRpb25WYWx1ZTogdGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZSB9IClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnI9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7c2V2ZXJpdHk6ICdlcnJvcicsIGRldGFpbDpgRXJyb3IgYWwgY29uc3VtaXIgZWwgc2VydmljaW8uYH0sdGhpcy5wcmltZUNoZWNraW5nKCkpXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcmltZUNoZWNraW5nKCl7XHJcbiAgICByZXR1cm4gbmV3IFJlcXVlc3RDaGVja2luZyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSwgdW5kZWZpbmVkKVxyXG4gIH1cclxuXHJcbiAgaW5zdGFuY2VEYXRlKCl7XHJcbiAgICBjb25zdCBmb3JtYXQgPSAodGhpcy5jb250cm9sIGFzIGFueSkuZm9ybWF0TW9tZW50XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWUpe1xyXG4gICAgICBpZiAodHlwZW9mKHRoaXMudmFsdWUpID09IFwic3RyaW5nXCIgJiYgKHRoaXMudmFsdWUgYXMgc3RyaW5nKS5pbmNsdWRlcyhcIlRcIikpIHRoaXMudmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YodGhpcy52YWx1ZSkgPT0gXCJzdHJpbmdcIikgdGhpcy52YWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlLCBmb3JtYXQpLnRvRGF0ZSgpO1xyXG4gICAgICB0aGlzLnRlbXBWYWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlKS5mb3JtYXQoXCJERC9NTS9ZWVlZXCIpXHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIHRoaXMudGVtcFZhbHVlID0gbnVsbFxyXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENhc3QgdGVtcFZhbHVlIHRvIGRhdGVcclxuICAgKi9cclxuICBvbkNoYW5nZVNEYXRlKCl7XHJcbiAgICBjb25zdCBhdXggPSBtb21lbnQodGhpcy50ZW1wVmFsdWUsIFwiREQvTU0vWVlZWVwiKVxyXG4gICAgaWYgKGF1eC5pc1ZhbGlkKCkpe1xyXG4gICAgICB0aGlzLnZhbHVlID0gYXV4LnRvRGF0ZSgpO1xyXG4gICAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50ZW1wVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkTm90aWZpY2F0aW9uKHsgc2V2ZXJpdHk6ICd3YXJuJywgZGV0YWlsOiAnTGEgZmVjaGEgbm8gZXMgdsOhbGlkYScgfSwgdGhpcy5wcmltZUNoZWNraW5nKCkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgb25DaGFuZ2VEYXRlKCl7XHJcbiAgICB0aGlzLnRlbXBWYWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlKS5mb3JtYXQoXCJERC9NTS9ZWVlZXCIpXHJcbiAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgfVxyXG5cclxuICAgIG9uVG91Y2hEZXNjcmlwdGlvbigpIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHRoaXMudG9vbHRpcHMuZ2V0KDApPy5hY3RpdmF0ZSgpXHJcbiAgICAgIH1jYXRjaChleCl7fVxyXG5cclxuICB9XHJcblxyXG4gIG9uVW5Ub3VjaERlc2NyaXB0aW9uKCkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy50b29sdGlwcy5nZXQoMCk/LmRlYWN0aXZhdGUoKVxyXG4gICAgICB9Y2F0Y2goZXgpe31cclxufVxyXG5cclxuICBkb0ZvY3VzT3V0KCl7XHJcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5ibHVyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tlZEFkZHJlcygpe1xyXG4gICAgdGhpcy5hZGRyZXNzQ2xpY2tlZC5lbWl0KClcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUZW1wVmFsdWVcIj48cCAqbmdJZj1cInRlbXBWYWx1ZVwiPnt7dGVtcFZhbHVlW2NvbnRyb2wuZmllbGRdfX08L3A+PC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIXNob3dUZW1wVmFsdWVcIiBbbmdTd2l0Y2hdPVwiY29udHJvbC50eXBlXCIgI2NjIGNsYXNzPVwiY29udHJvbC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cclxuICAgICAgICA8bGFiZWwgW2Zvcl09XCJsYWJlbFwiPnt7bGFiZWx9fTwvbGFiZWw+XHJcbiAgICAgICAgPGkgI3Rvb2x0aXAgKm5nSWY9XCJjb250cm9sLnRvb2x0aXBcIiBjbGFzcz1cInBpIHBpLXF1ZXN0aW9uLWNpcmNsZVwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiY29udHJvbC50b29sdGlwUG9zaXRpb24gfHwgJ3RvcCdcIiBbcFRvb2x0aXBdPVwiY29udHJvbC50b29sdGlwXCJcclxuICAgICAgICAgICAgKHRvdWNoc3RhcnQpPVwib25Ub3VjaERlc2NyaXB0aW9uKClcIiAodG91Y2hlbmQpPVwib25VblRvdWNoRGVzY3JpcHRpb24oKVwiPjwvaT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdHJpbmcnXCIgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbnRyb2wuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW5wdXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBbbmFtZV09XCJsYWJlbFwiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChpbnB1dCk9XCJzZW5kVmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIiBbYXV0b2NvbXBsZXRlXT1cImNvbnRyb2wuYXV0b2NvbXBsZXRlIHx8ICdvZmYnXCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW3Jvd3NdPVwiY29udHJvbC5jb25maWc/LnJvd3MgPyBjb250cm9sLmNvbmZpZy5yb3dzIDogNFwiIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJzZW5kVmFsdWUoKVwiIHBJbnB1dFRleHRhcmVhIFtkaXNhYmxlZF09XCJjb250cm9sLmNvbmZpZz8uZGlzYWJsZWQgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdXRvUmVzaXplXT1cImNvbnRyb2wuY29uZmlnPy5hdXRvcmVzaXplIHx8IGZhbHNlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFzc3dvcmQnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwicGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGlucHV0KT1cInNlbmRWYWx1ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VtYWlsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJlbWFpbEBleGFtcGxlLmNvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIiBhdXRvY29tcGxldGU9XCJlbWFpbFwiIChpbnB1dCk9XCJvbklucHV0RW1haWwoZmFsc2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwib25JbnB1dEVtYWlsKHRydWUpXCIgKGtleXVwLmVudGVyKT1cImRvRm9jdXNPdXQoKVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Bob25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtaW5wdXRNYXNrIG1hc2s9XCIoOTk5KSA5OTktOTk5OVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIig5OTkpIDk5OS05OTk5XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiIGF1dG9jb21wbGV0ZT1cInRlbC1uYXRpb25hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3VubWFza109XCJjb250cm9sLnVubWFzayB8fCBmYWxzZVwiIChvbkNvbXBsZXRlKT1cInNlbmRWYWx1ZSgpXCI+PC9wLWlucHV0TWFzaz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhZGRyZXNzJ1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cInZhbHVlIHwgZm9ybWF0QWRkcmVzczogY29udHJvbC5zZXBhcmFkb3JcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbZGlzYWJsZWRdPVwiY2xpY2tlZFwiIChrZXlkb3duKT1cIm9uQ2xpY2tlZEFkZHJlcygpXCIgKGZvY3VzKT1cIm9uQ2xpY2tlZEFkZHJlcygpXCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZW51bSdcIj5cclxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImNvbnRyb2wuZW51bVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiAob25DaGFuZ2UpPVwic2VuZFZhbHVlKClcIiBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNjaW9uZSB1bmEgb3BjacOzblwiIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW2xhenldPVwiaXNMb2FkaW5nXCIgW29wdGlvbnNdPVwiZGF0YUZyb21TZXJ2aWNlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChvbkNoYW5nZSk9XCJzZW5kVmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbnRyb2wuY29uZmlnLm9wdGlvbkxhYmVsXCIgW3Nob3dDbGVhcl09XCJjb250cm9sLmNvbmZpZy5zaG93Q2xlYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJjb250cm9sLmZpZWxkIHx8IGNvbnRyb2wuY29uZmlnLm9wdGlvblZhbHVlXCIgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjY2lvbmUgdW5hIG9wY2nDs25cIiBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bjpyZXBsYWNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW2xhenldPVwiaXNMb2FkaW5nXCIgW29wdGlvbnNdPVwiZGF0YUZyb21TZXJ2aWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2VuZFZhbHVlRnJvbU9iamVjdCgkZXZlbnQpXCIgW29wdGlvbkxhYmVsXT1cImNvbnRyb2wuY29uZmlnLm9wdGlvbkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjY2lvbmUgdW5hIG9wY2nDs25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2F1dG9jb21wbGV0ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCIgW3N1Z2dlc3Rpb25zXT1cImRhdGFGcm9tU2VydmljZVwiIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cImxvYWREYXRhRnJvbUNvbnRyb2xCdXNxdWVkYVNlcnZpY2UoJGV2ZW50KVwiIFtmaWVsZF09XCJjb250cm9sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWluTGVuZ3RoXT1cIjFcIiAob25TZWxlY3QpPVwic2VuZFZhbHVlRnJvbU9iamVjdCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJ0ZW1wVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWF1dG9Db21wbGV0ZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dDpzZWFyY2gnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnB1dGdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dCBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGZvY3Vzb3V0KT1cInNlbmRWYWx1ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImRvRm9jdXNPdXQoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktc2VhcmNoXCIgKGNsaWNrKT1cInNlYXJjaFZhbHVlKHZhbHVlKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIj5cclxuICAgICAgICAgICAgICAgIDxzZi1maWxlLXVwbG9hZCAqbmdJZj1cIiFpc0xvYWRpbmdcIiBbYWNjZXB0XT1cImNvbnRyb2wuY29uZmlnPy5hY2NlcHQgfHwgJ2ltYWdlLyosYXBwbGljYXRpb24vcGRmJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwidXBsb2FkaW5nRmlsZXNcIiBbZmlsZXNdPVwidXBsb2FkZWRGaWxlc1wiIFtjb25maWdOYW1lXT1cImNvbnRyb2wuY29uZmlnPy5jb25maWdOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGltaXRdPVwiY29udHJvbC5jb25maWc/LmxpbWl0IHx8IDFcIiAob25VcGxvYWQpPVwib25VcGxvYWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uRGVsZXRlRmlsZSk9XCJvbkRlbGV0ZUZpbGUoJGV2ZW50KVwiPjwvc2YtZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb250cm9sLnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NhbGVuZGFyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dE1hc2sgWyhuZ01vZGVsKV09XCJ0ZW1wVmFsdWVcIiBtYXNrPVwiOTkvOTkvOTk5OVwiIFtwbGFjZWhvbGRlcl09XCJjb250cm9sLnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNvbXBsZXRlKT1cIm9uQ2hhbmdlU0RhdGUoKVwiIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWlucHV0TWFzaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2FsZW5kYXIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIGNsYXNzPVwib25seS1pY29uXCIgW21vbnRoTmF2aWdhdG9yXT1cInRydWVcIiBbeWVhck5hdmlnYXRvcl09XCJ0cnVlXCIgeWVhclJhbmdlPVwiMTkwMDoyMDM1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cImNvbnRyb2wuZm9ybWF0IHx8ICd5eS1tbS1kZCdcIiBhcHBlbmRUbz1cImJvZHlcIiBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd09uRm9jdXNdPVwiIWNvbnRyb2wuaGlkZVwiIFtwbGFjZWhvbGRlcl09XCJjb250cm9sLnBsYWNlaG9sZGVyIHx8ICdhYWFhLW1tLWRkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG91Y2hVSV09XCJjb250cm9sLnRvdWNoVUkgfHwgZmFsc2VcIiBbc2hvd0ljb25dPVwiY29udHJvbC5zaG93SWNvbiB8fCBmYWxzZVwiIChvblNlbGVjdCk9XCJvbkNoYW5nZURhdGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25CbHVyKT1cIm9uQ2hhbmdlRGF0ZSgpXCI+PC9wLWNhbGVuZGFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpYydcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb250cm9sLnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgW25nTW9kZWxdPVwidmFsdWVcIiAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWUgPSAkZXZlbnQ7IHNlbmRWYWx1ZSgpXCIgbW9kZT1cImRlY2ltYWxcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiY29udHJvbC5taW5GcmFjdGlvbkRpZ2l0cyB8fCAwXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWluXT1cImNvbnRyb2wubWluIHx8IG51bGxcIiBbbWF4XT1cImNvbnRyb2wubWF4IHx8IG51bGxcIiAob25JbnB1dCk9XCJzZW5kTnVtYmVyVmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByZWZpeF09XCJjb250cm9sLmN1cnJlbmN5IHx8ICckICdcIiBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPjwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkZWNpbWFsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgW25nTW9kZWxdPVwidmFsdWVcIiBtb2RlPVwiZGVjaW1hbFwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbHVlID0gJGV2ZW50OyBzZW5kVmFsdWUoKVwiIFttaW5dPVwiY29udHJvbC5taW4gfHwgbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCJjb250cm9sLm1heCB8fCBudWxsXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cImNvbnRyb2wubWluRnJhY3Rpb25EaWdpdHMgfHwgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJjb250cm9sLmxvY2FsZSB8fCB1bmRlZmluZWRcIiBbdXNlR3JvdXBpbmddPVwiY29udHJvbC51c2VHcm91cGluZyB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIj48L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGVyY2VudGFnZSdcIj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFtuZ01vZGVsXT1cInZhbHVlXCIgc3VmZml4PVwiICVcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWx1ZSA9ICRldmVudDsgc2VuZFZhbHVlKClcIiAob25JbnB1dCk9XCJzZW5kVmFsdWUoKVwiIFttaW5dPVwiY29udHJvbC5taW4gfHwgbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCJjb250cm9sLm1heCB8fCBudWxsXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cImNvbnRyb2wubWluRnJhY3Rpb25EaWdpdHMgfHwgMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJjb250cm9sLmxvY2FsZSB8fCB1bmRlZmluZWRcIiBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPjwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkZWNpbWFsOnNlYXJjaCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChmb2N1c291dCk9XCJzZW5kVmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJkb0ZvY3VzT3V0KClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLXNlYXJjaFwiIChjbGljayk9XCJzZWFyY2hWYWx1ZSh2YWx1ZSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FycmF5J1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbnRyb2wuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIj5cclxuICAgICAgICAgICAgICAgIDxzZi1maWxlLXVwbG9hZCAqbmdJZj1cIiFpc0xvYWRpbmdcIiBbbG9hZGluZ109XCJ1cGxvYWRpbmdGaWxlc1wiIFtmaWxlc109XCJ1cGxvYWRlZEZpbGVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnTmFtZV09XCJjb250cm9sLmNvbmZpZz8uY29uZmlnTmFtZVwiIFtsaW1pdF09XCJjb250cm9sLmNvbmZpZz8ubGltaXQgfHwgMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FjY2VwdF09XCJjb250cm9sLmNvbmZpZz8uYWNjZXB0IHx8ICdpbWFnZS8qLGFwcGxpY2F0aW9uL3BkZidcIiAob25VcGxvYWQpPVwib25VcGxvYWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uRGVsZXRlRmlsZSk9XCJvbkRlbGV0ZUZpbGUoJGV2ZW50KVwiPjwvc2YtZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbXVsdGlzZWxlY3QnXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbb3B0aW9uc109XCJkYXRhRnJvbVNlcnZpY2VcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKG9uQ2hhbmdlKT1cInNlbmRWYWx1ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiY29udHJvbC5jb25maWc/Lm9wdGlvbkxhYmVsXCIgW29wdGlvblZhbHVlXT1cImNvbnRyb2wuY29uZmlnPy5vcHRpb25WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbnRyb2wuY29uZmlnPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiY29udHJvbC5jb25maWc/LmRpc3BsYXkgfHwgJ2NoaXAnXCI+PC9wLW11bHRpU2VsZWN0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29udHJvbC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzd2l0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1pbnB1dFN3aXRjaCAgWyhuZ01vZGVsKV09XCJ0ZW1wVmFsdWVcIiAob25DaGFuZ2UpPVwib25DaGFuZ2VTd2l0Y2goKVwiIFtpZF09XCJsYWJlbFwiXHJcbiAgICAgICAgICAgICAgICBbdHJ1ZVZhbHVlXT1cImNvbnRyb2w/LnRydWVWYWx1ZSAhPT0gdW5kZWZpbmVkID8gY29udHJvbD8udHJ1ZVZhbHVlOiBudWxsXCJcclxuICAgICAgICAgICAgICAgIFtmYWxzZVZhbHVlXT1cImNvbnRyb2w/LmZhbHNlVmFsdWUgIT09IHVuZGVmaW5lZCA/IGNvbnRyb2w/LmZhbHNlVmFsdWU6IG51bGxcIj48L3AtaW5wdXRTd2l0Y2g+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG4iXX0=