appproject-components 1.0.10 → 1.0.11

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.
@@ -38,7 +38,7 @@ export class InputAreaComponent extends BaseInputComponent {
38
38
  provide: NG_VALUE_ACCESSOR,
39
39
  useExisting: InputAreaComponent,
40
40
  multi: true
41
- }], usesInheritance: true, ngImport: i0, template: "<div>\r\n <ion-item lines=\"none\" style=\"--background-focused: transparent;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ formControlName }}\" -->\r\n <ion-textarea #inputArea \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n [rows]=\"linhas\" \r\n (input)=\"writeValue(inputArea.value)\"\r\n [disabled]=\"readonly\"></ion-textarea>\r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: ["ion-label{margin-bottom:4px!important}ion-textarea{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
41
+ }], usesInheritance: true, ngImport: i0, template: "<div>\r\n <ion-item lines=\"none\" style=\"--background-focused: transparent;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ formControlName }}\" -->\r\n <ion-textarea #inputArea \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n [rows]=\"linhas\" \r\n (input)=\"writeValue(inputArea.value)\"\r\n [disabled]=\"readonly\"></ion-textarea>\r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: ["ion-label{margin-bottom:4px!important}ion-textarea{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
42
42
  }
43
43
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputAreaComponent, decorators: [{
44
44
  type: Component,
@@ -46,7 +46,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
46
46
  provide: NG_VALUE_ACCESSOR,
47
47
  useExisting: InputAreaComponent,
48
48
  multi: true
49
- }], template: "<div>\r\n <ion-item lines=\"none\" style=\"--background-focused: transparent;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ formControlName }}\" -->\r\n <ion-textarea #inputArea \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n [rows]=\"linhas\" \r\n (input)=\"writeValue(inputArea.value)\"\r\n [disabled]=\"readonly\"></ion-textarea>\r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: ["ion-label{margin-bottom:4px!important}ion-textarea{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
49
+ }], template: "<div>\r\n <ion-item lines=\"none\" style=\"--background-focused: transparent;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ formControlName }}\" -->\r\n <ion-textarea #inputArea \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n [rows]=\"linhas\" \r\n (input)=\"writeValue(inputArea.value)\"\r\n [disabled]=\"readonly\"></ion-textarea>\r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: ["ion-label{margin-bottom:4px!important}ion-textarea{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
50
50
  }], ctorParameters: () => [], propDecorators: { linhas: [{
51
51
  type: Input
52
52
  }] } });
@@ -161,7 +161,7 @@ export class InputCepComponent extends BaseInputComponent {
161
161
  provide: NG_VALUE_ACCESSOR,
162
162
  useExisting: InputCepComponent,
163
163
  multi: true
164
- }], usesInheritance: true, ngImport: i0, template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputCep\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputCep.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: ["", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.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: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
164
+ }], usesInheritance: true, ngImport: i0, template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputCep\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputCep.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: ["", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.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: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
165
165
  }
