@sapphire-ion/framework 1.0.28 → 1.0.32

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.
@@ -252,14 +252,14 @@ export class InputSelectComponent extends CustomInput {
252
252
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: InputSelectComponent, selector: "input-select", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { items: "itemsChange" }, host: { listeners: { "document:keydown": "HandleKeyboardEvent($event)" } }, providers: [
253
253
  ...InputProviderFactory.GetProviders(InputSelectComponent),
254
254
  { provide: CustomInput, useExisting: forwardRef(() => InputSelectComponent) },
255
- ], queries: [{ propertyName: "labelTemplate", first: true, predicate: SIonLabelTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SIonOptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: SIonPlaceholderTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }, { propertyName: "inputSelectLabel", first: true, predicate: ["inputSelectLabel"], descendants: true }, { propertyName: "inputSearchBar", first: true, predicate: ["inputSearchBar"], descendants: true }, { propertyName: "selectContent", first: true, predicate: ["selectContent"], descendants: true }, { propertyName: "popover", first: true, predicate: SIonPopoverComponent, descendants: true }, { propertyName: "modal", first: true, predicate: IonModal, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event);\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full min-h-6 overflow-hidden relative\">\r\n <div class=\"absolute left-0 top-0 overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n <div class=\"error-container\" (click)=\"configuration().loader.Refresh()\" [class.active]=\"configuration().loader.error && !loadingFromLoader\">\r\n <ion-icon class=\"text-xl\" color=\"danger\" name=\"refresh-circle\"></ion-icon>\r\n </div>\r\n</div>\r\n\r\n@if(!disabled()){\r\n <ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n </ion-modal>\r\n\r\n <sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n </sion-popover>\r\n}\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @if(floatingVisible){\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}.error-container{pointer-events:none;position:absolute;bottom:0;left:0;z-index:200;display:flex;width:100%;height:100%;--tw-translate-y: -3rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));align-items:center;justify-content:center;opacity:0;will-change:opacity,auto;transition:opacity .2s ease-in-out,transform .2s ease-in-out}.error-container.active{pointer-events:auto!important;--tw-translate-y: 0px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important;opacity:1!important}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonModal, selector: "ion-modal" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SIonPopoverComponent, selector: "sion-popover", inputs: ["fill", "arrow", "flip", "placement", "height", "width", "anchor"], outputs: ["onWillPresent", "onDidPresent", "onWillDismiss", "onDidDismiss", "isVisibleChange"] }] }); }
255
+ ], queries: [{ propertyName: "labelTemplate", first: true, predicate: SIonLabelTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SIonOptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: SIonPlaceholderTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }, { propertyName: "inputSelectLabel", first: true, predicate: ["inputSelectLabel"], descendants: true }, { propertyName: "inputSearchBar", first: true, predicate: ["inputSearchBar"], descendants: true }, { propertyName: "selectContent", first: true, predicate: ["selectContent"], descendants: true }, { propertyName: "popover", first: true, predicate: SIonPopoverComponent, descendants: true }, { propertyName: "modal", first: true, predicate: IonModal, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event);\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full min-h-6 overflow-hidden relative\">\r\n <div class=\"absolute left-0 top-0 overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n <div class=\"error-container\" (click)=\"configuration().loader.Refresh()\" [class.active]=\"configuration().loader.error && !loadingFromLoader\">\r\n <ion-icon class=\"text-xl\" color=\"danger\" name=\"refresh-circle\"></ion-icon>\r\n </div>\r\n</div>\r\n\r\n@if(!disabled()){\r\n <ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ion-header>\r\n <ion-toolbar>\r\n <ion-buttons slot=\"end\">\r\n <ion-button (click)=\"modal.dismiss()\">\r\n <ion-icon name=\"close-circle\"></ion-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n </ion-header>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n </ion-modal>\r\n\r\n <sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n </sion-popover>\r\n}\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}.error-container{pointer-events:none;position:absolute;bottom:0;left:0;z-index:200;display:flex;width:100%;height:100%;--tw-translate-y: -3rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));align-items:center;justify-content:center;opacity:0;will-change:opacity,auto;transition:opacity .2s ease-in-out,transform .2s ease-in-out}.error-container.active{pointer-events:auto!important;--tw-translate-y: 0px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important;opacity:1!important}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonModal, selector: "ion-modal" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SIonPopoverComponent, selector: "sion-popover", inputs: ["fill", "arrow", "flip", "placement", "height", "width", "anchor"], outputs: ["onWillPresent", "onDidPresent", "onWillDismiss", "onDidDismiss", "isVisibleChange"] }] }); }
256
256
  }
257
257
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InputSelectComponent, decorators: [{
258
258
  type: Component,
259
259
  args: [{ selector: 'input-select', providers: [
260
260
  ...InputProviderFactory.GetProviders(InputSelectComponent),
261
261
  { provide: CustomInput, useExisting: forwardRef(() => InputSelectComponent) },
262
- ], template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event);\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full min-h-6 overflow-hidden relative\">\r\n <div class=\"absolute left-0 top-0 overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n <div class=\"error-container\" (click)=\"configuration().loader.Refresh()\" [class.active]=\"configuration().loader.error && !loadingFromLoader\">\r\n <ion-icon class=\"text-xl\" color=\"danger\" name=\"refresh-circle\"></ion-icon>\r\n </div>\r\n</div>\r\n\r\n@if(!disabled()){\r\n <ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n </ion-modal>\r\n\r\n <sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n </sion-popover>\r\n}\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @if(floatingVisible){\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}.error-container{pointer-events:none;position:absolute;bottom:0;left:0;z-index:200;display:flex;width:100%;height:100%;--tw-translate-y: -3rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));align-items:center;justify-content:center;opacity:0;will-change:opacity,auto;transition:opacity .2s ease-in-out,transform .2s ease-in-out}.error-container.active{pointer-events:auto!important;--tw-translate-y: 0px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important;opacity:1!important}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"] }]
262
+ ], template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event);\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full min-h-6 overflow-hidden relative\">\r\n <div class=\"absolute left-0 top-0 overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n <div class=\"error-container\" (click)=\"configuration().loader.Refresh()\" [class.active]=\"configuration().loader.error && !loadingFromLoader\">\r\n <ion-icon class=\"text-xl\" color=\"danger\" name=\"refresh-circle\"></ion-icon>\r\n </div>\r\n</div>\r\n\r\n@if(!disabled()){\r\n <ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ion-header>\r\n <ion-toolbar>\r\n <ion-buttons slot=\"end\">\r\n <ion-button (click)=\"modal.dismiss()\">\r\n <ion-icon name=\"close-circle\"></ion-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n </ion-header>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n </ion-modal>\r\n\r\n <sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n </sion-popover>\r\n}\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}.error-container{pointer-events:none;position:absolute;bottom:0;left:0;z-index:200;display:flex;width:100%;height:100%;--tw-translate-y: -3rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));align-items:center;justify-content:center;opacity:0;will-change:opacity,auto;transition:opacity .2s ease-in-out,transform .2s ease-in-out}.error-container.active{pointer-events:auto!important;--tw-translate-y: 0px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important;opacity:1!important}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"] }]
263
263
  }], ctorParameters: () => [], propDecorators: { labelTemplate: [{
264
264
  type: ContentChild,
265
265
  args: [SIonLabelTemplateDirective, { read: TemplateRef }]
@@ -300,4 +300,4 @@ class ItemValue {
300
300
  function isPortrait() {
301
301
  return window.innerHeight > window.innerWidth;
302
302
  }
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtc2VsZWN0L2lucHV0LXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQW9CLEtBQUssRUFBZSxLQUFLLEVBQWUsTUFBTSxFQUFVLFdBQVcsRUFBRSxTQUFTLEdBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQ2xQLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpELE9BQU8sRUFBOEIsZ0NBQWdDLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNoSSxPQUFPLEVBQXlCLDJCQUEyQixF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V0FBVyxFQUFFO2dCQUNFLG1CQUFtQjtzQkFBekYsWUFBWTt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR3hDLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNJLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBc0I3QixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBa0RmLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQTRFQyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ08sT0FBTztzQkFBdkMsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBQ0ksS0FBSztzQkFBdkMsU0FBUzt1QkFBQyxRQUFROztBQXlDckIsTUFBTSxTQUFTO0lBQWY7UUFHRSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLGFBQVEsR0FBWSxLQUFLLENBQUM7SUFDNUIsQ0FBQztDQUFBO0FBRUQsU0FBUyxVQUFVO0lBQ2pCLE9BQU8sTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIGNvbXB1dGVkLCBDb250ZW50Q2hpbGQsIGVmZmVjdCwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBpbmplY3QsIEluamVjdG9yLCBpbnB1dCwgSW5wdXRTaWduYWwsIG1vZGVsLCBNb2RlbFNpZ25hbCwgc2lnbmFsLCBTaWduYWwsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSW9uTW9kYWwgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcblxyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCaW5kTGFiZWxGYWN0b3J5LCBCaW5kVmFsdWVGYWN0b3J5LCBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2lucHV0LnNlbGVjdC5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgU0lvblBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wb3BvdmVyL3Npb24tcG9wb3Zlci9zaW9uLXBvcG92ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW5wdXRQcm92aWRlckZhY3RvcnkgfSBmcm9tICcuLi9pbnB1dC1wcm92aWRlci1mYWN0b3J5JztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXQgfSBmcm9tICcuLi9jdXN0b20taW5wdXQnO1xyXG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IFBsYWNlaG9sZGVyVGVtcGxhdGVDb250ZXh0LCBTSW9uUGxhY2Vob2xkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zaW9uLXBsYWNlaG9sZGVyLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE9wdGlvblRlbXBsYXRlQ29udGV4dCwgU0lvbk9wdGlvblRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3Npb24tb3B0aW9uLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IExhYmVsVGVtcGxhdGVDb250ZXh0LCBTSW9uTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zaW9uLWxhYmVsLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlQXRpdm8gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy93ZWIvaHR0cC5hdGl2by5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW5wdXQtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1zZWxlY3QuY29tcG9uZW50LnNjc3MnLCAnLi4vaW5wdXRzLnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIC4uLklucHV0UHJvdmlkZXJGYWN0b3J5LkdldFByb3ZpZGVycyhJbnB1dFNlbGVjdENvbXBvbmVudCksXHJcbiAgICB7IHByb3ZpZGU6IEN1c3RvbUlucHV0LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dFNlbGVjdENvbXBvbmVudCkgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRTZWxlY3RDb21wb25lbnQ8VCA9IGFueT4gZXh0ZW5kcyBDdXN0b21JbnB1dDxUIHwgVFtdPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAvKiogSXRlbXMgZGlzcG9uw612ZWlzIG5vIHNlbGVjdCAqL1xyXG4gIGl0ZW1zICAgICAgICAgICAgOiBNb2RlbFNpZ25hbDxhbnlbXT4gICAgICAgICAgICAgICAgICAgICAgPSBtb2RlbDxhbnlbXT4oW10pO1xyXG4gIC8qKiBDb25maWd1cmHDp8OjbyBkbyBzZWxlY3QgKi9cclxuICBjb25maWd1cmF0aW9uICAgIDogSW5wdXRTaWduYWw8SW5wdXRTZWxlY3RDb25maWd1cmF0aW9uPiA9IGlucHV0PElucHV0U2VsZWN0Q29uZmlndXJhdGlvbj4obmV3IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbigpKTsgXHJcbiAgbG9hZGluZ0Zyb21Mb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY3VycmVudExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgY3VycmVudEl0ZW1zIDogYW55IHwgSXRlbVZhbHVlPGFueT5bXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBcclxuICBTZXRDdXJyZW50SXRlbUxhYmVsKCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbHRlcihwID0+IHAuc2VsZWN0ZWQpLm1hcChwID0+IHAubGFiZWwpLmpvaW4oJywgJyk7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmlsdGVyKHAgPT4gcC5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbmQocCA9PiBwLnNlbGVjdGVkKT8ubGFiZWw7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmluZChwID0+IHAuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbHN0T3B0aW9uc0l0ZW1WYWx1ZTogU2lnbmFsPEl0ZW1WYWx1ZTxhbnk+W10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgYmluZExhYmVsID0gQmluZExhYmVsRmFjdG9yeSh0aGlzLmNvbmZpZ3VyYXRpb24oKSk7XHJcbiAgICBjb25zdCBiaW5kVmFsdWUgPSBCaW5kVmFsdWVGYWN0b3J5KHRoaXMuY29uZmlndXJhdGlvbigpKTtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zKCkuZmlsdGVyKHAgPT4gKHRoaXMuc29tZW50ZUF0aXZvcygpICYmIHRoaXMuaXNTZXJ2aWNlQXRpdm8oKSkgPyBwLmF0aXZvIDogdHJ1ZSkgLm1hcChwID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IG5ldyBJdGVtVmFsdWU8YW55PigpO1xyXG4gICAgICBpdGVtLmxhYmVsID0gYmluZExhYmVsKHApO1xyXG4gICAgICBpdGVtLnZhbHVlID0gYmluZFZhbHVlKHApO1xyXG4gICAgICBpdGVtLml0ZW0gID0gcDtcclxuICAgICAgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUoKSA9PSBpdGVtLnZhbHVlO1xyXG4gICAgICBpdGVtLmRpc2FibGVkID0gcC5kaXNhYmxlZCB8fCBmYWxzZSB8fCAodGhpcy5pc1NlcnZpY2VBdGl2byAmJiBwLmF0aXZvID09IGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgbHN0T3B0aW9uczogSXRlbVZhbHVlPGFueT5bXSA9IFtdO1xyXG4gIFVwZGF0ZUxzdE9wdGlvbnMoc2VhcmNoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIFVwZGF0ZSB0aGUgc2VhcmNoIFxyXG4gICAgaWYgKHNlYXJjaCkge1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMgPSBTZWFyY2g8SXRlbVZhbHVlPGFueT4+KHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLCBzZWFyY2gsIChpdGVtOiBJdGVtVmFsdWU8YW55PikgPT4gaXRlbS5sYWJlbCk7XHJcbiAgICB9IGVsc2UgeyBcclxuICAgICAgdGhpcy5sc3RPcHRpb25zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCk7IFxyXG4gICAgfVxyXG4gIH1cclxuICBVcGRhdGVTZWxlY3RlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIGNvbnN0IGFyciA9IHRoaXMudmFsdWUoKSBhcyBhbnlbXSB8fCBbXTtcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubHN0T3B0aW9ucykge1xyXG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBhcnIuZmluZChwID0+IHAgPT0gaXRlbS52YWx1ZSkgIT0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMuZm9yRWFjaCgoaXRlbTogSXRlbVZhbHVlPGFueT4pID0+IHsgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUoKSA9PSBpdGVtLnZhbHVlOyB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuU2V0Q3VycmVudEl0ZW1MYWJlbCgpO1xyXG4gIH1cclxuXHJcbiAgQENvbnRlbnRDaGlsZChTSW9uTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSAgICAgICwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBsYWJlbFRlbXBsYXRlICAgICAgOiBUZW1wbGF0ZVJlZjxMYWJlbFRlbXBsYXRlQ29udGV4dDxUPj47XHJcbiAgQENvbnRlbnRDaGlsZChTSW9uT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUgICAgICwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBvcHRpb25UZW1wbGF0ZSAgICAgOiBUZW1wbGF0ZVJlZjxPcHRpb25UZW1wbGF0ZUNvbnRleHQ8VD4+O1xyXG4gIEBDb250ZW50Q2hpbGQoU0lvblBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcGxhY2Vob2xkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UGxhY2Vob2xkZXJUZW1wbGF0ZUNvbnRleHQ+O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRDb250YWluZXInKSBpbnB1dENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRTZWxlY3RMYWJlbCcpIGlucHV0U2VsZWN0TGFiZWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIG92ZXJyaWRlIHNldEZvY3VzKGV2ZW50OiBNb3VzZUV2ZW50IHwgbnVsbCk6IHZvaWQgeyBcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRlci5lcnJvciB8fCB0aGlzLmxvYWRpbmdGcm9tTG9hZGVyIHx8IHRoaXMubG9hZGluZygpIHx8IHRoaXMuZGlzYWJsZWQoKSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMuUHJlc2VudChldmVudCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgXHJcbiAgICBzdXBlcigpOyBcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuVXBkYXRlTHN0T3B0aW9ucyh0aGlzLnNlYXJjaFZhbHVlKCkpO1xyXG4gICAgICB0aGlzLlVwZGF0ZVNlbGVjdGVkKCk7XHJcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pIFxyXG4gIH1cclxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24oKS5sb2FkZXIuQWRkQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uKCkubG9hZGVyLlJlZnJlc2godGhpcy5pdGVtcygpKTtcclxuICB9XHJcbiAgaXNTZXJ2aWNlQXRpdm86IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHsgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRGcm9tU2VydmljZSBpbnN0YW5jZW9mIEh0dHBTZXJ2aWNlQXRpdm87IH0pO1xyXG4gIHNvbWVudGVBdGl2b3M6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBIYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBbIFBvcG92ZXIgXVxyXG4gICAgaWYodGhpcy5zZWxlY3RDb250ZW50Py5uYXRpdmVFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpe1xyXG4gICAgICBpZihldmVudC5rZXkgPT0gXCJUYWJcIil7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZiAoZXZlbnQua2V5ID09IFwiRXNjYXBlXCIpe1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5EaXNtaXNzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBbIGlucHV0Q29udGFpbmVyIF1cclxuICAgIGlmKHRoaXMuaW5wdXRDb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpeyBcclxuICAgICAgaWYoW1wiQXJyb3dEb3duXCIsIFwiQXJyb3dVcFwiXS5pbmNsdWRlcyhldmVudC5rZXkpKXtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuUHJlc2VudChldmVudCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBbIGlucHV0U2VsZWN0U2VhcmNoQmFyIF1cclxuICAgIGlmKHRoaXMuaW5wdXRTZWFyY2hCYXIubmF0aXZlRWxlbWVudCA9PSBldmVudC50YXJnZXQpe1xyXG4gICAgICBpZihldmVudC5rZXkgPT0gXCJFbnRlclwiKXtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIC8vIElmIHRoZSBzZWxlY3QgaXMgbm90IGF0aXZvIGlnbm9yZSB0aGUgc2VsZWN0ZWQgaXRlbVxyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmxzdE9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4IV07XHJcbiAgICAgICAgaWYodGhpcy5pc1NlcnZpY2VBdGl2bygpICYmICFpdGVtLml0ZW0uYXRpdm8pIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgdGhpcy5TZWxlY3QoaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgXHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIkFycm93RG93blwiKXtcclxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkSW5kZXggPT0gdW5kZWZpbmVkKXsgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDsgcmV0dXJuOyB9XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAodGhpcy5zZWxlY3RlZEluZGV4IDwgdGhpcy5sc3RPcHRpb25zLmxlbmd0aCAtIDEgPyB0aGlzLnNlbGVjdGVkSW5kZXggKyAxIDogdGhpcy5zZWxlY3RlZEluZGV4KVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIFxyXG4gICAgICBpZihldmVudC5rZXkgPT0gXCJBcnJvd1VwXCIpe1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJbmRleCA9PSB1bmRlZmluZWQpeyB0aGlzLnNlbGVjdGVkSW5kZXggPSAwOyByZXR1cm47IH1cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXggPiAwID8gdGhpcy5zZWxlY3RlZEluZGV4IC0gMSA6IHRoaXMuc2VsZWN0ZWRJbmRleClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAvL1sgU2VhcmNoIEJhciBdXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRTZWFyY2hCYXInKSBpbnB1dFNlYXJjaEJhcjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBzZWFyY2hCYXJDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgc2VhcmNoVmFsdWUgICAgIDogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9ICBzaWduYWw8c3RyaW5nPihcIlwiKTtcclxuICBwcml2YXRlIHNlYXJjaEJhclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIGRlc3Ryb3llZDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLnNlYXJjaEJhckNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICApXHJcbiAgICB0aGlzLnNlYXJjaEJhclN1YnNjcmlwdGlvbiA9IG9ic2VydmFibGUuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7IFxyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KHZhbHVlKTsgXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIENsZWFyU2VhcmNoQmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hCYXJTdWJzY3JpcHRpb24pIHsgdGhpcy5zZWFyY2hCYXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLkNsZWFyU2VhcmNoQmFyKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogVCB8IFRbXSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudmFsdWUuc2V0KG9iaik7XHJcbiAgICB0aGlzLnJ1blZhbGlkYXRpb24oKTtcclxuICAgIHRoaXMuVXBkYXRlU2VsZWN0ZWQoKTtcclxuICB9XHJcbiAgXHJcbiAgb3ZlcnJpZGUgU2V0VmFsdWUob2JqOiBUIHwgVFtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlLnNldChvYmopO1xyXG4gICAgdGhpcy5ydW5WYWxpZGF0aW9uKCk7XHJcbiAgICB0aGlzLlVwZGF0ZVNlbGVjdGVkKCk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gICAgaWYoIXRoaXMuY29uZmlndXJhdGlvbigpLm11bHRpcGxlKXtcclxuICAgICAgdGhpcy5EaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIENsZWFyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbigpLm11bHRpcGxlKXtcclxuICAgICAgdGhpcy5TZXRWYWx1ZShbXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5TZXRWYWx1ZSh1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgU2VsZWN0KGl0ZW1WYWx1ZTogSXRlbVZhbHVlPFQ+KTogdm9pZHtcclxuICAgIGNvbnN0IGl0ZW0gPSBpdGVtVmFsdWUudmFsdWU7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUoKTtcclxuICAgICAgaWYoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKXtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnRWYWx1ZS5maW5kSW5kZXgocCA9PiBwID09IGl0ZW0pO1xyXG4gICAgICAgIGlmKGluZGV4ID4gLTEpe1xyXG4gICAgICAgICAgY3VycmVudFZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN1cnJlbnRWYWx1ZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLlNldFZhbHVlKFsuLi5jdXJyZW50VmFsdWVdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLlNldFZhbHVlKFtpdGVtXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuU2V0VmFsdWUoaXRlbSk7XHJcbiAgICAgIHRoaXMuRGlzbWlzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFsgUG9wb3ZlciAvIE1vZGFsIF1cclxuICBAVmlld0NoaWxkKCdzZWxlY3RDb250ZW50Jykgc2VsZWN0Q29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChTSW9uUG9wb3ZlckNvbXBvbmVudCkgcG9wb3ZlcjogU0lvblBvcG92ZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChJb25Nb2RhbCkgICAgICAgICAgICAgICBtb2RhbDogSW9uTW9kYWw7XHJcblxyXG4gIGZsb2F0aW5nVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBhc3luYyBQcmVzZW50KGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYoaXNQb3J0cmFpdCgpKXtcclxuICAgICAgLy8gTW9kYWxcclxuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5wcmVzZW50KCk7XHJcbiAgICAgIHRoaXMuaW5wdXRTZWFyY2hCYXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBQb3BvdmVyXHJcbiAgICBhd2FpdCB0aGlzLnBvcG92ZXIucHJlc2VudChldmVudCk7XHJcbiAgICB0aGlzLmlucHV0U2VhcmNoQmFyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcbiAgYXN5bmMgRGlzbWlzcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmKHRoaXMubW9kYWwpIHtcclxuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5kaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnBvcG92ZXIpIHtcclxuICAgICAgYXdhaXQgdGhpcy5wb3BvdmVyLmRpc21pc3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgIGlmKHRoaXMuaW5wdXRTZWxlY3RMYWJlbD8ubmF0aXZlRWxlbWVudCl7IFxyXG4gICAgICB0aGlzLmlucHV0U2VsZWN0TGFiZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBPbkRpc21pc3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsb2F0aW5nVmlzaWJsZSA9IGZhbHNlOyBcclxuICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KCcnKTtcclxuICAgIHRoaXMuc2VhcmNoQmFyQ29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgfVxyXG4gIE9uUHJlc2VudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvYXRpbmdWaXNpYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlzQXJyYXkob2JqIDogYW55ICkge1xyXG4gICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBJdGVtVmFsdWU8VD57XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB2YWx1ZTogVDtcclxuICBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGl0ZW0gICAgOiBhbnk7IFxyXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUG9ydHJhaXQoKSB7XHJcbiAgcmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodCA+IHdpbmRvdy5pbm5lcldpZHRoO1xyXG59IiwiPGRpdiBcclxuICAjaW5wdXRDb250YWluZXJcclxuICBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiIFxyXG4gIChjbGljayk9XCJzZXRGb2N1cygkZXZlbnQpO1wiXHJcbiAgW2NsYXNzLnJlcXVpcmVkXT1cInJlcXVpcmVkKClcIiBcclxuICBbY2xhc3Muc3VibWl0dGVkXT1cInN1Ym1pdHRlZCgpXCIgXHJcbiAgW2NsYXNzLm1hbnVhbC1mb2N1c109XCJmbG9hdGluZ1Zpc2libGVcIlxyXG4gIFtjbGFzcy5pbnZhbGlkXT1cImludmFsaWRcIiBcclxuICBbY2xhc3MuZGlzYWJsZWRdPVwibG9hZGluZygpIHx8IGxvYWRpbmdGcm9tTG9hZGVyIHx8IGRpc2FibGVkKClcIlxyXG4gIFtjbGFzcy5sb2FkaW5nXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nRnJvbUxvYWRlclwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtbGFiZWxcIj4gXHJcbiAgICA8c3BhbiBjbGFzcz1cInRydW5jYXRlXCI+XHJcbiAgICAgIHt7bGFiZWwoKX19IFxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgdHJ1bmNhdGUgb3V0bGluZS1ub25lXCIgW2NsYXNzLnByLTddPVwiIWNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGVcIiBbY2xhc3MucHItMTBdPVwiY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiICAjaW5wdXRTZWxlY3RMYWJlbCB0YWJpbmRleD1cIjBcIj5cclxuICAgIEBpZiAoIWNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSAmJiBjdXJyZW50TGFiZWwpe1xyXG4gICAgICBAaWYobGFiZWxUZW1wbGF0ZSl7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjdXJyZW50TGFiZWwsIGl0ZW06IGN1cnJlbnRJdGVtcy5pdGVtIH1cIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1zZWxlY3QtbGFiZWxcIj4ge3tjdXJyZW50TGFiZWx9fSA8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEBlbHNlIGlmIChjb25maWd1cmF0aW9uKCkubXVsdGlwbGUgJiYgaXNBcnJheShjdXJyZW50SXRlbXMpICYmICRhbnkoY3VycmVudEl0ZW1zKS5sZW5ndGgpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtaW4taC02IG92ZXJmbG93LWhpZGRlbiByZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgb3ZlcmZsb3cteC1hdXRvIGZsZXggZ2FwLTIgc2l6ZS1mdWxsIG1hc2steC8yXCI+XHJcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIGN1cnJlbnRJdGVtczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmFuc2x1Y2lkLWJvcmRlciByb3VuZGVkLWxnIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHBsLTJcIj5cclxuICAgICAgICAgICAgICBAaWYobGFiZWxUZW1wbGF0ZSl7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtLmxhYmVsLCBpdGVtOiBpdGVtLml0ZW0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtc2VsZWN0LWxhYmVsXCI+IHt7aXRlbS5sYWJlbH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgYXNwZWN0LXNxdWFyZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJTZWxlY3QoaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIGNvbG9yPVwiZGFuZ2VyXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPCEtLSA8aW9uLWJ1dHRvbiBjbGFzcz1cIm0tMCBoLWZ1bGxcIiAoY2xpY2spPVwiU2VsZWN0KGl0ZW0udmFsdWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBjb2xvcj1cIm1lZGl1bVwiIHNpemU9XCJzbWFsbFwiIGZpbGw9XCJvdXRsaW5lXCIgc3R5bGU9XCItLWJvcmRlci1yYWRpdXM6IC41cmVtXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgY29sb3I9XCJkYW5nZXJcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgIEBpZihwbGFjZWhvbGRlclRlbXBsYXRlKXtcclxuICAgICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicGxhY2Vob2xkZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHRoaXMuY29uZmlndXJhdGlvbigpLnBsYWNlaG9sZGVyLCBwbGFjZWhvbGRlcjogdGhpcy5jb25maWd1cmF0aW9uKCkucGxhY2Vob2xkZXIgfVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LXNlbGVjdC1sYWJlbCAhdGV4dC1tZWRpdW1cIj4ge3t0aGlzLmNvbmZpZ3VyYXRpb24oKS5wbGFjZWhvbGRlcn19IDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgYm90dG9tLTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc2l6ZS03XCIgW2NsYXNzLnJpZ2h0LTFdPVwiIWNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGVcIiBbY2xhc3MucmlnaHQtOF09XCJjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlXCI+XHJcbiAgICA8aW9uLWljb24gY2xhc3M9XCItbWItMC41XCIgbmFtZT1cImNoZXZyb24tdXBcIj48L2lvbi1pY29uPlxyXG4gICAgPGlvbi1pY29uIGNsYXNzPVwiLW10LTAuNVwiIG5hbWU9XCJjaGV2cm9uLWRvd25cIj48L2lvbi1pY29uPlxyXG4gIDwvZGl2PlxyXG4gIEBpZihjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlKXtcclxuICAgIDxpb24tYnV0dG9uIGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtMSBib3R0b20tMVwiIChjbGljayk9XCJDbGVhcigkZXZlbnQpXCIgY29sb3I9XCJtZWRpdW1cIiBzaXplPVwic21hbGxcIiBmaWxsPVwiY2xlYXJcIiBzdHlsZT1cIi0tYm9yZGVyLXJhZGl1czogLjVyZW1cIj5cclxuICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxyXG4gICAgPC9pb24tYnV0dG9uPlxyXG4gIH0gXHJcblxyXG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lclwiIFtjbGFzcy5sb2FkaW5nXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nRnJvbUxvYWRlclwiPlxyXG4gICAgPGlvbi1zcGlubmVyPjwvaW9uLXNwaW5uZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImVycm9yLWNvbnRhaW5lclwiIChjbGljayk9XCJjb25maWd1cmF0aW9uKCkubG9hZGVyLlJlZnJlc2goKVwiIFtjbGFzcy5hY3RpdmVdPVwiY29uZmlndXJhdGlvbigpLmxvYWRlci5lcnJvciAmJiAhbG9hZGluZ0Zyb21Mb2FkZXJcIj5cclxuICAgIDxpb24taWNvbiBjbGFzcz1cInRleHQteGxcIiBjb2xvcj1cImRhbmdlclwiIG5hbWU9XCJyZWZyZXNoLWNpcmNsZVwiPjwvaW9uLWljb24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuQGlmKCFkaXNhYmxlZCgpKXtcclxuICA8aW9uLW1vZGFsICNtb2RhbCAoaW9uTW9kYWxXaWxsUHJlc2VudCk9XCJPblByZXNlbnQoKVwiIChkaWREaXNtaXNzKT1cIk9uRGlzbWlzcygpXCIgc3R5bGU9XCItLXdpZHRoOiA5MCU7IC0taGVpZ2h0OiA5MCU7XCIgW2tlZXBDb250ZW50c01vdW50ZWRdPVwidHJ1ZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdENvbnRlbnRUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG1vZGFsOiB0cnVlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9pb24tbW9kYWw+XHJcblxyXG4gIDxzaW9uLXBvcG92ZXIgXHJcbiAgICAgICNwb3BvdmVyIFxyXG4gICAgICBbd2lkdGhdPVwiaW5wdXRDb250YWluZXIub2Zmc2V0V2lkdGggKyAncHgnXCIgXHJcbiAgICAgIChvbldpbGxQcmVzZW50KT1cIk9uUHJlc2VudCgpXCIgXHJcbiAgICAgIChvbkRpZERpc21pc3MpPVwiT25EaXNtaXNzKClcIiBcclxuICAgICAgW2FuY2hvcl09XCJpbnB1dENvbnRhaW5lclwiIFxyXG4gICAgICBbcGxhY2VtZW50XT1cImNvbmZpZ3VyYXRpb24oKS5wb3BvdmVyQ29uZmlndXJhdGlvbi5wbGFjZW1lbnRcIiBcclxuICAgICAgW2ZsaXBdPVwiY29uZmlndXJhdGlvbigpLnBvcG92ZXJDb25maWd1cmF0aW9uLmZsaXBcIlxyXG4gICAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3RDb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICA8L3Npb24tcG9wb3Zlcj5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNzZWxlY3RDb250ZW50VGVtcGxhdGUgbGV0LW1vZGFsPVwibW9kYWxcIj5cclxuICA8ZGl2ICNzZWxlY3RDb250ZW50IGNsYXNzPVwic2VsZWN0LWNvbnRlbnRcIiBbY2xhc3MuIXNpemUtZnVsbF09XCJtb2RhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXNlYXJjaC1iYXItaWNvbi1jb250YWluZXIgIWJvcmRlci1yLTAgYm9yZGVyLXByaW1hcnkvNzAgYmctcHJpbWFyeS83MCBzaHJpbmstMFwiPlxyXG4gICAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhcmtcIiBuYW1lPVwic2VhcmNoXCI+PC9pb24taWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpbnB1dCAjaW5wdXRTZWFyY2hCYXIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwic2VsZWN0LXNlYXJjaC1iYXIgYm9yZGVyLXByaW1hcnkvNzAgIXJvdW5kZWQtbC1ub25lXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaEJhckNvbnRyb2xcIi8+XHJcbiAgICA8L2Rpdj4gXHJcbiAgICA8dWwgY2xhc3M9XCJzZWxlY3QtaXRlbS1saXN0IG1hc2steVwiIHJvbGU9XCJsaXN0Ym94XCIgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIidzaW9uLWlzLScgKyBzZWxlY3RlZEluZGV4XCI+XHJcbiAgICAgIEBpZihmbG9hdGluZ1Zpc2libGUpe1xyXG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgbHN0T3B0aW9uczsgdHJhY2sgaXRlbS52YWx1ZSkgeyBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJiYXNlT3B0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0sIGluZGV4OiAkaW5kZXggfVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICA8L3VsPlxyXG4gICAgQGlmKGlzU2VydmljZUF0aXZvKCkpe1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHRleHQteHMgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmRcIj5cclxuICAgICAgICA8aW9uLWNoZWNrYm94IFtuZ01vZGVsXT1cInNvbWVudGVBdGl2b3MoKVwiIChuZ01vZGVsQ2hhbmdlKT1cInNvbWVudGVBdGl2b3Muc2V0KCRldmVudClcIiBjbGFzcz1cInNjYWxlLTc1XCI+IFNvbWVudGUgYXRpdm9zIDwvaW9uLWNoZWNrYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYmFzZU9wdGlvblRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgPGxpIFtpZF09XCInc2lvbi1pcy0nICsgaW5kZXhcIiBjbGFzcz1cInNlbGVjdC1pdGVtXCIgW2NsYXNzLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIiBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImluZGV4ID09IHNlbGVjdGVkSW5kZXhcIiAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4ID0gaW5kZXhcIiAoY2xpY2spPVwiU2VsZWN0KGl0ZW0pXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWl0ZW0tY2hlY2ttYXJrLWNvbnRlaW5lclwiPlxyXG4gICAgICBAaWYoaXRlbS5zZWxlY3RlZCkge1xyXG4gICAgICAgIDxpb24taWNvbiBjbGFzcz1cInNlbGVjdC1pdGVtLWNoZWNrbWFya1wiIGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJjaGVja21hcmtcIj48L2lvbi1pY29uPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAob3B0aW9uVGVtcGxhdGUpIHtcclxuICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZVwiXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbS5pdGVtIH1cIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LWl0ZW0tbGFiZWxcIj4ge3tpdGVtLmxhYmVsfX0gPC9zcGFuPlxyXG4gICAgfVxyXG4gIDwvbGk+XHJcbjwvbmctdGVtcGxhdGU+Il19
303
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtc2VsZWN0L2lucHV0LXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQW9CLEtBQUssRUFBZSxLQUFLLEVBQWUsTUFBTSxFQUFVLFdBQVcsRUFBRSxTQUFTLEdBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQ2xQLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpELE9BQU8sRUFBOEIsZ0NBQWdDLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNoSSxPQUFPLEVBQXlCLDJCQUEyQixF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V0FBVyxFQUFFO2dCQUNFLG1CQUFtQjtzQkFBekYsWUFBWTt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR3hDLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNJLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBc0I3QixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBa0RmLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQTRFQyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ08sT0FBTztzQkFBdkMsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBQ0ksS0FBSztzQkFBdkMsU0FBUzt1QkFBQyxRQUFROztBQXlDckIsTUFBTSxTQUFTO0lBQWY7UUFHRSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLGFBQVEsR0FBWSxLQUFLLENBQUM7SUFDNUIsQ0FBQztDQUFBO0FBRUQsU0FBUyxVQUFVO0lBQ2pCLE9BQU8sTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIGNvbXB1dGVkLCBDb250ZW50Q2hpbGQsIGVmZmVjdCwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBpbmplY3QsIEluamVjdG9yLCBpbnB1dCwgSW5wdXRTaWduYWwsIG1vZGVsLCBNb2RlbFNpZ25hbCwgc2lnbmFsLCBTaWduYWwsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSW9uTW9kYWwgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcblxyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCaW5kTGFiZWxGYWN0b3J5LCBCaW5kVmFsdWVGYWN0b3J5LCBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2lucHV0LnNlbGVjdC5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgU0lvblBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wb3BvdmVyL3Npb24tcG9wb3Zlci9zaW9uLXBvcG92ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW5wdXRQcm92aWRlckZhY3RvcnkgfSBmcm9tICcuLi9pbnB1dC1wcm92aWRlci1mYWN0b3J5JztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXQgfSBmcm9tICcuLi9jdXN0b20taW5wdXQnO1xyXG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IFBsYWNlaG9sZGVyVGVtcGxhdGVDb250ZXh0LCBTSW9uUGxhY2Vob2xkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zaW9uLXBsYWNlaG9sZGVyLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE9wdGlvblRlbXBsYXRlQ29udGV4dCwgU0lvbk9wdGlvblRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3Npb24tb3B0aW9uLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IExhYmVsVGVtcGxhdGVDb250ZXh0LCBTSW9uTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zaW9uLWxhYmVsLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlQXRpdm8gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy93ZWIvaHR0cC5hdGl2by5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW5wdXQtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1zZWxlY3QuY29tcG9uZW50LnNjc3MnLCAnLi4vaW5wdXRzLnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIC4uLklucHV0UHJvdmlkZXJGYWN0b3J5LkdldFByb3ZpZGVycyhJbnB1dFNlbGVjdENvbXBvbmVudCksXHJcbiAgICB7IHByb3ZpZGU6IEN1c3RvbUlucHV0LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dFNlbGVjdENvbXBvbmVudCkgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRTZWxlY3RDb21wb25lbnQ8VCA9IGFueT4gZXh0ZW5kcyBDdXN0b21JbnB1dDxUIHwgVFtdPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAvKiogSXRlbXMgZGlzcG9uw612ZWlzIG5vIHNlbGVjdCAqL1xyXG4gIGl0ZW1zICAgICAgICAgICAgOiBNb2RlbFNpZ25hbDxhbnlbXT4gICAgICAgICAgICAgICAgICAgICAgPSBtb2RlbDxhbnlbXT4oW10pO1xyXG4gIC8qKiBDb25maWd1cmHDp8OjbyBkbyBzZWxlY3QgKi9cclxuICBjb25maWd1cmF0aW9uICAgIDogSW5wdXRTaWduYWw8SW5wdXRTZWxlY3RDb25maWd1cmF0aW9uPiA9IGlucHV0PElucHV0U2VsZWN0Q29uZmlndXJhdGlvbj4obmV3IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbigpKTsgXHJcbiAgbG9hZGluZ0Zyb21Mb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY3VycmVudExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgY3VycmVudEl0ZW1zIDogYW55IHwgSXRlbVZhbHVlPGFueT5bXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBcclxuICBTZXRDdXJyZW50SXRlbUxhYmVsKCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbHRlcihwID0+IHAuc2VsZWN0ZWQpLm1hcChwID0+IHAubGFiZWwpLmpvaW4oJywgJyk7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmlsdGVyKHAgPT4gcC5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbmQocCA9PiBwLnNlbGVjdGVkKT8ubGFiZWw7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmluZChwID0+IHAuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbHN0T3B0aW9uc0l0ZW1WYWx1ZTogU2lnbmFsPEl0ZW1WYWx1ZTxhbnk+W10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgYmluZExhYmVsID0gQmluZExhYmVsRmFjdG9yeSh0aGlzLmNvbmZpZ3VyYXRpb24oKSk7XHJcbiAgICBjb25zdCBiaW5kVmFsdWUgPSBCaW5kVmFsdWVGYWN0b3J5KHRoaXMuY29uZmlndXJhdGlvbigpKTtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zKCkuZmlsdGVyKHAgPT4gKHRoaXMuc29tZW50ZUF0aXZvcygpICYmIHRoaXMuaXNTZXJ2aWNlQXRpdm8oKSkgPyBwLmF0aXZvIDogdHJ1ZSkgLm1hcChwID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IG5ldyBJdGVtVmFsdWU8YW55PigpO1xyXG4gICAgICBpdGVtLmxhYmVsID0gYmluZExhYmVsKHApO1xyXG4gICAgICBpdGVtLnZhbHVlID0gYmluZFZhbHVlKHApO1xyXG4gICAgICBpdGVtLml0ZW0gID0gcDtcclxuICAgICAgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUoKSA9PSBpdGVtLnZhbHVlO1xyXG4gICAgICBpdGVtLmRpc2FibGVkID0gcC5kaXNhYmxlZCB8fCBmYWxzZSB8fCAodGhpcy5pc1NlcnZpY2VBdGl2byAmJiBwLmF0aXZvID09IGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgbHN0T3B0aW9uczogSXRlbVZhbHVlPGFueT5bXSA9IFtdO1xyXG4gIFVwZGF0ZUxzdE9wdGlvbnMoc2VhcmNoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIFVwZGF0ZSB0aGUgc2VhcmNoIFxyXG4gICAgaWYgKHNlYXJjaCkge1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMgPSBTZWFyY2g8SXRlbVZhbHVlPGFueT4+KHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLCBzZWFyY2gsIChpdGVtOiBJdGVtVmFsdWU8YW55PikgPT4gaXRlbS5sYWJlbCk7XHJcbiAgICB9IGVsc2UgeyBcclxuICAgICAgdGhpcy5sc3RPcHRpb25zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCk7IFxyXG4gICAgfVxyXG4gIH1cclxuICBVcGRhdGVTZWxlY3RlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIGNvbnN0IGFyciA9IHRoaXMudmFsdWUoKSBhcyBhbnlbXSB8fCBbXTtcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubHN0T3B0aW9ucykge1xyXG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBhcnIuZmluZChwID0+IHAgPT0gaXRlbS52YWx1ZSkgIT0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMuZm9yRWFjaCgoaXRlbTogSXRlbVZhbHVlPGFueT4pID0+IHsgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUoKSA9PSBpdGVtLnZhbHVlOyB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuU2V0Q3VycmVudEl0ZW1MYWJlbCgpO1xyXG4gIH1cclxuXHJcbiAgQENvbnRlbnRDaGlsZChTSW9uTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSAgICAgICwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBsYWJlbFRlbXBsYXRlICAgICAgOiBUZW1wbGF0ZVJlZjxMYWJlbFRlbXBsYXRlQ29udGV4dDxUPj47XHJcbiAgQENvbnRlbnRDaGlsZChTSW9uT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUgICAgICwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBvcHRpb25UZW1wbGF0ZSAgICAgOiBUZW1wbGF0ZVJlZjxPcHRpb25UZW1wbGF0ZUNvbnRleHQ8VD4+O1xyXG4gIEBDb250ZW50Q2hpbGQoU0lvblBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcGxhY2Vob2xkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UGxhY2Vob2xkZXJUZW1wbGF0ZUNvbnRleHQ+O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRDb250YWluZXInKSBpbnB1dENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRTZWxlY3RMYWJlbCcpIGlucHV0U2VsZWN0TGFiZWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIG92ZXJyaWRlIHNldEZvY3VzKGV2ZW50OiBNb3VzZUV2ZW50IHwgbnVsbCk6IHZvaWQgeyBcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRlci5lcnJvciB8fCB0aGlzLmxvYWRpbmdGcm9tTG9hZGVyIHx8IHRoaXMubG9hZGluZygpIHx8IHRoaXMuZGlzYWJsZWQoKSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMuUHJlc2VudChldmVudCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgXHJcbiAgICBzdXBlcigpOyBcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuVXBkYXRlTHN0T3B0aW9ucyh0aGlzLnNlYXJjaFZhbHVlKCkpO1xyXG4gICAgICB0aGlzLlVwZGF0ZVNlbGVjdGVkKCk7XHJcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pIFxyXG4gIH1cclxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24oKS5sb2FkZXIuQWRkQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uKCkubG9hZGVyLlJlZnJlc2godGhpcy5pdGVtcygpKTtcclxuICB9XHJcbiAgaXNTZXJ2aWNlQXRpdm86IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHsgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRGcm9tU2VydmljZSBpbnN0YW5jZW9mIEh0dHBTZXJ2aWNlQXRpdm87IH0pO1xyXG4gIHNvbWVudGVBdGl2b3M6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBIYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBbIFBvcG92ZXIgXVxyXG4gICAgaWYodGhpcy5zZWxlY3RDb250ZW50Py5uYXRpdmVFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpe1xyXG4gICAgICBpZihldmVudC5rZXkgPT0gXCJUYWJcIil7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZiAoZXZlbnQua2V5ID09IFwiRXNjYXBlXCIpe1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5EaXNtaXNzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBbIGlucHV0Q29udGFpbmVyIF1cclxuICAgIGlmKHRoaXMuaW5wdXRDb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpeyBcclxuICAgICAgaWYoW1wiQXJyb3dEb3duXCIsIFwiQXJyb3dVcFwiXS5pbmNsdWRlcyhldmVudC5rZXkpKXtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuUHJlc2VudChldmVudCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBbIGlucHV0U2VsZWN0U2VhcmNoQmFyIF1cclxuICAgIGlmKHRoaXMuaW5wdXRTZWFyY2hCYXIubmF0aXZlRWxlbWVudCA9PSBldmVudC50YXJnZXQpe1xyXG4gICAgICBpZihldmVudC5rZXkgPT0gXCJFbnRlclwiKXtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIC8vIElmIHRoZSBzZWxlY3QgaXMgbm90IGF0aXZvIGlnbm9yZSB0aGUgc2VsZWN0ZWQgaXRlbVxyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmxzdE9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4IV07XHJcbiAgICAgICAgaWYodGhpcy5pc1NlcnZpY2VBdGl2bygpICYmICFpdGVtLml0ZW0uYXRpdm8pIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgdGhpcy5TZWxlY3QoaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgXHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIkFycm93RG93blwiKXtcclxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkSW5kZXggPT0gdW5kZWZpbmVkKXsgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDsgcmV0dXJuOyB9XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAodGhpcy5zZWxlY3RlZEluZGV4IDwgdGhpcy5sc3RPcHRpb25zLmxlbmd0aCAtIDEgPyB0aGlzLnNlbGVjdGVkSW5kZXggKyAxIDogdGhpcy5zZWxlY3RlZEluZGV4KVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIFxyXG4gICAgICBpZihldmVudC5rZXkgPT0gXCJBcnJvd1VwXCIpe1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJbmRleCA9PSB1bmRlZmluZWQpeyB0aGlzLnNlbGVjdGVkSW5kZXggPSAwOyByZXR1cm47IH1cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXggPiAwID8gdGhpcy5zZWxlY3RlZEluZGV4IC0gMSA6IHRoaXMuc2VsZWN0ZWRJbmRleClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAvL1sgU2VhcmNoIEJhciBdXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRTZWFyY2hCYXInKSBpbnB1dFNlYXJjaEJhcjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBzZWFyY2hCYXJDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgc2VhcmNoVmFsdWUgICAgIDogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9ICBzaWduYWw8c3RyaW5nPihcIlwiKTtcclxuICBwcml2YXRlIHNlYXJjaEJhclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIGRlc3Ryb3llZDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLnNlYXJjaEJhckNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICApXHJcbiAgICB0aGlzLnNlYXJjaEJhclN1YnNjcmlwdGlvbiA9IG9ic2VydmFibGUuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7IFxyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KHZhbHVlKTsgXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIENsZWFyU2VhcmNoQmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hCYXJTdWJzY3JpcHRpb24pIHsgdGhpcy5zZWFyY2hCYXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLkNsZWFyU2VhcmNoQmFyKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogVCB8IFRbXSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudmFsdWUuc2V0KG9iaik7XHJcbiAgICB0aGlzLnJ1blZhbGlkYXRpb24oKTtcclxuICAgIHRoaXMuVXBkYXRlU2VsZWN0ZWQoKTtcclxuICB9XHJcbiAgXHJcbiAgb3ZlcnJpZGUgU2V0VmFsdWUob2JqOiBUIHwgVFtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlLnNldChvYmopO1xyXG4gICAgdGhpcy5ydW5WYWxpZGF0aW9uKCk7XHJcbiAgICB0aGlzLlVwZGF0ZVNlbGVjdGVkKCk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gICAgaWYoIXRoaXMuY29uZmlndXJhdGlvbigpLm11bHRpcGxlKXtcclxuICAgICAgdGhpcy5EaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIENsZWFyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbigpLm11bHRpcGxlKXtcclxuICAgICAgdGhpcy5TZXRWYWx1ZShbXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5TZXRWYWx1ZSh1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgU2VsZWN0KGl0ZW1WYWx1ZTogSXRlbVZhbHVlPFQ+KTogdm9pZHtcclxuICAgIGNvbnN0IGl0ZW0gPSBpdGVtVmFsdWUudmFsdWU7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUoKTtcclxuICAgICAgaWYoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKXtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnRWYWx1ZS5maW5kSW5kZXgocCA9PiBwID09IGl0ZW0pO1xyXG4gICAgICAgIGlmKGluZGV4ID4gLTEpe1xyXG4gICAgICAgICAgY3VycmVudFZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN1cnJlbnRWYWx1ZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLlNldFZhbHVlKFsuLi5jdXJyZW50VmFsdWVdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLlNldFZhbHVlKFtpdGVtXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuU2V0VmFsdWUoaXRlbSk7XHJcbiAgICAgIHRoaXMuRGlzbWlzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFsgUG9wb3ZlciAvIE1vZGFsIF1cclxuICBAVmlld0NoaWxkKCdzZWxlY3RDb250ZW50Jykgc2VsZWN0Q29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChTSW9uUG9wb3ZlckNvbXBvbmVudCkgcG9wb3ZlcjogU0lvblBvcG92ZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChJb25Nb2RhbCkgICAgICAgICAgICAgICBtb2RhbDogSW9uTW9kYWw7XHJcblxyXG4gIGZsb2F0aW5nVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBhc3luYyBQcmVzZW50KGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYoaXNQb3J0cmFpdCgpKXtcclxuICAgICAgLy8gTW9kYWxcclxuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5wcmVzZW50KCk7XHJcbiAgICAgIHRoaXMuaW5wdXRTZWFyY2hCYXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBQb3BvdmVyXHJcbiAgICBhd2FpdCB0aGlzLnBvcG92ZXIucHJlc2VudChldmVudCk7XHJcbiAgICB0aGlzLmlucHV0U2VhcmNoQmFyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcbiAgYXN5bmMgRGlzbWlzcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmKHRoaXMubW9kYWwpIHtcclxuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5kaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnBvcG92ZXIpIHtcclxuICAgICAgYXdhaXQgdGhpcy5wb3BvdmVyLmRpc21pc3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgIGlmKHRoaXMuaW5wdXRTZWxlY3RMYWJlbD8ubmF0aXZlRWxlbWVudCl7IFxyXG4gICAgICB0aGlzLmlucHV0U2VsZWN0TGFiZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBPbkRpc21pc3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsb2F0aW5nVmlzaWJsZSA9IGZhbHNlOyBcclxuICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KCcnKTtcclxuICAgIHRoaXMuc2VhcmNoQmFyQ29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgfVxyXG4gIE9uUHJlc2VudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvYXRpbmdWaXNpYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlzQXJyYXkob2JqIDogYW55ICkge1xyXG4gICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBJdGVtVmFsdWU8VD57XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB2YWx1ZTogVDtcclxuICBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGl0ZW0gICAgOiBhbnk7IFxyXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUG9ydHJhaXQoKSB7XHJcbiAgcmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodCA+IHdpbmRvdy5pbm5lcldpZHRoO1xyXG59IiwiPGRpdiBcclxuICAjaW5wdXRDb250YWluZXJcclxuICBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiIFxyXG4gIChjbGljayk9XCJzZXRGb2N1cygkZXZlbnQpO1wiXHJcbiAgW2NsYXNzLnJlcXVpcmVkXT1cInJlcXVpcmVkKClcIiBcclxuICBbY2xhc3Muc3VibWl0dGVkXT1cInN1Ym1pdHRlZCgpXCIgXHJcbiAgW2NsYXNzLm1hbnVhbC1mb2N1c109XCJmbG9hdGluZ1Zpc2libGVcIlxyXG4gIFtjbGFzcy5pbnZhbGlkXT1cImludmFsaWRcIiBcclxuICBbY2xhc3MuZGlzYWJsZWRdPVwibG9hZGluZygpIHx8IGxvYWRpbmdGcm9tTG9hZGVyIHx8IGRpc2FibGVkKClcIlxyXG4gIFtjbGFzcy5sb2FkaW5nXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nRnJvbUxvYWRlclwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtbGFiZWxcIj4gXHJcbiAgICA8c3BhbiBjbGFzcz1cInRydW5jYXRlXCI+XHJcbiAgICAgIHt7bGFiZWwoKX19IFxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgdHJ1bmNhdGUgb3V0bGluZS1ub25lXCIgW2NsYXNzLnByLTddPVwiIWNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGVcIiBbY2xhc3MucHItMTBdPVwiY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiICAjaW5wdXRTZWxlY3RMYWJlbCB0YWJpbmRleD1cIjBcIj5cclxuICAgIEBpZiAoIWNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSAmJiBjdXJyZW50TGFiZWwpe1xyXG4gICAgICBAaWYobGFiZWxUZW1wbGF0ZSl7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjdXJyZW50TGFiZWwsIGl0ZW06IGN1cnJlbnRJdGVtcy5pdGVtIH1cIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1zZWxlY3QtbGFiZWxcIj4ge3tjdXJyZW50TGFiZWx9fSA8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEBlbHNlIGlmIChjb25maWd1cmF0aW9uKCkubXVsdGlwbGUgJiYgaXNBcnJheShjdXJyZW50SXRlbXMpICYmICRhbnkoY3VycmVudEl0ZW1zKS5sZW5ndGgpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtaW4taC02IG92ZXJmbG93LWhpZGRlbiByZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgb3ZlcmZsb3cteC1hdXRvIGZsZXggZ2FwLTIgc2l6ZS1mdWxsIG1hc2steC8yXCI+XHJcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIGN1cnJlbnRJdGVtczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmFuc2x1Y2lkLWJvcmRlciByb3VuZGVkLWxnIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHBsLTJcIj5cclxuICAgICAgICAgICAgICBAaWYobGFiZWxUZW1wbGF0ZSl7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtLmxhYmVsLCBpdGVtOiBpdGVtLml0ZW0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtc2VsZWN0LWxhYmVsXCI+IHt7aXRlbS5sYWJlbH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgYXNwZWN0LXNxdWFyZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJTZWxlY3QoaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIGNvbG9yPVwiZGFuZ2VyXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPCEtLSA8aW9uLWJ1dHRvbiBjbGFzcz1cIm0tMCBoLWZ1bGxcIiAoY2xpY2spPVwiU2VsZWN0KGl0ZW0udmFsdWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBjb2xvcj1cIm1lZGl1bVwiIHNpemU9XCJzbWFsbFwiIGZpbGw9XCJvdXRsaW5lXCIgc3R5bGU9XCItLWJvcmRlci1yYWRpdXM6IC41cmVtXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgY29sb3I9XCJkYW5nZXJcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgIEBpZihwbGFjZWhvbGRlclRlbXBsYXRlKXtcclxuICAgICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicGxhY2Vob2xkZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHRoaXMuY29uZmlndXJhdGlvbigpLnBsYWNlaG9sZGVyLCBwbGFjZWhvbGRlcjogdGhpcy5jb25maWd1cmF0aW9uKCkucGxhY2Vob2xkZXIgfVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LXNlbGVjdC1sYWJlbCAhdGV4dC1tZWRpdW1cIj4ge3t0aGlzLmNvbmZpZ3VyYXRpb24oKS5wbGFjZWhvbGRlcn19IDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgYm90dG9tLTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc2l6ZS03XCIgW2NsYXNzLnJpZ2h0LTFdPVwiIWNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGVcIiBbY2xhc3MucmlnaHQtOF09XCJjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlXCI+XHJcbiAgICA8aW9uLWljb24gY2xhc3M9XCItbWItMC41XCIgbmFtZT1cImNoZXZyb24tdXBcIj48L2lvbi1pY29uPlxyXG4gICAgPGlvbi1pY29uIGNsYXNzPVwiLW10LTAuNVwiIG5hbWU9XCJjaGV2cm9uLWRvd25cIj48L2lvbi1pY29uPlxyXG4gIDwvZGl2PlxyXG4gIEBpZihjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlKXtcclxuICAgIDxpb24tYnV0dG9uIGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtMSBib3R0b20tMVwiIChjbGljayk9XCJDbGVhcigkZXZlbnQpXCIgY29sb3I9XCJtZWRpdW1cIiBzaXplPVwic21hbGxcIiBmaWxsPVwiY2xlYXJcIiBzdHlsZT1cIi0tYm9yZGVyLXJhZGl1czogLjVyZW1cIj5cclxuICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxyXG4gICAgPC9pb24tYnV0dG9uPlxyXG4gIH0gXHJcblxyXG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lclwiIFtjbGFzcy5sb2FkaW5nXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nRnJvbUxvYWRlclwiPlxyXG4gICAgPGlvbi1zcGlubmVyPjwvaW9uLXNwaW5uZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImVycm9yLWNvbnRhaW5lclwiIChjbGljayk9XCJjb25maWd1cmF0aW9uKCkubG9hZGVyLlJlZnJlc2goKVwiIFtjbGFzcy5hY3RpdmVdPVwiY29uZmlndXJhdGlvbigpLmxvYWRlci5lcnJvciAmJiAhbG9hZGluZ0Zyb21Mb2FkZXJcIj5cclxuICAgIDxpb24taWNvbiBjbGFzcz1cInRleHQteGxcIiBjb2xvcj1cImRhbmdlclwiIG5hbWU9XCJyZWZyZXNoLWNpcmNsZVwiPjwvaW9uLWljb24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuQGlmKCFkaXNhYmxlZCgpKXtcclxuICA8aW9uLW1vZGFsICNtb2RhbCAoaW9uTW9kYWxXaWxsUHJlc2VudCk9XCJPblByZXNlbnQoKVwiIChkaWREaXNtaXNzKT1cIk9uRGlzbWlzcygpXCIgc3R5bGU9XCItLXdpZHRoOiA5MCU7IC0taGVpZ2h0OiA5MCU7XCIgW2tlZXBDb250ZW50c01vdW50ZWRdPVwidHJ1ZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICA8aW9uLWhlYWRlcj5cclxuICAgICAgICA8aW9uLXRvb2xiYXI+XHJcbiAgICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGVcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2lvbi1idXR0b25zPlxyXG4gICAgICAgIDwvaW9uLXRvb2xiYXI+XHJcbiAgICAgIDwvaW9uLWhlYWRlcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0Q29udGVudFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbW9kYWw6IHRydWUgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2lvbi1tb2RhbD5cclxuXHJcbiAgPHNpb24tcG9wb3ZlciBcclxuICAgICAgI3BvcG92ZXIgXHJcbiAgICAgIFt3aWR0aF09XCJpbnB1dENvbnRhaW5lci5vZmZzZXRXaWR0aCArICdweCdcIiBcclxuICAgICAgKG9uV2lsbFByZXNlbnQpPVwiT25QcmVzZW50KClcIiBcclxuICAgICAgKG9uRGlkRGlzbWlzcyk9XCJPbkRpc21pc3MoKVwiIFxyXG4gICAgICBbYW5jaG9yXT1cImlucHV0Q29udGFpbmVyXCIgXHJcbiAgICAgIFtwbGFjZW1lbnRdPVwiY29uZmlndXJhdGlvbigpLnBvcG92ZXJDb25maWd1cmF0aW9uLnBsYWNlbWVudFwiIFxyXG4gICAgICBbZmxpcF09XCJjb25maWd1cmF0aW9uKCkucG9wb3ZlckNvbmZpZ3VyYXRpb24uZmxpcFwiXHJcbiAgICA+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdENvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvc2lvbi1wb3BvdmVyPlxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI3NlbGVjdENvbnRlbnRUZW1wbGF0ZSBsZXQtbW9kYWw9XCJtb2RhbFwiPlxyXG4gIDxkaXYgI3NlbGVjdENvbnRlbnQgY2xhc3M9XCJzZWxlY3QtY29udGVudFwiIFtjbGFzcy4hc2l6ZS1mdWxsXT1cIm1vZGFsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXNlYXJjaC1iYXItY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoLWJhci1pY29uLWNvbnRhaW5lciAhYm9yZGVyLXItMCBib3JkZXItcHJpbWFyeS83MCBiZy1wcmltYXJ5LzcwIHNocmluay0wXCI+XHJcbiAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwiZGFya1wiIG5hbWU9XCJzZWFyY2hcIj48L2lvbi1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGlucHV0ICNpbnB1dFNlYXJjaEJhciB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoLWJhciBib3JkZXItcHJpbWFyeS83MCAhcm91bmRlZC1sLW5vbmVcIiBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQmFyQ29udHJvbFwiLz5cclxuICAgIDwvZGl2PiBcclxuICAgIDx1bCBjbGFzcz1cInNlbGVjdC1pdGVtLWxpc3QgbWFzay15XCIgcm9sZT1cImxpc3Rib3hcIiBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiJ3Npb24taXMtJyArIHNlbGVjdGVkSW5kZXhcIj5cclxuICAgICAgQGZvciAoaXRlbSBvZiBsc3RPcHRpb25zOyB0cmFjayBpdGVtLnZhbHVlKSB7IFxyXG4gICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJiYXNlT3B0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSwgaW5kZXg6ICRpbmRleCB9XCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIH1cclxuICAgIDwvdWw+XHJcbiAgICBAaWYoaXNTZXJ2aWNlQXRpdm8oKSl7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgdGV4dC14cyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZFwiPlxyXG4gICAgICAgIDxpb24tY2hlY2tib3ggW25nTW9kZWxdPVwic29tZW50ZUF0aXZvcygpXCIgKG5nTW9kZWxDaGFuZ2UpPVwic29tZW50ZUF0aXZvcy5zZXQoJGV2ZW50KVwiIGNsYXNzPVwic2NhbGUtNzVcIj4gU29tZW50ZSBhdGl2b3MgPC9pb24tY2hlY2tib3g+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNiYXNlT3B0aW9uVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICA8bGkgW2lkXT1cIidzaW9uLWlzLScgKyBpbmRleFwiIGNsYXNzPVwic2VsZWN0LWl0ZW1cIiBbY2xhc3MuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaW5kZXggPT0gc2VsZWN0ZWRJbmRleFwiIChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXggPSBpbmRleFwiIChjbGljayk9XCJTZWxlY3QoaXRlbSlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtaXRlbS1jaGVja21hcmstY29udGVpbmVyXCI+XHJcbiAgICAgIEBpZihpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgPGlvbi1pY29uIGNsYXNzPVwic2VsZWN0LWl0ZW0tY2hlY2ttYXJrXCIgY29sb3I9XCJwcmltYXJ5XCIgbmFtZT1cImNoZWNrbWFya1wiPjwvaW9uLWljb24+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChvcHRpb25UZW1wbGF0ZSkge1xyXG4gICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlXCJcclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLml0ZW0gfVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuICAgIEBlbHNlIHtcclxuICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QtaXRlbS1sYWJlbFwiPiB7e2l0ZW0ubGFiZWx9fSA8L3NwYW4+XHJcbiAgICB9XHJcbiAgPC9saT5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -141,13 +141,10 @@ export class InputSelectDataLoader {
141
141
  let vFiltros = this.configuration.vFiltros;
142
142
  try {
143
143
  let lstDados = [];
144
- console.log("InputSelectDataLoader.Load() - vFiltros: ", vFiltros);
145
144
  if (this.configuration.loadFromService) {
146
- console.log("1 ", vFiltros);
147
145
  lstDados = (await firstValueFrom(this.configuration.loadFromService.List(vFiltros))).lstDados;
148
146
  }
149
147
  else {
150
- console.log("2 ", vFiltros);
151
148
  lstDados = (await firstValueFrom(this.configuration.loadFromFunction)).lstDados;
152
149
  }
153
150
  this.items = lstDados;
@@ -190,4 +187,4 @@ export function BindLabelFactory(configuration) {
190
187
  }
191
188
  return bindLabel;
192
189
  }
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuc2VsZWN0LmNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC5zZWxlY3QuY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBTzFELE1BQU0sT0FBTyx3QkFBd0I7SUFtQm5DO0lBQ0UsMkNBQTJDO0lBQ3BDLFlBQThDLElBQUk7SUFDekQsNkJBQTZCO0lBQ3RCLFlBQThDLE1BQU07SUFFM0Qsa0RBQWtEO0lBQzNDLFlBQXVCLElBQUk7SUFDbEMsNkNBQTZDO0lBQ3RDLGNBQXVCLElBQUk7SUFFbEM7Ozs7T0FJRztJQUNJLFFBQXlEO0lBQ2hFLGlGQUFpRjtJQUMxRSxXQUFxQixLQUFLO0lBQ2pDLG9DQUFvQztJQUNwQyxXQVNZLElBQUk7SUFDaEIseURBQXlEO0lBQ2xELHFCQUFxRCxJQUFJO1FBN0J6RCxjQUFTLEdBQVQsU0FBUyxDQUF5QztRQUVsRCxjQUFTLEdBQVQsU0FBUyxDQUEyQztRQUdwRCxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUUzQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFPM0IsYUFBUSxHQUFSLFFBQVEsQ0FBaUQ7UUFFekQsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFhMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QztRQWpEbEUsZ0JBQVcsR0FBZ0Isc0JBQXNCLENBQUE7UUFD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UUFBUSxFQUFDLENBQUM7UUFDakMsSUFBSSxHQUFHLEdBQXlCLFVBQVUsQ0FBQztRQUMzQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBTyxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO1NBQUksQ0FBQztRQUNKLElBQUksR0FBRyxHQUF5QixVQUFVLENBQUM7UUFDM0MsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQU8sRUFBRSxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsYUFBdUM7SUFDdEUsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUMzQyxJQUFJLFNBQVMsR0FBNEIsSUFBSSxDQUFDO0lBQzlDLElBQUcsT0FBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsRUFBQyxDQUFDO1FBQ2pDLElBQUksR0FBRyxHQUF5QixVQUFVLENBQUM7UUFDM0MsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQVUsRUFBRSxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7U0FBSSxDQUFDO1FBQ0osSUFBSSxHQUFHLEdBQXlCLFVBQVUsQ0FBQztRQUMzQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBVSxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQgeyBIdHRwU2VydmljZSwgVmlld1JldG9ybm8gfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvd2ViL2h0dHAuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZUF0aXZvIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3dlYi9odHRwLmF0aXZvLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVmlld0ZpbHRyb3MgfSBmcm9tIFwiLi4vLi4vLi4vY2xhc3Nlcy9maWx0ZXJzL3ZpZXctZmlsdHJvc1wiO1xyXG5pbXBvcnQgeyBJTlRfTUFYIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ29tcGFyaXNvbiB9IGZyb20gXCIuLi8uLi8uLi9jbGFzc2VzL2NvbXBhcmlzb24vY29tcGFyaXNvblwiO1xyXG5pbXBvcnQgeyBJbnB1dFNlbGVjdENvbXBvbmVudCB9IGZyb20gXCIuL2lucHV0LXNlbGVjdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUGxhY2VtZW50IH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcclxuXHJcbmV4cG9ydCB0eXBlIERlZmF1bHRNb2RlbE9wdGlvbnMgPSB7IHZhbHVlOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcgfTtcclxuXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb257XHJcbiAgcGxhY2Vob2xkZXIgICAgIDogc3RyaW5nID0gXCJTZWxlY2lvbmUgdW0gaXRlbS4uLlwiXHJcbiAgbm9JdGVuc0ZvdW5kVGV4dDogc3RyaW5nID0gXCJTZW0gaXRlbXMgZW5jb250cmFkb3MuLi5cIlxyXG5cclxuICBsb2FkZXI6IElucHV0U2VsZWN0RGF0YUxvYWRlcjtcclxuICBsb2FkRnJvbUFycmF5ICAgOiBhbnlbXTtcclxuICBsb2FkRnJvbVNlcnZpY2UgOiBIdHRwU2VydmljZSB8IEh0dHBTZXJ2aWNlQXRpdm9cclxuICBsb2FkRnJvbUZ1bmN0aW9uOiBPYnNlcnZhYmxlPGFueT5cclxuXHJcbiAgcG9wb3ZlckNvbmZpZ3VyYXRpb246IHtcclxuICAgIGZsaXA6IGJvb2xlYW4sXHJcbiAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudCxcclxuICB9ID0ge1xyXG4gICAgZmxpcDogdHJ1ZSxcclxuICAgIHBsYWNlbWVudDogXCJib3R0b21cIlxyXG4gIH1cclxuXHJcbiAgcHVibGljIHZGaWx0cm9zOiBWaWV3RmlsdHJvcyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8qKiBWYWxvciBxdWUgc2Vyw6Egc2V0YWRvIG5vIGZvcm1Db250cm9sICovXHJcbiAgICBwdWJsaWMgYmluZFZhbHVlOiBzdHJpbmcgfCAoKG9iajogYW55KSA9PiBhbnkpICAgICA9IFwiaWRcIiAgLFxyXG4gICAgLyoqIFZhbG9yIHF1ZSBzZXLDoSBleGliaWRvICovXHJcbiAgICBwdWJsaWMgYmluZExhYmVsOiBzdHJpbmcgfCAoKG9iajogYW55KSA9PiBzdHJpbmcpICA9IFwibm9tZVwiLCBcclxuICAgIFxyXG4gICAgLyoqIEluZGljYSBzZSBvIHNlbGVjdCBwb2RlIHNlciBudWxvIGUgbGltcGF2ZWwgKi9cclxuICAgIHB1YmxpYyBjbGVhcmFibGUgIDogYm9vbGVhbiA9IHRydWUsIFxyXG4gICAgLyoqIEluZGljYSBzZSBvIHNlbGVjdCBwb2RlIHNlciBwZXNxdWlzYWRvICovXHJcbiAgICBwdWJsaWMgc2VhcmNoZWFibGU6IGJvb2xlYW4gPSB0cnVlLCBcclxuICAgIFxyXG4gICAgLyoqIFxyXG4gICAgICogU2UgTG9hZEZyb20gaW5zdGFuY2VvZiBIdHRwU2VydmljZSAgICAgIC0+IE9zIGRhZG9zIHNlcsOjbyBjYXJyZWdhZG9zIGRvIExpc3QoKVxyXG4gICAgICogU2UgTG9hZEZyb20gaW5zdGFuY2VvZiBPYnNlcnZhYmxlICAgICAgIC0+IE9zIGRhZG9zIHNlcsOjbyBjYXJyZWdhZG9zIGRhIGZ1bsOnw6NvIGluZGljYWRhXHJcbiAgICAgKiBTZSBMb2FkRnJvbSBpbnN0YW5jZW9mIEFycmF5ICAgICAgICAgICAgLT4gT3MgZGFkb3Mgc2Vyw6NvIG8gYXJyYXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGxvYWRGcm9tPzogIEh0dHBTZXJ2aWNlIHwgT2JzZXJ2YWJsZTxWaWV3UmV0b3Jubz4gfCBhbnlbXSwgXHJcbiAgICAvKiogU2UgPSB0cnVlIE9zIHZhbG9yZXMgbm8gZm9ybSBjb250cm9sIHNlcsOhbyB1bSBhcnJheSBkb3MgaXRlbXMgc2VsZWNpb25hZG9zICovXHJcbiAgICBwdWJsaWMgbXVsdGlwbGUgOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAvKiogQXBsaWNhIG9zIGZpbHRyb3MgbmEgcGVzcXVpc2EgKi9cclxuICAgIHZGaWx0cm9zIDogUGFydGlhbDx7IFxyXG4gICAgICAvKiogQXBsaWNhIHVtYSBwZXNxdWlzYSBlbSB0ZXh0byAgKi9cclxuICAgICAgc2VhcmNoOiBzdHJpbmdcclxuICAgICAgLyoqIFByb3ByaWVkYWRlIGRlIG9yZGVuYcOnw6NvICovXHJcbiAgICAgIG9yZGVyQnlQcm9wZXJ0eTogc3RyaW5nXHJcbiAgICAgIC8qKiBPcmllbnRhw6fDo28gZGUgb3JkZW5hw6fDo28gKi9cclxuICAgICAgYXNjZW5kaW5nOiBib29sZWFuLFxyXG4gICAgICAvKiogRmlsdHJvICAqL1xyXG4gICAgICBmaWx0ZXI6IENvbXBhcmlzb25bXVxyXG4gICAgfT4gfCBudWxsID0gbnVsbCxcclxuICAgIC8qKiBEZXNhdGl2YSBvcyBpdGVtcyBxdWUgZXN0w6NvIGRlIGFjb3JkbyBjb20gYSBmdW7Dp8OjbyAqL1xyXG4gICAgcHVibGljIGRpc2FibGVDb25kaXRpb25hbDogKChvYmo6IGFueSkgPT4gYm9vbGVhbikgfCBudWxsID0gbnVsbFxyXG4gICl7XHJcbiAgICB0aGlzLmNsZWFyYWJsZSAgID0gY2xlYXJhYmxlO1xyXG4gICAgdGhpcy5zZWFyY2hlYWJsZSA9IHNlYXJjaGVhYmxlO1xyXG4gICAgdGhpcy5tdWx0aXBsZSAgICA9IG11bHRpcGxlO1xyXG5cclxuICAgIGlmKHZGaWx0cm9zICE9IG51bGwpe1xyXG4gICAgICBjb25zdCB2ID0gdkZpbHRyb3M7XHJcbiAgICAgIGlmKHYuYXNjZW5kaW5nID09IG51bGwgfHwgdi5hc2NlbmRpbmcgPT0gdW5kZWZpbmVkKXsgXHJcbiAgICAgICAgdi5hc2NlbmRpbmcgPSB0cnVlOyBcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZGaWx0cm9zID0gbmV3IFZpZXdGaWx0cm9zKElOVF9NQVgsIHYuc2VhcmNoLCAxLCB2Lm9yZGVyQnlQcm9wZXJ0eSwgdi5hc2NlbmRpbmcpO1xyXG4gICAgICB0aGlzLnZGaWx0cm9zLmZpbHRlciA9IHYuZmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKGxvYWRGcm9tKXtcclxuICAgICAgaWYoQXJyYXkuaXNBcnJheShsb2FkRnJvbSkpeyBcclxuICAgICAgICB0aGlzLmxvYWRGcm9tQXJyYXkgICAgPSBsb2FkRnJvbTsgXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZihsb2FkRnJvbSBpbnN0YW5jZW9mIEh0dHBTZXJ2aWNlIHx8IGxvYWRGcm9tIGluc3RhbmNlb2YgSHR0cFNlcnZpY2VBdGl2byl7IFxyXG4gICAgICAgIHRoaXMubG9hZEZyb21TZXJ2aWNlICA9IGxvYWRGcm9tO1xyXG4gICAgICB9IGVsc2UgeyAgXHJcbiAgICAgICAgdGhpcy5sb2FkRnJvbUZ1bmN0aW9uID0gbG9hZEZyb207XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IG5ldyBJbnB1dFNlbGVjdERhdGFMb2FkZXIodGhpcyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSW5wdXRTZWxlY3REYXRhTG9hZGVye1xyXG4gIHByaXZhdGUgbHN0Q29tcG9uZW50czogSW5wdXRTZWxlY3RDb21wb25lbnRbXSA9IFtdO1xyXG4gIHByaXZhdGUgY29uZmlndXJhdGlvbjogSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uO1xyXG5cclxuICAvKiogVmFsb3IgcXVlIHNlcsOhIHNldGFkbyBubyBmb3JtQ29udHJvbCAqL1xyXG4gIHB1YmxpYyBiaW5kVmFsdWU6ICgob2JqOiBhbnkpID0+IGFueSkgICB8IG51bGwgPSBudWxsO1xyXG4gIC8qKiBWYWxvciBxdWUgc2Vyw6EgZXhpYmlkbyAqL1xyXG4gIHB1YmxpYyBiaW5kTGFiZWw6ICgob2JqOiBhbnkpID0+IHN0cmluZyl8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uOiBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24pICB7IFxyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsgXHJcbiAgICB0aGlzLmJpbmRWYWx1ZSA9IEJpbmRWYWx1ZUZhY3RvcnkoY29uZmlndXJhdGlvbilcclxuICAgIHRoaXMuYmluZExhYmVsID0gQmluZExhYmVsRmFjdG9yeShjb25maWd1cmF0aW9uKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIEFkZENvbXBvbmVudChjb21wb25lbnQ6IElucHV0U2VsZWN0Q29tcG9uZW50KTogdm9pZCB7IFxyXG4gICAgdGhpcy5sc3RDb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcclxuICB9XHJcblxyXG4gIC8vVE9ETyBSZW1vdmUgZnVuY3Rpb25cclxuICAgcHVibGljIEdldExhYmVsKHZhbHVlOiBhbnkpe1xyXG4gICAgaWYoIXRoaXMuaXRlbXMgfHwgIXRoaXMuYmluZFZhbHVlIHx8ICF0aGlzLmJpbmRMYWJlbCl7IHJldHVybiBcIlwiOyB9XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcy5maW5kKHAgPT4gdGhpcy5iaW5kVmFsdWUocCkgPT0gdmFsdWUpO1xyXG4gICAgaWYoIWl0ZW0peyByZXR1cm4gXCJcIiA7fVxyXG4gICAgcmV0dXJuIHRoaXMuYmluZExhYmVsKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgaXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlcnJvciAgIDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBhc3luYyBSZWZyZXNoKGl0ZW1zPzogYW55W10pOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5sc3RDb21wb25lbnRzKSB7XHJcbiAgICAgIGNvbXBvbmVudC5sb2FkaW5nRnJvbUxvYWRlciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmKCF0aGlzLmNvbmZpZ3VyYXRpb24ubG9hZEZyb21TZXJ2aWNlICAmJiBcclxuICAgICAgICF0aGlzLmNvbmZpZ3VyYXRpb24ubG9hZEZyb21GdW5jdGlvbiAmJiBcclxuICAgICAgICghdGhpcy5jb25maWd1cmF0aW9uLmxvYWRGcm9tQXJyYXkgfHwgIXRoaXMuY29uZmlndXJhdGlvbi5sb2FkRnJvbUFycmF5Lmxlbmd0aClcclxuICAgICAgKXtcclxuICAgICAgdGhpcy5pdGVtcyA9IFsuLi5pdGVtcyB8fCBbXV07XHJcbiAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmxzdENvbXBvbmVudHMpIHtcclxuICAgICAgICBpZighY29tcG9uZW50LmRlc3Ryb3llZClcclxuICAgICAgICBjb21wb25lbnQuaXRlbXMuc2V0KFsuLi50aGlzLml0ZW1zXSk7IFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRyeXtcclxuICAgICAgYXdhaXQgdGhpcy5Mb2FkKCk7XHJcbiAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmxzdENvbXBvbmVudHMpIHtcclxuICAgICAgICBpZighY29tcG9uZW50LmRlc3Ryb3llZClcclxuICAgICAgICBjb21wb25lbnQuaXRlbXMuc2V0KFsuLi50aGlzLml0ZW1zXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZpbmFsbHl7XHJcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMubHN0Q29tcG9uZW50cykge1xyXG4gICAgICAgIGNvbXBvbmVudC5sb2FkaW5nRnJvbUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpdGVtczogYW55W10gPSBbXTtcclxuICBhc3luYyBMb2FkKCk6IFByb21pc2U8dm9pZD57XHJcbiAgICBpZih0aGlzLmlzTG9hZGVkKXtcclxuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5sc3RDb21wb25lbnRzKSB7XHJcbiAgICAgICBpZighY29tcG9uZW50LmRlc3Ryb3llZClcclxuICAgICAgICBjb21wb25lbnQuaXRlbXMuc2V0KFsuLi50aGlzLml0ZW1zXSk7IFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL1sgTG9hZCBmcm9tIEFycmF5IF1cclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbi5sb2FkRnJvbUFycmF5ICE9IHVuZGVmaW5lZCAmJiB0aGlzLmNvbmZpZ3VyYXRpb24ubG9hZEZyb21BcnJheS5sZW5ndGgpe1xyXG4gICAgICB0aGlzLml0ZW1zID0gWy4uLnRoaXMuY29uZmlndXJhdGlvbi5sb2FkRnJvbUFycmF5XTtcclxuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5sc3RDb21wb25lbnRzKSB7XHJcbiAgICAgICBpZighY29tcG9uZW50LmRlc3Ryb3llZClcclxuICAgICAgICBjb21wb25lbnQuaXRlbXMuc2V0KFsuLi50aGlzLml0ZW1zXSk7IFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL1sgTG9hZCBmcm9tIGFwaSBdXHJcbiAgICBsZXQgdkZpbHRyb3M6IFZpZXdGaWx0cm9zIHwgbnVsbCA9IHRoaXMuY29uZmlndXJhdGlvbi52RmlsdHJvcztcclxuICAgIHRyeXtcclxuICAgICAgbGV0IGxzdERhZG9zOiBhbnlbXSA9IFtdO1xyXG4gICAgICBcclxuICAgICAgY29uc29sZS5sb2coXCJJbnB1dFNlbGVjdERhdGFMb2FkZXIuTG9hZCgpIC0gdkZpbHRyb3M6IFwiLCB2RmlsdHJvcyk7XHJcbiAgICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbi5sb2FkRnJvbVNlcnZpY2Upe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiMSBcIiwgdkZpbHRyb3MpO1xyXG4gICAgICAgIGxzdERhZG9zID0gKGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuY29uZmlndXJhdGlvbi5sb2FkRnJvbVNlcnZpY2UuTGlzdCh2RmlsdHJvcykpKS5sc3REYWRvc1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIjIgXCIsIHZGaWx0cm9zKTtcclxuICAgICAgICBsc3REYWRvcyA9IChhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmNvbmZpZ3VyYXRpb24ubG9hZEZyb21GdW5jdGlvbikpLmxzdERhZG9zO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLml0ZW1zID0gbHN0RGFkb3M7XHJcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMubHN0Q29tcG9uZW50cykge1xyXG4gICAgICAgIGlmKCFjb21wb25lbnQuZGVzdHJveWVkKVxyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcy5zZXQoWy4uLnRoaXMuaXRlbXNdKTsgXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKXsgdGhpcy5lcnJvciA9IHRydWU7IHRocm93IGU7IH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBCaW5kVmFsdWVGYWN0b3J5KGNvbmZpZ3VyYXRpb246IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbik6ICgob2JqOiBhbnkpID0+IGFueSkge1xyXG4gIGNvbnN0IGNCaW5kVmFsdWUgPSBjb25maWd1cmF0aW9uLmJpbmRWYWx1ZTtcclxuICBsZXQgYmluZFZhbHVlOiAoKGFyZ3M6IGFueSkgPT4gYW55KSA9IG51bGw7XHJcbiAgaWYodHlwZW9mKGNCaW5kVmFsdWUpID09ICdzdHJpbmcnKXtcclxuICAgIGxldCBidlM6IHN0cmluZyAgICAgICAgICAgICAgID0gY0JpbmRWYWx1ZTtcclxuICAgIGJpbmRWYWx1ZSA9ICgob2JqOiBhbnkpOiBhbnkgPT4geyByZXR1cm4gb2JqW2J2U107IH0pO1xyXG4gIH1lbHNle1xyXG4gICAgbGV0IGJ2RjogKChhcmdzOiBhbnkpID0+IGFueSkgPSBjQmluZFZhbHVlO1xyXG4gICAgYmluZFZhbHVlID0gKChvYmo6IGFueSk6IGFueSA9PiB7IHJldHVybiBidkYob2JqKTsgfSk7XHJcbiAgfVxyXG4gIHJldHVybiBiaW5kVmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBCaW5kTGFiZWxGYWN0b3J5KGNvbmZpZ3VyYXRpb246IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbik6ICgob2JqOiBhbnkpID0+IHN0cmluZykge1xyXG4gIGNvbnN0IGNCaW5kTGFiZWwgPSBjb25maWd1cmF0aW9uLmJpbmRMYWJlbDtcclxuICBsZXQgYmluZExhYmVsOiAoKGFyZ3M6IGFueSkgPT4gc3RyaW5nKSA9IG51bGw7XHJcbiAgaWYodHlwZW9mKGNCaW5kTGFiZWwpID09ICdzdHJpbmcnKXtcclxuICAgIGxldCBibFM6IHN0cmluZyAgICAgICAgICAgICAgID0gY0JpbmRMYWJlbDtcclxuICAgIGJpbmRMYWJlbCA9ICgob2JqOiBhbnkpOiBzdHJpbmcgPT4geyByZXR1cm4gb2JqW2JsU10gKyAnJzsgfSk7XHJcbiAgfWVsc2V7XHJcbiAgICBsZXQgYmxGOiAoKGFyZ3M6IGFueSkgPT4gYW55KSA9IGNCaW5kTGFiZWw7XHJcbiAgICBiaW5kTGFiZWwgPSAoKG9iajogYW55KTogc3RyaW5nID0+IHsgcmV0dXJuIGJsRihvYmopICsgJyc7IH0pO1xyXG4gIH1cclxuICByZXR1cm4gYmluZExhYmVsO1xyXG59Il19
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuc2VsZWN0LmNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC5zZWxlY3QuY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBTzFELE1BQU0sT0FBTyx3QkFBd0I7SUFtQm5DO0lBQ0UsMkNBQTJDO0lBQ3BDLFlBQThDLElBQUk7SUFDekQsNkJBQTZCO0lBQ3RCLFlBQThDLE1BQU07SUFFM0Qsa0RBQWtEO0lBQzNDLFlBQXVCLElBQUk7SUFDbEMsNkNBQTZDO0lBQ3RDLGNBQXVCLElBQUk7SUFFbEM7Ozs7T0FJRztJQUNJLFFBQXlEO0lBQ2hFLGlGQUFpRjtJQUMxRSxXQUFxQixLQUFLO0lBQ2pDLG9DQUFvQztJQUNwQyxXQVNZLElBQUk7SUFDaEIseURBQXlEO0lBQ2xELHFCQUFxRCxJQUFJO1FBN0J6RCxjQUFTLEdBQVQsU0FBUyxDQUF5QztRQUVsRCxjQUFTLEdBQVQsU0FBUyxDQUEyQztRQUdwRCxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUUzQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFPM0IsYUFBUSxHQUFSLFFBQVEsQ0FBaUQ7UUFFekQsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFhMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QztRQWpEbEUsZ0JBQVcsR0FBZ0Isc0JBQXNCLENBQUE7UUFD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SSxDQUFDO1FBQ0osSUFBSSxHQUFHLEdBQXlCLFVBQVUsQ0FBQztRQUMzQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBTyxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxhQUF1QztJQUN0RSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQzNDLElBQUksU0FBUyxHQUE0QixJQUFJLENBQUM7SUFDOUMsSUFBRyxPQUFNLENBQUMsVUFBVSxDQUFDLElBQUksUUFBUSxFQUFDLENBQUM7UUFDakMsSUFBSSxHQUFHLEdBQXlCLFVBQVUsQ0FBQztRQUMzQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBVSxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztTQUFJLENBQUM7UUFDSixJQUFJLEdBQUcsR0FBeUIsVUFBVSxDQUFDO1FBQzNDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFVLEVBQUUsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlLCBWaWV3UmV0b3JubyB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy93ZWIvaHR0cC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlQXRpdm8gfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvd2ViL2h0dHAuYXRpdm8uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBWaWV3RmlsdHJvcyB9IGZyb20gXCIuLi8uLi8uLi9jbGFzc2VzL2ZpbHRlcnMvdmlldy1maWx0cm9zXCI7XHJcbmltcG9ydCB7IElOVF9NQVggfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdXRpbHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb21wYXJpc29uIH0gZnJvbSBcIi4uLy4uLy4uL2NsYXNzZXMvY29tcGFyaXNvbi9jb21wYXJpc29uXCI7XHJcbmltcG9ydCB7IElucHV0U2VsZWN0Q29tcG9uZW50IH0gZnJvbSBcIi4vaW5wdXQtc2VsZWN0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xyXG5cclxuZXhwb3J0IHR5cGUgRGVmYXVsdE1vZGVsT3B0aW9ucyA9IHsgdmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZyB9O1xyXG5cclxuZXhwb3J0IGNsYXNzIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbntcclxuICBwbGFjZWhvbGRlciAgICAgOiBzdHJpbmcgPSBcIlNlbGVjaW9uZSB1bSBpdGVtLi4uXCJcclxuICBub0l0ZW5zRm91bmRUZXh0OiBzdHJpbmcgPSBcIlNlbSBpdGVtcyBlbmNvbnRyYWRvcy4uLlwiXHJcblxyXG4gIGxvYWRlcjogSW5wdXRTZWxlY3REYXRhTG9hZGVyO1xyXG4gIGxvYWRGcm9tQXJyYXkgICA6IGFueVtdO1xyXG4gIGxvYWRGcm9tU2VydmljZSA6IEh0dHBTZXJ2aWNlIHwgSHR0cFNlcnZpY2VBdGl2b1xyXG4gIGxvYWRGcm9tRnVuY3Rpb246IE9ic2VydmFibGU8YW55PlxyXG5cclxuICBwb3BvdmVyQ29uZmlndXJhdGlvbjoge1xyXG4gICAgZmxpcDogYm9vbGVhbixcclxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50LFxyXG4gIH0gPSB7XHJcbiAgICBmbGlwOiB0cnVlLFxyXG4gICAgcGxhY2VtZW50OiBcImJvdHRvbVwiXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdkZpbHRyb3M6IFZpZXdGaWx0cm9zIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLyoqIFZhbG9yIHF1ZSBzZXLDoSBzZXRhZG8gbm8gZm9ybUNvbnRyb2wgKi9cclxuICAgIHB1YmxpYyBiaW5kVmFsdWU6IHN0cmluZyB8ICgob2JqOiBhbnkpID0+IGFueSkgICAgID0gXCJpZFwiICAsXHJcbiAgICAvKiogVmFsb3IgcXVlIHNlcsOhIGV4aWJpZG8gKi9cclxuICAgIHB1YmxpYyBiaW5kTGFiZWw6IHN0cmluZyB8ICgob2JqOiBhbnkpID0+IHN0cmluZykgID0gXCJub21lXCIsIFxyXG4gICAgXHJcbiAgICAvKiogSW5kaWNhIHNlIG8gc2VsZWN0IHBvZGUgc2VyIG51bG8gZSBsaW1wYXZlbCAqL1xyXG4gICAgcHVibGljIGNsZWFyYWJsZSAgOiBib29sZWFuID0gdHJ1ZSwgXHJcbiAgICAvKiogSW5kaWNhIHNlIG8gc2VsZWN0IHBvZGUgc2VyIHBlc3F1aXNhZG8gKi9cclxuICAgIHB1YmxpYyBzZWFyY2hlYWJsZTogYm9vbGVhbiA9IHRydWUsIFxyXG4gICAgXHJcbiAgICAvKiogXHJcbiAgICAgKiBTZSBMb2FkRnJvbSBpbnN0YW5jZW9mIEh0dHBTZXJ2aWNlICAgICAgLT4gT3MgZGFkb3Mgc2Vyw6NvIGNhcnJlZ2Fkb3MgZG8gTGlzdCgpXHJcbiAgICAgKiBTZSBMb2FkRnJvbSBpbnN0YW5jZW9mIE9ic2VydmFibGUgICAgICAgLT4gT3MgZGFkb3Mgc2Vyw6NvIGNhcnJlZ2Fkb3MgZGEgZnVuw6fDo28gaW5kaWNhZGFcclxuICAgICAqIFNlIExvYWRGcm9tIGluc3RhbmNlb2YgQXJyYXkgICAgICAgICAgICAtPiBPcyBkYWRvcyBzZXLDo28gbyBhcnJheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9hZEZyb20/OiAgSHR0cFNlcnZpY2UgfCBPYnNlcnZhYmxlPFZpZXdSZXRvcm5vPiB8IGFueVtdLCBcclxuICAgIC8qKiBTZSA9IHRydWUgT3MgdmFsb3JlcyBubyBmb3JtIGNvbnRyb2wgc2Vyw6FvIHVtIGFycmF5IGRvcyBpdGVtcyBzZWxlY2lvbmFkb3MgKi9cclxuICAgIHB1YmxpYyBtdWx0aXBsZSA6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIC8qKiBBcGxpY2Egb3MgZmlsdHJvcyBuYSBwZXNxdWlzYSAqL1xyXG4gICAgdkZpbHRyb3MgOiBQYXJ0aWFsPHsgXHJcbiAgICAgIC8qKiBBcGxpY2EgdW1hIHBlc3F1aXNhIGVtIHRleHRvICAqL1xyXG4gICAgICBzZWFyY2g6IHN0cmluZ1xyXG4gICAgICAvKiogUHJvcHJpZWRhZGUgZGUgb3JkZW5hw6fDo28gKi9cclxuICAgICAgb3JkZXJCeVByb3BlcnR5OiBzdHJpbmdcclxuICAgICAgLyoqIE9yaWVudGHDp8OjbyBkZSBvcmRlbmHDp8OjbyAqL1xyXG4gICAgICBhc2NlbmRpbmc6IGJvb2xlYW4sXHJcbiAgICAgIC8qKiBGaWx0cm8gICovXHJcbiAgICAgIGZpbHRlcjogQ29tcGFyaXNvbltdXHJcbiAgICB9PiB8IG51bGwgPSBudWxsLFxyXG4gICAgLyoqIERlc2F0aXZhIG9zIGl0ZW1zIHF1ZSBlc3TDo28gZGUgYWNvcmRvIGNvbSBhIGZ1bsOnw6NvICovXHJcbiAgICBwdWJsaWMgZGlzYWJsZUNvbmRpdGlvbmFsOiAoKG9iajogYW55KSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsXHJcbiAgKXtcclxuICAgIHRoaXMuY2xlYXJhYmxlICAgPSBjbGVhcmFibGU7XHJcbiAgICB0aGlzLnNlYXJjaGVhYmxlID0gc2VhcmNoZWFibGU7XHJcbiAgICB0aGlzLm11bHRpcGxlICAgID0gbXVsdGlwbGU7XHJcblxyXG4gICAgaWYodkZpbHRyb3MgIT0gbnVsbCl7XHJcbiAgICAgIGNvbnN0IHYgPSB2RmlsdHJvcztcclxuICAgICAgaWYodi5hc2NlbmRpbmcgPT0gbnVsbCB8fCB2LmFzY2VuZGluZyA9PSB1bmRlZmluZWQpeyBcclxuICAgICAgICB2LmFzY2VuZGluZyA9IHRydWU7IFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudkZpbHRyb3MgPSBuZXcgVmlld0ZpbHRyb3MoSU5UX01BWCwgdi5zZWFyY2gsIDEsIHYub3JkZXJCeVByb3BlcnR5LCB2LmFzY2VuZGluZyk7XHJcbiAgICAgIHRoaXMudkZpbHRyb3MuZmlsdGVyID0gdi5maWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYobG9hZEZyb20pe1xyXG4gICAgICBpZihBcnJheS5pc0FycmF5KGxvYWRGcm9tKSl7IFxyXG4gICAgICAgIHRoaXMubG9hZEZyb21BcnJheSAgICA9IGxvYWRGcm9tOyBcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKGxvYWRGcm9tIGluc3RhbmNlb2YgSHR0cFNlcnZpY2UgfHwgbG9hZEZyb20gaW5zdGFuY2VvZiBIdHRwU2VydmljZUF0aXZvKXsgXHJcbiAgICAgICAgdGhpcy5sb2FkRnJvbVNlcnZpY2UgID0gbG9hZEZyb207XHJcbiAgICAgIH0gZWxzZSB7ICBcclxuICAgICAgICB0aGlzLmxvYWRGcm9tRnVuY3Rpb24gPSBsb2FkRnJvbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGVyID0gbmV3IElucHV0U2VsZWN0RGF0YUxvYWRlcih0aGlzKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFNlbGVjdERhdGFMb2FkZXJ7XHJcbiAgcHJpdmF0ZSBsc3RDb21wb25lbnRzOiBJbnB1dFNlbGVjdENvbXBvbmVudFtdID0gW107XHJcbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb247XHJcblxyXG4gIC8qKiBWYWxvciBxdWUgc2Vyw6Egc2V0YWRvIG5vIGZvcm1Db250cm9sICovXHJcbiAgcHVibGljIGJpbmRWYWx1ZTogKChvYmo6IGFueSkgPT4gYW55KSAgIHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqIFZhbG9yIHF1ZSBzZXLDoSBleGliaWRvICovXHJcbiAgcHVibGljIGJpbmRMYWJlbDogKChvYmo6IGFueSkgPT4gc3RyaW5nKXwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb246IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbikgIHsgXHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOyBcclxuICAgIHRoaXMuYmluZFZhbHVlID0gQmluZFZhbHVlRmFjdG9yeShjb25maWd1cmF0aW9uKVxyXG4gICAgdGhpcy5iaW5kTGFiZWwgPSBCaW5kTGFiZWxGYWN0b3J5KGNvbmZpZ3VyYXRpb24pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQWRkQ29tcG9uZW50KGNvbXBvbmVudDogSW5wdXRTZWxlY3RDb21wb25lbnQpOiB2b2lkIHsgXHJcbiAgICB0aGlzLmxzdENvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xyXG4gIH1cclxuXHJcbiAgLy9UT0RPIFJlbW92ZSBmdW5jdGlvblxyXG4gICBwdWJsaWMgR2V0TGFiZWwodmFsdWU6IGFueSl7XHJcbiAgICBpZighdGhpcy5pdGVtcyB8fCAhdGhpcy5iaW5kVmFsdWUgfHwgIXRoaXMuYmluZExhYmVsKXsgcmV0dXJuIFwiXCI7IH1cclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQocCA9PiB0aGlzLmJpbmRWYWx1ZShwKSA9PSB2YWx1ZSk7XHJcbiAgICBpZighaXRlbSl7IHJldHVybiBcIlwiIDt9XHJcbiAgICByZXR1cm4gdGhpcy5iaW5kTGFiZWwoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBpc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVycm9yICAgOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGFzeW5jIFJlZnJlc2goaXRlbXM/OiBhbnlbXSk6IFByb21pc2U8dm9pZD57XHJcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmxzdENvbXBvbmVudHMpIHtcclxuICAgICAgY29tcG9uZW50LmxvYWRpbmdGcm9tTG9hZGVyID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYoIXRoaXMuY29uZmlndXJhdGlvbi5sb2FkRnJvbVNlcnZpY2UgICYmIFxyXG4gICAgICAgIXRoaXMuY29uZmlndXJhdGlvbi5sb2FkRnJvbUZ1bmN0aW9uICYmIFxyXG4gICAgICAgKCF0aGlzLmNvbmZpZ3VyYXRpb24ubG9hZEZyb21BcnJheSB8fCAhdGhpcy5jb25maWd1cmF0aW9uLmxvYWRGcm9tQXJyYXkubGVuZ3RoKVxyXG4gICAgICApe1xyXG4gICAgICB0aGlzLml0ZW1zID0gWy4uLml0ZW1zIHx8IFtdXTtcclxuICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMubHN0Q29tcG9uZW50cykge1xyXG4gICAgICAgIGlmKCFjb21wb25lbnQuZGVzdHJveWVkKVxyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcy5zZXQoWy4uLnRoaXMuaXRlbXNdKTsgXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgdHJ5e1xyXG4gICAgICBhd2FpdCB0aGlzLkxvYWQoKTtcclxuICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMubHN0Q29tcG9uZW50cykge1xyXG4gICAgICAgIGlmKCFjb21wb25lbnQuZGVzdHJveWVkKVxyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcy5zZXQoWy4uLnRoaXMuaXRlbXNdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZmluYWxseXtcclxuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5sc3RDb21wb25lbnRzKSB7XHJcbiAgICAgICAgY29tcG9uZW50LmxvYWRpbmdGcm9tTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIGFzeW5jIExvYWQoKTogUHJvbWlzZTx2b2lkPntcclxuICAgIGlmKHRoaXMuaXNMb2FkZWQpe1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmxzdENvbXBvbmVudHMpIHtcclxuICAgICAgIGlmKCFjb21wb25lbnQuZGVzdHJveWVkKVxyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcy5zZXQoWy4uLnRoaXMuaXRlbXNdKTsgXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vWyBMb2FkIGZyb20gQXJyYXkgXVxyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uLmxvYWRGcm9tQXJyYXkgIT0gdW5kZWZpbmVkICYmIHRoaXMuY29uZmlndXJhdGlvbi5sb2FkRnJvbUFycmF5Lmxlbmd0aCl7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBbLi4udGhpcy5jb25maWd1cmF0aW9uLmxvYWRGcm9tQXJyYXldO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmxzdENvbXBvbmVudHMpIHtcclxuICAgICAgIGlmKCFjb21wb25lbnQuZGVzdHJveWVkKVxyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcy5zZXQoWy4uLnRoaXMuaXRlbXNdKTsgXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vWyBMb2FkIGZyb20gYXBpIF1cclxuICAgIGxldCB2RmlsdHJvczogVmlld0ZpbHRyb3MgfCBudWxsID0gdGhpcy5jb25maWd1cmF0aW9uLnZGaWx0cm9zO1xyXG4gICAgdHJ5e1xyXG4gICAgICBsZXQgbHN0RGFkb3M6IGFueVtdID0gW107XHJcbiAgICAgIFxyXG4gICAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24ubG9hZEZyb21TZXJ2aWNlKXtcclxuICAgICAgICBsc3REYWRvcyA9IChhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmNvbmZpZ3VyYXRpb24ubG9hZEZyb21TZXJ2aWNlLkxpc3QodkZpbHRyb3MpKSkubHN0RGFkb3NcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgbHN0RGFkb3MgPSAoYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5jb25maWd1cmF0aW9uLmxvYWRGcm9tRnVuY3Rpb24pKS5sc3REYWRvcztcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pdGVtcyA9IGxzdERhZG9zO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmxzdENvbXBvbmVudHMpIHtcclxuICAgICAgICBpZighY29tcG9uZW50LmRlc3Ryb3llZClcclxuICAgICAgICBjb21wb25lbnQuaXRlbXMuc2V0KFsuLi50aGlzLml0ZW1zXSk7IFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVycm9yID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSl7IHRoaXMuZXJyb3IgPSB0cnVlOyB0aHJvdyBlOyB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmluZFZhbHVlRmFjdG9yeShjb25maWd1cmF0aW9uOiBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24pOiAoKG9iajogYW55KSA9PiBhbnkpIHtcclxuICBjb25zdCBjQmluZFZhbHVlID0gY29uZmlndXJhdGlvbi5iaW5kVmFsdWU7XHJcbiAgbGV0IGJpbmRWYWx1ZTogKChhcmdzOiBhbnkpID0+IGFueSkgPSBudWxsO1xyXG4gIGlmKHR5cGVvZihjQmluZFZhbHVlKSA9PSAnc3RyaW5nJyl7XHJcbiAgICBsZXQgYnZTOiBzdHJpbmcgICAgICAgICAgICAgICA9IGNCaW5kVmFsdWU7XHJcbiAgICBiaW5kVmFsdWUgPSAoKG9iajogYW55KTogYW55ID0+IHsgcmV0dXJuIG9ialtidlNdOyB9KTtcclxuICB9ZWxzZXtcclxuICAgIGxldCBidkY6ICgoYXJnczogYW55KSA9PiBhbnkpID0gY0JpbmRWYWx1ZTtcclxuICAgIGJpbmRWYWx1ZSA9ICgob2JqOiBhbnkpOiBhbnkgPT4geyByZXR1cm4gYnZGKG9iaik7IH0pO1xyXG4gIH1cclxuICByZXR1cm4gYmluZFZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmluZExhYmVsRmFjdG9yeShjb25maWd1cmF0aW9uOiBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24pOiAoKG9iajogYW55KSA9PiBzdHJpbmcpIHtcclxuICBjb25zdCBjQmluZExhYmVsID0gY29uZmlndXJhdGlvbi5iaW5kTGFiZWw7XHJcbiAgbGV0IGJpbmRMYWJlbDogKChhcmdzOiBhbnkpID0+IHN0cmluZykgPSBudWxsO1xyXG4gIGlmKHR5cGVvZihjQmluZExhYmVsKSA9PSAnc3RyaW5nJyl7XHJcbiAgICBsZXQgYmxTOiBzdHJpbmcgICAgICAgICAgICAgICA9IGNCaW5kTGFiZWw7XHJcbiAgICBiaW5kTGFiZWwgPSAoKG9iajogYW55KTogc3RyaW5nID0+IHsgcmV0dXJuIG9ialtibFNdICsgJyc7IH0pO1xyXG4gIH1lbHNle1xyXG4gICAgbGV0IGJsRjogKChhcmdzOiBhbnkpID0+IGFueSkgPSBjQmluZExhYmVsO1xyXG4gICAgYmluZExhYmVsID0gKChvYmo6IGFueSk6IHN0cmluZyA9PiB7IHJldHVybiBibEYob2JqKSArICcnOyB9KTtcclxuICB9XHJcbiAgcmV0dXJuIGJpbmRMYWJlbDtcclxufSJdfQ==