166
166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputCepComponent, decorators: [{
167
167
  type: Component,
@@ -169,7 +169,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
169
169
  provide: NG_VALUE_ACCESSOR,
170
170
  useExisting: InputCepComponent,
171
171
  multi: true
172
- }], template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputCep\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputCep.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: ["@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
172
+ }], template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputCep\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputCep.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: ["@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
173
173
  }], ctorParameters: () => [], propDecorators: { formato: [{
174
174
  type: Input
175
175
  }], keyEnter: [{
@@ -34,7 +34,7 @@ export class InputCheckboxComponent extends BaseInputComponent {
34
34
  provide: NG_VALUE_ACCESSOR,
35
35
  useExisting: InputCheckboxComponent,
36
36
  multi: true
37
- }], usesInheritance: true, ngImport: i0, template: "<div>\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px;\" [class]=\"itemClass\">\n <ion-checkbox #inputCheck\n [labelPlacement]=\"labelPlacement\" [justify]=\"justify\" \n [disabled]=\"readonly\"\n [checked]=\"data\"\n (ionChange)=\"writeValue(inputCheck.checked)\">\n {{ label }}\n </ion-checkbox>\n </ion-item>\n</div>", styles: ["ion-item{--min-height: var(--checkbox-min-height, 48px) !important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }] }); }
37
+ }], usesInheritance: true, ngImport: i0, template: "<div>\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px;\" [class]=\"itemClass\">\n <ion-checkbox #inputCheck\n [labelPlacement]=\"labelPlacement\" [justify]=\"justify\" \n [disabled]=\"readonly\"\n [checked]=\"data\"\n (ionChange)=\"writeValue(inputCheck.checked)\">\n {{ label }}\n </ion-checkbox>\n </ion-item>\n</div>", styles: ["ion-item{--min-height: var(--checkbox-min-height, 48px) !important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }] }); }
38
38
  }
39
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputCheckboxComponent, decorators: [{
40
40
  type: Component,
@@ -42,7 +42,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
42
42
  provide: NG_VALUE_ACCESSOR,
43
43
  useExisting: InputCheckboxComponent,
44
44
  multi: true
45
- }], template: "<div>\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px;\" [class]=\"itemClass\">\n <ion-checkbox #inputCheck\n [labelPlacement]=\"labelPlacement\" [justify]=\"justify\" \n [disabled]=\"readonly\"\n [checked]=\"data\"\n (ionChange)=\"writeValue(inputCheck.checked)\">\n {{ label }}\n </ion-checkbox>\n </ion-item>\n</div>", styles: ["ion-item{--min-height: var(--checkbox-min-height, 48px) !important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
45
+ }], template: "<div>\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px;\" [class]=\"itemClass\">\n <ion-checkbox #inputCheck\n [labelPlacement]=\"labelPlacement\" [justify]=\"justify\" \n [disabled]=\"readonly\"\n [checked]=\"data\"\n (ionChange)=\"writeValue(inputCheck.checked)\">\n {{ label }}\n </ion-checkbox>\n </ion-item>\n</div>", styles: ["ion-item{--min-height: var(--checkbox-min-height, 48px) !important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
46
46
  }], ctorParameters: () => [], propDecorators: { justify: [{
47
47
  type: Input
48
48
  }], labelPlacement: [{
@@ -118,7 +118,7 @@ export class InputFormatComponent extends BaseInputComponent {
118
118
  provide: NG_VALUE_ACCESSOR,
119
119
  useExisting: InputFormatComponent,
120
120
  multi: true
121
- }], viewQueries: [{ propertyName: "inputFormatEdit", first: true, predicate: ["inputFormat"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputFormat\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputFormat.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: [".item-inner{padding-right:0!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
121
+ }], viewQueries: [{ propertyName: "inputFormatEdit", first: true, predicate: ["inputFormat"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputFormat\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputFormat.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: [".item-inner{padding-right:0!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
122
122
  }
123
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputFormatComponent, decorators: [{
124
124
  type: Component,
@@ -126,7 +126,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
126
126
  provide: NG_VALUE_ACCESSOR,
127
127
  useExisting: InputFormatComponent,
128
128
  multi: true
129
- }], template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputFormat\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputFormat.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: [".item-inner{padding-right:0!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
129
+ }], template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputFormat\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputFormat.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: [".item-inner{padding-right:0!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
130
130
  }], ctorParameters: () => [], propDecorators: { formato: [{
131
131
  type: Input
132
132
  }], keyEnter: [{
@@ -499,7 +499,7 @@ export class InputPesquisaComponent extends BaseInputComponent {
499
499
  provide: NG_VALUE_ACCESSOR,
500
500
  useExisting: InputPesquisaComponent,
501
501
  multi: true
502
- }], viewQueries: [{ propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"padding-inline-end: 0px;\">\r\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\" color=\"{{ labelColor }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ campo }}\" -->\r\n <ion-spinner *ngIf=\"!podePesquisar\"\r\n style=\"--min-height: 0px !important; margin-inline-end: 5px !important; margin-top: 16px;\" \r\n slot=\"start\" name=\"lines\"></ion-spinner>\r\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\r\n <!-- conflito com click da lista -->\r\n <ion-input #inputPesquisa\r\n type=\"{{type}}\" \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\" \r\n (ionBlur)=\"onBlur($event)\"\r\n [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\" \r\n (keyup)=\"showPesquisa($event)\"\r\n autocomplete=\"off\" [style.--background]=\"inputBackgroungColor\"\r\n (click)=\"dropDownPesquisa(-1)\"\r\n [disabled]=\"readonly\" debounce=\"500\"></ion-input>\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"limparClick()\">\r\n <ion-icon name=\"close-outline\"></ion-icon>\r\n </ion-button>\r\n \r\n <!--\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n -->\r\n \r\n </ion-item>\r\n \r\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\" class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\r\n \r\n <ion-item tabindex=\"-1\" button *ngFor=\"let item of listaPesquisa\" \r\n (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\r\n class=\"pesquisa-item\">\r\n <!-- {{ item | json}} -->\r\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\r\n </ion-item>\r\n \r\n </ion-list>\r\n \r\n <!--\r\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (ionChange)=\"selecionarComboChange($event.target.value)\">\r\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </ion-select-option>\r\n </ion-select>\r\n -->\r\n \r\n <!--\r\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\r\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </option>\r\n \r\n </select>\r\n -->\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: [".pesquisa-select{display:block;position:absolute;top:58px;left:20px;width:100%;z-index:800;font-size:16px;font-family:Roboto,Helvetica Neue,sans-serif;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.pesquisa-select option{overflow-y:hidden}.pesquisa-select option:hover,.pesquisa-select option:checked{background-color:#add8e6}.pesquisa-list{display:block;position:absolute;margin-left:20px;margin-top:-4px;width:calc(100% - 50px);z-index:800;border:1px lightgrey solid;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:0}.pesquisa-item{--inner-padding-top: 0px;--inner-padding-bottom: 0px;--padding-top: 0px;--padding-bottom: 0px;--min-height: 30px !important;font-size:12px}.pesquisa-item button{padding:0}.selected-item{background-color:#add8e6}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.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: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
502
+ }], viewQueries: [{ propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"padding-inline-end: 0px;\">\r\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ campo }}\" -->\r\n <ion-spinner *ngIf=\"!podePesquisar\"\r\n style=\"--min-height: 0px !important; margin-inline-end: 5px !important; margin-top: 16px;\" \r\n slot=\"start\" name=\"lines\"></ion-spinner>\r\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\r\n <!-- conflito com click da lista -->\r\n <ion-input #inputPesquisa\r\n type=\"{{type}}\" \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\" \r\n (ionBlur)=\"onBlur($event)\"\r\n [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\" \r\n (keyup)=\"showPesquisa($event)\"\r\n autocomplete=\"off\" [style.--background]=\"inputBackgroungColor\"\r\n (click)=\"dropDownPesquisa(-1)\"\r\n [disabled]=\"readonly\" debounce=\"500\"></ion-input>\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"limparClick()\">\r\n <ion-icon name=\"close-outline\"></ion-icon>\r\n </ion-button>\r\n \r\n <!--\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n -->\r\n \r\n </ion-item>\r\n \r\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\" class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\r\n \r\n <ion-item tabindex=\"-1\" button *ngFor=\"let item of listaPesquisa\" \r\n (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\r\n class=\"pesquisa-item\">\r\n <!-- {{ item | json}} -->\r\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\r\n </ion-item>\r\n \r\n </ion-list>\r\n \r\n <!--\r\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (ionChange)=\"selecionarComboChange($event.target.value)\">\r\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </ion-select-option>\r\n </ion-select>\r\n -->\r\n \r\n <!--\r\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\r\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </option>\r\n \r\n </select>\r\n -->\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: [".pesquisa-select{display:block;position:absolute;top:58px;left:20px;width:100%;z-index:800;font-size:16px;font-family:Roboto,Helvetica Neue,sans-serif;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.pesquisa-select option{overflow-y:hidden}.pesquisa-select option:hover,.pesquisa-select option:checked{background-color:#add8e6}.pesquisa-list{display:block;position:absolute;margin-left:20px;margin-top:-4px;width:calc(100% - 50px);z-index:800;border:1px lightgrey solid;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:0}.pesquisa-item{--inner-padding-top: 0px;--inner-padding-bottom: 0px;--padding-top: 0px;--padding-bottom: 0px;--min-height: 30px !important;font-size:12px}.pesquisa-item button{padding:0}.selected-item{background-color:#add8e6}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.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: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
503
503
  }
504
504
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputPesquisaComponent, decorators: [{
505
505
  type: Component,
@@ -507,7 +507,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
507
507
  provide: NG_VALUE_ACCESSOR,
508
508
  useExisting: InputPesquisaComponent,
509
509
  multi: true
510
- }], template: "<div style=\"padding-inline-end: 0px;\">\r\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\" color=\"{{ labelColor }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ campo }}\" -->\r\n <ion-spinner *ngIf=\"!podePesquisar\"\r\n style=\"--min-height: 0px !important; margin-inline-end: 5px !important; margin-top: 16px;\" \r\n slot=\"start\" name=\"lines\"></ion-spinner>\r\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\r\n <!-- conflito com click da lista -->\r\n <ion-input #inputPesquisa\r\n type=\"{{type}}\" \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\" \r\n (ionBlur)=\"onBlur($event)\"\r\n [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\" \r\n (keyup)=\"showPesquisa($event)\"\r\n autocomplete=\"off\" [style.--background]=\"inputBackgroungColor\"\r\n (click)=\"dropDownPesquisa(-1)\"\r\n [disabled]=\"readonly\" debounce=\"500\"></ion-input>\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"limparClick()\">\r\n <ion-icon name=\"close-outline\"></ion-icon>\r\n </ion-button>\r\n \r\n <!--\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n -->\r\n \r\n </ion-item>\r\n \r\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\" class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\r\n \r\n <ion-item tabindex=\"-1\" button *ngFor=\"let item of listaPesquisa\" \r\n (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\r\n class=\"pesquisa-item\">\r\n <!-- {{ item | json}} -->\r\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\r\n </ion-item>\r\n \r\n </ion-list>\r\n \r\n <!--\r\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (ionChange)=\"selecionarComboChange($event.target.value)\">\r\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </ion-select-option>\r\n </ion-select>\r\n -->\r\n \r\n <!--\r\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\r\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </option>\r\n \r\n </select>\r\n -->\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: [".pesquisa-select{display:block;position:absolute;top:58px;left:20px;width:100%;z-index:800;font-size:16px;font-family:Roboto,Helvetica Neue,sans-serif;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.pesquisa-select option{overflow-y:hidden}.pesquisa-select option:hover,.pesquisa-select option:checked{background-color:#add8e6}.pesquisa-list{display:block;position:absolute;margin-left:20px;margin-top:-4px;width:calc(100% - 50px);z-index:800;border:1px lightgrey solid;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:0}.pesquisa-item{--inner-padding-top: 0px;--inner-padding-bottom: 0px;--padding-top: 0px;--padding-bottom: 0px;--min-height: 30px !important;font-size:12px}.pesquisa-item button{padding:0}.selected-item{background-color:#add8e6}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
510
+ }], template: "<div style=\"padding-inline-end: 0px;\">\r\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ campo }}\" -->\r\n <ion-spinner *ngIf=\"!podePesquisar\"\r\n style=\"--min-height: 0px !important; margin-inline-end: 5px !important; margin-top: 16px;\" \r\n slot=\"start\" name=\"lines\"></ion-spinner>\r\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\r\n <!-- conflito com click da lista -->\r\n <ion-input #inputPesquisa\r\n type=\"{{type}}\" \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\" \r\n (ionBlur)=\"onBlur($event)\"\r\n [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\" \r\n (keyup)=\"showPesquisa($event)\"\r\n autocomplete=\"off\" [style.--background]=\"inputBackgroungColor\"\r\n (click)=\"dropDownPesquisa(-1)\"\r\n [disabled]=\"readonly\" debounce=\"500\"></ion-input>\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"limparClick()\">\r\n <ion-icon name=\"close-outline\"></ion-icon>\r\n </ion-button>\r\n \r\n <!--\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n -->\r\n \r\n </ion-item>\r\n \r\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\" class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\r\n \r\n <ion-item tabindex=\"-1\" button *ngFor=\"let item of listaPesquisa\" \r\n (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\r\n class=\"pesquisa-item\">\r\n <!-- {{ item | json}} -->\r\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\r\n </ion-item>\r\n \r\n </ion-list>\r\n \r\n <!--\r\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (ionChange)=\"selecionarComboChange($event.target.value)\">\r\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </ion-select-option>\r\n </ion-select>\r\n -->\r\n \r\n <!--\r\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\r\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </option>\r\n \r\n </select>\r\n -->\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: [".pesquisa-select{display:block;position:absolute;top:58px;left:20px;width:100%;z-index:800;font-size:16px;font-family:Roboto,Helvetica Neue,sans-serif;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.pesquisa-select option{overflow-y:hidden}.pesquisa-select option:hover,.pesquisa-select option:checked{background-color:#add8e6}.pesquisa-list{display:block;position:absolute;margin-left:20px;margin-top:-4px;width:calc(100% - 50px);z-index:800;border:1px lightgrey solid;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:0}.pesquisa-item{--inner-padding-top: 0px;--inner-padding-bottom: 0px;--padding-top: 0px;--padding-bottom: 0px;--min-height: 30px !important;font-size:12px}.pesquisa-item button{padding:0}.selected-item{background-color:#add8e6}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
511
511
  }], ctorParameters: () => [{ type: undefined, decorators: [{
512
512
  type: Inject,
513
513
  args: ['LibConfigService']
@@ -547,4 +547,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
547
547
  }], loadInit: [{
548
548
  type: Input
549
549
  }] } });
550
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtcGVzcXVpc2EvaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtcGVzcXVpc2EvaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsT0FBTyxFQUFnQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7QUFFcEYsZ0ZBQWdGO0FBWWhGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxrQkFBa0I7SUEyQzVELFVBQVUsQ0FBQyxLQUFtQjtRQUM1QixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZ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cG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIFByZWRpY2F0ZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSW9uU2VsZWN0LCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZUlucHV0Q29tcG9uZW50JztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgTW9kZWxUcmVldmlld0NvbXBvbmVudCB9IGZyb20gJy4uL21vZGVsLXRyZWV2aWV3L21vZGVsLXRyZWV2aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExpYkNvbmZpZyB9IGZyb20gJy4uL2xpYi1jb25maWcnO1xyXG4vL2ltcG9ydCB7IExpYkNvbmZpZywgTGliQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2FwcHByb2plY3QtY29tcG9uZW50cy5tb2R1bGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrYi1pbnB1dC1wZXNxdWlzYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXBlc3F1aXNhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1wZXNxdWlzYS5jb21wb25lbnQuc2NzcycsICcuLy4uL2Jhc2VDb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW3tcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgdXNlRXhpc3Rpbmc6IElucHV0UGVzcXVpc2FDb21wb25lbnQsXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFBlc3F1aXNhQ29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIHBvZGVQZXNxdWlzYXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHRleHRvUGVzcXVpc2E6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdEVsZW1lbnRWaXNpdmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdGFQZXNxdWlzYTogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZEl0ZW06IGFueTtcclxuICBASW5wdXQoKSBvdmVycmlkZSBtYXg6IHN0cmluZyA9ICczMCc7XHJcbiAgcHJpdmF0ZSBwZXNxdWlzYVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlckZ1bmN0aW9uOiBQcmVkaWNhdGU8YW55PiB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlbGVjdElkOiBzdHJpbmcgPSAnc2VsZWN0RWxlbWVudCc7XHJcbiAgQElucHV0KCkgY2FtcG9JZDogc3RyaW5nID0gJ0lkJztcclxuICBASW5wdXQoKSBjYW1wb1BhaUlkOiBzdHJpbmcgPSAnUGFpSWQnO1xyXG4gIEBJbnB1dCgpIGNhbXBvRGlzcGxheTogc3RyaW5nID0gJ0Rlc2NyaWNhbyc7XHJcbiAgQElucHV0KCkgdGlwbzogc3RyaW5nID0gJyc7XHJcbiAgLy9AVmlld0NoaWxkKCdzZWxlY3RFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0RWxlbWVudDtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlbGVjdEVsZW1lbnQ6IElvblNlbGVjdCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBwZXNxdWlzYUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBwZXNxdWlzYUFjdGlvbj86IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpIGxpbXBhcj86IEZ1bmN0aW9uO1xyXG4gIC8vcGFyYW1ldHJvcyBwYXJhIGNoYW1hZGEgQVBJXHJcbiAgLy9lbmRwb2ludCBwYXJhIHBlc3F1aXNhIHBvciBkaWdpdGHDp8Ojb1xyXG4gIEBJbnB1dCgpIHVybDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdXJsSXRlbTogc3RyaW5nID0gJyc7XHJcbiAgLy9lbmRwb2ludCBwYXJhIG1vbnRhciBhIGFydm9yZSwgc2UgZXN0aXZlciB2YXppYSBzZXLDoSB1c2FkbyBvIGNhbXBvICd1cmwnXHJcbiAgQElucHV0KCkgdXJsVHJlZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgZW1wcmVzYTogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBsb2FkSW5pdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvL3BsYW5vQ29udGFzOiBudW1iZXI7XHJcblxyXG4gIC8vY29udHJvbCB2YWx1ZSBhY2Vzc29yXHJcbiAgcHVibGljIGRhdGE6IG51bWJlciB8IGFueTtcclxuICBwcml2YXRlIG9uQ2hhbmdlOiBGdW5jdGlvbiA9IChkYXRhOiBudW1iZXIpID0+IHsgfTtcclxuICBwcml2YXRlIG9uVG91Y2g6IEZ1bmN0aW9uID0gKCkgPT4geyB9O1xyXG4gIHByaXZhdGUgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY29uc29sZSA9IGNvbnNvbGU7XHJcblxyXG4gIG1vZGVsQ2hhbmdlZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIG1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBhbnkpOiB2b2lkIHtcclxuICAgIC8vY29uc29sZS5sb2coJ3dyaXRlIHZhbHVlJywgdmFsdWUpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IDApIHtcclxuICAgICAgdGhpcy53cml0ZVBlc3F1aXNhKCcnKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubG9hZEluaXQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMubG9hZEluaXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlZC5uZXh0KHZhbHVlKTtcclxuICAgICAgICAvL3RoaXMuY2FycmVnYUl0ZW1JZFBhcmFMaXN0YSh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbSB8fCAodGhpcy5zZWxlY3RlZEl0ZW0gJiYgdGhpcy5zZWxlY3RlZEl0ZW1bdGhpcy5jYW1wb0lkXSAhPSB2YWx1ZSkpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdJZCBkaWZlcmVudGUnKTtcclxuICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2VkLm5leHQodmFsdWUpO1xyXG4gICAgICAgICAgLy90aGlzLmNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEJBU0VfQVBJID0gdGhpcy5jb25maWcuYXBpVXJsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KCdMaWJDb25maWdTZXJ2aWNlJykgcHJpdmF0ZSBjb25maWc6IExpYkNvbmZpZyxcclxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy5tb2RlbENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubW9kZWxDaGFuZ2VkXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLmNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEoZGF0YSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCdibHVyJywgZXZlbnQpO1xyXG4gICAgLy9jb25zb2xlLmxvZyhldmVudC5kZXRhaWwucmVsYXRlZFRhcmdldCk7XHJcbiAgICBpZiAoZXZlbnQuZGV0YWlsLnJlbGF0ZWRUYXJnZXQgPT0gbnVsbCB8fCBldmVudC5kZXRhaWwucmVsYXRlZFRhcmdldC5pZC5pbmRleE9mKHRoaXMuc2VsZWN0SWQgKyAnSW9uSXRlbScpID09IC0xKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJ0cnVlXCIsIGV2ZW50LmRldGFpbC5yZWxhdGVkVGFyZ2V0LmlkKTtcclxuICAgICAgLy9wZXNxdWlzYXIgaXRlbSBuYSBsaXN0YVxyXG4gICAgICBpZiAoIXRoaXMuZXhpc3RlTmFMaXN0YVRleHRvKHRoaXMudGV4dG9QZXNxdWlzYSwgdHJ1ZSkpIHtcclxuICAgICAgICB0aGlzLmxpbXBhckNsaWNrKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSgwKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpPy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgLy90cmF0YXIgdXJsc1xyXG4gICAgdGhpcy51cmwgPSB0aGlzLnVybC5zdGFydHNXaXRoKCdodHRwJykgPyB0aGlzLnVybCA6IGAke3RoaXMuQkFTRV9BUEl9LyR7dGhpcy51cmx9YDtcclxuICAgIHRoaXMudXJsSXRlbSA9IHRoaXMudXJsSXRlbS5zdGFydHNXaXRoKCdodHRwJykgPyB0aGlzLnVybEl0ZW0gOiBgJHt0aGlzLkJBU0VfQVBJfS8ke3RoaXMudXJsSXRlbX1gO1xyXG5cclxuICAgIHRoaXMucGVzcXVpc2FTdWJqZWN0LnBpcGUoc3dpdGNoTWFwKCh1cmwpID0+IHtcclxuICAgICAgLy90aGlzLmNvbnNvbGUubG9nKCdzdWJqZWN0IHVybDonLCB1cmwpOyAgICAgIFxyXG4gICAgICBpZiAoIXRoaXMuaXNFbXB0eSh1cmwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodXJsKTtcclxuICAgICAgICAvL3JldHVybiBvZih1cmwpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy90aGlzLmxpc3RhUGVzcXVpc2EgPSByZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLmNvbnNvbGUubG9nKCdzdWJqZWN0IHN1YnNjcmliZSByZXN1bHQ6JywgcmVzdWx0KTtcclxuICAgICAgICAgIHRoaXMubGlzdGFQZXNxdWlzYSA9IFtdO1xyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKHRoaXMuZmlsdGVyRnVuY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaCgoZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EucHVzaCh7IC4uLmVudCwgSW5kZXg6IGluZGV4LCBTZWxlY3RlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wRG93blBlc3F1aXNhKHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAsIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJybyBwZXNxdWlzYScsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVQZXNxdWlzYSh2YWx1ZTogc3RyaW5nIHwgYW55KTogdm9pZCB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCd3cml0ZSBwZXNxdWlzYScsIHZhbHVlKTtcclxuICAgIHRoaXMudGV4dG9QZXNxdWlzYSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2hvd1Blc3F1aXNhKGU6IGFueSk6IHZvaWQge1xyXG4gICAgLy9jb25zb2xlLmxvZygnc2hvdyBwZXNxdWlzYScsIGUua2V5Q29kZSk7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zdCBpbmRleCA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID49IDEgPyAoZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxKSA6IDA7XHJcbiAgICAvL2NvbnNvbGUubG9nKGluZGV4LCAndmFsb3IgJywgZXZlbnQudGFyZ2V0LnZhbHVlLCAnY2hhciAnLCBldmVudC50YXJnZXQudmFsdWUuY2hhckNvZGVBdChpbmRleCkpO1xyXG4gICAgY29uc3Qga2V5QXQgPSBlLnRhcmdldC52YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcclxuICAgIC8qXHJcbiAgICBpZiAoKGUua2V5Q29kZSA+PSA0OCAmJiBlLmtleUNvZGUgPD0gNTcpIHx8XHJcbiAgICAgIChrZXlBdCA+PSA0OCAmJiBrZXlBdCA8PSA1NykgfHxcclxuICAgICAgKGUua2V5Q29kZSA+PSA2NSAmJiBlLmtleUNvZGUgPD0gOTApIHx8XHJcbiAgICAgIChlLmtleUNvZGUgPj0gOTYgJiYgZS5rZXlDb2RlIDw9IDEwNSkgfHxcclxuICAgICAgKGUua2V5Q29kZSA9PSA4KSkge1xyXG4gICAgICAgICovXHJcbiAgICBpZiAoZS5rZXlDb2RlICE9IDQwICYmIGUua2V5Q29kZSAhPSAzOCkge1xyXG4gICAgICBpZiAoIXNlbGYucG9kZVBlc3F1aXNhcikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBsZXQgZmlsdHJvID0gc2VsZi50ZXh0b1Blc3F1aXNhO1xyXG4gICAgICBpZiAoZmlsdHJvICE9IG51bGwgJiYgZmlsdHJvICE9ICcnICYmIGZpbHRyby5sZW5ndGggPj0gMikge1xyXG4gICAgICAgIHNlbGYucGVzcXVpc2FyRW50aWRhZGUoZmlsdHJvKTtcclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PSA4ICYmICFmaWx0cm8pIHtcclxuICAgICAgICAgIHRoaXMubGltcGFyQ2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGUua2V5Q29kZSA9PSA0MCB8fCBlLmtleUNvZGUgPT0gMzgpIHtcclxuICAgICAgICBzZWxmLmRyb3BEb3duUGVzcXVpc2Eoc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy9sZXQgc2VsZWN0ID0gc2VsZi5zZWxlY3RFbGVtZW50OyAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGYuVGVtcGxhdGVTZWxlY3QxSWQoKSk7XHJcblxyXG4gICAgICAgICAgLy9pb24tbGlzdFxyXG4gICAgICAgICAgLy9zZWxlY2lvbmFkb1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhzZWxmLmxpc3RhUGVzcXVpc2EpO1xyXG4gICAgICAgICAgbGV0IGluYyA9IGUua2V5Q29kZSA9PSA0MCA/IDEgOiAtMTtcclxuICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHNlbGYubGlzdGFQZXNxdWlzYS5maW5kKHMgPT4gc1snU2VsZWN0ZWQnXSA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgICBsZXQgY3VyID0gMDtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGN1ciA9IHNlbGVjdGVkWydJbmRleCddO1xyXG4gICAgICAgICAgICAvL2Rlc21hcmNhciBvIGF0dWFsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkWydTZWxlY3RlZCddID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGN1ciA9IGN1ciArIGluYztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1ciA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGN1ciA8IDApIHtcclxuICAgICAgICAgICAgY3VyID0gc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1ciA+PSBzZWxmLmxpc3RhUGVzcXVpc2EubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGN1ciA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IG5vdm9TZWxlY3RlZCA9IHNlbGYubGlzdGFQZXNxdWlzYS5maW5kKG4gPT4gblsnSW5kZXgnXSA9PT0gY3VyKTtcclxuICAgICAgICAgIGlmIChub3ZvU2VsZWN0ZWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBub3ZvU2VsZWN0ZWRbJ1NlbGVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IG5vdm9TZWxlY3RlZDtcclxuICAgICAgICAgICAgc2VsZi50ZXh0b1Blc3F1aXNhID0gbm92b1NlbGVjdGVkW3NlbGYuY2FtcG9EaXNwbGF5XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBsZXQgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWxlY3RJZCkgYXMgYW55O1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3NlbGVjdCBFbGVtZW50Jywgc2VsZWN0KVxyXG4gICAgICAgICAgaWYgKHNlbGVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmMgPSBlLmtleUNvZGUgPT0gNDAgPyAxIDogLTE7XHJcbiAgICAgICAgICAgIGxldCBjdXIgPSBzZWxlY3Quc2VsZWN0ZWRJbmRleDtcclxuICAgICAgICAgICAgaWYgKGN1ciA9PSBOYU4pIGN1ciA9IC0xO1xyXG4gICAgICAgICAgICBzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IGN1ciArIGluYztcclxuICAgICAgICAgICAgaWYgKHNlbGVjdC5zZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0LnNlbGVjdGVkSW5kZXggPCBzZWxmLmxpc3RhUGVzcXVpc2EubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEl0ZW0gPSBzZWxmLmxpc3RhUGVzcXVpc2Fbc2VsZWN0LnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlbnRlciBrZXknLCBlKVxyXG4gICAgICAgICAgLy9zZWxmLnNlbGVjaW9uYXJDb21ib0NsaWNrKGUpO1xyXG4gICAgICAgICAgc2VsZi5zZWxlY2lvbmFyQ29tYm9DbGljayhudWxsKTtcclxuICAgICAgICAgIC8vcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDI3KSB7XHJcbiAgICAgICAgICAvL0VTQ1xyXG4gICAgICAgICAgc2VsZi5kcm9wRG93blBlc3F1aXNhKDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHQodGV4dG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgaW5kZXggPSB0ZXh0by50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy50ZXh0b1Blc3F1aXNhLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgLy9jb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICByZXR1cm4gdGV4dG8uc3Vic3RyaW5nKDAsIGluZGV4KSArICc8c3Ryb25nPicgKyB0ZXh0by5zdWJzdHJpbmcoaW5kZXgsIGluZGV4ICsgdGhpcy50ZXh0b1Blc3F1aXNhLmxlbmd0aCkgKyAnPC9zdHJvbmc+JyArIHRleHRvLnN1YnN0cmluZyhpbmRleCArIHRoaXMudGV4dG9QZXNxdWlzYS5sZW5ndGgpOyAgLy90ZXh0by5yZXBsYWNlKHRoaXMudGV4dG9QZXNxdWlzYSwgYDxzdHJvbmc+JHt0aGlzLnRleHRvUGVzcXVpc2F9PC9zdHJvbmc+YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGV4dG87XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY2lvbmFyQ29tYm9DbGljayhpdGVtOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2NvbWJvIGNsaWNrJywgc2VsZik7XHJcblxyXG4gICAgLypcclxuICAgIGxldCBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlbGVjdElkKSBhcyBhbnk7XHJcbiAgICBpZiAoc2VsZWN0LnNlbGVjdGVkSW5kZXggPj0gMCkge1xyXG4gICAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IHNlbGYubGlzdGFQZXNxdWlzYVtzZWxlY3Quc2VsZWN0ZWRJbmRleF07XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnc2VsZWN0ZWQnLCB0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAvL3NlbGYuc2VsZWN0ZWRJdGVtID0gdGhpcy5saXN0YVBlc3F1aXNhLmZpbmQoaSA9PiBpW3RoaXMuY2FtcG9JZF0gPT0gZSk7XHJcbiAgICBpZiAoc2VsZi5zZWxlY3RlZEl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgIHNlbGYud3JpdGVWYWx1ZShzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvSWRdKTtcclxuICAgICAgaWYgKGUgIT0gbnVsbCkge1xyXG4gICAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSBmYWxzZTtcclxuICAgICAgICBpZiAoc2VsZi5hY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgc2VsZi5hY3Rpb24oc2VsZi5zZWxlY3RlZEl0ZW0oKSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgKi9cclxuICAgIC8vIHBlc3F1aXNhciBzZWxlY2lvbmFkb1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5saXN0YVBlc3F1aXNhKTtcclxuICAgIGxldCBzZWxlY3RlZCA9IHRoaXMubGlzdGFQZXNxdWlzYS5maW5kKHMgPT4gc1snU2VsZWN0ZWQnXSA9PT0gdHJ1ZSk7XHJcblxyXG4gICAgLy8gaWYgKCFzZWxlY3RlZCkge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmNhbXBvSWQsIGl0ZW0pO1xyXG4gICAgLy8gICBzZWxlY3RlZCA9IHRoaXMubGlzdGFQZXNxdWlzYS5maWx0ZXIoIHMgPT4gc1t0aGlzLmNhbXBvSWRdID09IGl0ZW1bdGhpcy5jYW1wb0lkXSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy9zZSBvIGl0ZW0gZm9ybSBwYXNzYWRvIGNvbW8gcGFyYW1ldHJvIChjbGljayBubyBpb24taXRlbSlcclxuICAgIGlmIChpdGVtICE9IG51bGwpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkICE9IG51bGwpIHtcclxuICAgICAgICBzZWxlY3RlZFsnU2VsZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGl0ZW1bJ1NlbGVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICBzZWxlY3RlZCA9IGl0ZW07XHJcbiAgICB9XHJcbiAgICBpZiAoc2VsZWN0ZWQgIT0gbnVsbCkge1xyXG4gICAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkO1xyXG4gICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxlY3RlZFtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgIHNlbGYud3JpdGVWYWx1ZShzZWxlY3RlZFtzZWxmLmNhbXBvSWRdKTtcclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdhY3Rpb24nLCBzZWxmLmNoYW5nZSk7XHJcbiAgICAgIGlmIChzZWxmLnBlc3F1aXNhQ2hhbmdlICE9IG51bGwpIHtcclxuICAgICAgICBzZWxmLnBlc3F1aXNhQ2hhbmdlLmVtaXQoc2VsZi5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmxpc3RhUGVzcXVpc2EuZm9yRWFjaCggcGVzcXVpc2EgPT4ge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhwZXNxdWlzYSwgc2VsZi5kYXRhKTtcclxuICAgIC8vIH0gKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMudGV4dG9QZXNxdWlzYSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY2lvbmFyQ29tYm9DaGFuZ2UoZTogYW55KSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zb2xlLmxvZygnY29tYm8gY2hhbmdlJywgZSk7XHJcbiAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IHRoaXMubGlzdGFQZXNxdWlzYS5maW5kKGkgPT4gaVt0aGlzLmNhbXBvSWRdID09IGUpO1xyXG4gICAgaWYgKHNlbGYuc2VsZWN0ZWRJdGVtICE9IG51bGwpIHtcclxuICAgICAgc2VsZi53cml0ZVZhbHVlKGUpO1xyXG4gICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgIGlmIChlICE9IG51bGwpIHtcclxuICAgICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHNlbGYucGVzcXVpc2FDaGFuZ2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgc2VsZi5wZXNxdWlzYUNoYW5nZS5lbWl0KHNlbGYuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcm9wRG93blBlc3F1aXNhKGxlbmd0aDogbnVtYmVyKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBpZiAoc2VsZi5saXN0YVBlc3F1aXNhICE9IG51bGwgJiYgc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGxlbmd0aCA9PSAtMSkge1xyXG4gICAgICAgIGxlbmd0aCA9IHNlbGYubGlzdGFQZXNxdWlzYS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGxlbmd0aCA9PSAwID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdEVsZW1lbnQpO1xyXG4gICAgICAvL3RoaXMuc2VsZWN0RWxlbWVudC5vcGVuKCk7XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAvL2xldCBlbGVtZW50ID0gdGhpcy5zZWxlY3RFbGVtZW50O1xyXG4gICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0SWQpO1xyXG4gICAgICBjb25zb2xlLmxvZygnZHJvcERvd24nLCBlbGVtZW50KTtcclxuICAgICAgKGVsZW1lbnQgYXMgYW55KS5zaXplID0gbGVuZ3RoICsgMTtcclxuICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXNxdWlzYXJFbnRpZGFkZShmaWx0cm86IHN0cmluZykge1xyXG4gICAgbGV0IHVybCA9IHRoaXMudXJsLnJlcGxhY2UoJzw8RklMVFJPPj4nLCBmaWx0cm8pLnJlcGxhY2UoJzw8RU1QUkVTQT4+JywgdGhpcy5lbXByZXNhLnRvU3RyaW5nKCkpO1xyXG4gICAgY29uc29sZS5sb2coJ3Blc3F1aXNhckVudGlkYWRlIHVybCcsIHVybCk7XHJcbiAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSBmYWxzZTtcclxuICAgIHRoaXMucGVzcXVpc2FTdWJqZWN0Lm5leHQodXJsKTtcclxuICB9XHJcblxyXG4gIHBlc3F1aXNhckVudGlkYWRlT2xkKGZpbHRybzogc3RyaW5nKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy51cmwucmVwbGFjZSgnPDxGSUxUUk8+PicsIGZpbHRybykucmVwbGFjZSgnPDxFTVBSRVNBPj4nLCB0aGlzLmVtcHJlc2EudG9TdHJpbmcoKSk7XHJcbiAgICBjb25zb2xlLmxvZygncGVzcXVpc2FyRW50aWRhZGUgdXJsJywgdXJsKTtcclxuICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5odHRwQ2xpZW50LmdldDxhbnk+KHVybClcclxuICAgICAgLnN1YnNjcmliZSh7IG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vdGhpcy5saXN0YVBlc3F1aXNhID0gcmVzdWx0O1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlckZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKHRoaXMuZmlsdGVyRnVuY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuICAgICAgICByZXN1bHQuZm9yRWFjaCgoZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMubGlzdGFQZXNxdWlzYS5wdXNoKHsgLi4uZW50LCBJbmRleDogaW5kZXgsIFNlbGVjdGVkOiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSh0aGlzLmxpc3RhUGVzcXVpc2EubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm8gcGVzcXVpc2EnLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgICAgfX0pO1xyXG4gIH1cclxuXHJcbiAgZXhpc3RlTmFMaXN0YShpZDogbnVtYmVyLCBzZXRSZWdpc3RybzogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5saXN0YVBlc3F1aXNhICYmIHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBleGlzdGUgPSB0aGlzLmxpc3RhUGVzcXVpc2EuZmluZChsID0+IGxbdGhpcy5jYW1wb0lkXSA9PT0gaWQpO1xyXG4gICAgICBpZiAoZXhpc3RlKSB7XHJcbiAgICAgICAgaWYgKHNldFJlZ2lzdHJvKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGV4aXN0ZTtcclxuICAgICAgICAgIHRoaXMuc2VsZWNpb25hckNvbWJvQ2xpY2sodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4aXN0ZU5hTGlzdGFUZXh0byh0ZXh0bzogc3RyaW5nLCBzZXRSZWdpc3RybzogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zb2xlLmxvZyhcImV4aXN0ZSB0ZXh0bzpcIiwgdGV4dG8sIHRoaXMuY2FtcG9EaXNwbGF5LCB0aGlzLmxpc3RhUGVzcXVpc2EpO1xyXG4gICAgaWYgKHRoaXMubGlzdGFQZXNxdWlzYSAmJiB0aGlzLmxpc3RhUGVzcXVpc2EubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgZXhpc3RlID0gdGhpcy5saXN0YVBlc3F1aXNhLmZpbmQobCA9PiBsW3RoaXMuY2FtcG9EaXNwbGF5XS50b1VwcGVyQ2FzZSgpID09PSB0ZXh0by50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgaWYgKGV4aXN0ZSkge1xyXG4gICAgICAgIGlmIChzZXRSZWdpc3Rybykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBleGlzdGU7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjaW9uYXJDb21ib0NsaWNrKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGFySXRlbVNlbGVjaW9uYWRvKHNldGFyUmVnaXN0cm86IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc29sZS5sb2coJ3ZhbGlkYXIgc2VsZWNpb25hZG8nKTtcclxuICAgIC8vcGFzc2FyIHBlbGEgZnVuw6fDo28gZGUgZmlsdHJvXHJcbiAgICBsZXQgdmFsaWRvID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyRnVuY3Rpb24pIHtcclxuICAgICAgICBsZXQgZXhpc3RlID0gW3sgLi4udGhpcy5zZWxlY3RlZEl0ZW0gfV0uZmlsdGVyKHRoaXMuZmlsdGVyRnVuY3Rpb24pO1xyXG4gICAgICAgIGlmIChleGlzdGUgIT0gbnVsbCAmJiBleGlzdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdmFsaWRvID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsaWRvID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsaWRvICYmIHNldGFyUmVnaXN0cm8pIHtcclxuICAgICAgICB0aGlzLnNlbGVjaW9uYXJDb21ib0NsaWNrKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkbztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEoaWQ6IG51bWJlcikge1xyXG4gICAgbGV0IHVybCA9IHRoaXMudXJsSXRlbS5yZXBsYWNlKCc8PElEPj4nLCBpZC50b1N0cmluZygpKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudXJsSXRlbSk7XHJcbiAgICBjb25zb2xlLmxvZygncGVzcXVpc2FyIElEIHVybCcsIHVybCk7XHJcbiAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaHR0cENsaWVudC5nZXQ8YW55Pih1cmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoeyBuZXh0OiAocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EucHVzaCh7IC4uLnJlc3VsdCwgSW5kZXg6IDAsIFNlbGVjdGVkOiB0cnVlIH0pO1xyXG4gICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMubGlzdGFQZXNxdWlzYVswXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWNpb25hckNvbWJvQ2xpY2sodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3I6ICBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm8gcGVzcXVpc2EnLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgICAgfX0pO1xyXG4gIH1cclxuXHJcbiAgbGltcGFyQ2xpY2soKSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLndyaXRlUGVzcXVpc2EobnVsbCk7XHJcbiAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSgwKTtcclxuICAgIC8vdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgIHRoaXMucGVzcXVpc2FTdWJqZWN0Lm5leHQoJycpO1xyXG4gICAgaWYgKHRoaXMubGltcGFyKSB7XHJcbiAgICAgIHRoaXMubGltcGFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2ZXJpZmljYXJQZXNxdWlzYSgpIHtcclxuICAgIC8vVE9ETzogdmVyaWZpY2FyIHNlIG8gdGV4dG8gY29ycmVzcG9uZGUgY29tIHVtIGl0ZW0gZGEgbGlzdGFcclxuICAgIHRoaXMuc2VsZWNpb25hckNvbWJvQ2xpY2sobnVsbCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXNxdWlzYXJDbGljaygpIHtcclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy5wZXNxdWlzYUFjdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucGVzcXVpc2FBY3Rpb24oKTtcclxuICAgIH1cclxuICAgICovXHJcbiAgICAvL3Blc3F1aXNhQ2F0ZWdvcmlhXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmZpbHRlckZ1bmN0aW9uLCB0aGlzLnVybCwgdGhpcy51cmxUcmVlKTtcclxuXHJcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XHJcbiAgICAgIGNvbXBvbmVudDogTW9kZWxUcmVldmlld0NvbXBvbmVudCxcclxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcclxuICAgICAgICAvL2NhbXBvSWQ6IHRoaXMuY2FtcG9JZCxcclxuICAgICAgICAvL2NhbXBvUGFpOiB0aGlzLmNhbXBvUGFpSWQsXHJcbiAgICAgICAgLy9jYW1wb0xhYmVsOiB0aGlzLmNhbXBvRGlzcGxheSxcclxuICAgICAgICBmaWx0ZXJGdW5jdGlvbjogdGhpcy5maWx0ZXJGdW5jdGlvbixcclxuICAgICAgICBlbXByZXNhU2VsZWNpb25hZGFJZDogdGhpcy5lbXByZXNhLFxyXG4gICAgICAgIHRpcG86IHRoaXMudGlwbyxcclxuICAgICAgICAvL2VzcGVjaWZpY29cclxuICAgICAgICAvL3BsYW5vQ29udGFzOiB0aGlzLnBsYW5vQ29udGFzLFxyXG4gICAgICAgIHVybDogdGhpcy5pc0VtcHR5KHRoaXMudXJsVHJlZSkgPyB0aGlzLnVybCA6IHRoaXMudXJsVHJlZVxyXG4gICAgICB9LFxyXG4gICAgICBjc3NDbGFzczogJ215LWN1c3RvbS1tb2RhbC1wZXNxdWlzYSdcclxuICAgIH0pO1xyXG5cclxuICAgIG1vZGFsLm9uRGlkRGlzbWlzcygpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBkYXRhWydkYXRhJ107XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQuSWQgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhSXRlbUlkUGFyYUxpc3RhKHJlc3VsdC5JZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbW9kYWwucHJlc2VudCgpO1xyXG5cclxuICB9XHJcblxyXG4gIGlzRW1wdHkodmFsb3I6IHN0cmluZyB8IGFueSkge1xyXG4gICAgcmV0dXJuIHZhbG9yID09IG51bGwgfHwgdmFsb3IgPT0gdW5kZWZpbmVkIHx8IHZhbG9yID09ICcnXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJwYWRkaW5nLWlubGluZS1lbmQ6IDBweDtcIj5cclxuICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBzdHlsZT1cIi0tYmFja2dyb3VuZDogaW5oZXJpdGVkOyAtLWJhY2tncm91bmQtZm9jdXNlZDogdHJhbnNwYXJlbnQ7IG1hcmdpbi10b3A6IDJweDtcIiBbY2xhc3NdPVwiaXRlbUNsYXNzXCI+XHJcbiAgICAgIDxpb24tbGFiZWwgcG9zaXRpb249XCJ7eyBsYWJlbFBvc2l0aW9uIH19XCIgY29sb3I9XCJ7eyBsYWJlbENvbG9yIH19XCI+e3sgbGFiZWwgfX08L2lvbi1sYWJlbD5cclxuICAgICAgPCEtLSBmb3JtQ29udHJvbE5hbWU9XCJ7eyBjYW1wbyB9fVwiICAtLT5cclxuICAgICAgPGlvbi1zcGlubmVyICpuZ0lmPVwiIXBvZGVQZXNxdWlzYXJcIlxyXG4gICAgICAgIHN0eWxlPVwiLS1taW4taGVpZ2h0OiAwcHggIWltcG9ydGFudDsgbWFyZ2luLWlubGluZS1lbmQ6IDVweCAhaW1wb3J0YW50OyBtYXJnaW4tdG9wOiAxNnB4O1wiIFxyXG4gICAgICAgIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsaW5lc1wiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgIDwhLS0gKGlvbkJsdXIpPVwidmVyaWZpY2FyUGVzcXVpc2EoKVwiIC0tPlxyXG4gICAgICA8IS0tIGNvbmZsaXRvIGNvbSBjbGljayBkYSBsaXN0YSAtLT5cclxuICAgICAgPGlvbi1pbnB1dCAjaW5wdXRQZXNxdWlzYVxyXG4gICAgICAgIHR5cGU9XCJ7e3R5cGV9fVwiIFxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFxyXG4gICAgICAgIG1heGxlbmd0aD1cInt7IG1heCB9fVwiIFxyXG4gICAgICAgIChpb25CbHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcclxuICAgICAgICBbdmFsdWVdPVwidGV4dG9QZXNxdWlzYVwiIChpbnB1dCk9XCJ3cml0ZVBlc3F1aXNhKGlucHV0UGVzcXVpc2EudmFsdWUpXCIgXHJcbiAgICAgICAgKGtleXVwKT1cInNob3dQZXNxdWlzYSgkZXZlbnQpXCJcclxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBbc3R5bGUuLS1iYWNrZ3JvdW5kXT1cImlucHV0QmFja2dyb3VuZ0NvbG9yXCJcclxuICAgICAgICAoY2xpY2spPVwiZHJvcERvd25QZXNxdWlzYSgtMSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiIGRlYm91bmNlPVwiNTAwXCI+PC9pb24taW5wdXQ+XHJcbiAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIHNsb3Q9XCJlbmRcIiB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDI1cHg7IG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDRweCAhaW1wb3J0YW50OyAtLXBhZGRpbmctc3RhcnQ6MnB4OyAtLXBhZGRpbmctZW5kOiAycHg7XCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJtZWRpdW1cIlxyXG4gICAgICAgIChjbGljayk9XCJsaW1wYXJDbGljaygpXCI+XHJcbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG4gIFxyXG4gICAgICA8IS0tXHJcbiAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIHNsb3Q9XCJlbmRcIiB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDI1cHg7IG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDRweCAhaW1wb3J0YW50OyAtLXBhZGRpbmctc3RhcnQ6MnB4OyAtLXBhZGRpbmctZW5kOiAycHg7XCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJtZWRpdW1cIlxyXG4gICAgICAgIChjbGljayk9XCJwZXNxdWlzYXJDbGljaygpXCI+XHJcbiAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJzZWFyY2hcIj48L2lvbi1pY29uPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgIC0tPlxyXG4gICAgICBcclxuICAgIDwvaW9uLWl0ZW0+XHJcbiAgXHJcbiAgICA8aW9uLWxpc3QgdGFiaW5kZXg9XCItMVwiIFtoaWRkZW5dPVwiIXNlbGVjdEVsZW1lbnRWaXNpdmVsIHx8ICFsaXN0YVBlc3F1aXNhIHx8IGxpc3RhUGVzcXVpc2EubGVuZ3RoID09IDBcIiBjbGFzcz1cInBlc3F1aXNhLWxpc3RcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDI1MHB4OyBvdmVyZmxvdy15OiBhdXRvO1wiPlxyXG4gICAgICBcclxuICAgICAgPGlvbi1pdGVtIHRhYmluZGV4PVwiLTFcIiBidXR0b24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdGFQZXNxdWlzYVwiIFxyXG4gICAgICAoY2xpY2spPVwic2VsZWNpb25hckNvbWJvQ2xpY2soaXRlbSlcIiBbaWRdPVwic2VsZWN0SWQgKyAnSW9uSXRlbScgKyBpdGVtWydJbmRleCddXCJcclxuICAgICAgICBjbGFzcz1cInBlc3F1aXNhLWl0ZW1cIj5cclxuICAgICAgICA8IS0tIHt7IGl0ZW0gfCBqc29ufX0gLS0+XHJcbiAgICAgICAgPHNwYW4gW2NsYXNzXT1cInsnc2VsZWN0ZWQtaXRlbSc6IGl0ZW1bJ1NlbGVjdGVkJ10gPT09IHRydWV9XCIgW2lubmVySFRNTF09XCJoaWdobGlnaHQoaXRlbVtjYW1wb0Rpc3BsYXldKVwiPjwvc3Bhbj5cclxuICAgICAgPC9pb24taXRlbT5cclxuICBcclxuICAgIDwvaW9uLWxpc3Q+XHJcbiAgXHJcbiAgICA8IS0tXHJcbiAgICA8aW9uLXNlbGVjdCBpbnRlcmZhY2U9XCJwb3BvdmVyXCIgI3NlbGVjdEVsZW1lbnQgdGFiaW5kZXg9XCItMVwiIFtoaWRkZW5dPVwiIXNlbGVjdEVsZW1lbnRWaXNpdmVsXCJcclxuICAgICAgKGlvbkNoYW5nZSk9XCJzZWxlY2lvbmFyQ29tYm9DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cclxuICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxpc3RhUGVzcXVpc2FcIiBbdmFsdWVdPVwiaXRlbVtjYW1wb0lkXVwiIChjbGljayk9XCJzZWxlY2lvbmFyQ29tYm9DbGljayhpdGVtW2NhbXBvSWRdKVwiPlxyXG4gICAgICAgIHt7IGl0ZW1bY2FtcG9EaXNwbGF5XSB9fVxyXG4gICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgPC9pb24tc2VsZWN0PlxyXG4gICAgLS0+XHJcbiAgXHJcbiAgICA8IS0tXHJcbiAgICA8c2VsZWN0IFtpZF09XCJzZWxlY3RJZFwiICNzZWxlY3RFbGVtZW50IHRhYmluZGV4PVwiLTFcIiBbaGlkZGVuXT1cIiFzZWxlY3RFbGVtZW50VmlzaXZlbFwiXHJcbiAgICAgIChjaGFuZ2UpPVwic2VsZWNpb25hckNvbWJvQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpXCIgY2xhc3M9XCJwZXNxdWlzYS1zZWxlY3RcIj5cclxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsaXN0YVBlc3F1aXNhXCIgW3ZhbHVlXT1cIml0ZW1bY2FtcG9JZF1cIiAoY2xpY2spPVwic2VsZWNpb25hckNvbWJvQ2xpY2soaXRlbVtjYW1wb0lkXSlcIj5cclxuICAgICAgICB7eyBpdGVtW2NhbXBvRGlzcGxheV0gfX1cclxuICAgICAgPC9vcHRpb24+XHJcbiAgXHJcbiAgICA8L3NlbGVjdD5cclxuICAgIC0tPlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JzXCIgKm5nSWY9XCJmb3JtXCI+XHJcbiAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbl9tZXNzYWdlc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcclxuICAgICAgICAgICpuZ0lmPVwiZm9ybS5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uaGFzRXJyb3IodmFsaWRhdGlvbi50eXBlKSAmJiAoZm9ybS5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uZGlydHkgfHwgZm9ybS5nZXQoZm9ybUNvbnRyb2xOYW1lKT8udG91Y2hlZClcIj5cclxuICAgICAgICAgICYjODIyNjsge3sgdmFsaWRhdGlvbi5tZXNzYWdlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+Il19
550
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtcGVzcXVpc2EvaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtcGVzcXVpc2EvaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsT0FBTyxFQUFnQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7QUFFcEYsZ0ZBQWdGO0FBWWhGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxrQkFBa0I7SUEyQzVELFVBQVUsQ0FBQyxLQUFtQjtRQUM1QixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZ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cG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIFByZWRpY2F0ZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSW9uU2VsZWN0LCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZUlucHV0Q29tcG9uZW50JztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgTW9kZWxUcmVldmlld0NvbXBvbmVudCB9IGZyb20gJy4uL21vZGVsLXRyZWV2aWV3L21vZGVsLXRyZWV2aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExpYkNvbmZpZyB9IGZyb20gJy4uL2xpYi1jb25maWcnO1xyXG4vL2ltcG9ydCB7IExpYkNvbmZpZywgTGliQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2FwcHByb2plY3QtY29tcG9uZW50cy5tb2R1bGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrYi1pbnB1dC1wZXNxdWlzYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXBlc3F1aXNhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1wZXNxdWlzYS5jb21wb25lbnQuc2NzcycsICcuLy4uL2Jhc2VDb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW3tcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgdXNlRXhpc3Rpbmc6IElucHV0UGVzcXVpc2FDb21wb25lbnQsXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFBlc3F1aXNhQ29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIHBvZGVQZXNxdWlzYXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHRleHRvUGVzcXVpc2E6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdEVsZW1lbnRWaXNpdmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdGFQZXNxdWlzYTogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZEl0ZW06IGFueTtcclxuICBASW5wdXQoKSBvdmVycmlkZSBtYXg6IHN0cmluZyA9ICczMCc7XHJcbiAgcHJpdmF0ZSBwZXNxdWlzYVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlckZ1bmN0aW9uOiBQcmVkaWNhdGU8YW55PiB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlbGVjdElkOiBzdHJpbmcgPSAnc2VsZWN0RWxlbWVudCc7XHJcbiAgQElucHV0KCkgY2FtcG9JZDogc3RyaW5nID0gJ0lkJztcclxuICBASW5wdXQoKSBjYW1wb1BhaUlkOiBzdHJpbmcgPSAnUGFpSWQnO1xyXG4gIEBJbnB1dCgpIGNhbXBvRGlzcGxheTogc3RyaW5nID0gJ0Rlc2NyaWNhbyc7XHJcbiAgQElucHV0KCkgdGlwbzogc3RyaW5nID0gJyc7XHJcbiAgLy9AVmlld0NoaWxkKCdzZWxlY3RFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0RWxlbWVudDtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlbGVjdEVsZW1lbnQ6IElvblNlbGVjdCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBwZXNxdWlzYUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBwZXNxdWlzYUFjdGlvbj86IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpIGxpbXBhcj86IEZ1bmN0aW9uO1xyXG4gIC8vcGFyYW1ldHJvcyBwYXJhIGNoYW1hZGEgQVBJXHJcbiAgLy9lbmRwb2ludCBwYXJhIHBlc3F1aXNhIHBvciBkaWdpdGHDp8Ojb1xyXG4gIEBJbnB1dCgpIHVybDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdXJsSXRlbTogc3RyaW5nID0gJyc7XHJcbiAgLy9lbmRwb2ludCBwYXJhIG1vbnRhciBhIGFydm9yZSwgc2UgZXN0aXZlciB2YXppYSBzZXLDoSB1c2FkbyBvIGNhbXBvICd1cmwnXHJcbiAgQElucHV0KCkgdXJsVHJlZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgZW1wcmVzYTogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBsb2FkSW5pdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvL3BsYW5vQ29udGFzOiBudW1iZXI7XHJcblxyXG4gIC8vY29udHJvbCB2YWx1ZSBhY2Vzc29yXHJcbiAgcHVibGljIGRhdGE6IG51bWJlciB8IGFueTtcclxuICBwcml2YXRlIG9uQ2hhbmdlOiBGdW5jdGlvbiA9IChkYXRhOiBudW1iZXIpID0+IHsgfTtcclxuICBwcml2YXRlIG9uVG91Y2g6IEZ1bmN0aW9uID0gKCkgPT4geyB9O1xyXG4gIHByaXZhdGUgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY29uc29sZSA9IGNvbnNvbGU7XHJcblxyXG4gIG1vZGVsQ2hhbmdlZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIG1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBhbnkpOiB2b2lkIHtcclxuICAgIC8vY29uc29sZS5sb2coJ3dyaXRlIHZhbHVlJywgdmFsdWUpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IDApIHtcclxuICAgICAgdGhpcy53cml0ZVBlc3F1aXNhKCcnKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubG9hZEluaXQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMubG9hZEluaXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlZC5uZXh0KHZhbHVlKTtcclxuICAgICAgICAvL3RoaXMuY2FycmVnYUl0ZW1JZFBhcmFMaXN0YSh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbSB8fCAodGhpcy5zZWxlY3RlZEl0ZW0gJiYgdGhpcy5zZWxlY3RlZEl0ZW1bdGhpcy5jYW1wb0lkXSAhPSB2YWx1ZSkpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdJZCBkaWZlcmVudGUnKTtcclxuICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2VkLm5leHQodmFsdWUpO1xyXG4gICAgICAgICAgLy90aGlzLmNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEJBU0VfQVBJID0gdGhpcy5jb25maWcuYXBpVXJsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KCdMaWJDb25maWdTZXJ2aWNlJykgcHJpdmF0ZSBjb25maWc6IExpYkNvbmZpZyxcclxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy5tb2RlbENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubW9kZWxDaGFuZ2VkXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLmNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEoZGF0YSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCdibHVyJywgZXZlbnQpO1xyXG4gICAgLy9jb25zb2xlLmxvZyhldmVudC5kZXRhaWwucmVsYXRlZFRhcmdldCk7XHJcbiAgICBpZiAoZXZlbnQuZGV0YWlsLnJlbGF0ZWRUYXJnZXQgPT0gbnVsbCB8fCBldmVudC5kZXRhaWwucmVsYXRlZFRhcmdldC5pZC5pbmRleE9mKHRoaXMuc2VsZWN0SWQgKyAnSW9uSXRlbScpID09IC0xKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJ0cnVlXCIsIGV2ZW50LmRldGFpbC5yZWxhdGVkVGFyZ2V0LmlkKTtcclxuICAgICAgLy9wZXNxdWlzYXIgaXRlbSBuYSBsaXN0YVxyXG4gICAgICBpZiAoIXRoaXMuZXhpc3RlTmFMaXN0YVRleHRvKHRoaXMudGV4dG9QZXNxdWlzYSwgdHJ1ZSkpIHtcclxuICAgICAgICB0aGlzLmxpbXBhckNsaWNrKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSgwKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpPy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgLy90cmF0YXIgdXJsc1xyXG4gICAgdGhpcy51cmwgPSB0aGlzLnVybC5zdGFydHNXaXRoKCdodHRwJykgPyB0aGlzLnVybCA6IGAke3RoaXMuQkFTRV9BUEl9LyR7dGhpcy51cmx9YDtcclxuICAgIHRoaXMudXJsSXRlbSA9IHRoaXMudXJsSXRlbS5zdGFydHNXaXRoKCdodHRwJykgPyB0aGlzLnVybEl0ZW0gOiBgJHt0aGlzLkJBU0VfQVBJfS8ke3RoaXMudXJsSXRlbX1gO1xyXG5cclxuICAgIHRoaXMucGVzcXVpc2FTdWJqZWN0LnBpcGUoc3dpdGNoTWFwKCh1cmwpID0+IHtcclxuICAgICAgLy90aGlzLmNvbnNvbGUubG9nKCdzdWJqZWN0IHVybDonLCB1cmwpOyAgICAgIFxyXG4gICAgICBpZiAoIXRoaXMuaXNFbXB0eSh1cmwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodXJsKTtcclxuICAgICAgICAvL3JldHVybiBvZih1cmwpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy90aGlzLmxpc3RhUGVzcXVpc2EgPSByZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLmNvbnNvbGUubG9nKCdzdWJqZWN0IHN1YnNjcmliZSByZXN1bHQ6JywgcmVzdWx0KTtcclxuICAgICAgICAgIHRoaXMubGlzdGFQZXNxdWlzYSA9IFtdO1xyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKHRoaXMuZmlsdGVyRnVuY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaCgoZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EucHVzaCh7IC4uLmVudCwgSW5kZXg6IGluZGV4LCBTZWxlY3RlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wRG93blBlc3F1aXNhKHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAsIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJybyBwZXNxdWlzYScsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVQZXNxdWlzYSh2YWx1ZTogc3RyaW5nIHwgYW55KTogdm9pZCB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCd3cml0ZSBwZXNxdWlzYScsIHZhbHVlKTtcclxuICAgIHRoaXMudGV4dG9QZXNxdWlzYSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2hvd1Blc3F1aXNhKGU6IGFueSk6IHZvaWQge1xyXG4gICAgLy9jb25zb2xlLmxvZygnc2hvdyBwZXNxdWlzYScsIGUua2V5Q29kZSk7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zdCBpbmRleCA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID49IDEgPyAoZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxKSA6IDA7XHJcbiAgICAvL2NvbnNvbGUubG9nKGluZGV4LCAndmFsb3IgJywgZXZlbnQudGFyZ2V0LnZhbHVlLCAnY2hhciAnLCBldmVudC50YXJnZXQudmFsdWUuY2hhckNvZGVBdChpbmRleCkpO1xyXG4gICAgY29uc3Qga2V5QXQgPSBlLnRhcmdldC52YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcclxuICAgIC8qXHJcbiAgICBpZiAoKGUua2V5Q29kZSA+PSA0OCAmJiBlLmtleUNvZGUgPD0gNTcpIHx8XHJcbiAgICAgIChrZXlBdCA+PSA0OCAmJiBrZXlBdCA8PSA1NykgfHxcclxuICAgICAgKGUua2V5Q29kZSA+PSA2NSAmJiBlLmtleUNvZGUgPD0gOTApIHx8XHJcbiAgICAgIChlLmtleUNvZGUgPj0gOTYgJiYgZS5rZXlDb2RlIDw9IDEwNSkgfHxcclxuICAgICAgKGUua2V5Q29kZSA9PSA4KSkge1xyXG4gICAgICAgICovXHJcbiAgICBpZiAoZS5rZXlDb2RlICE9IDQwICYmIGUua2V5Q29kZSAhPSAzOCkge1xyXG4gICAgICBpZiAoIXNlbGYucG9kZVBlc3F1aXNhcikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBsZXQgZmlsdHJvID0gc2VsZi50ZXh0b1Blc3F1aXNhO1xyXG4gICAgICBpZiAoZmlsdHJvICE9IG51bGwgJiYgZmlsdHJvICE9ICcnICYmIGZpbHRyby5sZW5ndGggPj0gMikge1xyXG4gICAgICAgIHNlbGYucGVzcXVpc2FyRW50aWRhZGUoZmlsdHJvKTtcclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PSA4ICYmICFmaWx0cm8pIHtcclxuICAgICAgICAgIHRoaXMubGltcGFyQ2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGUua2V5Q29kZSA9PSA0MCB8fCBlLmtleUNvZGUgPT0gMzgpIHtcclxuICAgICAgICBzZWxmLmRyb3BEb3duUGVzcXVpc2Eoc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy9sZXQgc2VsZWN0ID0gc2VsZi5zZWxlY3RFbGVtZW50OyAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGYuVGVtcGxhdGVTZWxlY3QxSWQoKSk7XHJcblxyXG4gICAgICAgICAgLy9pb24tbGlzdFxyXG4gICAgICAgICAgLy9zZWxlY2lvbmFkb1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhzZWxmLmxpc3RhUGVzcXVpc2EpO1xyXG4gICAgICAgICAgbGV0IGluYyA9IGUua2V5Q29kZSA9PSA0MCA/IDEgOiAtMTtcclxuICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHNlbGYubGlzdGFQZXNxdWlzYS5maW5kKHMgPT4gc1snU2VsZWN0ZWQnXSA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgICBsZXQgY3VyID0gMDtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGN1ciA9IHNlbGVjdGVkWydJbmRleCddO1xyXG4gICAgICAgICAgICAvL2Rlc21hcmNhciBvIGF0dWFsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkWydTZWxlY3RlZCddID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGN1ciA9IGN1ciArIGluYztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1ciA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGN1ciA8IDApIHtcclxuICAgICAgICAgICAgY3VyID0gc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1ciA+PSBzZWxmLmxpc3RhUGVzcXVpc2EubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGN1ciA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IG5vdm9TZWxlY3RlZCA9IHNlbGYubGlzdGFQZXNxdWlzYS5maW5kKG4gPT4gblsnSW5kZXgnXSA9PT0gY3VyKTtcclxuICAgICAgICAgIGlmIChub3ZvU2VsZWN0ZWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBub3ZvU2VsZWN0ZWRbJ1NlbGVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IG5vdm9TZWxlY3RlZDtcclxuICAgICAgICAgICAgc2VsZi50ZXh0b1Blc3F1aXNhID0gbm92b1NlbGVjdGVkW3NlbGYuY2FtcG9EaXNwbGF5XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBsZXQgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWxlY3RJZCkgYXMgYW55O1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3NlbGVjdCBFbGVtZW50Jywgc2VsZWN0KVxyXG4gICAgICAgICAgaWYgKHNlbGVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmMgPSBlLmtleUNvZGUgPT0gNDAgPyAxIDogLTE7XHJcbiAgICAgICAgICAgIGxldCBjdXIgPSBzZWxlY3Quc2VsZWN0ZWRJbmRleDtcclxuICAgICAgICAgICAgaWYgKGN1ciA9PSBOYU4pIGN1ciA9IC0xO1xyXG4gICAgICAgICAgICBzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IGN1ciArIGluYztcclxuICAgICAgICAgICAgaWYgKHNlbGVjdC5zZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0LnNlbGVjdGVkSW5kZXggPCBzZWxmLmxpc3RhUGVzcXVpc2EubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEl0ZW0gPSBzZWxmLmxpc3RhUGVzcXVpc2Fbc2VsZWN0LnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlbnRlciBrZXknLCBlKVxyXG4gICAgICAgICAgLy9zZWxmLnNlbGVjaW9uYXJDb21ib0NsaWNrKGUpO1xyXG4gICAgICAgICAgc2VsZi5zZWxlY2lvbmFyQ29tYm9DbGljayhudWxsKTtcclxuICAgICAgICAgIC8vcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDI3KSB7XHJcbiAgICAgICAgICAvL0VTQ1xyXG4gICAgICAgICAgc2VsZi5kcm9wRG93blBlc3F1aXNhKDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHQodGV4dG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgaW5kZXggPSB0ZXh0by50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy50ZXh0b1Blc3F1aXNhLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgLy9jb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICByZXR1cm4gdGV4dG8uc3Vic3RyaW5nKDAsIGluZGV4KSArICc8c3Ryb25nPicgKyB0ZXh0by5zdWJzdHJpbmcoaW5kZXgsIGluZGV4ICsgdGhpcy50ZXh0b1Blc3F1aXNhLmxlbmd0aCkgKyAnPC9zdHJvbmc+JyArIHRleHRvLnN1YnN0cmluZyhpbmRleCArIHRoaXMudGV4dG9QZXNxdWlzYS5sZW5ndGgpOyAgLy90ZXh0by5yZXBsYWNlKHRoaXMudGV4dG9QZXNxdWlzYSwgYDxzdHJvbmc+JHt0aGlzLnRleHRvUGVzcXVpc2F9PC9zdHJvbmc+YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGV4dG87XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY2lvbmFyQ29tYm9DbGljayhpdGVtOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2NvbWJvIGNsaWNrJywgc2VsZik7XHJcblxyXG4gICAgLypcclxuICAgIGxldCBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlbGVjdElkKSBhcyBhbnk7XHJcbiAgICBpZiAoc2VsZWN0LnNlbGVjdGVkSW5kZXggPj0gMCkge1xyXG4gICAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IHNlbGYubGlzdGFQZXNxdWlzYVtzZWxlY3Quc2VsZWN0ZWRJbmRleF07XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnc2VsZWN0ZWQnLCB0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAvL3NlbGYuc2VsZWN0ZWRJdGVtID0gdGhpcy5saXN0YVBlc3F1aXNhLmZpbmQoaSA9PiBpW3RoaXMuY2FtcG9JZF0gPT0gZSk7XHJcbiAgICBpZiAoc2VsZi5zZWxlY3RlZEl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgIHNlbGYud3JpdGVWYWx1ZShzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvSWRdKTtcclxuICAgICAgaWYgKGUgIT0gbnVsbCkge1xyXG4gICAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSBmYWxzZTtcclxuICAgICAgICBpZiAoc2VsZi5hY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgc2VsZi5hY3Rpb24oc2VsZi5zZWxlY3RlZEl0ZW0oKSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgKi9cclxuICAgIC8vIHBlc3F1aXNhciBzZWxlY2lvbmFkb1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5saXN0YVBlc3F1aXNhKTtcclxuICAgIGxldCBzZWxlY3RlZCA9IHRoaXMubGlzdGFQZXNxdWlzYS5maW5kKHMgPT4gc1snU2VsZWN0ZWQnXSA9PT0gdHJ1ZSk7XHJcblxyXG4gICAgLy8gaWYgKCFzZWxlY3RlZCkge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmNhbXBvSWQsIGl0ZW0pO1xyXG4gICAgLy8gICBzZWxlY3RlZCA9IHRoaXMubGlzdGFQZXNxdWlzYS5maWx0ZXIoIHMgPT4gc1t0aGlzLmNhbXBvSWRdID09IGl0ZW1bdGhpcy5jYW1wb0lkXSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy9zZSBvIGl0ZW0gZm9ybSBwYXNzYWRvIGNvbW8gcGFyYW1ldHJvIChjbGljayBubyBpb24taXRlbSlcclxuICAgIGlmIChpdGVtICE9IG51bGwpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkICE9IG51bGwpIHtcclxuICAgICAgICBzZWxlY3RlZFsnU2VsZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGl0ZW1bJ1NlbGVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICBzZWxlY3RlZCA9IGl0ZW07XHJcbiAgICB9XHJcbiAgICBpZiAoc2VsZWN0ZWQgIT0gbnVsbCkge1xyXG4gICAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkO1xyXG4gICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxlY3RlZFtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgIHNlbGYud3JpdGVWYWx1ZShzZWxlY3RlZFtzZWxmLmNhbXBvSWRdKTtcclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdhY3Rpb24nLCBzZWxmLmNoYW5nZSk7XHJcbiAgICAgIGlmIChzZWxmLnBlc3F1aXNhQ2hhbmdlICE9IG51bGwpIHtcclxuICAgICAgICBzZWxmLnBlc3F1aXNhQ2hhbmdlLmVtaXQoc2VsZi5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmxpc3RhUGVzcXVpc2EuZm9yRWFjaCggcGVzcXVpc2EgPT4ge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhwZXNxdWlzYSwgc2VsZi5kYXRhKTtcclxuICAgIC8vIH0gKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMudGV4dG9QZXNxdWlzYSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY2lvbmFyQ29tYm9DaGFuZ2UoZTogYW55KSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zb2xlLmxvZygnY29tYm8gY2hhbmdlJywgZSk7XHJcbiAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IHRoaXMubGlzdGFQZXNxdWlzYS5maW5kKGkgPT4gaVt0aGlzLmNhbXBvSWRdID09IGUpO1xyXG4gICAgaWYgKHNlbGYuc2VsZWN0ZWRJdGVtICE9IG51bGwpIHtcclxuICAgICAgc2VsZi53cml0ZVZhbHVlKGUpO1xyXG4gICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgIGlmIChlICE9IG51bGwpIHtcclxuICAgICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHNlbGYucGVzcXVpc2FDaGFuZ2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgc2VsZi5wZXNxdWlzYUNoYW5nZS5lbWl0KHNlbGYuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcm9wRG93blBlc3F1aXNhKGxlbmd0aDogbnVtYmVyKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBpZiAoc2VsZi5saXN0YVBlc3F1aXNhICE9IG51bGwgJiYgc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGxlbmd0aCA9PSAtMSkge1xyXG4gICAgICAgIGxlbmd0aCA9IHNlbGYubGlzdGFQZXNxdWlzYS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGxlbmd0aCA9PSAwID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdEVsZW1lbnQpO1xyXG4gICAgICAvL3RoaXMuc2VsZWN0RWxlbWVudC5vcGVuKCk7XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAvL2xldCBlbGVtZW50ID0gdGhpcy5zZWxlY3RFbGVtZW50O1xyXG4gICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0SWQpO1xyXG4gICAgICBjb25zb2xlLmxvZygnZHJvcERvd24nLCBlbGVtZW50KTtcclxuICAgICAgKGVsZW1lbnQgYXMgYW55KS5zaXplID0gbGVuZ3RoICsgMTtcclxuICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXNxdWlzYXJFbnRpZGFkZShmaWx0cm86IHN0cmluZykge1xyXG4gICAgbGV0IHVybCA9IHRoaXMudXJsLnJlcGxhY2UoJzw8RklMVFJPPj4nLCBmaWx0cm8pLnJlcGxhY2UoJzw8RU1QUkVTQT4+JywgdGhpcy5lbXByZXNhLnRvU3RyaW5nKCkpO1xyXG4gICAgY29uc29sZS5sb2coJ3Blc3F1aXNhckVudGlkYWRlIHVybCcsIHVybCk7XHJcbiAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSBmYWxzZTtcclxuICAgIHRoaXMucGVzcXVpc2FTdWJqZWN0Lm5leHQodXJsKTtcclxuICB9XHJcblxyXG4gIHBlc3F1aXNhckVudGlkYWRlT2xkKGZpbHRybzogc3RyaW5nKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy51cmwucmVwbGFjZSgnPDxGSUxUUk8+PicsIGZpbHRybykucmVwbGFjZSgnPDxFTVBSRVNBPj4nLCB0aGlzLmVtcHJlc2EudG9TdHJpbmcoKSk7XHJcbiAgICBjb25zb2xlLmxvZygncGVzcXVpc2FyRW50aWRhZGUgdXJsJywgdXJsKTtcclxuICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5odHRwQ2xpZW50LmdldDxhbnk+KHVybClcclxuICAgICAgLnN1YnNjcmliZSh7IG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vdGhpcy5saXN0YVBlc3F1aXNhID0gcmVzdWx0O1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlckZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKHRoaXMuZmlsdGVyRnVuY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuICAgICAgICByZXN1bHQuZm9yRWFjaCgoZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMubGlzdGFQZXNxdWlzYS5wdXNoKHsgLi4uZW50LCBJbmRleDogaW5kZXgsIFNlbGVjdGVkOiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSh0aGlzLmxpc3RhUGVzcXVpc2EubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm8gcGVzcXVpc2EnLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgICAgfX0pO1xyXG4gIH1cclxuXHJcbiAgZXhpc3RlTmFMaXN0YShpZDogbnVtYmVyLCBzZXRSZWdpc3RybzogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5saXN0YVBlc3F1aXNhICYmIHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBleGlzdGUgPSB0aGlzLmxpc3RhUGVzcXVpc2EuZmluZChsID0+IGxbdGhpcy5jYW1wb0lkXSA9PT0gaWQpO1xyXG4gICAgICBpZiAoZXhpc3RlKSB7XHJcbiAgICAgICAgaWYgKHNldFJlZ2lzdHJvKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGV4aXN0ZTtcclxuICAgICAgICAgIHRoaXMuc2VsZWNpb25hckNvbWJvQ2xpY2sodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4aXN0ZU5hTGlzdGFUZXh0byh0ZXh0bzogc3RyaW5nLCBzZXRSZWdpc3RybzogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zb2xlLmxvZyhcImV4aXN0ZSB0ZXh0bzpcIiwgdGV4dG8sIHRoaXMuY2FtcG9EaXNwbGF5LCB0aGlzLmxpc3RhUGVzcXVpc2EpO1xyXG4gICAgaWYgKHRoaXMubGlzdGFQZXNxdWlzYSAmJiB0aGlzLmxpc3RhUGVzcXVpc2EubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgZXhpc3RlID0gdGhpcy5saXN0YVBlc3F1aXNhLmZpbmQobCA9PiBsW3RoaXMuY2FtcG9EaXNwbGF5XS50b1VwcGVyQ2FzZSgpID09PSB0ZXh0by50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgaWYgKGV4aXN0ZSkge1xyXG4gICAgICAgIGlmIChzZXRSZWdpc3Rybykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBleGlzdGU7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjaW9uYXJDb21ib0NsaWNrKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGFySXRlbVNlbGVjaW9uYWRvKHNldGFyUmVnaXN0cm86IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc29sZS5sb2coJ3ZhbGlkYXIgc2VsZWNpb25hZG8nKTtcclxuICAgIC8vcGFzc2FyIHBlbGEgZnVuw6fDo28gZGUgZmlsdHJvXHJcbiAgICBsZXQgdmFsaWRvID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyRnVuY3Rpb24pIHtcclxuICAgICAgICBsZXQgZXhpc3RlID0gW3sgLi4udGhpcy5zZWxlY3RlZEl0ZW0gfV0uZmlsdGVyKHRoaXMuZmlsdGVyRnVuY3Rpb24pO1xyXG4gICAgICAgIGlmIChleGlzdGUgIT0gbnVsbCAmJiBleGlzdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdmFsaWRvID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsaWRvID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsaWRvICYmIHNldGFyUmVnaXN0cm8pIHtcclxuICAgICAgICB0aGlzLnNlbGVjaW9uYXJDb21ib0NsaWNrKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkbztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEoaWQ6IG51bWJlcikge1xyXG4gICAgbGV0IHVybCA9IHRoaXMudXJsSXRlbS5yZXBsYWNlKCc8PElEPj4nLCBpZC50b1N0cmluZygpKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudXJsSXRlbSk7XHJcbiAgICBjb25zb2xlLmxvZygncGVzcXVpc2FyIElEIHVybCcsIHVybCk7XHJcbiAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaHR0cENsaWVudC5nZXQ8YW55Pih1cmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoeyBuZXh0OiAocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EucHVzaCh7IC4uLnJlc3VsdCwgSW5kZXg6IDAsIFNlbGVjdGVkOiB0cnVlIH0pO1xyXG4gICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMubGlzdGFQZXNxdWlzYVswXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWNpb25hckNvbWJvQ2xpY2sodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3I6ICBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm8gcGVzcXVpc2EnLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgICAgfX0pO1xyXG4gIH1cclxuXHJcbiAgbGltcGFyQ2xpY2soKSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLndyaXRlUGVzcXVpc2EobnVsbCk7XHJcbiAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSgwKTtcclxuICAgIC8vdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgIHRoaXMucGVzcXVpc2FTdWJqZWN0Lm5leHQoJycpO1xyXG4gICAgaWYgKHRoaXMubGltcGFyKSB7XHJcbiAgICAgIHRoaXMubGltcGFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2ZXJpZmljYXJQZXNxdWlzYSgpIHtcclxuICAgIC8vVE9ETzogdmVyaWZpY2FyIHNlIG8gdGV4dG8gY29ycmVzcG9uZGUgY29tIHVtIGl0ZW0gZGEgbGlzdGFcclxuICAgIHRoaXMuc2VsZWNpb25hckNvbWJvQ2xpY2sobnVsbCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXNxdWlzYXJDbGljaygpIHtcclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy5wZXNxdWlzYUFjdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucGVzcXVpc2FBY3Rpb24oKTtcclxuICAgIH1cclxuICAgICovXHJcbiAgICAvL3Blc3F1aXNhQ2F0ZWdvcmlhXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmZpbHRlckZ1bmN0aW9uLCB0aGlzLnVybCwgdGhpcy51cmxUcmVlKTtcclxuXHJcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XHJcbiAgICAgIGNvbXBvbmVudDogTW9kZWxUcmVldmlld0NvbXBvbmVudCxcclxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcclxuICAgICAgICAvL2NhbXBvSWQ6IHRoaXMuY2FtcG9JZCxcclxuICAgICAgICAvL2NhbXBvUGFpOiB0aGlzLmNhbXBvUGFpSWQsXHJcbiAgICAgICAgLy9jYW1wb0xhYmVsOiB0aGlzLmNhbXBvRGlzcGxheSxcclxuICAgICAgICBmaWx0ZXJGdW5jdGlvbjogdGhpcy5maWx0ZXJGdW5jdGlvbixcclxuICAgICAgICBlbXByZXNhU2VsZWNpb25hZGFJZDogdGhpcy5lbXByZXNhLFxyXG4gICAgICAgIHRpcG86IHRoaXMudGlwbyxcclxuICAgICAgICAvL2VzcGVjaWZpY29cclxuICAgICAgICAvL3BsYW5vQ29udGFzOiB0aGlzLnBsYW5vQ29udGFzLFxyXG4gICAgICAgIHVybDogdGhpcy5pc0VtcHR5KHRoaXMudXJsVHJlZSkgPyB0aGlzLnVybCA6IHRoaXMudXJsVHJlZVxyXG4gICAgICB9LFxyXG4gICAgICBjc3NDbGFzczogJ215LWN1c3RvbS1tb2RhbC1wZXNxdWlzYSdcclxuICAgIH0pO1xyXG5cclxuICAgIG1vZGFsLm9uRGlkRGlzbWlzcygpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBkYXRhWydkYXRhJ107XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQuSWQgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhSXRlbUlkUGFyYUxpc3RhKHJlc3VsdC5JZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbW9kYWwucHJlc2VudCgpO1xyXG5cclxuICB9XHJcblxyXG4gIGlzRW1wdHkodmFsb3I6IHN0cmluZyB8IGFueSkge1xyXG4gICAgcmV0dXJuIHZhbG9yID09IG51bGwgfHwgdmFsb3IgPT0gdW5kZWZpbmVkIHx8IHZhbG9yID09ICcnXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJwYWRkaW5nLWlubGluZS1lbmQ6IDBweDtcIj5cclxuICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBzdHlsZT1cIi0tYmFja2dyb3VuZDogaW5oZXJpdGVkOyAtLWJhY2tncm91bmQtZm9jdXNlZDogdHJhbnNwYXJlbnQ7IG1hcmdpbi10b3A6IDJweDtcIiBbY2xhc3NdPVwiaXRlbUNsYXNzXCI+XHJcbiAgICAgIDxpb24tbGFiZWwgcG9zaXRpb249XCJ7eyBsYWJlbFBvc2l0aW9uIH19XCI+e3sgbGFiZWwgfX08L2lvbi1sYWJlbD5cclxuICAgICAgPCEtLSBmb3JtQ29udHJvbE5hbWU9XCJ7eyBjYW1wbyB9fVwiICAtLT5cclxuICAgICAgPGlvbi1zcGlubmVyICpuZ0lmPVwiIXBvZGVQZXNxdWlzYXJcIlxyXG4gICAgICAgIHN0eWxlPVwiLS1taW4taGVpZ2h0OiAwcHggIWltcG9ydGFudDsgbWFyZ2luLWlubGluZS1lbmQ6IDVweCAhaW1wb3J0YW50OyBtYXJnaW4tdG9wOiAxNnB4O1wiIFxyXG4gICAgICAgIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsaW5lc1wiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgIDwhLS0gKGlvbkJsdXIpPVwidmVyaWZpY2FyUGVzcXVpc2EoKVwiIC0tPlxyXG4gICAgICA8IS0tIGNvbmZsaXRvIGNvbSBjbGljayBkYSBsaXN0YSAtLT5cclxuICAgICAgPGlvbi1pbnB1dCAjaW5wdXRQZXNxdWlzYVxyXG4gICAgICAgIHR5cGU9XCJ7e3R5cGV9fVwiIFxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFxyXG4gICAgICAgIG1heGxlbmd0aD1cInt7IG1heCB9fVwiIFxyXG4gICAgICAgIChpb25CbHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcclxuICAgICAgICBbdmFsdWVdPVwidGV4dG9QZXNxdWlzYVwiIChpbnB1dCk9XCJ3cml0ZVBlc3F1aXNhKGlucHV0UGVzcXVpc2EudmFsdWUpXCIgXHJcbiAgICAgICAgKGtleXVwKT1cInNob3dQZXNxdWlzYSgkZXZlbnQpXCJcclxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBbc3R5bGUuLS1iYWNrZ3JvdW5kXT1cImlucHV0QmFja2dyb3VuZ0NvbG9yXCJcclxuICAgICAgICAoY2xpY2spPVwiZHJvcERvd25QZXNxdWlzYSgtMSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiIGRlYm91bmNlPVwiNTAwXCI+PC9pb24taW5wdXQ+XHJcbiAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIHNsb3Q9XCJlbmRcIiB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDI1cHg7IG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDRweCAhaW1wb3J0YW50OyAtLXBhZGRpbmctc3RhcnQ6MnB4OyAtLXBhZGRpbmctZW5kOiAycHg7XCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJtZWRpdW1cIlxyXG4gICAgICAgIChjbGljayk9XCJsaW1wYXJDbGljaygpXCI+XHJcbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG4gIFxyXG4gICAgICA8IS0tXHJcbiAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIHNsb3Q9XCJlbmRcIiB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDI1cHg7IG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDRweCAhaW1wb3J0YW50OyAtLXBhZGRpbmctc3RhcnQ6MnB4OyAtLXBhZGRpbmctZW5kOiAycHg7XCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJtZWRpdW1cIlxyXG4gICAgICAgIChjbGljayk9XCJwZXNxdWlzYXJDbGljaygpXCI+XHJcbiAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJzZWFyY2hcIj48L2lvbi1pY29uPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgIC0tPlxyXG4gICAgICBcclxuICAgIDwvaW9uLWl0ZW0+XHJcbiAgXHJcbiAgICA8aW9uLWxpc3QgdGFiaW5kZXg9XCItMVwiIFtoaWRkZW5dPVwiIXNlbGVjdEVsZW1lbnRWaXNpdmVsIHx8ICFsaXN0YVBlc3F1aXNhIHx8IGxpc3RhUGVzcXVpc2EubGVuZ3RoID09IDBcIiBjbGFzcz1cInBlc3F1aXNhLWxpc3RcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDI1MHB4OyBvdmVyZmxvdy15OiBhdXRvO1wiPlxyXG4gICAgICBcclxuICAgICAgPGlvbi1pdGVtIHRhYmluZGV4PVwiLTFcIiBidXR0b24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdGFQZXNxdWlzYVwiIFxyXG4gICAgICAoY2xpY2spPVwic2VsZWNpb25hckNvbWJvQ2xpY2soaXRlbSlcIiBbaWRdPVwic2VsZWN0SWQgKyAnSW9uSXRlbScgKyBpdGVtWydJbmRleCddXCJcclxuICAgICAgICBjbGFzcz1cInBlc3F1aXNhLWl0ZW1cIj5cclxuICAgICAgICA8IS0tIHt7IGl0ZW0gfCBqc29ufX0gLS0+XHJcbiAgICAgICAgPHNwYW4gW2NsYXNzXT1cInsnc2VsZWN0ZWQtaXRlbSc6IGl0ZW1bJ1NlbGVjdGVkJ10gPT09IHRydWV9XCIgW2lubmVySFRNTF09XCJoaWdobGlnaHQoaXRlbVtjYW1wb0Rpc3BsYXldKVwiPjwvc3Bhbj5cclxuICAgICAgPC9pb24taXRlbT5cclxuICBcclxuICAgIDwvaW9uLWxpc3Q+XHJcbiAgXHJcbiAgICA8IS0tXHJcbiAgICA8aW9uLXNlbGVjdCBpbnRlcmZhY2U9XCJwb3BvdmVyXCIgI3NlbGVjdEVsZW1lbnQgdGFiaW5kZXg9XCItMVwiIFtoaWRkZW5dPVwiIXNlbGVjdEVsZW1lbnRWaXNpdmVsXCJcclxuICAgICAgKGlvbkNoYW5nZSk9XCJzZWxlY2lvbmFyQ29tYm9DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cclxuICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxpc3RhUGVzcXVpc2FcIiBbdmFsdWVdPVwiaXRlbVtjYW1wb0lkXVwiIChjbGljayk9XCJzZWxlY2lvbmFyQ29tYm9DbGljayhpdGVtW2NhbXBvSWRdKVwiPlxyXG4gICAgICAgIHt7IGl0ZW1bY2FtcG9EaXNwbGF5XSB9fVxyXG4gICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgPC9pb24tc2VsZWN0PlxyXG4gICAgLS0+XHJcbiAgXHJcbiAgICA8IS0tXHJcbiAgICA8c2VsZWN0IFtpZF09XCJzZWxlY3RJZFwiICNzZWxlY3RFbGVtZW50IHRhYmluZGV4PVwiLTFcIiBbaGlkZGVuXT1cIiFzZWxlY3RFbGVtZW50VmlzaXZlbFwiXHJcbiAgICAgIChjaGFuZ2UpPVwic2VsZWNpb25hckNvbWJvQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpXCIgY2xhc3M9XCJwZXNxdWlzYS1zZWxlY3RcIj5cclxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsaXN0YVBlc3F1aXNhXCIgW3ZhbHVlXT1cIml0ZW1bY2FtcG9JZF1cIiAoY2xpY2spPVwic2VsZWNpb25hckNvbWJvQ2xpY2soaXRlbVtjYW1wb0lkXSlcIj5cclxuICAgICAgICB7eyBpdGVtW2NhbXBvRGlzcGxheV0gfX1cclxuICAgICAgPC9vcHRpb24+XHJcbiAgXHJcbiAgICA8L3NlbGVjdD5cclxuICAgIC0tPlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JzXCIgKm5nSWY9XCJmb3JtXCI+XHJcbiAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbl9tZXNzYWdlc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcclxuICAgICAgICAgICpuZ0lmPVwiZm9ybS5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uaGFzRXJyb3IodmFsaWRhdGlvbi50eXBlKSAmJiAoZm9ybS5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uZGlydHkgfHwgZm9ybS5nZXQoZm9ybUNvbnRyb2xOYW1lKT8udG91Y2hlZClcIj5cclxuICAgICAgICAgICYjODIyNjsge3sgdmFsaWRhdGlvbi5tZXNzYWdlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+Il19